wasm-getAllColumnOffsets.js (1426B)
1 // |jit-test| test-also=--wasm-compiler=optimizing; skip-if: !wasmDebuggingEnabled() 2 3 // Tests that wasm module scripts have column and line to bytecode offset 4 // information when source text is generated. 5 6 load(libdir + "asserts.js"); 7 8 // Checking if experimental format generates internal source map to binary file 9 // by querying debugger scripts getAllColumnOffsets. 10 function getAllOffsets(wast) { 11 var sandbox = newGlobal({newCompartment: true}); 12 var dbg = new Debugger(); 13 dbg.addDebuggee(sandbox); 14 dbg.allowWasmBinarySource = true; 15 sandbox.eval(` 16 var wasm = wasmTextToBinary('${wast}'); 17 var m = new WebAssembly.Instance(new WebAssembly.Module(wasm)); 18 `); 19 var wasmScript = dbg.findScripts().filter(s => s.format == 'wasm')[0]; 20 return wasmScript.getAllColumnOffsets(); 21 } 22 23 var offsets1 = getAllOffsets('(module \ 24 (func (nop)) \ 25 (func (drop (f32.sqrt (f32.add (f32.const 1.0) (f32.const 2.0))))) \ 26 )'); 27 28 // There shall be total 5 lines with single and unique offset per line. 29 var usedOffsets = Object.create(null), 30 usedLines = Object.create(null); 31 assertEq(offsets1.length, 5); 32 33 offsets1.forEach(({offset, lineNumber, columnNumber}) => { 34 assertEq(offset > 0, true); 35 assertEq(lineNumber > 0, true); 36 assertEq(columnNumber > 0, true); 37 usedOffsets[offset] = true; 38 usedLines[lineNumber] = true; 39 }); 40 assertEq(Object.keys(usedOffsets).length, 5); 41 assertEq(Object.keys(usedLines).length, 5);