Source code

Revision control

Copy as Markdown

Other Tools

// |jit-test| skip-if: !wasmDebuggingEnabled()
// Tests that JS can be evaluated on wasm module scripts frames.
load(libdir + "wasm.js");
wasmRunWithDebugger(
'(module (memory 1 1)\
(global (mut f64) (f64.const 0.5))\
(global f32 (f32.const 3.5))\
(func (param i32) (local f64) \
nop \
f64.const 1.0 \
local.tee 1 \
global.set 0 \
nop) \
(export "test" (func 0))\
(data (i32.const 0) "Abc\\x2A"))',
undefined,
function ({dbg}) {
dbg.onEnterFrame = function (frame) {
if (frame.type != 'wasmcall') return;
var memoryContent = frame.eval('new DataView(memory0.buffer).getUint8(3)').return;
assertEq(memoryContent, 42, 'valid memory content is expected (0x2A)');
var global1AndParamSum = frame.eval('global1 + var0').return;
assertEq(global1AndParamSum, 3.5);
var stepNumber = 0;
frame.onStep = function () {
switch (stepNumber) {
case 0: // before nop
assertEq(frame.offset, 65);
assertEq(frame.eval('global0').return, 0.5);
assertEq(frame.eval('var1').return, 0.0);
break;
case 2: // after local.tee $var1
assertEq(frame.offset, 79);
assertEq(frame.eval('var1').return, 1.0);
break;
case 3: // after global.set $global0
assertEq(frame.offset, 80);
assertEq(frame.eval('global0').return, 1.0);
break;
}
stepNumber++;
};
};
},
function ({error}) {
assertEq(error, undefined);
}
);