gc-03.js (614B)
1 // Storing a property on a Debugger.Object protects it from GC as long as the 2 // referent is alive. 3 4 var g = newGlobal({newCompartment: true}); 5 var N = g.N = 3; 6 var dbg = Debugger(g); 7 8 var i = 0; 9 dbg.onDebuggerStatement = function (frame) { 10 frame.arguments[0].id = i++; 11 }; 12 g.eval("function f(x) { debugger; }"); 13 g.eval("var arr = [], j; for (j = 0; j < N; j++) arr[j] = {};"); 14 g.eval("for (j = 0; j < N; j++) f(arr[j]);"); 15 assertEq(i, N); 16 17 gc(); gc(); 18 19 i = 0; 20 dbg.onDebuggerStatement = function (frame) { 21 assertEq(frame.arguments[0].id, i++) 22 } 23 g.eval("for (j = 0; j < N; j++) f(arr[j]);"); 24 assertEq(i, N);