| 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));
|
| +})();
|
|
|