summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/debug/onEnterFrame-generator-02.js
blob: 5aa49a580d6b57f235b709557e5714996ff9495a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// onEnterFrame fires after the [[GeneratorState]] is set to "executing".
//
// This test checks that Debugger doesn't accidentally make it possible to
// reenter a generator frame that's already on the stack. (Also tests a fun
// corner case in baseline debug-mode OSR.)

load(libdir + "asserts.js");

let g = newGlobal({newCompartment: true});
g.eval('function* f() { yield 1; yield 2; }');
let dbg = Debugger(g);
let genObj = null;
let hits = 0;
dbg.onEnterFrame = frame => {
    // The first time onEnterFrame fires, there is no generator object, so
    // there's nothing to test. The generator object doesn't exist until
    // JSOP_GENERATOR is reached, right before the initial yield.
    if (genObj !== null) {
        dbg.removeDebuggee(g);  // avoid the DebuggeeWouldRun exception
        assertThrowsInstanceOf(() => genObj.next(), g.TypeError);
        dbg.addDebuggee(g);
        hits++;
    }
};
genObj = g.f();
for (let x of genObj) {}
assertEq(hits, 3);