michael@0: // Test adding hooks during dispatch. The behavior is deterministic and "nice", michael@0: // but mainly what we are checking here is that we do not crash due to michael@0: // modifying a data structure while we're iterating over it. michael@0: michael@0: var g = newGlobal(); michael@0: var n = 0; michael@0: var hits; michael@0: michael@0: function addDebugger() { michael@0: var dbg = new Debugger(g); michael@0: dbg.onDebuggerStatement = function (stack) { michael@0: hits++; michael@0: addDebugger(); michael@0: }; michael@0: } michael@0: michael@0: addDebugger(); // now there is one enabled Debugger michael@0: hits = 0; michael@0: g.eval("debugger;"); // after this there are two michael@0: assertEq(hits, 1); michael@0: michael@0: hits = 0; michael@0: g.eval("debugger;"); // after this there are four michael@0: assertEq(hits, 2); michael@0: michael@0: hits = 0; michael@0: g.eval("debugger;"); // after this there are eight michael@0: assertEq(hits, 4); michael@0: michael@0: hits = 0; michael@0: g.eval("debugger;"); michael@0: assertEq(hits, 8);