diff options
author | Daniel Wirtz <dcode@dcode.io> | 2017-11-22 18:35:45 +0100 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2017-11-22 09:35:45 -0800 |
commit | 94cbe63149248e251580ef95a6d3a31faf00a238 (patch) | |
tree | afce67e1b95f29eccac259f156185e982d6e3bb0 /src/binaryen-c.cpp | |
parent | 13ec76dfbc1c72a5e77d6a33fca5bf349308162d (diff) | |
download | binaryen-94cbe63149248e251580ef95a6d3a31faf00a238.tar.gz binaryen-94cbe63149248e251580ef95a6d3a31faf00a238.tar.bz2 binaryen-94cbe63149248e251580ef95a6d3a31faf00a238.zip |
Provide AddImport/AddExport for each element in the C-API (#1292)
* Provide AddImport/AddExport for each element in the C-API
Diffstat (limited to 'src/binaryen-c.cpp')
-rw-r--r-- | src/binaryen-c.cpp | 120 |
1 files changed, 115 insertions, 5 deletions
diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp index 70c907666..bd7528fb9 100644 --- a/src/binaryen-c.cpp +++ b/src/binaryen-c.cpp @@ -137,6 +137,13 @@ BinaryenExpressionId BinaryenAtomicRMWId(void) { return Expression::Id::AtomicRM BinaryenExpressionId BinaryenAtomicWaitId(void) { return Expression::Id::AtomicWaitId; } BinaryenExpressionId BinaryenAtomicWakeId(void) { return Expression::Id::AtomicWakeId; } +// External kinds + +BinaryenExternalKind BinaryenExternalFunction(void) { return static_cast<BinaryenExternalKind>(ExternalKind::Function); } +BinaryenExternalKind BinaryenExternalTable(void) { return static_cast<BinaryenExternalKind>(ExternalKind::Table); } +BinaryenExternalKind BinaryenExternalMemory(void) { return static_cast<BinaryenExternalKind>(ExternalKind::Memory); } +BinaryenExternalKind BinaryenExternalGlobal(void) { return static_cast<BinaryenExternalKind>(ExternalKind::Global); } + // Modules BinaryenModuleRef BinaryenModuleCreate(void) { @@ -946,9 +953,12 @@ BinaryenGlobalRef BinaryenAddGlobal(BinaryenModuleRef module, const char* name, // Imports -BinaryenImportRef BinaryenAddImport(BinaryenModuleRef module, const char* internalName, const char* externalModuleName, const char *externalBaseName, BinaryenFunctionTypeRef type) { +WASM_DEPRECATED BinaryenImportRef BinaryenAddImport(BinaryenModuleRef module, const char* internalName, const char* externalModuleName, const char *externalBaseName, BinaryenFunctionTypeRef type) { + return BinaryenAddFunctionImport(module, internalName, externalModuleName, externalBaseName, type); +} +BinaryenImportRef BinaryenAddFunctionImport(BinaryenModuleRef module, const char* internalName, const char* externalModuleName, const char *externalBaseName, BinaryenFunctionTypeRef functionType) { if (tracing) { - std::cout << " BinaryenAddImport(the_module, \"" << internalName << "\", \"" << externalModuleName << "\", \"" << externalBaseName << "\", functionTypes[" << functionTypes[type] << "]);\n"; + std::cout << " BinaryenAddFunctionImport(the_module, \"" << internalName << "\", \"" << externalModuleName << "\", \"" << externalBaseName << "\", functionTypes[" << functionTypes[functionType] << "]);\n"; } auto* wasm = (Module*)module; @@ -956,36 +966,136 @@ BinaryenImportRef BinaryenAddImport(BinaryenModuleRef module, const char* intern ret->name = internalName; ret->module = externalModuleName; ret->base = externalBaseName; - ret->functionType = ((FunctionType*)type)->name; + ret->functionType = ((FunctionType*)functionType)->name; ret->kind = ExternalKind::Function; wasm->addImport(ret); return ret; } +BinaryenImportRef BinaryenAddTableImport(BinaryenModuleRef module, const char* internalName, const char* externalModuleName, const char* externalBaseName) { + if (tracing) { + std::cout << " BinaryenAddTableImport(the_module, \"" << internalName << "\", \"" << externalModuleName << "\", \"" << externalBaseName << "\");\n"; + } + + auto* wasm = (Module*)module; + auto* ret = new Import(); + ret->name = internalName; + ret->module = externalModuleName; + ret->base = externalBaseName; + ret->kind = ExternalKind::Table; + if (wasm->table.name == ret->name) { + wasm->table.imported = true; + } + wasm->addImport(ret); + return ret; +} +BinaryenImportRef BinaryenAddMemoryImport(BinaryenModuleRef module, const char* internalName, const char* externalModuleName, const char* externalBaseName) { + if (tracing) { + std::cout << " BinaryenAddMemoryImport(the_module, \"" << internalName << "\", \"" << externalModuleName << "\", \"" << externalBaseName << "\");\n"; + } + + auto* wasm = (Module*)module; + auto* ret = new Import(); + ret->name = internalName; + ret->module = externalModuleName; + ret->base = externalBaseName; + ret->kind = ExternalKind::Memory; + if (wasm->memory.name == ret->name) { + wasm->memory.imported = true; + } + wasm->addImport(ret); + return ret; +} +BinaryenImportRef BinaryenAddGlobalImport(BinaryenModuleRef module, const char* internalName, const char* externalModuleName, const char* externalBaseName, BinaryenType globalType) { + if (tracing) { + std::cout << " BinaryenAddGlobalImport(the_module, \"" << internalName << "\", \"" << externalModuleName << "\", \"" << externalBaseName << "\", " << globalType << ");\n"; + } + auto* wasm = (Module*)module; + auto* ret = new Import(); + ret->name = internalName; + ret->module = externalModuleName; + ret->base = externalBaseName; + ret->globalType = WasmType(globalType); + ret->kind = ExternalKind::Global; + wasm->addImport(ret); + return ret; +} void BinaryenRemoveImport(BinaryenModuleRef module, const char* internalName) { if (tracing) { std::cout << " BinaryenRemoveImport(the_module, \"" << internalName << "\");\n"; } auto* wasm = (Module*)module; + auto* import = wasm->getImport(internalName); + if (import->kind == ExternalKind::Table) { + if (import->name == wasm->table.name) { + wasm->table.imported = false; + } + } else if (import->kind == ExternalKind::Memory) { + if (import->name == wasm->memory.name) { + wasm->memory.imported = false; + } + } wasm->removeImport(internalName); } // Exports -BinaryenExportRef BinaryenAddExport(BinaryenModuleRef module, const char* internalName, const char* externalName) { +WASM_DEPRECATED BinaryenExportRef BinaryenAddExport(BinaryenModuleRef module, const char* internalName, const char* externalName) { + return BinaryenAddFunctionExport(module, internalName, externalName); +} +BinaryenExportRef BinaryenAddFunctionExport(BinaryenModuleRef module, const char* internalName, const char* externalName) { + if (tracing) { + std::cout << " BinaryenAddFunctionExport(the_module, \"" << internalName << "\", \"" << externalName << "\");\n"; + } + + auto* wasm = (Module*)module; + auto* ret = new Export(); + ret->value = internalName; + ret->name = externalName; + ret->kind = ExternalKind::Function; + wasm->addExport(ret); + return ret; +} +BinaryenExportRef BinaryenAddTableExport(BinaryenModuleRef module, const char* internalName, const char* externalName) { if (tracing) { - std::cout << " BinaryenAddExport(the_module, \"" << internalName << "\", \"" << externalName << "\");\n"; + std::cout << " BinaryenAddTableExport(the_module, \"" << internalName << "\", \"" << externalName << "\");\n"; } auto* wasm = (Module*)module; auto* ret = new Export(); ret->value = internalName; ret->name = externalName; + ret->kind = ExternalKind::Table; wasm->addExport(ret); return ret; } +BinaryenExportRef BinaryenAddMemoryExport(BinaryenModuleRef module, const char* internalName, const char* externalName) { + if (tracing) { + std::cout << " BinaryenAddMemoryExport(the_module, \"" << internalName << "\", \"" << externalName << "\");\n"; + } + auto* wasm = (Module*)module; + auto* ret = new Export(); + ret->value = internalName; + ret->name = externalName; + ret->kind = ExternalKind::Memory; + wasm->addExport(ret); + return ret; +} +BinaryenExportRef BinaryenAddGlobalExport(BinaryenModuleRef module, const char* internalName, const char* externalName) { + if (tracing) { + std::cout << " BinaryenAddGlobalExport(the_module, \"" << internalName << "\", \"" << externalName << "\");\n"; + } + + auto* wasm = (Module*)module; + auto* ret = new Export(); + ret->value = internalName; + ret->name = externalName; + ret->kind = ExternalKind::Global; + wasm->addExport(ret); + return ret; +} void BinaryenRemoveExport(BinaryenModuleRef module, const char* externalName) { if (tracing) { std::cout << " BinaryenRemoveExport(the_module, \"" << externalName << "\");\n"; |