diff --git a/test/language/expressions/class/gen-method-static-yield-identifier-spread-strict.js b/test/language/expressions/class/gen-method-static-yield-identifier-spread-strict.js
new file mode 100644
index 0000000000000000000000000000000000000000..045a8d88179de5fc17119e271d2ce041543e02b4
--- /dev/null
+++ b/test/language/expressions/class/gen-method-static-yield-identifier-spread-strict.js
@@ -0,0 +1,50 @@
+// This file was procedurally generated from the following sources:
+// - src/generators/yield-identifier-spread-strict.case
+// - src/generators/default/class-expr-static-method.template
+/*---
+description: It's an early error if the AssignmentExpression is a function body with yield as an identifier in strict mode. (Static generator method as a ClassExpression element)
+esid: prod-GeneratorMethod
+features: [object-spread]
+flags: [generated, onlyStrict]
+negative:
+  phase: early
+  type: SyntaxError
+info: |
+    ClassElement :
+      static MethodDefinition
+
+    MethodDefinition :
+      GeneratorMethod
+
+    14.4 Generator Function Definitions
+
+    GeneratorMethod :
+      * PropertyName ( UniqueFormalParameters ) { GeneratorBody }
+
+    Spread Properties
+
+    PropertyDefinition[Yield]:
+      (...)
+      ...AssignmentExpression[In, ?Yield]
+
+---*/
+
+var callCount = 0;
+
+var C = class { static *gen() {
+    callCount += 1;
+    return {
+         ...(function() {
+            var yield;
+            throw new Test262Error();
+         }()),
+      }
+}}
+
+var gen = C.gen;
+
+var iter = gen();
+
+
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/class/gen-method-static-yield-identifier-strict.js b/test/language/expressions/class/gen-method-static-yield-identifier-strict.js
new file mode 100644
index 0000000000000000000000000000000000000000..7de5baf3dc695005848c1c3c624101843e83219a
--- /dev/null
+++ b/test/language/expressions/class/gen-method-static-yield-identifier-strict.js
@@ -0,0 +1,40 @@
+// This file was procedurally generated from the following sources:
+// - src/generators/yield-identifier-strict.case
+// - src/generators/default/class-expr-static-method.template
+/*---
+description: It's an early error if the generator body has another function body with yield as an identifier in strict mode. (Static generator method as a ClassExpression element)
+esid: prod-GeneratorMethod
+flags: [generated, onlyStrict]
+negative:
+  phase: early
+  type: SyntaxError
+info: |
+    ClassElement :
+      static MethodDefinition
+
+    MethodDefinition :
+      GeneratorMethod
+
+    14.4 Generator Function Definitions
+
+    GeneratorMethod :
+      * PropertyName ( UniqueFormalParameters ) { GeneratorBody }
+---*/
+
+var callCount = 0;
+
+var C = class { static *gen() {
+    callCount += 1;
+    (function() {
+        var yield;
+        throw new Test262Error();
+      }())
+}}
+
+var gen = C.gen;
+
+var iter = gen();
+
+
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/class/gen-method-static-yield-spread-arr-multiple.js b/test/language/expressions/class/gen-method-static-yield-spread-arr-multiple.js
new file mode 100644
index 0000000000000000000000000000000000000000..c522fe8c9f2e3ac4a1538945355f41177c07a81c
--- /dev/null
+++ b/test/language/expressions/class/gen-method-static-yield-spread-arr-multiple.js
@@ -0,0 +1,48 @@
+// This file was procedurally generated from the following sources:
+// - src/generators/yield-spread-arr-multiple.case
+// - src/generators/default/class-expr-static-method.template
+/*---
+description: Use yield value in a array spread position (Static generator method as a ClassExpression element)
+esid: prod-GeneratorMethod
+flags: [generated]
+includes: [compareArray.js]
+info: |
+    ClassElement :
+      static MethodDefinition
+
+    MethodDefinition :
+      GeneratorMethod
+
+    14.4 Generator Function Definitions
+
+    GeneratorMethod :
+      * PropertyName ( UniqueFormalParameters ) { GeneratorBody }
+
+    Array Initializer
+
+    SpreadElement[Yield, Await]:
+      ...AssignmentExpression[+In, ?Yield, ?Await]
+
+---*/
+var arr = ['a', 'b', 'c'];
+var item;
+
+var callCount = 0;
+
+var C = class { static *gen() {
+    callCount += 1;
+    yield [...yield yield];
+}}
+
+var gen = C.gen;
+
+var iter = gen();
+
+iter.next(false);
+item = iter.next(['a', 'b', 'c']);
+item = iter.next(item.value);
+
+assert(compareArray(item.value, arr));
+assert.sameValue(item.done, false);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/class/gen-method-static-yield-spread-arr-single.js b/test/language/expressions/class/gen-method-static-yield-spread-arr-single.js
new file mode 100644
index 0000000000000000000000000000000000000000..9e983666507b430678938f7cecd896e4b3006d82
--- /dev/null
+++ b/test/language/expressions/class/gen-method-static-yield-spread-arr-single.js
@@ -0,0 +1,46 @@
+// This file was procedurally generated from the following sources:
+// - src/generators/yield-spread-arr-single.case
+// - src/generators/default/class-expr-static-method.template
+/*---
+description: Use yield value in a array spread position (Static generator method as a ClassExpression element)
+esid: prod-GeneratorMethod
+flags: [generated]
+includes: [compareArray.js]
+info: |
+    ClassElement :
+      static MethodDefinition
+
+    MethodDefinition :
+      GeneratorMethod
+
+    14.4 Generator Function Definitions
+
+    GeneratorMethod :
+      * PropertyName ( UniqueFormalParameters ) { GeneratorBody }
+
+    Array Initializer
+
+    SpreadElement[Yield, Await]:
+      ...AssignmentExpression[+In, ?Yield, ?Await]
+
+---*/
+var arr = ['a', 'b', 'c'];
+
+var callCount = 0;
+
+var C = class { static *gen() {
+    callCount += 1;
+    yield [...yield];
+}}
+
+var gen = C.gen;
+
+var iter = gen();
+
+iter.next(false);
+var item = iter.next(['a', 'b', 'c']);
+
+assert(compareArray(item.value, arr));
+assert.sameValue(item.done, false);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/class/gen-method-static-yield-spread-obj.js b/test/language/expressions/class/gen-method-static-yield-spread-obj.js
new file mode 100644
index 0000000000000000000000000000000000000000..22c26e197063cbdad6ee771c8bd74244b6951f69
--- /dev/null
+++ b/test/language/expressions/class/gen-method-static-yield-spread-obj.js
@@ -0,0 +1,55 @@
+// This file was procedurally generated from the following sources:
+// - src/generators/yield-spread-obj.case
+// - src/generators/default/class-expr-static-method.template
+/*---
+description: Use yield value in a object spread position (Static generator method as a ClassExpression element)
+esid: prod-GeneratorMethod
+features: [object-spread]
+flags: [generated]
+includes: [compareArray.js]
+info: |
+    ClassElement :
+      static MethodDefinition
+
+    MethodDefinition :
+      GeneratorMethod
+
+    14.4 Generator Function Definitions
+
+    GeneratorMethod :
+      * PropertyName ( UniqueFormalParameters ) { GeneratorBody }
+
+    Spread Properties
+
+    PropertyDefinition[Yield]:
+      (...)
+      ...AssignmentExpression[In, ?Yield]
+
+---*/
+
+var callCount = 0;
+
+var C = class { static *gen() {
+    callCount += 1;
+    yield {
+        ...yield,
+        y: 1,
+        ...yield yield,
+      };
+}}
+
+var gen = C.gen;
+
+var iter = gen();
+
+iter.next();
+iter.next({ x: 42 });
+iter.next({ x: 'lol' });
+var item = iter.next({ y: 39 });
+
+assert.sameValue(item.value.x, 42);
+assert.sameValue(item.value.y, 39);
+assert.sameValue(Object.keys(item.value).length, 2);
+assert.sameValue(item.done, false);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/class/gen-method-yield-identifier-spread-strict.js b/test/language/expressions/class/gen-method-yield-identifier-spread-strict.js
index b4b808dad8e4c949c6183601c45d99fbb26b5cf4..c60ac8d463339f395983321865c4948791319b3e 100644
--- a/test/language/expressions/class/gen-method-yield-identifier-spread-strict.js
+++ b/test/language/expressions/class/gen-method-yield-identifier-spread-strict.js
@@ -1,8 +1,8 @@
 // This file was procedurally generated from the following sources:
 // - src/generators/yield-identifier-spread-strict.case
