tor-browser

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

breakpoint-07.js (1190B)


      1 // Code runs fine if do-nothing breakpoints are set on every line.
      2 
      3 var g = newGlobal({newCompartment: true});
      4 var src = ("var line0 = Error().lineNumber;\n" +
      5           "function gcd(a, b) {\n" +       // line0 + 1
      6           "    if (a > b)\n" +             // line0 + 2
      7           "            return gcd(b, a);\n" +  // line0 + 3
      8           "    var c = b % a;\n" +         // line0 + 4
      9           "    if (c === 0)\n" +           // line0 + 5
     10           "            return a;\n" +          // line0 + 6
     11           "    return gcd(c, a);\n" +      // line0 + 7
     12           "}\n");                          // line0 + 8
     13 g.eval(src);
     14 
     15 var dbg = Debugger(g);
     16 var hits = 0 ;
     17 dbg.onDebuggerStatement = function (frame) {
     18    var s = frame.eval("gcd").return.script;
     19    var offs;
     20    for (var lineno = g.line0 + 2; (offs = s.getLineOffsets(lineno)).length > 0; lineno++) {
     21        for (var i = 0; i < offs.length; i++)
     22            s.setBreakpoint(offs[i], {hit: function (f) { hits++; }});
     23    }
     24    assertEq(lineno > g.line0 + 7, true);
     25    assertEq(lineno <= g.line0 + 9, true);
     26 };
     27 
     28 g.eval("debugger;");
     29 assertEq(g.gcd(31 * 7 * 5 * 3 * 2, 11 * 3 * 3 * 2), 6);
     30 assertEq(hits >= 18, true);