summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/debug/Debugger-debuggees-16.js
blob: eebe99ba96f17ea3a188ef02608ef8a85b4ef5c1 (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
// GC can turn off debug mode in a compartment.

var dbgs = [];
var nonDebugGlobals = [];
var f = gc;
for (var i = 0; i < 4; i++) {
    // Create two globals, one debuggee.
    var g1 = newGlobal({newCompartment: true});
    var g2 = g1.eval("newGlobal('same-compartment')");
    var dbg = Debugger(g1);
    dbg.onDebuggerStatement = function () {};

    // Thread a chain of functions through the non-debuggee globals.
    g2.eval("function f() { return g() + 1; }");
    g2.g = f;
    f = g2.f;

    // Root the Debugger objects and non-debuggee globals.
    dbgs[i] = dbg;
    nonDebugGlobals[i] = g2;
}

// Call the chain of functions. At the end of the chain is gc. This will
// collect (some or all of) the debuggee globals, leaving non-debuggee
// globals. It should disable debug mode in those debuggee compartments.
nonDebugGlobals[nonDebugGlobals.length - 1].f();

gc();
nonDebugGlobals[0].g = function () { return 0; }
assertEq(nonDebugGlobals[nonDebugGlobals.length - 1].f(), nonDebugGlobals.length);