Source code
Revision control
Copy as Markdown
Other Tools
// Don't allow cycles in the graph of the compartment "debugs" relation.
load(libdir + "asserts.js");
// trivial cycles
var dbg = new Debugger;
assertThrowsInstanceOf(function () { dbg.addDebuggee(this); }, TypeError);
assertThrowsInstanceOf(function () { new Debugger(this); }, TypeError);
// cycles of length 2
var d1 = newGlobal({newCompartment: true});
d1.top = this;
d1.eval("var dbg = new Debugger(top)");
assertThrowsInstanceOf(function () { dbg.addDebuggee(d1); }, TypeError);
assertThrowsInstanceOf(function () { new Debugger(d1); }, TypeError);
// cycles of length 3
var d2 = newGlobal({newCompartment: true});
d2.top = this;
d2.eval("var dbg = new Debugger(top.d1)");
assertThrowsInstanceOf(function () { dbg.addDebuggee(d2); }, TypeError);
assertThrowsInstanceOf(function () { new Debugger(d2); }, TypeError);