| // Eval-in-frame with different type on non-youngest Ion frame. |
| |
| load(libdir + "jitopts.js"); |
| |
| if (!jitTogglesMatch(Opts_Ion2NoOffthreadCompilation)) |
| quit(0); |
| |
| withJitOptions(Opts_Ion2NoOffthreadCompilation, function () { |
| function test(shadow) { |
| var g = newGlobal(); |
| var dbg = new Debugger; |
| |
| // Note that we depend on CCW scripted functions being opaque to Ion |
| // optimization for this test. |
| g.h = function h(d) { |
| if (d) { |
| dbg.addDebuggee(g); |
| var f = dbg.getNewestFrame().older; |
| assertEq(f.implementation, "ion"); |
| assertEq(f.environment.getVariable("foo"), 42); |
| |
| // EIF of a different type too. |
| f.eval((shadow ? "var " : "") + "foo = 'string of 42'"); |
| g.expected = shadow ? 42 : "string of 42"; |
| } |
| } |
| |
| g.eval("" + function f(d) { |
| var foo = 42; |
| g(d); |
| return foo; |
| }); |
| g.eval("" + function g(d) { |
| h(d); |
| }); |
| |
| g.eval("(" + function () { |
| for (i = 0; i < 5; i++) |
| f(false); |
| assertEq(f(true), "string of 42"); |
| } + ")();"); |
| } |
| |
| test(false); |
| test(true); |
| }); |