summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/debug/Debugger-debuggees-16.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/debug/Debugger-debuggees-16.js')
-rw-r--r--js/src/jit-test/tests/debug/Debugger-debuggees-16.js30
1 files changed, 30 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/debug/Debugger-debuggees-16.js b/js/src/jit-test/tests/debug/Debugger-debuggees-16.js
new file mode 100644
index 000000000..4221cb827
--- /dev/null
+++ b/js/src/jit-test/tests/debug/Debugger-debuggees-16.js
@@ -0,0 +1,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();
+ 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);