diff --git a/test/language/class/subclass/null.js b/test/language/class/subclass/null.js deleted file mode 100644 index de48d4ab8854355b4223829c0b435ca97c2a4356..0000000000000000000000000000000000000000 --- a/test/language/class/subclass/null.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (C) 2014 the V8 project authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. -/*--- -es6id: 14.5 -description: > - class subclassing null ----*/ -var N = null; - -class Foo extends N { - constructor(x, y) { - assert.sameValue(x, 1, "The value of `x` is `1`"); - assert.sameValue(y, 2, "The value of `y` is `2`"); - return {}; - } -} - -new Foo(1,2); \ No newline at end of file diff --git a/test/language/class/arguments/access.js b/test/language/statements/class/arguments/access.js similarity index 100% rename from test/language/class/arguments/access.js rename to test/language/statements/class/arguments/access.js diff --git a/test/language/class/arguments/default-constructor.js b/test/language/statements/class/arguments/default-constructor.js similarity index 100% rename from test/language/class/arguments/default-constructor.js rename to test/language/statements/class/arguments/default-constructor.js diff --git a/test/language/class/definition/accessors.js b/test/language/statements/class/definition/accessors.js similarity index 100% rename from test/language/class/definition/accessors.js rename to test/language/statements/class/definition/accessors.js diff --git a/test/language/class/definition/basics.js b/test/language/statements/class/definition/basics.js similarity index 100% rename from test/language/class/definition/basics.js rename to test/language/statements/class/definition/basics.js diff --git a/test/language/class/definition/constructable-but-no-prototype.js b/test/language/statements/class/definition/constructable-but-no-prototype.js similarity index 100% rename from test/language/class/definition/constructable-but-no-prototype.js rename to test/language/statements/class/definition/constructable-but-no-prototype.js diff --git a/test/language/class/definition/constructor-property.js b/test/language/statements/class/definition/constructor-property.js similarity index 100% rename from test/language/class/definition/constructor-property.js rename to test/language/statements/class/definition/constructor-property.js diff --git a/test/language/class/definition/constructor-strict-by-default.js b/test/language/statements/class/definition/constructor-strict-by-default.js similarity index 100% rename from test/language/class/definition/constructor-strict-by-default.js rename to test/language/statements/class/definition/constructor-strict-by-default.js diff --git a/test/language/class/definition/constructor.js b/test/language/statements/class/definition/constructor.js similarity index 100% rename from test/language/class/definition/constructor.js rename to test/language/statements/class/definition/constructor.js diff --git a/test/language/class/definition/getters-2.js b/test/language/statements/class/definition/getters-2.js similarity index 100% rename from test/language/class/definition/getters-2.js rename to test/language/statements/class/definition/getters-2.js diff --git a/test/language/class/definition/getters.js b/test/language/statements/class/definition/getters.js similarity index 100% rename from test/language/class/definition/getters.js rename to test/language/statements/class/definition/getters.js diff --git a/test/language/class/definition/implicit-constructor.js b/test/language/statements/class/definition/implicit-constructor.js similarity index 100% rename from test/language/class/definition/implicit-constructor.js rename to test/language/statements/class/definition/implicit-constructor.js diff --git a/test/language/class/definition/invalid-extends.js b/test/language/statements/class/definition/invalid-extends.js similarity index 100% rename from test/language/class/definition/invalid-extends.js rename to test/language/statements/class/definition/invalid-extends.js diff --git a/test/language/class/definition/methods-named-eval-arguments.js b/test/language/statements/class/definition/methods-named-eval-arguments.js similarity index 100% rename from test/language/class/definition/methods-named-eval-arguments.js rename to test/language/statements/class/definition/methods-named-eval-arguments.js diff --git a/test/language/class/definition/methods.js b/test/language/statements/class/definition/methods.js similarity index 100% rename from test/language/class/definition/methods.js rename to test/language/statements/class/definition/methods.js diff --git a/test/language/class/definition/numeric-property-names.js b/test/language/statements/class/definition/numeric-property-names.js similarity index 100% rename from test/language/class/definition/numeric-property-names.js rename to test/language/statements/class/definition/numeric-property-names.js diff --git a/test/language/class/definition/prototype-getter.js b/test/language/statements/class/definition/prototype-getter.js similarity index 100% rename from test/language/class/definition/prototype-getter.js rename to test/language/statements/class/definition/prototype-getter.js diff --git a/test/language/class/definition/prototype-property.js b/test/language/statements/class/definition/prototype-property.js similarity index 100% rename from test/language/class/definition/prototype-property.js rename to test/language/statements/class/definition/prototype-property.js diff --git a/test/language/class/definition/prototype-setter.js b/test/language/statements/class/definition/prototype-setter.js similarity index 100% rename from test/language/class/definition/prototype-setter.js rename to test/language/statements/class/definition/prototype-setter.js diff --git a/test/language/class/definition/prototype-wiring.js b/test/language/statements/class/definition/prototype-wiring.js similarity index 100% rename from test/language/class/definition/prototype-wiring.js rename to test/language/statements/class/definition/prototype-wiring.js diff --git a/test/language/class/definition/setters-2.js b/test/language/statements/class/definition/setters-2.js similarity index 100% rename from test/language/class/definition/setters-2.js rename to test/language/statements/class/definition/setters-2.js diff --git a/test/language/class/definition/setters.js b/test/language/statements/class/definition/setters.js similarity index 100% rename from test/language/class/definition/setters.js rename to test/language/statements/class/definition/setters.js diff --git a/test/language/class/definition/side-effects-in-extends.js b/test/language/statements/class/definition/side-effects-in-extends.js similarity index 100% rename from test/language/class/definition/side-effects-in-extends.js rename to test/language/statements/class/definition/side-effects-in-extends.js diff --git a/test/language/class/definition/side-effects-in-property-define.js b/test/language/statements/class/definition/side-effects-in-property-define.js similarity index 100% rename from test/language/class/definition/side-effects-in-property-define.js rename to test/language/statements/class/definition/side-effects-in-property-define.js diff --git a/test/language/class/definition/this-access-restriction-2.js b/test/language/statements/class/definition/this-access-restriction-2.js similarity index 100% rename from test/language/class/definition/this-access-restriction-2.js rename to test/language/statements/class/definition/this-access-restriction-2.js diff --git a/test/language/class/definition/this-access-restriction.js b/test/language/statements/class/definition/this-access-restriction.js similarity index 100% rename from test/language/class/definition/this-access-restriction.js rename to test/language/statements/class/definition/this-access-restriction.js diff --git a/test/language/class/definition/this-check-ordering.js b/test/language/statements/class/definition/this-check-ordering.js similarity index 100% rename from test/language/class/definition/this-check-ordering.js rename to test/language/statements/class/definition/this-check-ordering.js diff --git a/test/language/class/name-binding/basic.js b/test/language/statements/class/name-binding/basic.js similarity index 100% rename from test/language/class/name-binding/basic.js rename to test/language/statements/class/name-binding/basic.js diff --git a/test/language/class/name-binding/const.js b/test/language/statements/class/name-binding/const.js similarity index 100% rename from test/language/class/name-binding/const.js rename to test/language/statements/class/name-binding/const.js diff --git a/test/language/class/name-binding/expression.js b/test/language/statements/class/name-binding/expression.js similarity index 100% rename from test/language/class/name-binding/expression.js rename to test/language/statements/class/name-binding/expression.js diff --git a/test/language/class/name-binding/in-extends-expression-assigned.js b/test/language/statements/class/name-binding/in-extends-expression-assigned.js similarity index 100% rename from test/language/class/name-binding/in-extends-expression-assigned.js rename to test/language/statements/class/name-binding/in-extends-expression-assigned.js diff --git a/test/language/class/name-binding/in-extends-expression-grouped.js b/test/language/statements/class/name-binding/in-extends-expression-grouped.js similarity index 100% rename from test/language/class/name-binding/in-extends-expression-grouped.js rename to test/language/statements/class/name-binding/in-extends-expression-grouped.js diff --git a/test/language/class/name-binding/in-extends-expression.js b/test/language/statements/class/name-binding/in-extends-expression.js similarity index 100% rename from test/language/class/name-binding/in-extends-expression.js rename to test/language/statements/class/name-binding/in-extends-expression.js diff --git a/test/language/class/strict-mode/arguments-caller.js b/test/language/statements/class/strict-mode/arguments-caller.js similarity index 100% rename from test/language/class/strict-mode/arguments-caller.js rename to test/language/statements/class/strict-mode/arguments-caller.js diff --git a/test/language/class/strict-mode/with.js b/test/language/statements/class/strict-mode/with.js similarity index 100% rename from test/language/class/strict-mode/with.js rename to test/language/statements/class/strict-mode/with.js diff --git a/test/language/class/subclass/binding.js b/test/language/statements/class/subclass/binding.js similarity index 100% rename from test/language/class/subclass/binding.js rename to test/language/statements/class/subclass/binding.js diff --git a/test/language/class/subclass/builtins.js b/test/language/statements/class/subclass/builtins.js similarity index 100% rename from test/language/class/subclass/builtins.js rename to test/language/statements/class/subclass/builtins.js diff --git a/test/language/statements/class/subclass/class-definition-evaluation-empty-constructor-heritage-present.js b/test/language/statements/class/subclass/class-definition-evaluation-empty-constructor-heritage-present.js new file mode 100644 index 0000000000000000000000000000000000000000..a8c395bac8c9439be282aeb9d27c2e07a9315b43 --- /dev/null +++ b/test/language/statements/class/subclass/class-definition-evaluation-empty-constructor-heritage-present.js @@ -0,0 +1,35 @@ +// Copyright (C) 2014 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 14.5.14 +description: > + 10. If constructor is empty, then, + a. If ClassHeritageopt is present, then + i. Let constructor be the result of parsing the String "constructor(... args){ super (...args);}" using the syntactic grammar with the goal symbol MethodDefinition. +---*/ +var args; + +class A { + constructor() { + args = arguments; + } +} + +class B extends A { + /* + The missing constructor is created by the runtime: + + constructor(...args) { + super(...args); + } + + */ +} + +new B(0, 1, 2); + + +assert.sameValue(args[0], 0); +assert.sameValue(args[1], 1); +assert.sameValue(args[2], 2); + diff --git a/test/language/statements/class/subclass/class-definition-null-proto-contains-return-override.js b/test/language/statements/class/subclass/class-definition-null-proto-contains-return-override.js new file mode 100644 index 0000000000000000000000000000000000000000..0ea3d0c22194a591b6379065adf88c2f42902423 --- /dev/null +++ b/test/language/statements/class/subclass/class-definition-null-proto-contains-return-override.js @@ -0,0 +1,22 @@ +// Copyright (C) 2014 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 14.5.14 +description: > + Runtime Semantics: ClassDefinitionEvaluation + + If superclass is null, then + Let protoParent be null. + Let constructorParent be the intrinsic object %FunctionPrototype%. + + `extends null` requires return override in the constructor +---*/ +class Foo extends null { + constructor() { + return {}; + } +} + +var f = new Foo(); + +assert.sameValue(Object.getPrototypeOf(f), Object.prototype); diff --git a/test/language/statements/class/subclass/class-definition-null-proto-missing-return-override.js b/test/language/statements/class/subclass/class-definition-null-proto-missing-return-override.js new file mode 100644 index 0000000000000000000000000000000000000000..9a32025987c3849c98b37664d30af2290785fa50 --- /dev/null +++ b/test/language/statements/class/subclass/class-definition-null-proto-missing-return-override.js @@ -0,0 +1,21 @@ +// Copyright (C) 2014 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 14.5.14 +description: > + Runtime Semantics: ClassDefinitionEvaluation + + If superclass is null, then + Let protoParent be null. + Let constructorParent be the intrinsic object %FunctionPrototype%. + + `extends null` requires return override in the constructor +---*/ +class Foo extends null { + constructor() {} +} + +assert.throws(ReferenceError, function() { + new Foo(); +}); + diff --git a/test/language/statements/class/subclass/class-definition-null-proto.js b/test/language/statements/class/subclass/class-definition-null-proto.js new file mode 100644 index 0000000000000000000000000000000000000000..9c3ec337c3a87d9eebe1b85d39e4fe5c31dbc03b --- /dev/null +++ b/test/language/statements/class/subclass/class-definition-null-proto.js @@ -0,0 +1,19 @@ +// Copyright (C) 2014 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 14.5.14_S6.e +description: > + Runtime Semantics: ClassDefinitionEvaluation + + If superclass is null, then + Let protoParent be null. + Let constructorParent be the intrinsic object %FunctionPrototype%. +---*/ +class Foo extends null { + constructor() { + return {}; + } +} + +assert.sameValue(Object.getPrototypeOf(Foo.prototype), null); +assert.sameValue(Object.getPrototypeOf(Foo.prototype.constructor), Function.prototype); diff --git a/test/language/statements/class/subclass/class-definition-superclass-generator.js b/test/language/statements/class/subclass/class-definition-superclass-generator.js new file mode 100644 index 0000000000000000000000000000000000000000..966bf33022c43961ca4ba657d96da130dd4a7a7f --- /dev/null +++ b/test/language/statements/class/subclass/class-definition-superclass-generator.js @@ -0,0 +1,19 @@ +// Copyright (C) 2014 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 14.5.14_S6.g.i +description: > + Runtime Semantics: ClassDefinitionEvaluation + + If superclass has a [[FunctionKind]] internal slot whose value is "generator", throw a TypeError exception. +---*/ +function * G() {} + +assert.throws(TypeError, function() { + class A extends G { + constructor() { + super(); + } + } +}); + diff --git a/test/language/class/subclass/default-constructor-2.js b/test/language/statements/class/subclass/default-constructor-2.js similarity index 100% rename from test/language/class/subclass/default-constructor-2.js rename to test/language/statements/class/subclass/default-constructor-2.js diff --git a/test/language/class/subclass/default-constructor.js b/test/language/statements/class/subclass/default-constructor.js similarity index 83% rename from test/language/class/subclass/default-constructor.js rename to test/language/statements/class/subclass/default-constructor.js index 8cec05f8fa2f00c1cccd78eeccd6b3a47cddab7a..b94813cb0449a7b774a7a92c0d3de1b01d45e9dc 100644 --- a/test/language/class/subclass/default-constructor.js +++ b/test/language/statements/class/subclass/default-constructor.js @@ -12,9 +12,9 @@ class Base { } } class Derived extends Base {} -var object = new Derived; +var object = new Derived(); assert.sameValue(calls, 1, "The value of `calls` is `1`"); calls = 0; assert.throws(TypeError, function() { Derived(); }); -assert.sameValue(calls, 0, "The value of `calls` is `0`"); \ No newline at end of file +assert.sameValue(calls, 0, "The value of `calls` is `0`"); diff --git a/test/language/statements/class/subclass/derived-class-return-override-with-boolean.js b/test/language/statements/class/subclass/derived-class-return-override-with-boolean.js new file mode 100644 index 0000000000000000000000000000000000000000..9ff5b40a61836ab38820279d9729936c910252ca --- /dev/null +++ b/test/language/statements/class/subclass/derived-class-return-override-with-boolean.js @@ -0,0 +1,30 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 9.2.2 +description: > + [[Construct]] ( argumentsList, newTarget) + + ... + 13. If result.[[type]] is return, then + ... + c. If result.[[value]] is not undefined, throw a TypeError exception. + ... + + `return true;` + +---*/ +class Base { + constructor() {} +} +class Derived extends Base { + constructor() { + super(); + + return true; + } +} + +assert.throws(TypeError, function() { + new Derived(); +}); diff --git a/test/language/statements/class/subclass/derived-class-return-override-with-empty.js b/test/language/statements/class/subclass/derived-class-return-override-with-empty.js new file mode 100644 index 0000000000000000000000000000000000000000..e56239575e2ef6c34b46b3a35a6a0ccf5e48af91 --- /dev/null +++ b/test/language/statements/class/subclass/derived-class-return-override-with-empty.js @@ -0,0 +1,40 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 9.2.2 +description: > + [[Construct]] ( argumentsList, newTarget) + + ... + 13. If result.[[type]] is return, then + ... + c. If result.[[value]] is not undefined, ... + 14. Else, ReturnIfAbrupt(result). + 15. Return envRec.GetThisBinding(). + + `return (empty);` Should be the same as `return undefined;` +---*/ +var calls = 0; +class Base { + constructor() { + this.prop = 1; + calls++; + } +} +class Derived extends Base { + constructor() { + super(); + + return; + } +} + +var object = new Derived(); + +// super is called +assert.sameValue(calls, 1, "The value of `calls` is `1`, because `super()`"); + +// undefined was returned +assert.sameValue(object.prop, 1); +assert.sameValue(object instanceof Derived, true); +assert.sameValue(object instanceof Base, true); diff --git a/test/language/statements/class/subclass/derived-class-return-override-with-null.js b/test/language/statements/class/subclass/derived-class-return-override-with-null.js new file mode 100644 index 0000000000000000000000000000000000000000..858c382cd1c5e470a42833a01be4367732bfefa2 --- /dev/null +++ b/test/language/statements/class/subclass/derived-class-return-override-with-null.js @@ -0,0 +1,30 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 9.2.2 +description: > + [[Construct]] ( argumentsList, newTarget) + + ... + 13. If result.[[type]] is return, then + ... + c. If result.[[value]] is not undefined, throw a TypeError exception. + ... + + `return null;` + +---*/ +class Base { + constructor() {} +} +class Derived extends Base { + constructor() { + super(); + + return null; + } +} + +assert.throws(TypeError, function() { + new Derived(); +}); diff --git a/test/language/statements/class/subclass/derived-class-return-override-with-number.js b/test/language/statements/class/subclass/derived-class-return-override-with-number.js new file mode 100644 index 0000000000000000000000000000000000000000..3022f112bf4d751321f211aeb325b14a24d7015a --- /dev/null +++ b/test/language/statements/class/subclass/derived-class-return-override-with-number.js @@ -0,0 +1,30 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 9.2.2 +description: > + [[Construct]] ( argumentsList, newTarget) + + ... + 13. If result.[[type]] is return, then + ... + c. If result.[[value]] is not undefined, throw a TypeError exception. + ... + + `return 0;` + +---*/ +class Base { + constructor() {} +} +class Derived extends Base { + constructor() { + super(); + + return 0; + } +} + +assert.throws(TypeError, function() { + new Derived(); +}); diff --git a/test/language/statements/class/subclass/derived-class-return-override-with-object.js b/test/language/statements/class/subclass/derived-class-return-override-with-object.js new file mode 100644 index 0000000000000000000000000000000000000000..e67b86a54e3cbabc24bcc6429f61da902a10fc07 --- /dev/null +++ b/test/language/statements/class/subclass/derived-class-return-override-with-object.js @@ -0,0 +1,40 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 9.2.2 +description: > + [[Construct]] ( argumentsList, newTarget) + + ... + 13. If result.[[type]] is return, then + a. If Type(result.[[value]]) is Object, return NormalCompletion(result.[[value]]). + ... + ... + + `return {};` + +---*/ +var calls = 0; +class Base { + constructor() { + this.prop = 1; + calls++; + } +} +class Derived extends Base { + constructor() { + super(); + + return {}; + } +} + +var object = new Derived(); + +// super is called +assert.sameValue(calls, 1, "The value of `calls` is `1`, because `super()`"); + +// But the this object was discarded. +assert.sameValue(typeof object.prop, "undefined"); +assert.sameValue(object instanceof Derived, false); +assert.sameValue(object instanceof Base, false); diff --git a/test/language/statements/class/subclass/derived-class-return-override-with-string.js b/test/language/statements/class/subclass/derived-class-return-override-with-string.js new file mode 100644 index 0000000000000000000000000000000000000000..72d52d2932d2002dd3778aa515e93f3166b5828b --- /dev/null +++ b/test/language/statements/class/subclass/derived-class-return-override-with-string.js @@ -0,0 +1,30 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 9.2.2 +description: > + [[Construct]] ( argumentsList, newTarget) + + ... + 13. If result.[[type]] is return, then + ... + c. If result.[[value]] is not undefined, throw a TypeError exception. + ... + + `return "";` + +---*/ +class Base { + constructor() {} +} +class Derived extends Base { + constructor() { + super(); + + return ""; + } +} + +assert.throws(TypeError, function() { + new Derived(); +}); diff --git a/test/language/statements/class/subclass/derived-class-return-override-with-symbol.js b/test/language/statements/class/subclass/derived-class-return-override-with-symbol.js new file mode 100644 index 0000000000000000000000000000000000000000..d31896482236bd14da05f710e9a8952f350ca0ca --- /dev/null +++ b/test/language/statements/class/subclass/derived-class-return-override-with-symbol.js @@ -0,0 +1,30 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 9.2.2 +description: > + [[Construct]] ( argumentsList, newTarget) + + ... + 13. If result.[[type]] is return, then + ... + c. If result.[[value]] is not undefined, throw a TypeError exception. + ... + + `return Symbol();` + +---*/ +class Base { + constructor() {} +} +class Derived extends Base { + constructor() { + super(); + + return Symbol(); + } +} + +assert.throws(TypeError, function() { + new Derived(); +}); diff --git a/test/language/statements/class/subclass/derived-class-return-override-with-this.js b/test/language/statements/class/subclass/derived-class-return-override-with-this.js new file mode 100644 index 0000000000000000000000000000000000000000..14615e5998dad28a2d7288ba3612c4a02e271701 --- /dev/null +++ b/test/language/statements/class/subclass/derived-class-return-override-with-this.js @@ -0,0 +1,41 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 9.2.2 +description: > + [[Construct]] ( argumentsList, newTarget) + + ... + 13. If result.[[type]] is return, then + ... + b. If kind is "base", return NormalCompletion(thisArgument). + ... + ... + + `return this;` + +---*/ +var calls = 0; +class Base { + constructor() { + this.prop = 1; + calls++; + } +} +class Derived extends Base { + constructor() { + super(); + + return this; + } +} + +var object = new Derived(); + +// super is called +assert.sameValue(calls, 1, "The value of `calls` is `1`, because `super()`"); + +// The this object was returned. +assert.sameValue(object.prop, 1); +assert.sameValue(object instanceof Derived, true); +assert.sameValue(object instanceof Base, true); diff --git a/test/language/statements/class/subclass/derived-class-return-override-with-undefined.js b/test/language/statements/class/subclass/derived-class-return-override-with-undefined.js new file mode 100644 index 0000000000000000000000000000000000000000..631b9ff5ed62b7236d6a650a07637660d17ba7ea --- /dev/null +++ b/test/language/statements/class/subclass/derived-class-return-override-with-undefined.js @@ -0,0 +1,41 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 9.2.2 +description: > + [[Construct]] ( argumentsList, newTarget) + + ... + 13. If result.[[type]] is return, then + ... + c. If result.[[value]] is not undefined, ... + 14. Else, ReturnIfAbrupt(result). + 15. Return envRec.GetThisBinding(). + + `return undefined;` + +---*/ +var calls = 0; +class Base { + constructor() { + this.prop = 1; + calls++; + } +} +class Derived extends Base { + constructor() { + super(); + + return undefined; + } +} + +var object = new Derived(); + +// super is called +assert.sameValue(calls, 1, "The value of `calls` is `1`, because `super()`"); + +// undefined was returned +assert.sameValue(object.prop, 1); +assert.sameValue(object instanceof Derived, true); +assert.sameValue(object instanceof Base, true); diff --git a/test/language/class/subclass/superclass-prototype-setter-constructor.js b/test/language/statements/class/subclass/superclass-prototype-setter-constructor.js similarity index 100% rename from test/language/class/subclass/superclass-prototype-setter-constructor.js rename to test/language/statements/class/subclass/superclass-prototype-setter-constructor.js diff --git a/test/language/class/subclass/superclass-prototype-setter-method-override.js b/test/language/statements/class/subclass/superclass-prototype-setter-method-override.js similarity index 100% rename from test/language/class/subclass/superclass-prototype-setter-method-override.js rename to test/language/statements/class/subclass/superclass-prototype-setter-method-override.js diff --git a/test/language/class/subclass/superclass-static-method-override.js b/test/language/statements/class/subclass/superclass-static-method-override.js similarity index 100% rename from test/language/class/subclass/superclass-static-method-override.js rename to test/language/statements/class/subclass/superclass-static-method-override.js diff --git a/test/language/class/super/in-constructor.js b/test/language/statements/class/super/in-constructor.js similarity index 100% rename from test/language/class/super/in-constructor.js rename to test/language/statements/class/super/in-constructor.js diff --git a/test/language/class/super/in-getter.js b/test/language/statements/class/super/in-getter.js similarity index 100% rename from test/language/class/super/in-getter.js rename to test/language/statements/class/super/in-getter.js diff --git a/test/language/class/super/in-methods.js b/test/language/statements/class/super/in-methods.js similarity index 100% rename from test/language/class/super/in-methods.js rename to test/language/statements/class/super/in-methods.js diff --git a/test/language/class/super/in-setter.js b/test/language/statements/class/super/in-setter.js similarity index 100% rename from test/language/class/super/in-setter.js rename to test/language/statements/class/super/in-setter.js diff --git a/test/language/class/super/in-static-getter.js b/test/language/statements/class/super/in-static-getter.js similarity index 100% rename from test/language/class/super/in-static-getter.js rename to test/language/statements/class/super/in-static-getter.js diff --git a/test/language/class/super/in-static-methods.js b/test/language/statements/class/super/in-static-methods.js similarity index 100% rename from test/language/class/super/in-static-methods.js rename to test/language/statements/class/super/in-static-methods.js diff --git a/test/language/class/super/in-static-setter.js b/test/language/statements/class/super/in-static-setter.js similarity index 100% rename from test/language/class/super/in-static-setter.js rename to test/language/statements/class/super/in-static-setter.js diff --git a/test/language/statements/class/syntax/class-body-has-direct-super-class-heritage.js b/test/language/statements/class/syntax/class-body-has-direct-super-class-heritage.js new file mode 100644 index 0000000000000000000000000000000000000000..70aaedb0ee045f65f7205efa6bb3df881404eaf8 --- /dev/null +++ b/test/language/statements/class/syntax/class-body-has-direct-super-class-heritage.js @@ -0,0 +1,23 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 14.5.1 +description: > + The opposite of: + + ClassTail : ClassHeritageopt { ClassBody } + + It is a Syntax Error if ClassHeritage is not present and the following algorithm evaluates to true: + 1. Let constructor be ConstructorMethod of ClassBody. + 2. If constructor is empty, return false. + 3. Return HasDirectSuper of constructor. +---*/ +class A {} +class B extends A { + constructor() { + super(); + } +} + + +assert.sameValue(typeof B, "function"); diff --git a/test/language/statements/class/syntax/class-body-method-definition-super-property.js b/test/language/statements/class/syntax/class-body-method-definition-super-property.js new file mode 100644 index 0000000000000000000000000000000000000000..fd69e5fbdaaac1625037dab7ab70de8d18c46054 --- /dev/null +++ b/test/language/statements/class/syntax/class-body-method-definition-super-property.js @@ -0,0 +1,23 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 14.5.1 +description: > + No restrictions on SuperProperty +---*/ +class A { + constructor() { + super.toString(); + } + dontDoThis() { + super.makeBugs = 1; + } +} + + +assert.sameValue(typeof A, "function"); + +var a = new A(); + +a.dontDoThis(); +assert.sameValue(a.makeBugs, 1); diff --git a/test/language/statements/class/syntax/class-declaration-binding-identifier-class-element-list.js b/test/language/statements/class/syntax/class-declaration-binding-identifier-class-element-list.js new file mode 100644 index 0000000000000000000000000000000000000000..a5dfc21a437042add6d7b8c1039f94da71822711 --- /dev/null +++ b/test/language/statements/class/syntax/class-declaration-binding-identifier-class-element-list.js @@ -0,0 +1,35 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 14.5 +description: > + ClassDeclaration: + class BindingIdentifier ClassTail + + ClassTail: + ... { ClassBodyopt } + + ClassBody[Yield] : + ClassElementList[?Yield] + + + ClassElementList[Yield] : + ClassElement[?Yield] + ClassElementList[?Yield] ClassElement[?Yield] + + ClassElement[Yield] : + MethodDefinition[?Yield] + static MethodDefinition[?Yield] + ; + + +---*/ +class A { + method() {} + static method() {} + ; +} + +assert.sameValue(typeof A, "function"); +assert.sameValue(typeof A.prototype.method, "function"); +assert.sameValue(typeof A.method, "function"); diff --git a/test/language/statements/class/syntax/class-declaration-computed-method-definition.js b/test/language/statements/class/syntax/class-declaration-computed-method-definition.js new file mode 100644 index 0000000000000000000000000000000000000000..160b52dcc5fdc67d7344976973e3d66406319e44 --- /dev/null +++ b/test/language/statements/class/syntax/class-declaration-computed-method-definition.js @@ -0,0 +1,30 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 14.5 +description: > + ClassDeclaration: + class BindingIdentifier ClassTail + + ClassTail: + ... { ClassBodyopt } + + ClassBody[Yield] : + ClassElementList[?Yield] + + + ClassElementList[Yield] : + ClassElement[?Yield] + ClassElementList[?Yield] ClassElement[?Yield] + + ClassElement[Yield] : + MethodDefinition[?Yield] + ... + +---*/ +class A { + [1]() {} +} + +assert.sameValue(typeof A, "function"); +assert.sameValue(typeof A.prototype[1], "function"); diff --git a/test/language/statements/class/syntax/class-declaration-computed-method-generator-definition.js b/test/language/statements/class/syntax/class-declaration-computed-method-generator-definition.js new file mode 100644 index 0000000000000000000000000000000000000000..e7b6a02b5ce7b64aab0e069d3985d1beabd964b5 --- /dev/null +++ b/test/language/statements/class/syntax/class-declaration-computed-method-generator-definition.js @@ -0,0 +1,30 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 14.5 +description: > + ClassDeclaration: + class BindingIdentifier ClassTail + + ClassTail: + ... { ClassBodyopt } + + ClassBody[Yield] : + ClassElementList[?Yield] + + + ClassElementList[Yield] : + ClassElement[?Yield] + ClassElementList[?Yield] ClassElement[?Yield] + + ClassElement[Yield] : + MethodDefinition[?Yield] + ... + +---*/ +class A { + *[1]() {} +} + +assert.sameValue(typeof A, "function"); +assert.sameValue(typeof A.prototype[1], "function"); diff --git a/test/language/statements/class/syntax/class-declaration-heritage-identifier-reference-class-element-list.js b/test/language/statements/class/syntax/class-declaration-heritage-identifier-reference-class-element-list.js new file mode 100644 index 0000000000000000000000000000000000000000..a557d60d95d89681124c814730ad7aaadcaa6817 --- /dev/null +++ b/test/language/statements/class/syntax/class-declaration-heritage-identifier-reference-class-element-list.js @@ -0,0 +1,54 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 14.5 +description: > + ClassHeritage[Yield] : + extends LeftHandSideExpression[?Yield] + + LeftHandSideExpression : + NewExpression + ... + + NewExpression : + MemberExpression + ... + + MemberExpression : + PrimaryExpression + ... + + PrimaryExpression : + IdentifierReference + ... + + ClassDeclaration: + class BindingIdentifier ClassTail + + ClassTail: + ... { ClassBodyopt } + + ClassBody[Yield] : + ClassElementList[?Yield] + + + ClassElementList[Yield] : + ClassElement[?Yield] + ClassElementList[?Yield] ClassElement[?Yield] + + ClassElement[Yield] : + MethodDefinition[?Yield] + static MethodDefinition[?Yield] + ; + +---*/ +class A {} +class B extends A { + method() {} + static method() {} + ; +} + +assert.sameValue(typeof B, "function"); +assert.sameValue(typeof B.prototype.method, "function"); +assert.sameValue(typeof B.method, "function"); diff --git a/test/language/statements/class/syntax/class-expression-binding-identifier-opt-class-element-list.js b/test/language/statements/class/syntax/class-expression-binding-identifier-opt-class-element-list.js new file mode 100644 index 0000000000000000000000000000000000000000..7a69ee17323b618101ec4b94888d1da50f7533e3 --- /dev/null +++ b/test/language/statements/class/syntax/class-expression-binding-identifier-opt-class-element-list.js @@ -0,0 +1,39 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 14.5 +description: > + ClassExpression[Yield,GeneratorParameter] : + class BindingIdentifier[?Yield]opt ClassTail[?Yield,?GeneratorParameter] + + ClassDeclaration: + class BindingIdentifier ClassTail + + ClassTail: + ... { ClassBodyopt } + + ClassBody[Yield] : + ClassElementList[?Yield] + + + ClassElementList[Yield] : + ClassElement[?Yield] + ClassElementList[?Yield] ClassElement[?Yield] + + ClassElement[Yield] : + MethodDefinition[?Yield] + static MethodDefinition[?Yield] + ; + +---*/ +var A = class B { + method() {} + static method() {} + ; +} + +assert.sameValue(typeof A, "function"); +assert.sameValue(typeof A.prototype.method, "function"); +assert.sameValue(typeof A.method, "function"); + +assert.sameValue(typeof B, "undefined"); diff --git a/test/language/statements/class/syntax/class-expression-heritage-identifier-reference.js b/test/language/statements/class/syntax/class-expression-heritage-identifier-reference.js new file mode 100644 index 0000000000000000000000000000000000000000..fa9e6eb5d187416b3fb8a6ed54d3b59c58f26ddd --- /dev/null +++ b/test/language/statements/class/syntax/class-expression-heritage-identifier-reference.js @@ -0,0 +1,16 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 14.5 +description: > + ClassExpression[Yield,GeneratorParameter] : + class BindingIdentifier[?Yield]opt ClassTail[?Yield,?GeneratorParameter] + + ClassTail[Yield,GeneratorParameter] : + [~GeneratorParameter] ClassHeritage[?Yield]opt { ClassBody[?Yield]opt } + [+GeneratorParameter] ClassHeritageopt { ClassBodyopt } +---*/ +class A {} +var B = class extends A {} + +assert.sameValue(typeof B, "function"); diff --git a/test/language/statements/class/syntax/class-expression.js b/test/language/statements/class/syntax/class-expression.js new file mode 100644 index 0000000000000000000000000000000000000000..4fc6ed2453a030b69549af12abe265befd8dc836 --- /dev/null +++ b/test/language/statements/class/syntax/class-expression.js @@ -0,0 +1,10 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 14.5 +description: > + ClassExpression +---*/ +var A = class {} + +assert.sameValue(typeof A, "function"); diff --git a/test/language/statements/class/syntax/class-method-propname-constructor.js b/test/language/statements/class/syntax/class-method-propname-constructor.js new file mode 100644 index 0000000000000000000000000000000000000000..3cc107a9052076622604025568ff447bd38cfe45 --- /dev/null +++ b/test/language/statements/class/syntax/class-method-propname-constructor.js @@ -0,0 +1,17 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 14.5.1 +description: > + The opposite of: + + ClassBody : ClassElementList + + It is a Syntax Error if PrototypePropertyNameList of ClassElementList contains more than one occurrence of "constructor". +---*/ +class A { + constructor() {} +} + +assert.sameValue(typeof A, "function"); + diff --git a/test/language/statements/class/syntax/early-errors/class-body-constructor-empty-missing-class-heritage.js b/test/language/statements/class/syntax/early-errors/class-body-constructor-empty-missing-class-heritage.js new file mode 100644 index 0000000000000000000000000000000000000000..660792327f3bcd6193dbdc789262051163e4e542 --- /dev/null +++ b/test/language/statements/class/syntax/early-errors/class-body-constructor-empty-missing-class-heritage.js @@ -0,0 +1,16 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 14.5.1 +description: > + ClassTail : ClassHeritageopt { ClassBody } + + It is a Syntax Error if ClassHeritage is not present and the following algorithm evaluates to true: + 1. Let constructor be ConstructorMethod of ClassBody. + 2. If constructor is empty, return false. + 3. Return HasDirectSuper of constructor. +---*/ +class A { + constructor() {} +} + diff --git a/test/language/statements/class/syntax/early-errors/class-body-contains-multiple-constructor.js b/test/language/statements/class/syntax/early-errors/class-body-contains-multiple-constructor.js new file mode 100644 index 0000000000000000000000000000000000000000..a40ed2472406c52e7e4d617bf45857d35e378d82 --- /dev/null +++ b/test/language/statements/class/syntax/early-errors/class-body-contains-multiple-constructor.js @@ -0,0 +1,16 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 14.5.1 +description: > + ClassBody : ClassElementList + + It is a Syntax Error if PrototypePropertyNameList of ClassElementList contains more than one occurrence of "constructor". + +negative: SyntaxError +---*/ +class A { + constructor() {} + constructor() {} +} + diff --git a/test/language/statements/class/syntax/early-errors/class-body-has-direct-super-missing-class-heritage.js b/test/language/statements/class/syntax/early-errors/class-body-has-direct-super-missing-class-heritage.js new file mode 100644 index 0000000000000000000000000000000000000000..07a9c5d879611562975fef0560678a470c669678 --- /dev/null +++ b/test/language/statements/class/syntax/early-errors/class-body-has-direct-super-missing-class-heritage.js @@ -0,0 +1,20 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 14.5.1 +description: > + ClassTail : ClassHeritageopt { ClassBody } + + It is a Syntax Error if ClassHeritage is not present and the following algorithm evaluates to true: + 1. Let constructor be ConstructorMethod of ClassBody. + 2. If constructor is empty, return false. + 3. Return HasDirectSuper of constructor. + +negative: SyntaxError +---*/ +class A { + constructor() { + super(); + } +} + diff --git a/test/language/statements/class/syntax/early-errors/class-body-method-contains-direct-super.js b/test/language/statements/class/syntax/early-errors/class-body-method-contains-direct-super.js new file mode 100644 index 0000000000000000000000000000000000000000..f44157bb93b3b0dc1a8b3655cdc66b2038d0688f --- /dev/null +++ b/test/language/statements/class/syntax/early-errors/class-body-method-contains-direct-super.js @@ -0,0 +1,17 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 14.5.1 +description: > + ClassElement : MethodDefinition + + It is a Syntax Error if PropName of MethodDefinition is not "constructor" and HasDirectSuper of MethodDefinition is true. + +negative: SyntaxError +---*/ +class A { + method() { + super(); + } +} + diff --git a/test/language/statements/class/syntax/early-errors/class-body-special-method-generator-contains-direct-super.js b/test/language/statements/class/syntax/early-errors/class-body-special-method-generator-contains-direct-super.js new file mode 100644 index 0000000000000000000000000000000000000000..e850d38da8bd636b0bee967f1e4fd6a8a736859e --- /dev/null +++ b/test/language/statements/class/syntax/early-errors/class-body-special-method-generator-contains-direct-super.js @@ -0,0 +1,19 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 14.5.1 +description: > + ClassElement : MethodDefinition + + It is a Syntax Error if PropName of MethodDefinition is not "constructor" and HasDirectSuper of MethodDefinition is true. + + (GeneratorMethod) + +negative: SyntaxError +---*/ +class A { + * method() { + super(); + } +} + diff --git a/test/language/statements/class/syntax/early-errors/class-body-special-method-generator-propname-constructor.js b/test/language/statements/class/syntax/early-errors/class-body-special-method-generator-propname-constructor.js new file mode 100644 index 0000000000000000000000000000000000000000..aad5526bafe4ac43d0d3450ac01e3883f17c5d9d --- /dev/null +++ b/test/language/statements/class/syntax/early-errors/class-body-special-method-generator-propname-constructor.js @@ -0,0 +1,17 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 14.5.1 +description: > + ClassElement : MethodDefinition + + It is a Syntax Error if PropName of MethodDefinition is "constructor" and SpecialMethod of MethodDefinition is true. + + (GeneratorMethod) + +negative: SyntaxError +---*/ +class A { + * constructor() {} +} + diff --git a/test/language/statements/class/syntax/early-errors/class-body-special-method-get-contains-direct-super.js b/test/language/statements/class/syntax/early-errors/class-body-special-method-get-contains-direct-super.js new file mode 100644 index 0000000000000000000000000000000000000000..1cabc3a7e735df0106bb7a136481cb413c68a61d --- /dev/null +++ b/test/language/statements/class/syntax/early-errors/class-body-special-method-get-contains-direct-super.js @@ -0,0 +1,19 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 14.5.1 +description: > + ClassElement : MethodDefinition + + It is a Syntax Error if PropName of MethodDefinition is not "constructor" and HasDirectSuper of MethodDefinition is true. + + (get) + +negative: SyntaxError +---*/ +class A { + get method() { + super(); + } +} + diff --git a/test/language/statements/class/syntax/early-errors/class-body-special-method-get-propname-constructor.js b/test/language/statements/class/syntax/early-errors/class-body-special-method-get-propname-constructor.js new file mode 100644 index 0000000000000000000000000000000000000000..5cf769a3fd88b67b79adb318ae1b06ecef31534e --- /dev/null +++ b/test/language/statements/class/syntax/early-errors/class-body-special-method-get-propname-constructor.js @@ -0,0 +1,17 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 14.5.1 +description: > + ClassElement : MethodDefinition + + It is a Syntax Error if PropName of MethodDefinition is "constructor" and SpecialMethod of MethodDefinition is true. + + (get) + +negative: SyntaxError +---*/ +class A { + get constructor() {} +} + diff --git a/test/language/statements/class/syntax/early-errors/class-body-special-method-set-contains-direct-super.js b/test/language/statements/class/syntax/early-errors/class-body-special-method-set-contains-direct-super.js new file mode 100644 index 0000000000000000000000000000000000000000..11a636583f3bd63e1d3c5b173346c05ab767fd6f --- /dev/null +++ b/test/language/statements/class/syntax/early-errors/class-body-special-method-set-contains-direct-super.js @@ -0,0 +1,19 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 14.5.1 +description: > + ClassElement : MethodDefinition + + It is a Syntax Error if PropName of MethodDefinition is not "constructor" and HasDirectSuper of MethodDefinition is true. + + (set) + +negative: SyntaxError +---*/ +class A { + set method(_) { + super(); + } +} + diff --git a/test/language/statements/class/syntax/early-errors/class-body-special-method-set-propname-constructor.js b/test/language/statements/class/syntax/early-errors/class-body-special-method-set-propname-constructor.js new file mode 100644 index 0000000000000000000000000000000000000000..e0f3e48aced043b839f8be6bc8b62d2918a1c2f2 --- /dev/null +++ b/test/language/statements/class/syntax/early-errors/class-body-special-method-set-propname-constructor.js @@ -0,0 +1,17 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 14.5.1 +description: > + ClassElement : MethodDefinition + + It is a Syntax Error if PropName of MethodDefinition is "constructor" and SpecialMethod of MethodDefinition is true. + + (set) + +negative: SyntaxError +---*/ +class A { + set constructor(_) {} +} + diff --git a/test/language/statements/class/syntax/early-errors/class-body-static-method-contains-direct-super.js b/test/language/statements/class/syntax/early-errors/class-body-static-method-contains-direct-super.js new file mode 100644 index 0000000000000000000000000000000000000000..c5981097b126038a72f355ddda6cdbf74743892d --- /dev/null +++ b/test/language/statements/class/syntax/early-errors/class-body-static-method-contains-direct-super.js @@ -0,0 +1,17 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 14.5.1 +description: > + ClassElement : static MethodDefinition + + It is a Syntax Error if HasDirectSuper of MethodDefinition is true. + +negative: SyntaxError +---*/ +class A { + static method() { + super(); + } +} + diff --git a/test/language/statements/class/syntax/early-errors/class-body-static-method-get-contains-direct-super.js b/test/language/statements/class/syntax/early-errors/class-body-static-method-get-contains-direct-super.js new file mode 100644 index 0000000000000000000000000000000000000000..4b1c412a63689340696b1a5c1ba2a9826e468e47 --- /dev/null +++ b/test/language/statements/class/syntax/early-errors/class-body-static-method-get-contains-direct-super.js @@ -0,0 +1,19 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 14.5.1 +description: > + ClassElement : static MethodDefinition + + It is a Syntax Error if HasDirectSuper of MethodDefinition is true. + + (get) + +negative: SyntaxError +---*/ +class A { + static get method() { + super(); + } +} + diff --git a/test/language/statements/class/syntax/early-errors/class-body-static-method-get-propname-prototype.js b/test/language/statements/class/syntax/early-errors/class-body-static-method-get-propname-prototype.js new file mode 100644 index 0000000000000000000000000000000000000000..67afb020eac472d060233fccec715761c3d89adb --- /dev/null +++ b/test/language/statements/class/syntax/early-errors/class-body-static-method-get-propname-prototype.js @@ -0,0 +1,17 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 14.5.1 +description: > + ClassElement : static MethodDefinition + + It is a Syntax Error if PropName of MethodDefinition is "prototype". + + (get) + +negative: SyntaxError +---*/ +class A { + static get prototype() {} +} + diff --git a/test/language/statements/class/syntax/early-errors/class-body-static-method-propname-prototype.js b/test/language/statements/class/syntax/early-errors/class-body-static-method-propname-prototype.js new file mode 100644 index 0000000000000000000000000000000000000000..6ea780588ed5933be1a305d5bc49c0587a25dbed --- /dev/null +++ b/test/language/statements/class/syntax/early-errors/class-body-static-method-propname-prototype.js @@ -0,0 +1,15 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 14.5.1 +description: > + ClassElement : static MethodDefinition + + It is a Syntax Error if PropName of MethodDefinition is "prototype". + +negative: SyntaxError +---*/ +class A { + static prototype() {} +} + diff --git a/test/language/statements/class/syntax/early-errors/class-body-static-method-set-contains-direct-super.js b/test/language/statements/class/syntax/early-errors/class-body-static-method-set-contains-direct-super.js new file mode 100644 index 0000000000000000000000000000000000000000..fe7f6c52adb3e7b546461bca0d4a756387d2d18e --- /dev/null +++ b/test/language/statements/class/syntax/early-errors/class-body-static-method-set-contains-direct-super.js @@ -0,0 +1,19 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 14.5.1 +description: > + ClassElement : static MethodDefinition + + It is a Syntax Error if HasDirectSuper of MethodDefinition is true. + + (set) + +negative: SyntaxError +---*/ +class A { + static set method(_) { + super(); + } +} + diff --git a/test/language/statements/class/syntax/early-errors/class-body-static-method-set-propname-prototype.js b/test/language/statements/class/syntax/early-errors/class-body-static-method-set-propname-prototype.js new file mode 100644 index 0000000000000000000000000000000000000000..03e104010c05b53e393fcca264bc3f3ba792db92 --- /dev/null +++ b/test/language/statements/class/syntax/early-errors/class-body-static-method-set-propname-prototype.js @@ -0,0 +1,17 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 14.5.1 +description: > + ClassElement : static MethodDefinition + + It is a Syntax Error if PropName of MethodDefinition is "prototype". + + (set) + +negative: SyntaxError +---*/ +class A { + static set prototype() {} +} + diff --git a/test/language/statements/class/syntax/early-errors/class-definition-evaluation-block-duplicate-binding.js b/test/language/statements/class/syntax/early-errors/class-definition-evaluation-block-duplicate-binding.js new file mode 100644 index 0000000000000000000000000000000000000000..22e4c97ffda4915be19ed64f54b16f790641dfa3 --- /dev/null +++ b/test/language/statements/class/syntax/early-errors/class-definition-evaluation-block-duplicate-binding.js @@ -0,0 +1,14 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 13.1.1 +description: > + Block : { StatementList } + + It is a Syntax Error if the LexicallyDeclaredNames of StatementList contains any duplicate entries. +negative: SyntaxError +---*/ +{ + class A {} + class A {} +} diff --git a/test/language/statements/class/syntax/early-errors/class-definition-evaluation-scriptbody-duplicate-binding.js b/test/language/statements/class/syntax/early-errors/class-definition-evaluation-scriptbody-duplicate-binding.js new file mode 100644 index 0000000000000000000000000000000000000000..81f19676377df5e60f0ce2c91b9b090a14553008 --- /dev/null +++ b/test/language/statements/class/syntax/early-errors/class-definition-evaluation-scriptbody-duplicate-binding.js @@ -0,0 +1,12 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 15.1.1 +description: > + ScriptBody : StatementList + + It is a Syntax Error if the LexicallyDeclaredNames of StatementList contains any duplicate entries. +negative: SyntaxError +---*/ +class A {} +class A {}