summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/wasm/js-promise-integration/gc.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-12 05:35:37 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-12 05:35:37 +0000
commita90a5cba08fdf6c0ceb95101c275108a152a3aed (patch)
tree532507288f3defd7f4dcf1af49698bcb76034855 /js/src/jit-test/tests/wasm/js-promise-integration/gc.js
parentAdding debian version 126.0.1-1. (diff)
downloadfirefox-a90a5cba08fdf6c0ceb95101c275108a152a3aed.tar.xz
firefox-a90a5cba08fdf6c0ceb95101c275108a152a3aed.zip
Merging upstream version 127.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'js/src/jit-test/tests/wasm/js-promise-integration/gc.js')
-rw-r--r--js/src/jit-test/tests/wasm/js-promise-integration/gc.js67
1 files changed, 67 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/wasm/js-promise-integration/gc.js b/js/src/jit-test/tests/wasm/js-promise-integration/gc.js
new file mode 100644
index 0000000000..c688b99cb5
--- /dev/null
+++ b/js/src/jit-test/tests/wasm/js-promise-integration/gc.js
@@ -0,0 +1,67 @@
+// Test if we can trace roots on the alternative stack.
+
+let i = 0;
+function js_import() {
+ return Promise.resolve({i: ++i});
+};
+let wasm_js_import = new WebAssembly.Function(
+ {parameters: ['externref'], results: ['externref']},
+ js_import,
+ {suspending: 'first'});
+
+let wasm_gc_import = new WebAssembly.Function(
+ {parameters: ['externref'], results: []},
+ async () => { gc(); },
+ {suspending: 'first'});
+
+var ins = wasmEvalText(`(module
+ (import "m" "import"
+ (func (param externref) (result externref)))
+ (import "m" "gc" (func (param externref)))
+ (import "m" "conv"
+ (func (param externref) (result i32)))
+
+ (global (export "g") (mut i32) (i32.const 0))
+
+ (func (export "test") (param externref)
+ (local i32)
+ i32.const 5
+ local.set 1
+ loop
+ local.get 0
+ call 0
+ local.get 0
+ call 1
+ call 2
+ global.get 0
+ i32.add
+ global.set 0
+ local.get 1
+ i32.const 1
+ i32.sub
+ local.tee 1
+ br_if 0
+ end
+ )
+
+)`, {
+ m: {
+ import: wasm_js_import,
+ gc: wasm_gc_import,
+ conv: ({i}) => i,
+ },
+});
+
+
+let wrapped_export = new WebAssembly.Function(
+ {parameters:[], results:['externref']},
+ ins.exports.test,
+ {promising : "first"}
+);
+
+let export_promise = wrapped_export();
+assertEq(0, ins.exports.g.value);
+assertEq(true, export_promise instanceof Promise);
+export_promise.then(() =>
+ assertEq(15, ins.exports.g.value)
+);