Source code

Revision control

Copy as Markdown

Other Tools

// Create a bunch of outstanding suspended stacks and test GC behaviour.
let promises = [];
function js_import() {
return Promise.resolve(13);
}
let wasm_js_import = new WebAssembly.Suspending(js_import);
var ins = wasmEvalText(`(module
(import "m" "import" (func (result externref)))
(global (export "outstanding") (mut i32) (i32.const 0))
(func (export "test") (param externref) (result externref)
local.get 0
global.get 0
i32.const 1
i32.add
global.set 0
call 0
drop
global.get 0
i32.const 1
i32.sub
global.set 0
return
)
)`, {
m: {
import: wasm_js_import
},
});
let wrapped_export = WebAssembly.promising(ins.exports.test);
assertEq(ins.exports.outstanding.value, 0);
let count = 100;
for (let i = 0; i < count; i++) {
wrapped_export({i}).then((x) => assertEq(x.i, i));
}
assertEq(ins.exports.outstanding.value, count);
gczeal(10, 2);
drainJobQueue();
assertEq(ins.exports.outstanding.value, 0);