diff options
Diffstat (limited to 'deps/v8/test/mjsunit/compiler/spread-call.js')
-rw-r--r-- | deps/v8/test/mjsunit/compiler/spread-call.js | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/deps/v8/test/mjsunit/compiler/spread-call.js b/deps/v8/test/mjsunit/compiler/spread-call.js new file mode 100644 index 0000000000..1b7ae6f301 --- /dev/null +++ b/deps/v8/test/mjsunit/compiler/spread-call.js @@ -0,0 +1,80 @@ +// Copyright 2016 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --allow-natives-syntax + +function tests() { + "use strict" + function countArgs() { return arguments.length; } + + // Array params + assertEquals(3, countArgs(...[1, 2, 3])); // Smi + assertEquals(4, countArgs(...[1, 2, , 3])); // HoleySmi + assertEquals(3, countArgs(...[1.1, 2, 3])); // Double + assertEquals(4, countArgs(...[1.1, 2, , 3])); // HoleyDouble + assertEquals(3, countArgs(...[{valueOf: () => 0}, 1.1, '2'])); // Object + assertEquals( + 4, countArgs(...[{valueOf: () => 0}, 1.1, , '2'])); // HoleyObject + + // Smi param + assertThrows(() => countArgs(...1), TypeError); + + // Object param + assertThrows(() => countArgs(...{0: 0}), TypeError); + + // Strict arguments + assertEquals(0, countArgs(...arguments)); +} + +tests(); +tests(); +%OptimizeFunctionOnNextCall(tests); +tests(); + +function testRest(...args) { + function countArgs() { return arguments.length; } + assertEquals(3, countArgs(...args)); + assertEquals(4, countArgs(1, ...args)); + assertEquals(5, countArgs(1, 2, ...args)); +} +testRest(1, 2, 3); +testRest(1, 2, 3); +%OptimizeFunctionOnNextCall(testRest); +testRest(1, 2, 3); + +function testRestAndArgs(a, b, ...args) { + function countArgs() { return arguments.length; } + assertEquals(1, countArgs(...args)); + assertEquals(2, countArgs(b, ...args)); + assertEquals(3, countArgs(a, b, ...args)); + assertEquals(4, countArgs(1, a, b, ...args)); + assertEquals(5, countArgs(1, 2, a, b, ...args)); +} +testRestAndArgs(1, 2, 3); +testRestAndArgs(1, 2, 3); +%OptimizeFunctionOnNextCall(testRestAndArgs); +testRestAndArgs(1, 2, 3); + +function testArgumentsStrict() { + "use strict" + function countArgs() { return arguments.length; } + assertEquals(3, countArgs(...arguments)); + assertEquals(4, countArgs(1, ...arguments)); + assertEquals(5, countArgs(1, 2, ...arguments)); +} +testArgumentsStrict(1, 2, 3); +testArgumentsStrict(1, 2, 3); +%OptimizeFunctionOnNextCall(testArgumentsStrict); +testArgumentsStrict(1, 2, 3); + +function testArgumentsSloppy() { + function countArgs() { return arguments.length; } + assertEquals(3, countArgs(...arguments)); + assertEquals(4, countArgs(1, ...arguments)); + assertEquals(5, countArgs(1, 2, ...arguments)); +} +testArgumentsSloppy(1, 2, 3); +testArgumentsSloppy(1, 2, 3); +%OptimizeFunctionOnNextCall(testArgumentsSloppy); +testArgumentsSloppy(1, 2, 3); |