Source code
Revision control
Copy as Markdown
Other Tools
// |jit-test| --ion-osr=off
// 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({newCompartment: true});
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);
});