diff --git a/test/language/class/subclass/null.js b/test/language/class/subclass/null.js deleted file mode 100644 index de48d4ab88..0000000000 --- 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 0000000000..a8c395bac8 --- /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 0000000000..0ea3d0c221 --- /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 0000000000..9a32025987 --- /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 0000000000..9c3ec337c3 --- /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 0000000000..966bf33022 --- /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 8cec05f8fa..b94813cb04 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 0000000000..9ff5b40a61 --- /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 0000000000..e56239575e --- /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 0000000000..858c382cd1 --- /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 0000000000..3022f112bf --- /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 0000000000..e67b86a54e --- /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 0000000000..72d52d2932 --- /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 0000000000..d318964822 --- /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 0000000000..14615e5998 --- /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 0000000000..631b9ff5ed --- /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 0000000000..70aaedb0ee --- /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 0000000000..fd69e5fbda --- /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 0000000000..a5dfc21a43 --- /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 0000000000..160b52dcc5 --- /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 0000000000..e7b6a02b5c --- /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 0000000000..a557d60d95 --- /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 0000000000..7a69ee1732 --- /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 0000000000..fa9e6eb5d1 --- /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 0000000000..4fc6ed2453 --- /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 0000000000..3cc107a905 --- /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 0000000000..660792327f --- /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 0000000000..a40ed24724 --- /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 0000000000..07a9c5d879 --- /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 0000000000..f44157bb93 --- /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 0000000000..e850d38da8 --- /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 0000000000..aad5526baf --- /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 0000000000..1cabc3a7e7 --- /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 0000000000..5cf769a3fd --- /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 0000000000..11a636583f --- /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 0000000000..e0f3e48ace --- /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 0000000000..c5981097b1 --- /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 0000000000..4b1c412a63 --- /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 0000000000..67afb020ea --- /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 0000000000..6ea780588e --- /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 0000000000..fe7f6c52ad --- /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 0000000000..03e104010c --- /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 0000000000..22e4c97ffd --- /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 0000000000..81f1967637 --- /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 {}