tor-browser

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

Frame-onStep-15.js (1248B)


      1 // Test how stepping interacts with for(;;) statements.
      2 
      3 let g = newGlobal({newCompartment: true});
      4 
      5 // We want a for(;;) loop whose body is evaluated at least once, to
      6 // see whether the loop head is hit a second time.
      7 g.eval(`function f() {
      8  let x = 0;
      9  debugger;                     // +0
     10  for(;;) {                     // +1
     11    if (x++ == 1) break;        // +2
     12  }                             // +3
     13  debugger;                     // +4
     14 }`);
     15 
     16 let dbg = Debugger(g);
     17 
     18 function test(s, expected) {
     19  let result = '';
     20 
     21  dbg.onDebuggerStatement = function(frame) {
     22    // On the second debugger statement, we're done.
     23    dbg.onDebuggerStatement = function(frame) {
     24      frame.onStep = undefined;
     25    };
     26 
     27    let debugLine = frame.script.getOffsetLocation(frame.offset).lineNumber;
     28    frame.onStep = function() {
     29      // Only examine stops at entry points for the line.
     30      let lineNo = this.script.getOffsetLocation(this.offset).lineNumber;
     31      if (this.script.getLineOffsets(lineNo).indexOf(this.offset) < 0) {
     32        return undefined;
     33      }
     34 
     35      let delta = this.script.getOffsetLocation(this.offset).lineNumber - debugLine;
     36      result += delta;
     37    };
     38  };
     39  g.eval(s);
     40  assertEq(result, expected);
     41 }
     42 
     43 test('f()', '2124');