From 2bfaa0d895904c6b024e2e9c63c5307c8395edd3 Mon Sep 17 00:00:00 2001
From: jugglinmike <mike@mikepennisi.com>
Date: Fri, 8 Jul 2016 21:37:04 -0400
Subject: [PATCH] Improve coverage for class "name" inference (#718)

* Extend tests for class "name" inference

Ensure that when a class defines a static "name" method, that method
definition prevents the "name" inference behavior.

* Re-generate tests
---
 src/dstr-assignment/array-elem-init-fn-name-class.case      | 5 +++--
 src/dstr-assignment/obj-id-init-fn-name-class.case          | 5 +++--
 src/dstr-assignment/obj-prop-elem-init-fn-name-class.case   | 5 +++--
 src/dstr-binding/ary-ptrn-elem-id-init-fn-name-class.case   | 3 ++-
 src/dstr-binding/obj-ptrn-id-init-fn-name-class.case        | 3 ++-
 .../dstr-ary-ptrn-elem-id-init-fn-name-class.js             | 3 ++-
 .../dstr-dflt-ary-ptrn-elem-id-init-fn-name-class.js        | 3 ++-
 .../dstr-dflt-obj-ptrn-id-init-fn-name-class.js             | 3 ++-
 .../arrow-function/dstr-obj-ptrn-id-init-fn-name-class.js   | 3 ++-
 .../assignment/dstr-array-elem-init-fn-name-class.js        | 5 +++--
 .../assignment/dstr-obj-id-init-fn-name-class.js            | 5 +++--
 .../assignment/dstr-obj-prop-elem-init-fn-name-class.js     | 5 +++--
 test/language/expressions/assignment/fn-name-class.js       | 6 ++++--
 .../dstr-gen-meth-ary-ptrn-elem-id-init-fn-name-class.js    | 3 ++-
 ...str-gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js | 3 ++-
 .../dstr-gen-meth-dflt-obj-ptrn-id-init-fn-name-class.js    | 3 ++-
 .../class/dstr-gen-meth-obj-ptrn-id-init-fn-name-class.js   | 3 ++-
 ...r-gen-meth-static-ary-ptrn-elem-id-init-fn-name-class.js | 3 ++-
 ...-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-class.js | 3 ++-
 ...r-gen-meth-static-dflt-obj-ptrn-id-init-fn-name-class.js | 3 ++-
 .../dstr-gen-meth-static-obj-ptrn-id-init-fn-name-class.js  | 3 ++-
 .../class/dstr-meth-ary-ptrn-elem-id-init-fn-name-class.js  | 3 ++-
 .../dstr-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js   | 3 ++-
 .../class/dstr-meth-dflt-obj-ptrn-id-init-fn-name-class.js  | 3 ++-
 .../class/dstr-meth-obj-ptrn-id-init-fn-name-class.js       | 3 ++-
 .../dstr-meth-static-ary-ptrn-elem-id-init-fn-name-class.js | 3 ++-
 ...-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-class.js | 3 ++-
 .../dstr-meth-static-dflt-obj-ptrn-id-init-fn-name-class.js | 3 ++-
 .../dstr-meth-static-obj-ptrn-id-init-fn-name-class.js      | 3 ++-
 .../function/dstr-ary-ptrn-elem-id-init-fn-name-class.js    | 3 ++-
 .../dstr-dflt-ary-ptrn-elem-id-init-fn-name-class.js        | 3 ++-
 .../function/dstr-dflt-obj-ptrn-id-init-fn-name-class.js    | 3 ++-
 .../function/dstr-obj-ptrn-id-init-fn-name-class.js         | 3 ++-
 .../generators/dstr-ary-ptrn-elem-id-init-fn-name-class.js  | 3 ++-
 .../dstr-dflt-ary-ptrn-elem-id-init-fn-name-class.js        | 3 ++-
 .../generators/dstr-dflt-obj-ptrn-id-init-fn-name-class.js  | 3 ++-
 .../generators/dstr-obj-ptrn-id-init-fn-name-class.js       | 3 ++-
 .../dstr-gen-meth-ary-ptrn-elem-id-init-fn-name-class.js    | 3 ++-
 ...str-gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js | 3 ++-
 .../dstr-gen-meth-dflt-obj-ptrn-id-init-fn-name-class.js    | 3 ++-
 .../object/dstr-gen-meth-obj-ptrn-id-init-fn-name-class.js  | 3 ++-
 .../object/dstr-meth-ary-ptrn-elem-id-init-fn-name-class.js | 3 ++-
 .../dstr-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js   | 3 ++-
 .../object/dstr-meth-dflt-obj-ptrn-id-init-fn-name-class.js | 3 ++-
 .../object/dstr-meth-obj-ptrn-id-init-fn-name-class.js      | 3 ++-
 .../dstr-gen-meth-ary-ptrn-elem-id-init-fn-name-class.js    | 3 ++-
 ...str-gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js | 3 ++-
 .../dstr-gen-meth-dflt-obj-ptrn-id-init-fn-name-class.js    | 3 ++-
 .../class/dstr-gen-meth-obj-ptrn-id-init-fn-name-class.js   | 3 ++-
 ...r-gen-meth-static-ary-ptrn-elem-id-init-fn-name-class.js | 3 ++-
 ...-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-class.js | 3 ++-
 ...r-gen-meth-static-dflt-obj-ptrn-id-init-fn-name-class.js | 3 ++-
 .../dstr-gen-meth-static-obj-ptrn-id-init-fn-name-class.js  | 3 ++-
 .../class/dstr-meth-ary-ptrn-elem-id-init-fn-name-class.js  | 3 ++-
 .../dstr-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js   | 3 ++-
 .../class/dstr-meth-dflt-obj-ptrn-id-init-fn-name-class.js  | 3 ++-
 .../class/dstr-meth-obj-ptrn-id-init-fn-name-class.js       | 3 ++-
 .../dstr-meth-static-ary-ptrn-elem-id-init-fn-name-class.js | 3 ++-
 ...-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-class.js | 3 ++-
 .../dstr-meth-static-dflt-obj-ptrn-id-init-fn-name-class.js | 3 ++-
 .../dstr-meth-static-obj-ptrn-id-init-fn-name-class.js      | 3 ++-
 .../const/dstr-ary-ptrn-elem-id-init-fn-name-class.js       | 3 ++-
 .../statements/const/dstr-obj-ptrn-id-init-fn-name-class.js | 3 ++-
 test/language/statements/const/fn-name-class.js             | 4 +++-
 .../statements/for-of/dstr-array-elem-init-fn-name-class.js | 5 +++--
 .../dstr-const-ary-ptrn-elem-id-init-fn-name-class.js       | 3 ++-
 .../for-of/dstr-const-obj-ptrn-id-init-fn-name-class.js     | 3 ++-
 .../for-of/dstr-let-ary-ptrn-elem-id-init-fn-name-class.js  | 3 ++-
 .../for-of/dstr-let-obj-ptrn-id-init-fn-name-class.js       | 3 ++-
 .../statements/for-of/dstr-obj-id-init-fn-name-class.js     | 5 +++--
 .../for-of/dstr-obj-prop-elem-init-fn-name-class.js         | 5 +++--
 .../for-of/dstr-var-ary-ptrn-elem-id-init-fn-name-class.js  | 3 ++-
 .../for-of/dstr-var-obj-ptrn-id-init-fn-name-class.js       | 3 ++-
 .../for/dstr-const-ary-ptrn-elem-id-init-fn-name-class.js   | 3 ++-
 .../for/dstr-const-obj-ptrn-id-init-fn-name-class.js        | 3 ++-
 .../for/dstr-let-ary-ptrn-elem-id-init-fn-name-class.js     | 3 ++-
 .../for/dstr-let-obj-ptrn-id-init-fn-name-class.js          | 3 ++-
 .../for/dstr-var-ary-ptrn-elem-id-init-fn-name-class.js     | 3 ++-
 .../for/dstr-var-obj-ptrn-id-init-fn-name-class.js          | 3 ++-
 .../function/dstr-ary-ptrn-elem-id-init-fn-name-class.js    | 3 ++-
 .../dstr-dflt-ary-ptrn-elem-id-init-fn-name-class.js        | 3 ++-
 .../function/dstr-dflt-obj-ptrn-id-init-fn-name-class.js    | 3 ++-
 .../function/dstr-obj-ptrn-id-init-fn-name-class.js         | 3 ++-
 .../generators/dstr-ary-ptrn-elem-id-init-fn-name-class.js  | 3 ++-
 .../dstr-dflt-ary-ptrn-elem-id-init-fn-name-class.js        | 3 ++-
 .../generators/dstr-dflt-obj-ptrn-id-init-fn-name-class.js  | 3 ++-
 .../generators/dstr-obj-ptrn-id-init-fn-name-class.js       | 3 ++-
 .../let/dstr-ary-ptrn-elem-id-init-fn-name-class.js         | 3 ++-
 .../statements/let/dstr-obj-ptrn-id-init-fn-name-class.js   | 3 ++-
 test/language/statements/let/fn-name-class.js               | 4 +++-
 .../try/dstr-ary-ptrn-elem-id-init-fn-name-class.js         | 3 ++-
 .../statements/try/dstr-obj-ptrn-id-init-fn-name-class.js   | 3 ++-
 .../variable/dstr-ary-ptrn-elem-id-init-fn-name-class.js    | 3 ++-
 .../variable/dstr-obj-ptrn-id-init-fn-name-class.js         | 3 ++-
 test/language/statements/variable/fn-name-class.js          | 4 +++-
 95 files changed, 204 insertions(+), 105 deletions(-)

diff --git a/src/dstr-assignment/array-elem-init-fn-name-class.case b/src/dstr-assignment/array-elem-init-fn-name-class.case
index 91be890976..3317c8c0bc 100644
--- a/src/dstr-assignment/array-elem-init-fn-name-class.case
+++ b/src/dstr-assignment/array-elem-init-fn-name-class.case
@@ -21,13 +21,14 @@ features: [class]
 ---*/
 
 //- setup
-var xCls, cls;
+var xCls, cls, xCls2;
 //- elems
-[ xCls = class x {},cls = class {} ]
+[ xCls = class x {}, cls = class {}, xCls2 = class { static name() {} } ]
 //- vals
 []
 //- body
 assert(xCls.name !== 'xCls');
+assert(xCls2.name !== 'xCls2');
 
 assert.sameValue(cls.name, 'cls');
 verifyNotEnumerable(cls, 'name');
diff --git a/src/dstr-assignment/obj-id-init-fn-name-class.case b/src/dstr-assignment/obj-id-init-fn-name-class.case
index 69598a6754..f76aa2ee13 100644
--- a/src/dstr-assignment/obj-id-init-fn-name-class.case
+++ b/src/dstr-assignment/obj-id-init-fn-name-class.case
@@ -20,13 +20,14 @@ features: [class]
 ---*/
 
 //- setup
-var xCls, cls;
+var xCls, cls, xCls2;
 //- elems
-{ xCls = class x {}, cls = class {} }
+{ xCls = class x {}, cls = class {}, xCls2 = class { static name() {} } }
 //- vals
 {}
 //- body
 assert.notSameValue(xCls.name, 'xCls');
+assert.notSameValue(xCls2.name, 'xCls2');
 
 assert.sameValue(cls.name, 'cls');
 verifyNotEnumerable(cls, 'name');
diff --git a/src/dstr-assignment/obj-prop-elem-init-fn-name-class.case b/src/dstr-assignment/obj-prop-elem-init-fn-name-class.case
index 5652358615..86f60afc0c 100644
--- a/src/dstr-assignment/obj-prop-elem-init-fn-name-class.case
+++ b/src/dstr-assignment/obj-prop-elem-init-fn-name-class.case
@@ -21,13 +21,14 @@ features: [class]
 ---*/
 
 //- setup
-var xCls, cls;
+var xCls, cls, xCls2;
 //- elems
-{ x: xCls = class x {}, x: cls = class {} }
+{ x: xCls = class x {}, x: cls = class {}, x: xCls2 = class { static name() {} } }
 //- vals
 {}
 //- body
 assert.notSameValue(xCls.name, 'xCls');
+assert.notSameValue(xCls2.name, 'xCls2');
 
 assert.sameValue(cls.name, 'cls');
 verifyNotEnumerable(cls, 'name');
diff --git a/src/dstr-binding/ary-ptrn-elem-id-init-fn-name-class.case b/src/dstr-binding/ary-ptrn-elem-id-init-fn-name-class.case
index 5ac7081660..fd129368d4 100644
--- a/src/dstr-binding/ary-ptrn-elem-id-init-fn-name-class.case
+++ b/src/dstr-binding/ary-ptrn-elem-id-init-fn-name-class.case
@@ -20,9 +20,10 @@ info: |
 ---*/
 
 //- elems
-[cls = class {}, xCls = class X {}]
+[cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }]
 //- vals
 []
 //- body
 assert.sameValue(cls.name, 'cls');
 assert.notSameValue(xCls.name, 'xCls');
