From 74b07de387d4976eb232cbf69338f5a7305486e3 Mon Sep 17 00:00:00 2001
From: Leonardo Balter <leonardo.balter@gmail.com>
Date: Thu, 16 Mar 2017 15:54:24 -0400
Subject: [PATCH] Generate tests

---
 ...d-static-yield-identifier-spread-strict.js | 50 +++++++++++++++++
 ...n-method-static-yield-identifier-strict.js | 40 ++++++++++++++
 ...method-static-yield-spread-arr-multiple.js | 48 ++++++++++++++++
 ...n-method-static-yield-spread-arr-single.js | 46 ++++++++++++++++
 .../gen-method-static-yield-spread-obj.js     | 55 +++++++++++++++++++
 ...n-method-yield-identifier-spread-strict.js | 18 +++---
 .../gen-method-yield-identifier-strict.js     | 18 +++---
 .../gen-method-yield-spread-arr-multiple.js   | 18 +++---
 .../gen-method-yield-spread-arr-single.js     | 18 +++---
 .../class/gen-method-yield-spread-obj.js      | 18 +++---
 .../named-yield-identifier-non-strict.js      | 37 +++++++++++++
 ...amed-yield-identifier-spread-non-strict.js | 55 +++++++++++++++++++
 .../named-yield-identifier-spread-strict.js   | 42 ++++++++++++++
 .../named-yield-identifier-strict.js          | 32 +++++++++++
 .../named-yield-spread-arr-multiple.js        | 40 ++++++++++++++
 .../named-yield-spread-arr-single.js          | 38 +++++++++++++
 .../generators/named-yield-spread-obj.js      | 47 ++++++++++++++++
 .../generators/yield-identifier-non-strict.js |  2 +-
 .../yield-identifier-spread-non-strict.js     |  2 +-
 .../yield-identifier-spread-strict.js         |  4 +-
 .../generators/yield-identifier-strict.js     |  4 +-
 .../generators/yield-spread-arr-multiple.js   |  4 +-
 .../generators/yield-spread-arr-single.js     |  4 +-
 .../generators/yield-spread-obj.js            |  4 +-
 ....js => gen-yield-identifier-non-strict.js} |  4 +-
 ...gen-yield-identifier-spread-non-strict.js} |  4 +-
 ... => gen-yield-identifier-spread-strict.js} |  2 +-
 ...rict.js => gen-yield-identifier-strict.js} |  2 +-
 ...le.js => gen-yield-spread-arr-multiple.js} |  2 +-
 ...ngle.js => gen-yield-spread-arr-single.js} |  2 +-
 ...-spread-obj.js => gen-yield-spread-obj.js} |  2 +-
 ...d-static-yield-identifier-spread-strict.js | 50 +++++++++++++++++
 ...n-method-static-yield-identifier-strict.js | 40 ++++++++++++++
 ...method-static-yield-spread-arr-multiple.js | 48 ++++++++++++++++
 ...n-method-static-yield-spread-arr-single.js | 46 ++++++++++++++++
 .../gen-method-static-yield-spread-obj.js     | 55 +++++++++++++++++++
 ...n-method-yield-identifier-spread-strict.js | 50 +++++++++++++++++
 .../gen-method-yield-identifier-strict.js     | 40 ++++++++++++++
 .../gen-method-yield-spread-arr-multiple.js   | 48 ++++++++++++++++
 .../gen-method-yield-spread-arr-single.js     | 46 ++++++++++++++++
 .../class/gen-method-yield-spread-obj.js      | 55 +++++++++++++++++++
 .../generators/yield-identifier-non-strict.js |  2 +-
 .../yield-identifier-spread-non-strict.js     |  2 +-
 .../yield-identifier-spread-strict.js         |  8 +--
 .../generators/yield-identifier-strict.js     |  8 +--
 .../generators/yield-spread-arr-multiple.js   |  8 +--
 .../generators/yield-spread-arr-single.js     |  8 +--
 .../statements/generators/yield-spread-obj.js |  8 +--
 48 files changed, 1096 insertions(+), 88 deletions(-)
 create mode 100644 test/language/expressions/class/gen-method-static-yield-identifier-spread-strict.js
 create mode 100644 test/language/expressions/class/gen-method-static-yield-identifier-strict.js
 create mode 100644 test/language/expressions/class/gen-method-static-yield-spread-arr-multiple.js
 create mode 100644 test/language/expressions/class/gen-method-static-yield-spread-arr-single.js
 create mode 100644 test/language/expressions/class/gen-method-static-yield-spread-obj.js
 create mode 100644 test/language/expressions/generators/named-yield-identifier-non-strict.js
 create mode 100644 test/language/expressions/generators/named-yield-identifier-spread-non-strict.js
 create mode 100644 test/language/expressions/generators/named-yield-identifier-spread-strict.js
 create mode 100644 test/language/expressions/generators/named-yield-identifier-strict.js
 create mode 100644 test/language/expressions/generators/named-yield-spread-arr-multiple.js
 create mode 100644 test/language/expressions/generators/named-yield-spread-arr-single.js
 create mode 100644 test/language/expressions/generators/named-yield-spread-obj.js
 rename test/language/expressions/object/method-definition/{generator-yield-identifier-non-strict.js => gen-yield-identifier-non-strict.js} (84%)
 rename test/language/expressions/object/method-definition/{generator-yield-identifier-spread-non-strict.js => gen-yield-identifier-spread-non-strict.js} (89%)
 rename test/language/expressions/object/method-definition/{generator-yield-identifier-spread-strict.js => gen-yield-identifier-spread-strict.js} (94%)
 rename test/language/expressions/object/method-definition/{generator-yield-identifier-strict.js => gen-yield-identifier-strict.js} (93%)
 rename test/language/expressions/object/method-definition/{generator-yield-spread-arr-multiple.js => gen-yield-spread-arr-multiple.js} (94%)
 rename test/language/expressions/object/method-definition/{generator-yield-spread-arr-single.js => gen-yield-spread-arr-single.js} (94%)
 rename test/language/expressions/object/method-definition/{generator-yield-spread-obj.js => gen-yield-spread-obj.js} (95%)
 create mode 100644 test/language/statements/class/gen-method-static-yield-identifier-spread-strict.js
 create mode 100644 test/language/statements/class/gen-method-static-yield-identifier-strict.js
 create mode 100644 test/language/statements/class/gen-method-static-yield-spread-arr-multiple.js
 create mode 100644 test/language/statements/class/gen-method-static-yield-spread-arr-single.js
 create mode 100644 test/language/statements/class/gen-method-static-yield-spread-obj.js
 create mode 100644 test/language/statements/class/gen-method-yield-identifier-spread-strict.js
 create mode 100644 test/language/statements/class/gen-method-yield-identifier-strict.js
 create mode 100644 test/language/statements/class/gen-method-yield-spread-arr-multiple.js
 create mode 100644 test/language/statements/class/gen-method-yield-spread-arr-single.js
 create mode 100644 test/language/statements/class/gen-method-yield-spread-obj.js

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 0000000000..045a8d8817
--- /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 0000000000..7de5baf3dc
--- /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 0000000000..c522fe8c9f
--- /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 0000000000..9e98366650
--- /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 0000000000..22c26e1970
--- /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 b4b808dad8..c60ac8d463 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 e9c76cef22..a9e667e528 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 2bb68b422c..ac42e5da8e 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 6732fcd7bd..a9ecc6af52 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 6795c84517..192c508b2b 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 0000000000..857edb209b
--- /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 0000000000..4931f2f953
--- /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 0000000000..f375e7a0f8
--- /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 0000000000..70101210b2
--- /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 0000000000..616f13cb4b
--- /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 0000000000..eb2b8534d2
--- /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 0000000000..8688561476
--- /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 80420e6d08..8cbb2e7fc8 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 fd9025f6c9..2991544a06 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 c485c04500..3b1d37d617 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 f6bdb03ede..b6554db8fd 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 272a6acb66..f8958a970f 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 636ac3e889..f9cba19aa3 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 f7c6f2e85e..e05908ccac 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 3790d7b8aa..bb23db9746 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 6e527d280b..02c646bf75 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 3d43dc7804..801084fe31 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 0f1ad962cf..617cad48bb 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 f0c2c30ea2..c8ac0b133b 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 a535807236..47a3f9d5be 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 a135327fa7..c52740bf46 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 0000000000..1ccd803039
--- /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 0000000000..82ffa649c9
--- /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 0000000000..9a100d2455
--- /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 0000000000..900dc84d46
--- /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 0000000000..04a4f30e67
--- /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 0000000000..43a076fcfa
--- /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 0000000000..ae27517773
--- /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 0000000000..daf4bbd4a2
--- /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 0000000000..6ae9e72200
--- /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 0000000000..693003505c
--- /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 d69c887c7d..afc45810b9 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 98d33db21a..3fa89b1dfa 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 6faf35d9b6..f682d958be 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 90339c3715..7c9c5debea 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 515ac675b3..1fdf352d0b 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 ab30e3785e..00aaba1eca 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 da34100946..d5f2206179 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
 
-- 
GitLab