diff --git a/test/language/expressions/class/err-field-delete-covered-member-expression-privatename.js b/test/language/expressions/class/err-field-delete-covered-member-expression-privatename.js
index d77e55b4e1b17492aafc0b42f660719bac794bd8..4903bbe3bc27102d589fcf8c6092fb98ca5fab48 100644
--- a/test/language/expressions/class/err-field-delete-covered-member-expression-privatename.js
+++ b/test/language/expressions/class/err-field-delete-covered-member-expression-privatename.js
@@ -4,7 +4,7 @@
 /*---
 description: Syntax error if you call delete on member expressions . privatename (in field, covered)
 esid: sec-class-definitions-static-semantics-early-errors
-features: [class-fields-private, class]
+features: [class-fields-private, class, class-fields-public]
 flags: [generated]
 negative:
   phase: parse
diff --git a/test/language/expressions/class/fields-after-same-line-gen-computed-names.js b/test/language/expressions/class/fields-after-same-line-gen-computed-names.js
index 874f2cdfcbca5fe69026d1bafaeac8715a5a519d..81276cc9a973f6868fac1712d44b47527945f59c 100644
--- a/test/language/expressions/class/fields-after-same-line-gen-computed-names.js
+++ b/test/language/expressions/class/fields-after-same-line-gen-computed-names.js
@@ -25,7 +25,7 @@ var x = "b";
 
 var C = class {
   *m() { return 42; } [x] = 42; [10] = "meep"; ["not initialized"];
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-after-same-line-gen-computed-symbol-names.js b/test/language/expressions/class/fields-after-same-line-gen-computed-symbol-names.js
index ca449cf30321235f2c1d2b6335e8f3bad2912610..5b1638c4ab369fd4a3128dddee49f2049c0aedd8 100644
--- a/test/language/expressions/class/fields-after-same-line-gen-computed-symbol-names.js
+++ b/test/language/expressions/class/fields-after-same-line-gen-computed-symbol-names.js
@@ -26,7 +26,7 @@ var y = Symbol();
 
 var C = class {
   *m() { return 42; } [x]; [y] = 42;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-after-same-line-gen-literal-names.js b/test/language/expressions/class/fields-after-same-line-gen-literal-names.js
index cf1622749660a6d0ad211a210bd2e1ec81188293..a895a065c7c5e3a7eeb7aa675b2f59ce0268e18e 100644
--- a/test/language/expressions/class/fields-after-same-line-gen-literal-names.js
+++ b/test/language/expressions/class/fields-after-same-line-gen-literal-names.js
@@ -26,7 +26,7 @@ const fn = function() {}
 var C = class {
   *m() { return 42; } a; b = 42;
   c = fn;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-after-same-line-gen-private-names.js b/test/language/expressions/class/fields-after-same-line-gen-private-names.js
index e730657f11eab2e4667016d574f82bacd1c8f054..456c88bca9738497218836865b95187b532ba4e0 100644
--- a/test/language/expressions/class/fields-after-same-line-gen-private-names.js
+++ b/test/language/expressions/class/fields-after-same-line-gen-private-names.js
@@ -2,31 +2,31 @@
 // - src/class-fields/private-names.case
 // - src/class-fields/productions/cls-expr-after-same-line-gen.template
 /*---
-description: static literal private names (field definitions after a generator in the same line)
+description: private names (field definitions after a generator in the same line)
 esid: prod-FieldDefinition
 features: [class-fields-private, generators, class, class-fields-public]
 flags: [generated]
 includes: [propertyHelper.js]
 info: |
-    ClassElement:
+    ClassElement :
       ...
       FieldDefinition ;
 
-    FieldDefinition:
+    FieldDefinition :
       ClassElementName Initializer_opt
 
-    ClassElementName:
+    ClassElementName :
       PrivateName
 
-    PrivateName:
-      #IdentifierName
+    PrivateName :
+      # IdentifierName
 
 ---*/
 
 
 var C = class {
   *m() { return 42; } #x; #y;
-x() {
+  x() {
     this.#x = 42;
     return this.#x;
   }
diff --git a/test/language/expressions/class/fields-after-same-line-gen-static-private-fields.js b/test/language/expressions/class/fields-after-same-line-gen-static-private-fields.js
new file mode 100644
index 0000000000000000000000000000000000000000..2812237a8e58126b46af9f3e3820c89ab4df6fa2
--- /dev/null
+++ b/test/language/expressions/class/fields-after-same-line-gen-static-private-fields.js
@@ -0,0 +1,66 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-fields.case
+// - src/class-fields/productions/cls-expr-after-same-line-gen.template
+/*---
+description: static private fields (field definitions after a generator in the same line)
+esid: prod-FieldDefinition
+features: [class-static-fields-private, generators, class, class-fields-public]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+var C = class {
+  *m() { return 42; } static #x; static #y;
+  static x() {
+    this.#x = 42;
+    return this.#x;
+  }
+  static y() {
+    this.#y = 43;
+    return this.#y;
+  }
+}
+
+var c = new C();
+
+assert.sameValue(c.m().next().value, 42);
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+assert.sameValue(c.m, C.prototype.m);
+
+verifyProperty(C.prototype, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private fields do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#x"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#x"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#y"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#y"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 10");
diff --git a/test/language/expressions/class/fields-after-same-line-gen-static-private-methods.js b/test/language/expressions/class/fields-after-same-line-gen-static-private-methods.js
new file mode 100644
index 0000000000000000000000000000000000000000..a7b69d61cc9c3d3a95b5440604956bb9df714cc8
--- /dev/null
+++ b/test/language/expressions/class/fields-after-same-line-gen-static-private-methods.js
@@ -0,0 +1,72 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-methods.case
+// - src/class-fields/productions/cls-expr-after-same-line-gen.template
+/*---
+description: static private methods (field definitions after a generator in the same line)
+esid: prod-FieldDefinition
+features: [class-static-methods-private, generators, class, class-fields-public]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+var C = class {
+  *m() { return 42; } static #xVal; static #yVal;
+  static #x(value) {
+    this.#xVal = value;
+    return this.#xVal;
+  }
+  static #y(value) {
+    this.#y = value;
+    return this.#yVal;
+  }
+  static x() {
+    return this.#x(42);
+  }
+  static y() {
+    return this.#y(43);
+  }
+}
+
+var c = new C();
+
+assert.sameValue(c.m().next().value, 42);
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+assert.sameValue(c.m, C.prototype.m);
+
+verifyProperty(C.prototype, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private methods do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#xVal"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#xVal"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#yVal"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#yVal"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 10");
diff --git a/test/language/expressions/class/fields-after-same-line-gen-string-literal-names.js b/test/language/expressions/class/fields-after-same-line-gen-string-literal-names.js
index fbec9434025e11d461dea6225b4ba76f6abaa2a0..2b1e5968882d002af004e2a39f4de874d3fdc8c7 100644
--- a/test/language/expressions/class/fields-after-same-line-gen-string-literal-names.js
+++ b/test/language/expressions/class/fields-after-same-line-gen-string-literal-names.js
@@ -24,7 +24,7 @@ info: |
 var C = class {
   *m() { return 42; } 'a'; "b"; 'c' = 39;
   "d" = 42;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-after-same-line-method-computed-names.js b/test/language/expressions/class/fields-after-same-line-method-computed-names.js
index 21da8910229ec7ccdc29c65e675b890780e1b2ec..5a5da9ea5648dd69eddf8256f2b89f427560d611 100644
--- a/test/language/expressions/class/fields-after-same-line-method-computed-names.js
+++ b/test/language/expressions/class/fields-after-same-line-method-computed-names.js
@@ -25,7 +25,7 @@ var x = "b";
 
 var C = class {
   m() { return 42; } [x] = 42; [10] = "meep"; ["not initialized"];
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-after-same-line-method-computed-symbol-names.js b/test/language/expressions/class/fields-after-same-line-method-computed-symbol-names.js
index 81e5ca2a2334c5cc1c46fd9d5d459c63a5aa1729..e21e2a8a7dcf305b1f74969a0ff8f4afd1e9546c 100644
--- a/test/language/expressions/class/fields-after-same-line-method-computed-symbol-names.js
+++ b/test/language/expressions/class/fields-after-same-line-method-computed-symbol-names.js
@@ -26,7 +26,7 @@ var y = Symbol();
 
 var C = class {
   m() { return 42; } [x]; [y] = 42;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-after-same-line-method-literal-names.js b/test/language/expressions/class/fields-after-same-line-method-literal-names.js
index 542488ff923cd6b58e02e349c8af5996317aa4fe..fb0a1cb92c228b3fe381de2ae3dfd265dee77c7a 100644
--- a/test/language/expressions/class/fields-after-same-line-method-literal-names.js
+++ b/test/language/expressions/class/fields-after-same-line-method-literal-names.js
@@ -26,7 +26,7 @@ const fn = function() {}
 var C = class {
   m() { return 42; } a; b = 42;
   c = fn;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-after-same-line-method-private-names.js b/test/language/expressions/class/fields-after-same-line-method-private-names.js
index 145f1398d30367f02d9c8093654cde499eb3a7b6..7c65b26ac2e8ca12cf167cd76a85a7d4dba599c2 100644
--- a/test/language/expressions/class/fields-after-same-line-method-private-names.js
+++ b/test/language/expressions/class/fields-after-same-line-method-private-names.js
@@ -2,31 +2,31 @@
 // - src/class-fields/private-names.case
 // - src/class-fields/productions/cls-expr-after-same-line-method.template
 /*---
-description: static literal private names (field definitions after a method in the same line)
+description: private names (field definitions after a method in the same line)
 esid: prod-FieldDefinition
 features: [class-fields-private, class, class-fields-public]
 flags: [generated]
 includes: [propertyHelper.js]
 info: |
-    ClassElement:
+    ClassElement :
       ...
       FieldDefinition ;
 
-    FieldDefinition:
+    FieldDefinition :
       ClassElementName Initializer_opt
 
-    ClassElementName:
+    ClassElementName :
       PrivateName
 
-    PrivateName:
-      #IdentifierName
+    PrivateName :
+      # IdentifierName
 
 ---*/
 
 
 var C = class {
   m() { return 42; } #x; #y;
-x() {
+  x() {
     this.#x = 42;
     return this.#x;
   }
diff --git a/test/language/expressions/class/fields-after-same-line-method-static-private-fields.js b/test/language/expressions/class/fields-after-same-line-method-static-private-fields.js
new file mode 100644
index 0000000000000000000000000000000000000000..5f8209be7d03aacbf2d357118e02cd6da23a743a
--- /dev/null
+++ b/test/language/expressions/class/fields-after-same-line-method-static-private-fields.js
@@ -0,0 +1,66 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-fields.case
+// - src/class-fields/productions/cls-expr-after-same-line-method.template
+/*---
+description: static private fields (field definitions after a method in the same line)
+esid: prod-FieldDefinition
+features: [class-static-fields-private, class, class-fields-public]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+var C = class {
+  m() { return 42; } static #x; static #y;
+  static x() {
+    this.#x = 42;
+    return this.#x;
+  }
+  static y() {
+    this.#y = 43;
+    return this.#y;
+  }
+}
+
+var c = new C();
+
+assert.sameValue(c.m(), 42);
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+assert.sameValue(c.m, C.prototype.m);
+
+verifyProperty(C.prototype, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private fields do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#x"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#x"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#y"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#y"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 10");
diff --git a/test/language/expressions/class/fields-after-same-line-method-static-private-methods.js b/test/language/expressions/class/fields-after-same-line-method-static-private-methods.js
new file mode 100644
index 0000000000000000000000000000000000000000..a45087347c61a4ee7e252b0f97fa453c7094a33a
--- /dev/null
+++ b/test/language/expressions/class/fields-after-same-line-method-static-private-methods.js
@@ -0,0 +1,72 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-methods.case
+// - src/class-fields/productions/cls-expr-after-same-line-method.template
+/*---
+description: static private methods (field definitions after a method in the same line)
+esid: prod-FieldDefinition
+features: [class-static-methods-private, class, class-fields-public]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+var C = class {
+  m() { return 42; } static #xVal; static #yVal;
+  static #x(value) {
+    this.#xVal = value;
+    return this.#xVal;
+  }
+  static #y(value) {
+    this.#y = value;
+    return this.#yVal;
+  }
+  static x() {
+    return this.#x(42);
+  }
+  static y() {
+    return this.#y(43);
+  }
+}
+
+var c = new C();
+
+assert.sameValue(c.m(), 42);
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+assert.sameValue(c.m, C.prototype.m);
+
+verifyProperty(C.prototype, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private methods do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#xVal"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#xVal"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#yVal"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#yVal"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 10");
diff --git a/test/language/expressions/class/fields-after-same-line-method-string-literal-names.js b/test/language/expressions/class/fields-after-same-line-method-string-literal-names.js
index bc534cb4b9ba6887e9f537cfe5190d09d2b5e87d..a1d0ef3ad26ad85db9e3ecccf56f9cfe186e598c 100644
--- a/test/language/expressions/class/fields-after-same-line-method-string-literal-names.js
+++ b/test/language/expressions/class/fields-after-same-line-method-string-literal-names.js
@@ -24,7 +24,7 @@ info: |
 var C = class {
   m() { return 42; } 'a'; "b"; 'c' = 39;
   "d" = 42;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-after-same-line-static-async-gen-computed-names.js b/test/language/expressions/class/fields-after-same-line-static-async-gen-computed-names.js
index 2a66b8ee761e88e0701dd35dbf317980c59580a2..4f92e5bc9f4f4212c78d4cd88a0064eb16df045d 100644
--- a/test/language/expressions/class/fields-after-same-line-static-async-gen-computed-names.js
+++ b/test/language/expressions/class/fields-after-same-line-static-async-gen-computed-names.js
@@ -25,7 +25,7 @@ var x = "b";
 
 var C = class {
   static async *m() { return 42; } [x] = 42; [10] = "meep"; ["not initialized"];
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-after-same-line-static-async-gen-computed-symbol-names.js b/test/language/expressions/class/fields-after-same-line-static-async-gen-computed-symbol-names.js
index 2ea39e9b6be3697b77f009f1a62df53a8a5c30eb..80d36a6128f20c80d0f19802721aaf8333b09508 100644
--- a/test/language/expressions/class/fields-after-same-line-static-async-gen-computed-symbol-names.js
+++ b/test/language/expressions/class/fields-after-same-line-static-async-gen-computed-symbol-names.js
@@ -26,7 +26,7 @@ var y = Symbol();
 
 var C = class {
   static async *m() { return 42; } [x]; [y] = 42;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-after-same-line-static-async-gen-literal-names.js b/test/language/expressions/class/fields-after-same-line-static-async-gen-literal-names.js
index e4ebb76d4b743459310260a1733691bd1a443d4c..b298c5f63316843c47fb49b8cc0f2e49d587628a 100644
--- a/test/language/expressions/class/fields-after-same-line-static-async-gen-literal-names.js
+++ b/test/language/expressions/class/fields-after-same-line-static-async-gen-literal-names.js
@@ -26,7 +26,7 @@ const fn = function() {}
 var C = class {
   static async *m() { return 42; } a; b = 42;
   c = fn;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-after-same-line-static-async-gen-private-names.js b/test/language/expressions/class/fields-after-same-line-static-async-gen-private-names.js
index 167504e93f4a8f8ba60dffaf396ef837fed68dbe..8a73040702ac347da45fee5be86ebcd6d74b2022 100644
--- a/test/language/expressions/class/fields-after-same-line-static-async-gen-private-names.js
+++ b/test/language/expressions/class/fields-after-same-line-static-async-gen-private-names.js
@@ -2,31 +2,31 @@
 // - src/class-fields/private-names.case
 // - src/class-fields/productions/cls-expr-after-same-line-static-async-gen.template
 /*---
-description: static literal private names (field definitions after a static async generator in the same line)
+description: private names (field definitions after a static async generator in the same line)
 esid: prod-FieldDefinition
 features: [class-fields-private, class, class-fields-public, async-iteration]
 flags: [generated, async]
 includes: [propertyHelper.js]
 info: |
-    ClassElement:
+    ClassElement :
       ...
       FieldDefinition ;
 
-    FieldDefinition:
+    FieldDefinition :
       ClassElementName Initializer_opt
 
-    ClassElementName:
+    ClassElementName :
       PrivateName
 
-    PrivateName:
-      #IdentifierName
+    PrivateName :
+      # IdentifierName
 
 ---*/
 
 
 var C = class {
   static async *m() { return 42; } #x; #y;
-x() {
+  x() {
     this.#x = 42;
     return this.#x;
   }
diff --git a/test/language/expressions/class/fields-after-same-line-static-async-gen-static-private-fields.js b/test/language/expressions/class/fields-after-same-line-static-async-gen-static-private-fields.js
new file mode 100644
index 0000000000000000000000000000000000000000..8f27dd87362ab4ccc154b77a29122480f29f3e0d
--- /dev/null
+++ b/test/language/expressions/class/fields-after-same-line-static-async-gen-static-private-fields.js
@@ -0,0 +1,70 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-fields.case
+// - src/class-fields/productions/cls-expr-after-same-line-static-async-gen.template
+/*---
+description: static private fields (field definitions after a static async generator in the same line)
+esid: prod-FieldDefinition
+features: [class-static-fields-private, class, class-fields-public, async-iteration]
+flags: [generated, async]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+var C = class {
+  static async *m() { return 42; } static #x; static #y;
+  static x() {
+    this.#x = 42;
+    return this.#x;
+  }
+  static y() {
+    this.#y = 43;
+    return this.#y;
+  }
+}
+
+var c = new C();
+
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "m"), false);
+
+verifyProperty(C, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+}, {restore: true});
+
+// Test the private fields do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#x"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#x"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#y"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#y"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 10");
+
+C.m().next().then(function(v) {
+  assert.sameValue(v.value, 42);
+  assert.sameValue(v.done, true);
+}, $DONE).then($DONE, $DONE);
diff --git a/test/language/expressions/class/fields-after-same-line-static-async-gen-static-private-methods.js b/test/language/expressions/class/fields-after-same-line-static-async-gen-static-private-methods.js
new file mode 100644
index 0000000000000000000000000000000000000000..d8e030b0d5ae2e67f8167909bc7d440f8278ba3f
--- /dev/null
+++ b/test/language/expressions/class/fields-after-same-line-static-async-gen-static-private-methods.js
@@ -0,0 +1,76 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-methods.case
+// - src/class-fields/productions/cls-expr-after-same-line-static-async-gen.template
+/*---
+description: static private methods (field definitions after a static async generator in the same line)
+esid: prod-FieldDefinition
+features: [class-static-methods-private, class, class-fields-public, async-iteration]
+flags: [generated, async]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+var C = class {
+  static async *m() { return 42; } static #xVal; static #yVal;
+  static #x(value) {
+    this.#xVal = value;
+    return this.#xVal;
+  }
+  static #y(value) {
+    this.#y = value;
+    return this.#yVal;
+  }
+  static x() {
+    return this.#x(42);
+  }
+  static y() {
+    return this.#y(43);
+  }
+}
+
+var c = new C();
+
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "m"), false);
+
+verifyProperty(C, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+}, {restore: true});
+
+// Test the private methods do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#xVal"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#xVal"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#yVal"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#yVal"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 10");
+
+C.m().next().then(function(v) {
+  assert.sameValue(v.value, 42);
+  assert.sameValue(v.done, true);
+}, $DONE).then($DONE, $DONE);
diff --git a/test/language/expressions/class/fields-after-same-line-static-async-gen-string-literal-names.js b/test/language/expressions/class/fields-after-same-line-static-async-gen-string-literal-names.js
index 464838a511c825435bef3e8d85b7269520280806..95e1a4643222a1d493c0be754cad08200c4dae75 100644
--- a/test/language/expressions/class/fields-after-same-line-static-async-gen-string-literal-names.js
+++ b/test/language/expressions/class/fields-after-same-line-static-async-gen-string-literal-names.js
@@ -24,7 +24,7 @@ info: |
 var C = class {
   static async *m() { return 42; } 'a'; "b"; 'c' = 39;
   "d" = 42;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-after-same-line-static-async-method-computed-names.js b/test/language/expressions/class/fields-after-same-line-static-async-method-computed-names.js
index e39f9c059d682f6e67bff4cdf970d459672d4eff..b32ed9b83f67e69d540d546f82111f58cee6c968 100644
--- a/test/language/expressions/class/fields-after-same-line-static-async-method-computed-names.js
+++ b/test/language/expressions/class/fields-after-same-line-static-async-method-computed-names.js
@@ -25,7 +25,7 @@ var x = "b";
 
 var C = class {
   static async m() { return 42; } [x] = 42; [10] = "meep"; ["not initialized"];
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-after-same-line-static-async-method-computed-symbol-names.js b/test/language/expressions/class/fields-after-same-line-static-async-method-computed-symbol-names.js
index dd0650e0e8ad97af44f4a33af13662423dce0b57..392fb7b0a6d0e37e5dff91ce2c97410b868019a6 100644
--- a/test/language/expressions/class/fields-after-same-line-static-async-method-computed-symbol-names.js
+++ b/test/language/expressions/class/fields-after-same-line-static-async-method-computed-symbol-names.js
@@ -26,7 +26,7 @@ var y = Symbol();
 
 var C = class {
   static async m() { return 42; } [x]; [y] = 42;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-after-same-line-static-async-method-literal-names.js b/test/language/expressions/class/fields-after-same-line-static-async-method-literal-names.js
index 1e1af3d4dcfb7a39c7562f344ba7e238c7ce38ad..14f723d1dd5156f05069c1f966b70b3aa49704fc 100644
--- a/test/language/expressions/class/fields-after-same-line-static-async-method-literal-names.js
+++ b/test/language/expressions/class/fields-after-same-line-static-async-method-literal-names.js
@@ -26,7 +26,7 @@ const fn = function() {}
 var C = class {
   static async m() { return 42; } a; b = 42;
   c = fn;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-after-same-line-static-async-method-private-names.js b/test/language/expressions/class/fields-after-same-line-static-async-method-private-names.js
index df6dd1aeb771f5adbb19a306cb45065193738085..2dfe19655fb8d8d5dde5466a50ab5e6945cebffa 100644
--- a/test/language/expressions/class/fields-after-same-line-static-async-method-private-names.js
+++ b/test/language/expressions/class/fields-after-same-line-static-async-method-private-names.js
@@ -2,31 +2,31 @@
 // - src/class-fields/private-names.case
 // - src/class-fields/productions/cls-expr-after-same-line-static-async-method.template
 /*---
-description: static literal private names (field definitions after a static async method in the same line)
+description: private names (field definitions after a static async method in the same line)
 esid: prod-FieldDefinition
 features: [class-fields-private, class, class-fields-public, async-functions]
 flags: [generated, async]
 includes: [propertyHelper.js]
 info: |
-    ClassElement:
+    ClassElement :
       ...
       FieldDefinition ;
 
-    FieldDefinition:
+    FieldDefinition :
       ClassElementName Initializer_opt
 
-    ClassElementName:
+    ClassElementName :
       PrivateName
 
-    PrivateName:
-      #IdentifierName
+    PrivateName :
+      # IdentifierName
 
 ---*/
 
 
 var C = class {
   static async m() { return 42; } #x; #y;
-x() {
+  x() {
     this.#x = 42;
     return this.#x;
   }
diff --git a/test/language/expressions/class/fields-after-same-line-static-async-method-static-private-fields.js b/test/language/expressions/class/fields-after-same-line-static-async-method-static-private-fields.js
new file mode 100644
index 0000000000000000000000000000000000000000..21a43260e1365e1dccc7504634fc876f022492b4
--- /dev/null
+++ b/test/language/expressions/class/fields-after-same-line-static-async-method-static-private-fields.js
@@ -0,0 +1,69 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-fields.case
+// - src/class-fields/productions/cls-expr-after-same-line-static-async-method.template
+/*---
+description: static private fields (field definitions after a static async method in the same line)
+esid: prod-FieldDefinition
+features: [class-static-fields-private, class, class-fields-public, async-functions]
+flags: [generated, async]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+var C = class {
+  static async m() { return 42; } static #x; static #y;
+  static x() {
+    this.#x = 42;
+    return this.#x;
+  }
+  static y() {
+    this.#y = 43;
+    return this.#y;
+  }
+}
+
+var c = new C();
+
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "m"), false);
+
+verifyProperty(C, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+}, {restore: true});
+
+// Test the private fields do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#x"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#x"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#y"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#y"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 10");
+
+C.m().then(function(v) {
+  assert.sameValue(v, 42);
+}, $DONE).then($DONE, $DONE);
diff --git a/test/language/expressions/class/fields-after-same-line-static-async-method-static-private-methods.js b/test/language/expressions/class/fields-after-same-line-static-async-method-static-private-methods.js
new file mode 100644
index 0000000000000000000000000000000000000000..3a61adf3ff8815eb30b3d8fa312b40a5c085130d
--- /dev/null
+++ b/test/language/expressions/class/fields-after-same-line-static-async-method-static-private-methods.js
@@ -0,0 +1,75 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-methods.case
+// - src/class-fields/productions/cls-expr-after-same-line-static-async-method.template
+/*---
+description: static private methods (field definitions after a static async method in the same line)
+esid: prod-FieldDefinition
+features: [class-static-methods-private, class, class-fields-public, async-functions]
+flags: [generated, async]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+var C = class {
+  static async m() { return 42; } static #xVal; static #yVal;
+  static #x(value) {
+    this.#xVal = value;
+    return this.#xVal;
+  }
+  static #y(value) {
+    this.#y = value;
+    return this.#yVal;
+  }
+  static x() {
+    return this.#x(42);
+  }
+  static y() {
+    return this.#y(43);
+  }
+}
+
+var c = new C();
+
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "m"), false);
+
+verifyProperty(C, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+}, {restore: true});
+
+// Test the private methods do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#xVal"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#xVal"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#yVal"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#yVal"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 10");
+
+C.m().then(function(v) {
+  assert.sameValue(v, 42);
+}, $DONE).then($DONE, $DONE);
diff --git a/test/language/expressions/class/fields-after-same-line-static-async-method-string-literal-names.js b/test/language/expressions/class/fields-after-same-line-static-async-method-string-literal-names.js
index 25ce5be1f2f42b44b59bbcae64685c341ba46c94..9d0422cbdc71880a906119f1779cfdd65ef664d4 100644
--- a/test/language/expressions/class/fields-after-same-line-static-async-method-string-literal-names.js
+++ b/test/language/expressions/class/fields-after-same-line-static-async-method-string-literal-names.js
@@ -24,7 +24,7 @@ info: |
 var C = class {
   static async m() { return 42; } 'a'; "b"; 'c' = 39;
   "d" = 42;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-after-same-line-static-gen-computed-names.js b/test/language/expressions/class/fields-after-same-line-static-gen-computed-names.js
index 4f3cf3e5346f8de6eea865b8a49396c4f5bcc639..6012cc4503b60263d45ef44e6989e47bb0a204da 100644
--- a/test/language/expressions/class/fields-after-same-line-static-gen-computed-names.js
+++ b/test/language/expressions/class/fields-after-same-line-static-gen-computed-names.js
@@ -25,7 +25,7 @@ var x = "b";
 
 var C = class {
   static *m() { return 42; } [x] = 42; [10] = "meep"; ["not initialized"];
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-after-same-line-static-gen-computed-symbol-names.js b/test/language/expressions/class/fields-after-same-line-static-gen-computed-symbol-names.js
index 6aec78a03d824902ee1255d98e40f22143d6f8a9..2ebffeedb6bd1579d37ee2c09465994b84b71578 100644
--- a/test/language/expressions/class/fields-after-same-line-static-gen-computed-symbol-names.js
+++ b/test/language/expressions/class/fields-after-same-line-static-gen-computed-symbol-names.js
@@ -26,7 +26,7 @@ var y = Symbol();
 
 var C = class {
   static *m() { return 42; } [x]; [y] = 42;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-after-same-line-static-gen-literal-names.js b/test/language/expressions/class/fields-after-same-line-static-gen-literal-names.js
index 2ba95a6f1464e708ee96ba33333817e792e11484..a89c5d2db93ee76c864e3ec1977a01eaac2727bf 100644
--- a/test/language/expressions/class/fields-after-same-line-static-gen-literal-names.js
+++ b/test/language/expressions/class/fields-after-same-line-static-gen-literal-names.js
@@ -26,7 +26,7 @@ const fn = function() {}
 var C = class {
   static *m() { return 42; } a; b = 42;
   c = fn;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-after-same-line-static-gen-private-names.js b/test/language/expressions/class/fields-after-same-line-static-gen-private-names.js
index 5883a5abc05ab198db7cadd229f52bc20d6dc71d..c1a73d77f42cf44db6fc0cd0ec978e132e4ade29 100644
--- a/test/language/expressions/class/fields-after-same-line-static-gen-private-names.js
+++ b/test/language/expressions/class/fields-after-same-line-static-gen-private-names.js
@@ -2,31 +2,31 @@
 // - src/class-fields/private-names.case
 // - src/class-fields/productions/cls-expr-after-same-line-static-gen.template
 /*---
-description: static literal private names (field definitions after a static generator in the same line)
+description: private names (field definitions after a static generator in the same line)
 esid: prod-FieldDefinition
 features: [class-fields-private, generators, class, class-fields-public]
 flags: [generated]
 includes: [propertyHelper.js]
 info: |
-    ClassElement:
+    ClassElement :
       ...
       FieldDefinition ;
 
-    FieldDefinition:
+    FieldDefinition :
       ClassElementName Initializer_opt
 
-    ClassElementName:
+    ClassElementName :
       PrivateName
 
-    PrivateName:
-      #IdentifierName
+    PrivateName :
+      # IdentifierName
 
 ---*/
 
 
 var C = class {
   static *m() { return 42; } #x; #y;
-x() {
+  x() {
     this.#x = 42;
     return this.#x;
   }
diff --git a/test/language/expressions/class/fields-after-same-line-static-gen-static-private-fields.js b/test/language/expressions/class/fields-after-same-line-static-gen-static-private-fields.js
new file mode 100644
index 0000000000000000000000000000000000000000..4e8ea7804901a4cef8768e50c90ca3ada316eb95
--- /dev/null
+++ b/test/language/expressions/class/fields-after-same-line-static-gen-static-private-fields.js
@@ -0,0 +1,66 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-fields.case
+// - src/class-fields/productions/cls-expr-after-same-line-static-gen.template
+/*---
+description: static private fields (field definitions after a static generator in the same line)
+esid: prod-FieldDefinition
+features: [class-static-fields-private, generators, class, class-fields-public]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+var C = class {
+  static *m() { return 42; } static #x; static #y;
+  static x() {
+    this.#x = 42;
+    return this.#x;
+  }
+  static y() {
+    this.#y = 43;
+    return this.#y;
+  }
+}
+
+var c = new C();
+
+assert.sameValue(C.m().next().value, 42);
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "m"), false);
+
+verifyProperty(C, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private fields do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#x"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#x"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#y"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#y"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 10");
diff --git a/test/language/expressions/class/fields-after-same-line-static-gen-static-private-methods.js b/test/language/expressions/class/fields-after-same-line-static-gen-static-private-methods.js
new file mode 100644
index 0000000000000000000000000000000000000000..b7e9ca1ae2928894b7fea0183ae78c7f6e64a3d9
--- /dev/null
+++ b/test/language/expressions/class/fields-after-same-line-static-gen-static-private-methods.js
@@ -0,0 +1,72 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-methods.case
+// - src/class-fields/productions/cls-expr-after-same-line-static-gen.template
+/*---
+description: static private methods (field definitions after a static generator in the same line)
+esid: prod-FieldDefinition
+features: [class-static-methods-private, generators, class, class-fields-public]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+var C = class {
+  static *m() { return 42; } static #xVal; static #yVal;
+  static #x(value) {
+    this.#xVal = value;
+    return this.#xVal;
+  }
+  static #y(value) {
+    this.#y = value;
+    return this.#yVal;
+  }
+  static x() {
+    return this.#x(42);
+  }
+  static y() {
+    return this.#y(43);
+  }
+}
+
+var c = new C();
+
+assert.sameValue(C.m().next().value, 42);
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "m"), false);
+
+verifyProperty(C, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private methods do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#xVal"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#xVal"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#yVal"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#yVal"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 10");
diff --git a/test/language/expressions/class/fields-after-same-line-static-gen-string-literal-names.js b/test/language/expressions/class/fields-after-same-line-static-gen-string-literal-names.js
index 1b8364227247f005482034602373a80ee7b22221..caa4ce8271d9417c7ccf63821698c8d3dc4e5e57 100644
--- a/test/language/expressions/class/fields-after-same-line-static-gen-string-literal-names.js
+++ b/test/language/expressions/class/fields-after-same-line-static-gen-string-literal-names.js
@@ -24,7 +24,7 @@ info: |
 var C = class {
   static *m() { return 42; } 'a'; "b"; 'c' = 39;
   "d" = 42;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-after-same-line-static-method-computed-names.js b/test/language/expressions/class/fields-after-same-line-static-method-computed-names.js
index 66eb3d09897b0c4afba46a9847e3bb3a2aa5cfbb..7b67ffd5a6d9aa080b46631159cabb494fae0ba8 100644
--- a/test/language/expressions/class/fields-after-same-line-static-method-computed-names.js
+++ b/test/language/expressions/class/fields-after-same-line-static-method-computed-names.js
@@ -25,7 +25,7 @@ var x = "b";
 
 var C = class {
   static m() { return 42; } [x] = 42; [10] = "meep"; ["not initialized"];
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-after-same-line-static-method-computed-symbol-names.js b/test/language/expressions/class/fields-after-same-line-static-method-computed-symbol-names.js
index 82f3a4eaedf68b225a60aaaf8907b5f6276522a1..3d1d410d2622e1f55aad00ae051527d863e5164e 100644
--- a/test/language/expressions/class/fields-after-same-line-static-method-computed-symbol-names.js
+++ b/test/language/expressions/class/fields-after-same-line-static-method-computed-symbol-names.js
@@ -26,7 +26,7 @@ var y = Symbol();
 
 var C = class {
   static m() { return 42; } [x]; [y] = 42;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-after-same-line-static-method-literal-names.js b/test/language/expressions/class/fields-after-same-line-static-method-literal-names.js
index 59a4c9c35407416a93cb3db286a2e4730c0b08e0..0e79cf5cd4e511777f5f47201e33750208fcfc40 100644
--- a/test/language/expressions/class/fields-after-same-line-static-method-literal-names.js
+++ b/test/language/expressions/class/fields-after-same-line-static-method-literal-names.js
@@ -26,7 +26,7 @@ const fn = function() {}
 var C = class {
   static m() { return 42; } a; b = 42;
   c = fn;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-after-same-line-static-method-private-names.js b/test/language/expressions/class/fields-after-same-line-static-method-private-names.js
index 48fe0208dd5efd85ee3e06e215b268a6e07d2a08..3ab534569e6b75da19266bc3214d1cdf8f9c60d8 100644
--- a/test/language/expressions/class/fields-after-same-line-static-method-private-names.js
+++ b/test/language/expressions/class/fields-after-same-line-static-method-private-names.js
@@ -2,31 +2,31 @@
 // - src/class-fields/private-names.case
 // - src/class-fields/productions/cls-expr-after-same-line-static-method.template
 /*---
-description: static literal private names (field definitions after a static method in the same line)
+description: private names (field definitions after a static method in the same line)
 esid: prod-FieldDefinition
 features: [class-fields-private, class, class-fields-public]
 flags: [generated]
 includes: [propertyHelper.js]
 info: |
-    ClassElement:
+    ClassElement :
       ...
       FieldDefinition ;
 
-    FieldDefinition:
+    FieldDefinition :
       ClassElementName Initializer_opt
 
-    ClassElementName:
+    ClassElementName :
       PrivateName
 
-    PrivateName:
-      #IdentifierName
+    PrivateName :
+      # IdentifierName
 
 ---*/
 
 
 var C = class {
   static m() { return 42; } #x; #y;
-x() {
+  x() {
     this.#x = 42;
     return this.#x;
   }
diff --git a/test/language/expressions/class/fields-after-same-line-static-method-static-private-fields.js b/test/language/expressions/class/fields-after-same-line-static-method-static-private-fields.js
new file mode 100644
index 0000000000000000000000000000000000000000..852fa7ce836d54089bc7c4b6fa7281384257a331
--- /dev/null
+++ b/test/language/expressions/class/fields-after-same-line-static-method-static-private-fields.js
@@ -0,0 +1,66 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-fields.case
+// - src/class-fields/productions/cls-expr-after-same-line-static-method.template
+/*---
+description: static private fields (field definitions after a static method in the same line)
+esid: prod-FieldDefinition
+features: [class-static-fields-private, class, class-fields-public]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+var C = class {
+  static m() { return 42; } static #x; static #y;
+  static x() {
+    this.#x = 42;
+    return this.#x;
+  }
+  static y() {
+    this.#y = 43;
+    return this.#y;
+  }
+}
+
+var c = new C();
+
+assert.sameValue(C.m(), 42);
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "m"), false);
+
+verifyProperty(C, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private fields do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#x"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#x"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#y"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#y"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 10");
diff --git a/test/language/expressions/class/fields-after-same-line-static-method-static-private-methods.js b/test/language/expressions/class/fields-after-same-line-static-method-static-private-methods.js
new file mode 100644
index 0000000000000000000000000000000000000000..8cb2832729fd6b085b7389e816634c2ebbbc4ec2
--- /dev/null
+++ b/test/language/expressions/class/fields-after-same-line-static-method-static-private-methods.js
@@ -0,0 +1,72 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-methods.case
+// - src/class-fields/productions/cls-expr-after-same-line-static-method.template
+/*---
+description: static private methods (field definitions after a static method in the same line)
+esid: prod-FieldDefinition
+features: [class-static-methods-private, class, class-fields-public]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+var C = class {
+  static m() { return 42; } static #xVal; static #yVal;
+  static #x(value) {
+    this.#xVal = value;
+    return this.#xVal;
+  }
+  static #y(value) {
+    this.#y = value;
+    return this.#yVal;
+  }
+  static x() {
+    return this.#x(42);
+  }
+  static y() {
+    return this.#y(43);
+  }
+}
+
+var c = new C();
+
+assert.sameValue(C.m(), 42);
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "m"), false);
+
+verifyProperty(C, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private methods do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#xVal"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#xVal"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#yVal"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#yVal"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 10");
diff --git a/test/language/expressions/class/fields-after-same-line-static-method-string-literal-names.js b/test/language/expressions/class/fields-after-same-line-static-method-string-literal-names.js
index d4d1e093b1b4ee06c0ace78da41898e181e70fbe..d8d96aa6fac0538e1a739dd74ede34d0e1c2dca7 100644
--- a/test/language/expressions/class/fields-after-same-line-static-method-string-literal-names.js
+++ b/test/language/expressions/class/fields-after-same-line-static-method-string-literal-names.js
@@ -24,7 +24,7 @@ info: |
 var C = class {
   static m() { return 42; } 'a'; "b"; 'c' = 39;
   "d" = 42;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-computed-name-toprimitive-symbol.js b/test/language/expressions/class/fields-computed-name-toprimitive-symbol.js
index c9437b784d76c4bbcba4c11691228d2b4e2c59bf..5177e0ca3f6e01510a79eb99d15ac8632786698d 100644
--- a/test/language/expressions/class/fields-computed-name-toprimitive-symbol.js
+++ b/test/language/expressions/class/fields-computed-name-toprimitive-symbol.js
@@ -4,7 +4,7 @@
 /*---
 description: ToPrimitive evaluation in the ComputedPropertyName (field definitions in a class expression)
 esid: prod-FieldDefinition
-features: [computed-property-names, Symbol.toPrimitive, Symbol, class, class-fields-public]
+features: [computed-property-names, Symbol.toPrimitive, Symbol, class]
 flags: [generated]
 includes: [propertyHelper.js]
 info: |
diff --git a/test/language/expressions/class/fields-computed-name-toprimitive.js b/test/language/expressions/class/fields-computed-name-toprimitive.js
index 7329aa9b8f051b098d05d5b68aef5f4ed04e48f9..cf1349be07b7014742f67047655e6704a6b56fec 100644
--- a/test/language/expressions/class/fields-computed-name-toprimitive.js
+++ b/test/language/expressions/class/fields-computed-name-toprimitive.js
@@ -4,7 +4,7 @@
 /*---
 description: ToPrimitive evaluation in the ComputedPropertyName (field definitions in a class expression)
 esid: prod-FieldDefinition
-features: [computed-property-names, Symbol.toPrimitive, class, class-fields-public]
+features: [computed-property-names, Symbol.toPrimitive, class]
 flags: [generated]
 includes: [propertyHelper.js]
 info: |
diff --git a/test/language/expressions/class/fields-computed-variable-name-propname-constructor.js b/test/language/expressions/class/fields-computed-variable-name-propname-constructor.js
deleted file mode 100644
index bceceabf9e801eec3d6b659bc2daf3961b3d5158..0000000000000000000000000000000000000000
--- a/test/language/expressions/class/fields-computed-variable-name-propname-constructor.js
+++ /dev/null
@@ -1,33 +0,0 @@
-// This file was procedurally generated from the following sources:
-// - src/class-fields/propname-constructor.case
-// - src/class-fields/propname-error/cls-expr-variable-name.template
-/*---
-description: class fields forbid PropName 'constructor' (no early error -- PropName of ComputedPropertyName not forbidden value)
-esid: sec-class-definitions-static-semantics-early-errors
-features: [class, class-fields-public]
-flags: [generated]
-info: |
-    Static Semantics: PropName
-    ...
-    ComputedPropertyName : [ AssignmentExpression ]
-      Return empty.
-
-    
-    // This test file tests the following early error:
-    Static Semantics: Early Errors
-
-      ClassElement : FieldDefinition;
-        It is a Syntax Error if PropName of FieldDefinition is "constructor".
-
----*/
-
-
-var constructor = 'foo';
-var C = class {
-  [constructor];
-};
-
-var c = new C();
-assert.sameValue(c.hasOwnProperty("foo"), true);
-
-assert.sameValue(C.hasOwnProperty("foo"), false);
diff --git a/test/language/expressions/class/fields-ctor-called-after-fields-init.js b/test/language/expressions/class/fields-ctor-called-after-fields-init.js
index 1ea88de76cedaefb2079e7a7c8f4321ac6ba3844..86745235bc3a652ad5bea09ac38c967606110d22 100644
--- a/test/language/expressions/class/fields-ctor-called-after-fields-init.js
+++ b/test/language/expressions/class/fields-ctor-called-after-fields-init.js
@@ -4,7 +4,7 @@
 /*---
 description: The constructor method is called after the fields are initalized (field definitions in a class expression)
 esid: prod-FieldDefinition
-features: [class, class-fields-public]
+features: [class]
 flags: [generated]
 info: |
     [[Construct]] ( argumentsList, newTarget)
diff --git a/test/language/expressions/class/fields-derived-cls-direct-eval-err-contains-supercall-1.js b/test/language/expressions/class/fields-derived-cls-direct-eval-err-contains-supercall-1.js
index b80496c694d826cbeff6ccafe9041752fd6d54e0..dd380aacfe952db0d9bb48cb24ee31b6c22672dc 100644
--- a/test/language/expressions/class/fields-derived-cls-direct-eval-err-contains-supercall-1.js
+++ b/test/language/expressions/class/fields-derived-cls-direct-eval-err-contains-supercall-1.js
@@ -23,9 +23,8 @@ info: |
 ---*/
 
 
-var A = class {}
-
 var executed = false;
+var A = class {}
 var C = class extends A {
   x = eval('executed = true; super()["x"];');
 }
diff --git a/test/language/expressions/class/fields-derived-cls-direct-eval-err-contains-supercall-2.js b/test/language/expressions/class/fields-derived-cls-direct-eval-err-contains-supercall-2.js
index e09d0a2b17692f9b1c67c9ee42217304d8cce61c..e7a2fde56908f39819ba2a90350becc964ac1a19 100644
--- a/test/language/expressions/class/fields-derived-cls-direct-eval-err-contains-supercall-2.js
+++ b/test/language/expressions/class/fields-derived-cls-direct-eval-err-contains-supercall-2.js
@@ -7,13 +7,6 @@ esid: sec-performeval-rules-in-initializer
 features: [class, class-fields-public]
 flags: [generated]
 info: |
-    Additional Early Error Rules for Eval Inside Initializer
-    These static semantics are applied by PerformEval when a direct eval call occurs inside a class field initializer.
-    ScriptBody : StatementList
-
-      ...
-      The remaining eval rules apply as outside a constructor, inside a method, and inside a function.
-
     Additional Early Error Rules for Eval Outside Constructor Methods
     These static semantics are applied by PerformEval when a direct eval call occurs outside of the constructor method of a ClassDeclaration or ClassExpression.
     ScriptBody:StatementList
@@ -23,9 +16,8 @@ info: |
 ---*/
 
 
-var A = class {}
-
 var executed = false;
+var A = class {}
 var C = class extends A {
   x = eval('executed = true; super().x;');
 }
diff --git a/test/language/expressions/class/fields-derived-cls-direct-eval-err-contains-supercall.js b/test/language/expressions/class/fields-derived-cls-direct-eval-err-contains-supercall.js
index 4b4a50c00f65b297b308f3b4e09eed8f02b9398f..e518d465386b18fcd261e4a280be2e9870aef9ff 100644
--- a/test/language/expressions/class/fields-derived-cls-direct-eval-err-contains-supercall.js
+++ b/test/language/expressions/class/fields-derived-cls-direct-eval-err-contains-supercall.js
@@ -23,9 +23,8 @@ info: |
 ---*/
 
 
-var A = class {}
-
 var executed = false;
+var A = class {}
 var C = class extends A {
   x = eval('executed = true; super();');
 }
diff --git a/test/language/expressions/class/fields-derived-cls-direct-eval-err-contains-superproperty-1.js b/test/language/expressions/class/fields-derived-cls-direct-eval-err-contains-superproperty-1.js
index 72049e20d9b444223432884da7dc391bfc7ddfdd..c7954bc69cf0e0d4210a9f73e7b89678e637558b 100644
--- a/test/language/expressions/class/fields-derived-cls-direct-eval-err-contains-superproperty-1.js
+++ b/test/language/expressions/class/fields-derived-cls-direct-eval-err-contains-superproperty-1.js
@@ -23,12 +23,11 @@ info: |
 ---*/
 
 
-var A = class {}
-
 var executed = false;
+var A = class {}
 var C = class extends A {
   x = eval('executed = true; super.x;');
-}
+};
 
 new C();
 
diff --git a/test/language/expressions/class/fields-derived-cls-direct-eval-err-contains-superproperty-2.js b/test/language/expressions/class/fields-derived-cls-direct-eval-err-contains-superproperty-2.js
index 2c0c1c52a53989704326562e1c0cdf794c1d97b6..01a9d1f63251d26a86b3c2107fcd0e598f25d318 100644
--- a/test/language/expressions/class/fields-derived-cls-direct-eval-err-contains-superproperty-2.js
+++ b/test/language/expressions/class/fields-derived-cls-direct-eval-err-contains-superproperty-2.js
@@ -2,33 +2,29 @@
 // - src/class-fields/eval-err-contains-superproperty-2.case
 // - src/class-fields/initializer-eval-super-property/cls-expr-fields-eval.template
 /*---
-description: error if `super['x']` in StatementList of eval (direct eval)
+description: error if super['x'] in StatementList of eval (direct eval)
 esid: sec-performeval-rules-in-initializer
 features: [class, class-fields-public]
 flags: [generated]
 info: |
-    Additional Early Error Rules for Eval Inside Initializer
-    These static semantics are applied by PerformEval when a direct eval call occurs inside a class field initializer.
-    ScriptBody : StatementList
-
-      ...
-      The remaining eval rules apply as outside a constructor, inside a method, and inside a function.
+    The remaining eval rules apply as outside a constructor, inside a method, and inside a function.
 
     Additional Early Error Rules for Eval Outside Methods
-    These static semantics are applied by PerformEval when a direct eval call occurs outside of a MethodDefinition.
-    ScriptBody:StatementList
+
+      These static semantics are applied by PerformEval when a direct eval call occurs outside of a MethodDefinition.
+
+      ScriptBody : StatementList
 
       It is a Syntax Error if StatementList Contains SuperProperty.
 
 ---*/
 
 
-var A = class {}
-
 var executed = false;
+var A = class {}
 var C = class extends A {
   x = eval('executed = true; super["x"];');
-}
+};
 
 new C();
 
diff --git a/test/language/expressions/class/fields-derived-cls-indirect-eval-err-contains-supercall-1.js b/test/language/expressions/class/fields-derived-cls-indirect-eval-err-contains-supercall-1.js
index 325a0d040cc62b3cba266274de32cbb20098fc8d..a9c97fe8cd58413e6fc8a84598aac186d3904f18 100644
--- a/test/language/expressions/class/fields-derived-cls-indirect-eval-err-contains-supercall-1.js
+++ b/test/language/expressions/class/fields-derived-cls-indirect-eval-err-contains-supercall-1.js
@@ -23,9 +23,8 @@ info: |
 ---*/
 
 
-var A = class {}
-
 var executed = false;
+var A = class {}
 var C = class extends A {
   x = (0, eval)('executed = true; super()["x"];');
 }
diff --git a/test/language/expressions/class/fields-derived-cls-indirect-eval-err-contains-supercall-2.js b/test/language/expressions/class/fields-derived-cls-indirect-eval-err-contains-supercall-2.js
index ea36cd9ed1a69ae00fbbc446c0b0d03337e4fc80..c983e887ce8a51681973e0d6f4fbc4150ec2ae7a 100644
--- a/test/language/expressions/class/fields-derived-cls-indirect-eval-err-contains-supercall-2.js
+++ b/test/language/expressions/class/fields-derived-cls-indirect-eval-err-contains-supercall-2.js
@@ -7,13 +7,6 @@ esid: sec-performeval-rules-in-initializer
 features: [class, class-fields-public]
 flags: [generated]
 info: |
-    Additional Early Error Rules for Eval Inside Initializer
-    These static semantics are applied by PerformEval when a direct eval call occurs inside a class field initializer.
-    ScriptBody : StatementList
-
-      ...
-      The remaining eval rules apply as outside a constructor, inside a method, and inside a function.
-
     Additional Early Error Rules for Eval Outside Constructor Methods
     These static semantics are applied by PerformEval when a direct eval call occurs outside of the constructor method of a ClassDeclaration or ClassExpression.
     ScriptBody:StatementList
@@ -23,9 +16,8 @@ info: |
 ---*/
 
 
-var A = class {}
-
 var executed = false;
+var A = class {}
 var C = class extends A {
   x = (0, eval)('executed = true; super().x;');
 }
diff --git a/test/language/expressions/class/fields-derived-cls-indirect-eval-err-contains-supercall.js b/test/language/expressions/class/fields-derived-cls-indirect-eval-err-contains-supercall.js
index 2bb1d7f2ab09746853178ff533368fc23ef260c1..44bb95f62f2f7ac8f7967b070d7b79dba7ef4c95 100644
--- a/test/language/expressions/class/fields-derived-cls-indirect-eval-err-contains-supercall.js
+++ b/test/language/expressions/class/fields-derived-cls-indirect-eval-err-contains-supercall.js
@@ -23,9 +23,8 @@ info: |
 ---*/
 
 
-var A = class {}
-
 var executed = false;
+var A = class {}
 var C = class extends A {
   x = (0, eval)('executed = true; super();');
 }
diff --git a/test/language/expressions/class/fields-derived-cls-indirect-eval-err-contains-superproperty-1.js b/test/language/expressions/class/fields-derived-cls-indirect-eval-err-contains-superproperty-1.js
index 36bf98e3e982acdde134b0e4fec950a623f767ba..9878a14a926ef517eb5cdaff3864b6c2f1a7f10e 100644
--- a/test/language/expressions/class/fields-derived-cls-indirect-eval-err-contains-superproperty-1.js
+++ b/test/language/expressions/class/fields-derived-cls-indirect-eval-err-contains-superproperty-1.js
@@ -23,12 +23,11 @@ info: |
 ---*/
 
 
-var A = class {}
-
 var executed = false;
+var A = class {}
 var C = class extends A {
   x = (0, eval)('executed = true; super.x;');
-}
+};
 
 assert.throws(SyntaxError, function() {
   new C();
diff --git a/test/language/expressions/class/fields-derived-cls-indirect-eval-err-contains-superproperty-2.js b/test/language/expressions/class/fields-derived-cls-indirect-eval-err-contains-superproperty-2.js
index e636dc056bd18e057c0a47c8ff8d96797ae52c26..9ea13833b2451c79709a0581d082e16c681409d6 100644
--- a/test/language/expressions/class/fields-derived-cls-indirect-eval-err-contains-superproperty-2.js
+++ b/test/language/expressions/class/fields-derived-cls-indirect-eval-err-contains-superproperty-2.js
@@ -2,33 +2,29 @@
 // - src/class-fields/eval-err-contains-superproperty-2.case
 // - src/class-fields/initializer-eval-super-property/cls-expr-fields-indirect-eval.template
 /*---
-description: error if `super['x']` in StatementList of eval (indirect eval)
+description: error if super['x'] in StatementList of eval (indirect eval)
 esid: sec-performeval-rules-in-initializer
 features: [class, class-fields-public]
 flags: [generated]
 info: |
-    Additional Early Error Rules for Eval Inside Initializer
-    These static semantics are applied by PerformEval when a direct eval call occurs inside a class field initializer.
-    ScriptBody : StatementList
-
-      ...
-      The remaining eval rules apply as outside a constructor, inside a method, and inside a function.
+    The remaining eval rules apply as outside a constructor, inside a method, and inside a function.
 
     Additional Early Error Rules for Eval Outside Methods
-    These static semantics are applied by PerformEval when a direct eval call occurs outside of a MethodDefinition.
-    ScriptBody:StatementList
+
+      These static semantics are applied by PerformEval when a direct eval call occurs outside of a MethodDefinition.
+
+      ScriptBody : StatementList
 
       It is a Syntax Error if StatementList Contains SuperProperty.
 
 ---*/
 
 
-var A = class {}
-
 var executed = false;
+var A = class {}
 var C = class extends A {
   x = (0, eval)('executed = true; super["x"];');
-}
+};
 
 assert.throws(SyntaxError, function() {
   new C();
diff --git a/test/language/expressions/class/fields-direct-eval-err-contains-newtarget.js b/test/language/expressions/class/fields-direct-eval-err-contains-newtarget.js
index 94cb63a9ea77d5828664dd50155863781766624c..9422ebd0060f8aa0f9b571bc8f63e293a0aca168 100644
--- a/test/language/expressions/class/fields-direct-eval-err-contains-newtarget.js
+++ b/test/language/expressions/class/fields-direct-eval-err-contains-newtarget.js
@@ -4,7 +4,7 @@
 /*---
 description: error if `new.target` in StatementList of eval (direct eval)
 esid: sec-performeval-rules-in-initializer
-features: [class, class-fields-public, new.target]
+features: [class, new.target, class-fields-public]
 flags: [generated]
 info: |
     Additional Early Error Rules for Eval Inside Initializer
diff --git a/test/language/expressions/class/fields-evaluation-error-computed-name-referenceerror.js b/test/language/expressions/class/fields-evaluation-error-computed-name-referenceerror.js
index 66a6c1432602db0271f762a2883c3ba39fd8b58c..ead74882c300257b17195fe72ed01e36e978665e 100644
--- a/test/language/expressions/class/fields-evaluation-error-computed-name-referenceerror.js
+++ b/test/language/expressions/class/fields-evaluation-error-computed-name-referenceerror.js
@@ -4,7 +4,7 @@
 /*---
 description: ReferenceError evaluating a computed property name (field definitions in a class expression)
 esid: sec-runtime-semantics-classdefinitionevaluation
-features: [computed-property-names, class, class-fields-public]
+features: [computed-property-names, class]
 flags: [generated]
 info: |
     Runtime Semantics: ClassDefinitionEvaluation
diff --git a/test/language/expressions/class/fields-evaluation-error-computed-name-toprimitive-err.js b/test/language/expressions/class/fields-evaluation-error-computed-name-toprimitive-err.js
index 0522c255923bb1bb597f16818181a20b447657dc..79dbe2d852a0fc358043d91c3163341b63d9cab4 100644
--- a/test/language/expressions/class/fields-evaluation-error-computed-name-toprimitive-err.js
+++ b/test/language/expressions/class/fields-evaluation-error-computed-name-toprimitive-err.js
@@ -4,7 +4,7 @@
 /*---
 description: Custom error evaluating a computed property name (field definitions in a class expression)
 esid: sec-runtime-semantics-classdefinitionevaluation
-features: [computed-property-names, Symbol.toPrimitive, class, class-fields-public]
+features: [computed-property-names, Symbol.toPrimitive, class]
 flags: [generated]
 info: |
     Runtime Semantics: ClassDefinitionEvaluation
diff --git a/test/language/expressions/class/fields-evaluation-error-computed-name-toprimitive-returns-noncallable.js b/test/language/expressions/class/fields-evaluation-error-computed-name-toprimitive-returns-noncallable.js
new file mode 100644
index 0000000000000000000000000000000000000000..ccd69779f00841c11fbbaca2a9863fe42af8cee8
--- /dev/null
+++ b/test/language/expressions/class/fields-evaluation-error-computed-name-toprimitive-returns-noncallable.js
@@ -0,0 +1,57 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/computed-name-toprimitive-returns-noncallable.case
+// - src/class-fields/class-evaluation-error/cls-expr.template
+/*---
+description: Custom error evaluating a computed property name (field definitions in a class expression)
+esid: sec-runtime-semantics-classdefinitionevaluation
+features: [computed-property-names, Symbol.toPrimitive, class]
+flags: [generated]
+info: |
+    Runtime Semantics: ClassDefinitionEvaluation
+
+    ...
+    27. For each ClassElement e in order from elements
+      a. If IsStatic of me is false, then
+        i. Let fields be the result of performing ClassElementEvaluation for e with arguments proto and false.
+      b. Else,
+        i. Let fields be the result of performing ClassElementEvaluation for e with arguments F and false.
+      c. If fields is an abrupt completion, then
+        i. Set the running execution context's LexicalEnvironment to lex.
+        ii. Set the running execution context's PrivateNameEnvironment to outerPrivateEnvironment.
+        iii. Return Completion(status).
+    ...
+
+    Runtime Semantics: ClassElementEvaluation
+
+    ClassElement: FieldDefinition;
+      Return ClassFieldDefinitionEvaluation of FieldDefinition with parameter false and object.
+
+    Runtime Semantics: ClassFieldDefinitionEvaluation
+      With parameters isStatic and homeObject.
+
+    1. Let fieldName be the result of evaluating ClassElementName.
+    2. ReturnIfAbrupt(fieldName).
+    ...
+
+    Runtime Semantics: Evaluation
+      ComputedPropertyName: [ AssignmentExpression ]
+
+    1. Let exprValue be the result of evaluating AssignmentExpression.
+    2. Let propName be ? GetValue(exprValue).
+    3. Return ? ToPropertyKey(propName).
+
+---*/
+var obj = {
+  [Symbol.toPrimitive]: {}
+};
+
+
+
+function evaluate() {
+  var C = class {
+    [obj] = refErrorIfEvaluated;
+  };
+}
+
+assert.throws(TypeError
+, evaluate);
diff --git a/test/language/expressions/class/fields-evaluation-error-computed-name-toprimitive-returns-nonobject.js b/test/language/expressions/class/fields-evaluation-error-computed-name-toprimitive-returns-nonobject.js
new file mode 100644
index 0000000000000000000000000000000000000000..3c56ba8a5e40e9d68ace8e753aa7d0e2bec61c97
--- /dev/null
+++ b/test/language/expressions/class/fields-evaluation-error-computed-name-toprimitive-returns-nonobject.js
@@ -0,0 +1,56 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/computed-name-toprimitive-returns-nonobject.case
+// - src/class-fields/class-evaluation-error/cls-expr.template
+/*---
+description: Custom error evaluating a computed property name (field definitions in a class expression)
+esid: sec-runtime-semantics-classdefinitionevaluation
+features: [computed-property-names, Symbol.toPrimitive, class]
+flags: [generated]
+info: |
+    Runtime Semantics: ClassDefinitionEvaluation
+
+    ...
+    27. For each ClassElement e in order from elements
+      a. If IsStatic of me is false, then
+        i. Let fields be the result of performing ClassElementEvaluation for e with arguments proto and false.
+      b. Else,
+        i. Let fields be the result of performing ClassElementEvaluation for e with arguments F and false.
+      c. If fields is an abrupt completion, then
+        i. Set the running execution context's LexicalEnvironment to lex.
+        ii. Set the running execution context's PrivateNameEnvironment to outerPrivateEnvironment.
+        iii. Return Completion(status).
+    ...
+
+    Runtime Semantics: ClassElementEvaluation
+
+    ClassElement: FieldDefinition;
+      Return ClassFieldDefinitionEvaluation of FieldDefinition with parameter false and object.
+
+    Runtime Semantics: ClassFieldDefinitionEvaluation
+      With parameters isStatic and homeObject.
+
+    1. Let fieldName be the result of evaluating ClassElementName.
+    2. ReturnIfAbrupt(fieldName).
+    ...
+
+    Runtime Semantics: Evaluation
+      ComputedPropertyName: [ AssignmentExpression ]
+
+    1. Let exprValue be the result of evaluating AssignmentExpression.
+    2. Let propName be ? GetValue(exprValue).
+    3. Return ? ToPropertyKey(propName).
+
+---*/
+var obj = {
+  [Symbol.toPrimitive]: 42
+};
+
+
+
+function evaluate() {
+  var C = class {
+    [obj] = refErrorIfEvaluated;
+  };
+}
+
+assert.throws(TypeError, evaluate);
diff --git a/test/language/expressions/class/fields-evaluation-error-computed-name-tostring-err.js b/test/language/expressions/class/fields-evaluation-error-computed-name-tostring-err.js
index cecb9de93890f9e737e266047fcd809a1bc6fe4e..732473265004c34d2757e50ad67cad9ca1499f39 100644
--- a/test/language/expressions/class/fields-evaluation-error-computed-name-tostring-err.js
+++ b/test/language/expressions/class/fields-evaluation-error-computed-name-tostring-err.js
@@ -4,7 +4,7 @@
 /*---
 description: Custom error evaluating a computed property name (field definitions in a class expression)
 esid: sec-runtime-semantics-classdefinitionevaluation
-features: [computed-property-names, class, class-fields-public]
+features: [computed-property-names, class]
 flags: [generated]
 info: |
     Runtime Semantics: ClassDefinitionEvaluation
diff --git a/test/language/expressions/class/fields-evaluation-error-computed-name-valueof-err.js b/test/language/expressions/class/fields-evaluation-error-computed-name-valueof-err.js
index f709947c115e03ae15fbd448163d7fb948c7e312..20f3fe45585948c21f250d8537e76960871b93f0 100644
--- a/test/language/expressions/class/fields-evaluation-error-computed-name-valueof-err.js
+++ b/test/language/expressions/class/fields-evaluation-error-computed-name-valueof-err.js
@@ -4,7 +4,7 @@
 /*---
 description: Custom error evaluating a computed property name (field definitions in a class expression)
 esid: sec-runtime-semantics-classdefinitionevaluation
-features: [computed-property-names, class, class-fields-public]
+features: [computed-property-names, class]
 flags: [generated]
 info: |
     Runtime Semantics: ClassDefinitionEvaluation
diff --git a/test/language/expressions/class/fields-indirect-eval-err-contains-newtarget.js b/test/language/expressions/class/fields-indirect-eval-err-contains-newtarget.js
index 84a0c29d709e4581ff22bdd0cc18fbbcc137c967..e0080086715cd6a1d0b23dc9e0061b6c1c742e2a 100644
--- a/test/language/expressions/class/fields-indirect-eval-err-contains-newtarget.js
+++ b/test/language/expressions/class/fields-indirect-eval-err-contains-newtarget.js
@@ -4,7 +4,7 @@
 /*---
 description: error if `new.target` in StatementList of eval (indirect eval)
 esid: sec-performeval-rules-in-initializer
-features: [class, class-fields-public, new.target]
+features: [class, new.target, class-fields-public]
 flags: [generated]
 info: |
     Additional Early Error Rules for Eval Inside Initializer
diff --git a/test/language/expressions/class/fields-init-err-evaluation.js b/test/language/expressions/class/fields-init-err-evaluation.js
index dd81e90753ef6bb32a3c1dbfd4f11debbd8b5e10..baf937e731c2fc095b176f80fc66b5c2a76979b6 100644
--- a/test/language/expressions/class/fields-init-err-evaluation.js
+++ b/test/language/expressions/class/fields-init-err-evaluation.js
@@ -4,7 +4,7 @@
 /*---
 description: Return abrupt completion evaluating the field initializer (field definitions in a class expression)
 esid: prod-FieldDefinition
-features: [class, class-fields-public]
+features: [class]
 flags: [generated]
 info: |
     [[Construct]] ( argumentsList, newTarget)
diff --git a/test/language/expressions/class/fields-init-value-defined-after-class.js b/test/language/expressions/class/fields-init-value-defined-after-class.js
index 0a2f10d1eb58e3fb386ae527987181f069fec17f..52e4047a622b8f0641584e0e7d60ec07ab39a6af 100644
--- a/test/language/expressions/class/fields-init-value-defined-after-class.js
+++ b/test/language/expressions/class/fields-init-value-defined-after-class.js
@@ -4,7 +4,7 @@
 /*---
 description: The initializer value is defined after the class evaluation (field definitions in a class expression)
 esid: prod-FieldDefinition
-features: [computed-property-names, class, class-fields-public]
+features: [computed-property-names, class]
 flags: [generated]
 includes: [propertyHelper.js]
 info: |
diff --git a/test/language/expressions/class/fields-init-value-incremental.js b/test/language/expressions/class/fields-init-value-incremental.js
index b2b87b99246db6b1a1be12732526d9cce5dac19c..b8b62d937bc8db108273555cfd9acdb3913836cc 100644
--- a/test/language/expressions/class/fields-init-value-incremental.js
+++ b/test/language/expressions/class/fields-init-value-incremental.js
@@ -4,7 +4,7 @@
 /*---
 description: The initializer value is defined during the class instatiation (field definitions in a class expression)
 esid: prod-FieldDefinition
-features: [computed-property-names, class, class-fields-public]
+features: [computed-property-names, class]
 flags: [generated]
 includes: [propertyHelper.js]
 info: |
diff --git a/test/language/expressions/class/fields-multiple-definitions-computed-names.js b/test/language/expressions/class/fields-multiple-definitions-computed-names.js
index a2ee0a53a3aeef0b43cf35af6c5d90308461abbb..30172655228521f9991165cea96cf29db62386a8 100644
--- a/test/language/expressions/class/fields-multiple-definitions-computed-names.js
+++ b/test/language/expressions/class/fields-multiple-definitions-computed-names.js
@@ -29,7 +29,7 @@ var C = class {
   [x] = 42; [10] = "meep"; ["not initialized"]
   m2() { return 39 }
   bar = "barbaz";
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-multiple-definitions-computed-symbol-names.js b/test/language/expressions/class/fields-multiple-definitions-computed-symbol-names.js
index 4de6b2039a54d4a764c553452b10de166af7f696..f95fd4a73ba5ebdc86073462ac2b40b3227bde4e 100644
--- a/test/language/expressions/class/fields-multiple-definitions-computed-symbol-names.js
+++ b/test/language/expressions/class/fields-multiple-definitions-computed-symbol-names.js
@@ -30,7 +30,7 @@ var C = class {
   [x]; [y] = 42
   m2() { return 39 }
   bar = "barbaz";
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-multiple-definitions-literal-names.js b/test/language/expressions/class/fields-multiple-definitions-literal-names.js
index c6036f85144917aca0300aefb022aa31ebd9df4d..66de23bea5b18de8593844986c1c56818826550e 100644
--- a/test/language/expressions/class/fields-multiple-definitions-literal-names.js
+++ b/test/language/expressions/class/fields-multiple-definitions-literal-names.js
@@ -30,7 +30,7 @@ var C = class {
   c = fn
   m2() { return 39 }
   bar = "barbaz";
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-multiple-definitions-private-names.js b/test/language/expressions/class/fields-multiple-definitions-private-names.js
index 716b43beafd0508a80e2f8f2a58d907c49ea2fb3..ceef5621fbbe2a55e8fb46c704d6eb91090a613b 100644
--- a/test/language/expressions/class/fields-multiple-definitions-private-names.js
+++ b/test/language/expressions/class/fields-multiple-definitions-private-names.js
@@ -2,24 +2,24 @@
 // - src/class-fields/private-names.case
 // - src/class-fields/productions/cls-expr-multiple-definitions.template
 /*---
-description: static literal private names (multiple fields definitions)
+description: private names (multiple fields definitions)
 esid: prod-FieldDefinition
 features: [class-fields-private, class, class-fields-public]
 flags: [generated]
 includes: [propertyHelper.js]
 info: |
-    ClassElement:
+    ClassElement :
       ...
       FieldDefinition ;
 
-    FieldDefinition:
+    FieldDefinition :
       ClassElementName Initializer_opt
 
-    ClassElementName:
+    ClassElementName :
       PrivateName
 
-    PrivateName:
-      #IdentifierName
+    PrivateName :
+      # IdentifierName
 
 ---*/
 
@@ -30,7 +30,7 @@ var C = class {
   #x; #y
   m2() { return 39 }
   bar = "barbaz";
-x() {
+  x() {
     this.#x = 42;
     return this.#x;
   }
diff --git a/test/language/expressions/class/fields-multiple-definitions-static-private-fields.js b/test/language/expressions/class/fields-multiple-definitions-static-private-fields.js
new file mode 100644
index 0000000000000000000000000000000000000000..8898f730903f24c284a26bb36e22d5b57cfcacfb
--- /dev/null
+++ b/test/language/expressions/class/fields-multiple-definitions-static-private-fields.js
@@ -0,0 +1,102 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-fields.case
+// - src/class-fields/productions/cls-expr-multiple-definitions.template
+/*---
+description: static private fields (multiple fields definitions)
+esid: prod-FieldDefinition
+features: [class-static-fields-private, class, class-fields-public]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+var C = class {
+  foo = "foobar";
+  m() { return 42 }
+  static #x; static #y
+  m2() { return 39 }
+  bar = "barbaz";
+  static x() {
+    this.#x = 42;
+    return this.#x;
+  }
+  static y() {
+    this.#y = 43;
+    return this.#y;
+  }
+}
+
+var c = new C();
+
+assert.sameValue(c.m(), 42);
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+assert.sameValue(c.m, C.prototype.m);
+
+verifyProperty(C.prototype, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+assert.sameValue(c.m2(), 39);
+assert.sameValue(Object.hasOwnProperty.call(c, "m2"), false);
+assert.sameValue(c.m2, C.prototype.m2);
+
+verifyProperty(C.prototype, "m2", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+assert.sameValue(c.foo, "foobar");
+assert.sameValue(Object.hasOwnProperty.call(C, "foo"), false);
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "foo"), false);
+
+verifyProperty(c, "foo", {
+  value: "foobar",
+  enumerable: true,
+  configurable: true,
+  writable: true,
+});
+
+assert.sameValue(c.bar, "barbaz");
+assert.sameValue(Object.hasOwnProperty.call(C, "bar"), false);
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "bar"), false);
+
+verifyProperty(c, "bar", {
+  value: "barbaz",
+  enumerable: true,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private fields do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#x"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#x"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#y"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#y"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 10");
diff --git a/test/language/expressions/class/fields-multiple-definitions-static-private-methods-proxy.js b/test/language/expressions/class/fields-multiple-definitions-static-private-methods-proxy.js
new file mode 100644
index 0000000000000000000000000000000000000000..5a46f0832c8a0c5b2707f079186aedb6238410eb
--- /dev/null
+++ b/test/language/expressions/class/fields-multiple-definitions-static-private-methods-proxy.js
@@ -0,0 +1,40 @@
+// Copyright (C) 2018 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Static private methods not accessible via default Proxy handler
+esid: prod-FieldDefinition
+features: [class, class-static-methods-private]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+var C = class {
+  static #x(value) {
+    return 1;
+  }
+  static x() {
+    return this.#x();
+  }
+}
+
+var P = new Proxy(C, {});
+
+assert.sameValue(C.x(), 1);
+assert.throws(TypeError, function() {
+  P.x();
+});
diff --git a/test/language/expressions/class/fields-multiple-definitions-static-private-methods.js b/test/language/expressions/class/fields-multiple-definitions-static-private-methods.js
new file mode 100644
index 0000000000000000000000000000000000000000..dec012b261bf51fd57b557b2849c95ade369ccee
--- /dev/null
+++ b/test/language/expressions/class/fields-multiple-definitions-static-private-methods.js
@@ -0,0 +1,108 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-methods.case
+// - src/class-fields/productions/cls-expr-multiple-definitions.template
+/*---
+description: static private methods (multiple fields definitions)
+esid: prod-FieldDefinition
+features: [class-static-methods-private, class, class-fields-public]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+var C = class {
+  foo = "foobar";
+  m() { return 42 }
+  static #xVal; static #yVal
+  m2() { return 39 }
+  bar = "barbaz";
+  static #x(value) {
+    this.#xVal = value;
+    return this.#xVal;
+  }
+  static #y(value) {
+    this.#y = value;
+    return this.#yVal;
+  }
+  static x() {
+    return this.#x(42);
+  }
+  static y() {
+    return this.#y(43);
+  }
+}
+
+var c = new C();
+
+assert.sameValue(c.m(), 42);
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+assert.sameValue(c.m, C.prototype.m);
+
+verifyProperty(C.prototype, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+assert.sameValue(c.m2(), 39);
+assert.sameValue(Object.hasOwnProperty.call(c, "m2"), false);
+assert.sameValue(c.m2, C.prototype.m2);
+
+verifyProperty(C.prototype, "m2", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+assert.sameValue(c.foo, "foobar");
+assert.sameValue(Object.hasOwnProperty.call(C, "foo"), false);
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "foo"), false);
+
+verifyProperty(c, "foo", {
+  value: "foobar",
+  enumerable: true,
+  configurable: true,
+  writable: true,
+});
+
+assert.sameValue(c.bar, "barbaz");
+assert.sameValue(Object.hasOwnProperty.call(C, "bar"), false);
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "bar"), false);
+
+verifyProperty(c, "bar", {
+  value: "barbaz",
+  enumerable: true,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private methods do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#xVal"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#xVal"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#yVal"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#yVal"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 10");
diff --git a/test/language/expressions/class/fields-multiple-definitions-string-literal-names.js b/test/language/expressions/class/fields-multiple-definitions-string-literal-names.js
index e2957ad149151a5f392e703798a943811648b401..a2815cd54f077742e624684fd708c736c201c34b 100644
--- a/test/language/expressions/class/fields-multiple-definitions-string-literal-names.js
+++ b/test/language/expressions/class/fields-multiple-definitions-string-literal-names.js
@@ -28,7 +28,7 @@ var C = class {
   "d" = 42
   m2() { return 39 }
   bar = "barbaz";
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-multiple-stacked-definitions-computed-names.js b/test/language/expressions/class/fields-multiple-stacked-definitions-computed-names.js
index fb384b137657a11b47a01834a695ce0d0ca4ef21..0174e246691528521993f8cc767f32dc9cdd3e0b 100644
--- a/test/language/expressions/class/fields-multiple-stacked-definitions-computed-names.js
+++ b/test/language/expressions/class/fields-multiple-stacked-definitions-computed-names.js
@@ -27,7 +27,7 @@ var C = class {
   [x] = 42; [10] = "meep"; ["not initialized"]
   foo = "foobar"
   bar = "barbaz";
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-multiple-stacked-definitions-computed-symbol-names.js b/test/language/expressions/class/fields-multiple-stacked-definitions-computed-symbol-names.js
index d92d329622486636da5779c4d7b869753bf1ac18..97ac2d4f73d640f77fb51ff4fc0728271cd90966 100644
--- a/test/language/expressions/class/fields-multiple-stacked-definitions-computed-symbol-names.js
+++ b/test/language/expressions/class/fields-multiple-stacked-definitions-computed-symbol-names.js
@@ -28,7 +28,7 @@ var C = class {
   [x]; [y] = 42
   foo = "foobar"
   bar = "barbaz";
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-multiple-stacked-definitions-literal-names.js b/test/language/expressions/class/fields-multiple-stacked-definitions-literal-names.js
index f0a676b3277af0f452899c2663c6356258536122..2ca220c61c00c27ddee619565d3ccddc8b60cb18 100644
--- a/test/language/expressions/class/fields-multiple-stacked-definitions-literal-names.js
+++ b/test/language/expressions/class/fields-multiple-stacked-definitions-literal-names.js
@@ -28,7 +28,7 @@ var C = class {
   c = fn
   foo = "foobar"
   bar = "barbaz";
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-multiple-stacked-definitions-private-names.js b/test/language/expressions/class/fields-multiple-stacked-definitions-private-names.js
index 6dc6095542e5e83413c7aacd52fdd8a825de8c75..3bf30d36551817a83a0d0c31be00102880fa687c 100644
--- a/test/language/expressions/class/fields-multiple-stacked-definitions-private-names.js
+++ b/test/language/expressions/class/fields-multiple-stacked-definitions-private-names.js
@@ -2,24 +2,24 @@
 // - src/class-fields/private-names.case
 // - src/class-fields/productions/cls-expr-multiple-stacked-definitions.template
 /*---
-description: static literal private names (multiple stacked fields definitions through ASI)
+description: private names (multiple stacked fields definitions through ASI)
 esid: prod-FieldDefinition
 features: [class-fields-private, class, class-fields-public]
 flags: [generated]
 includes: [propertyHelper.js]
 info: |
-    ClassElement:
+    ClassElement :
       ...
       FieldDefinition ;
 
-    FieldDefinition:
+    FieldDefinition :
       ClassElementName Initializer_opt
 
-    ClassElementName:
+    ClassElementName :
       PrivateName
 
-    PrivateName:
-      #IdentifierName
+    PrivateName :
+      # IdentifierName
 
 ---*/
 
@@ -28,7 +28,7 @@ var C = class {
   #x; #y
   foo = "foobar"
   bar = "barbaz";
-x() {
+  x() {
     this.#x = 42;
     return this.#x;
   }
diff --git a/test/language/expressions/class/fields-multiple-stacked-definitions-static-private-fields.js b/test/language/expressions/class/fields-multiple-stacked-definitions-static-private-fields.js
new file mode 100644
index 0000000000000000000000000000000000000000..b92b29eb464da07f8c69a5b063bbce01362e308d
--- /dev/null
+++ b/test/language/expressions/class/fields-multiple-stacked-definitions-static-private-fields.js
@@ -0,0 +1,80 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-fields.case
+// - src/class-fields/productions/cls-expr-multiple-stacked-definitions.template
+/*---
+description: static private fields (multiple stacked fields definitions through ASI)
+esid: prod-FieldDefinition
+features: [class-static-fields-private, class, class-fields-public]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+var C = class {
+  static #x; static #y
+  foo = "foobar"
+  bar = "barbaz";
+  static x() {
+    this.#x = 42;
+    return this.#x;
+  }
+  static y() {
+    this.#y = 43;
+    return this.#y;
+  }
+}
+
+var c = new C();
+
+assert.sameValue(c.foo, "foobar");
+assert.sameValue(Object.hasOwnProperty.call(C, "foo"), false);
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "foo"), false);
+
+verifyProperty(c, "foo", {
+  value: "foobar",
+  enumerable: true,
+  configurable: true,
+  writable: true,
+});
+
+assert.sameValue(c.bar, "barbaz");
+assert.sameValue(Object.hasOwnProperty.call(C, "bar"), false);
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "bar"), false);
+
+verifyProperty(c, "bar", {
+  value: "barbaz",
+  enumerable: true,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private fields do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#x"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#x"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#y"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#y"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 10");
diff --git a/test/language/expressions/class/fields-multiple-stacked-definitions-static-private-methods.js b/test/language/expressions/class/fields-multiple-stacked-definitions-static-private-methods.js
new file mode 100644
index 0000000000000000000000000000000000000000..85791c2060eb4e44c5fe0f57115fe8f63b008dac
--- /dev/null
+++ b/test/language/expressions/class/fields-multiple-stacked-definitions-static-private-methods.js
@@ -0,0 +1,86 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-methods.case
+// - src/class-fields/productions/cls-expr-multiple-stacked-definitions.template
+/*---
+description: static private methods (multiple stacked fields definitions through ASI)
+esid: prod-FieldDefinition
+features: [class-static-methods-private, class, class-fields-public]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+var C = class {
+  static #xVal; static #yVal
+  foo = "foobar"
+  bar = "barbaz";
+  static #x(value) {
+    this.#xVal = value;
+    return this.#xVal;
+  }
+  static #y(value) {
+    this.#y = value;
+    return this.#yVal;
+  }
+  static x() {
+    return this.#x(42);
+  }
+  static y() {
+    return this.#y(43);
+  }
+}
+
+var c = new C();
+
+assert.sameValue(c.foo, "foobar");
+assert.sameValue(Object.hasOwnProperty.call(C, "foo"), false);
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "foo"), false);
+
+verifyProperty(c, "foo", {
+  value: "foobar",
+  enumerable: true,
+  configurable: true,
+  writable: true,
+});
+
+assert.sameValue(c.bar, "barbaz");
+assert.sameValue(Object.hasOwnProperty.call(C, "bar"), false);
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "bar"), false);
+
+verifyProperty(c, "bar", {
+  value: "barbaz",
+  enumerable: true,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private methods do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#xVal"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#xVal"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#yVal"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#yVal"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 10");
diff --git a/test/language/expressions/class/fields-multiple-stacked-definitions-string-literal-names.js b/test/language/expressions/class/fields-multiple-stacked-definitions-string-literal-names.js
index 90c6b7cd1b3d0f799e039090a7347a5f8edc623e..1de4a11c09ef470fa99d583aabeacc267b696097 100644
--- a/test/language/expressions/class/fields-multiple-stacked-definitions-string-literal-names.js
+++ b/test/language/expressions/class/fields-multiple-stacked-definitions-string-literal-names.js
@@ -26,7 +26,7 @@ var C = class {
   "d" = 42
   foo = "foobar"
   bar = "barbaz";
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-new-no-sc-line-method-computed-names.js b/test/language/expressions/class/fields-new-no-sc-line-method-computed-names.js
index 50538a5deaba2edb776321a400b6885a5ab33dba..0c10e823dc1836ab14c4d474b650d5c41737f746 100644
--- a/test/language/expressions/class/fields-new-no-sc-line-method-computed-names.js
+++ b/test/language/expressions/class/fields-new-no-sc-line-method-computed-names.js
@@ -26,7 +26,7 @@ var x = "b";
 var C = class {
   [x] = 42; [10] = "meep"; ["not initialized"]
   m() { return 42; }
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-new-no-sc-line-method-computed-symbol-names.js b/test/language/expressions/class/fields-new-no-sc-line-method-computed-symbol-names.js
index 3139836e1c35246304b6b3695326ae86ad73a42e..5ec1f72a6e52febf15dc6cc194a4aa957762c63f 100644
--- a/test/language/expressions/class/fields-new-no-sc-line-method-computed-symbol-names.js
+++ b/test/language/expressions/class/fields-new-no-sc-line-method-computed-symbol-names.js
@@ -27,7 +27,7 @@ var y = Symbol();
 var C = class {
   [x]; [y] = 42
   m() { return 42; }
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-new-no-sc-line-method-literal-names.js b/test/language/expressions/class/fields-new-no-sc-line-method-literal-names.js
index 477b4b21fd8d9e573a2913c7113257e9735407df..20aaeeac10d6ceb122f9843a505ab2521830c209 100644
--- a/test/language/expressions/class/fields-new-no-sc-line-method-literal-names.js
+++ b/test/language/expressions/class/fields-new-no-sc-line-method-literal-names.js
@@ -27,7 +27,7 @@ var C = class {
   a; b = 42;
   c = fn
   m() { return 42; }
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-new-no-sc-line-method-private-names.js b/test/language/expressions/class/fields-new-no-sc-line-method-private-names.js
index 76048e7e0309581ec0d55117a1b8bf390a3f8f93..32828b73038bf0486bd9a05790e5791d29ac73c2 100644
--- a/test/language/expressions/class/fields-new-no-sc-line-method-private-names.js
+++ b/test/language/expressions/class/fields-new-no-sc-line-method-private-names.js
@@ -2,24 +2,24 @@
 // - src/class-fields/private-names.case
 // - src/class-fields/productions/cls-expr-new-no-sc-line-method.template
 /*---
-description: static literal private names (field definitions followed by a method in a new line without a semicolon)
+description: private names (field definitions followed by a method in a new line without a semicolon)
 esid: prod-FieldDefinition
 features: [class-fields-private, class, class-fields-public]
 flags: [generated]
 includes: [propertyHelper.js]
 info: |
-    ClassElement:
+    ClassElement :
       ...
       FieldDefinition ;
 
-    FieldDefinition:
+    FieldDefinition :
       ClassElementName Initializer_opt
 
-    ClassElementName:
+    ClassElementName :
       PrivateName
 
-    PrivateName:
-      #IdentifierName
+    PrivateName :
+      # IdentifierName
 
 ---*/
 
@@ -27,7 +27,7 @@ info: |
 var C = class {
   #x; #y
   m() { return 42; }
-x() {
+  x() {
     this.#x = 42;
     return this.#x;
   }
diff --git a/test/language/expressions/class/fields-new-no-sc-line-method-static-private-fields.js b/test/language/expressions/class/fields-new-no-sc-line-method-static-private-fields.js
new file mode 100644
index 0000000000000000000000000000000000000000..be9b34dd24f1e6ee5bc0886377f5b6d3facb84e6
--- /dev/null
+++ b/test/language/expressions/class/fields-new-no-sc-line-method-static-private-fields.js
@@ -0,0 +1,67 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-fields.case
+// - src/class-fields/productions/cls-expr-new-no-sc-line-method.template
+/*---
+description: static private fields (field definitions followed by a method in a new line without a semicolon)
+esid: prod-FieldDefinition
+features: [class-static-fields-private, class, class-fields-public]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+var C = class {
+  static #x; static #y
+  m() { return 42; }
+  static x() {
+    this.#x = 42;
+    return this.#x;
+  }
+  static y() {
+    this.#y = 43;
+    return this.#y;
+  }
+}
+
+var c = new C();
+
+assert.sameValue(c.m(), 42);
+assert.sameValue(c.m, C.prototype.m);
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+
+verifyProperty(C.prototype, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private fields do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#x"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#x"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#y"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#y"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 10");
diff --git a/test/language/expressions/class/fields-new-no-sc-line-method-static-private-methods.js b/test/language/expressions/class/fields-new-no-sc-line-method-static-private-methods.js
new file mode 100644
index 0000000000000000000000000000000000000000..5c41cadc9a6ff15f64074d23f63a6647ad02766e
--- /dev/null
+++ b/test/language/expressions/class/fields-new-no-sc-line-method-static-private-methods.js
@@ -0,0 +1,73 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-methods.case
+// - src/class-fields/productions/cls-expr-new-no-sc-line-method.template
+/*---
+description: static private methods (field definitions followed by a method in a new line without a semicolon)
+esid: prod-FieldDefinition
+features: [class-static-methods-private, class, class-fields-public]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+var C = class {
+  static #xVal; static #yVal
+  m() { return 42; }
+  static #x(value) {
+    this.#xVal = value;
+    return this.#xVal;
+  }
+  static #y(value) {
+    this.#y = value;
+    return this.#yVal;
+  }
+  static x() {
+    return this.#x(42);
+  }
+  static y() {
+    return this.#y(43);
+  }
+}
+
+var c = new C();
+
+assert.sameValue(c.m(), 42);
+assert.sameValue(c.m, C.prototype.m);
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+
+verifyProperty(C.prototype, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private methods do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#xVal"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#xVal"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#yVal"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#yVal"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 10");
diff --git a/test/language/expressions/class/fields-new-no-sc-line-method-string-literal-names.js b/test/language/expressions/class/fields-new-no-sc-line-method-string-literal-names.js
index 3183a04453394c435e8c75b0b7e008ee5e54a115..5466a60bca4cf6390340cb01b95b6a3fce2510b8 100644
--- a/test/language/expressions/class/fields-new-no-sc-line-method-string-literal-names.js
+++ b/test/language/expressions/class/fields-new-no-sc-line-method-string-literal-names.js
@@ -25,7 +25,7 @@ var C = class {
   'a'; "b"; 'c' = 39;
   "d" = 42
   m() { return 42; }
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-new-sc-line-gen-computed-names.js b/test/language/expressions/class/fields-new-sc-line-gen-computed-names.js
index 5d1e910a381c2e77c92423767b614ef31ac5f86a..ecea272f927f509c021400e607281fafdf695cd7 100644
--- a/test/language/expressions/class/fields-new-sc-line-gen-computed-names.js
+++ b/test/language/expressions/class/fields-new-sc-line-gen-computed-names.js
@@ -26,7 +26,7 @@ var x = "b";
 var C = class {
   [x] = 42; [10] = "meep"; ["not initialized"];
   *m() { return 42; }
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-new-sc-line-gen-computed-symbol-names.js b/test/language/expressions/class/fields-new-sc-line-gen-computed-symbol-names.js
index 2e3e813a50b140aeb9f1bdf9f052adaf81616326..fdfbb093ddac0e37b4a79ccc1803fb9aeffd212a 100644
--- a/test/language/expressions/class/fields-new-sc-line-gen-computed-symbol-names.js
+++ b/test/language/expressions/class/fields-new-sc-line-gen-computed-symbol-names.js
@@ -27,7 +27,7 @@ var y = Symbol();
 var C = class {
   [x]; [y] = 42;
   *m() { return 42; }
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-new-sc-line-gen-literal-names.js b/test/language/expressions/class/fields-new-sc-line-gen-literal-names.js
index 2551403195b5696a8f7f1b1dcec8752f9b0084ee..102b4824537fd2400457874dfd6ab09bfcb39d29 100644
--- a/test/language/expressions/class/fields-new-sc-line-gen-literal-names.js
+++ b/test/language/expressions/class/fields-new-sc-line-gen-literal-names.js
@@ -27,7 +27,7 @@ var C = class {
   a; b = 42;
   c = fn;
   *m() { return 42; }
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-new-sc-line-gen-private-names.js b/test/language/expressions/class/fields-new-sc-line-gen-private-names.js
index e72c8e6748e226c417c08855a67ee90702eb8634..399bf822c96574b764221c3f39c425dab4e3478f 100644
--- a/test/language/expressions/class/fields-new-sc-line-gen-private-names.js
+++ b/test/language/expressions/class/fields-new-sc-line-gen-private-names.js
@@ -2,24 +2,24 @@
 // - src/class-fields/private-names.case
 // - src/class-fields/productions/cls-expr-new-sc-line-generator.template
 /*---
-description: static literal private names (field definitions followed by a method in a new line with a semicolon)
+description: private names (field definitions followed by a method in a new line with a semicolon)
 esid: prod-FieldDefinition
 features: [class-fields-private, class, class-fields-public, generators]
 flags: [generated]
 includes: [propertyHelper.js]
 info: |
-    ClassElement:
+    ClassElement :
       ...
       FieldDefinition ;
 
-    FieldDefinition:
+    FieldDefinition :
       ClassElementName Initializer_opt
 
-    ClassElementName:
+    ClassElementName :
       PrivateName
 
-    PrivateName:
-      #IdentifierName
+    PrivateName :
+      # IdentifierName
 
 ---*/
 
@@ -27,7 +27,7 @@ info: |
 var C = class {
   #x; #y;
   *m() { return 42; }
-x() {
+  x() {
     this.#x = 42;
     return this.#x;
   }
diff --git a/test/language/expressions/class/fields-new-sc-line-gen-static-private-fields.js b/test/language/expressions/class/fields-new-sc-line-gen-static-private-fields.js
new file mode 100644
index 0000000000000000000000000000000000000000..1595aca16c0a7b72658e0c14a355829717e3cd44
--- /dev/null
+++ b/test/language/expressions/class/fields-new-sc-line-gen-static-private-fields.js
@@ -0,0 +1,67 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-fields.case
+// - src/class-fields/productions/cls-expr-new-sc-line-generator.template
+/*---
+description: static private fields (field definitions followed by a method in a new line with a semicolon)
+esid: prod-FieldDefinition
+features: [class-static-fields-private, class, class-fields-public, generators]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+var C = class {
+  static #x; static #y;
+  *m() { return 42; }
+  static x() {
+    this.#x = 42;
+    return this.#x;
+  }
+  static y() {
+    this.#y = 43;
+    return this.#y;
+  }
+}
+
+var c = new C();
+
+assert.sameValue(c.m().next().value, 42);
+assert.sameValue(c.m, C.prototype.m);
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+
+verifyProperty(C.prototype, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private fields do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#x"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#x"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#y"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#y"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 10");
diff --git a/test/language/expressions/class/fields-new-sc-line-gen-static-private-methods.js b/test/language/expressions/class/fields-new-sc-line-gen-static-private-methods.js
new file mode 100644
index 0000000000000000000000000000000000000000..525cb72141a0900ae2093116f97195121ddaa478
--- /dev/null
+++ b/test/language/expressions/class/fields-new-sc-line-gen-static-private-methods.js
@@ -0,0 +1,73 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-methods.case
+// - src/class-fields/productions/cls-expr-new-sc-line-generator.template
+/*---
+description: static private methods (field definitions followed by a method in a new line with a semicolon)
+esid: prod-FieldDefinition
+features: [class-static-methods-private, class, class-fields-public, generators]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+var C = class {
+  static #xVal; static #yVal;
+  *m() { return 42; }
+  static #x(value) {
+    this.#xVal = value;
+    return this.#xVal;
+  }
+  static #y(value) {
+    this.#y = value;
+    return this.#yVal;
+  }
+  static x() {
+    return this.#x(42);
+  }
+  static y() {
+    return this.#y(43);
+  }
+}
+
+var c = new C();
+
+assert.sameValue(c.m().next().value, 42);
+assert.sameValue(c.m, C.prototype.m);
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+
+verifyProperty(C.prototype, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private methods do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#xVal"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#xVal"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#yVal"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#yVal"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 10");
diff --git a/test/language/expressions/class/fields-new-sc-line-gen-string-literal-names.js b/test/language/expressions/class/fields-new-sc-line-gen-string-literal-names.js
index 751a5016a59abbf77c700ce35a5c9ab927acba25..ecc41b6ee371dd030eaf3e657c494581efc516f8 100644
--- a/test/language/expressions/class/fields-new-sc-line-gen-string-literal-names.js
+++ b/test/language/expressions/class/fields-new-sc-line-gen-string-literal-names.js
@@ -25,7 +25,7 @@ var C = class {
   'a'; "b"; 'c' = 39;
   "d" = 42;
   *m() { return 42; }
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-new-sc-line-method-computed-names.js b/test/language/expressions/class/fields-new-sc-line-method-computed-names.js
index 37a17dee8f060d9f9552e4a5222cac1653828ace..feee67ec7ef06c92dff44a65d1177f09a0cf25d6 100644
--- a/test/language/expressions/class/fields-new-sc-line-method-computed-names.js
+++ b/test/language/expressions/class/fields-new-sc-line-method-computed-names.js
@@ -26,7 +26,7 @@ var x = "b";
 var C = class {
   [x] = 42; [10] = "meep"; ["not initialized"];
   m() { return 42; }
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-new-sc-line-method-computed-symbol-names.js b/test/language/expressions/class/fields-new-sc-line-method-computed-symbol-names.js
index fdf9cf0f756ba9454dd509bc5737cd99abaade52..93bbdd4a1cb1b708a37eae6966b6e24b8494108e 100644
--- a/test/language/expressions/class/fields-new-sc-line-method-computed-symbol-names.js
+++ b/test/language/expressions/class/fields-new-sc-line-method-computed-symbol-names.js
@@ -27,7 +27,7 @@ var y = Symbol();
 var C = class {
   [x]; [y] = 42;
   m() { return 42; }
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-new-sc-line-method-literal-names.js b/test/language/expressions/class/fields-new-sc-line-method-literal-names.js
index 0f771745d3e805c20a862d5264935148e1c99a2a..239c4b5aa2131d5144a63e8fd5d02c89c0c58f35 100644
--- a/test/language/expressions/class/fields-new-sc-line-method-literal-names.js
+++ b/test/language/expressions/class/fields-new-sc-line-method-literal-names.js
@@ -27,7 +27,7 @@ var C = class {
   a; b = 42;
   c = fn;
   m() { return 42; }
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-new-sc-line-method-private-names.js b/test/language/expressions/class/fields-new-sc-line-method-private-names.js
index 959a5874e48e7ea7403438dd2c145ded52eab990..79bc6a00f4daf0606b822b051f8ba12f82a6d701 100644
--- a/test/language/expressions/class/fields-new-sc-line-method-private-names.js
+++ b/test/language/expressions/class/fields-new-sc-line-method-private-names.js
@@ -2,24 +2,24 @@
 // - src/class-fields/private-names.case
 // - src/class-fields/productions/cls-expr-new-sc-line-method.template
 /*---
-description: static literal private names (field definitions followed by a method in a new line with a semicolon)
+description: private names (field definitions followed by a method in a new line with a semicolon)
 esid: prod-FieldDefinition
 features: [class-fields-private, class, class-fields-public]
 flags: [generated]
 includes: [propertyHelper.js]
 info: |
-    ClassElement:
+    ClassElement :
       ...
       FieldDefinition ;
 
-    FieldDefinition:
+    FieldDefinition :
       ClassElementName Initializer_opt
 
-    ClassElementName:
+    ClassElementName :
       PrivateName
 
-    PrivateName:
-      #IdentifierName
+    PrivateName :
+      # IdentifierName
 
 ---*/
 
@@ -27,7 +27,7 @@ info: |
 var C = class {
   #x; #y;
   m() { return 42; }
-x() {
+  x() {
     this.#x = 42;
     return this.#x;
   }
diff --git a/test/language/expressions/class/fields-new-sc-line-method-static-private-fields.js b/test/language/expressions/class/fields-new-sc-line-method-static-private-fields.js
new file mode 100644
index 0000000000000000000000000000000000000000..babe41933625da6005bffb0c9fe284b0fc3cdd79
--- /dev/null
+++ b/test/language/expressions/class/fields-new-sc-line-method-static-private-fields.js
@@ -0,0 +1,67 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-fields.case
+// - src/class-fields/productions/cls-expr-new-sc-line-method.template
+/*---
+description: static private fields (field definitions followed by a method in a new line with a semicolon)
+esid: prod-FieldDefinition
+features: [class-static-fields-private, class, class-fields-public]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+var C = class {
+  static #x; static #y;
+  m() { return 42; }
+  static x() {
+    this.#x = 42;
+    return this.#x;
+  }
+  static y() {
+    this.#y = 43;
+    return this.#y;
+  }
+}
+
+var c = new C();
+
+assert.sameValue(c.m(), 42);
+assert.sameValue(c.m, C.prototype.m);
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+
+verifyProperty(C.prototype, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private fields do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#x"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#x"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#y"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#y"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 10");
diff --git a/test/language/expressions/class/fields-new-sc-line-method-static-private-methods.js b/test/language/expressions/class/fields-new-sc-line-method-static-private-methods.js
new file mode 100644
index 0000000000000000000000000000000000000000..4074913bf368f266d0c306c6c5a9160f15954daa
--- /dev/null
+++ b/test/language/expressions/class/fields-new-sc-line-method-static-private-methods.js
@@ -0,0 +1,73 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-methods.case
+// - src/class-fields/productions/cls-expr-new-sc-line-method.template
+/*---
+description: static private methods (field definitions followed by a method in a new line with a semicolon)
+esid: prod-FieldDefinition
+features: [class-static-methods-private, class, class-fields-public]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+var C = class {
+  static #xVal; static #yVal;
+  m() { return 42; }
+  static #x(value) {
+    this.#xVal = value;
+    return this.#xVal;
+  }
+  static #y(value) {
+    this.#y = value;
+    return this.#yVal;
+  }
+  static x() {
+    return this.#x(42);
+  }
+  static y() {
+    return this.#y(43);
+  }
+}
+
+var c = new C();
+
+assert.sameValue(c.m(), 42);
+assert.sameValue(c.m, C.prototype.m);
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+
+verifyProperty(C.prototype, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private methods do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#xVal"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#xVal"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#yVal"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#yVal"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 10");
diff --git a/test/language/expressions/class/fields-new-sc-line-method-string-literal-names.js b/test/language/expressions/class/fields-new-sc-line-method-string-literal-names.js
index da012272041a5e5d244097ebc1ad8ef2a0f76fec..5a8c955e35ee91509529ab6531ec451e6c2591e8 100644
--- a/test/language/expressions/class/fields-new-sc-line-method-string-literal-names.js
+++ b/test/language/expressions/class/fields-new-sc-line-method-string-literal-names.js
@@ -25,7 +25,7 @@ var C = class {
   'a'; "b"; 'c' = 39;
   "d" = 42;
   m() { return 42; }
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-private-direct-eval-err-contains-arguments.js b/test/language/expressions/class/fields-private-direct-eval-err-contains-arguments.js
new file mode 100644
index 0000000000000000000000000000000000000000..1c0c822c55666dba89ec314c45b2671f8104b307
--- /dev/null
+++ b/test/language/expressions/class/fields-private-direct-eval-err-contains-arguments.js
@@ -0,0 +1,36 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/eval-err-contains-arguments.case
+// - src/class-fields/initializer-eval-arguments/cls-expr-private-fields-eval.template
+/*---
+description: error if `arguments` in StatementList of eval (direct eval)
+esid: sec-performeval-rules-in-initializer
+features: [class, class-fields-public, class-fields-private]
+flags: [generated]
+info: |
+    Additional Early Error Rules for Eval Inside Initializer
+    These static semantics are applied by PerformEval when a direct eval call occurs inside a class field initializer.
+    ScriptBody : StatementList
+
+      It is a Syntax Error if ContainsArguments of StatementList is true.
+      ...
+
+    Static Semantics: ContainsArguments
+      IdentifierReference : Identifier
+
+      1. If the StringValue of Identifier is "arguments", return true.
+      ...
+      For all other grammatical productions, recurse on all nonterminals. If any piece returns true, then return true. Otherwise return false.
+
+---*/
+
+
+var executed = false;
+var C = class {
+  #x = eval('executed = true; arguments;');
+}
+
+assert.throws(SyntaxError, function() {
+  new C();
+});
+
+assert.sameValue(executed, false);
diff --git a/test/language/expressions/class/fields-private-direct-eval-err-contains-newtarget.js b/test/language/expressions/class/fields-private-direct-eval-err-contains-newtarget.js
new file mode 100644
index 0000000000000000000000000000000000000000..2273bc4dfd67ad49dafbea8777a92798cb4825a9
--- /dev/null
+++ b/test/language/expressions/class/fields-private-direct-eval-err-contains-newtarget.js
@@ -0,0 +1,34 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/eval-err-contains-newtarget.case
+// - src/class-fields/initializer-eval-newtarget/cls-expr-private-fields-eval.template
+/*---
+description: error if `new.target` in StatementList of eval (direct eval)
+esid: sec-performeval-rules-in-initializer
+features: [class, new.target, class-fields-private]
+flags: [generated]
+info: |
+    Additional Early Error Rules for Eval Inside Initializer
+    These static semantics are applied by PerformEval when a direct eval call occurs inside a class field initializer.
+    ScriptBody : StatementList
+
+      ...
+      The remaining eval rules apply as outside a constructor, inside a method, and inside a function.
+
+    Additional Early Error Rules for Eval Outside Functions
+    These static semantics are applied by PerformEval when a direct eval call occurs outside of any function.
+    ScriptBody:StatementList
+
+      It is a Syntax Error if StatementList Contains NewTarget.
+
+---*/
+
+
+var executed = false;
+var C = class {
+  #x = eval('executed = true; new.target;');
+}
+
+var c = new C();
+
+assert.sameValue(executed, true);
+assert.sameValue(c.x, undefined);
diff --git a/test/language/expressions/class/fields-private-indirect-eval-err-contains-arguments.js b/test/language/expressions/class/fields-private-indirect-eval-err-contains-arguments.js
new file mode 100644
index 0000000000000000000000000000000000000000..15fc715f6532865e632714d5989b6c7d5cc6573f
--- /dev/null
+++ b/test/language/expressions/class/fields-private-indirect-eval-err-contains-arguments.js
@@ -0,0 +1,36 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/eval-err-contains-arguments.case
+// - src/class-fields/initializer-eval-arguments/cls-expr-private-fields-indirect-eval.template
+/*---
+description: error if `arguments` in StatementList of eval (indirect eval)
+esid: sec-performeval-rules-in-initializer
+features: [class, class-fields-public, class-fields-private]
+flags: [generated]
+info: |
+    Additional Early Error Rules for Eval Inside Initializer
+    These static semantics are applied by PerformEval when a direct eval call occurs inside a class field initializer.
+    ScriptBody : StatementList
+
+      It is a Syntax Error if ContainsArguments of StatementList is true.
+      ...
+
+    Static Semantics: ContainsArguments
+      IdentifierReference : Identifier
+
+      1. If the StringValue of Identifier is "arguments", return true.
+      ...
+      For all other grammatical productions, recurse on all nonterminals. If any piece returns true, then return true. Otherwise return false.
+
+---*/
+
+
+var executed = false;
+var C = class {
+  #x = (0, eval)('executed = true; arguments;');
+}
+
+assert.throws(ReferenceError, function() {
+  new C();
+});
+
+assert.sameValue(executed, true);
diff --git a/test/language/expressions/class/fields-private-indirect-eval-err-contains-newtarget.js b/test/language/expressions/class/fields-private-indirect-eval-err-contains-newtarget.js
new file mode 100644
index 0000000000000000000000000000000000000000..42e0f30ecf733096af165520d8244e0312f8fa16
--- /dev/null
+++ b/test/language/expressions/class/fields-private-indirect-eval-err-contains-newtarget.js
@@ -0,0 +1,35 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/eval-err-contains-newtarget.case
+// - src/class-fields/initializer-eval-newtarget/cls-expr-private-fields-indirect-eval.template
+/*---
+description: error if `new.target` in StatementList of eval (indirect eval)
+esid: sec-performeval-rules-in-initializer
+features: [class, new.target, class-fields-private]
+flags: [generated]
+info: |
+    Additional Early Error Rules for Eval Inside Initializer
+    These static semantics are applied by PerformEval when a direct eval call occurs inside a class field initializer.
+    ScriptBody : StatementList
+
+      ...
+      The remaining eval rules apply as outside a constructor, inside a method, and inside a function.
+
+    Additional Early Error Rules for Eval Outside Functions
+    These static semantics are applied by PerformEval when a direct eval call occurs outside of any function.
+    ScriptBody:StatementList
+
+      It is a Syntax Error if StatementList Contains NewTarget.
+
+---*/
+
+
+var executed = false;
+var C = class {
+  #x = (0, eval)('executed = true; new.target;');
+}
+
+assert.throws(SyntaxError, function() {
+  new C();
+});
+
+assert.sameValue(executed, false);
diff --git a/test/language/expressions/class/fields-redeclaration-symbol.js b/test/language/expressions/class/fields-redeclaration-symbol.js
index 4e42bf38d6cc0215ce1a067990017cf7d6ea63d4..f1c1a4dec7302f1f66294bd4c5afac7d3b9d27b0 100644
--- a/test/language/expressions/class/fields-redeclaration-symbol.js
+++ b/test/language/expressions/class/fields-redeclaration-symbol.js
@@ -4,7 +4,7 @@
 /*---
 description: Redeclaration of public fields with the same name (field definitions in a class expression)
 esid: prod-FieldDefinition
-features: [class, class-fields-public]
+features: [class]
 flags: [generated]
 includes: [propertyHelper.js, compareArray.js]
 info: |
diff --git a/test/language/expressions/class/fields-redeclaration.js b/test/language/expressions/class/fields-redeclaration.js
index 24234ce21bcb106ea40d8ab60c4174c9d0a33959..d8762afee104c3b861501e95adb033ddf18aa8df 100644
--- a/test/language/expressions/class/fields-redeclaration.js
+++ b/test/language/expressions/class/fields-redeclaration.js
@@ -4,7 +4,7 @@
 /*---
 description: Redeclaration of public fields with the same name (field definitions in a class expression)
 esid: prod-FieldDefinition
-features: [class, class-fields-public]
+features: [class]
 flags: [generated]
 includes: [propertyHelper.js, compareArray.js]
 info: |
diff --git a/test/language/expressions/class/fields-regular-definitions-computed-names.js b/test/language/expressions/class/fields-regular-definitions-computed-names.js
index fc724d59d055222393bd2b32b590e96d193c7d94..fb8da12d2eee2dc6718d481940a91ccdea099bec 100644
--- a/test/language/expressions/class/fields-regular-definitions-computed-names.js
+++ b/test/language/expressions/class/fields-regular-definitions-computed-names.js
@@ -25,7 +25,7 @@ var x = "b";
 
 var C = class {
   [x] = 42; [10] = "meep"; ["not initialized"]
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-regular-definitions-computed-symbol-names.js b/test/language/expressions/class/fields-regular-definitions-computed-symbol-names.js
index 33478971803aca7e934cd4b0628bc7f4849075de..87700b4fc96e6ccfeaf3736431e14c646bf4be0e 100644
--- a/test/language/expressions/class/fields-regular-definitions-computed-symbol-names.js
+++ b/test/language/expressions/class/fields-regular-definitions-computed-symbol-names.js
@@ -26,7 +26,7 @@ var y = Symbol();
 
 var C = class {
   [x]; [y] = 42
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-regular-definitions-literal-names.js b/test/language/expressions/class/fields-regular-definitions-literal-names.js
index 6bcbfd9de5ba39d67653af851cb98b5ae7a5b851..2a7f25dd50b77ad0ae1a584d674786572a463999 100644
--- a/test/language/expressions/class/fields-regular-definitions-literal-names.js
+++ b/test/language/expressions/class/fields-regular-definitions-literal-names.js
@@ -26,7 +26,7 @@ const fn = function() {}
 var C = class {
   a; b = 42;
   c = fn
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-regular-definitions-private-names.js b/test/language/expressions/class/fields-regular-definitions-private-names.js
index 86a26026a4d82ff3107bb51574c9f56620a84fe8..5e84f59b16b7f0d586d618561daaa84b6f8e7826 100644
--- a/test/language/expressions/class/fields-regular-definitions-private-names.js
+++ b/test/language/expressions/class/fields-regular-definitions-private-names.js
@@ -2,30 +2,30 @@
 // - src/class-fields/private-names.case
 // - src/class-fields/productions/cls-expr-regular-definitions.template
 /*---
-description: static literal private names (regular fields defintion)
+description: private names (regular fields defintion)
 esid: prod-FieldDefinition
 features: [class-fields-private, class, class-fields-public]
 flags: [generated]
 info: |
-    ClassElement:
+    ClassElement :
       ...
       FieldDefinition ;
 
-    FieldDefinition:
+    FieldDefinition :
       ClassElementName Initializer_opt
 
-    ClassElementName:
+    ClassElementName :
       PrivateName
 
-    PrivateName:
-      #IdentifierName
+    PrivateName :
+      # IdentifierName
 
 ---*/
 
 
 var C = class {
   #x; #y
-x() {
+  x() {
     this.#x = 42;
     return this.#x;
   }
diff --git a/test/language/statements/class/fields-static-private-names.js b/test/language/expressions/class/fields-regular-definitions-static-private-fields.js
similarity index 71%
rename from test/language/statements/class/fields-static-private-names.js
rename to test/language/expressions/class/fields-regular-definitions-static-private-fields.js
index 4192939646c7e7d173a9de0a3dc09c97c283e8d4..ba9d0f026f58d5338c692e3cd8617a10a3fb5973 100644
--- a/test/language/statements/class/fields-static-private-names.js
+++ b/test/language/expressions/class/fields-regular-definitions-static-private-fields.js
@@ -1,32 +1,42 @@
 // This file was procedurally generated from the following sources:
-// - src/class-fields/static-private-names.case
-// - src/class-fields/default/cls-decl.template
+// - src/class-fields/static-private-fields.case
+// - src/class-fields/productions/cls-expr-regular-definitions.template
 /*---
-description: literal private names (field definitions in a class declaration)
+description: static private fields (regular fields defintion)
 esid: prod-FieldDefinition
-features: [class, class-fields-public]
+features: [class-static-fields-private, class, class-fields-public]
 flags: [generated]
 info: |
-    ClassElement:
+    ClassElement :
       ...
       static FieldDefinition ;
 
-    FieldDefinition:
+    FieldDefinition :
       ClassElementName Initializer_opt
 
-    ClassElementName:
+    ClassElementName :
       PrivateName
 
-    PrivateName:
+    PrivateName :
       # IdentifierName
 
 ---*/
 
 
-class C {
+var C = class {
   static #x; static #y
+  static x() {
+    this.#x = 42;
+    return this.#x;
+  }
+  static y() {
+    this.#y = 43;
+    return this.#y;
+  }
 }
 
+var c = new C();
+
 // Test the private fields do not appear as properties before set to value
 assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#x"), false, "test 1");
 assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 2");
diff --git a/test/language/expressions/class/fields-regular-definitions-static-private-methods.js b/test/language/expressions/class/fields-regular-definitions-static-private-methods.js
new file mode 100644
index 0000000000000000000000000000000000000000..e1ef400f13bf2b0804af575845cfec3d64c3e267
--- /dev/null
+++ b/test/language/expressions/class/fields-regular-definitions-static-private-methods.js
@@ -0,0 +1,61 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-methods.case
+// - src/class-fields/productions/cls-expr-regular-definitions.template
+/*---
+description: static private methods (regular fields defintion)
+esid: prod-FieldDefinition
+features: [class-static-methods-private, class, class-fields-public]
+flags: [generated]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+var C = class {
+  static #xVal; static #yVal
+  static #x(value) {
+    this.#xVal = value;
+    return this.#xVal;
+  }
+  static #y(value) {
+    this.#y = value;
+    return this.#yVal;
+  }
+  static x() {
+    return this.#x(42);
+  }
+  static y() {
+    return this.#y(43);
+  }
+}
+
+var c = new C();
+
+// Test the private methods do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#xVal"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#xVal"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#yVal"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#yVal"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 10");
diff --git a/test/language/expressions/class/fields-regular-definitions-string-literal-names.js b/test/language/expressions/class/fields-regular-definitions-string-literal-names.js
index d0afcaa36d285340b7b3726332fd707f6e4d7d16..5e316ec03ff73fc156aff70d2219820c6c25a310 100644
--- a/test/language/expressions/class/fields-regular-definitions-string-literal-names.js
+++ b/test/language/expressions/class/fields-regular-definitions-string-literal-names.js
@@ -24,7 +24,7 @@ info: |
 var C = class {
   'a'; "b"; 'c' = 39;
   "d" = 42
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-same-line-async-gen-computed-names.js b/test/language/expressions/class/fields-same-line-async-gen-computed-names.js
index d312f9c70d2751f98ce714b94d8f4d422ea741d6..7f8d920fec9e9182c4d791eaecacba9b9e25e135 100644
--- a/test/language/expressions/class/fields-same-line-async-gen-computed-names.js
+++ b/test/language/expressions/class/fields-same-line-async-gen-computed-names.js
@@ -25,7 +25,7 @@ var x = "b";
 
 var C = class {
   async *m() { return 42; } [x] = 42; [10] = "meep"; ["not initialized"];
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-same-line-async-gen-computed-symbol-names.js b/test/language/expressions/class/fields-same-line-async-gen-computed-symbol-names.js
index 294259667ec1485449d7833180653eaf83ac1055..a8d955ec20bad0697d17bd1fd44c9570aeff2065 100644
--- a/test/language/expressions/class/fields-same-line-async-gen-computed-symbol-names.js
+++ b/test/language/expressions/class/fields-same-line-async-gen-computed-symbol-names.js
@@ -26,7 +26,7 @@ var y = Symbol();
 
 var C = class {
   async *m() { return 42; } [x]; [y] = 42;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-same-line-async-gen-literal-names.js b/test/language/expressions/class/fields-same-line-async-gen-literal-names.js
index 0796a955c9ee8be2194e538bfa56f73e599021ee..861efccce1361a280d3ac68685ed542d82920656 100644
--- a/test/language/expressions/class/fields-same-line-async-gen-literal-names.js
+++ b/test/language/expressions/class/fields-same-line-async-gen-literal-names.js
@@ -26,7 +26,7 @@ const fn = function() {}
 var C = class {
   async *m() { return 42; } a; b = 42;
   c = fn;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-same-line-async-gen-private-names.js b/test/language/expressions/class/fields-same-line-async-gen-private-names.js
index db0ed849928e4af68bba560451851230a798e6d0..05ddab3fe4c70c4d35253c2a754967b23023ffb9 100644
--- a/test/language/expressions/class/fields-same-line-async-gen-private-names.js
+++ b/test/language/expressions/class/fields-same-line-async-gen-private-names.js
@@ -2,31 +2,31 @@
 // - src/class-fields/private-names.case
 // - src/class-fields/productions/cls-expr-after-same-line-async-gen.template
 /*---
-description: static literal private names (field definitions after an async generator in the same line)
+description: private names (field definitions after an async generator in the same line)
 esid: prod-FieldDefinition
 features: [class-fields-private, class, class-fields-public, async-iteration]
 flags: [generated, async]
 includes: [propertyHelper.js]
 info: |
-    ClassElement:
+    ClassElement :
       ...
       FieldDefinition ;
 
-    FieldDefinition:
+    FieldDefinition :
       ClassElementName Initializer_opt
 
-    ClassElementName:
+    ClassElementName :
       PrivateName
 
-    PrivateName:
-      #IdentifierName
+    PrivateName :
+      # IdentifierName
 
 ---*/
 
 
 var C = class {
   async *m() { return 42; } #x; #y;
-x() {
+  x() {
     this.#x = 42;
     return this.#x;
   }
diff --git a/test/language/expressions/class/fields-same-line-async-gen-static-private-fields.js b/test/language/expressions/class/fields-same-line-async-gen-static-private-fields.js
new file mode 100644
index 0000000000000000000000000000000000000000..40d189e4db24f54ea4199081f1a0532d3b168870
--- /dev/null
+++ b/test/language/expressions/class/fields-same-line-async-gen-static-private-fields.js
@@ -0,0 +1,70 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-fields.case
+// - src/class-fields/productions/cls-expr-after-same-line-async-gen.template
+/*---
+description: static private fields (field definitions after an async generator in the same line)
+esid: prod-FieldDefinition
+features: [class-static-fields-private, class, class-fields-public, async-iteration]
+flags: [generated, async]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+var C = class {
+  async *m() { return 42; } static #x; static #y;
+  static x() {
+    this.#x = 42;
+    return this.#x;
+  }
+  static y() {
+    this.#y = 43;
+    return this.#y;
+  }
+}
+
+var c = new C();
+
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+assert.sameValue(c.m, C.prototype.m);
+
+verifyProperty(C.prototype, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+}, {restore: true});
+
+// Test the private fields do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#x"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#x"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#y"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#y"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 10");
+
+c.m().next().then(function(v) {
+  assert.sameValue(v.value, 42);
+  assert.sameValue(v.done, true);
+}, $DONE).then($DONE, $DONE);
diff --git a/test/language/expressions/class/fields-same-line-async-gen-static-private-methods.js b/test/language/expressions/class/fields-same-line-async-gen-static-private-methods.js
new file mode 100644
index 0000000000000000000000000000000000000000..2bbac54e1b6b66fcfd5daae92b66e711268d0736
--- /dev/null
+++ b/test/language/expressions/class/fields-same-line-async-gen-static-private-methods.js
@@ -0,0 +1,76 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-methods.case
+// - src/class-fields/productions/cls-expr-after-same-line-async-gen.template
+/*---
+description: static private methods (field definitions after an async generator in the same line)
+esid: prod-FieldDefinition
+features: [class-static-methods-private, class, class-fields-public, async-iteration]
+flags: [generated, async]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+var C = class {
+  async *m() { return 42; } static #xVal; static #yVal;
+  static #x(value) {
+    this.#xVal = value;
+    return this.#xVal;
+  }
+  static #y(value) {
+    this.#y = value;
+    return this.#yVal;
+  }
+  static x() {
+    return this.#x(42);
+  }
+  static y() {
+    return this.#y(43);
+  }
+}
+
+var c = new C();
+
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+assert.sameValue(c.m, C.prototype.m);
+
+verifyProperty(C.prototype, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+}, {restore: true});
+
+// Test the private methods do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#xVal"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#xVal"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#yVal"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#yVal"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 10");
+
+c.m().next().then(function(v) {
+  assert.sameValue(v.value, 42);
+  assert.sameValue(v.done, true);
+}, $DONE).then($DONE, $DONE);
diff --git a/test/language/expressions/class/fields-same-line-async-gen-string-literal-names.js b/test/language/expressions/class/fields-same-line-async-gen-string-literal-names.js
index b72f2c24548fc1a78eed19dbad7f57b74f3636dd..108d2cf8f11c9b1c3dc181b7bc9ab3fee0a63b58 100644
--- a/test/language/expressions/class/fields-same-line-async-gen-string-literal-names.js
+++ b/test/language/expressions/class/fields-same-line-async-gen-string-literal-names.js
@@ -24,7 +24,7 @@ info: |
 var C = class {
   async *m() { return 42; } 'a'; "b"; 'c' = 39;
   "d" = 42;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-same-line-async-method-computed-names.js b/test/language/expressions/class/fields-same-line-async-method-computed-names.js
index 82031be527f80c7e1f397981705f9a540d7607db..c358d94b9be914ba198954ac57ded47186767426 100644
--- a/test/language/expressions/class/fields-same-line-async-method-computed-names.js
+++ b/test/language/expressions/class/fields-same-line-async-method-computed-names.js
@@ -25,7 +25,7 @@ var x = "b";
 
 var C = class {
   async m() { return 42; } [x] = 42; [10] = "meep"; ["not initialized"];
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-same-line-async-method-computed-symbol-names.js b/test/language/expressions/class/fields-same-line-async-method-computed-symbol-names.js
index 1519d8d04fe8172b99af410d7cbb3f812f43bdfd..b211484c3bf199e0c3ea9478c9bc7cd5d8e8511e 100644
--- a/test/language/expressions/class/fields-same-line-async-method-computed-symbol-names.js
+++ b/test/language/expressions/class/fields-same-line-async-method-computed-symbol-names.js
@@ -26,7 +26,7 @@ var y = Symbol();
 
 var C = class {
   async m() { return 42; } [x]; [y] = 42;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-same-line-async-method-literal-names.js b/test/language/expressions/class/fields-same-line-async-method-literal-names.js
index 11b3ff42a1b23b80565ca1f176c32911da09e61e..b4dbeb9bc4e987563c68966dd55b89bc16dc558d 100644
--- a/test/language/expressions/class/fields-same-line-async-method-literal-names.js
+++ b/test/language/expressions/class/fields-same-line-async-method-literal-names.js
@@ -26,7 +26,7 @@ const fn = function() {}
 var C = class {
   async m() { return 42; } a; b = 42;
   c = fn;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-same-line-async-method-private-names.js b/test/language/expressions/class/fields-same-line-async-method-private-names.js
index c357bc663775386150d621ed74c4584a76c40d90..dab4667908d8d25766dc0c42dcd69791fbd68f2d 100644
--- a/test/language/expressions/class/fields-same-line-async-method-private-names.js
+++ b/test/language/expressions/class/fields-same-line-async-method-private-names.js
@@ -2,31 +2,31 @@
 // - src/class-fields/private-names.case
 // - src/class-fields/productions/cls-expr-after-same-line-async-method.template
 /*---
-description: static literal private names (field definitions after an async method in the same line)
+description: private names (field definitions after an async method in the same line)
 esid: prod-FieldDefinition
 features: [class-fields-private, class, class-fields-public, async-functions]
 flags: [generated, async]
 includes: [propertyHelper.js]
 info: |
-    ClassElement:
+    ClassElement :
       ...
       FieldDefinition ;
 
-    FieldDefinition:
+    FieldDefinition :
       ClassElementName Initializer_opt
 
-    ClassElementName:
+    ClassElementName :
       PrivateName
 
-    PrivateName:
-      #IdentifierName
+    PrivateName :
+      # IdentifierName
 
 ---*/
 
 
 var C = class {
   async m() { return 42; } #x; #y;
-x() {
+  x() {
     this.#x = 42;
     return this.#x;
   }
diff --git a/test/language/expressions/class/fields-same-line-async-method-static-private-fields.js b/test/language/expressions/class/fields-same-line-async-method-static-private-fields.js
new file mode 100644
index 0000000000000000000000000000000000000000..2370de7b5604eb56cd54e2e13516fe31e8b51c0d
--- /dev/null
+++ b/test/language/expressions/class/fields-same-line-async-method-static-private-fields.js
@@ -0,0 +1,69 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-fields.case
+// - src/class-fields/productions/cls-expr-after-same-line-async-method.template
+/*---
+description: static private fields (field definitions after an async method in the same line)
+esid: prod-FieldDefinition
+features: [class-static-fields-private, class, class-fields-public, async-functions]
+flags: [generated, async]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+var C = class {
+  async m() { return 42; } static #x; static #y;
+  static x() {
+    this.#x = 42;
+    return this.#x;
+  }
+  static y() {
+    this.#y = 43;
+    return this.#y;
+  }
+}
+
+var c = new C();
+
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+assert.sameValue(c.m, C.prototype.m);
+
+verifyProperty(C.prototype, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+}, {restore: true});
+
+// Test the private fields do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#x"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#x"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#y"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#y"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 10");
+
+c.m().then(function(v) {
+  assert.sameValue(v, 42);
+}, $DONE).then($DONE, $DONE);
diff --git a/test/language/expressions/class/fields-same-line-async-method-static-private-methods.js b/test/language/expressions/class/fields-same-line-async-method-static-private-methods.js
new file mode 100644
index 0000000000000000000000000000000000000000..fadd09677c5dfe5c49a602ed2d082919f0200dbf
--- /dev/null
+++ b/test/language/expressions/class/fields-same-line-async-method-static-private-methods.js
@@ -0,0 +1,75 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-methods.case
+// - src/class-fields/productions/cls-expr-after-same-line-async-method.template
+/*---
+description: static private methods (field definitions after an async method in the same line)
+esid: prod-FieldDefinition
+features: [class-static-methods-private, class, class-fields-public, async-functions]
+flags: [generated, async]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+var C = class {
+  async m() { return 42; } static #xVal; static #yVal;
+  static #x(value) {
+    this.#xVal = value;
+    return this.#xVal;
+  }
+  static #y(value) {
+    this.#y = value;
+    return this.#yVal;
+  }
+  static x() {
+    return this.#x(42);
+  }
+  static y() {
+    return this.#y(43);
+  }
+}
+
+var c = new C();
+
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+assert.sameValue(c.m, C.prototype.m);
+
+verifyProperty(C.prototype, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+}, {restore: true});
+
+// Test the private methods do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#xVal"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#xVal"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#yVal"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#yVal"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 10");
+
+c.m().then(function(v) {
+  assert.sameValue(v, 42);
+}, $DONE).then($DONE, $DONE);
diff --git a/test/language/expressions/class/fields-same-line-async-method-string-literal-names.js b/test/language/expressions/class/fields-same-line-async-method-string-literal-names.js
index 9bc2eac679a083225f7afd204d96fe9c7616923e..a311fd7c94745f7588d2f75deadad839cb6c56f2 100644
--- a/test/language/expressions/class/fields-same-line-async-method-string-literal-names.js
+++ b/test/language/expressions/class/fields-same-line-async-method-string-literal-names.js
@@ -24,7 +24,7 @@ info: |
 var C = class {
   async m() { return 42; } 'a'; "b"; 'c' = 39;
   "d" = 42;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-same-line-gen-computed-names.js b/test/language/expressions/class/fields-same-line-gen-computed-names.js
index 3f9e73ae98cbaae462fead7236841a14fe07bf38..9beb41169724cacfeabf636ee9f109856cb47d46 100644
--- a/test/language/expressions/class/fields-same-line-gen-computed-names.js
+++ b/test/language/expressions/class/fields-same-line-gen-computed-names.js
@@ -25,7 +25,7 @@ var x = "b";
 
 var C = class {
   [x] = 42; [10] = "meep"; ["not initialized"]; *m() { return 42; }
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-same-line-gen-computed-symbol-names.js b/test/language/expressions/class/fields-same-line-gen-computed-symbol-names.js
index 8f038bfb122fc247b6ce1ce433bf856912b0ed13..77726bee198a87d672bf6b6c8f1b2212f35c1411 100644
--- a/test/language/expressions/class/fields-same-line-gen-computed-symbol-names.js
+++ b/test/language/expressions/class/fields-same-line-gen-computed-symbol-names.js
@@ -26,7 +26,7 @@ var y = Symbol();
 
 var C = class {
   [x]; [y] = 42; *m() { return 42; }
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-same-line-gen-literal-names.js b/test/language/expressions/class/fields-same-line-gen-literal-names.js
index d59e9e2b89741b0a6779c11c57371f663e523621..e3283b6a4bea53a2154c4a2fae14b1426cbc9ae0 100644
--- a/test/language/expressions/class/fields-same-line-gen-literal-names.js
+++ b/test/language/expressions/class/fields-same-line-gen-literal-names.js
@@ -26,7 +26,7 @@ const fn = function() {}
 var C = class {
   a; b = 42;
   c = fn; *m() { return 42; }
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-same-line-gen-private-names.js b/test/language/expressions/class/fields-same-line-gen-private-names.js
index dad18ab09cb7fc45019d4a12b8b717a0316b3409..91f1b7eefa1b6b99ef5440f936851b7bc99492cd 100644
--- a/test/language/expressions/class/fields-same-line-gen-private-names.js
+++ b/test/language/expressions/class/fields-same-line-gen-private-names.js
@@ -2,31 +2,31 @@
 // - src/class-fields/private-names.case
 // - src/class-fields/productions/cls-expr-same-line-generator.template
 /*---
-description: static literal private names (field definitions followed by a generator method in the same line)
+description: private names (field definitions followed by a generator method in the same line)
 esid: prod-FieldDefinition
 features: [class-fields-private, class, class-fields-public, generators]
 flags: [generated]
 includes: [propertyHelper.js]
 info: |
-    ClassElement:
+    ClassElement :
       ...
       FieldDefinition ;
 
-    FieldDefinition:
+    FieldDefinition :
       ClassElementName Initializer_opt
 
-    ClassElementName:
+    ClassElementName :
       PrivateName
 
-    PrivateName:
-      #IdentifierName
+    PrivateName :
+      # IdentifierName
 
 ---*/
 
 
 var C = class {
   #x; #y; *m() { return 42; }
-x() {
+  x() {
     this.#x = 42;
     return this.#x;
   }
diff --git a/test/language/expressions/class/fields-same-line-gen-static-private-fields.js b/test/language/expressions/class/fields-same-line-gen-static-private-fields.js
new file mode 100644
index 0000000000000000000000000000000000000000..5f1fdd0487d42ffa8b6084b50d7857631b8c55e7
--- /dev/null
+++ b/test/language/expressions/class/fields-same-line-gen-static-private-fields.js
@@ -0,0 +1,66 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-fields.case
+// - src/class-fields/productions/cls-expr-same-line-generator.template
+/*---
+description: static private fields (field definitions followed by a generator method in the same line)
+esid: prod-FieldDefinition
+features: [class-static-fields-private, class, class-fields-public, generators]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+var C = class {
+  static #x; static #y; *m() { return 42; }
+  static x() {
+    this.#x = 42;
+    return this.#x;
+  }
+  static y() {
+    this.#y = 43;
+    return this.#y;
+  }
+}
+
+var c = new C();
+
+assert.sameValue(c.m().next().value, 42);
+assert.sameValue(c.m, C.prototype.m);
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+
+verifyProperty(C.prototype, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private fields do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#x"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#x"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#y"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#y"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 10");
diff --git a/test/language/expressions/class/fields-same-line-gen-static-private-methods.js b/test/language/expressions/class/fields-same-line-gen-static-private-methods.js
new file mode 100644
index 0000000000000000000000000000000000000000..d659b01a947f99924af022280f0cf17ab1c06ec3
--- /dev/null
+++ b/test/language/expressions/class/fields-same-line-gen-static-private-methods.js
@@ -0,0 +1,72 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-methods.case
+// - src/class-fields/productions/cls-expr-same-line-generator.template
+/*---
+description: static private methods (field definitions followed by a generator method in the same line)
+esid: prod-FieldDefinition
+features: [class-static-methods-private, class, class-fields-public, generators]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+var C = class {
+  static #xVal; static #yVal; *m() { return 42; }
+  static #x(value) {
+    this.#xVal = value;
+    return this.#xVal;
+  }
+  static #y(value) {
+    this.#y = value;
+    return this.#yVal;
+  }
+  static x() {
+    return this.#x(42);
+  }
+  static y() {
+    return this.#y(43);
+  }
+}
+
+var c = new C();
+
+assert.sameValue(c.m().next().value, 42);
+assert.sameValue(c.m, C.prototype.m);
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+
+verifyProperty(C.prototype, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private methods do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#xVal"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#xVal"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#yVal"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#yVal"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 10");
diff --git a/test/language/expressions/class/fields-same-line-gen-string-literal-names.js b/test/language/expressions/class/fields-same-line-gen-string-literal-names.js
index 1765683b6521af0fd6f75d092ee1a6ef7c1e7266..c566da04d71bd42052ae0011fbfea6c9b4e3e1cd 100644
--- a/test/language/expressions/class/fields-same-line-gen-string-literal-names.js
+++ b/test/language/expressions/class/fields-same-line-gen-string-literal-names.js
@@ -24,7 +24,7 @@ info: |
 var C = class {
   'a'; "b"; 'c' = 39;
   "d" = 42; *m() { return 42; }
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-same-line-method-computed-names.js b/test/language/expressions/class/fields-same-line-method-computed-names.js
index eb626db479695dc73dcdd9ddfea03cb5ad648cf4..4958c0ffb5c0b5147231135d1fa587ce53d5ff36 100644
--- a/test/language/expressions/class/fields-same-line-method-computed-names.js
+++ b/test/language/expressions/class/fields-same-line-method-computed-names.js
@@ -25,7 +25,7 @@ var x = "b";
 
 var C = class {
   [x] = 42; [10] = "meep"; ["not initialized"]; m() { return 42; }
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-same-line-method-computed-symbol-names.js b/test/language/expressions/class/fields-same-line-method-computed-symbol-names.js
index e063a1ab9be58b50d50f297446e0b5d80f47def2..bbed59a05bdd6f4d1c9d7721b8ce5e45bc2aab38 100644
--- a/test/language/expressions/class/fields-same-line-method-computed-symbol-names.js
+++ b/test/language/expressions/class/fields-same-line-method-computed-symbol-names.js
@@ -26,7 +26,7 @@ var y = Symbol();
 
 var C = class {
   [x]; [y] = 42; m() { return 42; }
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-same-line-method-literal-names.js b/test/language/expressions/class/fields-same-line-method-literal-names.js
index 70c7af3f8de1272337a061a1b3378c149ef6436e..c448686a73d14c9b1278d1a20fac417c65994011 100644
--- a/test/language/expressions/class/fields-same-line-method-literal-names.js
+++ b/test/language/expressions/class/fields-same-line-method-literal-names.js
@@ -26,7 +26,7 @@ const fn = function() {}
 var C = class {
   a; b = 42;
   c = fn; m() { return 42; }
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-same-line-method-private-names.js b/test/language/expressions/class/fields-same-line-method-private-names.js
index 354f77ec47e0664e60fee49d28f24835e39a92d8..d041a3e61e8aa01c69f2683614a353ba4680856c 100644
--- a/test/language/expressions/class/fields-same-line-method-private-names.js
+++ b/test/language/expressions/class/fields-same-line-method-private-names.js
@@ -2,31 +2,31 @@
 // - src/class-fields/private-names.case
 // - src/class-fields/productions/cls-expr-same-line-method.template
 /*---
-description: static literal private names (field definitions followed by a method in the same line)
+description: private names (field definitions followed by a method in the same line)
 esid: prod-FieldDefinition
 features: [class-fields-private, class, class-fields-public]
 flags: [generated]
 includes: [propertyHelper.js]
 info: |
-    ClassElement:
+    ClassElement :
       ...
       FieldDefinition ;
 
-    FieldDefinition:
+    FieldDefinition :
       ClassElementName Initializer_opt
 
-    ClassElementName:
+    ClassElementName :
       PrivateName
 
-    PrivateName:
-      #IdentifierName
+    PrivateName :
+      # IdentifierName
 
 ---*/
 
 
 var C = class {
   #x; #y; m() { return 42; }
-x() {
+  x() {
     this.#x = 42;
     return this.#x;
   }
diff --git a/test/language/expressions/class/fields-same-line-method-static-private-fields.js b/test/language/expressions/class/fields-same-line-method-static-private-fields.js
new file mode 100644
index 0000000000000000000000000000000000000000..bffbb73d9f36ad93cf4f04ae4a3cc9377f95f429
--- /dev/null
+++ b/test/language/expressions/class/fields-same-line-method-static-private-fields.js
@@ -0,0 +1,66 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-fields.case
+// - src/class-fields/productions/cls-expr-same-line-method.template
+/*---
+description: static private fields (field definitions followed by a method in the same line)
+esid: prod-FieldDefinition
+features: [class-static-fields-private, class, class-fields-public]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+var C = class {
+  static #x; static #y; m() { return 42; }
+  static x() {
+    this.#x = 42;
+    return this.#x;
+  }
+  static y() {
+    this.#y = 43;
+    return this.#y;
+  }
+}
+
+var c = new C();
+
+assert.sameValue(c.m(), 42);
+assert.sameValue(c.m, C.prototype.m);
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+
+verifyProperty(C.prototype, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private fields do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#x"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#x"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#y"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#y"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 10");
diff --git a/test/language/expressions/class/fields-same-line-method-static-private-methods.js b/test/language/expressions/class/fields-same-line-method-static-private-methods.js
new file mode 100644
index 0000000000000000000000000000000000000000..a1c0c40cd5e452655aeecd35298bd15c662563f5
--- /dev/null
+++ b/test/language/expressions/class/fields-same-line-method-static-private-methods.js
@@ -0,0 +1,72 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-methods.case
+// - src/class-fields/productions/cls-expr-same-line-method.template
+/*---
+description: static private methods (field definitions followed by a method in the same line)
+esid: prod-FieldDefinition
+features: [class-static-methods-private, class, class-fields-public]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+var C = class {
+  static #xVal; static #yVal; m() { return 42; }
+  static #x(value) {
+    this.#xVal = value;
+    return this.#xVal;
+  }
+  static #y(value) {
+    this.#y = value;
+    return this.#yVal;
+  }
+  static x() {
+    return this.#x(42);
+  }
+  static y() {
+    return this.#y(43);
+  }
+}
+
+var c = new C();
+
+assert.sameValue(c.m(), 42);
+assert.sameValue(c.m, C.prototype.m);
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+
+verifyProperty(C.prototype, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private methods do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#xVal"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#xVal"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#yVal"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#yVal"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 10");
diff --git a/test/language/expressions/class/fields-same-line-method-string-literal-names.js b/test/language/expressions/class/fields-same-line-method-string-literal-names.js
index e0823a9cd1a4213ae8cd7d5910697b87c8881588..a9ae3ec04aeb5f6d368484ecffc94b44e70af6b1 100644
--- a/test/language/expressions/class/fields-same-line-method-string-literal-names.js
+++ b/test/language/expressions/class/fields-same-line-method-string-literal-names.js
@@ -24,7 +24,7 @@ info: |
 var C = class {
   'a'; "b"; 'c' = 39;
   "d" = 42; m() { return 42; }
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-static-comp-name-init-err-contains-arguments.js b/test/language/expressions/class/fields-static-comp-name-init-err-contains-arguments.js
new file mode 100644
index 0000000000000000000000000000000000000000..71a013ef751a7d7c19eca57537c84386b90d356e
--- /dev/null
+++ b/test/language/expressions/class/fields-static-comp-name-init-err-contains-arguments.js
@@ -0,0 +1,35 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/init-err-contains-arguments.case
+// - src/class-fields/initializer-error/cls-expr-fields-static-comp-name.template
+/*---
+description: Syntax error if `arguments` used in class field (static computed ClassElementName)
+esid: sec-class-definitions-static-semantics-early-errors
+features: [class, class-fields-public, class-static-fields-public]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    Static Semantics: Early Errors
+
+      FieldDefinition:
+        PropertyNameInitializeropt
+
+      - It is a Syntax Error if ContainsArguments of Initializer is true.
+
+    Static Semantics: ContainsArguments
+      IdentifierReference : Identifier
+
+      1. If the StringValue of Identifier is "arguments", return true.
+      ...
+      For all other grammatical productions, recurse on all nonterminals. If any piece returns true, then return true. Otherwise return false.
+
+---*/
+
+
+throw "Test262: This statement should not be evaluated.";
+
+var x = "string";
+var C = class {
+  static [x] = arguments;
+}
diff --git a/test/language/expressions/class/fields-static-comp-name-init-err-contains-super.js b/test/language/expressions/class/fields-static-comp-name-init-err-contains-super.js
new file mode 100644
index 0000000000000000000000000000000000000000..49605fef46914b9d9e7bd856447abfaf132abe99
--- /dev/null
+++ b/test/language/expressions/class/fields-static-comp-name-init-err-contains-super.js
@@ -0,0 +1,28 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/init-err-contains-super.case
+// - src/class-fields/initializer-error/cls-expr-fields-static-comp-name.template
+/*---
+description: Syntax error if `super()` used in class field (static computed ClassElementName)
+esid: sec-class-definitions-static-semantics-early-errors
+features: [class, class-fields-public, class-static-fields-public]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    Static Semantics: Early Errors
+
+      FieldDefinition:
+        PropertyNameInitializeropt
+
+      - It is a Syntax Error if Initializer is present and Initializer Contains SuperCall is true.
+
+---*/
+
+
+throw "Test262: This statement should not be evaluated.";
+
+var x = "string";
+var C = class {
+  static [x] = super();
+}
diff --git a/test/language/expressions/class/fields-static-literal-init-err-contains-arguments.js b/test/language/expressions/class/fields-static-literal-init-err-contains-arguments.js
new file mode 100644
index 0000000000000000000000000000000000000000..a5223c3f1d5d078d09409d669898be676e92c967
--- /dev/null
+++ b/test/language/expressions/class/fields-static-literal-init-err-contains-arguments.js
@@ -0,0 +1,34 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/init-err-contains-arguments.case
+// - src/class-fields/initializer-error/cls-expr-fields-static-literal-name.template
+/*---
+description: Syntax error if `arguments` used in class field (static literal ClassElementName)
+esid: sec-class-definitions-static-semantics-early-errors
+features: [class, class-fields-public, class-static-fields-public]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    Static Semantics: Early Errors
+
+      FieldDefinition:
+        PropertyNameInitializeropt
+
+      - It is a Syntax Error if ContainsArguments of Initializer is true.
+
+    Static Semantics: ContainsArguments
+      IdentifierReference : Identifier
+
+      1. If the StringValue of Identifier is "arguments", return true.
+      ...
+      For all other grammatical productions, recurse on all nonterminals. If any piece returns true, then return true. Otherwise return false.
+
+---*/
+
+
+throw "Test262: This statement should not be evaluated.";
+
+var C = class {
+  static x = arguments;
+}
diff --git a/test/language/expressions/class/fields-static-literal-init-err-contains-super.js b/test/language/expressions/class/fields-static-literal-init-err-contains-super.js
new file mode 100644
index 0000000000000000000000000000000000000000..ac49312a9c75270a3b51b7fdc40a8d3738ae6b3a
--- /dev/null
+++ b/test/language/expressions/class/fields-static-literal-init-err-contains-super.js
@@ -0,0 +1,27 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/init-err-contains-super.case
+// - src/class-fields/initializer-error/cls-expr-fields-static-literal-name.template
+/*---
+description: Syntax error if `super()` used in class field (static literal ClassElementName)
+esid: sec-class-definitions-static-semantics-early-errors
+features: [class, class-fields-public, class-static-fields-public]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    Static Semantics: Early Errors
+
+      FieldDefinition:
+        PropertyNameInitializeropt
+
+      - It is a Syntax Error if Initializer is present and Initializer Contains SuperCall is true.
+
+---*/
+
+
+throw "Test262: This statement should not be evaluated.";
+
+var C = class {
+  static x = super();
+}
diff --git a/test/language/expressions/class/fields-static-private-init-err-contains-arguments.js b/test/language/expressions/class/fields-static-private-init-err-contains-arguments.js
new file mode 100644
index 0000000000000000000000000000000000000000..bcc2a49cd379a9574e16befb365ab4e6ab38e663
--- /dev/null
+++ b/test/language/expressions/class/fields-static-private-init-err-contains-arguments.js
@@ -0,0 +1,34 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/init-err-contains-arguments.case
+// - src/class-fields/initializer-error/cls-expr-fields-static-private-name.template
+/*---
+description: Syntax error if `arguments` used in class field (static PrivateName)
+esid: sec-class-definitions-static-semantics-early-errors
+features: [class, class-fields-public, class-static-fields-private]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    Static Semantics: Early Errors
+
+      FieldDefinition:
+        PropertyNameInitializeropt
+
+      - It is a Syntax Error if ContainsArguments of Initializer is true.
+
+    Static Semantics: ContainsArguments
+      IdentifierReference : Identifier
+
+      1. If the StringValue of Identifier is "arguments", return true.
+      ...
+      For all other grammatical productions, recurse on all nonterminals. If any piece returns true, then return true. Otherwise return false.
+
+---*/
+
+
+throw "Test262: This statement should not be evaluated.";
+
+var C = class {
+  static #x = arguments;
+}
diff --git a/test/language/expressions/class/fields-static-private-init-err-contains-super.js b/test/language/expressions/class/fields-static-private-init-err-contains-super.js
new file mode 100644
index 0000000000000000000000000000000000000000..feaf029a14d8abfa3bc164e0cdb6fa565fd3dd0a
--- /dev/null
+++ b/test/language/expressions/class/fields-static-private-init-err-contains-super.js
@@ -0,0 +1,27 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/init-err-contains-super.case
+// - src/class-fields/initializer-error/cls-expr-fields-static-private-name.template
+/*---
+description: Syntax error if `super()` used in class field (static PrivateName)
+esid: sec-class-definitions-static-semantics-early-errors
+features: [class, class-fields-public, class-static-fields-private]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    Static Semantics: Early Errors
+
+      FieldDefinition:
+        PropertyNameInitializeropt
+
+      - It is a Syntax Error if Initializer is present and Initializer Contains SuperCall is true.
+
+---*/
+
+
+throw "Test262: This statement should not be evaluated.";
+
+var C = class {
+  static #x = super();
+}
diff --git a/test/language/expressions/class/fields-static-string-literal-name-init-err-contains-arguments.js b/test/language/expressions/class/fields-static-string-literal-name-init-err-contains-arguments.js
new file mode 100644
index 0000000000000000000000000000000000000000..787a945674159826cd8dd661db065758181f689d
--- /dev/null
+++ b/test/language/expressions/class/fields-static-string-literal-name-init-err-contains-arguments.js
@@ -0,0 +1,34 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/init-err-contains-arguments.case
+// - src/class-fields/initializer-error/cls-expr-fields-static-string-literal-name.template
+/*---
+description: Syntax error if `arguments` used in class field (static string literal ClassElementName)
+esid: sec-class-definitions-static-semantics-early-errors
+features: [class, class-fields-public, class-static-fields-public]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    Static Semantics: Early Errors
+
+      FieldDefinition:
+        PropertyNameInitializeropt
+
+      - It is a Syntax Error if ContainsArguments of Initializer is true.
+
+    Static Semantics: ContainsArguments
+      IdentifierReference : Identifier
+
+      1. If the StringValue of Identifier is "arguments", return true.
+      ...
+      For all other grammatical productions, recurse on all nonterminals. If any piece returns true, then return true. Otherwise return false.
+
+---*/
+
+
+throw "Test262: This statement should not be evaluated.";
+
+var C = class {
+  static 'x' = arguments;
+}
diff --git a/test/language/expressions/class/fields-static-string-literal-name-init-err-contains-super.js b/test/language/expressions/class/fields-static-string-literal-name-init-err-contains-super.js
new file mode 100644
index 0000000000000000000000000000000000000000..5a5474dce90fcffe7271eea21a64a5f7e1511156
--- /dev/null
+++ b/test/language/expressions/class/fields-static-string-literal-name-init-err-contains-super.js
@@ -0,0 +1,27 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/init-err-contains-super.case
+// - src/class-fields/initializer-error/cls-expr-fields-static-string-literal-name.template
+/*---
+description: Syntax error if `super()` used in class field (static string literal ClassElementName)
+esid: sec-class-definitions-static-semantics-early-errors
+features: [class, class-fields-public, class-static-fields-public]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    Static Semantics: Early Errors
+
+      FieldDefinition:
+        PropertyNameInitializeropt
+
+      - It is a Syntax Error if Initializer is present and Initializer Contains SuperCall is true.
+
+---*/
+
+
+throw "Test262: This statement should not be evaluated.";
+
+var C = class {
+  static 'x' = super();
+}
diff --git a/test/language/expressions/class/fields-wrapped-in-sc-computed-names.js b/test/language/expressions/class/fields-wrapped-in-sc-computed-names.js
index 607437f8f757321e85cf2e39573d917fbe7285ed..34b6bb0f903c43f5d7d6d307f589ec85dc556969 100644
--- a/test/language/expressions/class/fields-wrapped-in-sc-computed-names.js
+++ b/test/language/expressions/class/fields-wrapped-in-sc-computed-names.js
@@ -27,7 +27,7 @@ var C = class {
   ;;;;
   ;;;;;;[x] = 42; [10] = "meep"; ["not initialized"];;;;;;;
   ;;;;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-wrapped-in-sc-computed-symbol-names.js b/test/language/expressions/class/fields-wrapped-in-sc-computed-symbol-names.js
index ff4fc8ae925df21a16bc0b81b3fd81898c3f5d24..2ac06208b51ee8af4214540f08355c9332ee133d 100644
--- a/test/language/expressions/class/fields-wrapped-in-sc-computed-symbol-names.js
+++ b/test/language/expressions/class/fields-wrapped-in-sc-computed-symbol-names.js
@@ -28,7 +28,7 @@ var C = class {
   ;;;;
   ;;;;;;[x]; [y] = 42;;;;;;;
   ;;;;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-wrapped-in-sc-literal-names.js b/test/language/expressions/class/fields-wrapped-in-sc-literal-names.js
index a12d79c9c4c9995ebf911d9907acd1e181a406fb..01bd09b25be097eea526d1526313f68f70f39f96 100644
--- a/test/language/expressions/class/fields-wrapped-in-sc-literal-names.js
+++ b/test/language/expressions/class/fields-wrapped-in-sc-literal-names.js
@@ -28,7 +28,7 @@ var C = class {
   ;;;;;;a; b = 42;
   c = fn;;;;;;;
   ;;;;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/fields-wrapped-in-sc-private-names.js b/test/language/expressions/class/fields-wrapped-in-sc-private-names.js
index cb551e4c881dd6286532598ad1dfdc0e8d7c35df..6bdf637ffb3c6bd6a8a4bb1b99e014a247f762aa 100644
--- a/test/language/expressions/class/fields-wrapped-in-sc-private-names.js
+++ b/test/language/expressions/class/fields-wrapped-in-sc-private-names.js
@@ -2,23 +2,23 @@
 // - src/class-fields/private-names.case
 // - src/class-fields/productions/cls-expr-wrapped-in-sc.template
 /*---
-description: static literal private names (fields definition wrapped in semicolons)
+description: private names (fields definition wrapped in semicolons)
 esid: prod-FieldDefinition
 features: [class-fields-private, class, class-fields-public]
 flags: [generated]
 info: |
-    ClassElement:
+    ClassElement :
       ...
       FieldDefinition ;
 
-    FieldDefinition:
+    FieldDefinition :
       ClassElementName Initializer_opt
 
-    ClassElementName:
+    ClassElementName :
       PrivateName
 
-    PrivateName:
-      #IdentifierName
+    PrivateName :
+      # IdentifierName
 
 ---*/
 
@@ -27,7 +27,7 @@ var C = class {
   ;;;;
   ;;;;;;#x; #y;;;;;;;
   ;;;;
-x() {
+  x() {
     this.#x = 42;
     return this.#x;
   }
diff --git a/test/language/expressions/class/fields-wrapped-in-sc-static-private-fields.js b/test/language/expressions/class/fields-wrapped-in-sc-static-private-fields.js
new file mode 100644
index 0000000000000000000000000000000000000000..f501112962b6326dad692ee7b8aa39f371e68159
--- /dev/null
+++ b/test/language/expressions/class/fields-wrapped-in-sc-static-private-fields.js
@@ -0,0 +1,57 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-fields.case
+// - src/class-fields/productions/cls-expr-wrapped-in-sc.template
+/*---
+description: static private fields (fields definition wrapped in semicolons)
+esid: prod-FieldDefinition
+features: [class-static-fields-private, class, class-fields-public]
+flags: [generated]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+var C = class {
+  ;;;;
+  ;;;;;;static #x; static #y;;;;;;;
+  ;;;;
+  static x() {
+    this.#x = 42;
+    return this.#x;
+  }
+  static y() {
+    this.#y = 43;
+    return this.#y;
+  }
+}
+
+var c = new C();
+
+// Test the private fields do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#x"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#x"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#y"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#y"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 10");
diff --git a/test/language/expressions/class/fields-wrapped-in-sc-static-private-methods.js b/test/language/expressions/class/fields-wrapped-in-sc-static-private-methods.js
new file mode 100644
index 0000000000000000000000000000000000000000..32636c420dc8d7dbf178aededea602c7b76532e0
--- /dev/null
+++ b/test/language/expressions/class/fields-wrapped-in-sc-static-private-methods.js
@@ -0,0 +1,63 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-methods.case
+// - src/class-fields/productions/cls-expr-wrapped-in-sc.template
+/*---
+description: static private methods (fields definition wrapped in semicolons)
+esid: prod-FieldDefinition
+features: [class-static-methods-private, class, class-fields-public]
+flags: [generated]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+var C = class {
+  ;;;;
+  ;;;;;;static #xVal; static #yVal;;;;;;;
+  ;;;;
+  static #x(value) {
+    this.#xVal = value;
+    return this.#xVal;
+  }
+  static #y(value) {
+    this.#y = value;
+    return this.#yVal;
+  }
+  static x() {
+    return this.#x(42);
+  }
+  static y() {
+    return this.#y(43);
+  }
+}
+
+var c = new C();
+
+// Test the private methods do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#xVal"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#xVal"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#yVal"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#yVal"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 10");
diff --git a/test/language/expressions/class/fields-wrapped-in-sc-string-literal-names.js b/test/language/expressions/class/fields-wrapped-in-sc-string-literal-names.js
index 1260883fe31508d05fbe984f7cb98b104bfe2a52..c2f25406475d12c47c65018f4df6b854959042de 100644
--- a/test/language/expressions/class/fields-wrapped-in-sc-string-literal-names.js
+++ b/test/language/expressions/class/fields-wrapped-in-sc-string-literal-names.js
@@ -26,7 +26,7 @@ var C = class {
   ;;;;;;'a'; "b"; 'c' = 39;
   "d" = 42;;;;;;;
   ;;;;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/expressions/class/private-fields-proxy-default-handler-throws.js b/test/language/expressions/class/private-fields-proxy-default-handler-throws.js
new file mode 100644
index 0000000000000000000000000000000000000000..d2a26a993eac27a84d3a8047339c3b3959eeb9d2
--- /dev/null
+++ b/test/language/expressions/class/private-fields-proxy-default-handler-throws.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2018 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-privatefieldget
+description: Private fields not accessible via default Proxy handler
+info: |
+  1. Assert: P is a Private Name value.
+  2. If O is not an object, throw a TypeError exception.
+  3. Let entry be PrivateFieldFind(P, O).
+  4. If entry is empty, throw a TypeError exception.
+
+features: [class, class-fields-private]
+---*/
+
+
+var C = class {
+  #x = 1;
+  x() {
+    return this.#x;
+  }
+}
+
+var c = new C();
+var p = new Proxy(c, {});
+
+assert.sameValue(c.x(), 1);
+assert.throws(TypeError, function() {
+  p.x();
+});
diff --git a/test/language/expressions/class/static-private-fields-proxy-default-handler-throws.js b/test/language/expressions/class/static-private-fields-proxy-default-handler-throws.js
new file mode 100644
index 0000000000000000000000000000000000000000..9649b5406a0d30fa4839b0ea013e443a0421b4d0
--- /dev/null
+++ b/test/language/expressions/class/static-private-fields-proxy-default-handler-throws.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2018 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-privatefieldget
+description: Static private fields not accessible via default Proxy handler
+info: |
+  1. Assert: P is a Private Name value.
+  2. If O is not an object, throw a TypeError exception.
+  3. Let entry be PrivateFieldFind(P, O).
+  4. If entry is empty, throw a TypeError exception.
+
+features: [class, class-static-fields-private]
+---*/
+
+var C = class {
+  static #x = 1;
+  static x() {
+    return this.#x;
+  }
+}
+
+var P = new Proxy(C, {});
+
+assert.sameValue(C.x, 1);
+assert.throws(TypeError, function() {
+  P.x;
+});
diff --git a/test/language/expressions/class/static-private-methods-proxy-default-handler-throws.js b/test/language/expressions/class/static-private-methods-proxy-default-handler-throws.js
new file mode 100644
index 0000000000000000000000000000000000000000..5a26a594630bc2f8c759c568fef55ef1f6f11ce0
--- /dev/null
+++ b/test/language/expressions/class/static-private-methods-proxy-default-handler-throws.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2018 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-privatefieldget
+description: Static private methods not accessible via default Proxy handler
+info: |
+  1. Assert: P is a Private Name value.
+  2. If O is not an object, throw a TypeError exception.
+  3. Let entry be PrivateFieldFind(P, O).
+  4. If entry is empty, throw a TypeError exception.
+
+features: [class, class-static-methods-private]
+---*/
+
+
+var C = class {
+  static #x(value) {
+    return 1;
+  }
+  static x() {
+    return this.#x();
+  }
+}
+
+var P = new Proxy(C, {});
+
+assert.sameValue(C.x(), 1);
+assert.throws(TypeError, function() {
+  P.x();
+});
diff --git a/test/language/statements/class/fields-after-same-line-gen-computed-names.js b/test/language/statements/class/fields-after-same-line-gen-computed-names.js
index e7634a16bf9a0a3daaa94c5e2b81e5fa7a005e71..f1490e0eb03c56c7607e27c1276d30d3dfb63f52 100644
--- a/test/language/statements/class/fields-after-same-line-gen-computed-names.js
+++ b/test/language/statements/class/fields-after-same-line-gen-computed-names.js
@@ -25,7 +25,7 @@ var x = "b";
 
 class C {
   *m() { return 42; } [x] = 42; [10] = "meep"; ["not initialized"];
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-after-same-line-gen-computed-symbol-names.js b/test/language/statements/class/fields-after-same-line-gen-computed-symbol-names.js
index 03529d08dc9fbfcbb52f68d774862f076e812c72..73d1a1751f30bb41bf77256ea07cdead5c5eb3e9 100644
--- a/test/language/statements/class/fields-after-same-line-gen-computed-symbol-names.js
+++ b/test/language/statements/class/fields-after-same-line-gen-computed-symbol-names.js
@@ -26,7 +26,7 @@ var y = Symbol();
 
 class C {
   *m() { return 42; } [x]; [y] = 42;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-after-same-line-gen-literal-names.js b/test/language/statements/class/fields-after-same-line-gen-literal-names.js
index fd8c939e1c3933f02553accdd4b2e407890d4b43..277fd75c8929a396de5d0aa20ae42d1c7083dd8e 100644
--- a/test/language/statements/class/fields-after-same-line-gen-literal-names.js
+++ b/test/language/statements/class/fields-after-same-line-gen-literal-names.js
@@ -26,7 +26,7 @@ const fn = function() {}
 class C {
   *m() { return 42; } a; b = 42;
   c = fn;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-after-same-line-gen-private-names.js b/test/language/statements/class/fields-after-same-line-gen-private-names.js
index 66bcc5a36eed879ce6a0f8c844c830a1cafb2aff..1986c0342c0ba5ec364d1f003d550425fa754f22 100644
--- a/test/language/statements/class/fields-after-same-line-gen-private-names.js
+++ b/test/language/statements/class/fields-after-same-line-gen-private-names.js
@@ -2,31 +2,31 @@
 // - src/class-fields/private-names.case
 // - src/class-fields/productions/cls-decl-after-same-line-gen.template
 /*---
-description: static literal private names (field definitions after a generator in the same line)
+description: private names (field definitions after a generator in the same line)
 esid: prod-FieldDefinition
 features: [class-fields-private, generators, class, class-fields-public]
 flags: [generated]
 includes: [propertyHelper.js]
 info: |
-    ClassElement:
+    ClassElement :
       ...
       FieldDefinition ;
 
-    FieldDefinition:
+    FieldDefinition :
       ClassElementName Initializer_opt
 
-    ClassElementName:
+    ClassElementName :
       PrivateName
 
-    PrivateName:
-      #IdentifierName
+    PrivateName :
+      # IdentifierName
 
 ---*/
 
 
 class C {
   *m() { return 42; } #x; #y;
-x() {
+  x() {
     this.#x = 42;
     return this.#x;
   }
diff --git a/test/language/statements/class/fields-after-same-line-gen-static-private-fields.js b/test/language/statements/class/fields-after-same-line-gen-static-private-fields.js
new file mode 100644
index 0000000000000000000000000000000000000000..38084c562a8e04438f62f5b88708e769d99e6c0f
--- /dev/null
+++ b/test/language/statements/class/fields-after-same-line-gen-static-private-fields.js
@@ -0,0 +1,66 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-fields.case
+// - src/class-fields/productions/cls-decl-after-same-line-gen.template
+/*---
+description: static private fields (field definitions after a generator in the same line)
+esid: prod-FieldDefinition
+features: [class-static-fields-private, generators, class, class-fields-public]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+class C {
+  *m() { return 42; } static #x; static #y;
+  static x() {
+    this.#x = 42;
+    return this.#x;
+  }
+  static y() {
+    this.#y = 43;
+    return this.#y;
+  }
+}
+
+var c = new C();
+
+assert.sameValue(c.m().next().value, 42);
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+assert.sameValue(c.m, C.prototype.m);
+
+verifyProperty(C.prototype, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private fields do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#x"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#x"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#y"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#y"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 10");
diff --git a/test/language/statements/class/fields-after-same-line-gen-static-private-methods.js b/test/language/statements/class/fields-after-same-line-gen-static-private-methods.js
new file mode 100644
index 0000000000000000000000000000000000000000..00ed8463beba63a4e03b2ab40f9a9cdab271b048
--- /dev/null
+++ b/test/language/statements/class/fields-after-same-line-gen-static-private-methods.js
@@ -0,0 +1,72 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-methods.case
+// - src/class-fields/productions/cls-decl-after-same-line-gen.template
+/*---
+description: static private methods (field definitions after a generator in the same line)
+esid: prod-FieldDefinition
+features: [class-static-methods-private, generators, class, class-fields-public]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+class C {
+  *m() { return 42; } static #xVal; static #yVal;
+  static #x(value) {
+    this.#xVal = value;
+    return this.#xVal;
+  }
+  static #y(value) {
+    this.#y = value;
+    return this.#yVal;
+  }
+  static x() {
+    return this.#x(42);
+  }
+  static y() {
+    return this.#y(43);
+  }
+}
+
+var c = new C();
+
+assert.sameValue(c.m().next().value, 42);
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+assert.sameValue(c.m, C.prototype.m);
+
+verifyProperty(C.prototype, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private methods do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#xVal"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#xVal"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#yVal"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#yVal"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 10");
diff --git a/test/language/statements/class/fields-after-same-line-gen-string-literal-names.js b/test/language/statements/class/fields-after-same-line-gen-string-literal-names.js
index 8e8cc643fc099adc3ef532df5320b01a7156f428..07530985b043f9b76d93f0ce8f4a9ce2e2564932 100644
--- a/test/language/statements/class/fields-after-same-line-gen-string-literal-names.js
+++ b/test/language/statements/class/fields-after-same-line-gen-string-literal-names.js
@@ -24,7 +24,7 @@ info: |
 class C {
   *m() { return 42; } 'a'; "b"; 'c' = 39;
   "d" = 42;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-after-same-line-method-computed-names.js b/test/language/statements/class/fields-after-same-line-method-computed-names.js
index 21fb3b86d77e2daab9963919d02641877d1d4fbc..6104c45f7a4961ceed48f816e33feaf878af470d 100644
--- a/test/language/statements/class/fields-after-same-line-method-computed-names.js
+++ b/test/language/statements/class/fields-after-same-line-method-computed-names.js
@@ -25,7 +25,7 @@ var x = "b";
 
 class C {
   m() { return 42; } [x] = 42; [10] = "meep"; ["not initialized"];
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-after-same-line-method-computed-symbol-names.js b/test/language/statements/class/fields-after-same-line-method-computed-symbol-names.js
index 35f11d9308d2d37fdff7866bad2f98b1d7eafdd1..5253ea022aca64f74f70864d861b2f1079a78fe3 100644
--- a/test/language/statements/class/fields-after-same-line-method-computed-symbol-names.js
+++ b/test/language/statements/class/fields-after-same-line-method-computed-symbol-names.js
@@ -26,7 +26,7 @@ var y = Symbol();
 
 class C {
   m() { return 42; } [x]; [y] = 42;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-after-same-line-method-literal-names.js b/test/language/statements/class/fields-after-same-line-method-literal-names.js
index 80ecfe320890b41d19e439b7394db4c74d843f5c..707c6cd9f2bfa8be6ba5da782a9e5857ab448f81 100644
--- a/test/language/statements/class/fields-after-same-line-method-literal-names.js
+++ b/test/language/statements/class/fields-after-same-line-method-literal-names.js
@@ -26,7 +26,7 @@ const fn = function() {}
 class C {
   m() { return 42; } a; b = 42;
   c = fn;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-after-same-line-method-private-names.js b/test/language/statements/class/fields-after-same-line-method-private-names.js
index b241501c310810b8ba66d74878673a31c7221255..61f52545e45d7c5c5db5033dd648592d4d3c1a30 100644
--- a/test/language/statements/class/fields-after-same-line-method-private-names.js
+++ b/test/language/statements/class/fields-after-same-line-method-private-names.js
@@ -2,31 +2,31 @@
 // - src/class-fields/private-names.case
 // - src/class-fields/productions/cls-decl-after-same-line-method.template
 /*---
-description: static literal private names (field definitions after a method in the same line)
+description: private names (field definitions after a method in the same line)
 esid: prod-FieldDefinition
 features: [class-fields-private, class, class-fields-public]
 flags: [generated]
 includes: [propertyHelper.js]
 info: |
-    ClassElement:
+    ClassElement :
       ...
       FieldDefinition ;
 
-    FieldDefinition:
+    FieldDefinition :
       ClassElementName Initializer_opt
 
-    ClassElementName:
+    ClassElementName :
       PrivateName
 
-    PrivateName:
-      #IdentifierName
+    PrivateName :
+      # IdentifierName
 
 ---*/
 
 
 class C {
   m() { return 42; } #x; #y;
-x() {
+  x() {
     this.#x = 42;
     return this.#x;
   }
diff --git a/test/language/statements/class/fields-after-same-line-method-static-private-fields.js b/test/language/statements/class/fields-after-same-line-method-static-private-fields.js
new file mode 100644
index 0000000000000000000000000000000000000000..5c3b6f6b87a861b880d9224e6cc169e6a6b015c1
--- /dev/null
+++ b/test/language/statements/class/fields-after-same-line-method-static-private-fields.js
@@ -0,0 +1,66 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-fields.case
+// - src/class-fields/productions/cls-decl-after-same-line-method.template
+/*---
+description: static private fields (field definitions after a method in the same line)
+esid: prod-FieldDefinition
+features: [class-static-fields-private, class, class-fields-public]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+class C {
+  m() { return 42; } static #x; static #y;
+  static x() {
+    this.#x = 42;
+    return this.#x;
+  }
+  static y() {
+    this.#y = 43;
+    return this.#y;
+  }
+}
+
+var c = new C();
+
+assert.sameValue(c.m(), 42);
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+assert.sameValue(c.m, C.prototype.m);
+
+verifyProperty(C.prototype, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private fields do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#x"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#x"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#y"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#y"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 10");
diff --git a/test/language/statements/class/fields-after-same-line-method-static-private-methods.js b/test/language/statements/class/fields-after-same-line-method-static-private-methods.js
new file mode 100644
index 0000000000000000000000000000000000000000..afdbfc13c648ef18cccbb76934f5a1e56e330ed9
--- /dev/null
+++ b/test/language/statements/class/fields-after-same-line-method-static-private-methods.js
@@ -0,0 +1,72 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-methods.case
+// - src/class-fields/productions/cls-decl-after-same-line-method.template
+/*---
+description: static private methods (field definitions after a method in the same line)
+esid: prod-FieldDefinition
+features: [class-static-methods-private, class, class-fields-public]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+class C {
+  m() { return 42; } static #xVal; static #yVal;
+  static #x(value) {
+    this.#xVal = value;
+    return this.#xVal;
+  }
+  static #y(value) {
+    this.#y = value;
+    return this.#yVal;
+  }
+  static x() {
+    return this.#x(42);
+  }
+  static y() {
+    return this.#y(43);
+  }
+}
+
+var c = new C();
+
+assert.sameValue(c.m(), 42);
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+assert.sameValue(c.m, C.prototype.m);
+
+verifyProperty(C.prototype, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private methods do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#xVal"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#xVal"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#yVal"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#yVal"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 10");
diff --git a/test/language/statements/class/fields-after-same-line-method-string-literal-names.js b/test/language/statements/class/fields-after-same-line-method-string-literal-names.js
index 096ed952ef348fe1a1c3bb2889ec32c2cdf4ebb2..1ac3f62cb626ac885741d5c1655963163fa64c39 100644
--- a/test/language/statements/class/fields-after-same-line-method-string-literal-names.js
+++ b/test/language/statements/class/fields-after-same-line-method-string-literal-names.js
@@ -24,7 +24,7 @@ info: |
 class C {
   m() { return 42; } 'a'; "b"; 'c' = 39;
   "d" = 42;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-after-same-line-static-async-gen-computed-names.js b/test/language/statements/class/fields-after-same-line-static-async-gen-computed-names.js
index 5554b63e9b4d6067544d3aafa2bf7752502fcb0d..f6d8311611b54df45ed835a9c61f9d36a732fd89 100644
--- a/test/language/statements/class/fields-after-same-line-static-async-gen-computed-names.js
+++ b/test/language/statements/class/fields-after-same-line-static-async-gen-computed-names.js
@@ -25,7 +25,7 @@ var x = "b";
 
 class C {
   static async *m() { return 42; } [x] = 42; [10] = "meep"; ["not initialized"];
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-after-same-line-static-async-gen-computed-symbol-names.js b/test/language/statements/class/fields-after-same-line-static-async-gen-computed-symbol-names.js
index 6844ad7fe9c1a415017af829ca8086c4f4ff8285..6d538d492d369ade3dbff9cfb6a5e259d9c2d246 100644
--- a/test/language/statements/class/fields-after-same-line-static-async-gen-computed-symbol-names.js
+++ b/test/language/statements/class/fields-after-same-line-static-async-gen-computed-symbol-names.js
@@ -26,7 +26,7 @@ var y = Symbol();
 
 class C {
   static async *m() { return 42; } [x]; [y] = 42;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-after-same-line-static-async-gen-literal-names.js b/test/language/statements/class/fields-after-same-line-static-async-gen-literal-names.js
index a98e2cea44d474217e449d3494a27ef70dbab002..d6dea1573b517c76f58b53b72278cfd05307f774 100644
--- a/test/language/statements/class/fields-after-same-line-static-async-gen-literal-names.js
+++ b/test/language/statements/class/fields-after-same-line-static-async-gen-literal-names.js
@@ -26,7 +26,7 @@ const fn = function() {}
 class C {
   static async *m() { return 42; } a; b = 42;
   c = fn;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-after-same-line-static-async-gen-private-names.js b/test/language/statements/class/fields-after-same-line-static-async-gen-private-names.js
index 3f40e656f09b09b7d00270f567517b0fe064093b..3262f4498c49f3c52332b4c170721589a402b09e 100644
--- a/test/language/statements/class/fields-after-same-line-static-async-gen-private-names.js
+++ b/test/language/statements/class/fields-after-same-line-static-async-gen-private-names.js
@@ -2,31 +2,31 @@
 // - src/class-fields/private-names.case
 // - src/class-fields/productions/cls-decl-after-same-line-static-async-gen.template
 /*---
-description: static literal private names (field definitions after a static async generator in the same line)
+description: private names (field definitions after a static async generator in the same line)
 esid: prod-FieldDefinition
 features: [class-fields-private, class, class-fields-public, async-iteration]
 flags: [generated, async]
 includes: [propertyHelper.js]
 info: |
-    ClassElement:
+    ClassElement :
       ...
       FieldDefinition ;
 
-    FieldDefinition:
+    FieldDefinition :
       ClassElementName Initializer_opt
 
-    ClassElementName:
+    ClassElementName :
       PrivateName
 
-    PrivateName:
-      #IdentifierName
+    PrivateName :
+      # IdentifierName
 
 ---*/
 
 
 class C {
   static async *m() { return 42; } #x; #y;
-x() {
+  x() {
     this.#x = 42;
     return this.#x;
   }
diff --git a/test/language/statements/class/fields-after-same-line-static-async-gen-static-private-fields.js b/test/language/statements/class/fields-after-same-line-static-async-gen-static-private-fields.js
new file mode 100644
index 0000000000000000000000000000000000000000..2e337619da000c41c068e9ea0c5312ceee365fb4
--- /dev/null
+++ b/test/language/statements/class/fields-after-same-line-static-async-gen-static-private-fields.js
@@ -0,0 +1,70 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-fields.case
+// - src/class-fields/productions/cls-decl-after-same-line-static-async-gen.template
+/*---
+description: static private fields (field definitions after a static async generator in the same line)
+esid: prod-FieldDefinition
+features: [class-static-fields-private, class, class-fields-public, async-iteration]
+flags: [generated, async]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+class C {
+  static async *m() { return 42; } static #x; static #y;
+  static x() {
+    this.#x = 42;
+    return this.#x;
+  }
+  static y() {
+    this.#y = 43;
+    return this.#y;
+  }
+}
+
+var c = new C();
+
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "m"), false);
+
+verifyProperty(C, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+}, {restore: true});
+
+// Test the private fields do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#x"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#x"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#y"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#y"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 10");
+
+C.m().next().then(function(v) {
+  assert.sameValue(v.value, 42);
+  assert.sameValue(v.done, true);
+}, $DONE).then($DONE, $DONE);
diff --git a/test/language/statements/class/fields-after-same-line-static-async-gen-static-private-methods.js b/test/language/statements/class/fields-after-same-line-static-async-gen-static-private-methods.js
new file mode 100644
index 0000000000000000000000000000000000000000..fb473a75a77af3f52e5dbad45946be18f389f3bf
--- /dev/null
+++ b/test/language/statements/class/fields-after-same-line-static-async-gen-static-private-methods.js
@@ -0,0 +1,76 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-methods.case
+// - src/class-fields/productions/cls-decl-after-same-line-static-async-gen.template
+/*---
+description: static private methods (field definitions after a static async generator in the same line)
+esid: prod-FieldDefinition
+features: [class-static-methods-private, class, class-fields-public, async-iteration]
+flags: [generated, async]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+class C {
+  static async *m() { return 42; } static #xVal; static #yVal;
+  static #x(value) {
+    this.#xVal = value;
+    return this.#xVal;
+  }
+  static #y(value) {
+    this.#y = value;
+    return this.#yVal;
+  }
+  static x() {
+    return this.#x(42);
+  }
+  static y() {
+    return this.#y(43);
+  }
+}
+
+var c = new C();
+
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "m"), false);
+
+verifyProperty(C, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+}, {restore: true});
+
+// Test the private methods do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#xVal"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#xVal"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#yVal"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#yVal"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 10");
+
+C.m().next().then(function(v) {
+  assert.sameValue(v.value, 42);
+  assert.sameValue(v.done, true);
+}, $DONE).then($DONE, $DONE);
diff --git a/test/language/statements/class/fields-after-same-line-static-async-gen-string-literal-names.js b/test/language/statements/class/fields-after-same-line-static-async-gen-string-literal-names.js
index 294388a982aae58097f1c4a4fd7a81207da32e60..6b8d8536d3e27f4be33f621c358112415a4fb2de 100644
--- a/test/language/statements/class/fields-after-same-line-static-async-gen-string-literal-names.js
+++ b/test/language/statements/class/fields-after-same-line-static-async-gen-string-literal-names.js
@@ -24,7 +24,7 @@ info: |
 class C {
   static async *m() { return 42; } 'a'; "b"; 'c' = 39;
   "d" = 42;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-after-same-line-static-async-method-computed-names.js b/test/language/statements/class/fields-after-same-line-static-async-method-computed-names.js
index 34dfe534b0382dc74065efda94639593e29099da..e628b3ac5672cfec832e3e4fa2582c3c546979e4 100644
--- a/test/language/statements/class/fields-after-same-line-static-async-method-computed-names.js
+++ b/test/language/statements/class/fields-after-same-line-static-async-method-computed-names.js
@@ -25,7 +25,7 @@ var x = "b";
 
 class C {
   static async m() { return 42; } [x] = 42; [10] = "meep"; ["not initialized"];
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-after-same-line-static-async-method-computed-symbol-names.js b/test/language/statements/class/fields-after-same-line-static-async-method-computed-symbol-names.js
index e02eb6a006a0bd236b3765a9ab5d490a34f36d1d..ebb19a426fccb67299a9a8ef4a5c10764c6588f7 100644
--- a/test/language/statements/class/fields-after-same-line-static-async-method-computed-symbol-names.js
+++ b/test/language/statements/class/fields-after-same-line-static-async-method-computed-symbol-names.js
@@ -26,7 +26,7 @@ var y = Symbol();
 
 class C {
   static async m() { return 42; } [x]; [y] = 42;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-after-same-line-static-async-method-literal-names.js b/test/language/statements/class/fields-after-same-line-static-async-method-literal-names.js
index 7652c546a7c4275a173365802242451ed2cbcd03..6593a6c52a0d56ca25f4efeec01ab48aaba52f1c 100644
--- a/test/language/statements/class/fields-after-same-line-static-async-method-literal-names.js
+++ b/test/language/statements/class/fields-after-same-line-static-async-method-literal-names.js
@@ -26,7 +26,7 @@ const fn = function() {}
 class C {
   static async m() { return 42; } a; b = 42;
   c = fn;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-after-same-line-static-async-method-private-names.js b/test/language/statements/class/fields-after-same-line-static-async-method-private-names.js
index bc001aa284ec1a57e74968a5768b279f7b673b41..f37ea74df696a727e554878f3fd7526256dd06bf 100644
--- a/test/language/statements/class/fields-after-same-line-static-async-method-private-names.js
+++ b/test/language/statements/class/fields-after-same-line-static-async-method-private-names.js
@@ -2,31 +2,31 @@
 // - src/class-fields/private-names.case
 // - src/class-fields/productions/cls-decl-after-same-line-static-async-method.template
 /*---
-description: static literal private names (field definitions after a static async method in the same line)
+description: private names (field definitions after a static async method in the same line)
 esid: prod-FieldDefinition
 features: [class-fields-private, class, class-fields-public, async-functions]
 flags: [generated, async]
 includes: [propertyHelper.js]
 info: |
-    ClassElement:
+    ClassElement :
       ...
       FieldDefinition ;
 
-    FieldDefinition:
+    FieldDefinition :
       ClassElementName Initializer_opt
 
-    ClassElementName:
+    ClassElementName :
       PrivateName
 
-    PrivateName:
-      #IdentifierName
+    PrivateName :
+      # IdentifierName
 
 ---*/
 
 
 class C {
   static async m() { return 42; } #x; #y;
-x() {
+  x() {
     this.#x = 42;
     return this.#x;
   }
diff --git a/test/language/statements/class/fields-after-same-line-static-async-method-static-private-fields.js b/test/language/statements/class/fields-after-same-line-static-async-method-static-private-fields.js
new file mode 100644
index 0000000000000000000000000000000000000000..e77b50da511ccae4d15c0e1a3baf57e65ff13851
--- /dev/null
+++ b/test/language/statements/class/fields-after-same-line-static-async-method-static-private-fields.js
@@ -0,0 +1,69 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-fields.case
+// - src/class-fields/productions/cls-decl-after-same-line-static-async-method.template
+/*---
+description: static private fields (field definitions after a static async method in the same line)
+esid: prod-FieldDefinition
+features: [class-static-fields-private, class, class-fields-public, async-functions]
+flags: [generated, async]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+class C {
+  static async m() { return 42; } static #x; static #y;
+  static x() {
+    this.#x = 42;
+    return this.#x;
+  }
+  static y() {
+    this.#y = 43;
+    return this.#y;
+  }
+}
+
+var c = new C();
+
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "m"), false);
+
+verifyProperty(C, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+}, {restore: true});
+
+// Test the private fields do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#x"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#x"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#y"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#y"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 10");
+
+C.m().then(function(v) {
+  assert.sameValue(v, 42);
+}, $DONE).then($DONE, $DONE);
diff --git a/test/language/statements/class/fields-after-same-line-static-async-method-static-private-methods.js b/test/language/statements/class/fields-after-same-line-static-async-method-static-private-methods.js
new file mode 100644
index 0000000000000000000000000000000000000000..755b850bd186f85d3b6ef1ef7dc52d2172273532
--- /dev/null
+++ b/test/language/statements/class/fields-after-same-line-static-async-method-static-private-methods.js
@@ -0,0 +1,75 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-methods.case
+// - src/class-fields/productions/cls-decl-after-same-line-static-async-method.template
+/*---
+description: static private methods (field definitions after a static async method in the same line)
+esid: prod-FieldDefinition
+features: [class-static-methods-private, class, class-fields-public, async-functions]
+flags: [generated, async]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+class C {
+  static async m() { return 42; } static #xVal; static #yVal;
+  static #x(value) {
+    this.#xVal = value;
+    return this.#xVal;
+  }
+  static #y(value) {
+    this.#y = value;
+    return this.#yVal;
+  }
+  static x() {
+    return this.#x(42);
+  }
+  static y() {
+    return this.#y(43);
+  }
+}
+
+var c = new C();
+
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "m"), false);
+
+verifyProperty(C, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+}, {restore: true});
+
+// Test the private methods do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#xVal"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#xVal"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#yVal"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#yVal"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 10");
+
+C.m().then(function(v) {
+  assert.sameValue(v, 42);
+}, $DONE).then($DONE, $DONE);
diff --git a/test/language/statements/class/fields-after-same-line-static-async-method-string-literal-names.js b/test/language/statements/class/fields-after-same-line-static-async-method-string-literal-names.js
index dde92722fa9d0dd5a421478e2c56f8f7ff027bb5..4ff9e092a818ed58f2d140e7f0abee08dc429097 100644
--- a/test/language/statements/class/fields-after-same-line-static-async-method-string-literal-names.js
+++ b/test/language/statements/class/fields-after-same-line-static-async-method-string-literal-names.js
@@ -24,7 +24,7 @@ info: |
 class C {
   static async m() { return 42; } 'a'; "b"; 'c' = 39;
   "d" = 42;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-after-same-line-static-gen-computed-names.js b/test/language/statements/class/fields-after-same-line-static-gen-computed-names.js
index 49e281bd7eafc0adb210710c936284233772d48c..14fd13e300d98316df472c094b431bed6626ec9f 100644
--- a/test/language/statements/class/fields-after-same-line-static-gen-computed-names.js
+++ b/test/language/statements/class/fields-after-same-line-static-gen-computed-names.js
@@ -25,7 +25,7 @@ var x = "b";
 
 class C {
   static *m() { return 42; } [x] = 42; [10] = "meep"; ["not initialized"];
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-after-same-line-static-gen-computed-symbol-names.js b/test/language/statements/class/fields-after-same-line-static-gen-computed-symbol-names.js
index df6e52c3922bc70a4e1c4023b87be3b7da4d5f8d..612e4a3ea6ce340aa30e141cfb2791322b0b2143 100644
--- a/test/language/statements/class/fields-after-same-line-static-gen-computed-symbol-names.js
+++ b/test/language/statements/class/fields-after-same-line-static-gen-computed-symbol-names.js
@@ -26,7 +26,7 @@ var y = Symbol();
 
 class C {
   static *m() { return 42; } [x]; [y] = 42;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-after-same-line-static-gen-literal-names.js b/test/language/statements/class/fields-after-same-line-static-gen-literal-names.js
index 7ac589657567cf3ec475e87ff5fdd48b69def9a3..249e98cb14ac0710aa831a640abbbd16bfdc3647 100644
--- a/test/language/statements/class/fields-after-same-line-static-gen-literal-names.js
+++ b/test/language/statements/class/fields-after-same-line-static-gen-literal-names.js
@@ -26,7 +26,7 @@ const fn = function() {}
 class C {
   static *m() { return 42; } a; b = 42;
   c = fn;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-after-same-line-static-gen-private-names.js b/test/language/statements/class/fields-after-same-line-static-gen-private-names.js
index c6799db962b06b5345b2cc315bac04524e16ca5c..8a6a62c4671cf6b380b36c002a6bf92de87fa3e7 100644
--- a/test/language/statements/class/fields-after-same-line-static-gen-private-names.js
+++ b/test/language/statements/class/fields-after-same-line-static-gen-private-names.js
@@ -2,31 +2,31 @@
 // - src/class-fields/private-names.case
 // - src/class-fields/productions/cls-decl-after-same-line-static-gen.template
 /*---
-description: static literal private names (field definitions after a static generator in the same line)
+description: private names (field definitions after a static generator in the same line)
 esid: prod-FieldDefinition
 features: [class-fields-private, generators, class, class-fields-public]
 flags: [generated]
 includes: [propertyHelper.js]
 info: |
-    ClassElement:
+    ClassElement :
       ...
       FieldDefinition ;
 
-    FieldDefinition:
+    FieldDefinition :
       ClassElementName Initializer_opt
 
-    ClassElementName:
+    ClassElementName :
       PrivateName
 
-    PrivateName:
-      #IdentifierName
+    PrivateName :
+      # IdentifierName
 
 ---*/
 
 
 class C {
   static *m() { return 42; } #x; #y;
-x() {
+  x() {
     this.#x = 42;
     return this.#x;
   }
diff --git a/test/language/statements/class/fields-after-same-line-static-gen-static-private-fields.js b/test/language/statements/class/fields-after-same-line-static-gen-static-private-fields.js
new file mode 100644
index 0000000000000000000000000000000000000000..ac5e4da93ddbb480f844db5bfcee22659850fec5
--- /dev/null
+++ b/test/language/statements/class/fields-after-same-line-static-gen-static-private-fields.js
@@ -0,0 +1,66 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-fields.case
+// - src/class-fields/productions/cls-decl-after-same-line-static-gen.template
+/*---
+description: static private fields (field definitions after a static generator in the same line)
+esid: prod-FieldDefinition
+features: [class-static-fields-private, generators, class, class-fields-public]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+class C {
+  static *m() { return 42; } static #x; static #y;
+  static x() {
+    this.#x = 42;
+    return this.#x;
+  }
+  static y() {
+    this.#y = 43;
+    return this.#y;
+  }
+}
+
+var c = new C();
+
+assert.sameValue(C.m().next().value, 42);
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "m"), false);
+
+verifyProperty(C, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private fields do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#x"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#x"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#y"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#y"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 10");
diff --git a/test/language/statements/class/fields-after-same-line-static-gen-static-private-methods.js b/test/language/statements/class/fields-after-same-line-static-gen-static-private-methods.js
new file mode 100644
index 0000000000000000000000000000000000000000..77a4f80c9a698d28962e43ad960164934a7bc939
--- /dev/null
+++ b/test/language/statements/class/fields-after-same-line-static-gen-static-private-methods.js
@@ -0,0 +1,72 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-methods.case
+// - src/class-fields/productions/cls-decl-after-same-line-static-gen.template
+/*---
+description: static private methods (field definitions after a static generator in the same line)
+esid: prod-FieldDefinition
+features: [class-static-methods-private, generators, class, class-fields-public]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+class C {
+  static *m() { return 42; } static #xVal; static #yVal;
+  static #x(value) {
+    this.#xVal = value;
+    return this.#xVal;
+  }
+  static #y(value) {
+    this.#y = value;
+    return this.#yVal;
+  }
+  static x() {
+    return this.#x(42);
+  }
+  static y() {
+    return this.#y(43);
+  }
+}
+
+var c = new C();
+
+assert.sameValue(C.m().next().value, 42);
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "m"), false);
+
+verifyProperty(C, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private methods do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#xVal"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#xVal"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#yVal"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#yVal"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 10");
diff --git a/test/language/statements/class/fields-after-same-line-static-gen-string-literal-names.js b/test/language/statements/class/fields-after-same-line-static-gen-string-literal-names.js
index 2c602452be9e67f4a5c7ed59b276b68f382b20c3..15c7590c350663da8dd94a299baab9bfa230ea7f 100644
--- a/test/language/statements/class/fields-after-same-line-static-gen-string-literal-names.js
+++ b/test/language/statements/class/fields-after-same-line-static-gen-string-literal-names.js
@@ -24,7 +24,7 @@ info: |
 class C {
   static *m() { return 42; } 'a'; "b"; 'c' = 39;
   "d" = 42;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-after-same-line-static-method-computed-names.js b/test/language/statements/class/fields-after-same-line-static-method-computed-names.js
index 8ee37ce11612c9a29665a93f9738069a32a3131f..94975ef07066092999767af44361d4a47b4d508c 100644
--- a/test/language/statements/class/fields-after-same-line-static-method-computed-names.js
+++ b/test/language/statements/class/fields-after-same-line-static-method-computed-names.js
@@ -25,7 +25,7 @@ var x = "b";
 
 class C {
   static m() { return 42; } [x] = 42; [10] = "meep"; ["not initialized"];
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-after-same-line-static-method-computed-symbol-names.js b/test/language/statements/class/fields-after-same-line-static-method-computed-symbol-names.js
index d66c3d26af69e590f36398f2d09f258d817981dc..81d9a231a47e6952c447884300c346dd395c1f5e 100644
--- a/test/language/statements/class/fields-after-same-line-static-method-computed-symbol-names.js
+++ b/test/language/statements/class/fields-after-same-line-static-method-computed-symbol-names.js
@@ -26,7 +26,7 @@ var y = Symbol();
 
 class C {
   static m() { return 42; } [x]; [y] = 42;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-after-same-line-static-method-literal-names.js b/test/language/statements/class/fields-after-same-line-static-method-literal-names.js
index 6f9ec4a4c7705df533150fce2e619c3b0639d5c9..7a31a87d8b4a2ddc6b07d938da10e567207aaac3 100644
--- a/test/language/statements/class/fields-after-same-line-static-method-literal-names.js
+++ b/test/language/statements/class/fields-after-same-line-static-method-literal-names.js
@@ -26,7 +26,7 @@ const fn = function() {}
 class C {
   static m() { return 42; } a; b = 42;
   c = fn;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-after-same-line-static-method-private-names.js b/test/language/statements/class/fields-after-same-line-static-method-private-names.js
index e270cbe50777a6491b27ad432597418775705785..9f118b185efa453fb65389fc0a5e08b1e1b62b05 100644
--- a/test/language/statements/class/fields-after-same-line-static-method-private-names.js
+++ b/test/language/statements/class/fields-after-same-line-static-method-private-names.js
@@ -2,31 +2,31 @@
 // - src/class-fields/private-names.case
 // - src/class-fields/productions/cls-decl-after-same-line-static-method.template
 /*---
-description: static literal private names (field definitions after a static method in the same line)
+description: private names (field definitions after a static method in the same line)
 esid: prod-FieldDefinition
 features: [class-fields-private, class, class-fields-public]
 flags: [generated]
 includes: [propertyHelper.js]
 info: |
-    ClassElement:
+    ClassElement :
       ...
       FieldDefinition ;
 
-    FieldDefinition:
+    FieldDefinition :
       ClassElementName Initializer_opt
 
-    ClassElementName:
+    ClassElementName :
       PrivateName
 
-    PrivateName:
-      #IdentifierName
+    PrivateName :
+      # IdentifierName
 
 ---*/
 
 
 class C {
   static m() { return 42; } #x; #y;
-x() {
+  x() {
     this.#x = 42;
     return this.#x;
   }
diff --git a/test/language/statements/class/fields-after-same-line-static-method-static-private-fields.js b/test/language/statements/class/fields-after-same-line-static-method-static-private-fields.js
new file mode 100644
index 0000000000000000000000000000000000000000..847fbe5747589ab0064c9556ddc9a2ef97fb9f3a
--- /dev/null
+++ b/test/language/statements/class/fields-after-same-line-static-method-static-private-fields.js
@@ -0,0 +1,66 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-fields.case
+// - src/class-fields/productions/cls-decl-after-same-line-static-method.template
+/*---
+description: static private fields (field definitions after a static method in the same line)
+esid: prod-FieldDefinition
+features: [class-static-fields-private, class, class-fields-public]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+class C {
+  static m() { return 42; } static #x; static #y;
+  static x() {
+    this.#x = 42;
+    return this.#x;
+  }
+  static y() {
+    this.#y = 43;
+    return this.#y;
+  }
+}
+
+var c = new C();
+
+assert.sameValue(C.m(), 42);
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "m"), false);
+
+verifyProperty(C, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private fields do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#x"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#x"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#y"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#y"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 10");
diff --git a/test/language/statements/class/fields-after-same-line-static-method-static-private-methods.js b/test/language/statements/class/fields-after-same-line-static-method-static-private-methods.js
new file mode 100644
index 0000000000000000000000000000000000000000..8c13b7e74f93e9799695f022270b117ba859e0d8
--- /dev/null
+++ b/test/language/statements/class/fields-after-same-line-static-method-static-private-methods.js
@@ -0,0 +1,72 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-methods.case
+// - src/class-fields/productions/cls-decl-after-same-line-static-method.template
+/*---
+description: static private methods (field definitions after a static method in the same line)
+esid: prod-FieldDefinition
+features: [class-static-methods-private, class, class-fields-public]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+class C {
+  static m() { return 42; } static #xVal; static #yVal;
+  static #x(value) {
+    this.#xVal = value;
+    return this.#xVal;
+  }
+  static #y(value) {
+    this.#y = value;
+    return this.#yVal;
+  }
+  static x() {
+    return this.#x(42);
+  }
+  static y() {
+    return this.#y(43);
+  }
+}
+
+var c = new C();
+
+assert.sameValue(C.m(), 42);
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "m"), false);
+
+verifyProperty(C, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private methods do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#xVal"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#xVal"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#yVal"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#yVal"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 10");
diff --git a/test/language/statements/class/fields-after-same-line-static-method-string-literal-names.js b/test/language/statements/class/fields-after-same-line-static-method-string-literal-names.js
index 8c0c9b2a5b5b105e5de79a8cc8a2548157d06c3c..28798be2f6570c9a6807e0f286844c77bfdd5092 100644
--- a/test/language/statements/class/fields-after-same-line-static-method-string-literal-names.js
+++ b/test/language/statements/class/fields-after-same-line-static-method-string-literal-names.js
@@ -24,7 +24,7 @@ info: |
 class C {
   static m() { return 42; } 'a'; "b"; 'c' = 39;
   "d" = 42;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-comp-name-init-err-contains-arguments.js b/test/language/statements/class/fields-comp-name-init-err-contains-arguments.js
new file mode 100644
index 0000000000000000000000000000000000000000..54fe41911188301626b45be7dab1748b3e246dca
--- /dev/null
+++ b/test/language/statements/class/fields-comp-name-init-err-contains-arguments.js
@@ -0,0 +1,35 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/init-err-contains-arguments.case
+// - src/class-fields/initializer-error/cls-decl-fields-comp-name.template
+/*---
+description: Syntax error if `arguments` used in class field (computed ClassElementName)
+esid: sec-class-definitions-static-semantics-early-errors
+features: [class, class-fields-public]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    Static Semantics: Early Errors
+
+      FieldDefinition:
+        PropertyNameInitializeropt
+
+      - It is a Syntax Error if ContainsArguments of Initializer is true.
+
+    Static Semantics: ContainsArguments
+      IdentifierReference : Identifier
+
+      1. If the StringValue of Identifier is "arguments", return true.
+      ...
+      For all other grammatical productions, recurse on all nonterminals. If any piece returns true, then return true. Otherwise return false.
+
+---*/
+
+
+throw "Test262: This statement should not be evaluated.";
+
+var x = "string";
+class C {
+  [x] = arguments;
+}
diff --git a/test/language/statements/class/fields-comp-name-init-err-contains-super.js b/test/language/statements/class/fields-comp-name-init-err-contains-super.js
new file mode 100644
index 0000000000000000000000000000000000000000..96026dddc91061f64c1d270ad8d392aaf2da990f
--- /dev/null
+++ b/test/language/statements/class/fields-comp-name-init-err-contains-super.js
@@ -0,0 +1,28 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/init-err-contains-super.case
+// - src/class-fields/initializer-error/cls-decl-fields-comp-name.template
+/*---
+description: Syntax error if `super()` used in class field (computed ClassElementName)
+esid: sec-class-definitions-static-semantics-early-errors
+features: [class, class-fields-public]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    Static Semantics: Early Errors
+
+      FieldDefinition:
+        PropertyNameInitializeropt
+
+      - It is a Syntax Error if Initializer is present and Initializer Contains SuperCall is true.
+
+---*/
+
+
+throw "Test262: This statement should not be evaluated.";
+
+var x = "string";
+class C {
+  [x] = super();
+}
diff --git a/test/language/statements/class/fields-computed-name-toprimitive-symbol.js b/test/language/statements/class/fields-computed-name-toprimitive-symbol.js
index 5c9639bc9ecf2fb9938ac18fb0451d874304711d..88184500177f2a1a5b17f983b20710cd5bb044fe 100644
--- a/test/language/statements/class/fields-computed-name-toprimitive-symbol.js
+++ b/test/language/statements/class/fields-computed-name-toprimitive-symbol.js
@@ -4,7 +4,7 @@
 /*---
 description: ToPrimitive evaluation in the ComputedPropertyName (field definitions in a class declaration)
 esid: prod-FieldDefinition
-features: [computed-property-names, Symbol.toPrimitive, Symbol, class, class-fields-public]
+features: [computed-property-names, Symbol.toPrimitive, Symbol, class]
 flags: [generated]
 includes: [propertyHelper.js]
 info: |
diff --git a/test/language/statements/class/fields-computed-name-toprimitive.js b/test/language/statements/class/fields-computed-name-toprimitive.js
index 518f1f164df22a4e3e23980fc9bdcec79d32891a..c986cd012dbaba524df5c88fe90340b6a34c60af 100644
--- a/test/language/statements/class/fields-computed-name-toprimitive.js
+++ b/test/language/statements/class/fields-computed-name-toprimitive.js
@@ -4,7 +4,7 @@
 /*---
 description: ToPrimitive evaluation in the ComputedPropertyName (field definitions in a class declaration)
 esid: prod-FieldDefinition
-features: [computed-property-names, Symbol.toPrimitive, class, class-fields-public]
+features: [computed-property-names, Symbol.toPrimitive, class]
 flags: [generated]
 includes: [propertyHelper.js]
 info: |
diff --git a/test/language/statements/class/fields-computed-variable-name-propname-constructor.js b/test/language/statements/class/fields-computed-variable-name-propname-constructor.js
deleted file mode 100644
index 2b7aa5a78e494ed10ef0bce56c992e2cdc3b91b6..0000000000000000000000000000000000000000
--- a/test/language/statements/class/fields-computed-variable-name-propname-constructor.js
+++ /dev/null
@@ -1,33 +0,0 @@
-// This file was procedurally generated from the following sources:
-// - src/class-fields/propname-constructor.case
-// - src/class-fields/propname-error/cls-decl-variable-name.template
-/*---
-description: class fields forbid PropName 'constructor' (no early error -- PropName of ComputedPropertyName not forbidden value)
-esid: sec-class-definitions-static-semantics-early-errors
-features: [class, class-fields-public]
-flags: [generated]
-info: |
-    Static Semantics: PropName
-    ...
-    ComputedPropertyName : [ AssignmentExpression ]
-      Return empty.
-
-    
-    // This test file tests the following early error:
-    Static Semantics: Early Errors
-
-      ClassElement : FieldDefinition;
-        It is a Syntax Error if PropName of FieldDefinition is "constructor".
-
----*/
-
-
-var constructor = 'foo';
-class C {
-  [constructor];
-}
-
-var c = new C();
-
-assert.sameValue(c.hasOwnProperty("foo"), true);
-assert.sameValue(C.hasOwnProperty("foo"), false);
diff --git a/test/language/statements/class/fields-ctor-called-after-fields-init.js b/test/language/statements/class/fields-ctor-called-after-fields-init.js
index e9c44bb1bbe6e2a0644c7be858e4418bd42f1b2b..9633a3bbd8e409c8c7df4f874e586dc1af8776ad 100644
--- a/test/language/statements/class/fields-ctor-called-after-fields-init.js
+++ b/test/language/statements/class/fields-ctor-called-after-fields-init.js
@@ -4,7 +4,7 @@
 /*---
 description: The constructor method is called after the fields are initalized (field definitions in a class declaration)
 esid: prod-FieldDefinition
-features: [class, class-fields-public]
+features: [class]
 flags: [generated]
 info: |
     [[Construct]] ( argumentsList, newTarget)
diff --git a/test/language/statements/class/fields-derived-cls-direct-eval-err-contains-supercall-1.js b/test/language/statements/class/fields-derived-cls-direct-eval-err-contains-supercall-1.js
index ec3eae5459f5b5240607c8a3b90bb312e285e9b8..7520e6546fdf2d64d2a54700a616fe717ec630b1 100644
--- a/test/language/statements/class/fields-derived-cls-direct-eval-err-contains-supercall-1.js
+++ b/test/language/statements/class/fields-derived-cls-direct-eval-err-contains-supercall-1.js
@@ -23,9 +23,8 @@ info: |
 ---*/
 
 
-class A {}
-
 var executed = false;
+class A {}
 class C extends A {
   x = eval('executed = true; super()["x"];');
 }
diff --git a/test/language/statements/class/fields-derived-cls-direct-eval-err-contains-supercall-2.js b/test/language/statements/class/fields-derived-cls-direct-eval-err-contains-supercall-2.js
index bd7c9757e33197efa5694f887208e7468480b919..75612496c56815165db23f23ec2742368aaad5d9 100644
--- a/test/language/statements/class/fields-derived-cls-direct-eval-err-contains-supercall-2.js
+++ b/test/language/statements/class/fields-derived-cls-direct-eval-err-contains-supercall-2.js
@@ -7,13 +7,6 @@ esid: sec-performeval-rules-in-initializer
 features: [class, class-fields-public]
 flags: [generated]
 info: |
-    Additional Early Error Rules for Eval Inside Initializer
-    These static semantics are applied by PerformEval when a direct eval call occurs inside a class field initializer.
-    ScriptBody : StatementList
-
-      ...
-      The remaining eval rules apply as outside a constructor, inside a method, and inside a function.
-
     Additional Early Error Rules for Eval Outside Constructor Methods
     These static semantics are applied by PerformEval when a direct eval call occurs outside of the constructor method of a ClassDeclaration or ClassExpression.
     ScriptBody:StatementList
@@ -23,9 +16,8 @@ info: |
 ---*/
 
 
-class A {}
-
 var executed = false;
+class A {}
 class C extends A {
   x = eval('executed = true; super().x;');
 }
diff --git a/test/language/statements/class/fields-derived-cls-direct-eval-err-contains-supercall.js b/test/language/statements/class/fields-derived-cls-direct-eval-err-contains-supercall.js
index 3e988d94feacbaee3e848704229221e53f9e218e..c5f63012a8cf68f156ee88ce1743f60276b51bfe 100644
--- a/test/language/statements/class/fields-derived-cls-direct-eval-err-contains-supercall.js
+++ b/test/language/statements/class/fields-derived-cls-direct-eval-err-contains-supercall.js
@@ -23,9 +23,8 @@ info: |
 ---*/
 
 
-class A {}
-
 var executed = false;
+class A {}
 class C extends A {
   x = eval('executed = true; super();');
 }
diff --git a/test/language/statements/class/fields-derived-cls-direct-eval-err-contains-superproperty-1.js b/test/language/statements/class/fields-derived-cls-direct-eval-err-contains-superproperty-1.js
index 7f3963b1f48d17549970e00aee512023cda4d70f..ca04c448dc9c2d6004d80bee0b7af202938b3a56 100644
--- a/test/language/statements/class/fields-derived-cls-direct-eval-err-contains-superproperty-1.js
+++ b/test/language/statements/class/fields-derived-cls-direct-eval-err-contains-superproperty-1.js
@@ -23,9 +23,8 @@ info: |
 ---*/
 
 
-class A {}
-
 var executed = false;
+class A {}
 class C extends A {
   x = eval('executed = true; super.x;');
 }
diff --git a/test/language/statements/class/fields-derived-cls-direct-eval-err-contains-superproperty-2.js b/test/language/statements/class/fields-derived-cls-direct-eval-err-contains-superproperty-2.js
index b6df495eb2d73c6547d51e13660dad9eaa0b7683..be58a467748297cd1d627ed6776bbddbb9a19a6e 100644
--- a/test/language/statements/class/fields-derived-cls-direct-eval-err-contains-superproperty-2.js
+++ b/test/language/statements/class/fields-derived-cls-direct-eval-err-contains-superproperty-2.js
@@ -2,30 +2,26 @@
 // - src/class-fields/eval-err-contains-superproperty-2.case
 // - src/class-fields/initializer-eval-super-property/cls-decl-fields-eval.template
 /*---
-description: error if `super['x']` in StatementList of eval (direct eval)
+description: error if super['x'] in StatementList of eval (direct eval)
 esid: sec-performeval-rules-in-initializer
 features: [class, class-fields-public]
 flags: [generated]
 info: |
-    Additional Early Error Rules for Eval Inside Initializer
-    These static semantics are applied by PerformEval when a direct eval call occurs inside a class field initializer.
-    ScriptBody : StatementList
-
-      ...
-      The remaining eval rules apply as outside a constructor, inside a method, and inside a function.
+    The remaining eval rules apply as outside a constructor, inside a method, and inside a function.
 
     Additional Early Error Rules for Eval Outside Methods
-    These static semantics are applied by PerformEval when a direct eval call occurs outside of a MethodDefinition.
-    ScriptBody:StatementList
+
+      These static semantics are applied by PerformEval when a direct eval call occurs outside of a MethodDefinition.
+
+      ScriptBody : StatementList
 
       It is a Syntax Error if StatementList Contains SuperProperty.
 
 ---*/
 
 
-class A {}
-
 var executed = false;
+class A {}
 class C extends A {
   x = eval('executed = true; super["x"];');
 }
diff --git a/test/language/statements/class/fields-derived-cls-indirect-eval-err-contains-supercall-1.js b/test/language/statements/class/fields-derived-cls-indirect-eval-err-contains-supercall-1.js
index 16b468837be238efe7fc89bc05918f2cde4a2af7..7ee11c41d4ec573445d292399170cffca2b81f90 100644
--- a/test/language/statements/class/fields-derived-cls-indirect-eval-err-contains-supercall-1.js
+++ b/test/language/statements/class/fields-derived-cls-indirect-eval-err-contains-supercall-1.js
@@ -1,6 +1,6 @@
 // This file was procedurally generated from the following sources:
 // - src/class-fields/eval-err-contains-supercall-1.case
-// - src/class-fields/initializer-eval-super-call/cls-decl-fields-indirect-eval.template
+// - src/class-fields/initializer-eval-super-call/cls-decl-private-fields-indirect-eval.template
 /*---
 description: error if `super()['x']` in StatementList of eval (indirect eval)
 esid: sec-performeval-rules-in-initializer
@@ -23,11 +23,10 @@ info: |
 ---*/
 
 
-class A {}
-
 var executed = false;
+class A {}
 class C extends A {
-  x = (0, eval)('executed = true; super()["x"];');
+  #x = (0, eval)('executed = true; super()["x"];');
 }
 
 assert.throws(SyntaxError, function() {
diff --git a/test/language/statements/class/fields-derived-cls-indirect-eval-err-contains-supercall-2.js b/test/language/statements/class/fields-derived-cls-indirect-eval-err-contains-supercall-2.js
index b7492996cdce0615c6d02b68875a66524c121bbf..9de84949fd7bcd033985541cf87b559d3a2a832b 100644
--- a/test/language/statements/class/fields-derived-cls-indirect-eval-err-contains-supercall-2.js
+++ b/test/language/statements/class/fields-derived-cls-indirect-eval-err-contains-supercall-2.js
@@ -1,19 +1,12 @@
 // This file was procedurally generated from the following sources:
 // - src/class-fields/eval-err-contains-supercall-2.case
-// - src/class-fields/initializer-eval-super-call/cls-decl-fields-indirect-eval.template
+// - src/class-fields/initializer-eval-super-call/cls-decl-private-fields-indirect-eval.template
 /*---
 description: error if `super().x` in StatementList of eval (indirect eval)
 esid: sec-performeval-rules-in-initializer
 features: [class, class-fields-public]
 flags: [generated]
 info: |
-    Additional Early Error Rules for Eval Inside Initializer
-    These static semantics are applied by PerformEval when a direct eval call occurs inside a class field initializer.
-    ScriptBody : StatementList
-
-      ...
-      The remaining eval rules apply as outside a constructor, inside a method, and inside a function.
-
     Additional Early Error Rules for Eval Outside Constructor Methods
     These static semantics are applied by PerformEval when a direct eval call occurs outside of the constructor method of a ClassDeclaration or ClassExpression.
     ScriptBody:StatementList
@@ -23,11 +16,10 @@ info: |
 ---*/
 
 
-class A {}
-
 var executed = false;
+class A {}
 class C extends A {
-  x = (0, eval)('executed = true; super().x;');
+  #x = (0, eval)('executed = true; super().x;');
 }
 
 assert.throws(SyntaxError, function() {
diff --git a/test/language/statements/class/fields-derived-cls-indirect-eval-err-contains-supercall.js b/test/language/statements/class/fields-derived-cls-indirect-eval-err-contains-supercall.js
index d3554fe95405319e7d7b57f72a702be573f35a69..1ba08ba625317f1d6adf6e6799ee97ad05345765 100644
--- a/test/language/statements/class/fields-derived-cls-indirect-eval-err-contains-supercall.js
+++ b/test/language/statements/class/fields-derived-cls-indirect-eval-err-contains-supercall.js
@@ -1,6 +1,6 @@
 // This file was procedurally generated from the following sources:
 // - src/class-fields/eval-err-contains-supercall.case
-// - src/class-fields/initializer-eval-super-call/cls-decl-fields-indirect-eval.template
+// - src/class-fields/initializer-eval-super-call/cls-decl-private-fields-indirect-eval.template
 /*---
 description: error if `super()` in StatementList of eval (indirect eval)
 esid: sec-performeval-rules-in-initializer
@@ -23,11 +23,10 @@ info: |
 ---*/
 
 
-class A {}
-
 var executed = false;
+class A {}
 class C extends A {
-  x = (0, eval)('executed = true; super();');
+  #x = (0, eval)('executed = true; super();');
 }
 
 assert.throws(SyntaxError, function() {
diff --git a/test/language/statements/class/fields-derived-cls-indirect-eval-err-contains-superproperty-1.js b/test/language/statements/class/fields-derived-cls-indirect-eval-err-contains-superproperty-1.js
index e71f434467a29433eeb108f31abb47fb7b037b97..c2520d741691e4eadf6bf8ac815c4b382e4bcbd2 100644
--- a/test/language/statements/class/fields-derived-cls-indirect-eval-err-contains-superproperty-1.js
+++ b/test/language/statements/class/fields-derived-cls-indirect-eval-err-contains-superproperty-1.js
@@ -1,6 +1,6 @@
 // This file was procedurally generated from the following sources:
 // - src/class-fields/eval-err-contains-superproperty-1.case
-// - src/class-fields/initializer-eval-super-property/cls-decl-fields-indirect-eval.template
+// - src/class-fields/initializer-eval-super-property/cls-decl-private-fields-indirect-eval.template
 /*---
 description: error if `super.x` in StatementList of eval (indirect eval)
 esid: sec-performeval-rules-in-initializer
@@ -23,11 +23,10 @@ info: |
 ---*/
 
 
-class A {}
-
 var executed = false;
+class A {}
 class C extends A {
-  x = (0, eval)('executed = true; super.x;');
+  #x = (0, eval)('executed = true; super.x;');
 }
 
 assert.throws(SyntaxError, function() {
diff --git a/test/language/statements/class/fields-derived-cls-indirect-eval-err-contains-superproperty-2.js b/test/language/statements/class/fields-derived-cls-indirect-eval-err-contains-superproperty-2.js
index ee79439a6849d17109453e3c4bee3f54425f38b1..2ed9f8c6a1a158ba01c4737a942c0f75842dc8cd 100644
--- a/test/language/statements/class/fields-derived-cls-indirect-eval-err-contains-superproperty-2.js
+++ b/test/language/statements/class/fields-derived-cls-indirect-eval-err-contains-superproperty-2.js
@@ -1,33 +1,29 @@
 // This file was procedurally generated from the following sources:
 // - src/class-fields/eval-err-contains-superproperty-2.case
-// - src/class-fields/initializer-eval-super-property/cls-decl-fields-indirect-eval.template
+// - src/class-fields/initializer-eval-super-property/cls-decl-private-fields-indirect-eval.template
 /*---
-description: error if `super['x']` in StatementList of eval (indirect eval)
+description: error if super['x'] in StatementList of eval (indirect eval)
 esid: sec-performeval-rules-in-initializer
 features: [class, class-fields-public]
 flags: [generated]
 info: |
-    Additional Early Error Rules for Eval Inside Initializer
-    These static semantics are applied by PerformEval when a direct eval call occurs inside a class field initializer.
-    ScriptBody : StatementList
-
-      ...
-      The remaining eval rules apply as outside a constructor, inside a method, and inside a function.
+    The remaining eval rules apply as outside a constructor, inside a method, and inside a function.
 
     Additional Early Error Rules for Eval Outside Methods
-    These static semantics are applied by PerformEval when a direct eval call occurs outside of a MethodDefinition.
-    ScriptBody:StatementList
+
+      These static semantics are applied by PerformEval when a direct eval call occurs outside of a MethodDefinition.
+
+      ScriptBody : StatementList
 
       It is a Syntax Error if StatementList Contains SuperProperty.
 
 ---*/
 
 
-class A {}
-
 var executed = false;
+class A {}
 class C extends A {
-  x = (0, eval)('executed = true; super["x"];');
+  #x = (0, eval)('executed = true; super["x"];');
 }
 
 assert.throws(SyntaxError, function() {
diff --git a/test/language/statements/class/fields-direct-eval-err-contains-newtarget.js b/test/language/statements/class/fields-direct-eval-err-contains-newtarget.js
index e24b3848785051551f5acb5811756e21b0f8bcdb..d0768c666da7628cf4710a40d34aa0dbabc475aa 100644
--- a/test/language/statements/class/fields-direct-eval-err-contains-newtarget.js
+++ b/test/language/statements/class/fields-direct-eval-err-contains-newtarget.js
@@ -4,7 +4,7 @@
 /*---
 description: error if `new.target` in StatementList of eval (direct eval)
 esid: sec-performeval-rules-in-initializer
-features: [class, class-fields-public, new.target]
+features: [class, new.target, class-fields-public]
 flags: [generated]
 info: |
     Additional Early Error Rules for Eval Inside Initializer
diff --git a/test/language/statements/class/fields-evaluation-error-computed-name-referenceerror.js b/test/language/statements/class/fields-evaluation-error-computed-name-referenceerror.js
index 505de6f4b9b5ee373e2d0066109229ba8c57993f..c0771fa335a8ae635cc253eb61d987ca6e5144ed 100644
--- a/test/language/statements/class/fields-evaluation-error-computed-name-referenceerror.js
+++ b/test/language/statements/class/fields-evaluation-error-computed-name-referenceerror.js
@@ -4,7 +4,7 @@
 /*---
 description: ReferenceError evaluating a computed property name (field definitions in a class declaration)
 esid: sec-runtime-semantics-classdefinitionevaluation
-features: [computed-property-names, class, class-fields-public]
+features: [computed-property-names, class]
 flags: [generated]
 info: |
     Runtime Semantics: ClassDefinitionEvaluation
diff --git a/test/language/statements/class/fields-evaluation-error-computed-name-toprimitive-err.js b/test/language/statements/class/fields-evaluation-error-computed-name-toprimitive-err.js
index 77579a2f60f6aed9bea9bffd3862a51afc3003f8..f3b1fa0312fefcd4ca07d27c0cbfe76a4a98d692 100644
--- a/test/language/statements/class/fields-evaluation-error-computed-name-toprimitive-err.js
+++ b/test/language/statements/class/fields-evaluation-error-computed-name-toprimitive-err.js
@@ -4,7 +4,7 @@
 /*---
 description: Custom error evaluating a computed property name (field definitions in a class declaration)
 esid: sec-runtime-semantics-classdefinitionevaluation
-features: [computed-property-names, Symbol.toPrimitive, class, class-fields-public]
+features: [computed-property-names, Symbol.toPrimitive, class]
 flags: [generated]
 info: |
     Runtime Semantics: ClassDefinitionEvaluation
diff --git a/test/language/statements/class/fields-evaluation-error-computed-name-toprimitive-returns-noncallable.js b/test/language/statements/class/fields-evaluation-error-computed-name-toprimitive-returns-noncallable.js
new file mode 100644
index 0000000000000000000000000000000000000000..8f5b5d5b16ac678a1f15cbfa4e4c4f5e628fb921
--- /dev/null
+++ b/test/language/statements/class/fields-evaluation-error-computed-name-toprimitive-returns-noncallable.js
@@ -0,0 +1,57 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/computed-name-toprimitive-returns-noncallable.case
+// - src/class-fields/class-evaluation-error/cls-decl.template
+/*---
+description: Custom error evaluating a computed property name (field definitions in a class declaration)
+esid: sec-runtime-semantics-classdefinitionevaluation
+features: [computed-property-names, Symbol.toPrimitive, class]
+flags: [generated]
+info: |
+    Runtime Semantics: ClassDefinitionEvaluation
+
+    ...
+    27. For each ClassElement e in order from elements
+      a. If IsStatic of me is false, then
+        i. Let fields be the result of performing ClassElementEvaluation for e with arguments proto and false.
+      b. Else,
+        i. Let fields be the result of performing ClassElementEvaluation for e with arguments F and false.
+      c. If fields is an abrupt completion, then
+        i. Set the running execution context's LexicalEnvironment to lex.
+        ii. Set the running execution context's PrivateNameEnvironment to outerPrivateEnvironment.
+        iii. Return Completion(status).
+    ...
+
+    Runtime Semantics: ClassElementEvaluation
+
+    ClassElement: FieldDefinition;
+      Return ClassFieldDefinitionEvaluation of FieldDefinition with parameter false and object.
+
+    Runtime Semantics: ClassFieldDefinitionEvaluation
+      With parameters isStatic and homeObject.
+
+    1. Let fieldName be the result of evaluating ClassElementName.
+    2. ReturnIfAbrupt(fieldName).
+    ...
+
+    Runtime Semantics: Evaluation
+      ComputedPropertyName: [ AssignmentExpression ]
+
+    1. Let exprValue be the result of evaluating AssignmentExpression.
+    2. Let propName be ? GetValue(exprValue).
+    3. Return ? ToPropertyKey(propName).
+
+---*/
+var obj = {
+  [Symbol.toPrimitive]: {}
+};
+
+
+
+function evaluate() {
+  class C {
+    [obj] = refErrorIfEvaluated;
+  }
+}
+
+assert.throws(TypeError
+, evaluate);
diff --git a/test/language/statements/class/fields-evaluation-error-computed-name-toprimitive-returns-nonobject.js b/test/language/statements/class/fields-evaluation-error-computed-name-toprimitive-returns-nonobject.js
new file mode 100644
index 0000000000000000000000000000000000000000..de9c94b7de92e0a0e9a15ac1f23876cdeddd5c2f
--- /dev/null
+++ b/test/language/statements/class/fields-evaluation-error-computed-name-toprimitive-returns-nonobject.js
@@ -0,0 +1,56 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/computed-name-toprimitive-returns-nonobject.case
+// - src/class-fields/class-evaluation-error/cls-decl.template
+/*---
+description: Custom error evaluating a computed property name (field definitions in a class declaration)
+esid: sec-runtime-semantics-classdefinitionevaluation
+features: [computed-property-names, Symbol.toPrimitive, class]
+flags: [generated]
+info: |
+    Runtime Semantics: ClassDefinitionEvaluation
+
+    ...
+    27. For each ClassElement e in order from elements
+      a. If IsStatic of me is false, then
+        i. Let fields be the result of performing ClassElementEvaluation for e with arguments proto and false.
+      b. Else,
+        i. Let fields be the result of performing ClassElementEvaluation for e with arguments F and false.
+      c. If fields is an abrupt completion, then
+        i. Set the running execution context's LexicalEnvironment to lex.
+        ii. Set the running execution context's PrivateNameEnvironment to outerPrivateEnvironment.
+        iii. Return Completion(status).
+    ...
+
+    Runtime Semantics: ClassElementEvaluation
+
+    ClassElement: FieldDefinition;
+      Return ClassFieldDefinitionEvaluation of FieldDefinition with parameter false and object.
+
+    Runtime Semantics: ClassFieldDefinitionEvaluation
+      With parameters isStatic and homeObject.
+
+    1. Let fieldName be the result of evaluating ClassElementName.
+    2. ReturnIfAbrupt(fieldName).
+    ...
+
+    Runtime Semantics: Evaluation
+      ComputedPropertyName: [ AssignmentExpression ]
+
+    1. Let exprValue be the result of evaluating AssignmentExpression.
+    2. Let propName be ? GetValue(exprValue).
+    3. Return ? ToPropertyKey(propName).
+
+---*/
+var obj = {
+  [Symbol.toPrimitive]: 42
+};
+
+
+
+function evaluate() {
+  class C {
+    [obj] = refErrorIfEvaluated;
+  }
+}
+
+assert.throws(TypeError, evaluate);
diff --git a/test/language/statements/class/fields-evaluation-error-computed-name-tostring-err.js b/test/language/statements/class/fields-evaluation-error-computed-name-tostring-err.js
index 2edbc79dbe89655ef08aca1e468d92b3bb5cece8..1390e7639e292712ba087062a4dc06e924870c66 100644
--- a/test/language/statements/class/fields-evaluation-error-computed-name-tostring-err.js
+++ b/test/language/statements/class/fields-evaluation-error-computed-name-tostring-err.js
@@ -4,7 +4,7 @@
 /*---
 description: Custom error evaluating a computed property name (field definitions in a class declaration)
 esid: sec-runtime-semantics-classdefinitionevaluation
-features: [computed-property-names, class, class-fields-public]
+features: [computed-property-names, class]
 flags: [generated]
 info: |
     Runtime Semantics: ClassDefinitionEvaluation
diff --git a/test/language/statements/class/fields-evaluation-error-computed-name-valueof-err.js b/test/language/statements/class/fields-evaluation-error-computed-name-valueof-err.js
index b056fb488ea2eed195a3cf69bddf5758cf845881..86d37c3dda6f685e0d48958b9a12ce05fac37b19 100644
--- a/test/language/statements/class/fields-evaluation-error-computed-name-valueof-err.js
+++ b/test/language/statements/class/fields-evaluation-error-computed-name-valueof-err.js
@@ -4,7 +4,7 @@
 /*---
 description: Custom error evaluating a computed property name (field definitions in a class declaration)
 esid: sec-runtime-semantics-classdefinitionevaluation
-features: [computed-property-names, class, class-fields-public]
+features: [computed-property-names, class]
 flags: [generated]
 info: |
     Runtime Semantics: ClassDefinitionEvaluation
diff --git a/test/language/statements/class/fields-indirect-eval-err-contains-newtarget.js b/test/language/statements/class/fields-indirect-eval-err-contains-newtarget.js
index fb408f497d793c672f21cf8665f88228239209ba..3296a5902e8438b5a83e1dd3dd7a83ffa529edec 100644
--- a/test/language/statements/class/fields-indirect-eval-err-contains-newtarget.js
+++ b/test/language/statements/class/fields-indirect-eval-err-contains-newtarget.js
@@ -4,7 +4,7 @@
 /*---
 description: error if `new.target` in StatementList of eval (indirect eval)
 esid: sec-performeval-rules-in-initializer
-features: [class, class-fields-public, new.target]
+features: [class, new.target, class-fields-public]
 flags: [generated]
 info: |
     Additional Early Error Rules for Eval Inside Initializer
diff --git a/test/language/statements/class/fields-init-err-evaluation.js b/test/language/statements/class/fields-init-err-evaluation.js
index 67c9b0200bd7bbfaa6f8b481daaca1c2fe582de0..96eaebeb9aee3d67e0daf74abb53b8ff7260622b 100644
--- a/test/language/statements/class/fields-init-err-evaluation.js
+++ b/test/language/statements/class/fields-init-err-evaluation.js
@@ -4,7 +4,7 @@
 /*---
 description: Return abrupt completion evaluating the field initializer (field definitions in a class declaration)
 esid: prod-FieldDefinition
-features: [class, class-fields-public]
+features: [class]
 flags: [generated]
 info: |
     [[Construct]] ( argumentsList, newTarget)
diff --git a/test/language/statements/class/fields-init-value-defined-after-class.js b/test/language/statements/class/fields-init-value-defined-after-class.js
index 8c8eac3a268855bf7c10fd10fed9849e64f30e1a..4555de6efce79004bae3c3f834707e6810a908bf 100644
--- a/test/language/statements/class/fields-init-value-defined-after-class.js
+++ b/test/language/statements/class/fields-init-value-defined-after-class.js
@@ -4,7 +4,7 @@
 /*---
 description: The initializer value is defined after the class evaluation (field definitions in a class declaration)
 esid: prod-FieldDefinition
-features: [computed-property-names, class, class-fields-public]
+features: [computed-property-names, class]
 flags: [generated]
 includes: [propertyHelper.js]
 info: |
diff --git a/test/language/statements/class/fields-init-value-incremental.js b/test/language/statements/class/fields-init-value-incremental.js
index 24d5eb3b6f52d21ec4f44ac178641b1e0473c201..efbb8034803eefe73a2d745ca790c5f1e610000a 100644
--- a/test/language/statements/class/fields-init-value-incremental.js
+++ b/test/language/statements/class/fields-init-value-incremental.js
@@ -4,7 +4,7 @@
 /*---
 description: The initializer value is defined during the class instatiation (field definitions in a class declaration)
 esid: prod-FieldDefinition
-features: [computed-property-names, class, class-fields-public]
+features: [computed-property-names, class]
 flags: [generated]
 includes: [propertyHelper.js]
 info: |
diff --git a/test/language/statements/class/fields-multiple-definitions-computed-names.js b/test/language/statements/class/fields-multiple-definitions-computed-names.js
index b6d3cfb14f91036892950f678a3e3dc12db7b68b..dd750df16cae1e30fef2cbb252f15a1c649a4325 100644
--- a/test/language/statements/class/fields-multiple-definitions-computed-names.js
+++ b/test/language/statements/class/fields-multiple-definitions-computed-names.js
@@ -29,7 +29,7 @@ class C {
   [x] = 42; [10] = "meep"; ["not initialized"]
   m2() { return 39 }
   bar = "barbaz";
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-multiple-definitions-computed-symbol-names.js b/test/language/statements/class/fields-multiple-definitions-computed-symbol-names.js
index 813aac64b2759662500f1669e48914c30e4e62c6..1ff9fb2327f7c89c77265cf818ebea4962f76b65 100644
--- a/test/language/statements/class/fields-multiple-definitions-computed-symbol-names.js
+++ b/test/language/statements/class/fields-multiple-definitions-computed-symbol-names.js
@@ -30,7 +30,7 @@ class C {
   [x]; [y] = 42
   m2() { return 39 }
   bar = "barbaz";
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-multiple-definitions-literal-names.js b/test/language/statements/class/fields-multiple-definitions-literal-names.js
index 63d8ad694cf962410453521eca6f795c332675e9..b80d396c392fd383fb97b2b839158c3372d3e814 100644
--- a/test/language/statements/class/fields-multiple-definitions-literal-names.js
+++ b/test/language/statements/class/fields-multiple-definitions-literal-names.js
@@ -30,7 +30,7 @@ class C {
   c = fn
   m2() { return 39 }
   bar = "barbaz";
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-multiple-definitions-private-names.js b/test/language/statements/class/fields-multiple-definitions-private-names.js
index 6ea8e962786288af2afef72ca6abe6b992510f09..e0e0a3c3b24b5f52346f9501da435325ee1e547d 100644
--- a/test/language/statements/class/fields-multiple-definitions-private-names.js
+++ b/test/language/statements/class/fields-multiple-definitions-private-names.js
@@ -2,24 +2,24 @@
 // - src/class-fields/private-names.case
 // - src/class-fields/productions/cls-decl-multiple-definitions.template
 /*---
-description: static literal private names (multiple fields definitions)
+description: private names (multiple fields definitions)
 esid: prod-FieldDefinition
 features: [class-fields-private, class, class-fields-public]
 flags: [generated]
 includes: [propertyHelper.js]
 info: |
-    ClassElement:
+    ClassElement :
       ...
       FieldDefinition ;
 
-    FieldDefinition:
+    FieldDefinition :
       ClassElementName Initializer_opt
 
-    ClassElementName:
+    ClassElementName :
       PrivateName
 
-    PrivateName:
-      #IdentifierName
+    PrivateName :
+      # IdentifierName
 
 ---*/
 
@@ -30,7 +30,7 @@ class C {
   #x; #y
   m2() { return 39 }
   bar = "barbaz";
-x() {
+  x() {
     this.#x = 42;
     return this.#x;
   }
diff --git a/test/language/statements/class/fields-multiple-definitions-static-private-fields.js b/test/language/statements/class/fields-multiple-definitions-static-private-fields.js
new file mode 100644
index 0000000000000000000000000000000000000000..d257631dde001d7a9a2ecb8c541287d7953d4ada
--- /dev/null
+++ b/test/language/statements/class/fields-multiple-definitions-static-private-fields.js
@@ -0,0 +1,102 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-fields.case
+// - src/class-fields/productions/cls-decl-multiple-definitions.template
+/*---
+description: static private fields (multiple fields definitions)
+esid: prod-FieldDefinition
+features: [class-static-fields-private, class, class-fields-public]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+class C {
+  foo = "foobar";
+  m() { return 42 }
+  static #x; static #y
+  m2() { return 39 }
+  bar = "barbaz";
+  static x() {
+    this.#x = 42;
+    return this.#x;
+  }
+  static y() {
+    this.#y = 43;
+    return this.#y;
+  }
+}
+
+var c = new C();
+
+assert.sameValue(c.m(), 42);
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+assert.sameValue(c.m, C.prototype.m);
+
+verifyProperty(C.prototype, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+assert.sameValue(c.m2(), 39);
+assert.sameValue(Object.hasOwnProperty.call(c, "m2"), false);
+assert.sameValue(c.m2, C.prototype.m2);
+
+verifyProperty(C.prototype, "m2", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+assert.sameValue(c.foo, "foobar");
+assert.sameValue(Object.hasOwnProperty.call(C, "foo"), false);
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "foo"), false);
+
+verifyProperty(c, "foo", {
+  value: "foobar",
+  enumerable: true,
+  configurable: true,
+  writable: true,
+});
+
+assert.sameValue(c.bar, "barbaz");
+assert.sameValue(Object.hasOwnProperty.call(C, "bar"), false);
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "bar"), false);
+
+verifyProperty(c, "bar", {
+  value: "barbaz",
+  enumerable: true,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private fields do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#x"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#x"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#y"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#y"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 10");
diff --git a/test/language/statements/class/fields-multiple-definitions-static-private-methods.js b/test/language/statements/class/fields-multiple-definitions-static-private-methods.js
new file mode 100644
index 0000000000000000000000000000000000000000..df86d9893d65901e8d7332d715e2c11f7ac26fc4
--- /dev/null
+++ b/test/language/statements/class/fields-multiple-definitions-static-private-methods.js
@@ -0,0 +1,108 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-methods.case
+// - src/class-fields/productions/cls-decl-multiple-definitions.template
+/*---
+description: static private methods (multiple fields definitions)
+esid: prod-FieldDefinition
+features: [class-static-methods-private, class, class-fields-public]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+class C {
+  foo = "foobar";
+  m() { return 42 }
+  static #xVal; static #yVal
+  m2() { return 39 }
+  bar = "barbaz";
+  static #x(value) {
+    this.#xVal = value;
+    return this.#xVal;
+  }
+  static #y(value) {
+    this.#y = value;
+    return this.#yVal;
+  }
+  static x() {
+    return this.#x(42);
+  }
+  static y() {
+    return this.#y(43);
+  }
+}
+
+var c = new C();
+
+assert.sameValue(c.m(), 42);
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+assert.sameValue(c.m, C.prototype.m);
+
+verifyProperty(C.prototype, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+assert.sameValue(c.m2(), 39);
+assert.sameValue(Object.hasOwnProperty.call(c, "m2"), false);
+assert.sameValue(c.m2, C.prototype.m2);
+
+verifyProperty(C.prototype, "m2", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+assert.sameValue(c.foo, "foobar");
+assert.sameValue(Object.hasOwnProperty.call(C, "foo"), false);
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "foo"), false);
+
+verifyProperty(c, "foo", {
+  value: "foobar",
+  enumerable: true,
+  configurable: true,
+  writable: true,
+});
+
+assert.sameValue(c.bar, "barbaz");
+assert.sameValue(Object.hasOwnProperty.call(C, "bar"), false);
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "bar"), false);
+
+verifyProperty(c, "bar", {
+  value: "barbaz",
+  enumerable: true,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private methods do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#xVal"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#xVal"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#yVal"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#yVal"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 10");
diff --git a/test/language/statements/class/fields-multiple-definitions-string-literal-names.js b/test/language/statements/class/fields-multiple-definitions-string-literal-names.js
index 8ce2d2fd051b67ebf83e4e4f9b6263df1d13c64a..cc297096e4163e6fb2431dbda99418e6d8d5962e 100644
--- a/test/language/statements/class/fields-multiple-definitions-string-literal-names.js
+++ b/test/language/statements/class/fields-multiple-definitions-string-literal-names.js
@@ -28,7 +28,7 @@ class C {
   "d" = 42
   m2() { return 39 }
   bar = "barbaz";
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-multiple-stacked-definitions-computed-names.js b/test/language/statements/class/fields-multiple-stacked-definitions-computed-names.js
index 1bdcb8e773bbed01d1b1c6d82e794eb9fe030aa6..b6f884a84f7b6e81cb2c01c261fb3bf75bc43cb7 100644
--- a/test/language/statements/class/fields-multiple-stacked-definitions-computed-names.js
+++ b/test/language/statements/class/fields-multiple-stacked-definitions-computed-names.js
@@ -27,7 +27,7 @@ class C {
   [x] = 42; [10] = "meep"; ["not initialized"]
   foo = "foobar"
   bar = "barbaz";
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-multiple-stacked-definitions-computed-symbol-names.js b/test/language/statements/class/fields-multiple-stacked-definitions-computed-symbol-names.js
index 9bfeb243fc2734b2870eb01ea9d1a3029bf47d82..76a7d9f7a7a08630011379f5bb9d95c413887b4d 100644
--- a/test/language/statements/class/fields-multiple-stacked-definitions-computed-symbol-names.js
+++ b/test/language/statements/class/fields-multiple-stacked-definitions-computed-symbol-names.js
@@ -28,7 +28,7 @@ class C {
   [x]; [y] = 42
   foo = "foobar"
   bar = "barbaz";
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-multiple-stacked-definitions-literal-names.js b/test/language/statements/class/fields-multiple-stacked-definitions-literal-names.js
index db7c211752a7e0f83338d1338517bf7637baeca3..59dd6f45f17181c611e8fd2f35a5ec9dbb0547d5 100644
--- a/test/language/statements/class/fields-multiple-stacked-definitions-literal-names.js
+++ b/test/language/statements/class/fields-multiple-stacked-definitions-literal-names.js
@@ -28,7 +28,7 @@ class C {
   c = fn
   foo = "foobar"
   bar = "barbaz";
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-multiple-stacked-definitions-private-names.js b/test/language/statements/class/fields-multiple-stacked-definitions-private-names.js
index e88d530aca5c7563b3995a23fddc0af69fc7d40e..46914e9068c1fc163ba3e267372a571cb37a65f6 100644
--- a/test/language/statements/class/fields-multiple-stacked-definitions-private-names.js
+++ b/test/language/statements/class/fields-multiple-stacked-definitions-private-names.js
@@ -2,24 +2,24 @@
 // - src/class-fields/private-names.case
 // - src/class-fields/productions/cls-decl-multiple-stacked-definitions.template
 /*---
-description: static literal private names (multiple stacked fields definitions through ASI)
+description: private names (multiple stacked fields definitions through ASI)
 esid: prod-FieldDefinition
 features: [class-fields-private, class, class-fields-public]
 flags: [generated]
 includes: [propertyHelper.js]
 info: |
-    ClassElement:
+    ClassElement :
       ...
       FieldDefinition ;
 
-    FieldDefinition:
+    FieldDefinition :
       ClassElementName Initializer_opt
 
-    ClassElementName:
+    ClassElementName :
       PrivateName
 
-    PrivateName:
-      #IdentifierName
+    PrivateName :
+      # IdentifierName
 
 ---*/
 
@@ -28,7 +28,7 @@ class C {
   #x; #y
   foo = "foobar"
   bar = "barbaz";
-x() {
+  x() {
     this.#x = 42;
     return this.#x;
   }
diff --git a/test/language/statements/class/fields-multiple-stacked-definitions-static-private-fields.js b/test/language/statements/class/fields-multiple-stacked-definitions-static-private-fields.js
new file mode 100644
index 0000000000000000000000000000000000000000..b2d30bb6844a9aa308eaa342a12c9935f4eddd72
--- /dev/null
+++ b/test/language/statements/class/fields-multiple-stacked-definitions-static-private-fields.js
@@ -0,0 +1,80 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-fields.case
+// - src/class-fields/productions/cls-decl-multiple-stacked-definitions.template
+/*---
+description: static private fields (multiple stacked fields definitions through ASI)
+esid: prod-FieldDefinition
+features: [class-static-fields-private, class, class-fields-public]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+class C {
+  static #x; static #y
+  foo = "foobar"
+  bar = "barbaz";
+  static x() {
+    this.#x = 42;
+    return this.#x;
+  }
+  static y() {
+    this.#y = 43;
+    return this.#y;
+  }
+}
+
+var c = new C();
+
+assert.sameValue(c.foo, "foobar");
+assert.sameValue(Object.hasOwnProperty.call(C, "foo"), false);
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "foo"), false);
+
+verifyProperty(c, "foo", {
+  value: "foobar",
+  enumerable: true,
+  configurable: true,
+  writable: true,
+});
+
+assert.sameValue(c.bar, "barbaz");
+assert.sameValue(Object.hasOwnProperty.call(C, "bar"), false);
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "bar"), false);
+
+verifyProperty(c, "bar", {
+  value: "barbaz",
+  enumerable: true,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private fields do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#x"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#x"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#y"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#y"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 10");
diff --git a/test/language/statements/class/fields-multiple-stacked-definitions-static-private-methods.js b/test/language/statements/class/fields-multiple-stacked-definitions-static-private-methods.js
new file mode 100644
index 0000000000000000000000000000000000000000..9e38dfbc9112705d4f04a321d7615748cde876f2
--- /dev/null
+++ b/test/language/statements/class/fields-multiple-stacked-definitions-static-private-methods.js
@@ -0,0 +1,86 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-methods.case
+// - src/class-fields/productions/cls-decl-multiple-stacked-definitions.template
+/*---
+description: static private methods (multiple stacked fields definitions through ASI)
+esid: prod-FieldDefinition
+features: [class-static-methods-private, class, class-fields-public]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+class C {
+  static #xVal; static #yVal
+  foo = "foobar"
+  bar = "barbaz";
+  static #x(value) {
+    this.#xVal = value;
+    return this.#xVal;
+  }
+  static #y(value) {
+    this.#y = value;
+    return this.#yVal;
+  }
+  static x() {
+    return this.#x(42);
+  }
+  static y() {
+    return this.#y(43);
+  }
+}
+
+var c = new C();
+
+assert.sameValue(c.foo, "foobar");
+assert.sameValue(Object.hasOwnProperty.call(C, "foo"), false);
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "foo"), false);
+
+verifyProperty(c, "foo", {
+  value: "foobar",
+  enumerable: true,
+  configurable: true,
+  writable: true,
+});
+
+assert.sameValue(c.bar, "barbaz");
+assert.sameValue(Object.hasOwnProperty.call(C, "bar"), false);
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "bar"), false);
+
+verifyProperty(c, "bar", {
+  value: "barbaz",
+  enumerable: true,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private methods do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#xVal"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#xVal"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#yVal"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#yVal"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 10");
diff --git a/test/language/statements/class/fields-multiple-stacked-definitions-string-literal-names.js b/test/language/statements/class/fields-multiple-stacked-definitions-string-literal-names.js
index fffb53f4f1ad4da1db9d83ffa49b54b8e9402c08..e65d06e9817120a48668e2069983a4e2bc06fcfe 100644
--- a/test/language/statements/class/fields-multiple-stacked-definitions-string-literal-names.js
+++ b/test/language/statements/class/fields-multiple-stacked-definitions-string-literal-names.js
@@ -26,7 +26,7 @@ class C {
   "d" = 42
   foo = "foobar"
   bar = "barbaz";
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-new-no-sc-line-method-computed-names.js b/test/language/statements/class/fields-new-no-sc-line-method-computed-names.js
index 656dad2c1ae7f34ce473c62cc61023e554708578..40dcc6bc94396cfe068e0ee1caa8debbfc4c3296 100644
--- a/test/language/statements/class/fields-new-no-sc-line-method-computed-names.js
+++ b/test/language/statements/class/fields-new-no-sc-line-method-computed-names.js
@@ -26,7 +26,7 @@ var x = "b";
 class C {
   [x] = 42; [10] = "meep"; ["not initialized"]
   m() { return 42; }
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-new-no-sc-line-method-computed-symbol-names.js b/test/language/statements/class/fields-new-no-sc-line-method-computed-symbol-names.js
index 803d75477e12d59b32003077a69af41b487acada..3670093d19c42ea9d9aca1ba142fa2866d260179 100644
--- a/test/language/statements/class/fields-new-no-sc-line-method-computed-symbol-names.js
+++ b/test/language/statements/class/fields-new-no-sc-line-method-computed-symbol-names.js
@@ -27,7 +27,7 @@ var y = Symbol();
 class C {
   [x]; [y] = 42
   m() { return 42; }
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-new-no-sc-line-method-literal-names.js b/test/language/statements/class/fields-new-no-sc-line-method-literal-names.js
index ae718c8241b3688897ccb8a4964189f56d4c6cfd..85571fd5582022965f11cafe92c6eff77fd4d3ad 100644
--- a/test/language/statements/class/fields-new-no-sc-line-method-literal-names.js
+++ b/test/language/statements/class/fields-new-no-sc-line-method-literal-names.js
@@ -27,7 +27,7 @@ class C {
   a; b = 42;
   c = fn
   m() { return 42; }
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-new-no-sc-line-method-private-names.js b/test/language/statements/class/fields-new-no-sc-line-method-private-names.js
index f57b9ac5bb878df08dfb6fbecaf3e2bae387a002..ddb2b385cad3564bcfb5d2719d7ecaf1f384ed46 100644
--- a/test/language/statements/class/fields-new-no-sc-line-method-private-names.js
+++ b/test/language/statements/class/fields-new-no-sc-line-method-private-names.js
@@ -2,24 +2,24 @@
 // - src/class-fields/private-names.case
 // - src/class-fields/productions/cls-decl-new-no-sc-line-method.template
 /*---
-description: static literal private names (field definitions followed by a method in a new line without a semicolon)
+description: private names (field definitions followed by a method in a new line without a semicolon)
 esid: prod-FieldDefinition
 features: [class-fields-private, class, class-fields-public]
 flags: [generated]
 includes: [propertyHelper.js]
 info: |
-    ClassElement:
+    ClassElement :
       ...
       FieldDefinition ;
 
-    FieldDefinition:
+    FieldDefinition :
       ClassElementName Initializer_opt
 
-    ClassElementName:
+    ClassElementName :
       PrivateName
 
-    PrivateName:
-      #IdentifierName
+    PrivateName :
+      # IdentifierName
 
 ---*/
 
@@ -27,7 +27,7 @@ info: |
 class C {
   #x; #y
   m() { return 42; }
-x() {
+  x() {
     this.#x = 42;
     return this.#x;
   }
diff --git a/test/language/statements/class/fields-new-no-sc-line-method-static-private-fields.js b/test/language/statements/class/fields-new-no-sc-line-method-static-private-fields.js
new file mode 100644
index 0000000000000000000000000000000000000000..21a082f6d5c5f49d0095caedbaafe128b7469b82
--- /dev/null
+++ b/test/language/statements/class/fields-new-no-sc-line-method-static-private-fields.js
@@ -0,0 +1,67 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-fields.case
+// - src/class-fields/productions/cls-decl-new-no-sc-line-method.template
+/*---
+description: static private fields (field definitions followed by a method in a new line without a semicolon)
+esid: prod-FieldDefinition
+features: [class-static-fields-private, class, class-fields-public]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+class C {
+  static #x; static #y
+  m() { return 42; }
+  static x() {
+    this.#x = 42;
+    return this.#x;
+  }
+  static y() {
+    this.#y = 43;
+    return this.#y;
+  }
+}
+
+var c = new C();
+
+assert.sameValue(c.m(), 42);
+assert.sameValue(c.m, C.prototype.m);
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+
+verifyProperty(C.prototype, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private fields do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#x"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#x"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#y"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#y"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 10");
diff --git a/test/language/statements/class/fields-new-no-sc-line-method-static-private-methods.js b/test/language/statements/class/fields-new-no-sc-line-method-static-private-methods.js
new file mode 100644
index 0000000000000000000000000000000000000000..6b444eb32649c8c57ab9c059b857f70cfebe31d0
--- /dev/null
+++ b/test/language/statements/class/fields-new-no-sc-line-method-static-private-methods.js
@@ -0,0 +1,73 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-methods.case
+// - src/class-fields/productions/cls-decl-new-no-sc-line-method.template
+/*---
+description: static private methods (field definitions followed by a method in a new line without a semicolon)
+esid: prod-FieldDefinition
+features: [class-static-methods-private, class, class-fields-public]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+class C {
+  static #xVal; static #yVal
+  m() { return 42; }
+  static #x(value) {
+    this.#xVal = value;
+    return this.#xVal;
+  }
+  static #y(value) {
+    this.#y = value;
+    return this.#yVal;
+  }
+  static x() {
+    return this.#x(42);
+  }
+  static y() {
+    return this.#y(43);
+  }
+}
+
+var c = new C();
+
+assert.sameValue(c.m(), 42);
+assert.sameValue(c.m, C.prototype.m);
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+
+verifyProperty(C.prototype, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private methods do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#xVal"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#xVal"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#yVal"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#yVal"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 10");
diff --git a/test/language/statements/class/fields-new-no-sc-line-method-string-literal-names.js b/test/language/statements/class/fields-new-no-sc-line-method-string-literal-names.js
index e376980dfc4eeac829b23424de844c4c60119418..606f9857cdbf8bd60143acde6a73719259ec77c5 100644
--- a/test/language/statements/class/fields-new-no-sc-line-method-string-literal-names.js
+++ b/test/language/statements/class/fields-new-no-sc-line-method-string-literal-names.js
@@ -25,7 +25,7 @@ class C {
   'a'; "b"; 'c' = 39;
   "d" = 42
   m() { return 42; }
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-new-sc-line-gen-computed-names.js b/test/language/statements/class/fields-new-sc-line-gen-computed-names.js
index ed18ea80b92eb719aa3a6eddb4aa96732bd353db..dac45df4344b694a1614d3852da5c54ffb39a670 100644
--- a/test/language/statements/class/fields-new-sc-line-gen-computed-names.js
+++ b/test/language/statements/class/fields-new-sc-line-gen-computed-names.js
@@ -26,7 +26,7 @@ var x = "b";
 class C {
   [x] = 42; [10] = "meep"; ["not initialized"];
   *m() { return 42; }
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-new-sc-line-gen-computed-symbol-names.js b/test/language/statements/class/fields-new-sc-line-gen-computed-symbol-names.js
index 3c8a55c93befb9338786ccf819b11c3f427a0128..e18acba62c6904fce6ee6d00411c3ffb16ffa7a0 100644
--- a/test/language/statements/class/fields-new-sc-line-gen-computed-symbol-names.js
+++ b/test/language/statements/class/fields-new-sc-line-gen-computed-symbol-names.js
@@ -27,7 +27,7 @@ var y = Symbol();
 class C {
   [x]; [y] = 42;
   *m() { return 42; }
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-new-sc-line-gen-literal-names.js b/test/language/statements/class/fields-new-sc-line-gen-literal-names.js
index 65966a09cb093c6df19c4cfae4d7c0a8259ac602..33764b72e56af209246a9ea3a7741e463870c022 100644
--- a/test/language/statements/class/fields-new-sc-line-gen-literal-names.js
+++ b/test/language/statements/class/fields-new-sc-line-gen-literal-names.js
@@ -27,7 +27,7 @@ class C {
   a; b = 42;
   c = fn;
   *m() { return 42; }
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-new-sc-line-gen-private-names.js b/test/language/statements/class/fields-new-sc-line-gen-private-names.js
index 540ad191c952d9c470dd2863ac66432148c79370..fe4b9d8fa504a96c8b9741b25fa0a474e93e75df 100644
--- a/test/language/statements/class/fields-new-sc-line-gen-private-names.js
+++ b/test/language/statements/class/fields-new-sc-line-gen-private-names.js
@@ -2,24 +2,24 @@
 // - src/class-fields/private-names.case
 // - src/class-fields/productions/cls-decl-new-sc-line-generator.template
 /*---
-description: static literal private names (field definitions followed by a method in a new line with a semicolon)
+description: private names (field definitions followed by a method in a new line with a semicolon)
 esid: prod-FieldDefinition
 features: [class-fields-private, class, class-fields-public, generators]
 flags: [generated]
 includes: [propertyHelper.js]
 info: |
-    ClassElement:
+    ClassElement :
       ...
       FieldDefinition ;
 
-    FieldDefinition:
+    FieldDefinition :
       ClassElementName Initializer_opt
 
-    ClassElementName:
+    ClassElementName :
       PrivateName
 
-    PrivateName:
-      #IdentifierName
+    PrivateName :
+      # IdentifierName
 
 ---*/
 
@@ -27,7 +27,7 @@ info: |
 class C {
   #x; #y;
   *m() { return 42; }
-x() {
+  x() {
     this.#x = 42;
     return this.#x;
   }
diff --git a/test/language/statements/class/fields-new-sc-line-gen-static-private-fields.js b/test/language/statements/class/fields-new-sc-line-gen-static-private-fields.js
new file mode 100644
index 0000000000000000000000000000000000000000..fc2cdc56cee170afa81676bb0c26001e4c272315
--- /dev/null
+++ b/test/language/statements/class/fields-new-sc-line-gen-static-private-fields.js
@@ -0,0 +1,67 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-fields.case
+// - src/class-fields/productions/cls-decl-new-sc-line-generator.template
+/*---
+description: static private fields (field definitions followed by a method in a new line with a semicolon)
+esid: prod-FieldDefinition
+features: [class-static-fields-private, class, class-fields-public, generators]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+class C {
+  static #x; static #y;
+  *m() { return 42; }
+  static x() {
+    this.#x = 42;
+    return this.#x;
+  }
+  static y() {
+    this.#y = 43;
+    return this.#y;
+  }
+}
+
+var c = new C();
+
+assert.sameValue(c.m().next().value, 42);
+assert.sameValue(c.m, C.prototype.m);
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+
+verifyProperty(C.prototype, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private fields do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#x"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#x"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#y"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#y"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 10");
diff --git a/test/language/statements/class/fields-new-sc-line-gen-static-private-methods.js b/test/language/statements/class/fields-new-sc-line-gen-static-private-methods.js
new file mode 100644
index 0000000000000000000000000000000000000000..c1bf2164e0a3dc5ce9d2d46fb3a2fdf8480c2e95
--- /dev/null
+++ b/test/language/statements/class/fields-new-sc-line-gen-static-private-methods.js
@@ -0,0 +1,73 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-methods.case
+// - src/class-fields/productions/cls-decl-new-sc-line-generator.template
+/*---
+description: static private methods (field definitions followed by a method in a new line with a semicolon)
+esid: prod-FieldDefinition
+features: [class-static-methods-private, class, class-fields-public, generators]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+class C {
+  static #xVal; static #yVal;
+  *m() { return 42; }
+  static #x(value) {
+    this.#xVal = value;
+    return this.#xVal;
+  }
+  static #y(value) {
+    this.#y = value;
+    return this.#yVal;
+  }
+  static x() {
+    return this.#x(42);
+  }
+  static y() {
+    return this.#y(43);
+  }
+}
+
+var c = new C();
+
+assert.sameValue(c.m().next().value, 42);
+assert.sameValue(c.m, C.prototype.m);
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+
+verifyProperty(C.prototype, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private methods do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#xVal"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#xVal"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#yVal"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#yVal"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 10");
diff --git a/test/language/statements/class/fields-new-sc-line-gen-string-literal-names.js b/test/language/statements/class/fields-new-sc-line-gen-string-literal-names.js
index 2409d6ae0b86b0e0078058eb223307613645353b..1e8ff0f8147a0b8d535b080efc07430401e05081 100644
--- a/test/language/statements/class/fields-new-sc-line-gen-string-literal-names.js
+++ b/test/language/statements/class/fields-new-sc-line-gen-string-literal-names.js
@@ -25,7 +25,7 @@ class C {
   'a'; "b"; 'c' = 39;
   "d" = 42;
   *m() { return 42; }
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-new-sc-line-method-computed-names.js b/test/language/statements/class/fields-new-sc-line-method-computed-names.js
index a3055504f09d85f6aa8b1901fca160a5ff5ad19f..27d235a7214a22489b3cab3dedfc76b8f0216c63 100644
--- a/test/language/statements/class/fields-new-sc-line-method-computed-names.js
+++ b/test/language/statements/class/fields-new-sc-line-method-computed-names.js
@@ -26,7 +26,7 @@ var x = "b";
 class C {
   [x] = 42; [10] = "meep"; ["not initialized"];
   m() { return 42; }
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-new-sc-line-method-computed-symbol-names.js b/test/language/statements/class/fields-new-sc-line-method-computed-symbol-names.js
index 1e305c017d444730ead1ad96f4120e152d63e7fc..6377c3578bec79dc0496c243d2fcc8264a456efa 100644
--- a/test/language/statements/class/fields-new-sc-line-method-computed-symbol-names.js
+++ b/test/language/statements/class/fields-new-sc-line-method-computed-symbol-names.js
@@ -27,7 +27,7 @@ var y = Symbol();
 class C {
   [x]; [y] = 42;
   m() { return 42; }
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-new-sc-line-method-literal-names.js b/test/language/statements/class/fields-new-sc-line-method-literal-names.js
index 96b9f225a34a6ab4f24961490309a690035f41ab..7c2d3b0a39062d8475eac6565279645aef414df5 100644
--- a/test/language/statements/class/fields-new-sc-line-method-literal-names.js
+++ b/test/language/statements/class/fields-new-sc-line-method-literal-names.js
@@ -27,7 +27,7 @@ class C {
   a; b = 42;
   c = fn;
   m() { return 42; }
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-new-sc-line-method-private-names.js b/test/language/statements/class/fields-new-sc-line-method-private-names.js
index 9b095ec504144e235c3c521a57070161f6bd8d3a..2801a349d1316f2ff3f24206cb6a2831b5cf861c 100644
--- a/test/language/statements/class/fields-new-sc-line-method-private-names.js
+++ b/test/language/statements/class/fields-new-sc-line-method-private-names.js
@@ -2,24 +2,24 @@
 // - src/class-fields/private-names.case
 // - src/class-fields/productions/cls-decl-new-sc-line-method.template
 /*---
-description: static literal private names (field definitions followed by a method in a new line with a semicolon)
+description: private names (field definitions followed by a method in a new line with a semicolon)
 esid: prod-FieldDefinition
 features: [class-fields-private, class, class-fields-public]
 flags: [generated]
 includes: [propertyHelper.js]
 info: |
-    ClassElement:
+    ClassElement :
       ...
       FieldDefinition ;
 
-    FieldDefinition:
+    FieldDefinition :
       ClassElementName Initializer_opt
 
-    ClassElementName:
+    ClassElementName :
       PrivateName
 
-    PrivateName:
-      #IdentifierName
+    PrivateName :
+      # IdentifierName
 
 ---*/
 
@@ -27,7 +27,7 @@ info: |
 class C {
   #x; #y;
   m() { return 42; }
-x() {
+  x() {
     this.#x = 42;
     return this.#x;
   }
diff --git a/test/language/statements/class/fields-new-sc-line-method-static-private-fields.js b/test/language/statements/class/fields-new-sc-line-method-static-private-fields.js
new file mode 100644
index 0000000000000000000000000000000000000000..77c05cade69be23b1a54c4a429c4224e581c8de7
--- /dev/null
+++ b/test/language/statements/class/fields-new-sc-line-method-static-private-fields.js
@@ -0,0 +1,67 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-fields.case
+// - src/class-fields/productions/cls-decl-new-sc-line-method.template
+/*---
+description: static private fields (field definitions followed by a method in a new line with a semicolon)
+esid: prod-FieldDefinition
+features: [class-static-fields-private, class, class-fields-public]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+class C {
+  static #x; static #y;
+  m() { return 42; }
+  static x() {
+    this.#x = 42;
+    return this.#x;
+  }
+  static y() {
+    this.#y = 43;
+    return this.#y;
+  }
+}
+
+var c = new C();
+
+assert.sameValue(c.m(), 42);
+assert.sameValue(c.m, C.prototype.m);
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+
+verifyProperty(C.prototype, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private fields do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#x"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#x"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#y"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#y"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 10");
diff --git a/test/language/statements/class/fields-new-sc-line-method-static-private-methods.js b/test/language/statements/class/fields-new-sc-line-method-static-private-methods.js
new file mode 100644
index 0000000000000000000000000000000000000000..eb7d9e137e9f8afa41d276a2a60e024a7f2a4f98
--- /dev/null
+++ b/test/language/statements/class/fields-new-sc-line-method-static-private-methods.js
@@ -0,0 +1,73 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-methods.case
+// - src/class-fields/productions/cls-decl-new-sc-line-method.template
+/*---
+description: static private methods (field definitions followed by a method in a new line with a semicolon)
+esid: prod-FieldDefinition
+features: [class-static-methods-private, class, class-fields-public]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+class C {
+  static #xVal; static #yVal;
+  m() { return 42; }
+  static #x(value) {
+    this.#xVal = value;
+    return this.#xVal;
+  }
+  static #y(value) {
+    this.#y = value;
+    return this.#yVal;
+  }
+  static x() {
+    return this.#x(42);
+  }
+  static y() {
+    return this.#y(43);
+  }
+}
+
+var c = new C();
+
+assert.sameValue(c.m(), 42);
+assert.sameValue(c.m, C.prototype.m);
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+
+verifyProperty(C.prototype, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private methods do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#xVal"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#xVal"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#yVal"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#yVal"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 10");
diff --git a/test/language/statements/class/fields-new-sc-line-method-string-literal-names.js b/test/language/statements/class/fields-new-sc-line-method-string-literal-names.js
index 9377cf759384aade5a28159815ec115727e3ceaf..a5ebd2808cfb899603f92f571688757cd23daba2 100644
--- a/test/language/statements/class/fields-new-sc-line-method-string-literal-names.js
+++ b/test/language/statements/class/fields-new-sc-line-method-string-literal-names.js
@@ -25,7 +25,7 @@ class C {
   'a'; "b"; 'c' = 39;
   "d" = 42;
   m() { return 42; }
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-private-direct-eval-err-contains-arguments.js b/test/language/statements/class/fields-private-direct-eval-err-contains-arguments.js
new file mode 100644
index 0000000000000000000000000000000000000000..366efed2fcf98578ed993a7794742eeeec678f7b
--- /dev/null
+++ b/test/language/statements/class/fields-private-direct-eval-err-contains-arguments.js
@@ -0,0 +1,36 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/eval-err-contains-arguments.case
+// - src/class-fields/initializer-eval-arguments/cls-decl-private-fields-eval.template
+/*---
+description: error if `arguments` in StatementList of eval (direct eval)
+esid: sec-performeval-rules-in-initializer
+features: [class, class-fields-public, class-fields-private]
+flags: [generated]
+info: |
+    Additional Early Error Rules for Eval Inside Initializer
+    These static semantics are applied by PerformEval when a direct eval call occurs inside a class field initializer.
+    ScriptBody : StatementList
+
+      It is a Syntax Error if ContainsArguments of StatementList is true.
+      ...
+
+    Static Semantics: ContainsArguments
+      IdentifierReference : Identifier
+
+      1. If the StringValue of Identifier is "arguments", return true.
+      ...
+      For all other grammatical productions, recurse on all nonterminals. If any piece returns true, then return true. Otherwise return false.
+
+---*/
+
+
+var executed = false;
+class C {
+  #x = eval('executed = true; arguments;');
+}
+
+assert.throws(SyntaxError, function() {
+  new C();
+});
+
+assert.sameValue(executed, false);
diff --git a/test/language/statements/class/fields-private-direct-eval-err-contains-newtarget.js b/test/language/statements/class/fields-private-direct-eval-err-contains-newtarget.js
new file mode 100644
index 0000000000000000000000000000000000000000..d44434ad174537b2864600dc6b9961294bd3d698
--- /dev/null
+++ b/test/language/statements/class/fields-private-direct-eval-err-contains-newtarget.js
@@ -0,0 +1,34 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/eval-err-contains-newtarget.case
+// - src/class-fields/initializer-eval-newtarget/cls-decl-private-fields-eval.template
+/*---
+description: error if `new.target` in StatementList of eval (direct eval)
+esid: sec-performeval-rules-in-initializer
+features: [class, new.target, class-fields-private]
+flags: [generated]
+info: |
+    Additional Early Error Rules for Eval Inside Initializer
+    These static semantics are applied by PerformEval when a direct eval call occurs inside a class field initializer.
+    ScriptBody : StatementList
+
+      ...
+      The remaining eval rules apply as outside a constructor, inside a method, and inside a function.
+
+    Additional Early Error Rules for Eval Outside Functions
+    These static semantics are applied by PerformEval when a direct eval call occurs outside of any function.
+    ScriptBody:StatementList
+
+      It is a Syntax Error if StatementList Contains NewTarget.
+
+---*/
+
+
+var executed = false;
+class C {
+  #x = eval('executed = true; new.target;');
+}
+
+var c = new C();
+
+assert.sameValue(executed, true);
+assert.sameValue(c.x, undefined);
diff --git a/test/language/statements/class/fields-private-indirect-eval-err-contains-arguments.js b/test/language/statements/class/fields-private-indirect-eval-err-contains-arguments.js
new file mode 100644
index 0000000000000000000000000000000000000000..dee4e5946fe060c7a23f777b6e36c6e4a1735aa4
--- /dev/null
+++ b/test/language/statements/class/fields-private-indirect-eval-err-contains-arguments.js
@@ -0,0 +1,36 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/eval-err-contains-arguments.case
+// - src/class-fields/initializer-eval-arguments/cls-decl-private-fields-indirect-eval.template
+/*---
+description: error if `arguments` in StatementList of eval (indirect eval)
+esid: sec-performeval-rules-in-initializer
+features: [class, class-fields-public, class-fields-private]
+flags: [generated]
+info: |
+    Additional Early Error Rules for Eval Inside Initializer
+    These static semantics are applied by PerformEval when a direct eval call occurs inside a class field initializer.
+    ScriptBody : StatementList
+
+      It is a Syntax Error if ContainsArguments of StatementList is true.
+      ...
+
+    Static Semantics: ContainsArguments
+      IdentifierReference : Identifier
+
+      1. If the StringValue of Identifier is "arguments", return true.
+      ...
+      For all other grammatical productions, recurse on all nonterminals. If any piece returns true, then return true. Otherwise return false.
+
+---*/
+
+
+var executed = false;
+class C {
+  #x = (0, eval)('executed = true; arguments;');
+}
+
+assert.throws(ReferenceError, function() {
+  new C();
+});
+
+assert.sameValue(executed, true);
diff --git a/test/language/statements/class/fields-private-indirect-eval-err-contains-newtarget.js b/test/language/statements/class/fields-private-indirect-eval-err-contains-newtarget.js
new file mode 100644
index 0000000000000000000000000000000000000000..c15dd203a9d5f72c720ca7c749f092a596a32478
--- /dev/null
+++ b/test/language/statements/class/fields-private-indirect-eval-err-contains-newtarget.js
@@ -0,0 +1,35 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/eval-err-contains-newtarget.case
+// - src/class-fields/initializer-eval-newtarget/cls-decl-private-fields-indirect-eval.template
+/*---
+description: error if `new.target` in StatementList of eval (indirect eval)
+esid: sec-performeval-rules-in-initializer
+features: [class, new.target, class-fields-private]
+flags: [generated]
+info: |
+    Additional Early Error Rules for Eval Inside Initializer
+    These static semantics are applied by PerformEval when a direct eval call occurs inside a class field initializer.
+    ScriptBody : StatementList
+
+      ...
+      The remaining eval rules apply as outside a constructor, inside a method, and inside a function.
+
+    Additional Early Error Rules for Eval Outside Functions
+    These static semantics are applied by PerformEval when a direct eval call occurs outside of any function.
+    ScriptBody:StatementList
+
+      It is a Syntax Error if StatementList Contains NewTarget.
+
+---*/
+
+
+var executed = false;
+class C {
+  #x = (0, eval)('executed = true; new.target;');
+}
+
+assert.throws(SyntaxError, function() {
+  new C();
+});
+
+assert.sameValue(executed, false);
diff --git a/test/language/statements/class/fields-redeclaration-symbol.js b/test/language/statements/class/fields-redeclaration-symbol.js
index 5d3337f356ab6569178a1b1dbeb049f8361d2d96..9995556e8b171d9e7a5d60d9719b8edfaae1c120 100644
--- a/test/language/statements/class/fields-redeclaration-symbol.js
+++ b/test/language/statements/class/fields-redeclaration-symbol.js
@@ -4,7 +4,7 @@
 /*---
 description: Redeclaration of public fields with the same name (field definitions in a class declaration)
 esid: prod-FieldDefinition
-features: [class, class-fields-public]
+features: [class]
 flags: [generated]
 includes: [propertyHelper.js, compareArray.js]
 info: |
diff --git a/test/language/statements/class/fields-redeclaration.js b/test/language/statements/class/fields-redeclaration.js
index 3cc850ada8e5eb0574a29f3844eac470d4e903de..236e683714ae4291485bd405b21f814dc8509844 100644
--- a/test/language/statements/class/fields-redeclaration.js
+++ b/test/language/statements/class/fields-redeclaration.js
@@ -4,7 +4,7 @@
 /*---
 description: Redeclaration of public fields with the same name (field definitions in a class declaration)
 esid: prod-FieldDefinition
-features: [class, class-fields-public]
+features: [class]
 flags: [generated]
 includes: [propertyHelper.js, compareArray.js]
 info: |
diff --git a/test/language/statements/class/fields-regular-definitions-computed-names.js b/test/language/statements/class/fields-regular-definitions-computed-names.js
index 7fa89ad9139fd3c785c700b69ed4f5de089c2d05..485a382e4935c02089fc19bbb316ed8630359f5f 100644
--- a/test/language/statements/class/fields-regular-definitions-computed-names.js
+++ b/test/language/statements/class/fields-regular-definitions-computed-names.js
@@ -25,7 +25,7 @@ var x = "b";
 
 class C {
   [x] = 42; [10] = "meep"; ["not initialized"]
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-regular-definitions-computed-symbol-names.js b/test/language/statements/class/fields-regular-definitions-computed-symbol-names.js
index 88c2d21f6495e5d7b384d21b0d2a593c3f44cc39..49e1b31638aae90570aad65f7369cdebe3750c9a 100644
--- a/test/language/statements/class/fields-regular-definitions-computed-symbol-names.js
+++ b/test/language/statements/class/fields-regular-definitions-computed-symbol-names.js
@@ -26,7 +26,7 @@ var y = Symbol();
 
 class C {
   [x]; [y] = 42
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-regular-definitions-literal-names.js b/test/language/statements/class/fields-regular-definitions-literal-names.js
index 170ab303d6a00e8ea0d8ed9d9cd9d180115ed5aa..bb7dc4cbf44628bf449951cc803f44db0e5f0363 100644
--- a/test/language/statements/class/fields-regular-definitions-literal-names.js
+++ b/test/language/statements/class/fields-regular-definitions-literal-names.js
@@ -26,7 +26,7 @@ const fn = function() {}
 class C {
   a; b = 42;
   c = fn
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-regular-definitions-private-names.js b/test/language/statements/class/fields-regular-definitions-private-names.js
index 2c482495a09e7321c2c6a9c4c798b28f5d5bbf3a..414c963995972f782faa5b9e858aef14602654f2 100644
--- a/test/language/statements/class/fields-regular-definitions-private-names.js
+++ b/test/language/statements/class/fields-regular-definitions-private-names.js
@@ -2,30 +2,30 @@
 // - src/class-fields/private-names.case
 // - src/class-fields/productions/cls-decl-regular-definitions.template
 /*---
-description: static literal private names (regular fields defintion)
+description: private names (regular fields defintion)
 esid: prod-FieldDefinition
 features: [class-fields-private, class, class-fields-public]
 flags: [generated]
 info: |
-    ClassElement:
+    ClassElement :
       ...
       FieldDefinition ;
 
-    FieldDefinition:
+    FieldDefinition :
       ClassElementName Initializer_opt
 
-    ClassElementName:
+    ClassElementName :
       PrivateName
 
-    PrivateName:
-      #IdentifierName
+    PrivateName :
+      # IdentifierName
 
 ---*/
 
 
 class C {
   #x; #y
-x() {
+  x() {
     this.#x = 42;
     return this.#x;
   }
diff --git a/test/language/statements/class/fields-static-private-fields.js b/test/language/statements/class/fields-regular-definitions-static-private-fields.js
similarity index 75%
rename from test/language/statements/class/fields-static-private-fields.js
rename to test/language/statements/class/fields-regular-definitions-static-private-fields.js
index a9b0611ee4a34f26777bd4d3782c9c2d77ee6d31..11cbfcf788b70b398fec9b2c1f5c322f3dae7a95 100644
--- a/test/language/statements/class/fields-static-private-fields.js
+++ b/test/language/statements/class/fields-regular-definitions-static-private-fields.js
@@ -1,23 +1,23 @@
 // This file was procedurally generated from the following sources:
 // - src/class-fields/static-private-fields.case
-// - src/class-fields/default/cls-decl.template
+// - src/class-fields/productions/cls-decl-regular-definitions.template
 /*---
-description: literal private names (field definitions in a class declaration)
+description: static private fields (regular fields defintion)
 esid: prod-FieldDefinition
-features: [class, class-fields-public]
+features: [class-static-fields-private, class, class-fields-public]
 flags: [generated]
 info: |
-    ClassElement:
+    ClassElement :
       ...
       static FieldDefinition ;
 
-    FieldDefinition:
+    FieldDefinition :
       ClassElementName Initializer_opt
 
-    ClassElementName:
+    ClassElementName :
       PrivateName
 
-    PrivateName:
+    PrivateName :
       # IdentifierName
 
 ---*/
@@ -25,8 +25,18 @@ info: |
 
 class C {
   static #x; static #y
+  static x() {
+    this.#x = 42;
+    return this.#x;
+  }
+  static y() {
+    this.#y = 43;
+    return this.#y;
+  }
 }
 
+var c = new C();
+
 // Test the private fields do not appear as properties before set to value
 assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#x"), false, "test 1");
 assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 2");
diff --git a/test/language/statements/class/fields-regular-definitions-static-private-methods.js b/test/language/statements/class/fields-regular-definitions-static-private-methods.js
new file mode 100644
index 0000000000000000000000000000000000000000..74b7858c7b6cb4e71b7131cb6b49d54f4eb69ea8
--- /dev/null
+++ b/test/language/statements/class/fields-regular-definitions-static-private-methods.js
@@ -0,0 +1,61 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-methods.case
+// - src/class-fields/productions/cls-decl-regular-definitions.template
+/*---
+description: static private methods (regular fields defintion)
+esid: prod-FieldDefinition
+features: [class-static-methods-private, class, class-fields-public]
+flags: [generated]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+class C {
+  static #xVal; static #yVal
+  static #x(value) {
+    this.#xVal = value;
+    return this.#xVal;
+  }
+  static #y(value) {
+    this.#y = value;
+    return this.#yVal;
+  }
+  static x() {
+    return this.#x(42);
+  }
+  static y() {
+    return this.#y(43);
+  }
+}
+
+var c = new C();
+
+// Test the private methods do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#xVal"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#xVal"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#yVal"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#yVal"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 10");
diff --git a/test/language/statements/class/fields-regular-definitions-string-literal-names.js b/test/language/statements/class/fields-regular-definitions-string-literal-names.js
index cc8ea7ce7d5291314c461d39e3a0305dce074e52..cc177acd57e68db378397e7da9a18b7e8766048e 100644
--- a/test/language/statements/class/fields-regular-definitions-string-literal-names.js
+++ b/test/language/statements/class/fields-regular-definitions-string-literal-names.js
@@ -24,7 +24,7 @@ info: |
 class C {
   'a'; "b"; 'c' = 39;
   "d" = 42
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-same-line-async-gen-computed-names.js b/test/language/statements/class/fields-same-line-async-gen-computed-names.js
index 7e8cf6520266b6b4947aef4b94c2f54aaca22373..9dd54fa73993ef14af071e5a80bb84bcbfd6fb3b 100644
--- a/test/language/statements/class/fields-same-line-async-gen-computed-names.js
+++ b/test/language/statements/class/fields-same-line-async-gen-computed-names.js
@@ -25,7 +25,7 @@ var x = "b";
 
 class C {
   async *m() { return 42; } [x] = 42; [10] = "meep"; ["not initialized"];
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-same-line-async-gen-computed-symbol-names.js b/test/language/statements/class/fields-same-line-async-gen-computed-symbol-names.js
index 061aa74474314c64aa9028c8e952430defb77def..948d23c827140231347b206cdc5497557ba73196 100644
--- a/test/language/statements/class/fields-same-line-async-gen-computed-symbol-names.js
+++ b/test/language/statements/class/fields-same-line-async-gen-computed-symbol-names.js
@@ -26,7 +26,7 @@ var y = Symbol();
 
 class C {
   async *m() { return 42; } [x]; [y] = 42;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-same-line-async-gen-literal-names.js b/test/language/statements/class/fields-same-line-async-gen-literal-names.js
index 14e3dc66cd5a9dea7182c441968054faf4e26014..4ca55d8d9612c2b47e27a722b6622020b1b835fa 100644
--- a/test/language/statements/class/fields-same-line-async-gen-literal-names.js
+++ b/test/language/statements/class/fields-same-line-async-gen-literal-names.js
@@ -26,7 +26,7 @@ const fn = function() {}
 class C {
   async *m() { return 42; } a; b = 42;
   c = fn;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-same-line-async-gen-private-names.js b/test/language/statements/class/fields-same-line-async-gen-private-names.js
index a1c4b00defec76e37d84e237cdc26d169197e9e7..adbd03e6c6237a78331637f7a380263bbc167932 100644
--- a/test/language/statements/class/fields-same-line-async-gen-private-names.js
+++ b/test/language/statements/class/fields-same-line-async-gen-private-names.js
@@ -2,31 +2,31 @@
 // - src/class-fields/private-names.case
 // - src/class-fields/productions/cls-decl-after-same-line-async-gen.template
 /*---
-description: static literal private names (field definitions after an async generator in the same line)
+description: private names (field definitions after an async generator in the same line)
 esid: prod-FieldDefinition
 features: [class-fields-private, class, class-fields-public, async-iteration]
 flags: [generated, async]
 includes: [propertyHelper.js]
 info: |
-    ClassElement:
+    ClassElement :
       ...
       FieldDefinition ;
 
-    FieldDefinition:
+    FieldDefinition :
       ClassElementName Initializer_opt
 
-    ClassElementName:
+    ClassElementName :
       PrivateName
 
-    PrivateName:
-      #IdentifierName
+    PrivateName :
+      # IdentifierName
 
 ---*/
 
 
 class C {
   async *m() { return 42; } #x; #y;
-x() {
+  x() {
     this.#x = 42;
     return this.#x;
   }
diff --git a/test/language/statements/class/fields-same-line-async-gen-static-private-fields.js b/test/language/statements/class/fields-same-line-async-gen-static-private-fields.js
new file mode 100644
index 0000000000000000000000000000000000000000..25507fab392c8e855b4d68c8620449eb536f4d39
--- /dev/null
+++ b/test/language/statements/class/fields-same-line-async-gen-static-private-fields.js
@@ -0,0 +1,70 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-fields.case
+// - src/class-fields/productions/cls-decl-after-same-line-async-gen.template
+/*---
+description: static private fields (field definitions after an async generator in the same line)
+esid: prod-FieldDefinition
+features: [class-static-fields-private, class, class-fields-public, async-iteration]
+flags: [generated, async]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+class C {
+  async *m() { return 42; } static #x; static #y;
+  static x() {
+    this.#x = 42;
+    return this.#x;
+  }
+  static y() {
+    this.#y = 43;
+    return this.#y;
+  }
+}
+
+var c = new C();
+
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+assert.sameValue(c.m, C.prototype.m);
+
+verifyProperty(C.prototype, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+}, {restore: true});
+
+// Test the private fields do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#x"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#x"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#y"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#y"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 10");
+
+c.m().next().then(function(v) {
+  assert.sameValue(v.value, 42);
+  assert.sameValue(v.done, true);
+}, $DONE).then($DONE, $DONE);
diff --git a/test/language/statements/class/fields-same-line-async-gen-static-private-methods.js b/test/language/statements/class/fields-same-line-async-gen-static-private-methods.js
new file mode 100644
index 0000000000000000000000000000000000000000..56dec2a2eee2b06be0aa3d54fa01f43e816e8690
--- /dev/null
+++ b/test/language/statements/class/fields-same-line-async-gen-static-private-methods.js
@@ -0,0 +1,76 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-methods.case
+// - src/class-fields/productions/cls-decl-after-same-line-async-gen.template
+/*---
+description: static private methods (field definitions after an async generator in the same line)
+esid: prod-FieldDefinition
+features: [class-static-methods-private, class, class-fields-public, async-iteration]
+flags: [generated, async]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+class C {
+  async *m() { return 42; } static #xVal; static #yVal;
+  static #x(value) {
+    this.#xVal = value;
+    return this.#xVal;
+  }
+  static #y(value) {
+    this.#y = value;
+    return this.#yVal;
+  }
+  static x() {
+    return this.#x(42);
+  }
+  static y() {
+    return this.#y(43);
+  }
+}
+
+var c = new C();
+
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+assert.sameValue(c.m, C.prototype.m);
+
+verifyProperty(C.prototype, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+}, {restore: true});
+
+// Test the private methods do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#xVal"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#xVal"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#yVal"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#yVal"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 10");
+
+c.m().next().then(function(v) {
+  assert.sameValue(v.value, 42);
+  assert.sameValue(v.done, true);
+}, $DONE).then($DONE, $DONE);
diff --git a/test/language/statements/class/fields-same-line-async-gen-string-literal-names.js b/test/language/statements/class/fields-same-line-async-gen-string-literal-names.js
index 01a18bebd9e6865ec1851b5320007b43d0c0227e..759eb62bd115735555a7717b43f55a45392d1d82 100644
--- a/test/language/statements/class/fields-same-line-async-gen-string-literal-names.js
+++ b/test/language/statements/class/fields-same-line-async-gen-string-literal-names.js
@@ -24,7 +24,7 @@ info: |
 class C {
   async *m() { return 42; } 'a'; "b"; 'c' = 39;
   "d" = 42;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-same-line-async-method-computed-names.js b/test/language/statements/class/fields-same-line-async-method-computed-names.js
index ab68ccb314cd71e09df735bf462ae0b0a5215594..f68257e2a005e88893fd3b7e6ce164f3db1ed2d5 100644
--- a/test/language/statements/class/fields-same-line-async-method-computed-names.js
+++ b/test/language/statements/class/fields-same-line-async-method-computed-names.js
@@ -25,7 +25,7 @@ var x = "b";
 
 class C {
   async m() { return 42; } [x] = 42; [10] = "meep"; ["not initialized"];
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-same-line-async-method-computed-symbol-names.js b/test/language/statements/class/fields-same-line-async-method-computed-symbol-names.js
index 4c0e85f0bc031e81946769502392719b5f2179c5..11eda8bd65145c86b7ee4d426ed1bdb9fe7c8d25 100644
--- a/test/language/statements/class/fields-same-line-async-method-computed-symbol-names.js
+++ b/test/language/statements/class/fields-same-line-async-method-computed-symbol-names.js
@@ -26,7 +26,7 @@ var y = Symbol();
 
 class C {
   async m() { return 42; } [x]; [y] = 42;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-same-line-async-method-literal-names.js b/test/language/statements/class/fields-same-line-async-method-literal-names.js
index 056461df1932c13b6a3a4fec1bc64b0472e6d895..a479fdd3c3b007b5f10f1ecbe1e0a44ffe407fb6 100644
--- a/test/language/statements/class/fields-same-line-async-method-literal-names.js
+++ b/test/language/statements/class/fields-same-line-async-method-literal-names.js
@@ -26,7 +26,7 @@ const fn = function() {}
 class C {
   async m() { return 42; } a; b = 42;
   c = fn;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-same-line-async-method-private-names.js b/test/language/statements/class/fields-same-line-async-method-private-names.js
index 5735b08153adc35396a5b29bb3f1d98204a836b5..9f58eb22d2beef11173e9f7f7d8527e618f4e5a8 100644
--- a/test/language/statements/class/fields-same-line-async-method-private-names.js
+++ b/test/language/statements/class/fields-same-line-async-method-private-names.js
@@ -2,31 +2,31 @@
 // - src/class-fields/private-names.case
 // - src/class-fields/productions/cls-decl-after-same-line-async-method.template
 /*---
-description: static literal private names (field definitions after an async method in the same line)
+description: private names (field definitions after an async method in the same line)
 esid: prod-FieldDefinition
 features: [class-fields-private, class, class-fields-public, async-functions]
 flags: [generated, async]
 includes: [propertyHelper.js]
 info: |
-    ClassElement:
+    ClassElement :
       ...
       FieldDefinition ;
 
-    FieldDefinition:
+    FieldDefinition :
       ClassElementName Initializer_opt
 
-    ClassElementName:
+    ClassElementName :
       PrivateName
 
-    PrivateName:
-      #IdentifierName
+    PrivateName :
+      # IdentifierName
 
 ---*/
 
 
 class C {
   async m() { return 42; } #x; #y;
-x() {
+  x() {
     this.#x = 42;
     return this.#x;
   }
diff --git a/test/language/statements/class/fields-same-line-async-method-static-private-fields.js b/test/language/statements/class/fields-same-line-async-method-static-private-fields.js
new file mode 100644
index 0000000000000000000000000000000000000000..3530b98d0f2d9dd4f93d573ac2105854aeea3f67
--- /dev/null
+++ b/test/language/statements/class/fields-same-line-async-method-static-private-fields.js
@@ -0,0 +1,69 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-fields.case
+// - src/class-fields/productions/cls-decl-after-same-line-async-method.template
+/*---
+description: static private fields (field definitions after an async method in the same line)
+esid: prod-FieldDefinition
+features: [class-static-fields-private, class, class-fields-public, async-functions]
+flags: [generated, async]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+class C {
+  async m() { return 42; } static #x; static #y;
+  static x() {
+    this.#x = 42;
+    return this.#x;
+  }
+  static y() {
+    this.#y = 43;
+    return this.#y;
+  }
+}
+
+var c = new C();
+
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+assert.sameValue(c.m, C.prototype.m);
+
+verifyProperty(C.prototype, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+}, {restore: true});
+
+// Test the private fields do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#x"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#x"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#y"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#y"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 10");
+
+c.m().then(function(v) {
+  assert.sameValue(v, 42);
+}, $DONE).then($DONE, $DONE);
diff --git a/test/language/statements/class/fields-same-line-async-method-static-private-methods.js b/test/language/statements/class/fields-same-line-async-method-static-private-methods.js
new file mode 100644
index 0000000000000000000000000000000000000000..15a37aa86df5faf156393d3328b33915795d7db4
--- /dev/null
+++ b/test/language/statements/class/fields-same-line-async-method-static-private-methods.js
@@ -0,0 +1,75 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-methods.case
+// - src/class-fields/productions/cls-decl-after-same-line-async-method.template
+/*---
+description: static private methods (field definitions after an async method in the same line)
+esid: prod-FieldDefinition
+features: [class-static-methods-private, class, class-fields-public, async-functions]
+flags: [generated, async]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+class C {
+  async m() { return 42; } static #xVal; static #yVal;
+  static #x(value) {
+    this.#xVal = value;
+    return this.#xVal;
+  }
+  static #y(value) {
+    this.#y = value;
+    return this.#yVal;
+  }
+  static x() {
+    return this.#x(42);
+  }
+  static y() {
+    return this.#y(43);
+  }
+}
+
+var c = new C();
+
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+assert.sameValue(c.m, C.prototype.m);
+
+verifyProperty(C.prototype, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+}, {restore: true});
+
+// Test the private methods do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#xVal"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#xVal"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#yVal"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#yVal"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 10");
+
+c.m().then(function(v) {
+  assert.sameValue(v, 42);
+}, $DONE).then($DONE, $DONE);
diff --git a/test/language/statements/class/fields-same-line-async-method-string-literal-names.js b/test/language/statements/class/fields-same-line-async-method-string-literal-names.js
index 18986604f0fc88f6607384b10a093dd70d892d21..31354912ccb78166fb105f175da0c92b01643641 100644
--- a/test/language/statements/class/fields-same-line-async-method-string-literal-names.js
+++ b/test/language/statements/class/fields-same-line-async-method-string-literal-names.js
@@ -24,7 +24,7 @@ info: |
 class C {
   async m() { return 42; } 'a'; "b"; 'c' = 39;
   "d" = 42;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-same-line-gen-computed-names.js b/test/language/statements/class/fields-same-line-gen-computed-names.js
index bfd85d84ad782bb7cdd57a2ceb23d1146e1f3133..ac6ca3430b9b89321805edf8b1b500b5a1f1eda4 100644
--- a/test/language/statements/class/fields-same-line-gen-computed-names.js
+++ b/test/language/statements/class/fields-same-line-gen-computed-names.js
@@ -25,7 +25,7 @@ var x = "b";
 
 class C {
   [x] = 42; [10] = "meep"; ["not initialized"]; *m() { return 42; }
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-same-line-gen-computed-symbol-names.js b/test/language/statements/class/fields-same-line-gen-computed-symbol-names.js
index 82b5440f04752fb690ad5aca416bc272f15f74fb..1e3724bf9212d53fee60e4615dd61ccbe6321b92 100644
--- a/test/language/statements/class/fields-same-line-gen-computed-symbol-names.js
+++ b/test/language/statements/class/fields-same-line-gen-computed-symbol-names.js
@@ -26,7 +26,7 @@ var y = Symbol();
 
 class C {
   [x]; [y] = 42; *m() { return 42; }
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-same-line-gen-literal-names.js b/test/language/statements/class/fields-same-line-gen-literal-names.js
index a473fda3f41ce247a99960cd242c87988b4ba005..4e3c4e3d7274b8300da0234c3c43479ff57f8894 100644
--- a/test/language/statements/class/fields-same-line-gen-literal-names.js
+++ b/test/language/statements/class/fields-same-line-gen-literal-names.js
@@ -26,7 +26,7 @@ const fn = function() {}
 class C {
   a; b = 42;
   c = fn; *m() { return 42; }
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-same-line-gen-private-names.js b/test/language/statements/class/fields-same-line-gen-private-names.js
index 435c2c8fd97f5c2a725918676da91a7898615049..20a6fc1474633e427e289c20aed9f4b13adf3992 100644
--- a/test/language/statements/class/fields-same-line-gen-private-names.js
+++ b/test/language/statements/class/fields-same-line-gen-private-names.js
@@ -2,31 +2,31 @@
 // - src/class-fields/private-names.case
 // - src/class-fields/productions/cls-decl-same-line-generator.template
 /*---
-description: static literal private names (field definitions followed by a generator method in the same line)
+description: private names (field definitions followed by a generator method in the same line)
 esid: prod-FieldDefinition
 features: [class-fields-private, class, class-fields-public, generators]
 flags: [generated]
 includes: [propertyHelper.js]
 info: |
-    ClassElement:
+    ClassElement :
       ...
       FieldDefinition ;
 
-    FieldDefinition:
+    FieldDefinition :
       ClassElementName Initializer_opt
 
-    ClassElementName:
+    ClassElementName :
       PrivateName
 
-    PrivateName:
-      #IdentifierName
+    PrivateName :
+      # IdentifierName
 
 ---*/
 
 
 class C {
   #x; #y; *m() { return 42; }
-x() {
+  x() {
     this.#x = 42;
     return this.#x;
   }
diff --git a/test/language/statements/class/fields-same-line-gen-static-private-fields.js b/test/language/statements/class/fields-same-line-gen-static-private-fields.js
new file mode 100644
index 0000000000000000000000000000000000000000..30df3ef646d959a13b329e65e88d50b30700589a
--- /dev/null
+++ b/test/language/statements/class/fields-same-line-gen-static-private-fields.js
@@ -0,0 +1,66 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-fields.case
+// - src/class-fields/productions/cls-decl-same-line-generator.template
+/*---
+description: static private fields (field definitions followed by a generator method in the same line)
+esid: prod-FieldDefinition
+features: [class-static-fields-private, class, class-fields-public, generators]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+class C {
+  static #x; static #y; *m() { return 42; }
+  static x() {
+    this.#x = 42;
+    return this.#x;
+  }
+  static y() {
+    this.#y = 43;
+    return this.#y;
+  }
+}
+
+var c = new C();
+
+assert.sameValue(c.m().next().value, 42);
+assert.sameValue(c.m, C.prototype.m);
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+
+verifyProperty(C.prototype, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private fields do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#x"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#x"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#y"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#y"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 10");
diff --git a/test/language/statements/class/fields-same-line-gen-static-private-methods.js b/test/language/statements/class/fields-same-line-gen-static-private-methods.js
new file mode 100644
index 0000000000000000000000000000000000000000..a1c6037d4ff3b8c66f6fc3238e4154e0b46ed4f7
--- /dev/null
+++ b/test/language/statements/class/fields-same-line-gen-static-private-methods.js
@@ -0,0 +1,72 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-methods.case
+// - src/class-fields/productions/cls-decl-same-line-generator.template
+/*---
+description: static private methods (field definitions followed by a generator method in the same line)
+esid: prod-FieldDefinition
+features: [class-static-methods-private, class, class-fields-public, generators]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+class C {
+  static #xVal; static #yVal; *m() { return 42; }
+  static #x(value) {
+    this.#xVal = value;
+    return this.#xVal;
+  }
+  static #y(value) {
+    this.#y = value;
+    return this.#yVal;
+  }
+  static x() {
+    return this.#x(42);
+  }
+  static y() {
+    return this.#y(43);
+  }
+}
+
+var c = new C();
+
+assert.sameValue(c.m().next().value, 42);
+assert.sameValue(c.m, C.prototype.m);
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+
+verifyProperty(C.prototype, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private methods do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#xVal"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#xVal"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#yVal"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#yVal"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 10");
diff --git a/test/language/statements/class/fields-same-line-gen-string-literal-names.js b/test/language/statements/class/fields-same-line-gen-string-literal-names.js
index 2b86174641d739d2213c1caf7c5fad72f75e420e..f4b52e635ca210821c2c5bc484dbf54d592ddca8 100644
--- a/test/language/statements/class/fields-same-line-gen-string-literal-names.js
+++ b/test/language/statements/class/fields-same-line-gen-string-literal-names.js
@@ -24,7 +24,7 @@ info: |
 class C {
   'a'; "b"; 'c' = 39;
   "d" = 42; *m() { return 42; }
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-same-line-method-computed-names.js b/test/language/statements/class/fields-same-line-method-computed-names.js
index b9b64e5424cb64d9c81e7eecbb0e02f75a936ee4..f5dbafb3081a31d86fc56b4067e4e639c2f22796 100644
--- a/test/language/statements/class/fields-same-line-method-computed-names.js
+++ b/test/language/statements/class/fields-same-line-method-computed-names.js
@@ -25,7 +25,7 @@ var x = "b";
 
 class C {
   [x] = 42; [10] = "meep"; ["not initialized"]; m() { return 42; }
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-same-line-method-computed-symbol-names.js b/test/language/statements/class/fields-same-line-method-computed-symbol-names.js
index ee373b465d95466a60afa96a9c07dfb648e1732e..4080a9897bb351db1e818932d33408056ff02ca6 100644
--- a/test/language/statements/class/fields-same-line-method-computed-symbol-names.js
+++ b/test/language/statements/class/fields-same-line-method-computed-symbol-names.js
@@ -26,7 +26,7 @@ var y = Symbol();
 
 class C {
   [x]; [y] = 42; m() { return 42; }
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-same-line-method-literal-names.js b/test/language/statements/class/fields-same-line-method-literal-names.js
index e3caff61aa8cfa2ebc18873e08fdd8ffb4a859b2..95c05ce2a30c651384391ca2b8a066267d7be0d1 100644
--- a/test/language/statements/class/fields-same-line-method-literal-names.js
+++ b/test/language/statements/class/fields-same-line-method-literal-names.js
@@ -26,7 +26,7 @@ const fn = function() {}
 class C {
   a; b = 42;
   c = fn; m() { return 42; }
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-same-line-method-private-names.js b/test/language/statements/class/fields-same-line-method-private-names.js
index 070db9093b4304de9edfd660d4ce8fb5b69a7f84..2a66f071feb8237e406823e0870bd38bee48fd85 100644
--- a/test/language/statements/class/fields-same-line-method-private-names.js
+++ b/test/language/statements/class/fields-same-line-method-private-names.js
@@ -2,31 +2,31 @@
 // - src/class-fields/private-names.case
 // - src/class-fields/productions/cls-decl-same-line-method.template
 /*---
-description: static literal private names (field definitions followed by a method in the same line)
+description: private names (field definitions followed by a method in the same line)
 esid: prod-FieldDefinition
 features: [class-fields-private, class, class-fields-public]
 flags: [generated]
 includes: [propertyHelper.js]
 info: |
-    ClassElement:
+    ClassElement :
       ...
       FieldDefinition ;
 
-    FieldDefinition:
+    FieldDefinition :
       ClassElementName Initializer_opt
 
-    ClassElementName:
+    ClassElementName :
       PrivateName
 
-    PrivateName:
-      #IdentifierName
+    PrivateName :
+      # IdentifierName
 
 ---*/
 
 
 class C {
   #x; #y; m() { return 42; }
-x() {
+  x() {
     this.#x = 42;
     return this.#x;
   }
diff --git a/test/language/statements/class/fields-same-line-method-static-private-fields.js b/test/language/statements/class/fields-same-line-method-static-private-fields.js
new file mode 100644
index 0000000000000000000000000000000000000000..6894e6f7ab1eaed04298ad2dffdc5f2bea927107
--- /dev/null
+++ b/test/language/statements/class/fields-same-line-method-static-private-fields.js
@@ -0,0 +1,66 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-fields.case
+// - src/class-fields/productions/cls-decl-same-line-method.template
+/*---
+description: static private fields (field definitions followed by a method in the same line)
+esid: prod-FieldDefinition
+features: [class-static-fields-private, class, class-fields-public]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+class C {
+  static #x; static #y; m() { return 42; }
+  static x() {
+    this.#x = 42;
+    return this.#x;
+  }
+  static y() {
+    this.#y = 43;
+    return this.#y;
+  }
+}
+
+var c = new C();
+
+assert.sameValue(c.m(), 42);
+assert.sameValue(c.m, C.prototype.m);
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+
+verifyProperty(C.prototype, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private fields do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#x"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#x"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#y"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#y"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#y"), false, "test 10");
diff --git a/test/language/statements/class/fields-same-line-method-static-private-methods.js b/test/language/statements/class/fields-same-line-method-static-private-methods.js
new file mode 100644
index 0000000000000000000000000000000000000000..fd2bf8fd769618c6073168467de70b5c8d2909d1
--- /dev/null
+++ b/test/language/statements/class/fields-same-line-method-static-private-methods.js
@@ -0,0 +1,72 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-methods.case
+// - src/class-fields/productions/cls-decl-same-line-method.template
+/*---
+description: static private methods (field definitions followed by a method in the same line)
+esid: prod-FieldDefinition
+features: [class-static-methods-private, class, class-fields-public]
+flags: [generated]
+includes: [propertyHelper.js]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+class C {
+  static #xVal; static #yVal; m() { return 42; }
+  static #x(value) {
+    this.#xVal = value;
+    return this.#xVal;
+  }
+  static #y(value) {
+    this.#y = value;
+    return this.#yVal;
+  }
+  static x() {
+    return this.#x(42);
+  }
+  static y() {
+    return this.#y(43);
+  }
+}
+
+var c = new C();
+
+assert.sameValue(c.m(), 42);
+assert.sameValue(c.m, C.prototype.m);
+assert.sameValue(Object.hasOwnProperty.call(c, "m"), false);
+
+verifyProperty(C.prototype, "m", {
+  enumerable: false,
+  configurable: true,
+  writable: true,
+});
+
+// Test the private methods do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#xVal"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#xVal"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#yVal"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#yVal"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 10");
diff --git a/test/language/statements/class/fields-same-line-method-string-literal-names.js b/test/language/statements/class/fields-same-line-method-string-literal-names.js
index 50ffafe2f960854b4d28077e7ca733b5e7e8b306..fca2d77d1195f198bc6bc40ff73df4120bb008ca 100644
--- a/test/language/statements/class/fields-same-line-method-string-literal-names.js
+++ b/test/language/statements/class/fields-same-line-method-string-literal-names.js
@@ -24,7 +24,7 @@ info: |
 class C {
   'a'; "b"; 'c' = 39;
   "d" = 42; m() { return 42; }
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-static-comp-name-init-err-contains-arguments.js b/test/language/statements/class/fields-static-comp-name-init-err-contains-arguments.js
index 666a41ca8b6451d72a1b0f67c99f91c2d6ede9eb..a18b90f529e0a77b7046dfc30320732a6a28e7a9 100644
--- a/test/language/statements/class/fields-static-comp-name-init-err-contains-arguments.js
+++ b/test/language/statements/class/fields-static-comp-name-init-err-contains-arguments.js
@@ -4,7 +4,7 @@
 /*---
 description: Syntax error if `arguments` used in class field (static computed ClassElementName)
 esid: sec-class-definitions-static-semantics-early-errors
-features: [class, class-fields-public]
+features: [class, class-fields-public, class-static-fields-public]
 flags: [generated]
 negative:
   phase: parse
diff --git a/test/language/statements/class/fields-static-comp-name-init-err-contains-super.js b/test/language/statements/class/fields-static-comp-name-init-err-contains-super.js
index 12d148d6138a0f15fd6c21941e5d2cc49978803f..258c0dbd2b0574315e98d0405a90a3169bc37eaf 100644
--- a/test/language/statements/class/fields-static-comp-name-init-err-contains-super.js
+++ b/test/language/statements/class/fields-static-comp-name-init-err-contains-super.js
@@ -4,7 +4,7 @@
 /*---
 description: Syntax error if `super()` used in class field (static computed ClassElementName)
 esid: sec-class-definitions-static-semantics-early-errors
-features: [class, class-fields-public]
+features: [class, class-fields-public, class-static-fields-public]
 flags: [generated]
 negative:
   phase: parse
diff --git a/test/language/statements/class/fields-static-literal-init-err-contains-arguments.js b/test/language/statements/class/fields-static-literal-init-err-contains-arguments.js
index cd4f184292e805efb86f307cf4b830ea414435c4..449f385889c90325f3125922a098e2cd3c01ab30 100644
--- a/test/language/statements/class/fields-static-literal-init-err-contains-arguments.js
+++ b/test/language/statements/class/fields-static-literal-init-err-contains-arguments.js
@@ -4,7 +4,7 @@
 /*---
 description: Syntax error if `arguments` used in class field (static literal ClassElementName)
 esid: sec-class-definitions-static-semantics-early-errors
-features: [class, class-fields-public]
+features: [class, class-fields-public, class-static-fields-public]
 flags: [generated]
 negative:
   phase: parse
diff --git a/test/language/statements/class/fields-static-literal-init-err-contains-super.js b/test/language/statements/class/fields-static-literal-init-err-contains-super.js
index 64334ba094f20ae366415c7bc62a87b855d54fcc..fb04feabb58f69cdb6922951cb205c3335994ea6 100644
--- a/test/language/statements/class/fields-static-literal-init-err-contains-super.js
+++ b/test/language/statements/class/fields-static-literal-init-err-contains-super.js
@@ -4,7 +4,7 @@
 /*---
 description: Syntax error if `super()` used in class field (static literal ClassElementName)
 esid: sec-class-definitions-static-semantics-early-errors
-features: [class, class-fields-public]
+features: [class, class-fields-public, class-static-fields-public]
 flags: [generated]
 negative:
   phase: parse
diff --git a/test/language/statements/class/fields-static-private-init-err-contains-arguments.js b/test/language/statements/class/fields-static-private-init-err-contains-arguments.js
index dc4b9a96bdba8a793385fd5225e75ec7468b843b..97f0d66ed017102a10d8110883f88e647b5db501 100644
--- a/test/language/statements/class/fields-static-private-init-err-contains-arguments.js
+++ b/test/language/statements/class/fields-static-private-init-err-contains-arguments.js
@@ -4,7 +4,7 @@
 /*---
 description: Syntax error if `arguments` used in class field (static PrivateName)
 esid: sec-class-definitions-static-semantics-early-errors
-features: [class, class-fields-public]
+features: [class, class-fields-public, class-static-fields-private]
 flags: [generated]
 negative:
   phase: parse
diff --git a/test/language/statements/class/fields-static-private-init-err-contains-super.js b/test/language/statements/class/fields-static-private-init-err-contains-super.js
index 19423553eafe3970ea33d8ccc6468c2a455073ea..475696926c6b42f1ac3aeb1d9949f379fdd8bbaa 100644
--- a/test/language/statements/class/fields-static-private-init-err-contains-super.js
+++ b/test/language/statements/class/fields-static-private-init-err-contains-super.js
@@ -4,7 +4,7 @@
 /*---
 description: Syntax error if `super()` used in class field (static PrivateName)
 esid: sec-class-definitions-static-semantics-early-errors
-features: [class, class-fields-public]
+features: [class, class-fields-public, class-static-fields-private]
 flags: [generated]
 negative:
   phase: parse
diff --git a/test/language/statements/class/fields-static-string-literal-name-init-err-contains-arguments.js b/test/language/statements/class/fields-static-string-literal-name-init-err-contains-arguments.js
index c44b99564153e1353320b6f8f468d83b351a27d6..5c3decb17947e6bd8e7995c2ff3b120835520f80 100644
--- a/test/language/statements/class/fields-static-string-literal-name-init-err-contains-arguments.js
+++ b/test/language/statements/class/fields-static-string-literal-name-init-err-contains-arguments.js
@@ -4,7 +4,7 @@
 /*---
 description: Syntax error if `arguments` used in class field (static string literal ClassElementName)
 esid: sec-class-definitions-static-semantics-early-errors
-features: [class, class-fields-public]
+features: [class, class-fields-public, class-static-fields-public]
 flags: [generated]
 negative:
   phase: parse
diff --git a/test/language/statements/class/fields-static-string-literal-name-init-err-contains-super.js b/test/language/statements/class/fields-static-string-literal-name-init-err-contains-super.js
index 39cf2cb52ae6c2e8f719dbf6dcfceec62317f444..b0d5dc66bb82993e1e42505f56553677b01cf4b0 100644
--- a/test/language/statements/class/fields-static-string-literal-name-init-err-contains-super.js
+++ b/test/language/statements/class/fields-static-string-literal-name-init-err-contains-super.js
@@ -4,7 +4,7 @@
 /*---
 description: Syntax error if `super()` used in class field (static string literal ClassElementName)
 esid: sec-class-definitions-static-semantics-early-errors
-features: [class, class-fields-public]
+features: [class, class-fields-public, class-static-fields-public]
 flags: [generated]
 negative:
   phase: parse
diff --git a/test/language/statements/class/fields-wrapped-in-sc-computed-names.js b/test/language/statements/class/fields-wrapped-in-sc-computed-names.js
index 69b5bce83346bc8a52cdb31adf23c5fb6fe7852b..5ab17511d15b768d43f0b3a84895f459ac8d39eb 100644
--- a/test/language/statements/class/fields-wrapped-in-sc-computed-names.js
+++ b/test/language/statements/class/fields-wrapped-in-sc-computed-names.js
@@ -27,7 +27,7 @@ class C {
   ;;;;
   ;;;;;;[x] = 42; [10] = "meep"; ["not initialized"];;;;;;;
   ;;;;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-wrapped-in-sc-computed-symbol-names.js b/test/language/statements/class/fields-wrapped-in-sc-computed-symbol-names.js
index cef596bb745538ea535509a694aa95eec778dc3d..e81f993692ed5ec0b6e9adbd41463a4b29551502 100644
--- a/test/language/statements/class/fields-wrapped-in-sc-computed-symbol-names.js
+++ b/test/language/statements/class/fields-wrapped-in-sc-computed-symbol-names.js
@@ -28,7 +28,7 @@ class C {
   ;;;;
   ;;;;;;[x]; [y] = 42;;;;;;;
   ;;;;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-wrapped-in-sc-literal-names.js b/test/language/statements/class/fields-wrapped-in-sc-literal-names.js
index caf9edbe98074729c74abd26a5c5d91233a897c5..2364d417b68cd10cda5e5ef43f353dfbfac62672 100644
--- a/test/language/statements/class/fields-wrapped-in-sc-literal-names.js
+++ b/test/language/statements/class/fields-wrapped-in-sc-literal-names.js
@@ -28,7 +28,7 @@ class C {
   ;;;;;;a; b = 42;
   c = fn;;;;;;;
   ;;;;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/fields-wrapped-in-sc-private-names.js b/test/language/statements/class/fields-wrapped-in-sc-private-names.js
index 440650c8323740c5155859d7f1dbf8aba36a9e3c..5a8130a5cce2c8e45dcc0c322f1a0908297218f0 100644
--- a/test/language/statements/class/fields-wrapped-in-sc-private-names.js
+++ b/test/language/statements/class/fields-wrapped-in-sc-private-names.js
@@ -2,23 +2,23 @@
 // - src/class-fields/private-names.case
 // - src/class-fields/productions/cls-decl-wrapped-in-sc.template
 /*---
-description: static literal private names (fields definition wrapped in semicolons)
+description: private names (fields definition wrapped in semicolons)
 esid: prod-FieldDefinition
 features: [class-fields-private, class, class-fields-public]
 flags: [generated]
 info: |
-    ClassElement:
+    ClassElement :
       ...
       FieldDefinition ;
 
-    FieldDefinition:
+    FieldDefinition :
       ClassElementName Initializer_opt
 
-    ClassElementName:
+    ClassElementName :
       PrivateName
 
-    PrivateName:
-      #IdentifierName
+    PrivateName :
+      # IdentifierName
 
 ---*/
 
@@ -27,7 +27,7 @@ class C {
   ;;;;
   ;;;;;;#x; #y;;;;;;;
   ;;;;
-x() {
+  x() {
     this.#x = 42;
     return this.#x;
   }
diff --git a/test/language/statements/class/fields-static-private-methods.js b/test/language/statements/class/fields-wrapped-in-sc-static-private-fields.js
similarity index 69%
rename from test/language/statements/class/fields-static-private-methods.js
rename to test/language/statements/class/fields-wrapped-in-sc-static-private-fields.js
index 3bf11c26da7be8a741fe8044c45fe226620a16bc..02eade5d9d981da5358da67b0e7f49f5157eb8e8 100644
--- a/test/language/statements/class/fields-static-private-methods.js
+++ b/test/language/statements/class/fields-wrapped-in-sc-static-private-fields.js
@@ -1,32 +1,44 @@
 // This file was procedurally generated from the following sources:
-// - src/class-fields/static-private-methods.case
-// - src/class-fields/default/cls-decl.template
+// - src/class-fields/static-private-fields.case
+// - src/class-fields/productions/cls-decl-wrapped-in-sc.template
 /*---
-description: literal private names (field definitions in a class declaration)
+description: static private fields (fields definition wrapped in semicolons)
 esid: prod-FieldDefinition
-features: [class-static-methods-private, class, class-fields-public]
+features: [class-static-fields-private, class, class-fields-public]
 flags: [generated]
 info: |
-    ClassElement:
+    ClassElement :
       ...
       static FieldDefinition ;
 
-    FieldDefinition:
+    FieldDefinition :
       ClassElementName Initializer_opt
 
-    ClassElementName:
+    ClassElementName :
       PrivateName
 
-    PrivateName:
+    PrivateName :
       # IdentifierName
 
 ---*/
 
 
 class C {
-  static #xVal; static #yVal
+  ;;;;
+  ;;;;;;static #x; static #y;;;;;;;
+  ;;;;
+  static x() {
+    this.#x = 42;
+    return this.#x;
+  }
+  static y() {
+    this.#y = 43;
+    return this.#y;
+  }
 }
 
+var c = new C();
+
 // Test the private fields do not appear as properties before set to value
 assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#x"), false, "test 1");
 assert.sameValue(Object.hasOwnProperty.call(C, "#x"), false, "test 2");
diff --git a/test/language/statements/class/fields-wrapped-in-sc-static-private-methods.js b/test/language/statements/class/fields-wrapped-in-sc-static-private-methods.js
new file mode 100644
index 0000000000000000000000000000000000000000..1ad7a3ab0443c8d23f3f4bd68094f969c4348238
--- /dev/null
+++ b/test/language/statements/class/fields-wrapped-in-sc-static-private-methods.js
@@ -0,0 +1,63 @@
+// This file was procedurally generated from the following sources:
+// - src/class-fields/static-private-methods.case
+// - src/class-fields/productions/cls-decl-wrapped-in-sc.template
+/*---
+description: static private methods (fields definition wrapped in semicolons)
+esid: prod-FieldDefinition
+features: [class-static-methods-private, class, class-fields-public]
+flags: [generated]
+info: |
+    ClassElement :
+      ...
+      static FieldDefinition ;
+
+    FieldDefinition :
+      ClassElementName Initializer_opt
+
+    ClassElementName :
+      PrivateName
+
+    PrivateName :
+      # IdentifierName
+
+---*/
+
+
+class C {
+  ;;;;
+  ;;;;;;static #xVal; static #yVal;;;;;;;
+  ;;;;
+  static #x(value) {
+    this.#xVal = value;
+    return this.#xVal;
+  }
+  static #y(value) {
+    this.#y = value;
+    return this.#yVal;
+  }
+  static x() {
+    return this.#x(42);
+  }
+  static y() {
+    return this.#y(43);
+  }
+}
+
+var c = new C();
+
+// Test the private methods do not appear as properties before set to value
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#xVal"), false, "test 1");
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 2");
+assert.sameValue(Object.hasOwnProperty.call(c, "#xVal"), false, "test 3");
+
+assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#yVal"), false, "test 4");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 5");
+assert.sameValue(Object.hasOwnProperty.call(c, "#yVal"), false, "test 6");
+
+// Test if private fields can be sucessfully accessed and set to value
+assert.sameValue(C.x(), 42, "test 7");
+assert.sameValue(C.y(), 43, "test 8");
+
+// Test the private fields do not appear as properties before after set to value
+assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 9");
+assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 10");
diff --git a/test/language/statements/class/fields-wrapped-in-sc-string-literal-names.js b/test/language/statements/class/fields-wrapped-in-sc-string-literal-names.js
index e1ba62e97060ea1d97fc6015e47ce227e4a886b1..1acfc2fe29449a2adeb6a561853c93714ed26a64 100644
--- a/test/language/statements/class/fields-wrapped-in-sc-string-literal-names.js
+++ b/test/language/statements/class/fields-wrapped-in-sc-string-literal-names.js
@@ -26,7 +26,7 @@ class C {
   ;;;;;;'a'; "b"; 'c' = 39;
   "d" = 42;;;;;;;
   ;;;;
-
+  
 }
 
 var c = new C();
diff --git a/test/language/statements/class/privatename-not-valid-earlyerr-script-7.js b/test/language/statements/class/privatename-not-valid-earlyerr-script-7.js
index 58c14e57dcd3425c79dc44db15d235237a0a46e8..bfff8da44ec1b9137f94a489d2e7f6b52249f532 100644
--- a/test/language/statements/class/privatename-not-valid-earlyerr-script-7.js
+++ b/test/language/statements/class/privatename-not-valid-earlyerr-script-7.js
@@ -9,7 +9,7 @@ info: |
 
     It is a Syntax Error if AllPrivateNamesValid of StatementList with an empty List as an argument is false unless the source code is eval code that is being processed by a direct eval.
 
-features: [class-fields-private]
+features: [class, class-fields-private]
 negative:
   phase: parse
   type: SyntaxError
diff --git a/test/language/statements/class/privatename-not-valid-earlyerr-script-8.js b/test/language/statements/class/privatename-not-valid-earlyerr-script-8.js
index c134b47409744a24a788fdcc7db9a13d08d1f54d..467b5ed045e050c1dab9f7295479fcaee537dd76 100644
--- a/test/language/statements/class/privatename-not-valid-earlyerr-script-8.js
+++ b/test/language/statements/class/privatename-not-valid-earlyerr-script-8.js
@@ -9,7 +9,7 @@ info: |
 
     It is a Syntax Error if AllPrivateNamesValid of StatementList with an empty List as an argument is false unless the source code is eval code that is being processed by a direct eval.
 
-features: [class-fields-private]
+features: [class, class-fields-private]
 negative:
   phase: parse
   type: SyntaxError