| description( |
| "Tests that we do the right things when we prove that we can eliminate a structure check, but haven't proved that the value is definitely an object - i.e. we've proved that it's either an object with a specific structure, or it's not an object at all." |
| ); |
| |
| function foo(o, p) { |
| var x = o.f; |
| if (p) |
| o = null; |
| return x + o.g(); |
| } |
| |
| function bar() { |
| return 24; |
| } |
| |
| function baz(i) { |
| try { |
| return foo({f:42, g:bar}, i == 190); |
| } catch (e) { |
| debug("Caught exception: " + e); |
| return "ERROR"; |
| } |
| } |
| |
| silentTestPass = true; |
| noInline(foo); |
| |
| for (var i = 0; i < 200; i = dfgIncrement({f:foo, i:i + 1, n:100})) |
| shouldBe("baz(i)", i == 190 ? "\"ERROR\"" : "66"); |