| // Dispatching an event to a debugger must keep enough of it gc-alive to avoid |
| // crashing. |
| |
| var g = newGlobal(); |
| var hits; |
| |
| function addDebug() { |
| // The loop is here to defeat the conservative GC. :-\ |
| for (var i = 0; i < 4; i++) { |
| var dbg = new Debugger(g); |
| dbg.onDebuggerStatement = function (stack) { |
| hits++; |
| this.enabled = false; |
| this.onDebuggerStatement = undefined; |
| gc(); |
| }; |
| if (i > 0) { |
| dbg.enabled = false; |
| dbg.onDebuggerStatement = undefined; |
| dbg = null; |
| } |
| } |
| } |
| |
| addDebug(); |
| hits = 0; |
| g.eval("debugger;"); |
| assertEq(hits, 1); |