Index: test/webkit/dfg-inline-arguments-osr-exit-and-capture.js |
diff --git a/test/webkit/concat-while-having-a-bad-time.js b/test/webkit/dfg-inline-arguments-osr-exit-and-capture.js |
similarity index 67% |
copy from test/webkit/concat-while-having-a-bad-time.js |
copy to test/webkit/dfg-inline-arguments-osr-exit-and-capture.js |
index dfda1e08a0b36194b787a44ee12a9693acd8aeaf..82a49faa689affdf2194a994af0df177b95c5fd6 100644 |
--- a/test/webkit/concat-while-having-a-bad-time.js |
+++ b/test/webkit/dfg-inline-arguments-osr-exit-and-capture.js |
@@ -22,10 +22,35 @@ |
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
description( |
-"Tests the behavior of Array.prototype.concat while the array is having a bad time due to one of the elements we are concatenating." |
+"Tests what happens if you OSR exit within inlined code that has interesting control flow with arguments that are specially formatted and you capture the arguments reflectively after the OSR exit." |
); |
-Object.defineProperty(Array.prototype, 0, { writable: false }); |
-shouldBe("[42].concat()", "[42]"); |
+function foo() { |
+ return bar.arguments[0]; |
+} |
+function bar(x, y) { |
+ if (x + 5 > 4) |
+ return y.f + 42 + foo(); |
+ else |
+ return y.f + 43 + foo(); |
+} |
+ |
+function baz(x, y) { |
+ return bar(x, y); |
+} |
+ |
+for (var i = 0; i < 300; ++i) { |
+ var expected; |
+ var arg1 = i; |
+ var arg2; |
+ if (i < 250) { |
+ arg2 = {f:i + 1}; |
+ expected = i + 1 + 42 + i; |
+ } else { |
+ arg2 = {f:1.5}; |
+ expected = 1.5 + 42 + i; |
+ } |
+ shouldBe("baz(arg1, arg2)", "" + expected); |
+} |