Index: test/mjsunit/compiler/inline-arguments.js |
diff --git a/test/mjsunit/compiler/inline-arguments.js b/test/mjsunit/compiler/inline-arguments.js |
index b6adf7f6ccf308da4614ccdbfce3ffeff9472db9..c62a4319300d24ec1627e25ecc0921b3c1bd7f31 100644 |
--- a/test/mjsunit/compiler/inline-arguments.js |
+++ b/test/mjsunit/compiler/inline-arguments.js |
@@ -113,3 +113,70 @@ F4(1); |
%OptimizeFunctionOnNextCall(test_adaptation); |
test_adaptation(); |
})(); |
+ |
+// Test arguments access from the inlined function. |
+function uninlinable(v) { |
+ assertEquals(0, v); |
+ try { } catch (e) { } |
+ return 0; |
+} |
+ |
+function toarr_inner() { |
+ var a = arguments; |
+ var marker = a[0]; |
+ uninlinable(uninlinable(0, 0), marker.x); |
+ |
+ var r = new Array(); |
+ for (var i = a.length - 1; i >= 1; i--) { |
+ r.push(a[i]); |
+ } |
+ |
+ return r; |
+} |
+ |
+function toarr1(marker, a, b, c) { |
+ return toarr_inner(marker, a / 2, b / 2, c / 2); |
+} |
+ |
+function toarr2(marker, a, b, c) { |
+ var x = 0; |
+ return uninlinable(uninlinable(0, 0), |
+ x = toarr_inner(marker, a / 2, b / 2, c / 2)), x; |
+} |
+ |
+function test_toarr(toarr) { |
+ var marker = { x: 0 }; |
+ assertArrayEquals([3, 2, 1], toarr(marker, 2, 4, 6)); |
+ assertArrayEquals([3, 2, 1], toarr(marker, 2, 4, 6)); |
+ %OptimizeFunctionOnNextCall(toarr); |
+ assertArrayEquals([3, 2, 1], toarr(marker, 2, 4, 6)); |
+ delete marker.x; |
+ assertArrayEquals([3, 2, 1], toarr(marker, 2, 4, 6)); |
+} |
+ |
+test_toarr(toarr1); |
+test_toarr(toarr2); |
+ |
+// Test that arguments access from inlined function uses correct values. |
+(function () { |
+ function inner(x, y) { |
+ "use strict"; |
+ x = 10; |
+ y = 20; |
+ for (var i = 0; i < 1; i++) { |
+ for (var j = 1; j <= arguments.length; j++) { |
+ return arguments[arguments.length - j]; |
+ } |
+ } |
+ } |
+ |
+ function outer(x, y) { |
+ return inner(x, y); |
+ } |
+ |
+ assertEquals(2, outer(1, 2)); |
+ assertEquals(2, outer(1, 2)); |
+ assertEquals(2, outer(1, 2)); |
+ %OptimizeFunctionOnNextCall(outer); |
+ assertEquals(2, outer(1, 2)); |
+})(); |