mirror of https://github.com/pyodide/pyodide.git
88 lines
2.8 KiB
Diff
88 lines
2.8 KiB
Diff
![]() |
From b8b4364d0529dcff8bc25f9e0f2549d97e03180c Mon Sep 17 00:00:00 2001
|
||
|
From: Hood Chatham <roberthoodchatham@gmail.com>
|
||
|
Date: Thu, 22 Jun 2023 18:53:22 -0700
|
||
|
Subject: [PATCH] Changes for JSPI
|
||
|
|
||
|
---
|
||
|
src/library.js | 2 +-
|
||
|
src/library_dylink.js | 3 ++-
|
||
|
src/parseTools.js | 2 +-
|
||
|
src/preamble.js | 7 +++++++
|
||
|
4 files changed, 11 insertions(+), 3 deletions(-)
|
||
|
|
||
|
diff --git a/src/library.js b/src/library.js
|
||
|
index 75c97e6eb..fbf5cf090 100644
|
||
|
--- a/src/library.js
|
||
|
+++ b/src/library.js
|
||
|
@@ -1223,7 +1223,7 @@ mergeInto(LibraryManager.library, {
|
||
|
#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 d96e6b425..eea49130c 100644
|
||
|
--- a/src/library_dylink.js
|
||
|
+++ b/src/library_dylink.js
|
||
|
@@ -92,7 +92,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
|
||
|
return {sym: sym, name: symName};
|
||
|
@@ -343,6 +343,7 @@ var LibraryDylink = {
|
||
|
#if !DISABLE_EXCEPTION_CATCHING || SUPPORT_LONGJMP == 'emscripten'
|
||
|
$createInvokeFunction__internal: true,
|
||
|
$createInvokeFunction__deps: ['$dynCall', 'setThrew'],
|
||
|
+ $createInvokeFunction__postset: "if(!Module.createInvoke) { Module.createInvoke = Module.createInvokeFunction; }",
|
||
|
$createInvokeFunction: function(sig) {
|
||
|
return function() {
|
||
|
var sp = stackSave();
|
||
|
diff --git a/src/parseTools.js b/src/parseTools.js
|
||
|
index 167767e0f..78626462b 100644
|
||
|
--- a/src/parseTools.js
|
||
|
+++ b/src/parseTools.js
|
||
|
@@ -527,7 +527,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 51783e5a5..1a8d7b496 100644
|
||
|
--- a/src/preamble.js
|
||
|
+++ b/src/preamble.js
|
||
|
@@ -14,6 +14,10 @@
|
||
|
// An online HTML version (which may be of a different version of Emscripten)
|
||
|
// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html
|
||
|
|
||
|
+if(!Module.wrapException) {
|
||
|
+ Module.wrapException = (e) => e;
|
||
|
+}
|
||
|
+
|
||
|
#if BENCHMARK
|
||
|
Module.realPrint = out;
|
||
|
out = err = () => {};
|
||
|
@@ -937,6 +941,9 @@ function instantiateAsync(binary, binaryFile, imports, callback) {
|
||
|
// Create the wasm instance.
|
||
|
// Receives the wasm imports, returns the exports.
|
||
|
function createWasm() {
|
||
|
+ if (Module.adjustWasmImports) {
|
||
|
+ Module.adjustWasmImports(wasmImports);
|
||
|
+ }
|
||
|
// prepare imports
|
||
|
var info = {
|
||
|
#if MINIFY_WASM_IMPORTED_MODULES
|
||
|
--
|
||
|
2.25.1
|
||
|
|