Source code
Revision control
Copy as Markdown
Other Tools
// Debugger.Frame objects should not be GC'd when doing so would have observable
// effects.
var g = newGlobal({ newCompartment: true });
var log = '';
var saved;
new Debugger(g).onDebuggerStatement = function (frame) {
// Having a live onDebuggerStatement hook will (correctly) cause a Debugger to
// be retained, even if it is otherwise unreachable.
this.onDebuggerStatement = undefined;
// Give this Debugger.Frame an observable effect. It should not be GC'd.
frame.onPop = function () {
log += 'p';
}
}
g.parent = this;
g.eval(`
debugger;
gc();
`);
assertEq(log, 'p');