-// - src/generators/default/class-method-definition.template
+// - src/generators/default/class-expr-method.template
 /*---
-description: It's an early error if the AssignmentExpression is a function body with yield as an identifier in strict mode. (Generator method as a ClassElement)
+description: It's an early error if the AssignmentExpression is a function body with yield as an identifier in strict mode. (Generator method as a ClassExpression element)
 esid: prod-GeneratorMethod
 features: [object-spread]
 flags: [generated, onlyStrict]
@@ -10,16 +10,16 @@ negative:
   phase: early
   type: SyntaxError
 info: |
-    ClassElement[Yield, Await]:
-      MethodDefinition[?Yield, ?Await]
+    ClassElement :
+      MethodDefinition
 
-    MethodDefinition[Yield, Await]:
-      GeneratorMethod[?Yield, ?Await]
+    MethodDefinition :
+      GeneratorMethod
 
     14.4 Generator Function Definitions
 
-    GeneratorMethod[Yield, Await]:
-      * PropertyName[?Yield, ?Await] ( UniqueFormalParameters[+Yield, ~Await] ) { GeneratorBody }
+    GeneratorMethod :
+      * PropertyName ( UniqueFormalParameters ) { GeneratorBody }
 
     Spread Properties
 
@@ -31,7 +31,7 @@ info: |
 
 var callCount = 0;
 
-class C { *gen() {
+var C = class {*gen() {
     callCount += 1;
     return {
          ...(function() {
diff --git a/test/language/expressions/class/gen-method-yield-identifier-strict.js b/test/language/expressions/class/gen-method-yield-identifier-strict.js
index e9c76cef22181d31dfff003bf7b3e909c5916845..a9e667e528a6f5d612216f0d7469b45c83a6d1c1 100644
--- a/test/language/expressions/class/gen-method-yield-identifier-strict.js
+++ b/test/language/expressions/class/gen-method-yield-identifier-strict.js
@@ -1,29 +1,29 @@
 // This file was procedurally generated from the following sources:
 // - src/generators/yield-identifier-strict.case
-// - src/generators/default/class-method-definition.template
+// - src/generators/default/class-expr-method.template
 /*---
-description: It's an early error if the generator body has another function body with yield as an identifier in strict mode. (Generator method as a ClassElement)
+description: It's an early error if the generator body has another function body with yield as an identifier in strict mode. (Generator method as a ClassExpression element)
 esid: prod-GeneratorMethod
 flags: [generated, onlyStrict]
 negative:
   phase: early
   type: SyntaxError
 info: |
-    ClassElement[Yield, Await]:
-      MethodDefinition[?Yield, ?Await]
+    ClassElement :
+      MethodDefinition
 
-    MethodDefinition[Yield, Await]:
-      GeneratorMethod[?Yield, ?Await]
+    MethodDefinition :
+      GeneratorMethod
 
     14.4 Generator Function Definitions
 
-    GeneratorMethod[Yield, Await]:
-      * PropertyName[?Yield, ?Await] ( UniqueFormalParameters[+Yield, ~Await] ) { GeneratorBody }
+    GeneratorMethod :
+      * PropertyName ( UniqueFormalParameters ) { GeneratorBody }
 ---*/
 
 var callCount = 0;
 
