tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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);