+assert.notSameValue(xCls2.name, 'xCls2');
diff --git a/src/dstr-binding/obj-ptrn-id-init-fn-name-class.case b/src/dstr-binding/obj-ptrn-id-init-fn-name-class.case
index f74c1e7da7..2b5a385dda 100644
--- a/src/dstr-binding/obj-ptrn-id-init-fn-name-class.case
+++ b/src/dstr-binding/obj-ptrn-id-init-fn-name-class.case
@@ -19,9 +19,10 @@ info: |
 ---*/
 
 //- elems
-{ cls = class {}, xCls = class X {} }
+{ cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } }
 //- vals
 {}
 //- body
 assert.sameValue(cls.name, 'cls');
 assert.notSameValue(xCls.name, 'xCls');
+assert.notSameValue(xCls2.name, 'xCls2');
diff --git a/test/language/expressions/arrow-function/dstr-ary-ptrn-elem-id-init-fn-name-class.js b/test/language/expressions/arrow-function/dstr-ary-ptrn-elem-id-init-fn-name-class.js
index 89ce65095c..e5e5add180 100644
--- a/test/language/expressions/arrow-function/dstr-ary-ptrn-elem-id-init-fn-name-class.js
+++ b/test/language/expressions/arrow-function/dstr-ary-ptrn-elem-id-init-fn-name-class.js
@@ -54,9 +54,10 @@ info: |
 
 var callCount = 0;
 var f;
-f = ([cls = class {}, xCls = class X {}]) => {
+f = ([cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }]) => {
   assert.sameValue(cls.name, 'cls');
   assert.notSameValue(xCls.name, 'xCls');
+  assert.notSameValue(xCls2.name, 'xCls2');
   callCount = callCount + 1;
 };
 
diff --git a/test/language/expressions/arrow-function/dstr-dflt-ary-ptrn-elem-id-init-fn-name-class.js b/test/language/expressions/arrow-function/dstr-dflt-ary-ptrn-elem-id-init-fn-name-class.js
index a46881b92c..6f06cf6eaf 100644
--- a/test/language/expressions/arrow-function/dstr-dflt-ary-ptrn-elem-id-init-fn-name-class.js
+++ b/test/language/expressions/arrow-function/dstr-dflt-ary-ptrn-elem-id-init-fn-name-class.js
@@ -54,9 +54,10 @@ info: |
 
 var callCount = 0;
 var f;
-f = ([cls = class {}, xCls = class X {}] = []) => {
+f = ([cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }] = []) => {
   assert.sameValue(cls.name, 'cls');
   assert.notSameValue(xCls.name, 'xCls');
+  assert.notSameValue(xCls2.name, 'xCls2');
   callCount = callCount + 1;
 };
 
diff --git a/test/language/expressions/arrow-function/dstr-dflt-obj-ptrn-id-init-fn-name-class.js b/test/language/expressions/arrow-function/dstr-dflt-obj-ptrn-id-init-fn-name-class.js
index af4e0a53e0..3996cd0b80 100644
--- a/test/language/expressions/arrow-function/dstr-dflt-obj-ptrn-id-init-fn-name-class.js
+++ b/test/language/expressions/arrow-function/dstr-dflt-obj-ptrn-id-init-fn-name-class.js
@@ -53,9 +53,10 @@ info: |
 
 var callCount = 0;
 var f;
-f = ({ cls = class {}, xCls = class X {} } = {}) => {
+f = ({ cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } } = {}) => {
   assert.sameValue(cls.name, 'cls');
   assert.notSameValue(xCls.name, 'xCls');
+  assert.notSameValue(xCls2.name, 'xCls2');
   callCount = callCount + 1;
 };
 
diff --git a/test/language/expressions/arrow-function/dstr-obj-ptrn-id-init-fn-name-class.js b/test/language/expressions/arrow-function/dstr-obj-ptrn-id-init-fn-name-class.js
index b1f9de1cce..8a9ba5f9d8 100644
--- a/test/language/expressions/arrow-function/dstr-obj-ptrn-id-init-fn-name-class.js
+++ b/test/language/expressions/arrow-function/dstr-obj-ptrn-id-init-fn-name-class.js
@@ -53,9 +53,10 @@ info: |
 
 var callCount = 0;
 var f;
-f = ({ cls = class {}, xCls = class X {} }) => {
+f = ({ cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } }) => {
   assert.sameValue(cls.name, 'cls');
   assert.notSameValue(xCls.name, 'xCls');
+  assert.notSameValue(xCls2.name, 'xCls2');
   callCount = callCount + 1;
 };
 
diff --git a/test/language/expressions/assignment/dstr-array-elem-init-fn-name-class.js b/test/language/expressions/assignment/dstr-array-elem-init-fn-name-class.js
index 20c1ce8e82..5fd497ba43 100644
--- a/test/language/expressions/assignment/dstr-array-elem-init-fn-name-class.js
+++ b/test/language/expressions/assignment/dstr-array-elem-init-fn-name-class.js
@@ -27,14 +27,15 @@ info: |
           GetReferencedName(lref)).
 
 ---*/
-var xCls, cls;
+var xCls, cls, xCls2;
 
 var result;
 var vals = [];
 
-result = [ xCls = class x {},cls = class {} ] = vals;
+result = [ xCls = class x {}, cls = class {}, xCls2 = class { static name() {} } ] = vals;
 
 assert(xCls.name !== 'xCls');
+assert(xCls2.name !== 'xCls2');
 
 assert.sameValue(cls.name, 'cls');
 verifyNotEnumerable(cls, 'name');
diff --git a/test/language/expressions/assignment/dstr-obj-id-init-fn-name-class.js b/test/language/expressions/assignment/dstr-obj-id-init-fn-name-class.js
index 6ea372c0ea..bdefcab831 100644
--- a/test/language/expressions/assignment/dstr-obj-id-init-fn-name-class.js
+++ b/test/language/expressions/assignment/dstr-obj-id-init-fn-name-class.js
@@ -26,14 +26,15 @@ info: |
           iii. If hasNameProperty is false, perform SetFunctionName(v, P).
 
 ---*/
-var xCls, cls;
+var xCls, cls, xCls2;
 
 var result;
 var vals = {};
 
-result = { xCls = class x {}, cls = class {} } = vals;
+result = { xCls = class x {}, cls = class {}, xCls2 = class { static name() {} } } = vals;
 
 assert.notSameValue(xCls.name, 'xCls');
+assert.notSameValue(xCls2.name, 'xCls2');
 
 assert.sameValue(cls.name, 'cls');
 verifyNotEnumerable(cls, 'name');
diff --git a/test/language/expressions/assignment/dstr-obj-prop-elem-init-fn-name-class.js b/test/language/expressions/assignment/dstr-obj-prop-elem-init-fn-name-class.js
index 807d410c5f..782b5f6d07 100644
--- a/test/language/expressions/assignment/dstr-obj-prop-elem-init-fn-name-class.js
+++ b/test/language/expressions/assignment/dstr-obj-prop-elem-init-fn-name-class.js
@@ -27,14 +27,15 @@ info: |
           GetReferencedName(lref)).
 
 ---*/
-var xCls, cls;
+var xCls, cls, xCls2;
 
 var result;
 var vals = {};
 
-result = { x: xCls = class x {}, x: cls = class {} } = vals;
+result = { x: xCls = class x {}, x: cls = class {}, x: xCls2 = class { static name() {} } } = vals;
 
 assert.notSameValue(xCls.name, 'xCls');
+assert.notSameValue(xCls2.name, 'xCls2');
 
 assert.sameValue(cls.name, 'cls');
 verifyNotEnumerable(cls, 'name');
diff --git a/test/language/expressions/assignment/fn-name-class.js b/test/language/expressions/assignment/fn-name-class.js
index 5295daf260..2f2d75d8be 100644
--- a/test/language/expressions/assignment/fn-name-class.js
+++ b/test/language/expressions/assignment/fn-name-class.js
@@ -22,12 +22,14 @@ includes: [propertyHelper.js]
 features: [class]
 ---*/
 
-var xCls, cls;
+var xCls, cls, xCls2;
 
 xCls = class x {};
 cls = class {};
+xCls2 = class { static name() {} };
 
-assert(xCls.name !== 'xCls');
+assert.notSameValue(xCls.name, 'xCls');
+assert.notSameValue(xCls2.name, 'xCls2');
 
 assert.sameValue(cls.name, 'cls');
 verifyNotEnumerable(cls, 'name');
diff --git a/test/language/expressions/class/dstr-gen-meth-ary-ptrn-elem-id-init-fn-name-class.js b/test/language/expressions/class/dstr-gen-meth-ary-ptrn-elem-id-init-fn-name-class.js
index dab8758c42..500e3c7963 100644
--- a/test/language/expressions/class/dstr-gen-meth-ary-ptrn-elem-id-init-fn-name-class.js
+++ b/test/language/expressions/class/dstr-gen-meth-ary-ptrn-elem-id-init-fn-name-class.js
@@ -78,9 +78,10 @@ info: |
 
 var callCount = 0;
 var C = class {
-  *method([cls = class {}, xCls = class X {}]) {
+  *method([cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }]) {
     assert.sameValue(cls.name, 'cls');
     assert.notSameValue(xCls.name, 'xCls');
+    assert.notSameValue(xCls2.name, 'xCls2');
     callCount = callCount + 1;
   }
 };
diff --git a/test/language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js b/test/language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js
index a56a220167..838b019f20 100644
--- a/test/language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js
+++ b/test/language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js
@@ -78,9 +78,10 @@ info: |
 
 var callCount = 0;
 var C = class {
-  *method([cls = class {}, xCls = class X {}] = []) {
+  *method([cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }] = []) {
     assert.sameValue(cls.name, 'cls');
     assert.notSameValue(xCls.name, 'xCls');
+    assert.notSameValue(xCls2.name, 'xCls2');
     callCount = callCount + 1;
   }
 };
