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 {}