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

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     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