Source code
Revision control
Copy as Markdown
Other Tools
// |jit-test| skip-if: !wasmJSPromiseIntegrationEnabled()
// Reading Debugger.Frame.offset on a wasm frame while JSPI is active must not
// crash. The activation contains non-debug-enabled builtin module frames;
// wasmUpdateBytecodeOffset must skip them before calling debugFrame().
var g = newGlobal({newCompartment: true});
var dbg = new Debugger(g);
var grabbed = [];
dbg.onEnterFrame = function(frame) {
if (frame.type === "wasmcall") grabbed.push(frame);
for (var i = 0; i < grabbed.length; i++) {
try { if (grabbed[i].onStack) grabbed[i].offset; } catch (e) {}
}
};
g.eval(`
function susp(){ return Promise.resolve(0); }
var code = wasmTextToBinary('(module (import "e" "f" (func $f (result i32))) (func $g (export "g") (param i32) (result i32) (drop (call $f)) (call $f)))');
var inst = new WebAssembly.Instance(new WebAssembly.Module(code), {e:{f: new WebAssembly.Suspending(susp)}});
var prom = WebAssembly.promising(inst.exports.g);
this.go = function(){ return prom(1); };
`);
for (var k = 0; k < 100; k++) { g.go(); drainJobQueue(); }