tor-browser

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

wasm-15.js (2976B)


      1 // |jit-test| test-also=--wasm-compiler=optimizing; skip-if: !wasmDebuggingEnabled()
      2 
      3 // Tests that wasm module scripts raises onEnterFrame and onLeaveFrame events in
      4 // wasm return calls.
      5 
      6 load(libdir + "wasm.js");
      7 
      8 // Checking if enter/leave frame at return_call.
      9 var onEnterFrameCalled, onLeaveFrameCalled, onStepCalled;
     10 wasmRunWithDebugger(
     11    '(module (func) (func (return_call 0)) (func (call 1)) (export "test" (func 2)))',
     12    undefined,
     13    function ({dbg}) {
     14        onEnterFrameCalled = 0;
     15        onLeaveFrameCalled = 0;
     16        onStepCalled = [];
     17        dbg.onEnterFrame = function (frame) {
     18            if (frame.type != 'wasmcall') return;
     19            onEnterFrameCalled++;
     20            frame.onStep = function () {
     21                onStepCalled.push(frame.offset);
     22            };
     23            frame.onPop = function () {
     24                onLeaveFrameCalled++;
     25            };
     26        };
     27  },
     28  function ({error}) {
     29      assertEq(error, undefined);
     30      assertEq(onEnterFrameCalled, 3);
     31      assertEq(onLeaveFrameCalled, 3);
     32      assertEq(onStepCalled.length, 4);
     33      assertEq(onStepCalled[0] > 0, true);
     34  }
     35 );
     36 
     37 // Checking if enter/leave frame at return_call_indirect.
     38 wasmRunWithDebugger(
     39    '(module (func) (func (return_call_indirect (i32.const 0))) (func (call 1)) (table 1 1 funcref) (elem (i32.const 0) 0) (export "test" (func 2)))',
     40    undefined,
     41    function ({dbg}) {
     42        onEnterFrameCalled = 0;
     43        onLeaveFrameCalled = 0;
     44        onStepCalled = [];
     45        dbg.onEnterFrame = function (frame) {
     46            if (frame.type != 'wasmcall') return;
     47            onEnterFrameCalled++;
     48            frame.onStep = function () {
     49                onStepCalled.push(frame.offset);
     50            };
     51            frame.onPop = function () {
     52                onLeaveFrameCalled++;
     53            };
     54        };
     55  },
     56  function ({error}) {
     57      assertEq(error, undefined);
     58      assertEq(onEnterFrameCalled, 3);
     59      assertEq(onLeaveFrameCalled, 3);
     60      assertEq(onStepCalled.length, 4);
     61      assertEq(onStepCalled[0] > 0, true);
     62  }
     63 );
     64 
     65 // Checking if enter/leave frame at return_call_ref.
     66 wasmRunWithDebugger(
     67    '(module (type $t (func)) (elem declare func 0) (func) (func (return_call_ref $t (ref.func 0))) (func (call 1)) (export "test" (func 2)))',
     68    undefined,
     69    function ({dbg}) {
     70        onEnterFrameCalled = 0;
     71        onLeaveFrameCalled = 0;
     72        onStepCalled = [];
     73        dbg.onEnterFrame = function (frame) {
     74            if (frame.type != 'wasmcall') return;
     75            onEnterFrameCalled++;
     76            frame.onStep = function () {
     77                onStepCalled.push(frame.offset);
     78            };
     79            frame.onPop = function () {
     80                onLeaveFrameCalled++;
     81            };
     82        };
     83  },
     84  function ({error}) {
     85      assertEq(error, undefined);
     86      assertEq(onEnterFrameCalled, 3);
     87      assertEq(onLeaveFrameCalled, 3);
     88      assertEq(onStepCalled.length, 5);
     89      assertEq(onStepCalled[0] > 0, true);
     90  }
     91 );