| var evalInFrame = (function (global) { |
| var dbgGlobal = newGlobal(); |
| var dbg = new dbgGlobal.Debugger(); |
| |
| return function evalInFrame(upCount, code) { |
| dbg.addDebuggee(global); |
| |
| // Skip ourself. |
| var frame = dbg.getNewestFrame().older; |
| for (var i = 0; i < upCount; i++) { |
| if (!frame.older) |
| break; |
| frame = frame.older; |
| } |
| |
| var completion = frame.eval(code); |
| if (completion.return) { |
| var v = completion.return; |
| if (typeof v === "object") |
| v = v.unsafeDereference(); |
| return v; |
| } |
| if (completion.throw) { |
| var v = completion.throw; |
| if (typeof v === "object") |
| v = v.unsafeDereference(); |
| throw v; |
| } |
| if (completion === null) |
| terminate(); |
| }; |
| })(this); |