michael@0: // Storing a Debugger.Object as a key in a WeakMap protects it from GC as long as michael@0: // the referent is alive. michael@0: michael@0: var g = newGlobal(); michael@0: var N = g.N = 10; michael@0: var dbg = Debugger(g); michael@0: var cache = new WeakMap; michael@0: michael@0: var i = 0; michael@0: dbg.onDebuggerStatement = function (frame) { michael@0: cache.set(frame.arguments[0], 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(cache.get(frame.arguments[0]), i++) michael@0: }; michael@0: g.eval("for (j = 0; j < N; j++) f(arr[j]);"); michael@0: assertEq(i, N);