Index: test/mjsunit/es6/super-with-spread.js |
diff --git a/test/mjsunit/es6/super-with-spread.js b/test/mjsunit/es6/super-with-spread.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..260704f7a4b96dc25ad05d4c6d8bbc721554d004 |
--- /dev/null |
+++ b/test/mjsunit/es6/super-with-spread.js |
@@ -0,0 +1,88 @@ |
+// 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 |
+ |
+(function() { |
+ 'use strict'; |
+ |
+ class Point { |
+ constructor(x, y) { |
+ this.x = x; |
+ this.y = y; |
+ } |
+ } |
+ |
+ function testBaselineAndOpt(func) { |
+ func(1, 2); |
+ func(1, 2); |
+ % OptimizeFunctionOnNextCall(func); |
+ return func(1, 2); |
+ } |
+ |
+ class RestPoint extends Point { |
+ constructor(...args) { |
+ super(...args); |
+ } |
+ } |
+ var r = testBaselineAndOpt(function(x, y) { |
+ return new RestPoint(x, y); |
+ }); |
+ assertInstanceof(r, RestPoint); |
+ assertInstanceof(r, Point); |
+ assertEquals(r.x, 1); |
+ assertEquals(r.y, 2); |
+ |
+ class RestExtraPoint extends Point { |
+ constructor(...args) { |
+ super(-1, 0, ...args); |
+ } |
+ } |
+ r = testBaselineAndOpt(function(x, y) { |
+ return new RestExtraPoint(x, y); |
+ }); |
+ assertInstanceof(r, RestExtraPoint); |
+ assertInstanceof(r, Point); |
+ assertEquals(r.x, -1); |
+ assertEquals(r.y, 0); |
+ |
+ class ArgumentsPoint extends Point { |
+ constructor() { |
+ super(...arguments); |
+ } |
+ } |
+ r = testBaselineAndOpt(function(x, y) { |
+ return new ArgumentsPoint(x, y); |
+ }); |
+ assertInstanceof(r, ArgumentsPoint); |
+ assertInstanceof(r, Point); |
+ assertEquals(r.x, 1); |
+ assertEquals(r.y, 2); |
+ |
+ class ArgumentsExtraPoint extends Point { |
+ constructor() { |
+ super(1, 2, ...arguments); |
+ } |
+ } |
+ r = testBaselineAndOpt(function(x, y) { |
+ return new ArgumentsExtraPoint(x, y); |
+ }); |
+ assertInstanceof(r, ArgumentsExtraPoint); |
+ assertInstanceof(r, Point); |
+ assertEquals(r.x, 1); |
+ assertEquals(r.y, 2); |
+ |
+ class LiteralPoint extends Point { |
+ constructor() { |
+ super(...[3, 4]); |
+ } |
+ } |
+ r = testBaselineAndOpt(function(x, y) { |
+ return new LiteralPoint(x, y); |
+ }); |
+ assertInstanceof(r, LiteralPoint); |
+ assertInstanceof(r, Point); |
+ assertEquals(r.x, 3); |
+ assertEquals(r.y, 4); |
+})(); |