gc-10.js (601B)
1 // Debugger.Frame objects should not be GC'd when doing so would have observable 2 // effects. 3 4 var g = newGlobal({ newCompartment: true }); 5 6 var log = ''; 7 var saved; 8 9 new Debugger(g).onDebuggerStatement = function (frame) { 10 11 // Having a live onDebuggerStatement hook will (correctly) cause a Debugger to 12 // be retained, even if it is otherwise unreachable. 13 this.onDebuggerStatement = undefined; 14 15 // Give this Debugger.Frame an observable effect. It should not be GC'd. 16 frame.onPop = function () { 17 log += 'p'; 18 } 19 } 20 21 g.parent = this; 22 23 g.eval(` 24 debugger; 25 gc(); 26 `); 27 28 assertEq(log, 'p');