summaryrefslogtreecommitdiff
path: root/src/binaryen-c.cpp
diff options
context:
space:
mode:
authorDaniel Wirtz <dcode@dcode.io>2017-11-22 18:35:45 +0100
committerAlon Zakai <alonzakai@gmail.com>2017-11-22 09:35:45 -0800
commit94cbe63149248e251580ef95a6d3a31faf00a238 (patch)
treeafce67e1b95f29eccac259f156185e982d6e3bb0 /src/binaryen-c.cpp
parent13ec76dfbc1c72a5e77d6a33fca5bf349308162d (diff)
downloadbinaryen-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.cpp120
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";