diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-06-12 05:43:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-06-12 05:43:14 +0000 |
commit | 8dd16259287f58f9273002717ec4d27e97127719 (patch) | |
tree | 3863e62a53829a84037444beab3abd4ed9dfc7d0 /js/src/jit-test/tests/wasm/js-promise-integration/gc-2.js | |
parent | Releasing progress-linux version 126.0.1-1~progress7.99u1. (diff) | |
download | firefox-8dd16259287f58f9273002717ec4d27e97127719.tar.xz firefox-8dd16259287f58f9273002717ec4d27e97127719.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-2.js')
-rw-r--r-- | js/src/jit-test/tests/wasm/js-promise-integration/gc-2.js | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/wasm/js-promise-integration/gc-2.js b/js/src/jit-test/tests/wasm/js-promise-integration/gc-2.js new file mode 100644 index 0000000000..d17539807e --- /dev/null +++ b/js/src/jit-test/tests/wasm/js-promise-integration/gc-2.js @@ -0,0 +1,69 @@ +// Example from the proposal. + +gczeal(2,5); + +var compute_delta = (i) => Promise.resolve(i / 100 || 1); + +var suspending_compute_delta = new WebAssembly.Function( + { parameters: ['externref', 'i32'], results: ['f64'] }, + compute_delta, + { suspending: "first" } +); + +var ins = wasmEvalText(`(module + (import "js" "init_state" (func $init_state (result f64))) + (import "js" "compute_delta" + (func $compute_delta_import (param externref) (param i32) (result f64))) + + (global $suspender (mut externref) (ref.null extern)) + (global $state (mut f64) (f64.const nan)) + (func $init (global.set $state (call $init_state))) + (start $init) + + (func $compute_delta (param i32) (result f64) + (local $suspender_copy externref) + (;return (f64.const 0.3);) + (;unreachable;) + (global.get $suspender) + (local.tee $suspender_copy) + (local.get 0) + (call $compute_delta_import) + (local.get $suspender_copy) + (global.set $suspender) + (return) + ) + (func $get_state (export "get_state") (result f64) (global.get $state)) + (func $update_state (param i32) (result f64) + (global.set $state (f64.add + (global.get $state) (call $compute_delta (local.get 0)))) + (global.get $state) + ) + + (func (export "update_state_export") + (param $suspender externref) (param i32) (result f64) + (local.get $suspender) + (global.set $suspender) + (local.get 1) + (call $update_state) + (return) + ) +)`, { + js: { + init_state() { return 0; }, + compute_delta: suspending_compute_delta, + }, +}); + +var update_state = new WebAssembly.Function( + { parameters: ['i32'], results: ['externref'] }, + ins.exports.update_state_export, + { promising: "first" } +); + +var res = update_state(4); +var tasks = res.then((r) => { + print(r); + assertEq(ins.exports.get_state(), .04); +}); + +assertEq(ins.exports.get_state(), 0); |