| 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);
|
| +})();
|
|
|