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