summaryrefslogtreecommitdiff
path: root/src/3rdparty/v8/test/mjsunit/compiler/inline-arguments.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/v8/test/mjsunit/compiler/inline-arguments.js')
-rw-r--r--src/3rdparty/v8/test/mjsunit/compiler/inline-arguments.js268
1 files changed, 0 insertions, 268 deletions
diff --git a/src/3rdparty/v8/test/mjsunit/compiler/inline-arguments.js b/src/3rdparty/v8/test/mjsunit/compiler/inline-arguments.js
deleted file mode 100644
index df1bd22..0000000
--- a/src/3rdparty/v8/test/mjsunit/compiler/inline-arguments.js
+++ /dev/null
@@ -1,268 +0,0 @@
-// Copyright 2011 the V8 project authors. All rights reserved.
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following
-// disclaimer in the documentation and/or other materials provided
-// with the distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived
-// from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-// Flags: --allow-natives-syntax --max-opt-count=100
-
-function A() {
-}
-
-A.prototype.X = function (a, b, c) {
- assertTrue(this instanceof A);
- assertEquals(1, a);
- assertEquals(2, b);
- assertEquals(3, c);
-};
-
-A.prototype.Y = function () {
- this.X.apply(this, arguments);
-};
-
-A.prototype.Z = function () {
- this.Y(1,2,3);
-};
-
-var a = new A();
-a.Z(4,5,6);
-a.Z(4,5,6);
-%OptimizeFunctionOnNextCall(a.Z);
-a.Z(4,5,6);
-A.prototype.X.apply = function (receiver, args) {
- return Function.prototype.apply.call(this, receiver, args);
-};
-a.Z(4,5,6);
-
-
-// Ensure that HArgumentsObject is inserted in a correct place
-// and dominates all uses.
-function F1() { }
-function F2() { F1.apply(this, arguments); }
-function F3(x, y) {
- if (x) {
- F2(y);
- }
-}
-
-function F31() {
- return F1.apply(this, arguments);
-}
-
-function F4() {
- F3(true, false);
- return F31(1);
-}
-
-F4(1);
-F4(1);
-F4(1);
-%OptimizeFunctionOnNextCall(F4);
-F4(1);
-
-
-// Test correct adapation of arguments.
-// Strict mode prevents arguments object from shadowing parameters.
-(function () {
- "use strict";
-
- function G2() {
- assertArrayEquals([1,2], arguments);
- }
-
- function G4() {
- assertArrayEquals([1,2,3,4], arguments);
- }
-
- function adapt2to4(a, b, c, d) {
- G2.apply(this, arguments);
- }
-
- function adapt4to2(a, b) {
- G4.apply(this, arguments);
- }
-
- function test_adaptation() {
- adapt2to4(1, 2);
- adapt4to2(1, 2, 3, 4);
- }
-
- test_adaptation();
- test_adaptation();
- %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);
- }
-
- %OptimizeFunctionOnNextCall(outer);
- %OptimizeFunctionOnNextCall(inner);
- assertEquals(2, outer(1, 2));
-})();
-
-
-(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));
-})();
-
-
-// Test inlining and deoptimization of functions accessing and modifying
-// the arguments object in strict mode with mismatched arguments count.
-(function () {
- "use strict";
- function test(outerCount, middleCount, innerCount) {
- var forceDeopt = { deopt:false };
- function inner(x,y) {
- x = 0; y = 0;
- forceDeopt.deopt;
- assertSame(innerCount, arguments.length);
- for (var i = 0; i < arguments.length; i++) {
- assertSame(30 + i, arguments[i]);
- }
- }
-
- function middle(x,y) {
- x = 0; y = 0;
- if (innerCount == 1) inner(30);
- if (innerCount == 2) inner(30, 31);
- if (innerCount == 3) inner(30, 31, 32);
- assertSame(middleCount, arguments.length);
- for (var i = 0; i < arguments.length; i++) {
- assertSame(20 + i, arguments[i]);
- }
- }
-
- function outer(x,y) {
- x = 0; y = 0;
- if (middleCount == 1) middle(20);
- if (middleCount == 2) middle(20, 21);
- if (middleCount == 3) middle(20, 21, 22);
- assertSame(outerCount, arguments.length);
- for (var i = 0; i < arguments.length; i++) {
- assertSame(10 + i, arguments[i]);
- }
- }
-
- for (var step = 0; step < 4; step++) {
- if (outerCount == 1) outer(10);
- if (outerCount == 2) outer(10, 11);
- if (outerCount == 3) outer(10, 11, 12);
- if (step == 1) %OptimizeFunctionOnNextCall(outer);
- if (step == 2) delete forceDeopt.deopt;
- }
-
- %DeoptimizeFunction(outer);
- %DeoptimizeFunction(middle);
- %DeoptimizeFunction(inner);
- %ClearFunctionTypeFeedback(outer);
- %ClearFunctionTypeFeedback(middle);
- %ClearFunctionTypeFeedback(inner);
- }
-
- for (var a = 1; a <= 3; a++) {
- for (var b = 1; b <= 3; b++) {
- for (var c = 1; c <= 3; c++) {
- test(a,b,c);
- }
- }
- }
-})();