diff --git a/test/language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-id-init-fn-name-class.js b/test/language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-id-init-fn-name-class.js
index c7a2a2d4d2..806d9930ae 100644
--- a/test/language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-id-init-fn-name-class.js
+++ b/test/language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-id-init-fn-name-class.js
@@ -77,9 +77,10 @@ info: |
 
 var callCount = 0;
 var C = class {
-  *method({ cls = class {}, xCls = class X {} } = {}) {
+  *method({ cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } } = {}) {
     assert.sameValue(cls.name, 'cls');
     assert.notSameValue(xCls.name, 'xCls');
+    assert.notSameValue(xCls2.name, 'xCls2');
     callCount = callCount + 1;
   }
 };
diff --git a/test/language/expressions/class/dstr-gen-meth-obj-ptrn-id-init-fn-name-class.js b/test/language/expressions/class/dstr-gen-meth-obj-ptrn-id-init-fn-name-class.js
index 59e651c44a..a74ba692e2 100644
--- a/test/language/expressions/class/dstr-gen-meth-obj-ptrn-id-init-fn-name-class.js
+++ b/test/language/expressions/class/dstr-gen-meth-obj-ptrn-id-init-fn-name-class.js
@@ -77,9 +77,10 @@ info: |
 
 var callCount = 0;
 var C = class {
-  *method({ cls = class {}, xCls = class X {} }) {
+  *method({ cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } }) {
     assert.sameValue(cls.name, 'cls');
     assert.notSameValue(xCls.name, 'xCls');
+    assert.notSameValue(xCls2.name, 'xCls2');
     callCount = callCount + 1;
   }
 };
diff --git a/test/language/expressions/class/dstr-gen-meth-static-ary-ptrn-elem-id-init-fn-name-class.js b/test/language/expressions/class/dstr-gen-meth-static-ary-ptrn-elem-id-init-fn-name-class.js
index 79eda26772..0a8184b700 100644
--- a/test/language/expressions/class/dstr-gen-meth-static-ary-ptrn-elem-id-init-fn-name-class.js
+++ b/test/language/expressions/class/dstr-gen-meth-static-ary-ptrn-elem-id-init-fn-name-class.js
@@ -78,9 +78,10 @@ info: |
 
 var callCount = 0;
 var C = class {
-  static *method([cls = class {}, xCls = class X {}]) {
+  static *method([cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }]) {
     assert.sameValue(cls.name, 'cls');
     assert.notSameValue(xCls.name, 'xCls');
+    assert.notSameValue(xCls2.name, 'xCls2');
     callCount = callCount + 1;
   }
 };
diff --git a/test/language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-class.js b/test/language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-class.js
index c3b75da5fc..1b522f4e6a 100644
--- a/test/language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-class.js
+++ b/test/language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-class.js
@@ -78,9 +78,10 @@ info: |
 
 var callCount = 0;
 var C = class {
-  static *method([cls = class {}, xCls = class X {}] = []) {
+  static *method([cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }] = []) {
     assert.sameValue(cls.name, 'cls');
     assert.notSameValue(xCls.name, 'xCls');
+    assert.notSameValue(xCls2.name, 'xCls2');
     callCount = callCount + 1;
   }
 };
diff --git a/test/language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-id-init-fn-name-class.js b/test/language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-id-init-fn-name-class.js
index 6f343be628..baee588463 100644
--- a/test/language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-id-init-fn-name-class.js
+++ b/test/language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-id-init-fn-name-class.js
@@ -77,9 +77,10 @@ info: |
 
 var callCount = 0;
 var C = class {
-  static *method({ cls = class {}, xCls = class X {} } = {}) {
+  static *method({ cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } } = {}) {
     assert.sameValue(cls.name, 'cls');
     assert.notSameValue(xCls.name, 'xCls');
+    assert.notSameValue(xCls2.name, 'xCls2');
     callCount = callCount + 1;
   }
 };
diff --git a/test/language/expressions/class/dstr-gen-meth-static-obj-ptrn-id-init-fn-name-class.js b/test/language/expressions/class/dstr-gen-meth-static-obj-ptrn-id-init-fn-name-class.js
index 1ceb5c796f..a3df1394f2 100644
--- a/test/language/expressions/class/dstr-gen-meth-static-obj-ptrn-id-init-fn-name-class.js
+++ b/test/language/expressions/class/dstr-gen-meth-static-obj-ptrn-id-init-fn-name-class.js
@@ -77,9 +77,10 @@ info: |
 
 var callCount = 0;
 var C = class {
-  static *method({ cls = class {}, xCls = class X {} }) {
+  static *method({ cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } }) {
     assert.sameValue(cls.name, 'cls');
     assert.notSameValue(xCls.name, 'xCls');
+    assert.notSameValue(xCls2.name, 'xCls2');
     callCount = callCount + 1;
   }
 };
diff --git a/test/language/expressions/class/dstr-meth-ary-ptrn-elem-id-init-fn-name-class.js b/test/language/expressions/class/dstr-meth-ary-ptrn-elem-id-init-fn-name-class.js
index ff41715850..d1a3f8ba05 100644
--- a/test/language/expressions/class/dstr-meth-ary-ptrn-elem-id-init-fn-name-class.js
+++ b/test/language/expressions/class/dstr-meth-ary-ptrn-elem-id-init-fn-name-class.js
@@ -75,9 +75,10 @@ info: |
 
 var callCount = 0;
 var C = class {
-  method([cls = class {}, xCls = class X {}]) {
+  method([cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }]) {
     assert.sameValue(cls.name, 'cls');
     assert.notSameValue(xCls.name, 'xCls');
+    assert.notSameValue(xCls2.name, 'xCls2');
     callCount = callCount + 1;
   }
 };
diff --git a/test/language/expressions/class/dstr-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js b/test/language/expressions/class/dstr-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js
index e04cea08d0..32adbaefd0 100644
--- a/test/language/expressions/class/dstr-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js
+++ b/test/language/expressions/class/dstr-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js
@@ -75,9 +75,10 @@ info: |
 
 var callCount = 0;
 var C = class {
-  method([cls = class {}, xCls = class X {}] = []) {
+  method([cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }] = []) {
     assert.sameValue(cls.name, 'cls');
     assert.notSameValue(xCls.name, 'xCls');
+    assert.notSameValue(xCls2.name, 'xCls2');
     callCount = callCount + 1;
   }
 };
diff --git a/test/language/expressions/class/dstr-meth-dflt-obj-ptrn-id-init-fn-name-class.js b/test/language/expressions/class/dstr-meth-dflt-obj-ptrn-id-init-fn-name-class.js
index ba1e077fb5..3978496299 100644
--- a/test/language/expressions/class/dstr-meth-dflt-obj-ptrn-id-init-fn-name-class.js
+++ b/test/language/expressions/class/dstr-meth-dflt-obj-ptrn-id-init-fn-name-class.js
@@ -74,9 +74,10 @@ info: |
 
 var callCount = 0;
 var C = class {
-  method({ cls = class {}, xCls = class X {} } = {}) {
+  method({ cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } } = {}) {
     assert.sameValue(cls.name, 'cls');
     assert.notSameValue(xCls.name, 'xCls');
+    assert.notSameValue(xCls2.name, 'xCls2');
     callCount = callCount + 1;
   }
 };
diff --git a/test/language/expressions/class/dstr-meth-obj-ptrn-id-init-fn-name-class.js b/test/language/expressions/class/dstr-meth-obj-ptrn-id-init-fn-name-class.js
index ff41447995..846d97837c 100644
--- a/test/language/expressions/class/dstr-meth-obj-ptrn-id-init-fn-name-class.js
+++ b/test/language/expressions/class/dstr-meth-obj-ptrn-id-init-fn-name-class.js
@@ -74,9 +74,10 @@ info: |
 
 var callCount = 0;
 var C = class {
-  method({ cls = class {}, xCls = class X {} }) {
+  method({ cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } }) {
     assert.sameValue(cls.name, 'cls');
     assert.notSameValue(xCls.name, 'xCls');
+    assert.notSameValue(xCls2.name, 'xCls2');
     callCount = callCount + 1;
   }
 };
diff --git a/test/language/expressions/class/dstr-meth-static-ary-ptrn-elem-id-init-fn-name-class.js b/test/language/expressions/class/dstr-meth-static-ary-ptrn-elem-id-init-fn-name-class.js
index c8015087eb..30b5f9b001 100644
--- a/test/language/expressions/class/dstr-meth-static-ary-ptrn-elem-id-init-fn-name-class.js
+++ b/test/language/expressions/class/dstr-meth-static-ary-ptrn-elem-id-init-fn-name-class.js
@@ -75,9 +75,10 @@ info: |
 
 var callCount = 0;
 var C = class {
-  static method([cls = class {}, xCls = class X {}]) {
+  static method([cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }]) {
     assert.sameValue(cls.name, 'cls');
     assert.notSameValue(xCls.name, 'xCls');
+    assert.notSameValue(xCls2.name, 'xCls2');
     callCount = callCount + 1;
   }
 };
diff --git a/test/language/expressions/class/dstr-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-class.js b/test/language/expressions/class/dstr-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-class.js
index a0288aa2fe..d73e9216fe 100644
--- a/test/language/expressions/class/dstr-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-class.js
+++ b/test/language/expressions/class/dstr-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-class.js
@@ -75,9 +75,10 @@ info: |
 
 var callCount = 0;
 var C = class {
-  static method([cls = class {}, xCls = class X {}] = []) {
+  static method([cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }] = []) {
     assert.sameValue(cls.name, 'cls');
     assert.notSameValue(xCls.name, 'xCls');
+    assert.notSameValue(xCls2.name, 'xCls2');
     callCount = callCount + 1;
   }
 };
diff --git a/test/language/expressions/class/dstr-meth-static-dflt-obj-ptrn-id-init-fn-name-class.js b/test/language/expressions/class/dstr-meth-static-dflt-obj-ptrn-id-init-fn-name-class.js
index fb2f137356..ca910910aa 100644
--- a/test/language/expressions/class/dstr-meth-static-dflt-obj-ptrn-id-init-fn-name-class.js
+++ b/test/language/expressions/class/dstr-meth-static-dflt-obj-ptrn-id-init-fn-name-class.js
@@ -74,9 +74,10 @@ info: |
 
 var callCount = 0;
 var C = class {
-  static method({ cls = class {}, xCls = class X {} } = {}) {
+  static method({ cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } } = {}) {
     assert.sameValue(cls.name, 'cls');
     assert.notSameValue(xCls.name, 'xCls');
+    assert.notSameValue(xCls2.name, 'xCls2');
     callCount = callCount + 1;
   }
 };
diff --git a/test/language/expressions/class/dstr-meth-static-obj-ptrn-id-init-fn-name-class.js b/test/language/expressions/class/dstr-meth-static-obj-ptrn-id-init-fn-name-class.js
index 3ecb8f4441..acd7094962 100644
--- a/test/language/expressions/class/dstr-meth-static-obj-ptrn-id-init-fn-name-class.js
+++ b/test/language/expressions/class/dstr-meth-static-obj-ptrn-id-init-fn-name-class.js
@@ -74,9 +74,10 @@ info: |
 
 var callCount = 0;
 var C = class {
-  static method({ cls = class {}, xCls = class X {} }) {
+  static method({ cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } }) {
     assert.sameValue(cls.name, 'cls');
     assert.notSameValue(xCls.name, 'xCls');
+    assert.notSameValue(xCls2.name, 'xCls2');
     callCount = callCount + 1;
   }
 };
