diff options
Diffstat (limited to 'js/src/jit-test/tests/debug/wasm-10.js')
-rw-r--r-- | js/src/jit-test/tests/debug/wasm-10.js | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/debug/wasm-10.js b/js/src/jit-test/tests/debug/wasm-10.js new file mode 100644 index 0000000000..6f43385bd3 --- /dev/null +++ b/js/src/jit-test/tests/debug/wasm-10.js @@ -0,0 +1,77 @@ +// |jit-test| test-also=--wasm-compiler=optimizing; skip-if: !wasmDebuggingEnabled() +// Tests that wasm module scripts has inspectable locals. + +load(libdir + "wasm.js"); +load(libdir + 'eqArrayHelper.js'); + +function monitorLocalValues(wast, lib, expected) { + function setupFrame(frame) { + var locals = {}; + framesLocals.push(locals); + frame.environment.names().forEach(n => { + locals[n] = [frame.environment.getVariable(n)]; + }); + frame.onStep = function () { + frame.environment.names().forEach(n => { + var prevValues = locals[n]; + if (!prevValues) + locals[n] = prevValues = [void 0]; + var value = frame.environment.getVariable(n); + if (prevValues[prevValues.length - 1] !== value) + prevValues.push(value); + }); + } + } + var framesLocals = []; + wasmRunWithDebugger(wast, lib, + function ({dbg}) { + dbg.onEnterFrame = function(frame) { + if (frame.type == "wasmcall") + setupFrame(frame); + } + }, + function ({error}) { + assertEq(error, undefined); + } + ); + assertEq(framesLocals.length, expected.length); + for (var i = 0; i < framesLocals.length; i++) { + var frameLocals = framesLocals[i]; + var expectedLocals = expected[i]; + var localsNames = Object.keys(frameLocals); + assertEq(localsNames.length, Object.keys(expectedLocals).length); + localsNames.forEach(n => { + assertEqArray(frameLocals[n], expectedLocals[n]); + }); + } +} + +monitorLocalValues( + '(module (func (nop) (nop)) (export "test" (func 0)))', + undefined, + [{}] +); +monitorLocalValues( + '(module (func (export "test") (local i32) (i32.const 1) (set_local 0)))', + undefined, + [{var0: [0, 1]}] +); +monitorLocalValues( + '(module (func (export "test") (local f32) (f32.const 1.5) (set_local 0)))', + undefined, + [{var0: [0, 1.5]}] +); +monitorLocalValues( + '(module (func (export "test") (local f64) (f64.const 42.25) (set_local 0)))', + undefined, + [{var0: [0, 42.25]}] +); +monitorLocalValues( + `(module + (func (param i32) (result i32) (get_local 0) (i32.const 2) (i32.add)) + (func (param i32) (local i32) (get_local 0) (call 0) (set_local 1)) + (func (export "test") (i32.const 1) (call 1)) +)`.replace(/\n/g, " "), + undefined, + [{}, {var0: [1], var1: [0, 3]}, {var0: [1]}] +); |