|
1 // Test that on-stack Debugger.Frames are not GC'd even if they are only reachable |
|
2 // from the js::Debugger::frames table. |
|
3 |
|
4 var g = newGlobal(); |
|
5 g.eval("function f(n) { if (n) f(n - 1); debugger; }"); |
|
6 var dbg = new Debugger(g); |
|
7 var hits = 0; |
|
8 dbg.onDebuggerStatement = function (frame) { |
|
9 if (hits === 0) { |
|
10 for (; frame; frame = frame.older) |
|
11 frame.seen = true; |
|
12 } else { |
|
13 for (; frame; frame = frame.older) |
|
14 assertEq(frame.seen, true); |
|
15 } |
|
16 gc(); |
|
17 hits++; |
|
18 }; |
|
19 g.f(20); |
|
20 assertEq(hits, 21); |