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