Frame-eval-23.js (925B)
1 // Debugger.Frame preserves Ion frame mutations after removing debuggee. 2 3 load(libdir + "jitopts.js"); 4 5 if (!jitTogglesMatch(Opts_Ion2NoOffthreadCompilation)) 6 quit(); 7 8 withJitOptions(Opts_Ion2NoOffthreadCompilation, function () { 9 var g = newGlobal({newCompartment: true}); 10 var dbg = new Debugger; 11 12 g.toggle = function toggle(x, d) { 13 if (d) { 14 dbg.addDebuggee(g); 15 var frame = dbg.getNewestFrame().older; 16 assertEq(frame.callee.name, "f"); 17 assertEq(frame.environment.getVariable("x"), x); 18 assertEq(frame.implementation, "ion"); 19 frame.environment.setVariable("x", "not 42"); 20 dbg.removeDebuggee(g); 21 } 22 }; 23 24 g.eval("" + function f(x, d) { 25 g(x, d); 26 if (d) 27 assertEq(x, "not 42"); 28 }); 29 30 g.eval("" + function g(x, d) { toggle(x, d); }); 31 32 g.eval("(" + function test() { 33 for (var i = 0; i < 5; i++) 34 f(42, false); 35 f(42, true); 36 } + ")();"); 37 });