description( | |
"This tests that if a variable is dead on OSR exit, it will at least contain a valid JS value." | |
); | |
var array = []; | |
for (var i = 0; i < 9; ++i) { | |
var code = ""; | |
code += "(function("; | |
for (var j = 0; j < i; ++j) { | |
if (j) | |
code += ", "; | |
code += "arg" + j; | |
} | |
code += ") {\n"; | |
code += " return "; | |
if (i) { | |
for (var j = 0; j < i; ++j) { | |
if (j) | |
code += " + "; | |
code += "arg" + j; | |
} | |
} else | |
code += "void 0"; | |
code += ";\n"; | |
code += "})"; | |
array[i] = eval(code); | |
} | |
function foo(a, b) { | |
var x = 0; | |
if (a.f < b.f) { | |
var result = b.g - a.g; | |
x = !x; | |
return result; | |
} else { | |
var result = a.g - b.g; | |
x = [x]; | |
return result; | |
} | |
} | |
var firstArg = {f:2, g:3}; | |
var secondArg = {f:3, g:4}; | |
var myFunctions = array.concat(foo); | |
for (var i = 0; i < myFunctions.length; ++i) | |
noInline(myFunctions[i]); | |
silentTestPass = true; | |
for (var i = 0; i < 300; i = dfgIncrement({f:myFunctions, i:i + 1, n:100})) { | |
var code = ""; | |
code += "array[" + (((i / 2) | 0) % array.length) + "]("; | |
for (var j = 0; j < (((i / 2) | 0) % array.length); ++j) { | |
if (j) | |
code += ", "; | |
code += i + j; | |
} | |
if (i == 150) { | |
firstArg = {f:2, g:2.5}; | |
secondArg = {f:3, g:3.5}; | |
} | |
var tmp = firstArg; | |
firstArg = secondArg; | |
secondArg = tmp; | |
code += "); foo(firstArg, secondArg)"; | |
shouldBe(code, "1"); | |
} | |