// Test that on-stack Debugger.Frames are not GC'd even if they are only reachable
// from the js::Debugger::frames table.

var g = newGlobal();
g.eval("function f(n) { if (n) f(n - 1); debugger; }");
var dbg = new Debugger(g);
var hits = 0;
dbg.onDebuggerStatement = function (frame) {
    if (hits === 0) {
        for (; frame; frame = frame.older)
            frame.seen = true;
    } else {
        for (; frame; frame = frame.older)
            assertEq(frame.seen, true);
    }
    gc();
    hits++;
};
g.f(20);
assertEq(hits, 21);