summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/debug/Debugger-debuggees-31.js
blob: 0eb7f6521256339fdd8a9433fb45e88a7440389c (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
28
29
30
// |jit-test| skip-if: !hasFunction["gczeal"]
// Removing and adding debuggees during an incremental sweep should not confuse
// the generatorFrames map.

// Let any ongoing incremental GC finish, and then clear any ambient zeal
// settings established by the harness (the JS_GC_ZEAL env var, shell arguments,
// etc.)
gczeal(0);

let g = newGlobal({newCompartment: true});
g.eval('function* f() { yield 123; }');

let dbg = Debugger(g);
dbg.onEnterFrame = frame => {
    dbg.removeDebuggee(g);
    dbg.addDebuggee(g);
};

// Select GCZeal mode 10 (IncrementalMultipleSlices: Incremental GC in many
// slices) and use long slices, to make sure that the debuggee removal occurs
// during a slice.
gczeal(10, 0);
gcslice(1);
while (gcstate() !== "NotAcctive" && gcstate() !== "Sweep") {
  gcslice(1000);
}

let genObj = g.f();
genObj.return();
assertEq(gcstate(), "Sweep");