Inject default imported function implementation

Just throws exception
This commit is contained in:
Yuta Saito 2024-05-07 21:28:24 +09:00
parent faee016aca
commit d487abb3b3
2 changed files with 17 additions and 6 deletions

File diff suppressed because one or more lines are too long

View File

@ -53,6 +53,7 @@ export const WasmRunner = (rawOptions: Options | false, SwiftRuntime: SwiftRunti
const createWasmImportObject = (
extraWasmImports: WebAssembly.Imports,
module: WebAssembly.Module,
): WebAssembly.Imports => {
const importObject: WebAssembly.Imports = {
wasi_snapshot_preview1: wasi.wasiImport,
@ -64,7 +65,6 @@ export const WasmRunner = (rawOptions: Options | false, SwiftRuntime: SwiftRunti
if (extraWasmImports) {
for (const moduleName in extraWasmImports) {
// importObject[moduleName] = extraWasmImports[moduleName];
if (!importObject[moduleName]) {
importObject[moduleName] = {};
}
@ -74,6 +74,17 @@ export const WasmRunner = (rawOptions: Options | false, SwiftRuntime: SwiftRunti
}
}
for (const importEntry of WebAssembly.Module.imports(module)) {
if (!importObject[importEntry.module]) {
importObject[importEntry.module] = {};
}
if (importEntry.kind == "function" && !importObject[importEntry.module][importEntry.name]) {
importObject[importEntry.module][importEntry.name] = () => {
throw new Error(`Imported function ${importEntry.module}.${importEntry.name} not implemented`);
}
}
}
return importObject;
};
@ -88,7 +99,7 @@ export const WasmRunner = (rawOptions: Options | false, SwiftRuntime: SwiftRunti
},
};
const module = await WebAssembly.compile(wasmBytes);
const importObject = createWasmImportObject(extraWasmImports);
const importObject = createWasmImportObject(extraWasmImports, module);
const instance = await WebAssembly.instantiate(module, importObject);
if (swift && instance.exports.swjs_library_version) {