diff --git a/test/language/expressions/function/dstr-ary-ptrn-elem-id-init-fn-name-class.js b/test/language/expressions/function/dstr-ary-ptrn-elem-id-init-fn-name-class.js
index 306517b68e..e3c5663c92 100644
--- a/test/language/expressions/function/dstr-ary-ptrn-elem-id-init-fn-name-class.js
+++ b/test/language/expressions/function/dstr-ary-ptrn-elem-id-init-fn-name-class.js
@@ -55,9 +55,10 @@ info: |
 
 var callCount = 0;
 var f;
-f = function([cls = class {}, xCls = class X {}]) {
+f = function([cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }]) {
   assert.sameValue(cls.name, 'cls');
   assert.notSameValue(xCls.name, 'xCls');
+  assert.notSameValue(xCls2.name, 'xCls2');
   callCount = callCount + 1;
 };
 
diff --git a/test/language/expressions/function/dstr-dflt-ary-ptrn-elem-id-init-fn-name-class.js b/test/language/expressions/function/dstr-dflt-ary-ptrn-elem-id-init-fn-name-class.js
index 3cbe731bb0..d206ccd842 100644
--- a/test/language/expressions/function/dstr-dflt-ary-ptrn-elem-id-init-fn-name-class.js
+++ b/test/language/expressions/function/dstr-dflt-ary-ptrn-elem-id-init-fn-name-class.js
@@ -55,9 +55,10 @@ info: |
 
 var callCount = 0;
 var f;
-f = function([cls = class {}, xCls = class X {}] = []) {
+f = function([cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }] = []) {
   assert.sameValue(cls.name, 'cls');
   assert.notSameValue(xCls.name, 'xCls');
+  assert.notSameValue(xCls2.name, 'xCls2');
   callCount = callCount + 1;
 };
 
diff --git a/test/language/expressions/function/dstr-dflt-obj-ptrn-id-init-fn-name-class.js b/test/language/expressions/function/dstr-dflt-obj-ptrn-id-init-fn-name-class.js
index 80638d75e7..25c565de70 100644
--- a/test/language/expressions/function/dstr-dflt-obj-ptrn-id-init-fn-name-class.js
+++ b/test/language/expressions/function/dstr-dflt-obj-ptrn-id-init-fn-name-class.js
@@ -54,9 +54,10 @@ info: |
 
 var callCount = 0;
 var f;
-f = function({ cls = class {}, xCls = class X {} } = {}) {
+f = function({ cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } } = {}) {
   assert.sameValue(cls.name, 'cls');
   assert.notSameValue(xCls.name, 'xCls');
+  assert.notSameValue(xCls2.name, 'xCls2');
   callCount = callCount + 1;
 };
 
diff --git a/test/language/expressions/function/dstr-obj-ptrn-id-init-fn-name-class.js b/test/language/expressions/function/dstr-obj-ptrn-id-init-fn-name-class.js
index cc57e24810..8fd09ffe81 100644
--- a/test/language/expressions/function/dstr-obj-ptrn-id-init-fn-name-class.js
+++ b/test/language/expressions/function/dstr-obj-ptrn-id-init-fn-name-class.js
@@ -54,9 +54,10 @@ info: |
 
 var callCount = 0;
 var f;
-f = function({ cls = class {}, xCls = class X {} }) {
+f = function({ cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } }) {
   assert.sameValue(cls.name, 'cls');
   assert.notSameValue(xCls.name, 'xCls');
+  assert.notSameValue(xCls2.name, 'xCls2');
   callCount = callCount + 1;
 };
 
diff --git a/test/language/expressions/generators/dstr-ary-ptrn-elem-id-init-fn-name-class.js b/test/language/expressions/generators/dstr-ary-ptrn-elem-id-init-fn-name-class.js
index 47b0c4eb23..7332f6399c 100644
--- a/test/language/expressions/generators/dstr-ary-ptrn-elem-id-init-fn-name-class.js
+++ b/test/language/expressions/generators/dstr-ary-ptrn-elem-id-init-fn-name-class.js
@@ -55,9 +55,10 @@ info: |
 
 var callCount = 0;
 var f;
-f = function*([cls = class {}, xCls = class X {}]) {
+f = function*([cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }]) {
   assert.sameValue(cls.name, 'cls');
   assert.notSameValue(xCls.name, 'xCls');
+  assert.notSameValue(xCls2.name, 'xCls2');
   callCount = callCount + 1;
 };
 
diff --git a/test/language/expressions/generators/dstr-dflt-ary-ptrn-elem-id-init-fn-name-class.js b/test/language/expressions/generators/dstr-dflt-ary-ptrn-elem-id-init-fn-name-class.js
index 2e1f87ddb4..7d57071a4f 100644
--- a/test/language/expressions/generators/dstr-dflt-ary-ptrn-elem-id-init-fn-name-class.js
+++ b/test/language/expressions/generators/dstr-dflt-ary-ptrn-elem-id-init-fn-name-class.js
@@ -55,9 +55,10 @@ info: |
 
 var callCount = 0;
 var f;
-f = function*([cls = class {}, xCls = class X {}] = []) {
+f = function*([cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }] = []) {
   assert.sameValue(cls.name, 'cls');
   assert.notSameValue(xCls.name, 'xCls');
+  assert.notSameValue(xCls2.name, 'xCls2');
   callCount = callCount + 1;
 };
 
diff --git a/test/language/expressions/generators/dstr-dflt-obj-ptrn-id-init-fn-name-class.js b/test/language/expressions/generators/dstr-dflt-obj-ptrn-id-init-fn-name-class.js
index ede0ce051e..11b936dbe2 100644
--- a/test/language/expressions/generators/dstr-dflt-obj-ptrn-id-init-fn-name-class.js
+++ b/test/language/expressions/generators/dstr-dflt-obj-ptrn-id-init-fn-name-class.js
@@ -54,9 +54,10 @@ info: |
 
 var callCount = 0;
 var f;
-f = function*({ cls = class {}, xCls = class X {} } = {}) {
+f = function*({ cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } } = {}) {
   assert.sameValue(cls.name, 'cls');
   assert.notSameValue(xCls.name, 'xCls');
+  assert.notSameValue(xCls2.name, 'xCls2');
   callCount = callCount + 1;
 };
 
diff --git a/test/language/expressions/generators/dstr-obj-ptrn-id-init-fn-name-class.js b/test/language/expressions/generators/dstr-obj-ptrn-id-init-fn-name-class.js
index 7d44096634..2d5584bd98 100644
--- a/test/language/expressions/generators/dstr-obj-ptrn-id-init-fn-name-class.js
+++ b/test/language/expressions/generators/dstr-obj-ptrn-id-init-fn-name-class.js
@@ -54,9 +54,10 @@ info: |
 
 var callCount = 0;
 var f;
-f = function*({ cls = class {}, xCls = class X {} }) {
+f = function*({ cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } }) {
   assert.sameValue(cls.name, 'cls');
   assert.notSameValue(xCls.name, 'xCls');
+  assert.notSameValue(xCls2.name, 'xCls2');
   callCount = callCount + 1;
 };
 
diff --git a/test/language/expressions/object/dstr-gen-meth-ary-ptrn-elem-id-init-fn-name-class.js b/test/language/expressions/object/dstr-gen-meth-ary-ptrn-elem-id-init-fn-name-class.js
index 20a04f10bc..f05979ad69 100644
--- a/test/language/expressions/object/dstr-gen-meth-ary-ptrn-elem-id-init-fn-name-class.js
+++ b/test/language/expressions/object/dstr-gen-meth-ary-ptrn-elem-id-init-fn-name-class.js
@@ -60,9 +60,10 @@ info: |
 
 var callCount = 0;
 var obj = {
-  *method([cls = class {}, xCls = class X {}]) {
+  *method([cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }]) {
     assert.sameValue(cls.name, 'cls');
     assert.notSameValue(xCls.name, 'xCls');
+    assert.notSameValue(xCls2.name, 'xCls2');
     callCount = callCount + 1;
   }
 };
diff --git a/test/language/expressions/object/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js b/test/language/expressions/object/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js
index 7852dc8156..ff27e5afb2 100644
--- a/test/language/expressions/object/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js
+++ b/test/language/expressions/object/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js
@@ -60,9 +60,10 @@ info: |
 
 var callCount = 0;
 var obj = {
-  *method([cls = class {}, xCls = class X {}] = []) {
+  *method([cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }] = []) {
     assert.sameValue(cls.name, 'cls');
     assert.notSameValue(xCls.name, 'xCls');
+    assert.notSameValue(xCls2.name, 'xCls2');
     callCount = callCount + 1;
   }
 };
diff --git a/test/language/expressions/object/dstr-gen-meth-dflt-obj-ptrn-id-init-fn-name-class.js b/test/language/expressions/object/dstr-gen-meth-dflt-obj-ptrn-id-init-fn-name-class.js
index 1f2cb2aa25..652c38bc2c 100644
--- a/test/language/expressions/object/dstr-gen-meth-dflt-obj-ptrn-id-init-fn-name-class.js
+++ b/test/language/expressions/object/dstr-gen-meth-dflt-obj-ptrn-id-init-fn-name-class.js
@@ -59,9 +59,10 @@ info: |
 
 var callCount = 0;
 var obj = {
-  *method({ cls = class {}, xCls = class X {} } = {}) {
+  *method({ cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } } = {}) {
     assert.sameValue(cls.name, 'cls');
     assert.notSameValue(xCls.name, 'xCls');
+    assert.notSameValue(xCls2.name, 'xCls2');
     callCount = callCount + 1;
   }
 };
diff --git a/test/language/expressions/object/dstr-gen-meth-obj-ptrn-id-init-fn-name-class.js b/test/language/expressions/object/dstr-gen-meth-obj-ptrn-id-init-fn-name-class.js
index e88add4a75..b5c8c2029a 100644
--- a/test/language/expressions/object/dstr-gen-meth-obj-ptrn-id-init-fn-name-class.js
+++ b/test/language/expressions/object/dstr-gen-meth-obj-ptrn-id-init-fn-name-class.js
@@ -59,9 +59,10 @@ info: |
 
 var callCount = 0;
 var obj = {
-  *method({ cls = class {}, xCls = class X {} }) {
+  *method({ cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } }) {
     assert.sameValue(cls.name, 'cls');
     assert.notSameValue(xCls.name, 'xCls');
+    assert.notSameValue(xCls2.name, 'xCls2');
     callCount = callCount + 1;
   }
 };
diff --git a/test/language/expressions/object/dstr-meth-ary-ptrn-elem-id-init-fn-name-class.js b/test/language/expressions/object/dstr-meth-ary-ptrn-elem-id-init-fn-name-class.js
index a4b56e481a..69427266a0 100644
--- a/test/language/expressions/object/dstr-meth-ary-ptrn-elem-id-init-fn-name-class.js
+++ b/test/language/expressions/object/dstr-meth-ary-ptrn-elem-id-init-fn-name-class.js
@@ -57,9 +57,10 @@ info: |
 
 var callCount = 0;
 var obj = {
-  method([cls = class {}, xCls = class X {}]) {
+  method([cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }]) {
     assert.sameValue(cls.name, 'cls');
     assert.notSameValue(xCls.name, 'xCls');
+    assert.notSameValue(xCls2.name, 'xCls2');
     callCount = callCount + 1;
   }
 };
