michael@0: // test frame.eval in non-top frames michael@0: michael@0: var g = newGlobal(); michael@0: var N = g.N = 12; // must be even michael@0: assertEq(N % 2, 0); michael@0: var dbg = new Debugger(g); michael@0: var hits = 0; michael@0: dbg.onDebuggerStatement = function (frame) { michael@0: var n = frame.eval("n").return; michael@0: if (n === 0) { michael@0: for (var i = 0; i <= N; i++) { michael@0: assertEq(frame.type, 'call'); michael@0: assertEq(frame.callee.name, i % 2 === 0 ? 'even' : 'odd'); michael@0: assertEq(frame.eval("n").return, i); michael@0: frame = frame.older; michael@0: } michael@0: assertEq(frame.type, 'call'); michael@0: assertEq(frame.callee.name, undefined); michael@0: frame = frame.older; michael@0: assertEq(frame.type, 'eval'); michael@0: hits++; michael@0: } michael@0: }; michael@0: michael@0: var result = g.eval("(" + function () { michael@0: function odd(n) { return n > 0 && !even(n - 1); } michael@0: function even(n) { debugger; return n == 0 || !odd(n - 1); } michael@0: return even(N); michael@0: } + ")();"); michael@0: assertEq(result, true); michael@0: assertEq(hits, 1);