From d4d5d35072b6d28c5f98b77a0d578e01bd25ef7e Mon Sep 17 00:00:00 2001 From: Hood Chatham Date: Thu, 22 Jun 2023 18:53:22 -0700 Subject: [PATCH 3/6] Changes for JSPI --- src/library.js | 2 +- src/library_dylink.js | 3 ++- src/parseTools.mjs | 2 +- src/preamble.js | 7 +++++++ 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/library.js b/src/library.js index 44531ee1d..f02e85ea2 100644 --- a/src/library.js +++ b/src/library.js @@ -1269,7 +1269,7 @@ addToLibrary({ #if EXCEPTION_STACK_TRACES throw new EmscriptenSjLj; #else - throw Infinity; + throw Module.wrapException(Infinity); #endif }, #elif !SUPPORT_LONGJMP diff --git a/src/library_dylink.js b/src/library_dylink.js index cea3ce05d..c3f3c2bbf 100644 --- a/src/library_dylink.js +++ b/src/library_dylink.js @@ -73,6 +73,7 @@ var LibraryDylink = { #if !DISABLE_EXCEPTION_CATCHING || SUPPORT_LONGJMP == 'emscripten' $createInvokeFunction__internal: true, $createInvokeFunction__deps: ['$dynCall', 'setThrew', '$stackSave', '$stackRestore'], + $createInvokeFunction__postset: "if(!Module.createInvoke) { Module.createInvoke = Module.createInvokeFunction; }", $createInvokeFunction: (sig) => { return function() { var sp = stackSave(); @@ -125,7 +126,7 @@ var LibraryDylink = { // Asm.js-style exception handling: invoke wrapper generation else if (symName.startsWith('invoke_')) { // Create (and cache) new invoke_ functions on demand. - sym = wasmImports[symName] = createInvokeFunction(symName.split('_')[1]); + sym = wasmImports[symName] = Module.createInvoke(symName.split('_')[1]); } #endif #if !DISABLE_EXCEPTION_CATCHING diff --git a/src/parseTools.mjs b/src/parseTools.mjs index 7f20321c3..118a32078 100644 --- a/src/parseTools.mjs +++ b/src/parseTools.mjs @@ -581,7 +581,7 @@ function makeThrow(excPtr) { } return `assert(false, '${assertInfo}');`; } - return `throw ${excPtr};`; + return `throw Module.wrapException(${excPtr});`; } function storeException(varName, excPtr) { diff --git a/src/preamble.js b/src/preamble.js index 18cf93959..57a7245ab 100644 --- a/src/preamble.js +++ b/src/preamble.js @@ -18,6 +18,10 @@ #include "runtime_pthread.js" #endif +if(!Module.wrapException) { + Module.wrapException = (e) => e; +} + #if RELOCATABLE {{{ makeModuleReceiveWithVar('dynamicLibraries', undefined, '[]', true) }}} #endif @@ -942,6 +946,9 @@ function getWasmImports() { // Receives the wasm imports, returns the exports. function createWasm() { var info = getWasmImports(); + if (Module.adjustWasmImports) { + Module.adjustWasmImports(info); + } // Load the wasm module and create an instance of using native support in the JS engine. // handle a generated wasm instance, receiving its exports and // performing other necessary setup -- 2.34.1