diff --git a/test/language/expressions/object/dstr-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js b/test/language/expressions/object/dstr-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js
index 2dc0802506..c8125bd49c 100644
--- a/test/language/expressions/object/dstr-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js
+++ b/test/language/expressions/object/dstr-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js
@@ -57,9 +57,10 @@ info: |
 
 var callCount = 0;
 var obj = {
-  method([cls = class {}, xCls = class X {}] = []) {
+  method([cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }] = []) {
     assert.sameValue(cls.name, 'cls');
     assert.notSameValue(xCls.name, 'xCls');
+    assert.notSameValue(xCls2.name, 'xCls2');
     callCount = callCount + 1;
   }
 };
diff --git a/test/language/expressions/object/dstr-meth-dflt-obj-ptrn-id-init-fn-name-class.js b/test/language/expressions/object/dstr-meth-dflt-obj-ptrn-id-init-fn-name-class.js
index 6ea8850334..f5f59250a1 100644
--- a/test/language/expressions/object/dstr-meth-dflt-obj-ptrn-id-init-fn-name-class.js
+++ b/test/language/expressions/object/dstr-meth-dflt-obj-ptrn-id-init-fn-name-class.js
@@ -56,9 +56,10 @@ info: |
 
 var callCount = 0;
 var obj = {
-  method({ cls = class {}, xCls = class X {} } = {}) {
+  method({ cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } } = {}) {
     assert.sameValue(cls.name, 'cls');
     assert.notSameValue(xCls.name, 'xCls');
+    assert.notSameValue(xCls2.name, 'xCls2');
     callCount = callCount + 1;
   }
 };
diff --git a/test/language/expressions/object/dstr-meth-obj-ptrn-id-init-fn-name-class.js b/test/language/expressions/object/dstr-meth-obj-ptrn-id-init-fn-name-class.js
index 8dac1d7ba7..696468ccd0 100644
--- a/test/language/expressions/object/dstr-meth-obj-ptrn-id-init-fn-name-class.js
+++ b/test/language/expressions/object/dstr-meth-obj-ptrn-id-init-fn-name-class.js
@@ -56,9 +56,10 @@ info: |
 
 var callCount = 0;
 var obj = {
-  method({ cls = class {}, xCls = class X {} }) {
+  method({ cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } }) {
     assert.sameValue(cls.name, 'cls');
     assert.notSameValue(xCls.name, 'xCls');
+    assert.notSameValue(xCls2.name, 'xCls2');
     callCount = callCount + 1;
   }
 };
diff --git a/test/language/statements/class/dstr-gen-meth-ary-ptrn-elem-id-init-fn-name-class.js b/test/language/statements/class/dstr-gen-meth-ary-ptrn-elem-id-init-fn-name-class.js
index 9ae56ce7eb..f102d73233 100644
--- a/test/language/statements/class/dstr-gen-meth-ary-ptrn-elem-id-init-fn-name-class.js
+++ b/test/language/statements/class/dstr-gen-meth-ary-ptrn-elem-id-init-fn-name-class.js
@@ -76,9 +76,10 @@ info: |
 
 var callCount = 0;
 class C {
-  *method([cls = class {}, xCls = class X {}]) {
+  *method([cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }]) {
     assert.sameValue(cls.name, 'cls');
     assert.notSameValue(xCls.name, 'xCls');
+    assert.notSameValue(xCls2.name, 'xCls2');
     callCount = callCount + 1;
   }
 };
diff --git a/test/language/statements/class/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js b/test/language/statements/class/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js
index 3d993f32f3..ac8350c1b0 100644
--- a/test/language/statements/class/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js
+++ b/test/language/statements/class/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js
@@ -76,9 +76,10 @@ info: |
 
 var callCount = 0;
 class C {
-  *method([cls = class {}, xCls = class X {}] = []) {
+  *method([cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }] = []) {
     assert.sameValue(cls.name, 'cls');
     assert.notSameValue(xCls.name, 'xCls');
+    assert.notSameValue(xCls2.name, 'xCls2');
     callCount = callCount + 1;
   }
 };
diff --git a/test/language/statements/class/dstr-gen-meth-dflt-obj-ptrn-id-init-fn-name-class.js b/test/language/statements/class/dstr-gen-meth-dflt-obj-ptrn-id-init-fn-name-class.js
index 46aa7918fa..89927b3bfe 100644
--- a/test/language/statements/class/dstr-gen-meth-dflt-obj-ptrn-id-init-fn-name-class.js
+++ b/test/language/statements/class/dstr-gen-meth-dflt-obj-ptrn-id-init-fn-name-class.js
@@ -75,9 +75,10 @@ info: |
 
 var callCount = 0;
 class C {
-  *method({ cls = class {}, xCls = class X {} } = {}) {
+  *method({ cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } } = {}) {
     assert.sameValue(cls.name, 'cls');
     assert.notSameValue(xCls.name, 'xCls');
+    assert.notSameValue(xCls2.name, 'xCls2');
     callCount = callCount + 1;
   }
 };
diff --git a/test/language/statements/class/dstr-gen-meth-obj-ptrn-id-init-fn-name-class.js b/test/language/statements/class/dstr-gen-meth-obj-ptrn-id-init-fn-name-class.js
index d867df5e4c..c886715c94 100644
--- a/test/language/statements/class/dstr-gen-meth-obj-ptrn-id-init-fn-name-class.js
+++ b/test/language/statements/class/dstr-gen-meth-obj-ptrn-id-init-fn-name-class.js
@@ -75,9 +75,10 @@ info: |
 
 var callCount = 0;
 class C {
-  *method({ cls = class {}, xCls = class X {} }) {
+  *method({ cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } }) {
     assert.sameValue(cls.name, 'cls');
     assert.notSameValue(xCls.name, 'xCls');
+    assert.notSameValue(xCls2.name, 'xCls2');
     callCount = callCount + 1;
   }
 };
diff --git a/test/language/statements/class/dstr-gen-meth-static-ary-ptrn-elem-id-init-fn-name-class.js b/test/language/statements/class/dstr-gen-meth-static-ary-ptrn-elem-id-init-fn-name-class.js
index 975d7fb241..dd83168adb 100644
--- a/test/language/statements/class/dstr-gen-meth-static-ary-ptrn-elem-id-init-fn-name-class.js
+++ b/test/language/statements/class/dstr-gen-meth-static-ary-ptrn-elem-id-init-fn-name-class.js
@@ -76,9 +76,10 @@ info: |
 
 var callCount = 0;
 class C {
-  static *method([cls = class {}, xCls = class X {}]) {
+  static *method([cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }]) {
     assert.sameValue(cls.name, 'cls');
     assert.notSameValue(xCls.name, 'xCls');
+    assert.notSameValue(xCls2.name, 'xCls2');
     callCount = callCount + 1;
   }
 };
diff --git a/test/language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-class.js b/test/language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-class.js
index 05d8fa2bf4..937a9e9d5d 100644
--- a/test/language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-class.js
+++ b/test/language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-class.js
@@ -76,9 +76,10 @@ info: |
 
 var callCount = 0;
 class C {
-  static *method([cls = class {}, xCls = class X {}] = []) {
+  static *method([cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }] = []) {
     assert.sameValue(cls.name, 'cls');
     assert.notSameValue(xCls.name, 'xCls');
+    assert.notSameValue(xCls2.name, 'xCls2');
     callCount = callCount + 1;
   }
 };
diff --git a/test/language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-id-init-fn-name-class.js b/test/language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-id-init-fn-name-class.js
index 4c93913819..e5fbae54c0 100644
--- a/test/language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-id-init-fn-name-class.js
+++ b/test/language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-id-init-fn-name-class.js
@@ -75,9 +75,10 @@ info: |
 
 var callCount = 0;
 class C {
-  static *method({ cls = class {}, xCls = class X {} } = {}) {
+  static *method({ cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } } = {}) {
     assert.sameValue(cls.name, 'cls');
     assert.notSameValue(xCls.name, 'xCls');
+    assert.notSameValue(xCls2.name, 'xCls2');
     callCount = callCount + 1;
   }
 };
diff --git a/test/language/statements/class/dstr-gen-meth-static-obj-ptrn-id-init-fn-name-class.js b/test/language/statements/class/dstr-gen-meth-static-obj-ptrn-id-init-fn-name-class.js
index b3596af778..e9686d114c 100644
--- a/test/language/statements/class/dstr-gen-meth-static-obj-ptrn-id-init-fn-name-class.js
+++ b/test/language/statements/class/dstr-gen-meth-static-obj-ptrn-id-init-fn-name-class.js
@@ -75,9 +75,10 @@ info: |
 
 var callCount = 0;
 class C {
-  static *method({ cls = class {}, xCls = class X {} }) {
+  static *method({ cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } }) {
     assert.sameValue(cls.name, 'cls');
     assert.notSameValue(xCls.name, 'xCls');
+    assert.notSameValue(xCls2.name, 'xCls2');
     callCount = callCount + 1;
   }
 };
diff --git a/test/language/statements/class/dstr-meth-ary-ptrn-elem-id-init-fn-name-class.js b/test/language/statements/class/dstr-meth-ary-ptrn-elem-id-init-fn-name-class.js
index d9387f6ccf..eb5f6a7707 100644
--- a/test/language/statements/class/dstr-meth-ary-ptrn-elem-id-init-fn-name-class.js
+++ b/test/language/statements/class/dstr-meth-ary-ptrn-elem-id-init-fn-name-class.js
@@ -74,9 +74,10 @@ info: |
 
 var callCount = 0;
 class C {
-  method([cls = class {}, xCls = class X {}]) {
+  method([cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }]) {
     assert.sameValue(cls.name, 'cls');
     assert.notSameValue(xCls.name, 'xCls');
+    assert.notSameValue(xCls2.name, 'xCls2');
     callCount = callCount + 1;
   }
 };
diff --git a/test/language/statements/class/dstr-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js b/test/language/statements/class/dstr-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js
index 4979f5020d..4659dfa771 100644
--- a/test/language/statements/class/dstr-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js
+++ b/test/language/statements/class/dstr-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js
@@ -74,9 +74,10 @@ info: |
 
 var callCount = 0;
 class C {
-  method([cls = class {}, xCls = class X {}] = []) {
+  method([cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }] = []) {
     assert.sameValue(cls.name, 'cls');
     assert.notSameValue(xCls.name, 'xCls');
+    assert.notSameValue(xCls2.name, 'xCls2');
     callCount = callCount + 1;
   }
 };
diff --git a/test/language/statements/class/dstr-meth-dflt-obj-ptrn-id-init-fn-name-class.js b/test/language/statements/class/dstr-meth-dflt-obj-ptrn-id-init-fn-name-class.js
index a2b56f5abe..6126c88779 100644
--- a/test/language/statements/class/dstr-meth-dflt-obj-ptrn-id-init-fn-name-class.js
+++ b/test/language/statements/class/dstr-meth-dflt-obj-ptrn-id-init-fn-name-class.js
@@ -73,9 +73,10 @@ info: |
 
 var callCount = 0;
 class C {
-  method({ cls = class {}, xCls = class X {} } = {}) {
+  method({ cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } } = {}) {
     assert.sameValue(cls.name, 'cls');
     assert.notSameValue(xCls.name, 'xCls');
+    assert.notSameValue(xCls2.name, 'xCls2');
     callCount = callCount + 1;
   }
 };
