| Index: test/mjsunit/harmony/spread-call-new-class.js | 
| diff --git a/test/mjsunit/harmony/spread-call-new-class.js b/test/mjsunit/harmony/spread-call-new-class.js | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..fcd0a21bc9aaa143d17ea7a66aaed7b5b8e9d731 | 
| --- /dev/null | 
| +++ b/test/mjsunit/harmony/spread-call-new-class.js | 
| @@ -0,0 +1,92 @@ | 
| +// Copyright 2015 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: --harmony-spreadcalls --harmony-sloppy --harmony-rest-parameters | 
| + | 
| + | 
| +(function testConstructClassStrict() { | 
| +  "use strict"; | 
| +  class Base { | 
| +    constructor(...args) { | 
| +      this.baseArgs = args; | 
| +    } | 
| +    method() { return this.baseArgs; } | 
| +  } | 
| + | 
| +  class Child extends Base { | 
| +    constructor(...args) { | 
| +      super(...args); | 
| +      this.childArgs = args; | 
| +    } | 
| +  } | 
| + | 
| +  class Child2 extends Base { | 
| +    constructor(...args) { | 
| +      super("extra", ...args); | 
| +      this.childArgs = args; | 
| +    } | 
| +  } | 
| + | 
| +  var c = new Base(...[1, 2, 3]); | 
| +  assertInstanceof(c, Base); | 
| +  assertEquals([1, 2, 3], c.method()); | 
| +  assertEquals([1, 2, 3], c.baseArgs); | 
| + | 
| +  c = new Child(...[1, 2, 3]); | 
| +  assertInstanceof(c, Child); | 
| +  assertInstanceof(c, Base); | 
| +  assertEquals([1, 2, 3], c.method()); | 
| +  assertEquals([1, 2, 3], c.baseArgs); | 
| +  assertEquals([1, 2, 3], c.childArgs); | 
| + | 
| +  c = new Child2(...[1, 2, 3]); | 
| +  assertInstanceof(c, Child2); | 
| +  assertInstanceof(c, Base); | 
| +  assertEquals(["extra", 1, 2, 3], c.method()); | 
| +  assertEquals(["extra", 1, 2, 3], c.baseArgs); | 
| +  assertEquals([1, 2, 3], c.childArgs); | 
| +})(); | 
| + | 
| + | 
| +(function testConstructSloppy() { | 
| +  class Base { | 
| +    constructor(...args) { | 
| +      this.baseArgs = args; | 
| +    } | 
| +    method() { return this.baseArgs; } | 
| +  } | 
| + | 
| +  class Child extends Base { | 
| +    constructor(...args) { | 
| +      super(...args); | 
| +      this.childArgs = args; | 
| +    } | 
| +  } | 
| + | 
| +  class Child2 extends Base { | 
| +    constructor(...args) { | 
| +      super("extra", ...args); | 
| +      this.childArgs = args; | 
| +    } | 
| +  } | 
| + | 
| +  var c = new Base(...[1, 2, 3]); | 
| +  assertInstanceof(c, Base); | 
| +  assertEquals([1, 2, 3], c.method()); | 
| +  assertEquals([1, 2, 3], c.baseArgs); | 
| + | 
| +  c = new Child(...[1, 2, 3]); | 
| +  assertInstanceof(c, Child); | 
| +  assertInstanceof(c, Base); | 
| +  assertEquals([1, 2, 3], c.method()); | 
| +  assertEquals([1, 2, 3], c.baseArgs); | 
| +  assertEquals([1, 2, 3], c.childArgs); | 
| + | 
| +  c = new Child2(...[1, 2, 3]); | 
| +  assertInstanceof(c, Child2); | 
| +  assertInstanceof(c, Base); | 
| +  assertEquals(["extra", 1, 2, 3], c.method()); | 
| +  assertEquals(["extra", 1, 2, 3], c.baseArgs); | 
| +  assertEquals([1, 2, 3], c.childArgs); | 
| +})(); | 
|  |