summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/binaryen-c.cpp120
-rw-r--r--src/binaryen-c.h23
-rw-r--r--src/compiler-support.h3
-rw-r--r--src/js/binaryen.js-post.js40
4 files changed, 175 insertions, 11 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";
diff --git a/src/binaryen-c.h b/src/binaryen-c.h
index da5362d24..6bd61ed53 100644
--- a/src/binaryen-c.h
+++ b/src/binaryen-c.h
@@ -47,6 +47,8 @@
#include <stddef.h>
#include <stdint.h>
+#include "compiler-support.h"
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -109,6 +111,15 @@ BinaryenExpressionId BinaryenAtomicRMWId(void);
BinaryenExpressionId BinaryenAtomicWaitId(void);
BinaryenExpressionId BinaryenAtomicWakeId(void);
+// External kinds (call to get the value of each; you can cache them)
+
+typedef uint32_t BinaryenExternalKind;
+
+BinaryenExternalKind BinaryenExternalFunction(void);
+BinaryenExternalKind BinaryenExternalTable(void);
+BinaryenExternalKind BinaryenExternalMemory(void);
+BinaryenExternalKind BinaryenExternalGlobal(void);
+
// Modules
//
// Modules contain lists of functions, imports, exports, function types. The
@@ -410,14 +421,22 @@ void BinaryenRemoveFunction(BinaryenModuleRef module, const char* name);
typedef void* BinaryenImportRef;
-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);
+BinaryenImportRef BinaryenAddFunctionImport(BinaryenModuleRef module, const char* internalName, const char* externalModuleName, const char *externalBaseName, BinaryenFunctionTypeRef functionType);
+BinaryenImportRef BinaryenAddTableImport(BinaryenModuleRef module, const char* internalName, const char* externalModuleName, const char *externalBaseName);
+BinaryenImportRef BinaryenAddMemoryImport(BinaryenModuleRef module, const char* internalName, const char* externalModuleName, const char *externalBaseName);
+BinaryenImportRef BinaryenAddGlobalImport(BinaryenModuleRef module, const char* internalName, const char* externalModuleName, const char *externalBaseName, BinaryenType globalType);
void BinaryenRemoveImport(BinaryenModuleRef module, const char* internalName);
// Exports
typedef void* BinaryenExportRef;
-BinaryenExportRef BinaryenAddExport(BinaryenModuleRef module, const char* internalName, const char* externalName);
+WASM_DEPRECATED BinaryenExportRef BinaryenAddExport(BinaryenModuleRef module, const char* internalName, const char* externalName);
+BinaryenExportRef BinaryenAddFunctionExport(BinaryenModuleRef module, const char* internalName, const char* externalName);
+BinaryenExportRef BinaryenAddTableExport(BinaryenModuleRef module, const char* internalName, const char* externalName);
+BinaryenExportRef BinaryenAddMemoryExport(BinaryenModuleRef module, const char* internalName, const char* externalName);
+BinaryenExportRef BinaryenAddGlobalExport(BinaryenModuleRef module, const char* internalName, const char* externalName);
void BinaryenRemoveExport(BinaryenModuleRef module, const char* externalName);
// Globals
diff --git a/src/compiler-support.h b/src/compiler-support.h
index f105271b5..5365aa23a 100644
--- a/src/compiler-support.h
+++ b/src/compiler-support.h
@@ -41,10 +41,13 @@
#ifdef __GNUC__
#define WASM_NORETURN __attribute__((noreturn))
+#define WASM_DEPRECATED __attribute__((deprecated))
#elif defined(_MSC_VER)
#define WASM_NORETURN __declspec(noreturn)
+#define WASM_DEPRECATED __declspec(deprecated)
#else
#define WASM_NORETURN
+#define WASM_DEPRECATED
#endif
// The code might contain TODOs or stubs that read some values but do nothing
diff --git a/src/js/binaryen.js-post.js b/src/js/binaryen.js-post.js
index c6313f2d7..f846b670a 100644
--- a/src/js/binaryen.js-post.js
+++ b/src/js/binaryen.js-post.js
@@ -1034,9 +1034,25 @@
return Module['_BinaryenAddGlobal'](module, strToStack(name), type, mutable, init);
});
}
- this['addImport'] = function(internalName, externalModuleName, externalBaseName, type) {
+ this['addImport'] = // deprecated
+ this['addFunctionImport'] = function(internalName, externalModuleName, externalBaseName, functionType) {
return preserveStack(function() {
- return Module['_BinaryenAddImport'](module, strToStack(internalName), strToStack(externalModuleName), strToStack(externalBaseName), type);
+ return Module['_BinaryenAddFunctionImport'](module, strToStack(internalName), strToStack(externalModuleName), strToStack(externalBaseName), functionType);
+ });
+ };
+ this['addTableImport'] = function(internalName, externalModuleName, externalBaseName) {
+ return preserveStack(function() {
+ return Module['_BinaryenAddTableImport'](module, strToStack(internalName), strToStack(externalModuleName), strToStack(externalBaseName));
+ });
+ };
+ this['addMemoryImport'] = function(internalName, externalModuleName, externalBaseName) {
+ return preserveStack(function() {
+ return Module['_BinaryenAddMemoryImport'](module, strToStack(internalName), strToStack(externalModuleName), strToStack(externalBaseName));
+ });
+ };
+ this['addGlobalImport'] = function(internalName, externalModuleName, externalBaseName, globalType) {
+ return preserveStack(function() {
+ return Module['_BinaryenAddGlobalImport'](module, strToStack(internalName), strToStack(externalModuleName), strToStack(externalBaseName), globalType);
});
};
this['removeImport'] = function(internalName) {
@@ -1044,9 +1060,25 @@
return Module['_BinaryenRemoveImport'](module, strToStack(internalName));
});
};
- this['addExport'] = function(internalName, externalName) {
+ this['addExport'] = // deprecated
+ this['addFunctionExport'] = function(internalName, externalName) {
+ return preserveStack(function() {
+ return Module['_BinaryenAddFunctionExport'](module, strToStack(internalName), strToStack(externalName));
+ });
+ };
+ this['addTableExport'] = function(internalName, externalName) {
+ return preserveStack(function() {
+ return Module['_BinaryenAddTableExport'](module, strToStack(internalName), strToStack(externalName));
+ });
+ };
+ this['addMemoryExport'] = function(internalName, externalName) {
+ return preserveStack(function() {
+ return Module['_BinaryenAddMemoryExport'](module, strToStack(internalName), strToStack(externalName));
+ });
+ };
+ this['addGlobalExport'] = function(internalName, externalName) {
return preserveStack(function() {
- return Module['_BinaryenAddExport'](module, strToStack(internalName), strToStack(externalName));
+ return Module['_BinaryenAddGlobalExport'](module, strToStack(internalName), strToStack(externalName));
});
};
this['removeExport'] = function(externalName) {