// reentering the debugger several times via onDebuggerStatement and apply/call on a single stack

var g = newGlobal();
var dbg = Debugger(g);

function test(usingApply) {
    dbg.onDebuggerStatement = function (frame) {
        var n = frame.arguments[0];
        if (n > 1) {
            var result = usingApply ? frame.callee.apply(null, [n - 1])
                : frame.callee.call(null, n - 1);
            result.return *= n;
            return result;
        }
    };
    g.eval("function fac(n) { debugger; return 1; }");
    assertEq(g.fac(5), 5 * 4 * 3 * 2 * 1);
}

test(true);
test(false);