tor-browser

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

wasm-jseval.js (1781B)


      1 // |jit-test| skip-if: !wasmDebuggingEnabled()
      2 // Tests that JS can be evaluated on wasm module scripts frames.
      3 
      4 load(libdir + "wasm.js");
      5 
      6 wasmRunWithDebugger(
      7    '(module (memory 1 1)\
      8     (global (mut f64) (f64.const 0.5))\
      9     (global f32 (f32.const 3.5))\
     10     (func (param i32) (local f64) \
     11       nop \
     12       f64.const 1.0 \
     13       local.tee 1 \
     14       global.set 0 \
     15       nop) \
     16     (export "test" (func 0))\
     17     (data (i32.const 0) "Abc\\x2A"))',
     18    undefined,
     19    function ({dbg}) {
     20        dbg.onEnterFrame = function (frame) {
     21            if (frame.type != 'wasmcall') return;
     22 
     23            var memoryContent = frame.eval('new DataView(memory0.buffer).getUint8(3)').return;
     24            assertEq(memoryContent, 42, 'valid memory content is expected (0x2A)');
     25 
     26            var global1AndParamSum = frame.eval('global1 + var0').return;
     27            assertEq(global1AndParamSum, 3.5);
     28 
     29            var stepNumber = 0;
     30            frame.onStep = function () {
     31                switch (stepNumber) {
     32                  case 0: // before nop
     33                    assertEq(frame.offset, 65);
     34                    assertEq(frame.eval('global0').return, 0.5);
     35                    assertEq(frame.eval('var1').return, 0.0);
     36                    break;
     37                  case 2: // after local.tee $var1
     38                    assertEq(frame.offset, 79);
     39                    assertEq(frame.eval('var1').return, 1.0);
     40                    break;
     41                  case 3: // after global.set $global0
     42                    assertEq(frame.offset, 80);
     43                    assertEq(frame.eval('global0').return, 1.0);
     44                    break;
     45                }
     46                stepNumber++;
     47            };
     48        };
     49  },
     50  function ({error}) {
     51      assertEq(error, undefined);
     52  }
     53 );