// 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);