description( | |
"Tests what happens when CFG simplification leads to the elimination of a set local that had a type check, and then we branch on the variable not being null." | |
); | |
function foo(o) { | |
var x; | |
if (o.f) | |
x = o.g; | |
else | |
x = o.h; | |
if (x != null) | |
return x - 1; | |
else | |
return x; | |
} | |
silentTestPass = true; | |
noInline(foo); | |
for (var i = 0; i < 500; i = dfgIncrement({f:foo, i:i + 1, n:100})) { | |
var o = {f:foo}; | |
var expected; | |
if (i < 450) { | |
o.g = i; | |
expected = "" + (i - 1); | |
} else { | |
o.g = null; | |
expected = "null"; | |
} | |
shouldBe("foo(o)", expected); | |
} | |