evalInFrame.js (789B)
1 var evalInFrame = (function (global) { 2 var dbgGlobal = newGlobal({newCompartment: true}); 3 var dbg = new dbgGlobal.Debugger(); 4 5 return function evalInFrame(upCount, code) { 6 dbg.addDebuggee(global); 7 8 // Skip ourself. 9 var frame = dbg.getNewestFrame().older; 10 for (var i = 0; i < upCount; i++) { 11 if (!frame.older) 12 break; 13 frame = frame.older; 14 } 15 16 var completion = frame.eval(code); 17 if (completion.return) { 18 var v = completion.return; 19 if (typeof v === "object") 20 v = v.unsafeDereference(); 21 return v; 22 } 23 if (completion.throw) { 24 var v = completion.throw; 25 if (typeof v === "object") 26 v = v.unsafeDereference(); 27 throw v; 28 } 29 if (completion === null) 30 terminate(); 31 }; 32 })(this);