diff --git a/test/language/statements/class/dstr-meth-obj-ptrn-id-init-fn-name-class.js b/test/language/statements/class/dstr-meth-obj-ptrn-id-init-fn-name-class.js
index a6abcc4f97..b10710e8e6 100644
--- a/test/language/statements/class/dstr-meth-obj-ptrn-id-init-fn-name-class.js
+++ b/test/language/statements/class/dstr-meth-obj-ptrn-id-init-fn-name-class.js
@@ -73,9 +73,10 @@ info: |
 
 var callCount = 0;
 class C {
-  method({ cls = class {}, xCls = class X {} }) {
+  method({ cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } }) {
     assert.sameValue(cls.name, 'cls');
     assert.notSameValue(xCls.name, 'xCls');
+    assert.notSameValue(xCls2.name, 'xCls2');
     callCount = callCount + 1;
   }
 };
diff --git a/test/language/statements/class/dstr-meth-static-ary-ptrn-elem-id-init-fn-name-class.js b/test/language/statements/class/dstr-meth-static-ary-ptrn-elem-id-init-fn-name-class.js
index ca8b61e55c..5993c71128 100644
--- a/test/language/statements/class/dstr-meth-static-ary-ptrn-elem-id-init-fn-name-class.js
+++ b/test/language/statements/class/dstr-meth-static-ary-ptrn-elem-id-init-fn-name-class.js
@@ -74,9 +74,10 @@ info: |
 
 var callCount = 0;
 class C {
-  static method([cls = class {}, xCls = class X {}]) {
+  static method([cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }]) {
     assert.sameValue(cls.name, 'cls');
     assert.notSameValue(xCls.name, 'xCls');
+    assert.notSameValue(xCls2.name, 'xCls2');
     callCount = callCount + 1;
   }
 };
diff --git a/test/language/statements/class/dstr-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-class.js b/test/language/statements/class/dstr-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-class.js
index 922e3042fe..c0b0bb232b 100644
--- a/test/language/statements/class/dstr-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-class.js
+++ b/test/language/statements/class/dstr-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-class.js
@@ -74,9 +74,10 @@ info: |
 
 var callCount = 0;
 class C {
-  static method([cls = class {}, xCls = class X {}] = []) {
+  static method([cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }] = []) {
     assert.sameValue(cls.name, 'cls');
     assert.notSameValue(xCls.name, 'xCls');
+    assert.notSameValue(xCls2.name, 'xCls2');
     callCount = callCount + 1;
   }
 };
diff --git a/test/language/statements/class/dstr-meth-static-dflt-obj-ptrn-id-init-fn-name-class.js b/test/language/statements/class/dstr-meth-static-dflt-obj-ptrn-id-init-fn-name-class.js
index 4a7a08b579..b803441230 100644
--- a/test/language/statements/class/dstr-meth-static-dflt-obj-ptrn-id-init-fn-name-class.js
+++ b/test/language/statements/class/dstr-meth-static-dflt-obj-ptrn-id-init-fn-name-class.js
@@ -73,9 +73,10 @@ info: |
 
 var callCount = 0;
 class C {
-  static method({ cls = class {}, xCls = class X {} } = {}) {
+  static method({ cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } } = {}) {
     assert.sameValue(cls.name, 'cls');
     assert.notSameValue(xCls.name, 'xCls');
+    assert.notSameValue(xCls2.name, 'xCls2');
     callCount = callCount + 1;
   }
 };
diff --git a/test/language/statements/class/dstr-meth-static-obj-ptrn-id-init-fn-name-class.js b/test/language/statements/class/dstr-meth-static-obj-ptrn-id-init-fn-name-class.js
index 26ae6f87cf..003ed11c3f 100644
--- a/test/language/statements/class/dstr-meth-static-obj-ptrn-id-init-fn-name-class.js
+++ b/test/language/statements/class/dstr-meth-static-obj-ptrn-id-init-fn-name-class.js
@@ -73,9 +73,10 @@ info: |
 
 var callCount = 0;
 class C {
-  static method({ cls = class {}, xCls = class X {} }) {
+  static method({ cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } }) {
     assert.sameValue(cls.name, 'cls');
     assert.notSameValue(xCls.name, 'xCls');
+    assert.notSameValue(xCls2.name, 'xCls2');
     callCount = callCount + 1;
   }
 };
diff --git a/test/language/statements/const/dstr-ary-ptrn-elem-id-init-fn-name-class.js b/test/language/statements/const/dstr-ary-ptrn-elem-id-init-fn-name-class.js
index 21aca7b222..e63c2ac241 100644
--- a/test/language/statements/const/dstr-ary-ptrn-elem-id-init-fn-name-class.js
+++ b/test/language/statements/const/dstr-ary-ptrn-elem-id-init-fn-name-class.js
@@ -32,7 +32,8 @@ info: |
     8. Return InitializeReferencedBinding(lhs, v).
 ---*/
 
-const [cls = class {}, xCls = class X {}] = [];
+const [cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }] = [];
 
 assert.sameValue(cls.name, 'cls');
 assert.notSameValue(xCls.name, 'xCls');
+assert.notSameValue(xCls2.name, 'xCls2');
diff --git a/test/language/statements/const/dstr-obj-ptrn-id-init-fn-name-class.js b/test/language/statements/const/dstr-obj-ptrn-id-init-fn-name-class.js
index 899e1d291c..db99512d6d 100644
--- a/test/language/statements/const/dstr-obj-ptrn-id-init-fn-name-class.js
+++ b/test/language/statements/const/dstr-obj-ptrn-id-init-fn-name-class.js
@@ -31,7 +31,8 @@ info: |
                bindingId).
 ---*/
 
-const { cls = class {}, xCls = class X {} } = {};
+const { cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } } = {};
 
 assert.sameValue(cls.name, 'cls');
 assert.notSameValue(xCls.name, 'xCls');
+assert.notSameValue(xCls2.name, 'xCls2');
diff --git a/test/language/statements/const/fn-name-class.js b/test/language/statements/const/fn-name-class.js
index f48a7aa2de..7d41019ef2 100644
--- a/test/language/statements/const/fn-name-class.js
+++ b/test/language/statements/const/fn-name-class.js
@@ -19,8 +19,10 @@ features: [class]
 
 const xCls = class x {};
 const cls = class {};
+const xCls2 = class { static name() {} };
 
-assert(xCls.name !== 'xCls');
+assert.notSameValue(xCls.name, 'xCls');
+assert.notSameValue(xCls2.name, 'xCls2');
 
 assert.sameValue(cls.name, 'cls');
 verifyNotEnumerable(cls, 'name');
diff --git a/test/language/statements/for-of/dstr-array-elem-init-fn-name-class.js b/test/language/statements/for-of/dstr-array-elem-init-fn-name-class.js
index 24c777260f..9b4ff87983 100644
--- a/test/language/statements/for-of/dstr-array-elem-init-fn-name-class.js
+++ b/test/language/statements/for-of/dstr-array-elem-init-fn-name-class.js
@@ -36,12 +36,13 @@ info: |
           GetReferencedName(lref)).
 
 ---*/
-var xCls, cls;
+var xCls, cls, xCls2;
 
 var counter = 0;
 
