@@ -137,6 +137,13 @@ BinaryenExpressionId BinaryenAtomicRMWId(void) { return Expression::Id::AtomicRM
137137BinaryenExpressionId BinaryenAtomicWaitId (void ) { return Expression::Id::AtomicWaitId; }
138138BinaryenExpressionId BinaryenAtomicWakeId (void ) { return Expression::Id::AtomicWakeId; }
139139
140+ // External kinds
141+
142+ BinaryenExternalKind BinaryenExternalFunction (void ) { return static_cast <BinaryenExternalKind>(ExternalKind::Function); }
143+ BinaryenExternalKind BinaryenExternalTable (void ) { return static_cast <BinaryenExternalKind>(ExternalKind::Table); }
144+ BinaryenExternalKind BinaryenExternalMemory (void ) { return static_cast <BinaryenExternalKind>(ExternalKind::Memory); }
145+ BinaryenExternalKind BinaryenExternalGlobal (void ) { return static_cast <BinaryenExternalKind>(ExternalKind::Global); }
146+
140147// Modules
141148
142149BinaryenModuleRef BinaryenModuleCreate (void ) {
@@ -946,46 +953,149 @@ BinaryenGlobalRef BinaryenAddGlobal(BinaryenModuleRef module, const char* name,
946953
947954// Imports
948955
949- BinaryenImportRef BinaryenAddImport (BinaryenModuleRef module , const char * internalName, const char * externalModuleName, const char *externalBaseName, BinaryenFunctionTypeRef type) {
956+ WASM_DEPRECATED BinaryenImportRef BinaryenAddImport (BinaryenModuleRef module , const char * internalName, const char * externalModuleName, const char *externalBaseName, BinaryenFunctionTypeRef type) {
957+ return BinaryenAddFunctionImport (module , internalName, externalModuleName, externalBaseName, type);
958+ }
959+ BinaryenImportRef BinaryenAddFunctionImport (BinaryenModuleRef module , const char * internalName, const char * externalModuleName, const char *externalBaseName, BinaryenFunctionTypeRef functionType) {
950960 if (tracing) {
951- std::cout << " BinaryenAddImport (the_module, \" " << internalName << " \" , \" " << externalModuleName << " \" , \" " << externalBaseName << " \" , functionTypes[" << functionTypes[type ] << " ]);\n " ;
961+ std::cout << " BinaryenAddFunctionImport (the_module, \" " << internalName << " \" , \" " << externalModuleName << " \" , \" " << externalBaseName << " \" , functionTypes[" << functionTypes[functionType ] << " ]);\n " ;
952962 }
953963
954964 auto * wasm = (Module*)module ;
955965 auto * ret = new Import ();
956966 ret->name = internalName;
957967 ret->module = externalModuleName;
958968 ret->base = externalBaseName;
959- ret->functionType = ((FunctionType*)type )->name ;
969+ ret->functionType = ((FunctionType*)functionType )->name ;
960970 ret->kind = ExternalKind::Function;
961971 wasm->addImport (ret);
962972 return ret;
963973}
974+ BinaryenImportRef BinaryenAddTableImport (BinaryenModuleRef module , const char * internalName, const char * externalModuleName, const char * externalBaseName) {
975+ if (tracing) {
976+ std::cout << " BinaryenAddTableImport(the_module, \" " << internalName << " \" , \" " << externalModuleName << " \" , \" " << externalBaseName << " \" );\n " ;
977+ }
978+
979+ auto * wasm = (Module*)module ;
980+ auto * ret = new Import ();
981+ ret->name = internalName;
982+ ret->module = externalModuleName;
983+ ret->base = externalBaseName;
984+ ret->kind = ExternalKind::Table;
985+ if (wasm->table .name == ret->name ) {
986+ wasm->table .imported = true ;
987+ }
988+ wasm->addImport (ret);
989+ return ret;
990+ }
991+ BinaryenImportRef BinaryenAddMemoryImport (BinaryenModuleRef module , const char * internalName, const char * externalModuleName, const char * externalBaseName) {
992+ if (tracing) {
993+ std::cout << " BinaryenAddMemoryImport(the_module, \" " << internalName << " \" , \" " << externalModuleName << " \" , \" " << externalBaseName << " \" );\n " ;
994+ }
995+
996+ auto * wasm = (Module*)module ;
997+ auto * ret = new Import ();
998+ ret->name = internalName;
999+ ret->module = externalModuleName;
1000+ ret->base = externalBaseName;
1001+ ret->kind = ExternalKind::Memory;
1002+ if (wasm->memory .name == ret->name ) {
1003+ wasm->memory .imported = true ;
1004+ }
1005+ wasm->addImport (ret);
1006+ return ret;
1007+ }
1008+ BinaryenImportRef BinaryenAddGlobalImport (BinaryenModuleRef module , const char * internalName, const char * externalModuleName, const char * externalBaseName, BinaryenType globalType) {
1009+ if (tracing) {
1010+ std::cout << " BinaryenAddGlobalImport(the_module, \" " << internalName << " \" , \" " << externalModuleName << " \" , \" " << externalBaseName << " \" , " << globalType << " );\n " ;
1011+ }
9641012
1013+ auto * wasm = (Module*)module ;
1014+ auto * ret = new Import ();
1015+ ret->name = internalName;
1016+ ret->module = externalModuleName;
1017+ ret->base = externalBaseName;
1018+ ret->globalType = WasmType (globalType);
1019+ ret->kind = ExternalKind::Global;
1020+ wasm->addImport (ret);
1021+ return ret;
1022+ }
9651023void BinaryenRemoveImport (BinaryenModuleRef module , const char * internalName) {
9661024 if (tracing) {
9671025 std::cout << " BinaryenRemoveImport(the_module, \" " << internalName << " \" );\n " ;
9681026 }
9691027
9701028 auto * wasm = (Module*)module ;
1029+ auto * import = wasm->getImport (internalName);
1030+ if (import ->kind == ExternalKind::Table) {
1031+ if (import ->name == wasm->table .name ) {
1032+ wasm->table .imported = false ;
1033+ }
1034+ } else if (import ->kind == ExternalKind::Memory) {
1035+ if (import ->name == wasm->memory .name ) {
1036+ wasm->memory .imported = false ;
1037+ }
1038+ }
9711039 wasm->removeImport (internalName);
9721040}
9731041
9741042// Exports
9751043
976- BinaryenExportRef BinaryenAddExport (BinaryenModuleRef module , const char * internalName, const char * externalName) {
1044+ WASM_DEPRECATED BinaryenExportRef BinaryenAddExport (BinaryenModuleRef module , const char * internalName, const char * externalName) {
1045+ return BinaryenAddFunctionExport (module , internalName, externalName);
1046+ }
1047+ BinaryenExportRef BinaryenAddFunctionExport (BinaryenModuleRef module , const char * internalName, const char * externalName) {
1048+ if (tracing) {
1049+ std::cout << " BinaryenAddFunctionExport(the_module, \" " << internalName << " \" , \" " << externalName << " \" );\n " ;
1050+ }
1051+
1052+ auto * wasm = (Module*)module ;
1053+ auto * ret = new Export ();
1054+ ret->value = internalName;
1055+ ret->name = externalName;
1056+ ret->kind = ExternalKind::Function;
1057+ wasm->addExport (ret);
1058+ return ret;
1059+ }
1060+ BinaryenExportRef BinaryenAddTableExport (BinaryenModuleRef module , const char * internalName, const char * externalName) {
9771061 if (tracing) {
978- std::cout << " BinaryenAddExport (the_module, \" " << internalName << " \" , \" " << externalName << " \" );\n " ;
1062+ std::cout << " BinaryenAddTableExport (the_module, \" " << internalName << " \" , \" " << externalName << " \" );\n " ;
9791063 }
9801064
9811065 auto * wasm = (Module*)module ;
9821066 auto * ret = new Export ();
9831067 ret->value = internalName;
9841068 ret->name = externalName;
1069+ ret->kind = ExternalKind::Table;
9851070 wasm->addExport (ret);
9861071 return ret;
9871072}
1073+ BinaryenExportRef BinaryenAddMemoryExport (BinaryenModuleRef module , const char * internalName, const char * externalName) {
1074+ if (tracing) {
1075+ std::cout << " BinaryenAddMemoryExport(the_module, \" " << internalName << " \" , \" " << externalName << " \" );\n " ;
1076+ }
9881077
1078+ auto * wasm = (Module*)module ;
1079+ auto * ret = new Export ();
1080+ ret->value = internalName;
1081+ ret->name = externalName;
1082+ ret->kind = ExternalKind::Memory;
1083+ wasm->addExport (ret);
1084+ return ret;
1085+ }
1086+ BinaryenExportRef BinaryenAddGlobalExport (BinaryenModuleRef module , const char * internalName, const char * externalName) {
1087+ if (tracing) {
1088+ std::cout << " BinaryenAddGlobalExport(the_module, \" " << internalName << " \" , \" " << externalName << " \" );\n " ;
1089+ }
1090+
1091+ auto * wasm = (Module*)module ;
1092+ auto * ret = new Export ();
1093+ ret->value = internalName;
1094+ ret->name = externalName;
1095+ ret->kind = ExternalKind::Global;
1096+ wasm->addExport (ret);
1097+ return ret;
1098+ }
9891099void BinaryenRemoveExport (BinaryenModuleRef module , const char * externalName) {
9901100 if (tracing) {
9911101 std::cout << " BinaryenRemoveExport(the_module, \" " << externalName << " \" );\n " ;
0 commit comments