diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/binaryen-c.cpp | 120 | ||||
-rw-r--r-- | src/binaryen-c.h | 23 | ||||
-rw-r--r-- | src/compiler-support.h | 3 | ||||
-rw-r--r-- | src/js/binaryen.js-post.js | 40 |
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) { |