-for ([ xCls = class x {},cls = class {} ] of [[]]) {
+for ([ xCls = class x {}, cls = class {}, xCls2 = class { static name() {} } ] of [[]]) {
   assert(xCls.name !== 'xCls');
+  assert(xCls2.name !== 'xCls2');
 
   assert.sameValue(cls.name, 'cls');
   verifyNotEnumerable(cls, 'name');
diff --git a/test/language/statements/for-of/dstr-const-ary-ptrn-elem-id-init-fn-name-class.js b/test/language/statements/for-of/dstr-const-ary-ptrn-elem-id-init-fn-name-class.js
index e1432dcb0f..38df0d9e74 100644
--- a/test/language/statements/for-of/dstr-const-ary-ptrn-elem-id-init-fn-name-class.js
+++ b/test/language/statements/for-of/dstr-const-ary-ptrn-elem-id-init-fn-name-class.js
@@ -53,9 +53,10 @@ info: |
 
 var iterCount = 0;
 
-for (const [cls = class {}, xCls = class X {}] of [[]]) {
+for (const [cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }] of [[]]) {
   assert.sameValue(cls.name, 'cls');
   assert.notSameValue(xCls.name, 'xCls');
+  assert.notSameValue(xCls2.name, 'xCls2');
 
   iterCount += 1;
 }
diff --git a/test/language/statements/for-of/dstr-const-obj-ptrn-id-init-fn-name-class.js b/test/language/statements/for-of/dstr-const-obj-ptrn-id-init-fn-name-class.js
index d1327acba4..c05f7f0c9f 100644
--- a/test/language/statements/for-of/dstr-const-obj-ptrn-id-init-fn-name-class.js
+++ b/test/language/statements/for-of/dstr-const-obj-ptrn-id-init-fn-name-class.js
@@ -52,9 +52,10 @@ info: |
 
 var iterCount = 0;
 
-for (const { cls = class {}, xCls = class X {} } of [{}]) {
+for (const { cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } } of [{}]) {
   assert.sameValue(cls.name, 'cls');
   assert.notSameValue(xCls.name, 'xCls');
+  assert.notSameValue(xCls2.name, 'xCls2');
 
   iterCount += 1;
 }
diff --git a/test/language/statements/for-of/dstr-let-ary-ptrn-elem-id-init-fn-name-class.js b/test/language/statements/for-of/dstr-let-ary-ptrn-elem-id-init-fn-name-class.js
index 782e71ff89..3084d9438b 100644
--- a/test/language/statements/for-of/dstr-let-ary-ptrn-elem-id-init-fn-name-class.js
+++ b/test/language/statements/for-of/dstr-let-ary-ptrn-elem-id-init-fn-name-class.js
@@ -53,9 +53,10 @@ info: |
 
 var iterCount = 0;
 
-for (let [cls = class {}, xCls = class X {}] of [[]]) {
+for (let [cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }] of [[]]) {
   assert.sameValue(cls.name, 'cls');
   assert.notSameValue(xCls.name, 'xCls');
+  assert.notSameValue(xCls2.name, 'xCls2');
 
   iterCount += 1;
 }
diff --git a/test/language/statements/for-of/dstr-let-obj-ptrn-id-init-fn-name-class.js b/test/language/statements/for-of/dstr-let-obj-ptrn-id-init-fn-name-class.js
index c62e18a538..e1fe87536c 100644
--- a/test/language/statements/for-of/dstr-let-obj-ptrn-id-init-fn-name-class.js
+++ b/test/language/statements/for-of/dstr-let-obj-ptrn-id-init-fn-name-class.js
@@ -52,9 +52,10 @@ info: |
 
 var iterCount = 0;
 
-for (let { cls = class {}, xCls = class X {} } of [{}]) {
+for (let { cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } } of [{}]) {
   assert.sameValue(cls.name, 'cls');
   assert.notSameValue(xCls.name, 'xCls');
+  assert.notSameValue(xCls2.name, 'xCls2');
 
   iterCount += 1;
 }
diff --git a/test/language/statements/for-of/dstr-obj-id-init-fn-name-class.js b/test/language/statements/for-of/dstr-obj-id-init-fn-name-class.js
index 4be54b8add..09e8c2a767 100644
--- a/test/language/statements/for-of/dstr-obj-id-init-fn-name-class.js
+++ b/test/language/statements/for-of/dstr-obj-id-init-fn-name-class.js
@@ -35,12 +35,13 @@ info: |
           iii. If hasNameProperty is false, perform SetFunctionName(v, P).
 
 ---*/
-var xCls, cls;
+var xCls, cls, xCls2;
 
 var counter = 0;
 
-for ({ xCls = class x {}, cls = class {} } of [{}]) {
+for ({ xCls = class x {}, cls = class {}, xCls2 = class { static name() {} } } of [{}]) {
   assert.notSameValue(xCls.name, 'xCls');
+  assert.notSameValue(xCls2.name, 'xCls2');
 
   assert.sameValue(cls.name, 'cls');
   verifyNotEnumerable(cls, 'name');
diff --git a/test/language/statements/for-of/dstr-obj-prop-elem-init-fn-name-class.js b/test/language/statements/for-of/dstr-obj-prop-elem-init-fn-name-class.js
index 0796361460..077c6bbb71 100644
--- a/test/language/statements/for-of/dstr-obj-prop-elem-init-fn-name-class.js
+++ b/test/language/statements/for-of/dstr-obj-prop-elem-init-fn-name-class.js
@@ -36,12 +36,13 @@ info: |
           GetReferencedName(lref)).
 
 ---*/
-var xCls, cls;
+var xCls, cls, xCls2;
 
 var counter = 0;
 
-for ({ x: xCls = class x {}, x: cls = class {} } of [{}]) {
+for ({ x: xCls = class x {}, x: cls = class {}, x: xCls2 = class { static name() {} } } of [{}]) {
   assert.notSameValue(xCls.name, 'xCls');
+  assert.notSameValue(xCls2.name, 'xCls2');
 
   assert.sameValue(cls.name, 'cls');
   verifyNotEnumerable(cls, 'name');
diff --git a/test/language/statements/for-of/dstr-var-ary-ptrn-elem-id-init-fn-name-class.js b/test/language/statements/for-of/dstr-var-ary-ptrn-elem-id-init-fn-name-class.js
index bbb81bf337..5615f58d95 100644
--- a/test/language/statements/for-of/dstr-var-ary-ptrn-elem-id-init-fn-name-class.js
+++ b/test/language/statements/for-of/dstr-var-ary-ptrn-elem-id-init-fn-name-class.js
@@ -50,9 +50,10 @@ info: |
 
 var iterCount = 0;
 
-for (var [cls = class {}, xCls = class X {}] of [[]]) {
+for (var [cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }] of [[]]) {
   assert.sameValue(cls.name, 'cls');
   assert.notSameValue(xCls.name, 'xCls');
+  assert.notSameValue(xCls2.name, 'xCls2');
 
   iterCount += 1;
 }
diff --git a/test/language/statements/for-of/dstr-var-obj-ptrn-id-init-fn-name-class.js b/test/language/statements/for-of/dstr-var-obj-ptrn-id-init-fn-name-class.js
index e9c048d687..79e75c1175 100644
--- a/test/language/statements/for-of/dstr-var-obj-ptrn-id-init-fn-name-class.js
+++ b/test/language/statements/for-of/dstr-var-obj-ptrn-id-init-fn-name-class.js
@@ -49,9 +49,10 @@ info: |
 
 var iterCount = 0;
 
-for (var { cls = class {}, xCls = class X {} } of [{}]) {
+for (var { cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } } of [{}]) {
   assert.sameValue(cls.name, 'cls');
   assert.notSameValue(xCls.name, 'xCls');
+  assert.notSameValue(xCls2.name, 'xCls2');
 
   iterCount += 1;
 }
diff --git a/test/language/statements/for/dstr-const-ary-ptrn-elem-id-init-fn-name-class.js b/test/language/statements/for/dstr-const-ary-ptrn-elem-id-init-fn-name-class.js
index 62e5f6d352..e3541a3970 100644
--- a/test/language/statements/for/dstr-const-ary-ptrn-elem-id-init-fn-name-class.js
+++ b/test/language/statements/for/dstr-const-ary-ptrn-elem-id-init-fn-name-class.js
@@ -53,9 +53,10 @@ info: |
 
 var iterCount = 0;
 
-for (const [cls = class {}, xCls = class X {}] = []; iterCount < 1; ) {
+for (const [cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }] = []; iterCount < 1; ) {
   assert.sameValue(cls.name, 'cls');
   assert.notSameValue(xCls.name, 'xCls');
+  assert.notSameValue(xCls2.name, 'xCls2');
 
   iterCount += 1;
 }
diff --git a/test/language/statements/for/dstr-const-obj-ptrn-id-init-fn-name-class.js b/test/language/statements/for/dstr-const-obj-ptrn-id-init-fn-name-class.js
index d32208f5c9..c964dbf8e4 100644
--- a/test/language/statements/for/dstr-const-obj-ptrn-id-init-fn-name-class.js
+++ b/test/language/statements/for/dstr-const-obj-ptrn-id-init-fn-name-class.js
@@ -52,9 +52,10 @@ info: |
 
 var iterCount = 0;
 
-for (const { cls = class {}, xCls = class X {} } = {}; iterCount < 1; ) {
+for (const { cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } } = {}; iterCount < 1; ) {
   assert.sameValue(cls.name, 'cls');
   assert.notSameValue(xCls.name, 'xCls');
+  assert.notSameValue(xCls2.name, 'xCls2');
 
   iterCount += 1;
 }
diff --git a/test/language/statements/for/dstr-let-ary-ptrn-elem-id-init-fn-name-class.js b/test/language/statements/for/dstr-let-ary-ptrn-elem-id-init-fn-name-class.js
index e2954cdbde..ccdc290ff9 100644
--- a/test/language/statements/for/dstr-let-ary-ptrn-elem-id-init-fn-name-class.js
+++ b/test/language/statements/for/dstr-let-ary-ptrn-elem-id-init-fn-name-class.js
@@ -53,9 +53,10 @@ info: |
 
 var iterCount = 0;
 
-for (let [cls = class {}, xCls = class X {}] = []; iterCount < 1; ) {
+for (let [cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }] = []; iterCount < 1; ) {
   assert.sameValue(cls.name, 'cls');
   assert.notSameValue(xCls.name, 'xCls');
+  assert.notSameValue(xCls2.name, 'xCls2');
 
   iterCount += 1;
 }
diff --git a/test/language/statements/for/dstr-let-obj-ptrn-id-init-fn-name-class.js b/test/language/statements/for/dstr-let-obj-ptrn-id-init-fn-name-class.js
index 8ba844639f..0aa8c4a7de 100644
--- a/test/language/statements/for/dstr-let-obj-ptrn-id-init-fn-name-class.js
+++ b/test/language/statements/for/dstr-let-obj-ptrn-id-init-fn-name-class.js
@@ -52,9 +52,10 @@ info: |
 
 var iterCount = 0;
 
-for (let { cls = class {}, xCls = class X {} } = {}; iterCount < 1; ) {
+for (let { cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } } = {}; iterCount < 1; ) {
   assert.sameValue(cls.name, 'cls');
   assert.notSameValue(xCls.name, 'xCls');
+  assert.notSameValue(xCls2.name, 'xCls2');
 
   iterCount += 1;
 }
diff --git a/test/language/statements/for/dstr-var-ary-ptrn-elem-id-init-fn-name-class.js b/test/language/statements/for/dstr-var-ary-ptrn-elem-id-init-fn-name-class.js
index 6fd4199d2e..a597126464 100644
--- a/test/language/statements/for/dstr-var-ary-ptrn-elem-id-init-fn-name-class.js
+++ b/test/language/statements/for/dstr-var-ary-ptrn-elem-id-init-fn-name-class.js
@@ -47,9 +47,10 @@ info: |
 
 var iterCount = 0;
 
-for (var [cls = class {}, xCls = class X {}] = []; iterCount < 1; ) {
+for (var [cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }] = []; iterCount < 1; ) {
   assert.sameValue(cls.name, 'cls');
   assert.notSameValue(xCls.name, 'xCls');
+  assert.notSameValue(xCls2.name, 'xCls2');
   iterCount += 1;
 }
 
diff --git a/test/language/statements/for/dstr-var-obj-ptrn-id-init-fn-name-class.js b/test/language/statements/for/dstr-var-obj-ptrn-id-init-fn-name-class.js
index 098865e4c9..9fbf2fc444 100644
--- a/test/language/statements/for/dstr-var-obj-ptrn-id-init-fn-name-class.js
+++ b/test/language/statements/for/dstr-var-obj-ptrn-id-init-fn-name-class.js
@@ -46,9 +46,10 @@ info: |
 
 var iterCount = 0;
 
-for (var { cls = class {}, xCls = class X {} } = {}; iterCount < 1; ) {
+for (var { cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } } = {}; iterCount < 1; ) {
   assert.sameValue(cls.name, 'cls');
   assert.notSameValue(xCls.name, 'xCls');
+  assert.notSameValue(xCls2.name, 'xCls2');
   iterCount += 1;
 }
 
diff --git a/test/language/statements/function/dstr-ary-ptrn-elem-id-init-fn-name-class.js b/test/language/statements/function/dstr-ary-ptrn-elem-id-init-fn-name-class.js
index d45ea5f541..0231a6fa50 100644
--- a/test/language/statements/function/dstr-ary-ptrn-elem-id-init-fn-name-class.js
+++ b/test/language/statements/function/dstr-ary-ptrn-elem-id-init-fn-name-class.js
@@ -55,9 +55,10 @@ info: |
 ---*/
 
 var callCount = 0;
-function f([cls = class {}, xCls = class X {}]) {
+function f([cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }]) {
   assert.sameValue(cls.name, 'cls');
   assert.notSameValue(xCls.name, 'xCls');
+  assert.notSameValue(xCls2.name, 'xCls2');
   callCount = callCount + 1;
 };
 f([]);
diff --git a/test/language/statements/function/dstr-dflt-ary-ptrn-elem-id-init-fn-name-class.js b/test/language/statements/function/dstr-dflt-ary-ptrn-elem-id-init-fn-name-class.js
index 477e554042..eeb3bfc7d8 100644
--- a/test/language/statements/function/dstr-dflt-ary-ptrn-elem-id-init-fn-name-class.js
+++ b/test/language/statements/function/dstr-dflt-ary-ptrn-elem-id-init-fn-name-class.js
@@ -55,9 +55,10 @@ info: |
 ---*/
 
 var callCount = 0;
-function f([cls = class {}, xCls = class X {}] = []) {
+function f([cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }] = []) {
   assert.sameValue(cls.name, 'cls');
   assert.notSameValue(xCls.name, 'xCls');
+  assert.notSameValue(xCls2.name, 'xCls2');
   callCount = callCount + 1;
 };
 f();
diff --git a/test/language/statements/function/dstr-dflt-obj-ptrn-id-init-fn-name-class.js b/test/language/statements/function/dstr-dflt-obj-ptrn-id-init-fn-name-class.js
index f9eb8e325f..13e046c811 100644
--- a/test/language/statements/function/dstr-dflt-obj-ptrn-id-init-fn-name-class.js
+++ b/test/language/statements/function/dstr-dflt-obj-ptrn-id-init-fn-name-class.js
@@ -54,9 +54,10 @@ info: |
 ---*/
 
 var callCount = 0;
-function f({ cls = class {}, xCls = class X {} } = {}) {
+function f({ cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } } = {}) {
   assert.sameValue(cls.name, 'cls');
   assert.notSameValue(xCls.name, 'xCls');
+  assert.notSameValue(xCls2.name, 'xCls2');
   callCount = callCount + 1;
 };
 f();
diff --git a/test/language/statements/function/dstr-obj-ptrn-id-init-fn-name-class.js b/test/language/statements/function/dstr-obj-ptrn-id-init-fn-name-class.js
index f0c526cfe5..908c40bcd2 100644
--- a/test/language/statements/function/dstr-obj-ptrn-id-init-fn-name-class.js
+++ b/test/language/statements/function/dstr-obj-ptrn-id-init-fn-name-class.js
@@ -54,9 +54,10 @@ info: |
 ---*/
 
 var callCount = 0;
-function f({ cls = class {}, xCls = class X {} }) {
+function f({ cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } }) {
   assert.sameValue(cls.name, 'cls');
   assert.notSameValue(xCls.name, 'xCls');
+  assert.notSameValue(xCls2.name, 'xCls2');
   callCount = callCount + 1;
 };
 f({});
diff --git a/test/language/statements/generators/dstr-ary-ptrn-elem-id-init-fn-name-class.js b/test/language/statements/generators/dstr-ary-ptrn-elem-id-init-fn-name-class.js
index a18868f097..c834ea4c66 100644
--- a/test/language/statements/generators/dstr-ary-ptrn-elem-id-init-fn-name-class.js
+++ b/test/language/statements/generators/dstr-ary-ptrn-elem-id-init-fn-name-class.js
@@ -54,9 +54,10 @@ info: |
 ---*/
 
 var callCount = 0;
-function* f([cls = class {}, xCls = class X {}]) {
+function* f([cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }]) {
   assert.sameValue(cls.name, 'cls');
   assert.notSameValue(xCls.name, 'xCls');
+  assert.notSameValue(xCls2.name, 'xCls2');
   callCount = callCount + 1;
 };
 f([]).next();
diff --git a/test/language/statements/generators/dstr-dflt-ary-ptrn-elem-id-init-fn-name-class.js b/test/language/statements/generators/dstr-dflt-ary-ptrn-elem-id-init-fn-name-class.js
index 4724ef3f25..083875d7f4 100644
--- a/test/language/statements/generators/dstr-dflt-ary-ptrn-elem-id-init-fn-name-class.js
+++ b/test/language/statements/generators/dstr-dflt-ary-ptrn-elem-id-init-fn-name-class.js
@@ -54,9 +54,10 @@ info: |
 ---*/
 
 var callCount = 0;
-function* f([cls = class {}, xCls = class X {}] = []) {
+function* f([cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }] = []) {
   assert.sameValue(cls.name, 'cls');
   assert.notSameValue(xCls.name, 'xCls');
+  assert.notSameValue(xCls2.name, 'xCls2');
   callCount = callCount + 1;
 };
 f().next();
diff --git a/test/language/statements/generators/dstr-dflt-obj-ptrn-id-init-fn-name-class.js b/test/language/statements/generators/dstr-dflt-obj-ptrn-id-init-fn-name-class.js
index c2bbc7e66a..c5237dc1b9 100644
--- a/test/language/statements/generators/dstr-dflt-obj-ptrn-id-init-fn-name-class.js
+++ b/test/language/statements/generators/dstr-dflt-obj-ptrn-id-init-fn-name-class.js
@@ -53,9 +53,10 @@ info: |
 ---*/
 
 var callCount = 0;
-function* f({ cls = class {}, xCls = class X {} } = {}) {
+function* f({ cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } } = {}) {
   assert.sameValue(cls.name, 'cls');
   assert.notSameValue(xCls.name, 'xCls');
+  assert.notSameValue(xCls2.name, 'xCls2');
   callCount = callCount + 1;
 };
 f().next();
diff --git a/test/language/statements/generators/dstr-obj-ptrn-id-init-fn-name-class.js b/test/language/statements/generators/dstr-obj-ptrn-id-init-fn-name-class.js
index db0221af9b..22f38f316b 100644
--- a/test/language/statements/generators/dstr-obj-ptrn-id-init-fn-name-class.js
+++ b/test/language/statements/generators/dstr-obj-ptrn-id-init-fn-name-class.js
@@ -53,9 +53,10 @@ info: |
 ---*/
 
 var callCount = 0;
-function* f({ cls = class {}, xCls = class X {} }) {
+function* f({ cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } }) {
   assert.sameValue(cls.name, 'cls');
   assert.notSameValue(xCls.name, 'xCls');
+  assert.notSameValue(xCls2.name, 'xCls2');
   callCount = callCount + 1;
 };
 f({}).next();
diff --git a/test/language/statements/let/dstr-ary-ptrn-elem-id-init-fn-name-class.js b/test/language/statements/let/dstr-ary-ptrn-elem-id-init-fn-name-class.js
index f4656331fc..5ac218c119 100644
--- a/test/language/statements/let/dstr-ary-ptrn-elem-id-init-fn-name-class.js
+++ b/test/language/statements/let/dstr-ary-ptrn-elem-id-init-fn-name-class.js
@@ -32,7 +32,8 @@ info: |
     8. Return InitializeReferencedBinding(lhs, v).
 ---*/
 
-let [cls = class {}, xCls = class X {}] = [];
+let [cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }] = [];
 
 assert.sameValue(cls.name, 'cls');
 assert.notSameValue(xCls.name, 'xCls');
+assert.notSameValue(xCls2.name, 'xCls2');
diff --git a/test/language/statements/let/dstr-obj-ptrn-id-init-fn-name-class.js b/test/language/statements/let/dstr-obj-ptrn-id-init-fn-name-class.js
index a817b9c021..3237b62485 100644
--- a/test/language/statements/let/dstr-obj-ptrn-id-init-fn-name-class.js
+++ b/test/language/statements/let/dstr-obj-ptrn-id-init-fn-name-class.js
@@ -31,7 +31,8 @@ info: |
                bindingId).
 ---*/
 
-let { cls = class {}, xCls = class X {} } = {};
+let { cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } } = {};
 
 assert.sameValue(cls.name, 'cls');
 assert.notSameValue(xCls.name, 'xCls');
+assert.notSameValue(xCls2.name, 'xCls2');
diff --git a/test/language/statements/let/fn-name-class.js b/test/language/statements/let/fn-name-class.js
index 85be2ac429..4819a385b6 100644
--- a/test/language/statements/let/fn-name-class.js
+++ b/test/language/statements/let/fn-name-class.js
@@ -19,8 +19,10 @@ features: [class]
 
 let xCls = class x {};
 let cls = class {};
+let xCls2 = class { static name() {} };
 
-assert(xCls.name !== 'xCls');
+assert.notSameValue(xCls.name, 'xCls');
+assert.notSameValue(xCls2.name, 'xCls2');
 
 assert.sameValue(cls.name, 'cls');
 verifyNotEnumerable(cls, 'name');
diff --git a/test/language/statements/try/dstr-ary-ptrn-elem-id-init-fn-name-class.js b/test/language/statements/try/dstr-ary-ptrn-elem-id-init-fn-name-class.js
index e07a97bde8..6fbce483da 100644
--- a/test/language/statements/try/dstr-ary-ptrn-elem-id-init-fn-name-class.js
+++ b/test/language/statements/try/dstr-ary-ptrn-elem-id-init-fn-name-class.js
@@ -34,9 +34,10 @@ var ranCatch = false;
 
 try {
   throw [];
-} catch ([cls = class {}, xCls = class X {}]) {
+} catch ([cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }]) {
   assert.sameValue(cls.name, 'cls');
   assert.notSameValue(xCls.name, 'xCls');
+  assert.notSameValue(xCls2.name, 'xCls2');
   ranCatch = true;
 }
 
diff --git a/test/language/statements/try/dstr-obj-ptrn-id-init-fn-name-class.js b/test/language/statements/try/dstr-obj-ptrn-id-init-fn-name-class.js
index ead6e786a7..491fa4765d 100644
--- a/test/language/statements/try/dstr-obj-ptrn-id-init-fn-name-class.js
+++ b/test/language/statements/try/dstr-obj-ptrn-id-init-fn-name-class.js
@@ -33,9 +33,10 @@ var ranCatch = false;
 
 try {
   throw {};
-} catch ({ cls = class {}, xCls = class X {} }) {
+} catch ({ cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } }) {
   assert.sameValue(cls.name, 'cls');
   assert.notSameValue(xCls.name, 'xCls');
+  assert.notSameValue(xCls2.name, 'xCls2');
   ranCatch = true;
 }
 
