js/src/jit-test/tests/debug/breakpoint-11.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 // Setting a breakpoint in a generator function works, and we can
     2 // traverse the stack and evaluate expressions in the context of older
     3 // generator frames.
     5 var g = newGlobal();
     6 var dbg = Debugger(g);
     7 dbg.onDebuggerStatement = function (frame) {
     8     function hit(frame) {
     9         assertEq(frame.generator, true);
    10         assertEq(frame.older.generator, true);
    11         frame.older.eval("q += 16");
    12     }
    14     var s = frame.script;
    15     var offs = s.getLineOffsets(g.line0 + 9);
    16     for (var i = 0; i < offs.length; i++)
    17         s.setBreakpoint(offs[i], {hit: hit});
    18 };
    20 g.eval("line0 = Error().lineNumber;\n" +
    21        "function* g(x) {\n" +   // + 1
    22        "    var q = 10;\n" +    // + 2
    23        "    yield* x;\n" +      // + 3
    24        "    return q;\n" +      // + 4
    25        "}\n" +                  // + 5
    26        "function* range(n) {\n" + // + 6
    27        "    debugger;\n" +      // + 7
    28        "    for (var i = 0; i < n; i++)\n" + // + 8
    29        "        yield i;\n" +   // + 9  <-- breakpoint
    30        "    return;\n" + // so that line 9 only has the yield
    31        "}");
    33 g.eval("var iter = g(range(2))");
    34 g.eval("var first = iter.next().value");
    35 g.eval("var second = iter.next().value");
    36 g.eval("var third = iter.next().value");
    38 assertEq(g.first, 0);
    39 assertEq(g.second, 1);
    40 assertEq(g.third, 42);

mercurial