From f222b94f2a87033a54b97d5661ea3ef10ec16aa6 Mon Sep 17 00:00:00 2001
From: Rick Waldron <waldron.rick@gmail.com>
Date: Wed, 1 Aug 2018 14:20:57 -0400
Subject: [PATCH] Generate tests

---
 ...e-covered-member-expression-privatename.js |   2 +-
 ...elds-after-same-line-gen-computed-names.js |   2 +-
 ...ter-same-line-gen-computed-symbol-names.js |   2 +-
 ...ields-after-same-line-gen-literal-names.js |   2 +-
 ...ields-after-same-line-gen-private-names.js |  14 +--
 ...ter-same-line-gen-static-private-fields.js |  66 +++++++++++
 ...er-same-line-gen-static-private-methods.js |  72 ++++++++++++
 ...fter-same-line-gen-string-literal-names.js |   2 +-
 ...s-after-same-line-method-computed-names.js |   2 +-
 ...-same-line-method-computed-symbol-names.js |   2 +-
 ...ds-after-same-line-method-literal-names.js |   2 +-
 ...ds-after-same-line-method-private-names.js |  14 +--
 ...-same-line-method-static-private-fields.js |  66 +++++++++++
 ...same-line-method-static-private-methods.js |  72 ++++++++++++
 ...r-same-line-method-string-literal-names.js |   2 +-
 ...me-line-static-async-gen-computed-names.js |   2 +-
 ...-static-async-gen-computed-symbol-names.js |   2 +-
 ...ame-line-static-async-gen-literal-names.js |   2 +-
 ...ame-line-static-async-gen-private-names.js |  14 +--
 ...-static-async-gen-static-private-fields.js |  70 ++++++++++++
 ...static-async-gen-static-private-methods.js |  76 ++++++++++++
 ...e-static-async-gen-string-literal-names.js |   2 +-
 ...line-static-async-method-computed-names.js |   2 +-
 ...atic-async-method-computed-symbol-names.js |   2 +-
 ...-line-static-async-method-literal-names.js |   2 +-
 ...-line-static-async-method-private-names.js |  14 +--
 ...atic-async-method-static-private-fields.js |  69 +++++++++++
 ...tic-async-method-static-private-methods.js |  75 ++++++++++++
 ...tatic-async-method-string-literal-names.js |   2 +-
 ...ter-same-line-static-gen-computed-names.js |   2 +-
 ...e-line-static-gen-computed-symbol-names.js |   2 +-
 ...fter-same-line-static-gen-literal-names.js |   2 +-
 ...fter-same-line-static-gen-private-names.js |  14 +--
 ...e-line-static-gen-static-private-fields.js |  66 +++++++++++
 ...-line-static-gen-static-private-methods.js |  72 ++++++++++++
 ...me-line-static-gen-string-literal-names.js |   2 +-
 ...-same-line-static-method-computed-names.js |   2 +-
 ...ine-static-method-computed-symbol-names.js |   2 +-
 ...r-same-line-static-method-literal-names.js |   2 +-
 ...r-same-line-static-method-private-names.js |  14 +--
 ...ine-static-method-static-private-fields.js |  66 +++++++++++
 ...ne-static-method-static-private-methods.js |  72 ++++++++++++
 ...line-static-method-string-literal-names.js |   2 +-
 ...fields-computed-name-toprimitive-symbol.js |   2 +-
 .../class/fields-computed-name-toprimitive.js |   2 +-
 ...uted-variable-name-propname-constructor.js |  33 ------
 .../fields-ctor-called-after-fields-init.js   |   2 +-
 ...ls-direct-eval-err-contains-supercall-1.js |   3 +-
 ...ls-direct-eval-err-contains-supercall-2.js |  10 +-
 ...-cls-direct-eval-err-contains-supercall.js |   3 +-
 ...irect-eval-err-contains-superproperty-1.js |   5 +-
 ...irect-eval-err-contains-superproperty-2.js |  20 ++--
 ...-indirect-eval-err-contains-supercall-1.js |   3 +-
 ...-indirect-eval-err-contains-supercall-2.js |  10 +-
 ...ls-indirect-eval-err-contains-supercall.js |   3 +-
 ...irect-eval-err-contains-superproperty-1.js |   5 +-
 ...irect-eval-err-contains-superproperty-2.js |  20 ++--
 ...elds-direct-eval-err-contains-newtarget.js |   2 +-
 ...tion-error-computed-name-referenceerror.js |   2 +-
 ...ion-error-computed-name-toprimitive-err.js |   2 +-
 ...ed-name-toprimitive-returns-noncallable.js |  57 +++++++++
 ...uted-name-toprimitive-returns-nonobject.js |  56 +++++++++
 ...uation-error-computed-name-tostring-err.js |   2 +-
 ...luation-error-computed-name-valueof-err.js |   2 +-
 ...ds-indirect-eval-err-contains-newtarget.js |   2 +-
 .../class/fields-init-err-evaluation.js       |   2 +-
 .../fields-init-value-defined-after-class.js  |   2 +-
 .../class/fields-init-value-incremental.js    |   2 +-
 ...lds-multiple-definitions-computed-names.js |   2 +-
 ...tiple-definitions-computed-symbol-names.js |   2 +-
 ...elds-multiple-definitions-literal-names.js |   2 +-
 ...elds-multiple-definitions-private-names.js |  14 +--
 ...tiple-definitions-static-private-fields.js | 102 +++++++++++++++++
 ...efinitions-static-private-methods-proxy.js |  40 +++++++
 ...iple-definitions-static-private-methods.js | 108 ++++++++++++++++++
 ...ltiple-definitions-string-literal-names.js |   2 +-
 ...iple-stacked-definitions-computed-names.js |   2 +-
 ...acked-definitions-computed-symbol-names.js |   2 +-
 ...tiple-stacked-definitions-literal-names.js |   2 +-
 ...tiple-stacked-definitions-private-names.js |  14 +--
 ...acked-definitions-static-private-fields.js |  80 +++++++++++++
 ...cked-definitions-static-private-methods.js |  86 ++++++++++++++
 ...tacked-definitions-string-literal-names.js |   2 +-
 ...ds-new-no-sc-line-method-computed-names.js |   2 +-
 ...no-sc-line-method-computed-symbol-names.js |   2 +-
 ...lds-new-no-sc-line-method-literal-names.js |   2 +-
 ...lds-new-no-sc-line-method-private-names.js |  14 +--
 ...no-sc-line-method-static-private-fields.js |  67 +++++++++++
 ...o-sc-line-method-static-private-methods.js |  73 ++++++++++++
 ...-no-sc-line-method-string-literal-names.js |   2 +-
 .../fields-new-sc-line-gen-computed-names.js  |   2 +-
 ...s-new-sc-line-gen-computed-symbol-names.js |   2 +-
 .../fields-new-sc-line-gen-literal-names.js   |   2 +-
 .../fields-new-sc-line-gen-private-names.js   |  14 +--
 ...s-new-sc-line-gen-static-private-fields.js |  67 +++++++++++
 ...-new-sc-line-gen-static-private-methods.js |  73 ++++++++++++
 ...ds-new-sc-line-gen-string-literal-names.js |   2 +-
 ...ields-new-sc-line-method-computed-names.js |   2 +-
 ...ew-sc-line-method-computed-symbol-names.js |   2 +-
 ...fields-new-sc-line-method-literal-names.js |   2 +-
 ...fields-new-sc-line-method-private-names.js |  14 +--
 ...ew-sc-line-method-static-private-fields.js |  67 +++++++++++
 ...w-sc-line-method-static-private-methods.js |  73 ++++++++++++
 ...new-sc-line-method-string-literal-names.js |   2 +-
 ...vate-direct-eval-err-contains-arguments.js |  36 ++++++
 ...vate-direct-eval-err-contains-newtarget.js |  34 ++++++
 ...te-indirect-eval-err-contains-arguments.js |  36 ++++++
 ...te-indirect-eval-err-contains-newtarget.js |  35 ++++++
 .../class/fields-redeclaration-symbol.js      |   2 +-
 .../expressions/class/fields-redeclaration.js |   2 +-
 ...elds-regular-definitions-computed-names.js |   2 +-
 ...gular-definitions-computed-symbol-names.js |   2 +-
 ...ields-regular-definitions-literal-names.js |   2 +-
 ...ields-regular-definitions-private-names.js |  14 +--
 ...ular-definitions-static-private-fields.js} |  28 +++--
 ...ular-definitions-static-private-methods.js |  61 ++++++++++
 ...egular-definitions-string-literal-names.js |   2 +-
 ...elds-same-line-async-gen-computed-names.js |   2 +-
 ...me-line-async-gen-computed-symbol-names.js |   2 +-
 ...ields-same-line-async-gen-literal-names.js |   2 +-
 ...ields-same-line-async-gen-private-names.js |  14 +--
 ...me-line-async-gen-static-private-fields.js |  70 ++++++++++++
 ...e-line-async-gen-static-private-methods.js |  76 ++++++++++++
 ...ame-line-async-gen-string-literal-names.js |   2 +-
 ...s-same-line-async-method-computed-names.js |   2 +-
 ...line-async-method-computed-symbol-names.js |   2 +-
 ...ds-same-line-async-method-literal-names.js |   2 +-
 ...ds-same-line-async-method-private-names.js |  14 +--
 ...line-async-method-static-private-fields.js |  69 +++++++++++
 ...ine-async-method-static-private-methods.js |  75 ++++++++++++
 ...-line-async-method-string-literal-names.js |   2 +-
 .../fields-same-line-gen-computed-names.js    |   2 +-
 ...lds-same-line-gen-computed-symbol-names.js |   2 +-
 .../fields-same-line-gen-literal-names.js     |   2 +-
 .../fields-same-line-gen-private-names.js     |  14 +--
 ...lds-same-line-gen-static-private-fields.js |  66 +++++++++++
 ...ds-same-line-gen-static-private-methods.js |  72 ++++++++++++
 ...elds-same-line-gen-string-literal-names.js |   2 +-
 .../fields-same-line-method-computed-names.js |   2 +-
 ...-same-line-method-computed-symbol-names.js |   2 +-
 .../fields-same-line-method-literal-names.js  |   2 +-
 .../fields-same-line-method-private-names.js  |  14 +--
 ...-same-line-method-static-private-fields.js |  66 +++++++++++
 ...same-line-method-static-private-methods.js |  72 ++++++++++++
 ...s-same-line-method-string-literal-names.js |   2 +-
 ...c-comp-name-init-err-contains-arguments.js |  35 ++++++
 ...tatic-comp-name-init-err-contains-super.js |  28 +++++
 ...tic-literal-init-err-contains-arguments.js |  34 ++++++
 ...-static-literal-init-err-contains-super.js |  27 +++++
 ...tic-private-init-err-contains-arguments.js |  34 ++++++
 ...-static-private-init-err-contains-super.js |  27 +++++
 ...iteral-name-init-err-contains-arguments.js |  34 ++++++
 ...ng-literal-name-init-err-contains-super.js |  27 +++++
 .../fields-wrapped-in-sc-computed-names.js    |   2 +-
 ...lds-wrapped-in-sc-computed-symbol-names.js |   2 +-
 .../fields-wrapped-in-sc-literal-names.js     |   2 +-
 .../fields-wrapped-in-sc-private-names.js     |  14 +--
 ...lds-wrapped-in-sc-static-private-fields.js |  57 +++++++++
 ...ds-wrapped-in-sc-static-private-methods.js |  63 ++++++++++
 ...elds-wrapped-in-sc-string-literal-names.js |   2 +-
 ...ate-fields-proxy-default-handler-throws.js |  30 +++++
 ...ate-fields-proxy-default-handler-throws.js |  28 +++++
 ...te-methods-proxy-default-handler-throws.js |  31 +++++
 ...elds-after-same-line-gen-computed-names.js |   2 +-
 ...ter-same-line-gen-computed-symbol-names.js |   2 +-
 ...ields-after-same-line-gen-literal-names.js |   2 +-
 ...ields-after-same-line-gen-private-names.js |  14 +--
 ...ter-same-line-gen-static-private-fields.js |  66 +++++++++++
 ...er-same-line-gen-static-private-methods.js |  72 ++++++++++++
 ...fter-same-line-gen-string-literal-names.js |   2 +-
 ...s-after-same-line-method-computed-names.js |   2 +-
 ...-same-line-method-computed-symbol-names.js |   2 +-
 ...ds-after-same-line-method-literal-names.js |   2 +-
 ...ds-after-same-line-method-private-names.js |  14 +--
 ...-same-line-method-static-private-fields.js |  66 +++++++++++
 ...same-line-method-static-private-methods.js |  72 ++++++++++++
 ...r-same-line-method-string-literal-names.js |   2 +-
 ...me-line-static-async-gen-computed-names.js |   2 +-
 ...-static-async-gen-computed-symbol-names.js |   2 +-
 ...ame-line-static-async-gen-literal-names.js |   2 +-
 ...ame-line-static-async-gen-private-names.js |  14 +--
 ...-static-async-gen-static-private-fields.js |  70 ++++++++++++
 ...static-async-gen-static-private-methods.js |  76 ++++++++++++
 ...e-static-async-gen-string-literal-names.js |   2 +-
 ...line-static-async-method-computed-names.js |   2 +-
 ...atic-async-method-computed-symbol-names.js |   2 +-
 ...-line-static-async-method-literal-names.js |   2 +-
 ...-line-static-async-method-private-names.js |  14 +--
 ...atic-async-method-static-private-fields.js |  69 +++++++++++
 ...tic-async-method-static-private-methods.js |  75 ++++++++++++
 ...tatic-async-method-string-literal-names.js |   2 +-
 ...ter-same-line-static-gen-computed-names.js |   2 +-
 ...e-line-static-gen-computed-symbol-names.js |   2 +-
 ...fter-same-line-static-gen-literal-names.js |   2 +-
 ...fter-same-line-static-gen-private-names.js |  14 +--
 ...e-line-static-gen-static-private-fields.js |  66 +++++++++++
 ...-line-static-gen-static-private-methods.js |  72 ++++++++++++
 ...me-line-static-gen-string-literal-names.js |   2 +-
 ...-same-line-static-method-computed-names.js |   2 +-
 ...ine-static-method-computed-symbol-names.js |   2 +-
 ...r-same-line-static-method-literal-names.js |   2 +-
 ...r-same-line-static-method-private-names.js |  14 +--
 ...ine-static-method-static-private-fields.js |  66 +++++++++++
 ...ne-static-method-static-private-methods.js |  72 ++++++++++++
 ...line-static-method-string-literal-names.js |   2 +-
 ...s-comp-name-init-err-contains-arguments.js |  35 ++++++
 ...ields-comp-name-init-err-contains-super.js |  28 +++++
 ...fields-computed-name-toprimitive-symbol.js |   2 +-
 .../class/fields-computed-name-toprimitive.js |   2 +-
 ...uted-variable-name-propname-constructor.js |  33 ------
 .../fields-ctor-called-after-fields-init.js   |   2 +-
 ...ls-direct-eval-err-contains-supercall-1.js |   3 +-
 ...ls-direct-eval-err-contains-supercall-2.js |  10 +-
 ...-cls-direct-eval-err-contains-supercall.js |   3 +-
 ...irect-eval-err-contains-superproperty-1.js |   3 +-
 ...irect-eval-err-contains-superproperty-2.js |  18 ++-
 ...-indirect-eval-err-contains-supercall-1.js |   7 +-
 ...-indirect-eval-err-contains-supercall-2.js |  14 +--
 ...ls-indirect-eval-err-contains-supercall.js |   7 +-
 ...irect-eval-err-contains-superproperty-1.js |   7 +-
 ...irect-eval-err-contains-superproperty-2.js |  22 ++--
 ...elds-direct-eval-err-contains-newtarget.js |   2 +-
 ...tion-error-computed-name-referenceerror.js |   2 +-
 ...ion-error-computed-name-toprimitive-err.js |   2 +-
 ...ed-name-toprimitive-returns-noncallable.js |  57 +++++++++
 ...uted-name-toprimitive-returns-nonobject.js |  56 +++++++++
 ...uation-error-computed-name-tostring-err.js |   2 +-
 ...luation-error-computed-name-valueof-err.js |   2 +-
 ...ds-indirect-eval-err-contains-newtarget.js |   2 +-
 .../class/fields-init-err-evaluation.js       |   2 +-
 .../fields-init-value-defined-after-class.js  |   2 +-
 .../class/fields-init-value-incremental.js    |   2 +-
 ...lds-multiple-definitions-computed-names.js |   2 +-
 ...tiple-definitions-computed-symbol-names.js |   2 +-
 ...elds-multiple-definitions-literal-names.js |   2 +-
 ...elds-multiple-definitions-private-names.js |  14 +--
 ...tiple-definitions-static-private-fields.js | 102 +++++++++++++++++
 ...iple-definitions-static-private-methods.js | 108 ++++++++++++++++++
 ...ltiple-definitions-string-literal-names.js |   2 +-
 ...iple-stacked-definitions-computed-names.js |   2 +-
 ...acked-definitions-computed-symbol-names.js |   2 +-
 ...tiple-stacked-definitions-literal-names.js |   2 +-
 ...tiple-stacked-definitions-private-names.js |  14 +--
 ...acked-definitions-static-private-fields.js |  80 +++++++++++++
 ...cked-definitions-static-private-methods.js |  86 ++++++++++++++
 ...tacked-definitions-string-literal-names.js |   2 +-
 ...ds-new-no-sc-line-method-computed-names.js |   2 +-
 ...no-sc-line-method-computed-symbol-names.js |   2 +-
 ...lds-new-no-sc-line-method-literal-names.js |   2 +-
 ...lds-new-no-sc-line-method-private-names.js |  14 +--
 ...no-sc-line-method-static-private-fields.js |  67 +++++++++++
 ...o-sc-line-method-static-private-methods.js |  73 ++++++++++++
 ...-no-sc-line-method-string-literal-names.js |   2 +-
 .../fields-new-sc-line-gen-computed-names.js  |   2 +-
 ...s-new-sc-line-gen-computed-symbol-names.js |   2 +-
 .../fields-new-sc-line-gen-literal-names.js   |   2 +-
 .../fields-new-sc-line-gen-private-names.js   |  14 +--
 ...s-new-sc-line-gen-static-private-fields.js |  67 +++++++++++
 ...-new-sc-line-gen-static-private-methods.js |  73 ++++++++++++
 ...ds-new-sc-line-gen-string-literal-names.js |   2 +-
 ...ields-new-sc-line-method-computed-names.js |   2 +-
 ...ew-sc-line-method-computed-symbol-names.js |   2 +-
 ...fields-new-sc-line-method-literal-names.js |   2 +-
 ...fields-new-sc-line-method-private-names.js |  14 +--
 ...ew-sc-line-method-static-private-fields.js |  67 +++++++++++
 ...w-sc-line-method-static-private-methods.js |  73 ++++++++++++
 ...new-sc-line-method-string-literal-names.js |   2 +-
 ...vate-direct-eval-err-contains-arguments.js |  36 ++++++
 ...vate-direct-eval-err-contains-newtarget.js |  34 ++++++
 ...te-indirect-eval-err-contains-arguments.js |  36 ++++++
 ...te-indirect-eval-err-contains-newtarget.js |  35 ++++++
 .../class/fields-redeclaration-symbol.js      |   2 +-
 .../statements/class/fields-redeclaration.js  |   2 +-
 ...elds-regular-definitions-computed-names.js |   2 +-
 ...gular-definitions-computed-symbol-names.js |   2 +-
 ...ields-regular-definitions-literal-names.js |   2 +-
 ...ields-regular-definitions-private-names.js |  14 +--
 ...ular-definitions-static-private-fields.js} |  24 ++--
 ...ular-definitions-static-private-methods.js |  61 ++++++++++
 ...egular-definitions-string-literal-names.js |   2 +-
 ...elds-same-line-async-gen-computed-names.js |   2 +-
 ...me-line-async-gen-computed-symbol-names.js |   2 +-
 ...ields-same-line-async-gen-literal-names.js |   2 +-
 ...ields-same-line-async-gen-private-names.js |  14 +--
 ...me-line-async-gen-static-private-fields.js |  70 ++++++++++++
 ...e-line-async-gen-static-private-methods.js |  76 ++++++++++++
 ...ame-line-async-gen-string-literal-names.js |   2 +-
 ...s-same-line-async-method-computed-names.js |   2 +-
 ...line-async-method-computed-symbol-names.js |   2 +-
 ...ds-same-line-async-method-literal-names.js |   2 +-
 ...ds-same-line-async-method-private-names.js |  14 +--
 ...line-async-method-static-private-fields.js |  69 +++++++++++
 ...ine-async-method-static-private-methods.js |  75 ++++++++++++
 ...-line-async-method-string-literal-names.js |   2 +-
 .../fields-same-line-gen-computed-names.js    |   2 +-
 ...lds-same-line-gen-computed-symbol-names.js |   2 +-
 .../fields-same-line-gen-literal-names.js     |   2 +-
 .../fields-same-line-gen-private-names.js     |  14 +--
 ...lds-same-line-gen-static-private-fields.js |  66 +++++++++++
 ...ds-same-line-gen-static-private-methods.js |  72 ++++++++++++
 ...elds-same-line-gen-string-literal-names.js |   2 +-
 .../fields-same-line-method-computed-names.js |   2 +-
 ...-same-line-method-computed-symbol-names.js |   2 +-
 .../fields-same-line-method-literal-names.js  |   2 +-
 .../fields-same-line-method-private-names.js  |  14 +--
 ...-same-line-method-static-private-fields.js |  66 +++++++++++
 ...same-line-method-static-private-methods.js |  72 ++++++++++++
 ...s-same-line-method-string-literal-names.js |   2 +-
 ...c-comp-name-init-err-contains-arguments.js |   2 +-
 ...tatic-comp-name-init-err-contains-super.js |   2 +-
 ...tic-literal-init-err-contains-arguments.js |   2 +-
 ...-static-literal-init-err-contains-super.js |   2 +-
 ...tic-private-init-err-contains-arguments.js |   2 +-
 ...-static-private-init-err-contains-super.js |   2 +-
 ...iteral-name-init-err-contains-arguments.js |   2 +-
 ...ng-literal-name-init-err-contains-super.js |   2 +-
 .../fields-wrapped-in-sc-computed-names.js    |   2 +-
 ...lds-wrapped-in-sc-computed-symbol-names.js |   2 +-
 .../fields-wrapped-in-sc-literal-names.js     |   2 +-
 .../fields-wrapped-in-sc-private-names.js     |  14 +--
 ...ds-wrapped-in-sc-static-private-fields.js} |  30 +++--
 ...ds-wrapped-in-sc-static-private-methods.js |  63 ++++++++++
 ...elds-wrapped-in-sc-string-literal-names.js |   2 +-
 ...privatename-not-valid-earlyerr-script-7.js |   2 +-
 ...privatename-not-valid-earlyerr-script-8.js |   2 +-
 325 files changed, 6187 insertions(+), 622 deletions(-)
 create mode 100644 test/language/expressions/class/fields-after-same-line-gen-static-private-fields.js
 create mode 100644 test/language/expressions/class/fields-after-same-line-gen-static-private-methods.js
 create mode 100644 test/language/expressions/class/fields-after-same-line-method-static-private-fields.js
 create mode 100644 test/language/expressions/class/fields-after-same-line-method-static-private-methods.js
 create mode 100644 test/language/expressions/class/fields-after-same-line-static-async-gen-static-private-fields.js
 create mode 100644 test/language/expressions/class/fields-after-same-line-static-async-gen-static-private-methods.js
 create mode 100644 test/language/expressions/class/fields-after-same-line-static-async-method-static-private-fields.js
 create mode 100644 test/language/expressions/class/fields-after-same-line-static-async-method-static-private-methods.js
 create mode 100644 test/language/expressions/class/fields-after-same-line-static-gen-static-private-fields.js
 create mode 100644 test/language/expressions/class/fields-after-same-line-static-gen-static-private-methods.js
 create mode 100644 test/language/expressions/class/fields-after-same-line-static-method-static-private-fields.js
 create mode 100644 test/language/expressions/class/fields-after-same-line-static-method-static-private-methods.js
 delete mode 100644 test/language/expressions/class/fields-computed-variable-name-propname-constructor.js
 create mode 100644 test/language/expressions/class/fields-evaluation-error-computed-name-toprimitive-returns-noncallable.js
 create mode 100644 test/language/expressions/class/fields-evaluation-error-computed-name-toprimitive-returns-nonobject.js
 create mode 100644 test/language/expressions/class/fields-multiple-definitions-static-private-fields.js
 create mode 100644 test/language/expressions/class/fields-multiple-definitions-static-private-methods-proxy.js
 create mode 100644 test/language/expressions/class/fields-multiple-definitions-static-private-methods.js
 create mode 100644 test/language/expressions/class/fields-multiple-stacked-definitions-static-private-fields.js
 create mode 100644 test/language/expressions/class/fields-multiple-stacked-definitions-static-private-methods.js
 create mode 100644 test/language/expressions/class/fields-new-no-sc-line-method-static-private-fields.js
 create mode 100644 test/language/expressions/class/fields-new-no-sc-line-method-static-private-methods.js
 create mode 100644 test/language/expressions/class/fields-new-sc-line-gen-static-private-fields.js
 create mode 100644 test/language/expressions/class/fields-new-sc-line-gen-static-private-methods.js
 create mode 100644 test/language/expressions/class/fields-new-sc-line-method-static-private-fields.js
 create mode 100644 test/language/expressions/class/fields-new-sc-line-method-static-private-methods.js
 create mode 100644 test/language/expressions/class/fields-private-direct-eval-err-contains-arguments.js
 create mode 100644 test/language/expressions/class/fields-private-direct-eval-err-contains-newtarget.js
 create mode 100644 test/language/expressions/class/fields-private-indirect-eval-err-contains-arguments.js
 create mode 100644 test/language/expressions/class/fields-private-indirect-eval-err-contains-newtarget.js
 rename test/language/{statements/class/fields-static-private-names.js => expressions/class/fields-regular-definitions-static-private-fields.js} (71%)
 create mode 100644 test/language/expressions/class/fields-regular-definitions-static-private-methods.js
 create mode 100644 test/language/expressions/class/fields-same-line-async-gen-static-private-fields.js
 create mode 100644 test/language/expressions/class/fields-same-line-async-gen-static-private-methods.js
 create mode 100644 test/language/expressions/class/fields-same-line-async-method-static-private-fields.js
 create mode 100644 test/language/expressions/class/fields-same-line-async-method-static-private-methods.js
 create mode 100644 test/language/expressions/class/fields-same-line-gen-static-private-fields.js
 create mode 100644 test/language/expressions/class/fields-same-line-gen-static-private-methods.js
 create mode 100644 test/language/expressions/class/fields-same-line-method-static-private-fields.js
 create mode 100644 test/language/expressions/class/fields-same-line-method-static-private-methods.js
 create mode 100644 test/language/expressions/class/fields-static-comp-name-init-err-contains-arguments.js
 create mode 100644 test/language/expressions/class/fields-static-comp-name-init-err-contains-super.js
 create mode 100644 test/language/expressions/class/fields-static-literal-init-err-contains-arguments.js
 create mode 100644 test/language/expressions/class/fields-static-literal-init-err-contains-super.js
 create mode 100644 test/language/expressions/class/fields-static-private-init-err-contains-arguments.js
 create mode 100644 test/language/expressions/class/fields-static-private-init-err-contains-super.js
 create mode 100644 test/language/expressions/class/fields-static-string-literal-name-init-err-contains-arguments.js
 create mode 100644 test/language/expressions/class/fields-static-string-literal-name-init-err-contains-super.js
 create mode 100644 test/language/expressions/class/fields-wrapped-in-sc-static-private-fields.js
 create mode 100644 test/language/expressions/class/fields-wrapped-in-sc-static-private-methods.js
 create mode 100644 test/language/expressions/class/private-fields-proxy-default-handler-throws.js
 create mode 100644 test/language/expressions/class/static-private-fields-proxy-default-handler-throws.js
 create mode 100644 test/language/expressions/class/static-private-methods-proxy-default-handler-throws.js
 create mode 100644 test/language/statements/class/fields-after-same-line-gen-static-private-fields.js
 create mode 100644 test/language/statements/class/fields-after-same-line-gen-static-private-methods.js
 create mode 100644 test/language/statements/class/fields-after-same-line-method-static-private-fields.js
 create mode 100644 test/language/statements/class/fields-after-same-line-method-static-private-methods.js
 create mode 100644 test/language/statements/class/fields-after-same-line-static-async-gen-static-private-fields.js
 create mode 100644 test/language/statements/class/fields-after-same-line-static-async-gen-static-private-methods.js
 create mode 100644 test/language/statements/class/fields-after-same-line-static-async-method-static-private-fields.js
 create mode 100644 test/language/statements/class/fields-after-same-line-static-async-method-static-private-methods.js
 create mode 100644 test/language/statements/class/fields-after-same-line-static-gen-static-private-fields.js
 create mode 100644 test/language/statements/class/fields-after-same-line-static-gen-static-private-methods.js
 create mode 100644 test/language/statements/class/fields-after-same-line-static-method-static-private-fields.js
 create mode 100644 test/language/statements/class/fields-after-same-line-static-method-static-private-methods.js
 create mode 100644 test/language/statements/class/fields-comp-name-init-err-contains-arguments.js
 create mode 100644 test/language/statements/class/fields-comp-name-init-err-contains-super.js
 delete mode 100644 test/language/statements/class/fields-computed-variable-name-propname-constructor.js
 create mode 100644 test/language/statements/class/fields-evaluation-error-computed-name-toprimitive-returns-noncallable.js
 create mode 100644 test/language/statements/class/fields-evaluation-error-computed-name-toprimitive-returns-nonobject.js
 create mode 100644 test/language/statements/class/fields-multiple-definitions-static-private-fields.js
 create mode 100644 test/language/statements/class/fields-multiple-definitions-static-private-methods.js
 create mode 100644 test/language/statements/class/fields-multiple-stacked-definitions-static-private-fields.js
 create mode 100644 test/language/statements/class/fields-multiple-stacked-definitions-static-private-methods.js
 create mode 100644 test/language/statements/class/fields-new-no-sc-line-method-static-private-fields.js
 create mode 100644 test/language/statements/class/fields-new-no-sc-line-method-static-private-methods.js
 create mode 100644 test/language/statements/class/fields-new-sc-line-gen-static-private-fields.js
 create mode 100644 test/language/statements/class/fields-new-sc-line-gen-static-private-methods.js
 create mode 100644 test/language/statements/class/fields-new-sc-line-method-static-private-fields.js
 create mode 100644 test/language/statements/class/fields-new-sc-line-method-static-private-methods.js
 create mode 100644 test/language/statements/class/fields-private-direct-eval-err-contains-arguments.js
 create mode 100644 test/language/statements/class/fields-private-direct-eval-err-contains-newtarget.js
 create mode 100644 test/language/statements/class/fields-private-indirect-eval-err-contains-arguments.js
 create mode 100644 test/language/statements/class/fields-private-indirect-eval-err-contains-newtarget.js
 rename test/language/statements/class/{fields-static-private-fields.js => fields-regular-definitions-static-private-fields.js} (75%)
 create mode 100644 test/language/statements/class/fields-regular-definitions-static-private-methods.js
 create mode 100644 test/language/statements/class/fields-same-line-async-gen-static-private-fields.js
 create mode 100644 test/language/statements/class/fields-same-line-async-gen-static-private-methods.js
 create mode 100644 test/language/statements/class/fields-same-line-async-method-static-private-fields.js
 create mode 100644 test/language/statements/class/fields-same-line-async-method-static-private-methods.js
 create mode 100644 test/language/statements/class/fields-same-line-gen-static-private-fields.js
 create mode 100644 test/language/statements/class/fields-same-line-gen-static-private-methods.js
 create mode 100644 test/language/statements/class/fields-same-line-method-static-private-fields.js
 create mode 100644 test/language/statements/class/fields-same-line-method-static-private-methods.js
 rename test/language/statements/class/{fields-static-private-methods.js => fields-wrapped-in-sc-static-private-fields.js} (69%)
 create mode 100644 test/language/statements/class/fields-wrapped-in-sc-static-private-methods.js

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 d77e55b4e1..4903bbe3bc 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 874f2cdfcb..81276cc9a9 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 ca449cf303..5b1638c4ab 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 cf16227496..a895a065c7 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 e730657f11..456c88bca9 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 0000000000..2812237a8e
--- /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 0000000000..a7b69d61cc
--- /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 fbec943402..2b1e596888 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 21da891022..5a5da9ea56 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 81e5ca2a23..e21e2a8a7d 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 542488ff92..fb0a1cb92c 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 145f1398d3..7c65b26ac2 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 0000000000..5f8209be7d
--- /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 0000000000..a45087347c
--- /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 bc534cb4b9..a1d0ef3ad2 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 2a66b8ee76..4f92e5bc9f 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 2ea39e9b6b..80d36a6128 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 e4ebb76d4b..b298c5f633 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 167504e93f..8a73040702 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 0000000000..8f27dd8736
--- /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 0000000000..d8e030b0d5
--- /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 464838a511..95e1a46432 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 e39f9c059d..b32ed9b83f 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 dd0650e0e8..392fb7b0a6 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 1e1af3d4dc..14f723d1dd 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 df6dd1aeb7..2dfe19655f 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 0000000000..21a43260e1
--- /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 0000000000..3a61adf3ff
--- /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 25ce5be1f2..9d0422cbdc 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 4f3cf3e534..6012cc4503 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 6aec78a03d..2ebffeedb6 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 2ba95a6f14..a89c5d2db9 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 5883a5abc0..c1a73d77f4 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 0000000000..4e8ea78049
--- /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 0000000000..b7e9ca1ae2
--- /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 1b83642272..caa4ce8271 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 66eb3d0989..7b67ffd5a6 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 82f3a4eaed..3d1d410d26 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 59a4c9c354..0e79cf5cd4 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 48fe0208dd..3ab534569e 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 0000000000..852fa7ce83
--- /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 0000000000..8cb2832729
--- /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 d4d1e093b1..d8d96aa6fa 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 c9437b784d..5177e0ca3f 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 7329aa9b8f..cf1349be07 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 bceceabf9e..0000000000
--- 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 1ea88de76c..86745235bc 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 b80496c694..dd380aacfe 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 e09d0a2b17..e7a2fde569 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 4b4a50c00f..e518d46538 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 72049e20d9..c7954bc69c 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 2c0c1c52a5..01a9d1f632 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 325a0d040c..a9c97fe8cd 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 ea36cd9ed1..c983e887ce 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 2bb1d7f2ab..44bb95f62f 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 36bf98e3e9..9878a14a92 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 e636dc056b..9ea13833b2 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 94cb63a9ea..9422ebd006 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 66a6c14326..ead74882c3 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 0522c25592..79dbe2d852 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 0000000000..ccd69779f0
--- /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 0000000000..3c56ba8a5e
--- /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 cecb9de938..7324732650 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 f709947c11..20f3fe4558 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 84a0c29d70..e008008671 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 dd81e90753..baf937e731 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 0a2f10d1eb..52e4047a62 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 b2b87b9924..b8b62d937b 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 a2ee0a53a3..3017265522 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 4de6b2039a..f95fd4a73b 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 c6036f8514..66de23bea5 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 716b43beaf..ceef5621fb 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 0000000000..8898f73090
--- /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 0000000000..5a46f0832c
--- /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 0000000000..dec012b261
--- /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 e2957ad149..a2815cd54f 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 fb384b1376..0174e24669 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 d92d329622..97ac2d4f73 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 f0a676b327..2ca220c61c 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 6dc6095542..3bf30d3655 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 0000000000..b92b29eb46
--- /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 0000000000..85791c2060
--- /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 90c6b7cd1b..1de4a11c09 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 50538a5dea..0c10e823dc 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 3139836e1c..5ec1f72a6e 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 477b4b21fd..20aaeeac10 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 76048e7e03..32828b7303 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 0000000000..be9b34dd24
--- /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 0000000000..5c41cadc9a
--- /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 3183a04453..5466a60bca 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 5d1e910a38..ecea272f92 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 2e3e813a50..fdfbb093dd 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 2551403195..102b482453 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 e72c8e6748..399bf822c9 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 0000000000..1595aca16c
--- /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 0000000000..525cb72141
--- /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 751a5016a5..ecc41b6ee3 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 37a17dee8f..feee67ec7e 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 fdf9cf0f75..93bbdd4a1c 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 0f771745d3..239c4b5aa2 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 959a5874e4..79bc6a00f4 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 0000000000..babe419336
--- /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 0000000000..4074913bf3
--- /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 da01227204..5a8c955e35 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 0000000000..1c0c822c55
--- /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 0000000000..2273bc4dfd
--- /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 0000000000..15fc715f65
--- /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 0000000000..42e0f30ecf
--- /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 4e42bf38d6..f1c1a4dec7 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 24234ce21b..d8762afee1 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 fc724d59d0..fb8da12d2e 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 3347897180..87700b4fc9 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 6bcbfd9de5..2a7f25dd50 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 86a26026a4..5e84f59b16 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 4192939646..ba9d0f026f 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 0000000000..e1ef400f13
--- /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 d0afcaa36d..5e316ec03f 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 d312f9c70d..7f8d920fec 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 294259667e..a8d955ec20 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 0796a955c9..861efccce1 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 db0ed84992..05ddab3fe4 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 0000000000..40d189e4db
--- /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 0000000000..2bbac54e1b
--- /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 b72f2c2454..108d2cf8f1 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 82031be527..c358d94b9b 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 1519d8d04f..b211484c3b 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 11b3ff42a1..b4dbeb9bc4 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 c357bc6637..dab4667908 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 0000000000..2370de7b56
--- /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 0000000000..fadd09677c
--- /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 9bc2eac679..a311fd7c94 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 3f9e73ae98..9beb411697 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 8f038bfb12..77726bee19 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 d59e9e2b89..e3283b6a4b 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 dad18ab09c..91f1b7eefa 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 0000000000..5f1fdd0487
--- /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 0000000000..d659b01a94
--- /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 1765683b65..c566da04d7 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 eb626db479..4958c0ffb5 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 e063a1ab9b..bbed59a05b 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 70c7af3f8d..c448686a73 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 354f77ec47..d041a3e61e 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 0000000000..bffbb73d9f
--- /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 0000000000..a1c0c40cd5
--- /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 e0823a9cd1..a9ae3ec04a 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 0000000000..71a013ef75
--- /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 0000000000..49605fef46
--- /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 0000000000..a5223c3f1d
--- /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 0000000000..ac49312a9c
--- /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 0000000000..bcc2a49cd3
--- /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 0000000000..feaf029a14
--- /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 0000000000..787a945674
--- /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 0000000000..5a5474dce9
--- /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 607437f8f7..34b6bb0f90 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 ff4fc8ae92..2ac06208b5 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 a12d79c9c4..01bd09b25b 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 cb551e4c88..6bdf637ffb 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 0000000000..f501112962
--- /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 0000000000..32636c420d
--- /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 1260883fe3..c2f2540647 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 0000000000..d2a26a993e
--- /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 0000000000..9649b5406a
--- /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 0000000000..5a26a59463
--- /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 e7634a16bf..f1490e0eb0 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 03529d08dc..73d1a1751f 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 fd8c939e1c..277fd75c89 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 66bcc5a36e..1986c0342c 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 0000000000..38084c562a
--- /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 0000000000..00ed8463be
--- /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 8e8cc643fc..07530985b0 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 21fb3b86d7..6104c45f7a 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 35f11d9308..5253ea022a 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 80ecfe3208..707c6cd9f2 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 b241501c31..61f52545e4 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 0000000000..5c3b6f6b87
--- /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 0000000000..afdbfc13c6
--- /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 096ed952ef..1ac3f62cb6 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 5554b63e9b..f6d8311611 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 6844ad7fe9..6d538d492d 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 a98e2cea44..d6dea1573b 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 3f40e656f0..3262f4498c 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 0000000000..2e337619da
--- /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 0000000000..fb473a75a7
--- /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 294388a982..6b8d8536d3 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 34dfe534b0..e628b3ac56 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 e02eb6a006..ebb19a426f 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 7652c546a7..6593a6c52a 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 bc001aa284..f37ea74df6 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 0000000000..e77b50da51
--- /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 0000000000..755b850bd1
--- /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 dde92722fa..4ff9e092a8 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 49e281bd7e..14fd13e300 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 df6e52c392..612e4a3ea6 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 7ac5896575..249e98cb14 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 c6799db962..8a6a62c467 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 0000000000..ac5e4da93d
--- /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 0000000000..77a4f80c9a
--- /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 2c602452be..15c7590c35 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 8ee37ce116..94975ef070 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 d66c3d26af..81d9a231a4 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 6f9ec4a4c7..7a31a87d8b 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 e270cbe507..9f118b185e 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 0000000000..847fbe5747
--- /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 0000000000..8c13b7e74f
--- /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 8c0c9b2a5b..28798be2f6 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 0000000000..54fe419111
--- /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 0000000000..96026dddc9
--- /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 5c9639bc9e..8818450017 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 518f1f164d..c986cd012d 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 2b7aa5a78e..0000000000
--- 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 e9c44bb1bb..9633a3bbd8 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 ec3eae5459..7520e6546f 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 bd7c9757e3..75612496c5 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 3e988d94fe..c5f63012a8 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 7f3963b1f4..ca04c448dc 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 b6df495eb2..be58a46774 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 16b468837b..7ee11c41d4 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 b7492996cd..9de84949fd 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 d3554fe954..1ba08ba625 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 e71f434467..c2520d7416 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 ee79439a68..2ed9f8c6a1 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 e24b384878..d0768c666d 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 505de6f4b9..c0771fa335 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 77579a2f60..f3b1fa0312 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 0000000000..8f5b5d5b16
--- /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 0000000000..de9c94b7de
--- /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 2edbc79dbe..1390e7639e 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 b056fb488e..86d37c3dda 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 fb408f497d..3296a5902e 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 67c9b0200b..96eaebeb9a 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 8c8eac3a26..4555de6efc 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 24d5eb3b6f..efbb803480 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 b6d3cfb14f..dd750df16c 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 813aac64b2..1ff9fb2327 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 63d8ad694c..b80d396c39 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 6ea8e96278..e0e0a3c3b2 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 0000000000..d257631dde
--- /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 0000000000..df86d9893d
--- /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 8ce2d2fd05..cc297096e4 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 1bdcb8e773..b6f884a84f 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 9bfeb243fc..76a7d9f7a7 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 db7c211752..59dd6f45f1 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 e88d530aca..46914e9068 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 0000000000..b2d30bb684
--- /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 0000000000..9e38dfbc91
--- /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 fffb53f4f1..e65d06e981 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 656dad2c1a..40dcc6bc94 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 803d75477e..3670093d19 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 ae718c8241..85571fd558 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 f57b9ac5bb..ddb2b385ca 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 0000000000..21a082f6d5
--- /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 0000000000..6b444eb326
--- /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 e376980dfc..606f9857cd 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 ed18ea80b9..dac45df434 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 3c8a55c93b..e18acba62c 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 65966a09cb..33764b72e5 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 540ad191c9..fe4b9d8fa5 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 0000000000..fc2cdc56ce
--- /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 0000000000..c1bf2164e0
--- /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 2409d6ae0b..1e8ff0f814 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 a3055504f0..27d235a721 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 1e305c017d..6377c3578b 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 96b9f225a3..7c2d3b0a39 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 9b095ec504..2801a349d1 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 0000000000..77c05cade6
--- /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 0000000000..eb7d9e137e
--- /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 9377cf7593..a5ebd2808c 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 0000000000..366efed2fc
--- /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 0000000000..d44434ad17
--- /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 0000000000..dee4e5946f
--- /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 0000000000..c15dd203a9
--- /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 5d3337f356..9995556e8b 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 3cc850ada8..236e683714 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 7fa89ad913..485a382e49 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 88c2d21f64..49e1b31638 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 170ab303d6..bb7dc4cbf4 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 2c482495a0..414c963995 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 a9b0611ee4..11cbfcf788 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 0000000000..74b7858c7b
--- /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 cc8ea7ce7d..cc177acd57 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 7e8cf65202..9dd54fa739 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 061aa74474..948d23c827 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 14e3dc66cd..4ca55d8d96 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 a1c4b00def..adbd03e6c6 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 0000000000..25507fab39
--- /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 0000000000..56dec2a2ee
--- /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 01a18bebd9..759eb62bd1 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 ab68ccb314..f68257e2a0 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 4c0e85f0bc..11eda8bd65 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 056461df19..a479fdd3c3 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 5735b08153..9f58eb22d2 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 0000000000..3530b98d0f
--- /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 0000000000..15a37aa86d
--- /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 18986604f0..31354912cc 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 bfd85d84ad..ac6ca3430b 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 82b5440f04..1e3724bf92 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 a473fda3f4..4e3c4e3d72 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 435c2c8fd9..20a6fc1474 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 0000000000..30df3ef646
--- /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 0000000000..a1c6037d4f
--- /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 2b86174641..f4b52e635c 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 b9b64e5424..f5dbafb308 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 ee373b465d..4080a9897b 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 e3caff61aa..95c05ce2a3 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 070db9093b..2a66f071fe 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 0000000000..6894e6f7ab
--- /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 0000000000..fd2bf8fd76
--- /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 50ffafe2f9..fca2d77d11 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 666a41ca8b..a18b90f529 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 12d148d613..258c0dbd2b 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 cd4f184292..449f385889 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 64334ba094..fb04feabb5 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 dc4b9a96bd..97f0d66ed0 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 19423553ea..475696926c 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 c44b995641..5c3decb179 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 39cf2cb52a..b0d5dc66bb 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 69b5bce833..5ab17511d1 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 cef596bb74..e81f993692 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 caf9edbe98..2364d417b6 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 440650c832..5a8130a5cc 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 3bf11c26da..02eade5d9d 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 0000000000..1ad7a3ab04
--- /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 e1ba62e970..1acfc2fe29 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 58c14e57dc..bfff8da44e 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 c134b47409..467b5ed045 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
-- 
GitLab