// |jit-test| test-also=--wasm-compiler=optimizing; skip-if: !wasmDebuggingEnabled() // Tests that wasm module scripts raises onEnterFrame and onLeaveFrame events. load(libdir + "wasm.js"); // Checking if we stop at every wasm instruction during step. var onEnterFrameCalled, onLeaveFrameCalled, onStepCalled; wasmRunWithDebugger( '(module (func (nop) (nop)) (export "test" (func 0)))', undefined, function ({dbg}) { onEnterFrameCalled = 0; onLeaveFrameCalled = 0; onStepCalled = []; dbg.onEnterFrame = function (frame) { if (frame.type != 'wasmcall') return; onEnterFrameCalled++; frame.onStep = function () { onStepCalled.push(frame.offset); }; frame.onPop = function () { onLeaveFrameCalled++; }; }; }, function ({error}) { assertEq(error, undefined); assertEq(onEnterFrameCalled, 1); assertEq(onLeaveFrameCalled, 1); assertEq(onStepCalled.length, 2); assertEq(onStepCalled[0] > 0, true); // The onStepCalled offsets are in ascending order. assertEq(onStepCalled[0] < onStepCalled[1], true); } ); // Checking if step mode was disabled after debugger has been detached. wasmRunWithDebugger( '(module (func (nop) (nop)) (export "test" (func 0)))', undefined, function ({dbg, g}) { onEnterFrameCalled = 0; onLeaveFrameCalled = 0; onStepCalled = []; dbg.onEnterFrame = function (frame) { if (frame.type != 'wasmcall') return; onEnterFrameCalled++; frame.onStep = function () { onStepCalled.push(frame.offset); }; frame.onPop = function () { onLeaveFrameCalled++; }; dbg.removeDebuggee(g); }; }, function ({error}) { assertEq(error, undefined); assertEq(onEnterFrameCalled, 1); assertEq(onLeaveFrameCalled, 0); assertEq(onStepCalled.length, 0); } );