-class C { *gen() {
+var C = class {*gen() {
     callCount += 1;
     (function() {
         var yield;
diff --git a/test/language/expressions/class/gen-method-yield-spread-arr-multiple.js b/test/language/expressions/class/gen-method-yield-spread-arr-multiple.js
index 2bb68b422c13ff8201f31d547b22175c98785eec..ac42e5da8e12336e06bca9316914295a58054e13 100644
--- a/test/language/expressions/class/gen-method-yield-spread-arr-multiple.js
+++ b/test/language/expressions/class/gen-method-yield-spread-arr-multiple.js
@@ -1,22 +1,22 @@
 // This file was procedurally generated from the following sources:
 // - src/generators/yield-spread-arr-multiple.case
-// - src/generators/default/class-method-definition.template
+// - src/generators/default/class-expr-method.template
 /*---
-description: Use yield value in a array spread position (Generator method as a ClassElement)
+description: Use yield value in a array spread position (Generator method as a ClassExpression element)
 esid: prod-GeneratorMethod
 flags: [generated]
 includes: [compareArray.js]
 info: |
-    ClassElement[Yield, Await]:
-      MethodDefinition[?Yield, ?Await]
+    ClassElement :
+      MethodDefinition
 
-    MethodDefinition[Yield, Await]:
-      GeneratorMethod[?Yield, ?Await]
+    MethodDefinition :
+      GeneratorMethod
 
     14.4 Generator Function Definitions
 
-    GeneratorMethod[Yield, Await]:
-      * PropertyName[?Yield, ?Await] ( UniqueFormalParameters[+Yield, ~Await] ) { GeneratorBody }
+    GeneratorMethod :
+      * PropertyName ( UniqueFormalParameters ) { GeneratorBody }
 
     Array Initializer
 
@@ -29,7 +29,7 @@ var item;
 
 var callCount = 0;
 
-class C { *gen() {
+var C = class {*gen() {
     callCount += 1;
     yield [...yield yield];
 }}
diff --git a/test/language/expressions/class/gen-method-yield-spread-arr-single.js b/test/language/expressions/class/gen-method-yield-spread-arr-single.js
index 6732fcd7bd2fef8611fe4653c756a24d6973da69..a9ecc6af525b672ef4adb77112a2ec226ae58e51 100644
--- a/test/language/expressions/class/gen-method-yield-spread-arr-single.js
+++ b/test/language/expressions/class/gen-method-yield-spread-arr-single.js
@@ -1,22 +1,22 @@
 // This file was procedurally generated from the following sources:
 // - src/generators/yield-spread-arr-single.case
-// - src/generators/default/class-method-definition.template
+// - src/generators/default/class-expr-method.template
 /*---
-description: Use yield value in a array spread position (Generator method as a ClassElement)
+description: Use yield value in a array spread position (Generator method as a ClassExpression element)
 esid: prod-GeneratorMethod
 flags: [generated]
 includes: [compareArray.js]
 info: |
-    ClassElement[Yield, Await]:
-      MethodDefinition[?Yield, ?Await]
+    ClassElement :
+      MethodDefinition
 
-    MethodDefinition[Yield, Await]:
-      GeneratorMethod[?Yield, ?Await]
+    MethodDefinition :
+      GeneratorMethod
 
     14.4 Generator Function Definitions
 
-    GeneratorMethod[Yield, Await]:
-      * PropertyName[?Yield, ?Await] ( UniqueFormalParameters[+Yield, ~Await] ) { GeneratorBody }
+    GeneratorMethod :
+      * PropertyName ( UniqueFormalParameters ) { GeneratorBody }
 
     Array Initializer
 
@@ -28,7 +28,7 @@ var arr = ['a', 'b', 'c'];
 
 var callCount = 0;
 
-class C { *gen() {
+var C = class {*gen() {
     callCount += 1;
     yield [...yield];
 }}
diff --git a/test/language/expressions/class/gen-method-yield-spread-obj.js b/test/language/expressions/class/gen-method-yield-spread-obj.js
index 6795c8451735f1079fce64c59fa11d210d6a5f8f..192c508b2b9d4af125de924faa228502852af51a 100644
--- a/test/language/expressions/class/gen-method-yield-spread-obj.js
+++ b/test/language/expressions/class/gen-method-yield-spread-obj.js
@@ -1,23 +1,23 @@
 // This file was procedurally generated from the following sources:
 // - src/generators/yield-spread-obj.case
-// - src/generators/default/class-method-definition.template
+// - src/generators/default/class-expr-method.template
 /*---
-description: Use yield value in a object spread position (Generator method as a ClassElement)
+description: Use yield value in a object spread position (Generator method as a ClassExpression element)
 esid: prod-GeneratorMethod
 features: [object-spread]
 flags: [generated]
 includes: [compareArray.js]
 info: |
-    ClassElement[Yield, Await]:
-      MethodDefinition[?Yield, ?Await]
+    ClassElement :
+      MethodDefinition
 
-    MethodDefinition[Yield, Await]:
-      GeneratorMethod[?Yield, ?Await]
+    MethodDefinition :
+      GeneratorMethod
 
     14.4 Generator Function Definitions
 
-    GeneratorMethod[Yield, Await]:
-      * PropertyName[?Yield, ?Await] ( UniqueFormalParameters[+Yield, ~Await] ) { GeneratorBody }
+    GeneratorMethod :
+      * PropertyName ( UniqueFormalParameters ) { GeneratorBody }
 
     Spread Properties
 
@@ -29,7 +29,7 @@ info: |
 
 var callCount = 0;
 
-class C { *gen() {
+var C = class {*gen() {
     callCount += 1;
     yield {
         ...yield,
diff --git a/test/language/expressions/generators/named-yield-identifier-non-strict.js b/test/language/expressions/generators/named-yield-identifier-non-strict.js
new file mode 100644
index 0000000000000000000000000000000000000000..857edb209b7b76359f7174ea6ece87b0e3f7e7f3
--- /dev/null
+++ b/test/language/expressions/generators/named-yield-identifier-non-strict.js
@@ -0,0 +1,37 @@
+// This file was procedurally generated from the following sources:
+// - src/generators/yield-identifier-non-strict.case
+// - src/generators/non-strict/expression-named.template
+/*---
+description: Use of yield as a valid identifier in a function body inside a generator body in non strict mode (Generator named expression - valid for non-strict only cases)
+esid: prod-GeneratorExpression
+flags: [generated, noStrict]
+info: |
+    14.4 Generator Function Definitions
+
+    GeneratorExpression:
+      function * BindingIdentifier opt ( FormalParameters ) { GeneratorBody }
+---*/
+
+var callCount = 0;
+
+var gen = function *g() {
+  callCount += 1;
+  return (function(arg) {
+      var yield = arg + 1;
+      return yield;
+    }(yield))
+};
+
+var iter = gen();
+
+var item = iter.next();
+
+assert.sameValue(item.done, false);
+assert.sameValue(item.value, undefined);
+
+item = iter.next(42);
+
+assert.sameValue(item.done, true);
+assert.sameValue(item.value, 43);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/generators/named-yield-identifier-spread-non-strict.js b/test/language/expressions/generators/named-yield-identifier-spread-non-strict.js
new file mode 100644
index 0000000000000000000000000000000000000000..4931f2f953287fe9875afc339006f207e25a9df3
--- /dev/null
+++ b/test/language/expressions/generators/named-yield-identifier-spread-non-strict.js
@@ -0,0 +1,55 @@
+// This file was procedurally generated from the following sources:
+// - src/generators/yield-identifier-spread-non-strict.case
+// - src/generators/non-strict/expression-named.template
+/*---
+description: Mixed use of object spread and yield as a valid identifier in a function body inside a generator body in non strict mode (Generator named expression - valid for non-strict only cases)
+esid: prod-GeneratorExpression
+features: [object-spread]
+flags: [generated, noStrict]
+info: |
+    14.4 Generator Function Definitions
+
+    GeneratorExpression:
+      function * BindingIdentifier opt ( FormalParameters ) { GeneratorBody }
+
+    Spread Properties
+
+    PropertyDefinition[Yield]:
+      (...)
+      ...AssignmentExpression[In, ?Yield]
+
+---*/
+
+var callCount = 0;
+
+var gen = function *g() {
+  callCount += 1;
+  yield {
+       ...yield yield,
+       ...(function(arg) {
+          var yield = arg;
+          return {...yield};
+       }(yield)),
+       ...yield,
+    }
+};
+
+var iter = gen();
+
+var iter = gen();
+
+iter.next();
+iter.next();
+iter.next({ x: 10, a: 0, b: 0 });
+iter.next({ y: 20, a: 1, b: 1 });
+var item = iter.next({ z: 30, b: 2 });
+
+assert.sameValue(item.done, false);
+assert.sameValue(item.value.x, 10);
+assert.sameValue(item.value.y, 20);
+assert.sameValue(item.value.z, 30);
+assert.sameValue(item.value.a, 1);
+assert.sameValue(item.value.b, 2);
+assert.sameValue(Object.keys(item.value).length, 5);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/generators/named-yield-identifier-spread-strict.js b/test/language/expressions/generators/named-yield-identifier-spread-strict.js
new file mode 100644
index 0000000000000000000000000000000000000000..f375e7a0f8d667b36e7c19c6c694906157bbf500
--- /dev/null
+++ b/test/language/expressions/generators/named-yield-identifier-spread-strict.js
@@ -0,0 +1,42 @@
+// This file was procedurally generated from the following sources:
+// - src/generators/yield-identifier-spread-strict.case
+// - src/generators/default/expression-named.template
+/*---
+description: It's an early error if the AssignmentExpression is a function body with yield as an identifier in strict mode. (Named generator expression)
+esid: prod-GeneratorExpression
+features: [object-spread]
+flags: [generated, onlyStrict]
+negative:
+  phase: early
+  type: SyntaxError
+info: |
+    14.4 Generator Function Definitions
+
+    GeneratorExpression:
+      function * BindingIdentifier opt ( FormalParameters ) { GeneratorBody }
+
+    Spread Properties
+
+    PropertyDefinition[Yield]:
+      (...)
+      ...AssignmentExpression[In, ?Yield]
+
+---*/
+
+var callCount = 0;
+
+var gen = function *g() {
+  callCount += 1;
+  return {
+       ...(function() {
+          var yield;
+          throw new Test262Error();
+       }()),
+    }
+};
+
+var iter = gen();
+
+
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/generators/named-yield-identifier-strict.js b/test/language/expressions/generators/named-yield-identifier-strict.js
new file mode 100644
index 0000000000000000000000000000000000000000..70101210b2778885c416262131ebdee0ea1e1fb3
--- /dev/null
+++ b/test/language/expressions/generators/named-yield-identifier-strict.js
@@ -0,0 +1,32 @@
+// This file was procedurally generated from the following sources:
+// - src/generators/yield-identifier-strict.case
+// - src/generators/default/expression-named.template
+/*---
+description: It's an early error if the generator body has another function body with yield as an identifier in strict mode. (Named generator expression)
+esid: prod-GeneratorExpression
+flags: [generated, onlyStrict]
+negative:
+  phase: early
+  type: SyntaxError
+info: |
+    14.4 Generator Function Definitions
+
+    GeneratorExpression:
+      function * BindingIdentifier opt ( FormalParameters ) { GeneratorBody }
+---*/
+
+var callCount = 0;
+
+var gen = function *g() {
+  callCount += 1;
+  (function() {
+      var yield;
+      throw new Test262Error();
+    }())
+};
+
+var iter = gen();
+
+
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/generators/named-yield-spread-arr-multiple.js b/test/language/expressions/generators/named-yield-spread-arr-multiple.js
new file mode 100644
index 0000000000000000000000000000000000000000..616f13cb4bda5a0cab44ccf3142d8b82e9ed4ffe
--- /dev/null
+++ b/test/language/expressions/generators/named-yield-spread-arr-multiple.js
@@ -0,0 +1,40 @@
+// This file was procedurally generated from the following sources:
+// - src/generators/yield-spread-arr-multiple.case
+// - src/generators/default/expression-named.template
+/*---
+description: Use yield value in a array spread position (Named generator expression)
+esid: prod-GeneratorExpression
+flags: [generated]
+includes: [compareArray.js]
+info: |
+    14.4 Generator Function Definitions
+
+    GeneratorExpression:
+      function * BindingIdentifier opt ( FormalParameters ) { GeneratorBody }
+
+    Array Initializer
+
+    SpreadElement[Yield, Await]:
+      ...AssignmentExpression[+In, ?Yield, ?Await]
+
+---*/
+var arr = ['a', 'b', 'c'];
+var item;
+
+var callCount = 0;
+
+var gen = function *g() {
+  callCount += 1;
+  yield [...yield yield];
+};
+
+var iter = gen();
+
+iter.next(false);
+item = iter.next(['a', 'b', 'c']);
+item = iter.next(item.value);
+
+assert(compareArray(item.value, arr));
+assert.sameValue(item.done, false);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/generators/named-yield-spread-arr-single.js b/test/language/expressions/generators/named-yield-spread-arr-single.js
new file mode 100644
index 0000000000000000000000000000000000000000..eb2b8534d209d35f5ce92442c242824382b3bdf0
--- /dev/null
+++ b/test/language/expressions/generators/named-yield-spread-arr-single.js
@@ -0,0 +1,38 @@
+// This file was procedurally generated from the following sources:
+// - src/generators/yield-spread-arr-single.case
+// - src/generators/default/expression-named.template
+/*---
+description: Use yield value in a array spread position (Named generator expression)
+esid: prod-GeneratorExpression
+flags: [generated]
+includes: [compareArray.js]
+info: |
+    14.4 Generator Function Definitions
+
+    GeneratorExpression:
+      function * BindingIdentifier opt ( FormalParameters ) { GeneratorBody }
+
+    Array Initializer
+
+    SpreadElement[Yield, Await]:
+      ...AssignmentExpression[+In, ?Yield, ?Await]
+
+---*/
+var arr = ['a', 'b', 'c'];
+
+var callCount = 0;
+
+var gen = function *g() {
+  callCount += 1;
+  yield [...yield];
+};
+
+var iter = gen();
+
+iter.next(false);
+var item = iter.next(['a', 'b', 'c']);
+
+assert(compareArray(item.value, arr));
+assert.sameValue(item.done, false);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/generators/named-yield-spread-obj.js b/test/language/expressions/generators/named-yield-spread-obj.js
new file mode 100644
index 0000000000000000000000000000000000000000..86885614767384db9df3935d25aba759e966f80d
--- /dev/null
+++ b/test/language/expressions/generators/named-yield-spread-obj.js
@@ -0,0 +1,47 @@
+// This file was procedurally generated from the following sources:
+// - src/generators/yield-spread-obj.case
+// - src/generators/default/expression-named.template
+/*---
+description: Use yield value in a object spread position (Named generator expression)
+esid: prod-GeneratorExpression
+features: [object-spread]
+flags: [generated]
+includes: [compareArray.js]
+info: |
+    14.4 Generator Function Definitions
+
+    GeneratorExpression:
+      function * BindingIdentifier opt ( FormalParameters ) { GeneratorBody }
+
+    Spread Properties
+
+    PropertyDefinition[Yield]:
+      (...)
+      ...AssignmentExpression[In, ?Yield]
+
+---*/
+
+var callCount = 0;
+
+var gen = function *g() {
+  callCount += 1;
+  yield {
+      ...yield,
+      y: 1,
+      ...yield yield,
+    };
+};
+
+var iter = gen();
+
+iter.next();
+iter.next({ x: 42 });
+iter.next({ x: 'lol' });
+var item = iter.next({ y: 39 });
+
+assert.sameValue(item.value.x, 42);
+assert.sameValue(item.value.y, 39);
+assert.sameValue(Object.keys(item.value).length, 2);
+assert.sameValue(item.done, false);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/generators/yield-identifier-non-strict.js b/test/language/expressions/generators/yield-identifier-non-strict.js
index 80420e6d08ca8f6d0d47b950b153888067e88bc6..8cbb2e7fc8d94d1a621afc3bfa996728a886b11c 100644
--- a/test/language/expressions/generators/yield-identifier-non-strict.js
+++ b/test/language/expressions/generators/yield-identifier-non-strict.js
@@ -9,7 +9,7 @@ info: |
     14.4 Generator Function Definitions
 
     GeneratorExpression:
-      function * BindingIdentifier[+Yield, ~Await]opt ( FormalParameters[+Yield, ~Await] ) { GeneratorBody }
+      function * BindingIdentifier opt ( FormalParameters ) { GeneratorBody }
 ---*/
 
 var callCount = 0;
diff --git a/test/language/expressions/generators/yield-identifier-spread-non-strict.js b/test/language/expressions/generators/yield-identifier-spread-non-strict.js
index fd9025f6c921ff86800edb859efb0c08027e6c63..2991544a0607cef32b8d89cd07df3ad1b37e7b28 100644
--- a/test/language/expressions/generators/yield-identifier-spread-non-strict.js
+++ b/test/language/expressions/generators/yield-identifier-spread-non-strict.js
@@ -10,7 +10,7 @@ info: |
     14.4 Generator Function Definitions
 
     GeneratorExpression:
-      function * BindingIdentifier[+Yield, ~Await]opt ( FormalParameters[+Yield, ~Await] ) { GeneratorBody }
+      function * BindingIdentifier opt ( FormalParameters ) { GeneratorBody }
 
     Spread Properties
 
diff --git a/test/language/expressions/generators/yield-identifier-spread-strict.js b/test/language/expressions/generators/yield-identifier-spread-strict.js
index c485c04500d4e9c77fdcee7b45b4e66924f7674a..3b1d37d61779b5d53d1130a0b63a2130280d33b3 100644
--- a/test/language/expressions/generators/yield-identifier-spread-strict.js
+++ b/test/language/expressions/generators/yield-identifier-spread-strict.js
@@ -2,7 +2,7 @@
 // - src/generators/yield-identifier-spread-strict.case
 // - src/generators/default/expression.template
 /*---
-description: It's an early error if the AssignmentExpression is a function body with yield as an identifier in strict mode. (Generator expression)
+description: It's an early error if the AssignmentExpression is a function body with yield as an identifier in strict mode. (Unnamed generator expression)
 esid: prod-GeneratorExpression
 features: [object-spread]
 flags: [generated, onlyStrict]
@@ -13,7 +13,7 @@ info: |
     14.4 Generator Function Definitions
 
     GeneratorExpression:
-      function * BindingIdentifier[+Yield, ~Await]opt ( FormalParameters[+Yield, ~Await] ) { GeneratorBody }
+      function * BindingIdentifier opt ( FormalParameters ) { GeneratorBody }
 
     Spread Properties
 
diff --git a/test/language/expressions/generators/yield-identifier-strict.js b/test/language/expressions/generators/yield-identifier-strict.js
index f6bdb03ede1fbade5c2d4d4513d111c35f42fd65..b6554db8fd336286830f401e066f6aa905fe8808 100644
--- a/test/language/expressions/generators/yield-identifier-strict.js
+++ b/test/language/expressions/generators/yield-identifier-strict.js
@@ -2,7 +2,7 @@
 // - src/generators/yield-identifier-strict.case
 // - src/generators/default/expression.template
 /*---
-description: It's an early error if the generator body has another function body with yield as an identifier in strict mode. (Generator expression)
+description: It's an early error if the generator body has another function body with yield as an identifier in strict mode. (Unnamed generator expression)
 esid: prod-GeneratorExpression
 flags: [generated, onlyStrict]
 negative:
@@ -12,7 +12,7 @@ info: |
     14.4 Generator Function Definitions
 
     GeneratorExpression:
-      function * BindingIdentifier[+Yield, ~Await]opt ( FormalParameters[+Yield, ~Await] ) { GeneratorBody }
+      function * BindingIdentifier opt ( FormalParameters ) { GeneratorBody }
 ---*/
 
 var callCount = 0;
diff --git a/test/language/expressions/generators/yield-spread-arr-multiple.js b/test/language/expressions/generators/yield-spread-arr-multiple.js
index 272a6acb666b34fce59c1469b0ada648e4446e89..f8958a970f47f753d87cad7a9483805d89fd19d5 100644
--- a/test/language/expressions/generators/yield-spread-arr-multiple.js
+++ b/test/language/expressions/generators/yield-spread-arr-multiple.js
@@ -2,7 +2,7 @@
 // - src/generators/yield-spread-arr-multiple.case
 // - src/generators/default/expression.template
 /*---
-description: Use yield value in a array spread position (Generator expression)
+description: Use yield value in a array spread position (Unnamed generator expression)
 esid: prod-GeneratorExpression
 flags: [generated]
 includes: [compareArray.js]
@@ -10,7 +10,7 @@ info: |
     14.4 Generator Function Definitions
 
     GeneratorExpression:
-      function * BindingIdentifier[+Yield, ~Await]opt ( FormalParameters[+Yield, ~Await] ) { GeneratorBody }
+      function * BindingIdentifier opt ( FormalParameters ) { GeneratorBody }
 
     Array Initializer
 
diff --git a/test/language/expressions/generators/yield-spread-arr-single.js b/test/language/expressions/generators/yield-spread-arr-single.js
index 636ac3e889463152bade7dfca5ad105aa910808a..f9cba19aa323d8edd47e31d7e5d476050d0f2a57 100644
--- a/test/language/expressions/generators/yield-spread-arr-single.js
+++ b/test/language/expressions/generators/yield-spread-arr-single.js
@@ -2,7 +2,7 @@
 // - src/generators/yield-spread-arr-single.case
 // - src/generators/default/expression.template
 /*---
-description: Use yield value in a array spread position (Generator expression)
+description: Use yield value in a array spread position (Unnamed generator expression)
 esid: prod-GeneratorExpression
 flags: [generated]
 includes: [compareArray.js]
@@ -10,7 +10,7 @@ info: |
     14.4 Generator Function Definitions
 
     GeneratorExpression:
-      function * BindingIdentifier[+Yield, ~Await]opt ( FormalParameters[+Yield, ~Await] ) { GeneratorBody }
+      function * BindingIdentifier opt ( FormalParameters ) { GeneratorBody }
 
     Array Initializer
 
diff --git a/test/language/expressions/generators/yield-spread-obj.js b/test/language/expressions/generators/yield-spread-obj.js
index f7c6f2e85e857c026fcf6ad4780166c8b027e3c4..e05908ccac28dd833a604e2121f8681677d6700c 100644
--- a/test/language/expressions/generators/yield-spread-obj.js
+++ b/test/language/expressions/generators/yield-spread-obj.js
@@ -2,7 +2,7 @@
 // - src/generators/yield-spread-obj.case
 // - src/generators/default/expression.template
 /*---
-description: Use yield value in a object spread position (Generator expression)
+description: Use yield value in a object spread position (Unnamed generator expression)
 esid: prod-GeneratorExpression
 features: [object-spread]
 flags: [generated]
@@ -11,7 +11,7 @@ info: |
     14.4 Generator Function Definitions
 
     GeneratorExpression:
-      function * BindingIdentifier[+Yield, ~Await]opt ( FormalParameters[+Yield, ~Await] ) { GeneratorBody }
+      function * BindingIdentifier opt ( FormalParameters ) { GeneratorBody }
 
     Spread Properties
 
diff --git a/test/language/expressions/object/method-definition/generator-yield-identifier-non-strict.js b/test/language/expressions/object/method-definition/gen-yield-identifier-non-strict.js
similarity index 84%
rename from test/language/expressions/object/method-definition/generator-yield-identifier-non-strict.js
rename to test/language/expressions/object/method-definition/gen-yield-identifier-non-strict.js
index 3790d7b8aac833717443291ba037c8cb58446594..bb23db974688cfd336a760d7f9644989c0079820 100644
--- a/test/language/expressions/object/method-definition/generator-yield-identifier-non-strict.js
+++ b/test/language/expressions/object/method-definition/gen-yield-identifier-non-strict.js
@@ -1,6 +1,6 @@
 // This file was procedurally generated from the following sources:
 // - src/generators/yield-identifier-non-strict.case
-// - src/generators/non-strict/method-definition.template
+// - src/generators/non-strict/obj-method.template
 /*---
 description: Use of yield as a valid identifier in a function body inside a generator body in non strict mode (Generator method - valid for non-strict only cases)
 esid: prod-GeneratorMethod
@@ -9,7 +9,7 @@ info: |
     14.4 Generator Function Definitions
 
     GeneratorMethod[Yield, Await]:
-      * PropertyName[?Yield, ?Await] ( UniqueFormalParameters[+Yield, ~Await] ) { GeneratorBody }
+      * PropertyName ( UniqueFormalParameters ) { GeneratorBody }
 ---*/
 
 var callCount = 0;
diff --git a/test/language/expressions/object/method-definition/generator-yield-identifier-spread-non-strict.js b/test/language/expressions/object/method-definition/gen-yield-identifier-spread-non-strict.js
similarity index 89%
rename from test/language/expressions/object/method-definition/generator-yield-identifier-spread-non-strict.js
rename to test/language/expressions/object/method-definition/gen-yield-identifier-spread-non-strict.js
index 6e527d280b2a9ab772e3196ee6ff8c115e74afc5..02c646bf754f83895f1ca0a84dd2cae8054396fe 100644
--- a/test/language/expressions/object/method-definition/generator-yield-identifier-spread-non-strict.js
+++ b/test/language/expressions/object/method-definition/gen-yield-identifier-spread-non-strict.js
@@ -1,6 +1,6 @@
 // This file was procedurally generated from the following sources:
 // - src/generators/yield-identifier-spread-non-strict.case
-// - src/generators/non-strict/method-definition.template
+// - src/generators/non-strict/obj-method.template
 /*---
 description: Mixed use of object spread and yield as a valid identifier in a function body inside a generator body in non strict mode (Generator method - valid for non-strict only cases)
 esid: prod-GeneratorMethod
@@ -10,7 +10,7 @@ info: |
     14.4 Generator Function Definitions
 
     GeneratorMethod[Yield, Await]:
-      * PropertyName[?Yield, ?Await] ( UniqueFormalParameters[+Yield, ~Await] ) { GeneratorBody }
+      * PropertyName ( UniqueFormalParameters ) { GeneratorBody }
 
     Spread Properties
 
diff --git a/test/language/expressions/object/method-definition/generator-yield-identifier-spread-strict.js b/test/language/expressions/object/method-definition/gen-yield-identifier-spread-strict.js
similarity index 94%
rename from test/language/expressions/object/method-definition/generator-yield-identifier-spread-strict.js
rename to test/language/expressions/object/method-definition/gen-yield-identifier-spread-strict.js
index 3d43dc780483c73faf4447834b6ae39891c41f63..801084fe312ea6e331a2a0f4f3b7396106ffb8b4 100644
--- a/test/language/expressions/object/method-definition/generator-yield-identifier-spread-strict.js
+++ b/test/language/expressions/object/method-definition/gen-yield-identifier-spread-strict.js
@@ -1,6 +1,6 @@
 // This file was procedurally generated from the following sources:
 // - src/generators/yield-identifier-spread-strict.case
-// - src/generators/default/method-definition.template
+// - src/generators/default/obj-method.template
 /*---
 description: It's an early error if the AssignmentExpression is a function body with yield as an identifier in strict mode. (Generator method)
 esid: prod-GeneratorMethod
diff --git a/test/language/expressions/object/method-definition/generator-yield-identifier-strict.js b/test/language/expressions/object/method-definition/gen-yield-identifier-strict.js
similarity index 93%
rename from test/language/expressions/object/method-definition/generator-yield-identifier-strict.js
rename to test/language/expressions/object/method-definition/gen-yield-identifier-strict.js
index 0f1ad962cfce7ca17de982377d3585e1978ece11..617cad48bb78c682ebd59961eb636cedf99959da 100644
--- a/test/language/expressions/object/method-definition/generator-yield-identifier-strict.js
+++ b/test/language/expressions/object/method-definition/gen-yield-identifier-strict.js
@@ -1,6 +1,6 @@
 // This file was procedurally generated from the following sources:
 // - src/generators/yield-identifier-strict.case
-// - src/generators/default/method-definition.template
+// - src/generators/default/obj-method.template
 /*---
 description: It's an early error if the generator body has another function body with yield as an identifier in strict mode. (Generator method)
 esid: prod-GeneratorMethod
diff --git a/test/language/expressions/object/method-definition/generator-yield-spread-arr-multiple.js b/test/language/expressions/object/method-definition/gen-yield-spread-arr-multiple.js
similarity index 94%
rename from test/language/expressions/object/method-definition/generator-yield-spread-arr-multiple.js
rename to test/language/expressions/object/method-definition/gen-yield-spread-arr-multiple.js
index f0c2c30ea2240952abcbab805f080be746a035cc..c8ac0b133b7ec552caef0f0227069d56e7fee906 100644
--- a/test/language/expressions/object/method-definition/generator-yield-spread-arr-multiple.js
+++ b/test/language/expressions/object/method-definition/gen-yield-spread-arr-multiple.js
@@ -1,6 +1,6 @@
 // This file was procedurally generated from the following sources:
 // - src/generators/yield-spread-arr-multiple.case
-// - src/generators/default/method-definition.template
+// - src/generators/default/obj-method.template
 /*---
 description: Use yield value in a array spread position (Generator method)
 esid: prod-GeneratorMethod
diff --git a/test/language/expressions/object/method-definition/generator-yield-spread-arr-single.js b/test/language/expressions/object/method-definition/gen-yield-spread-arr-single.js
similarity index 94%
rename from test/language/expressions/object/method-definition/generator-yield-spread-arr-single.js
rename to test/language/expressions/object/method-definition/gen-yield-spread-arr-single.js
index a535807236c17704e4ad37371635ed7b289a9c7f..47a3f9d5beca15f60e56b2ac1c43ad8d221c8a3a 100644
--- a/test/language/expressions/object/method-definition/generator-yield-spread-arr-single.js
+++ b/test/language/expressions/object/method-definition/gen-yield-spread-arr-single.js
@@ -1,6 +1,6 @@
 // This file was procedurally generated from the following sources:
 // - src/generators/yield-spread-arr-single.case
-// - src/generators/default/method-definition.template
+// - src/generators/default/obj-method.template
 /*---
 description: Use yield value in a array spread position (Generator method)
 esid: prod-GeneratorMethod
diff --git a/test/language/expressions/object/method-definition/generator-yield-spread-obj.js b/test/language/expressions/object/method-definition/gen-yield-spread-obj.js
similarity index 95%
rename from test/language/expressions/object/method-definition/generator-yield-spread-obj.js
rename to test/language/expressions/object/method-definition/gen-yield-spread-obj.js
index a135327fa7a7fd415f2feb95962a5209b6e0f1c0..c52740bf46e7403f204c566caadb234424108e15 100644
--- a/test/language/expressions/object/method-definition/generator-yield-spread-obj.js
+++ b/test/language/expressions/object/method-definition/gen-yield-spread-obj.js
@@ -1,6 +1,6 @@
 // This file was procedurally generated from the following sources:
 // - src/generators/yield-spread-obj.case
-// - src/generators/default/method-definition.template
+// - src/generators/default/obj-method.template
 /*---
 description: Use yield value in a object spread position (Generator method)
 esid: prod-GeneratorMethod
diff --git a/test/language/statements/class/gen-method-static-yield-identifier-spread-strict.js b/test/language/statements/class/gen-method-static-yield-identifier-spread-strict.js
new file mode 100644
index 0000000000000000000000000000000000000000..1ccd80303971d4a394baf1f74a2fb351ee37462c
--- /dev/null
+++ b/test/language/statements/class/gen-method-static-yield-identifier-spread-strict.js
@@ -0,0 +1,50 @@
+// This file was procedurally generated from the following sources:
+// - src/generators/yield-identifier-spread-strict.case
+// - src/generators/default/class-decl-static-method.template
+/*---
+description: It's an early error if the AssignmentExpression is a function body with yield as an identifier in strict mode. (Static generator method as a ClassDeclaration element)
+esid: prod-GeneratorMethod
+features: [object-spread]
+flags: [generated, onlyStrict]
+negative:
+  phase: early
+  type: SyntaxError
+info: |
+    ClassElement :
+      static MethodDefinition
+
+    MethodDefinition :
+      GeneratorMethod
+
+    14.4 Generator Function Definitions
+
+    GeneratorMethod :
+      * PropertyName ( UniqueFormalParameters ) { GeneratorBody }
+
+    Spread Properties
+
+    PropertyDefinition[Yield]:
+      (...)
+      ...AssignmentExpression[In, ?Yield]
+
+---*/
+
+var callCount = 0;
+
+class C {static *gen() {
+    callCount += 1;
+    return {
+         ...(function() {
+            var yield;
+            throw new Test262Error();
+         }()),
+      }
+}}
+
+var gen = C.gen;
+
+var iter = gen();
+
+
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/statements/class/gen-method-static-yield-identifier-strict.js b/test/language/statements/class/gen-method-static-yield-identifier-strict.js
new file mode 100644
index 0000000000000000000000000000000000000000..82ffa649c91ab876ea413f05aa1ac19fbede1ccf
--- /dev/null
+++ b/test/language/statements/class/gen-method-static-yield-identifier-strict.js
@@ -0,0 +1,40 @@
+// This file was procedurally generated from the following sources:
+// - src/generators/yield-identifier-strict.case
+// - src/generators/default/class-decl-static-method.template
+/*---
+description: It's an early error if the generator body has another function body with yield as an identifier in strict mode. (Static generator method as a ClassDeclaration element)
+esid: prod-GeneratorMethod
+flags: [generated, onlyStrict]
+negative:
+  phase: early
+  type: SyntaxError
+info: |
+    ClassElement :
+      static MethodDefinition
+
+    MethodDefinition :
+      GeneratorMethod
+
+    14.4 Generator Function Definitions
+
+    GeneratorMethod :
+      * PropertyName ( UniqueFormalParameters ) { GeneratorBody }
+---*/
+
+var callCount = 0;
+
+class C {static *gen() {
+    callCount += 1;
+    (function() {
+        var yield;
+        throw new Test262Error();
+      }())
+}}
+
+var gen = C.gen;
+
+var iter = gen();
+
+
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/statements/class/gen-method-static-yield-spread-arr-multiple.js b/test/language/statements/class/gen-method-static-yield-spread-arr-multiple.js
new file mode 100644
index 0000000000000000000000000000000000000000..9a100d24559b5e9914c292ee0321ec079cfa6184
--- /dev/null
+++ b/test/language/statements/class/gen-method-static-yield-spread-arr-multiple.js
@@ -0,0 +1,48 @@
+// This file was procedurally generated from the following sources:
+// - src/generators/yield-spread-arr-multiple.case
+// - src/generators/default/class-decl-static-method.template
+/*---
+description: Use yield value in a array spread position (Static generator method as a ClassDeclaration element)
+esid: prod-GeneratorMethod
+flags: [generated]
+includes: [compareArray.js]
+info: |
+    ClassElement :
+      static MethodDefinition
+
+    MethodDefinition :
+      GeneratorMethod
+
+    14.4 Generator Function Definitions
+
+    GeneratorMethod :
+      * PropertyName ( UniqueFormalParameters ) { GeneratorBody }
+
+    Array Initializer
+
+    SpreadElement[Yield, Await]:
+      ...AssignmentExpression[+In, ?Yield, ?Await]
+
+---*/
+var arr = ['a', 'b', 'c'];
+var item;
+
+var callCount = 0;
+
+class C {static *gen() {
+    callCount += 1;
+    yield [...yield yield];
+}}
+
+var gen = C.gen;
+
+var iter = gen();
+
+iter.next(false);
+item = iter.next(['a', 'b', 'c']);
+item = iter.next(item.value);
+
+assert(compareArray(item.value, arr));
+assert.sameValue(item.done, false);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/statements/class/gen-method-static-yield-spread-arr-single.js b/test/language/statements/class/gen-method-static-yield-spread-arr-single.js
new file mode 100644
index 0000000000000000000000000000000000000000..900dc84d4601abd42646f2f87986a379964e5d8a
--- /dev/null
+++ b/test/language/statements/class/gen-method-static-yield-spread-arr-single.js
@@ -0,0 +1,46 @@
+// This file was procedurally generated from the following sources:
+// - src/generators/yield-spread-arr-single.case
+// - src/generators/default/class-decl-static-method.template
+/*---
+description: Use yield value in a array spread position (Static generator method as a ClassDeclaration element)
+esid: prod-GeneratorMethod
+flags: [generated]
+includes: [compareArray.js]
+info: |
+    ClassElement :
+      static MethodDefinition
+
+    MethodDefinition :
+      GeneratorMethod
+
+    14.4 Generator Function Definitions
+
+    GeneratorMethod :
+      * PropertyName ( UniqueFormalParameters ) { GeneratorBody }
+
+    Array Initializer
+
+    SpreadElement[Yield, Await]:
+      ...AssignmentExpression[+In, ?Yield, ?Await]
+
+---*/
+var arr = ['a', 'b', 'c'];
+
+var callCount = 0;
+
+class C {static *gen() {
+    callCount += 1;
+    yield [...yield];
+}}
+
+var gen = C.gen;
+
+var iter = gen();
+
+iter.next(false);
+var item = iter.next(['a', 'b', 'c']);
+
+assert(compareArray(item.value, arr));
+assert.sameValue(item.done, false);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/statements/class/gen-method-static-yield-spread-obj.js b/test/language/statements/class/gen-method-static-yield-spread-obj.js
new file mode 100644
index 0000000000000000000000000000000000000000..04a4f30e67bc2d73d49feeec2c8af15290031ee9
--- /dev/null
+++ b/test/language/statements/class/gen-method-static-yield-spread-obj.js
@@ -0,0 +1,55 @@
+// This file was procedurally generated from the following sources:
+// - src/generators/yield-spread-obj.case
+// - src/generators/default/class-decl-static-method.template
+/*---
+description: Use yield value in a object spread position (Static generator method as a ClassDeclaration element)
+esid: prod-GeneratorMethod
+features: [object-spread]
+flags: [generated]
+includes: [compareArray.js]
+info: |
+    ClassElement :
+      static MethodDefinition
+
+    MethodDefinition :
+      GeneratorMethod
+
+    14.4 Generator Function Definitions
+
+    GeneratorMethod :
+      * PropertyName ( UniqueFormalParameters ) { GeneratorBody }
+
+    Spread Properties
+
+    PropertyDefinition[Yield]:
+      (...)
+      ...AssignmentExpression[In, ?Yield]
+
+---*/
+
+var callCount = 0;
+
+class C {static *gen() {
+    callCount += 1;
+    yield {
+        ...yield,
+        y: 1,
+        ...yield yield,
+      };
+}}
+
+var gen = C.gen;
+
+var iter = gen();
+
+iter.next();
+iter.next({ x: 42 });
+iter.next({ x: 'lol' });
+var item = iter.next({ y: 39 });
+
+assert.sameValue(item.value.x, 42);
+assert.sameValue(item.value.y, 39);
+assert.sameValue(Object.keys(item.value).length, 2);
+assert.sameValue(item.done, false);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/statements/class/gen-method-yield-identifier-spread-strict.js b/test/language/statements/class/gen-method-yield-identifier-spread-strict.js
new file mode 100644
index 0000000000000000000000000000000000000000..43a076fcfab9fbd7f438b42b5eab02235f698233
--- /dev/null
+++ b/test/language/statements/class/gen-method-yield-identifier-spread-strict.js
@@ -0,0 +1,50 @@
+// This file was procedurally generated from the following sources:
+// - src/generators/yield-identifier-spread-strict.case
+// - src/generators/default/class-decl-method.template
+/*---
+description: It's an early error if the AssignmentExpression is a function body with yield as an identifier in strict mode. (Geenerator method as a ClassDeclaration element)
+esid: prod-GeneratorMethod
+features: [object-spread]
+flags: [generated, onlyStrict]
+negative:
+  phase: early
+  type: SyntaxError
+info: |
+    ClassElement :
+      MethodDefinition
+
+    MethodDefinition :
+      GeneratorMethod
+
+    14.4 Generator Function Definitions
+
+    GeneratorMethod :
+      * PropertyName ( UniqueFormalParameters ) { GeneratorBody }
+
+    Spread Properties
+
+    PropertyDefinition[Yield]:
+      (...)
+      ...AssignmentExpression[In, ?Yield]
+
+---*/
+
+var callCount = 0;
+
+class C { *gen() {
+    callCount += 1;
+    return {
+         ...(function() {
+            var yield;
+            throw new Test262Error();
+         }()),
+      }
+}}
+
+var gen = C.prototype.gen;
+
+var iter = gen();
+
+
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/statements/class/gen-method-yield-identifier-strict.js b/test/language/statements/class/gen-method-yield-identifier-strict.js
new file mode 100644
index 0000000000000000000000000000000000000000..ae27517773b2138344f75ccbcb41a63c5f40a1c9
--- /dev/null
+++ b/test/language/statements/class/gen-method-yield-identifier-strict.js
@@ -0,0 +1,40 @@
+// This file was procedurally generated from the following sources:
+// - src/generators/yield-identifier-strict.case
+// - src/generators/default/class-decl-method.template
+/*---
+description: It's an early error if the generator body has another function body with yield as an identifier in strict mode. (Geenerator method as a ClassDeclaration element)
+esid: prod-GeneratorMethod
+flags: [generated, onlyStrict]
+negative:
+  phase: early
+  type: SyntaxError
+info: |
+    ClassElement :
+      MethodDefinition
+
+    MethodDefinition :
+      GeneratorMethod
+
+    14.4 Generator Function Definitions
+
+    GeneratorMethod :
+      * PropertyName ( UniqueFormalParameters ) { GeneratorBody }
+---*/
+
+var callCount = 0;
+
+class C { *gen() {
+    callCount += 1;
+    (function() {
+        var yield;
+        throw new Test262Error();
+      }())
+}}
+
+var gen = C.prototype.gen;
+
+var iter = gen();
+
+
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/statements/class/gen-method-yield-spread-arr-multiple.js b/test/language/statements/class/gen-method-yield-spread-arr-multiple.js
new file mode 100644
index 0000000000000000000000000000000000000000..daf4bbd4a2753a8b85b2de5577364a2a8142611d
--- /dev/null
+++ b/test/language/statements/class/gen-method-yield-spread-arr-multiple.js
@@ -0,0 +1,48 @@
+// This file was procedurally generated from the following sources:
+// - src/generators/yield-spread-arr-multiple.case
+// - src/generators/default/class-decl-method.template
+/*---
+description: Use yield value in a array spread position (Geenerator method as a ClassDeclaration element)
+esid: prod-GeneratorMethod
+flags: [generated]
+includes: [compareArray.js]
+info: |
+    ClassElement :
+      MethodDefinition
+
+    MethodDefinition :
+      GeneratorMethod
+
+    14.4 Generator Function Definitions
+
+    GeneratorMethod :
+      * PropertyName ( UniqueFormalParameters ) { GeneratorBody }
+
+    Array Initializer
+
+    SpreadElement[Yield, Await]:
+      ...AssignmentExpression[+In, ?Yield, ?Await]
+
+---*/
+var arr = ['a', 'b', 'c'];
+var item;
+
+var callCount = 0;
+
+class C { *gen() {
+    callCount += 1;
+    yield [...yield yield];
+}}
+
+var gen = C.prototype.gen;
+
+var iter = gen();
+
+iter.next(false);
+item = iter.next(['a', 'b', 'c']);
+item = iter.next(item.value);
+
+assert(compareArray(item.value, arr));
+assert.sameValue(item.done, false);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/statements/class/gen-method-yield-spread-arr-single.js b/test/language/statements/class/gen-method-yield-spread-arr-single.js
new file mode 100644
index 0000000000000000000000000000000000000000..6ae9e72200249bb8029ce4719fe10d9898c5ffff
--- /dev/null
+++ b/test/language/statements/class/gen-method-yield-spread-arr-single.js
@@ -0,0 +1,46 @@
+// This file was procedurally generated from the following sources:
+// - src/generators/yield-spread-arr-single.case
+// - src/generators/default/class-decl-method.template
+/*---
+description: Use yield value in a array spread position (Geenerator method as a ClassDeclaration element)
+esid: prod-GeneratorMethod
+flags: [generated]
+includes: [compareArray.js]
+info: |
+    ClassElement :
+      MethodDefinition
+
+    MethodDefinition :
+      GeneratorMethod
+
+    14.4 Generator Function Definitions
+
+    GeneratorMethod :
+      * PropertyName ( UniqueFormalParameters ) { GeneratorBody }
+
+    Array Initializer
+
+    SpreadElement[Yield, Await]:
+      ...AssignmentExpression[+In, ?Yield, ?Await]
+
+---*/
+var arr = ['a', 'b', 'c'];
+
+var callCount = 0;
+
+class C { *gen() {
+    callCount += 1;
+    yield [...yield];
+}}
+
+var gen = C.prototype.gen;
+
+var iter = gen();
+
+iter.next(false);
+var item = iter.next(['a', 'b', 'c']);
+
+assert(compareArray(item.value, arr));
+assert.sameValue(item.done, false);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/statements/class/gen-method-yield-spread-obj.js b/test/language/statements/class/gen-method-yield-spread-obj.js
new file mode 100644
index 0000000000000000000000000000000000000000..693003505c5bd97d07eceb9e6959ad97e0b6287e
--- /dev/null
+++ b/test/language/statements/class/gen-method-yield-spread-obj.js
@@ -0,0 +1,55 @@
+// This file was procedurally generated from the following sources:
+// - src/generators/yield-spread-obj.case
+// - src/generators/default/class-decl-method.template
+/*---
+description: Use yield value in a object spread position (Geenerator method as a ClassDeclaration element)
+esid: prod-GeneratorMethod
+features: [object-spread]
+flags: [generated]
+includes: [compareArray.js]
+info: |
+    ClassElement :
+      MethodDefinition
+
+    MethodDefinition :
+      GeneratorMethod
+
+    14.4 Generator Function Definitions
+
+    GeneratorMethod :
+      * PropertyName ( UniqueFormalParameters ) { GeneratorBody }
+
+    Spread Properties
+
+    PropertyDefinition[Yield]:
+      (...)
+      ...AssignmentExpression[In, ?Yield]
+
+---*/
+
+var callCount = 0;
+
+class C { *gen() {
+    callCount += 1;
+    yield {
+        ...yield,
+        y: 1,
+        ...yield yield,
+      };
+}}
+
+var gen = C.prototype.gen;
+
+var iter = gen();
+
+iter.next();
+iter.next({ x: 42 });
+iter.next({ x: 'lol' });
+var item = iter.next({ y: 39 });
+
+assert.sameValue(item.value.x, 42);
+assert.sameValue(item.value.y, 39);
+assert.sameValue(Object.keys(item.value).length, 2);
+assert.sameValue(item.done, false);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/statements/generators/yield-identifier-non-strict.js b/test/language/statements/generators/yield-identifier-non-strict.js
index d69c887c7d63560e2f1f3301e76b04544e5188e3..afc45810b97adeef3205810772efc3a65e1d3110 100644
--- a/test/language/statements/generators/yield-identifier-non-strict.js
+++ b/test/language/statements/generators/yield-identifier-non-strict.js
@@ -1,6 +1,6 @@
 // This file was procedurally generated from the following sources:
 // - src/generators/yield-identifier-non-strict.case
-// - src/generators/non-strict/statement.template
+// - src/generators/non-strict/declaration.template
 /*---
 description: Use of yield as a valid identifier in a function body inside a generator body in non strict mode (Generator function declaration - valid for non-strict only cases)
 esid: prod-GeneratorDeclaration
diff --git a/test/language/statements/generators/yield-identifier-spread-non-strict.js b/test/language/statements/generators/yield-identifier-spread-non-strict.js
index 98d33db21afde2cd2860de8151f29f768cc37297..3fa89b1dfa78069bba034f3922f7036edaba61f0 100644
--- a/test/language/statements/generators/yield-identifier-spread-non-strict.js
+++ b/test/language/statements/generators/yield-identifier-spread-non-strict.js
@@ -1,6 +1,6 @@
 // This file was procedurally generated from the following sources:
 // - src/generators/yield-identifier-spread-non-strict.case
-// - src/generators/non-strict/statement.template
+// - src/generators/non-strict/declaration.template
 /*---
 description: Mixed use of object spread and yield as a valid identifier in a function body inside a generator body in non strict mode (Generator function declaration - valid for non-strict only cases)
 esid: prod-GeneratorDeclaration
diff --git a/test/language/statements/generators/yield-identifier-spread-strict.js b/test/language/statements/generators/yield-identifier-spread-strict.js
index 6faf35d9b67619d7c5601653dcc8a0569fb932a6..f682d958becf74962b10ce925933baae9f55dabd 100644
--- a/test/language/statements/generators/yield-identifier-spread-strict.js
+++ b/test/language/statements/generators/yield-identifier-spread-strict.js
@@ -1,8 +1,8 @@
 // This file was procedurally generated from the following sources:
 // - src/generators/yield-identifier-spread-strict.case
-// - src/generators/default/statement.template
+// - src/generators/default/declaration.template
 /*---
-description: It's an early error if the AssignmentExpression is a function body with yield as an identifier in strict mode. (Generator function declaration)
+description: It's an early error if the AssignmentExpression is a function body with yield as an identifier in strict mode. (Generator Function declaration)
 esid: prod-GeneratorDeclaration
 features: [object-spread]
 flags: [generated, onlyStrict]
@@ -12,8 +12,8 @@ negative:
 info: |
     14.4 Generator Function Definitions
 
-    GeneratorDeclaration[Yield, Await, Default]:
-      function * BindingIdentifier[?Yield, ?Await] ( FormalParameters[+Yield, ~Await] ) { GeneratorBody }
+    GeneratorDeclaration :
+      function * BindingIdentifier ( FormalParameters ) { GeneratorBody }
 
     Spread Properties
 
diff --git a/test/language/statements/generators/yield-identifier-strict.js b/test/language/statements/generators/yield-identifier-strict.js
index 90339c3715bd1fc52036dacf956cdee42272901b..7c9c5debea4c167d1ee327817ae4bc522450b2ff 100644
--- a/test/language/statements/generators/yield-identifier-strict.js
+++ b/test/language/statements/generators/yield-identifier-strict.js
@@ -1,8 +1,8 @@
 // This file was procedurally generated from the following sources:
 // - src/generators/yield-identifier-strict.case
-// - src/generators/default/statement.template
+// - src/generators/default/declaration.template
 /*---
-description: It's an early error if the generator body has another function body with yield as an identifier in strict mode. (Generator function declaration)
+description: It's an early error if the generator body has another function body with yield as an identifier in strict mode. (Generator Function declaration)
 esid: prod-GeneratorDeclaration
 flags: [generated, onlyStrict]
 negative:
@@ -11,8 +11,8 @@ negative:
 info: |
     14.4 Generator Function Definitions
 
-    GeneratorDeclaration[Yield, Await, Default]:
-      function * BindingIdentifier[?Yield, ?Await] ( FormalParameters[+Yield, ~Await] ) { GeneratorBody }
+    GeneratorDeclaration :
+      function * BindingIdentifier ( FormalParameters ) { GeneratorBody }
 ---*/
 
 var callCount = 0;
diff --git a/test/language/statements/generators/yield-spread-arr-multiple.js b/test/language/statements/generators/yield-spread-arr-multiple.js
index 515ac675b3fba4a623357109b9375d81e95e1f66..1fdf352d0b4e7fb8b79c05dae383a3b0050f15b2 100644
--- a/test/language/statements/generators/yield-spread-arr-multiple.js
+++ b/test/language/statements/generators/yield-spread-arr-multiple.js
@@ -1,16 +1,16 @@
 // This file was procedurally generated from the following sources:
 // - src/generators/yield-spread-arr-multiple.case
-// - src/generators/default/statement.template
+// - src/generators/default/declaration.template
 /*---
-description: Use yield value in a array spread position (Generator function declaration)
+description: Use yield value in a array spread position (Generator Function declaration)
 esid: prod-GeneratorDeclaration
 flags: [generated]
 includes: [compareArray.js]
 info: |
     14.4 Generator Function Definitions
 
-    GeneratorDeclaration[Yield, Await, Default]:
-      function * BindingIdentifier[?Yield, ?Await] ( FormalParameters[+Yield, ~Await] ) { GeneratorBody }
+    GeneratorDeclaration :
+      function * BindingIdentifier ( FormalParameters ) { GeneratorBody }
 
     Array Initializer
 
diff --git a/test/language/statements/generators/yield-spread-arr-single.js b/test/language/statements/generators/yield-spread-arr-single.js
index ab30e3785ecd90dff05be295c7de2c8a9d6b97fc..00aaba1eca72938079b541a6c837f104d6aae528 100644
--- a/test/language/statements/generators/yield-spread-arr-single.js
+++ b/test/language/statements/generators/yield-spread-arr-single.js
@@ -1,16 +1,16 @@
 // This file was procedurally generated from the following sources:
 // - src/generators/yield-spread-arr-single.case
-// - src/generators/default/statement.template
+// - src/generators/default/declaration.template
 /*---
-description: Use yield value in a array spread position (Generator function declaration)
+description: Use yield value in a array spread position (Generator Function declaration)
 esid: prod-GeneratorDeclaration
 flags: [generated]
 includes: [compareArray.js]
 info: |
     14.4 Generator Function Definitions
 
-    GeneratorDeclaration[Yield, Await, Default]:
-      function * BindingIdentifier[?Yield, ?Await] ( FormalParameters[+Yield, ~Await] ) { GeneratorBody }
+    GeneratorDeclaration :
+      function * BindingIdentifier ( FormalParameters ) { GeneratorBody }
 
     Array Initializer
 
diff --git a/test/language/statements/generators/yield-spread-obj.js b/test/language/statements/generators/yield-spread-obj.js
index da341009469caaa881c290dfd92ccd1fcddd62b6..d5f22061793a1f5233196315e2a8b50b737a5aa0 100644
--- a/test/language/statements/generators/yield-spread-obj.js
+++ b/test/language/statements/generators/yield-spread-obj.js
@@ -1,8 +1,8 @@
 // This file was procedurally generated from the following sources:
 // - src/generators/yield-spread-obj.case
-// - src/generators/default/statement.template
+// - src/generators/default/declaration.template
 /*---
-description: Use yield value in a object spread position (Generator function declaration)
+description: Use yield value in a object spread position (Generator Function declaration)
 esid: prod-GeneratorDeclaration
 features: [object-spread]
 flags: [generated]
@@ -10,8 +10,8 @@ includes: [compareArray.js]
 info: |
     14.4 Generator Function Definitions
 
-    GeneratorDeclaration[Yield, Await, Default]:
-      function * BindingIdentifier[?Yield, ?Await] ( FormalParameters[+Yield, ~Await] ) { GeneratorBody }
+    GeneratorDeclaration :
+      function * BindingIdentifier ( FormalParameters ) { GeneratorBody }
 
     Spread Properties