Script-gc-01.js (623B)
1 // Debugger.Script instances with live referents stay alive. 2 3 var N = 4; 4 var g = newGlobal({newCompartment: true}); 5 var dbg = new Debugger(g); 6 var i; 7 dbg.onDebuggerStatement = function (frame) { 8 assertEq(frame.script instanceof Debugger.Script, true); 9 frame.script.id = i; 10 }; 11 12 g.eval('var arr = [];') 13 for (i = 0; i < N; i++) // loop to defeat conservative GC 14 g.eval("arr.push(function () { debugger }); arr[arr.length - 1]();"); 15 16 gc(); 17 18 var hits; 19 dbg.onDebuggerStatement = function (frame) { 20 hits++; 21 assertEq(frame.script.id, i); 22 }; 23 hits = 0; 24 for (i = 0; i < N; i++) 25 g.arr[i](); 26 assertEq(hits, N);