| // Storing a property on a Debugger.Object protects it from GC as long as the |
| // referent is alive. |
| |
| var g = newGlobal(); |
| var N = g.N = 3; |
| var dbg = Debugger(g); |
| |
| var i = 0; |
| dbg.onDebuggerStatement = function (frame) { |
| frame.arguments[0].id = i++; |
| }; |
| g.eval("function f(x) { debugger; }"); |
| g.eval("var arr = [], j; for (j = 0; j < N; j++) arr[j] = {};"); |
| g.eval("for (j = 0; j < N; j++) f(arr[j]);"); |
| assertEq(i, N); |
| |
| gc(); gc(); |
| |
| i = 0; |
| dbg.onDebuggerStatement = function (frame) { |
| assertEq(frame.arguments[0].id, i++) |
| } |
| g.eval("for (j = 0; j < N; j++) f(arr[j]);"); |
| assertEq(i, N); |