Index: test/mjsunit/compiler/rest-parameters.js |
diff --git a/test/mjsunit/compiler/rest-parameters.js b/test/mjsunit/compiler/rest-parameters.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b960a23aafe1b3a5f658edd782a7909c96b531d2 |
--- /dev/null |
+++ b/test/mjsunit/compiler/rest-parameters.js |
@@ -0,0 +1,54 @@ |
+// Copyright 2017 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 --turbo |
+ |
+(function Rest0Params() { |
+ |
+function f(x, y) { |
+ return x+y; |
+} |
+ |
+function test(...rest) { |
+ return [rest, f.apply(null, rest)]; |
+} |
+ |
+assertEquals(test(), [[], NaN]); |
+assertEquals(test(1), [[1], NaN]) |
+assertEquals(test(1, 2), [[1,2], 3]); |
+assertEquals(test(1, 2, 3), [[1,2,3], 3]); |
+ |
+%OptimizeFunctionOnNextCall(test); |
+ |
+assertEquals(test(), [[], NaN]); |
+assertEquals(test(1), [[1], NaN]) |
+assertEquals(test(1, 2), [[1,2], 3]); |
+assertEquals(test(1, 2, 3), [[1,2,3], 3]); |
+})(); |
+ |
+(function Rest1Params() { |
+ |
+function f(x, y) { |
+ return x+y |
+} |
+ |
+function test(a, ...rest) { |
+ return [rest, a, f.apply(null, rest)]; |
+} |
+ |
+assertEquals(test(), [[], undefined, NaN]); |
+assertEquals(test(1), [[], 1, NaN]); |
+assertEquals(test(1, 2), [[2], 1, NaN]); |
+assertEquals(test(1, 2, 3), [[2,3], 1, 5]); |
+assertEquals(test(1, 2, 3, 4), [[2,3,4], 1, 5]); |
+ |
+%OptimizeFunctionOnNextCall(test); |
+ |
+assertEquals(test(), [[], undefined, NaN]); |
+assertEquals(test(1), [[], 1, NaN]); |
+assertEquals(test(1, 2), [[2], 1, NaN]); |
+assertEquals(test(1, 2, 3), [[2,3], 1, 5]); |
+assertEquals(test(1, 2, 3, 4), [[2,3,4], 1, 5]); |
+ |
+})(); |