// One Debugger's onPop handler can remove another Debugger's onPop handler. var g = newGlobal(); var dbg1 = new Debugger(g); var dbg2 = new Debugger(g); var log; var frames = []; var firstPop = true; function handleEnter(frame) { log += '('; frames.push(frame); frame.onPop = function handlePop(completion) { log += ')'; assertEq(completion.return, 42); if (firstPop) { // We can't say which frame's onPop handler will get called first. if (this == frames[0]) frames[1].onPop = undefined; else frames[0].onPop = undefined; gc(); } else { assertEq("second pop handler was called", "second pop handler should not be called"); } firstPop = false; }; }; dbg1.onEnterFrame = handleEnter; dbg2.onEnterFrame = handleEnter; log = ''; assertEq(g.eval('40 + 2'), 42); assertEq(log, '(()');