diff --git a/test/language/statements/variable/dstr-ary-ptrn-elem-id-init-fn-name-class.js b/test/language/statements/variable/dstr-ary-ptrn-elem-id-init-fn-name-class.js
index d466371bfc..c2366522ad 100644
--- a/test/language/statements/variable/dstr-ary-ptrn-elem-id-init-fn-name-class.js
+++ b/test/language/statements/variable/dstr-ary-ptrn-elem-id-init-fn-name-class.js
@@ -31,7 +31,8 @@ info: |
     8. Return InitializeReferencedBinding(lhs, v).
 ---*/
 
-var [cls = class {}, xCls = class X {}] = [];
+var [cls = class {}, xCls = class X {}, xCls2 = class { static name() {} }] = [];
 
 assert.sameValue(cls.name, 'cls');
 assert.notSameValue(xCls.name, 'xCls');
+assert.notSameValue(xCls2.name, 'xCls2');
diff --git a/test/language/statements/variable/dstr-obj-ptrn-id-init-fn-name-class.js b/test/language/statements/variable/dstr-obj-ptrn-id-init-fn-name-class.js
index e39c6c37c8..4626187c3a 100644
--- a/test/language/statements/variable/dstr-obj-ptrn-id-init-fn-name-class.js
+++ b/test/language/statements/variable/dstr-obj-ptrn-id-init-fn-name-class.js
@@ -30,7 +30,8 @@ info: |
                bindingId).
 ---*/
 
-var { cls = class {}, xCls = class X {} } = {};
+var { cls = class {}, xCls = class X {}, xCls2 = class { static name() {} } } = {};
 
 assert.sameValue(cls.name, 'cls');
 assert.notSameValue(xCls.name, 'xCls');
+assert.notSameValue(xCls2.name, 'xCls2');
diff --git a/test/language/statements/variable/fn-name-class.js b/test/language/statements/variable/fn-name-class.js
index 0d095fc922..6aeb89a4d8 100644
--- a/test/language/statements/variable/fn-name-class.js
+++ b/test/language/statements/variable/fn-name-class.js
@@ -19,8 +19,10 @@ features: [class]
 
 var xCls = class x {};
 var cls = class {};
+var xCls2 = class { static name() {} };
 
-assert(xCls.name !== 'xCls');
+assert.notSameValue(xCls.name, 'xCls');
+assert.notSameValue(xCls2.name, 'xCls2');
 
 assert.sameValue(cls.name, 'cls');
 verifyNotEnumerable(cls, 'name');
-- 
GitLab