diff options
Diffstat (limited to 'deps/v8/test/mjsunit/compiler/inline-arguments.js')
-rw-r--r-- | deps/v8/test/mjsunit/compiler/inline-arguments.js | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/deps/v8/test/mjsunit/compiler/inline-arguments.js b/deps/v8/test/mjsunit/compiler/inline-arguments.js index b6adf7f6cc..f8a247608b 100644 --- a/deps/v8/test/mjsunit/compiler/inline-arguments.js +++ b/deps/v8/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)); +})(); |