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