From 7522a29f3197a8ebba967b1edc125931d6332124 Mon Sep 17 00:00:00 2001
From: Leonardo Balter <leonardo.balter@gmail.com>
Date: Tue, 14 Mar 2017 14:34:20 -0400
Subject: [PATCH] Generate tests

---
 .../params-dflt-arg-val-not-undefined.js      |  7 +-
 .../params-dflt-arg-val-undefined.js          |  7 +-
 .../arrow-function/params-dflt-ref-prior.js   |  7 +-
 .../params-trailing-comma-dflt-param.js       | 59 +++++++++++++
 .../params-trailing-comma-multiple-param.js   | 59 +++++++++++++
 .../params-trailing-comma-rest-early-error.js | 57 ++++++++++++
 .../params-trailing-comma-single-param.js     | 58 +++++++++++++
 ...ams-gen-meth-dflt-arg-val-not-undefined.js |  3 +
 .../params-gen-meth-dflt-arg-val-undefined.js |  3 +
 .../class/params-gen-meth-dflt-ref-prior.js   |  3 +
 ...-meth-static-dflt-arg-val-not-undefined.js |  3 +
 ...-gen-meth-static-dflt-arg-val-undefined.js |  3 +
 .../params-gen-meth-static-dflt-ref-prior.js  |  3 +
 ...n-meth-static-trailing-comma-dflt-param.js | 87 +++++++++++++++++++
 ...th-static-trailing-comma-multiple-param.js | 87 +++++++++++++++++++
 ...-static-trailing-comma-rest-early-error.js | 83 ++++++++++++++++++
 ...meth-static-trailing-comma-single-param.js | 86 ++++++++++++++++++
 ...rams-gen-meth-trailing-comma-dflt-param.js | 87 +++++++++++++++++++
 ...-gen-meth-trailing-comma-multiple-param.js | 87 +++++++++++++++++++
 ...en-meth-trailing-comma-rest-early-error.js | 83 ++++++++++++++++++
 ...ms-gen-meth-trailing-comma-single-param.js | 86 ++++++++++++++++++
 .../params-meth-dflt-arg-val-not-undefined.js |  3 +
 .../params-meth-dflt-arg-val-undefined.js     |  3 +
 .../class/params-meth-dflt-ref-prior.js       |  3 +
 ...-meth-static-dflt-arg-val-not-undefined.js |  3 +
 ...rams-meth-static-dflt-arg-val-undefined.js |  3 +
 .../params-meth-static-dflt-ref-prior.js      |  3 +
 ...s-meth-static-trailing-comma-dflt-param.js | 84 ++++++++++++++++++
 ...th-static-trailing-comma-multiple-param.js | 84 ++++++++++++++++++
 ...-static-trailing-comma-rest-early-error.js | 80 +++++++++++++++++
 ...meth-static-trailing-comma-single-param.js | 83 ++++++++++++++++++
 .../params-meth-trailing-comma-dflt-param.js  | 84 ++++++++++++++++++
 ...rams-meth-trailing-comma-multiple-param.js | 84 ++++++++++++++++++
 ...ms-meth-trailing-comma-rest-early-error.js | 80 +++++++++++++++++
 ...params-meth-trailing-comma-single-param.js | 83 ++++++++++++++++++
 .../params-dflt-arg-val-not-undefined.js      |  7 +-
 .../function/params-dflt-arg-val-undefined.js |  7 +-
 .../function/params-dflt-ref-prior.js         |  7 +-
 .../params-trailing-comma-dflt-param.js       | 61 +++++++++++++
 .../params-trailing-comma-multiple-param.js   | 61 +++++++++++++
 .../params-trailing-comma-rest-early-error.js | 58 +++++++++++++
 .../params-trailing-comma-single-param.js     | 60 +++++++++++++
 .../params-dflt-arg-val-not-undefined.js      |  7 +-
 .../params-dflt-arg-val-undefined.js          |  7 +-
 .../generators/params-dflt-ref-prior.js       |  7 +-
 .../params-trailing-comma-dflt-param.js       | 61 +++++++++++++
 .../params-trailing-comma-multiple-param.js   | 61 +++++++++++++
 .../params-trailing-comma-rest-early-error.js | 58 +++++++++++++
 .../params-trailing-comma-single-param.js     | 60 +++++++++++++
 ...ams-gen-meth-dflt-arg-val-not-undefined.js |  3 +
 .../params-gen-meth-dflt-arg-val-undefined.js |  3 +
 .../params-gen-meth-dflt-ref-prior.js         |  3 +
 ...rams-gen-meth-trailing-comma-dflt-param.js | 69 +++++++++++++++
 ...-gen-meth-trailing-comma-multiple-param.js | 69 +++++++++++++++
 ...en-meth-trailing-comma-rest-early-error.js | 65 ++++++++++++++
 ...ms-gen-meth-trailing-comma-single-param.js | 68 +++++++++++++++
 .../params-meth-dflt-arg-val-not-undefined.js |  3 +
 .../params-meth-dflt-arg-val-undefined.js     |  3 +
 .../params-meth-dflt-ref-prior.js             |  3 +
 .../params-meth-trailing-comma-dflt-param.js  | 66 ++++++++++++++
 ...rams-meth-trailing-comma-multiple-param.js | 66 ++++++++++++++
 ...ms-meth-trailing-comma-rest-early-error.js | 62 +++++++++++++
 ...params-meth-trailing-comma-single-param.js | 65 ++++++++++++++
 ...ams-gen-meth-dflt-arg-val-not-undefined.js |  3 +
 .../params-gen-meth-dflt-arg-val-undefined.js |  3 +
 .../class/params-gen-meth-dflt-ref-prior.js   |  3 +
 ...-meth-static-dflt-arg-val-not-undefined.js |  3 +
 ...-gen-meth-static-dflt-arg-val-undefined.js |  3 +
 .../params-gen-meth-static-dflt-ref-prior.js  |  3 +
 ...n-meth-static-trailing-comma-dflt-param.js | 85 ++++++++++++++++++
 ...th-static-trailing-comma-multiple-param.js | 85 ++++++++++++++++++
 ...-static-trailing-comma-rest-early-error.js | 81 +++++++++++++++++
 ...meth-static-trailing-comma-single-param.js | 84 ++++++++++++++++++
 ...rams-gen-meth-trailing-comma-dflt-param.js | 85 ++++++++++++++++++
 ...-gen-meth-trailing-comma-multiple-param.js | 85 ++++++++++++++++++
 ...en-meth-trailing-comma-rest-early-error.js | 81 +++++++++++++++++
 ...ms-gen-meth-trailing-comma-single-param.js | 84 ++++++++++++++++++
 .../params-meth-dflt-arg-val-not-undefined.js |  3 +
 .../params-meth-dflt-arg-val-undefined.js     |  3 +
 .../class/params-meth-dflt-ref-prior.js       |  3 +
 ...-meth-static-dflt-arg-val-not-undefined.js |  3 +
 ...rams-meth-static-dflt-arg-val-undefined.js |  3 +
 .../params-meth-static-dflt-ref-prior.js      |  3 +
 ...s-meth-static-trailing-comma-dflt-param.js | 83 ++++++++++++++++++
 ...th-static-trailing-comma-multiple-param.js | 83 ++++++++++++++++++
 ...-static-trailing-comma-rest-early-error.js | 79 +++++++++++++++++
 ...meth-static-trailing-comma-single-param.js | 82 +++++++++++++++++
 .../params-meth-trailing-comma-dflt-param.js  | 83 ++++++++++++++++++
 ...rams-meth-trailing-comma-multiple-param.js | 83 ++++++++++++++++++
 ...ms-meth-trailing-comma-rest-early-error.js | 79 +++++++++++++++++
 ...params-meth-trailing-comma-single-param.js | 82 +++++++++++++++++
 .../params-dflt-arg-val-not-undefined.js      |  5 +-
 .../function/params-dflt-arg-val-undefined.js |  5 +-
 .../function/params-dflt-ref-prior.js         |  5 +-
 .../params-trailing-comma-dflt-param.js       | 61 +++++++++++++
 .../params-trailing-comma-multiple-param.js   | 61 +++++++++++++
 .../params-trailing-comma-rest-early-error.js | 59 +++++++++++++
 .../params-trailing-comma-single-param.js     | 60 +++++++++++++
 .../params-dflt-arg-val-not-undefined.js      |  5 +-
 .../params-dflt-arg-val-undefined.js          |  5 +-
 .../generators/params-dflt-ref-prior.js       |  5 +-
 .../params-trailing-comma-dflt-param.js       | 60 +++++++++++++
 .../params-trailing-comma-multiple-param.js   | 60 +++++++++++++
 .../params-trailing-comma-rest-early-error.js | 58 +++++++++++++
 .../params-trailing-comma-single-param.js     | 59 +++++++++++++
 105 files changed, 4537 insertions(+), 39 deletions(-)
 create mode 100644 test/language/expressions/arrow-function/params-trailing-comma-dflt-param.js
 create mode 100644 test/language/expressions/arrow-function/params-trailing-comma-multiple-param.js
 create mode 100644 test/language/expressions/arrow-function/params-trailing-comma-rest-early-error.js
 create mode 100644 test/language/expressions/arrow-function/params-trailing-comma-single-param.js
 create mode 100644 test/language/expressions/class/params-gen-meth-static-trailing-comma-dflt-param.js
 create mode 100644 test/language/expressions/class/params-gen-meth-static-trailing-comma-multiple-param.js
 create mode 100644 test/language/expressions/class/params-gen-meth-static-trailing-comma-rest-early-error.js
 create mode 100644 test/language/expressions/class/params-gen-meth-static-trailing-comma-single-param.js
 create mode 100644 test/language/expressions/class/params-gen-meth-trailing-comma-dflt-param.js
 create mode 100644 test/language/expressions/class/params-gen-meth-trailing-comma-multiple-param.js
 create mode 100644 test/language/expressions/class/params-gen-meth-trailing-comma-rest-early-error.js
 create mode 100644 test/language/expressions/class/params-gen-meth-trailing-comma-single-param.js
 create mode 100644 test/language/expressions/class/params-meth-static-trailing-comma-dflt-param.js
 create mode 100644 test/language/expressions/class/params-meth-static-trailing-comma-multiple-param.js
 create mode 100644 test/language/expressions/class/params-meth-static-trailing-comma-rest-early-error.js
 create mode 100644 test/language/expressions/class/params-meth-static-trailing-comma-single-param.js
 create mode 100644 test/language/expressions/class/params-meth-trailing-comma-dflt-param.js
 create mode 100644 test/language/expressions/class/params-meth-trailing-comma-multiple-param.js
 create mode 100644 test/language/expressions/class/params-meth-trailing-comma-rest-early-error.js
 create mode 100644 test/language/expressions/class/params-meth-trailing-comma-single-param.js
 create mode 100644 test/language/expressions/function/params-trailing-comma-dflt-param.js
 create mode 100644 test/language/expressions/function/params-trailing-comma-multiple-param.js
 create mode 100644 test/language/expressions/function/params-trailing-comma-rest-early-error.js
 create mode 100644 test/language/expressions/function/params-trailing-comma-single-param.js
 create mode 100644 test/language/expressions/generators/params-trailing-comma-dflt-param.js
 create mode 100644 test/language/expressions/generators/params-trailing-comma-multiple-param.js
 create mode 100644 test/language/expressions/generators/params-trailing-comma-rest-early-error.js
 create mode 100644 test/language/expressions/generators/params-trailing-comma-single-param.js
 create mode 100644 test/language/expressions/object/method-definition/params-gen-meth-trailing-comma-dflt-param.js
 create mode 100644 test/language/expressions/object/method-definition/params-gen-meth-trailing-comma-multiple-param.js
 create mode 100644 test/language/expressions/object/method-definition/params-gen-meth-trailing-comma-rest-early-error.js
 create mode 100644 test/language/expressions/object/method-definition/params-gen-meth-trailing-comma-single-param.js
 create mode 100644 test/language/expressions/object/method-definition/params-meth-trailing-comma-dflt-param.js
 create mode 100644 test/language/expressions/object/method-definition/params-meth-trailing-comma-multiple-param.js
 create mode 100644 test/language/expressions/object/method-definition/params-meth-trailing-comma-rest-early-error.js
 create mode 100644 test/language/expressions/object/method-definition/params-meth-trailing-comma-single-param.js
 create mode 100644 test/language/statements/class/params-gen-meth-static-trailing-comma-dflt-param.js
 create mode 100644 test/language/statements/class/params-gen-meth-static-trailing-comma-multiple-param.js
 create mode 100644 test/language/statements/class/params-gen-meth-static-trailing-comma-rest-early-error.js
 create mode 100644 test/language/statements/class/params-gen-meth-static-trailing-comma-single-param.js
 create mode 100644 test/language/statements/class/params-gen-meth-trailing-comma-dflt-param.js
 create mode 100644 test/language/statements/class/params-gen-meth-trailing-comma-multiple-param.js
 create mode 100644 test/language/statements/class/params-gen-meth-trailing-comma-rest-early-error.js
 create mode 100644 test/language/statements/class/params-gen-meth-trailing-comma-single-param.js
 create mode 100644 test/language/statements/class/params-meth-static-trailing-comma-dflt-param.js
 create mode 100644 test/language/statements/class/params-meth-static-trailing-comma-multiple-param.js
 create mode 100644 test/language/statements/class/params-meth-static-trailing-comma-rest-early-error.js
 create mode 100644 test/language/statements/class/params-meth-static-trailing-comma-single-param.js
 create mode 100644 test/language/statements/class/params-meth-trailing-comma-dflt-param.js
 create mode 100644 test/language/statements/class/params-meth-trailing-comma-multiple-param.js
 create mode 100644 test/language/statements/class/params-meth-trailing-comma-rest-early-error.js
 create mode 100644 test/language/statements/class/params-meth-trailing-comma-single-param.js
 create mode 100644 test/language/statements/function/params-trailing-comma-dflt-param.js
 create mode 100644 test/language/statements/function/params-trailing-comma-multiple-param.js
 create mode 100644 test/language/statements/function/params-trailing-comma-rest-early-error.js
 create mode 100644 test/language/statements/function/params-trailing-comma-single-param.js
 create mode 100644 test/language/statements/generators/params-trailing-comma-dflt-param.js
 create mode 100644 test/language/statements/generators/params-trailing-comma-multiple-param.js
 create mode 100644 test/language/statements/generators/params-trailing-comma-rest-early-error.js
 create mode 100644 test/language/statements/generators/params-trailing-comma-single-param.js

diff --git a/test/language/expressions/arrow-function/params-dflt-arg-val-not-undefined.js b/test/language/expressions/arrow-function/params-dflt-arg-val-not-undefined.js
index 6bbd530386..124a1addfe 100644
--- a/test/language/expressions/arrow-function/params-dflt-arg-val-not-undefined.js
+++ b/test/language/expressions/arrow-function/params-dflt-arg-val-not-undefined.js
@@ -60,8 +60,9 @@ var nullCount = 0;
 var objCount = 0;
 
 var callCount = 0;
-var f;
-f = (aFalse = falseCount +=1, aString = stringCount += 1, aNaN = nanCount += 1, a0 = zeroCount += 1, aNull = nullCount += 1, aObj = objCount +=1) => {
+// Stores a reference `ref` for case evaluation
+var ref;
+ref = (aFalse = falseCount +=1, aString = stringCount += 1, aNaN = nanCount += 1, a0 = zeroCount += 1, aNull = nullCount += 1, aObj = objCount +=1) => {
   assert.sameValue(aFalse, false);
   assert.sameValue(aString, '');
   assert.sameValue(aNaN, NaN);
@@ -71,7 +72,7 @@ f = (aFalse = falseCount +=1, aString = stringCount += 1, aNaN = nanCount += 1,
   callCount = callCount + 1;
 };
 
-f(false, '', NaN, 0, null, obj);
+ref(false, '', NaN, 0, null, obj);
 assert.sameValue(callCount, 1, 'arrow function invoked exactly once');
 
 assert.sameValue(falseCount, 0, 'initializer not evaluated: false');
diff --git a/test/language/expressions/arrow-function/params-dflt-arg-val-undefined.js b/test/language/expressions/arrow-function/params-dflt-arg-val-undefined.js
index d3c55e91b0..6de08d0c56 100644
--- a/test/language/expressions/arrow-function/params-dflt-arg-val-undefined.js
+++ b/test/language/expressions/arrow-function/params-dflt-arg-val-undefined.js
@@ -53,13 +53,14 @@ info: |
 ---*/
 
 var callCount = 0;
-var f;
-f = (fromLiteral = 23, fromExpr = 45, fromHole = 99) => {
+// Stores a reference `ref` for case evaluation
+var ref;
+ref = (fromLiteral = 23, fromExpr = 45, fromHole = 99) => {
   assert.sameValue(fromLiteral, 23);
   assert.sameValue(fromExpr, 45);
   assert.sameValue(fromHole, 99);
   callCount = callCount + 1;
 };
 
-f(undefined, void 0);
+ref(undefined, void 0);
 assert.sameValue(callCount, 1, 'arrow function invoked exactly once');
diff --git a/test/language/expressions/arrow-function/params-dflt-ref-prior.js b/test/language/expressions/arrow-function/params-dflt-ref-prior.js
index 41111ad740..bb39e86867 100644
--- a/test/language/expressions/arrow-function/params-dflt-ref-prior.js
+++ b/test/language/expressions/arrow-function/params-dflt-ref-prior.js
@@ -50,13 +50,14 @@ info: |
 var x = 0;
 
 var callCount = 0;
-var f;
-f = (x, y = x, z = y) => {
+// Stores a reference `ref` for case evaluation
+var ref;
+ref = (x, y = x, z = y) => {
   assert.sameValue(x, 3, 'first argument value');
   assert.sameValue(y, 3, 'second argument value');
   assert.sameValue(z, 3, 'third argument value');
   callCount = callCount + 1;
 };
 
-f(3);
+ref(3);
 assert.sameValue(callCount, 1, 'arrow function invoked exactly once');
diff --git a/test/language/expressions/arrow-function/params-trailing-comma-dflt-param.js b/test/language/expressions/arrow-function/params-trailing-comma-dflt-param.js
new file mode 100644
index 0000000000..8334049655
--- /dev/null
+++ b/test/language/expressions/arrow-function/params-trailing-comma-dflt-param.js
@@ -0,0 +1,59 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-dflt-param.case
+// - src/params/default/arrow-function.template
+/*---
+description: A trailing comma should not increase the respective length, using default parameters (arrow function expression)
+esid: sec-arrow-function-definitions-runtime-semantics-evaluation
+es6id: 14.2.16
+features: [default-parameters]
+flags: [generated]
+info: |
+    ArrowFunction : ArrowParameters => ConciseBody
+
+    [...]
+    4. Let closure be FunctionCreate(Arrow, parameters, ConciseBody, scope, strict).
+    [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+// Stores a reference `ref` for case evaluation
+var ref;
+ref = (a, b = 39,) => {
+  assert.sameValue(a, 42);
+  assert.sameValue(b, 39);
+  callCount = callCount + 1;
+};
+
+ref(42, undefined, 1);
+assert.sameValue(callCount, 1, 'arrow function invoked exactly once');
+
+assert.sameValue(ref.length, 1, 'length is properly set');
diff --git a/test/language/expressions/arrow-function/params-trailing-comma-multiple-param.js b/test/language/expressions/arrow-function/params-trailing-comma-multiple-param.js
new file mode 100644
index 0000000000..639dab0f56
--- /dev/null
+++ b/test/language/expressions/arrow-function/params-trailing-comma-multiple-param.js
@@ -0,0 +1,59 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-multiple-param.case
+// - src/params/default/arrow-function.template
+/*---
+description: A trailing comma should not increase the respective length, using multiple parameters (arrow function expression)
+esid: sec-arrow-function-definitions-runtime-semantics-evaluation
+es6id: 14.2.16
+features: [default-parameters]
+flags: [generated]
+info: |
+    ArrowFunction : ArrowParameters => ConciseBody
+
+    [...]
+    4. Let closure be FunctionCreate(Arrow, parameters, ConciseBody, scope, strict).
+    [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+// Stores a reference `ref` for case evaluation
+var ref;
+ref = (a, b,) => {
+  assert.sameValue(a, 42);
+  assert.sameValue(b, 39);
+  callCount = callCount + 1;
+};
+
+ref(42, 39, 1);
+assert.sameValue(callCount, 1, 'arrow function invoked exactly once');
+
+assert.sameValue(ref.length, 2, 'length is properly set');
diff --git a/test/language/expressions/arrow-function/params-trailing-comma-rest-early-error.js b/test/language/expressions/arrow-function/params-trailing-comma-rest-early-error.js
new file mode 100644
index 0000000000..7c42cae001
--- /dev/null
+++ b/test/language/expressions/arrow-function/params-trailing-comma-rest-early-error.js
@@ -0,0 +1,57 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-rest-early-error.case
+// - src/params/syntax/arrow-function.template
+/*---
+description: It's a syntax error if a FunctionRestParameter is followed by a trailing comma (arrow function expression)
+esid: sec-arrow-function-definitions-runtime-semantics-evaluation
+es6id: 14.2.16
+features: [default-parameters]
+flags: [generated]
+negative:
+  phase: early
+  type: SyntaxError
+info: |
+    ArrowFunction : ArrowParameters => ConciseBody
+
+    [...]
+    4. Let closure be FunctionCreate(Arrow, parameters, ConciseBody, scope, strict).
+    [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] :
+        [empty]
+        FunctionRestParameter[?Yield, ?Await]
+        FormalParameterList[?Yield, ?Await]
+        FormalParameterList[?Yield, ?Await] ,
+        FormalParameterList[?Yield, ?Await] , FunctionRestParameter[?Yield, ?Await]
+---*/
+
+0, (...a,) => {
+  
+};
diff --git a/test/language/expressions/arrow-function/params-trailing-comma-single-param.js b/test/language/expressions/arrow-function/params-trailing-comma-single-param.js
new file mode 100644
index 0000000000..4ba05c84a1
--- /dev/null
+++ b/test/language/expressions/arrow-function/params-trailing-comma-single-param.js
@@ -0,0 +1,58 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-single-param.case
+// - src/params/default/arrow-function.template
+/*---
+description: A trailing comma should not increase the respective length, using a single parameter (arrow function expression)
+esid: sec-arrow-function-definitions-runtime-semantics-evaluation
+es6id: 14.2.16
+features: [default-parameters]
+flags: [generated]
+info: |
+    ArrowFunction : ArrowParameters => ConciseBody
+
+    [...]
+    4. Let closure be FunctionCreate(Arrow, parameters, ConciseBody, scope, strict).
+    [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+// Stores a reference `ref` for case evaluation
+var ref;
+ref = (a,) => {
+  assert.sameValue(a, 42);
+  callCount = callCount + 1;
+};
+
+ref(42, 39);
+assert.sameValue(callCount, 1, 'arrow function invoked exactly once');
+
+assert.sameValue(ref.length, 1, 'length is properly set');
diff --git a/test/language/expressions/class/params-gen-meth-dflt-arg-val-not-undefined.js b/test/language/expressions/class/params-gen-meth-dflt-arg-val-not-undefined.js
index 1eca63f820..7e646c8371 100644
--- a/test/language/expressions/class/params-gen-meth-dflt-arg-val-not-undefined.js
+++ b/test/language/expressions/class/params-gen-meth-dflt-arg-val-not-undefined.js
@@ -98,6 +98,9 @@ var C = class {
 
 C.prototype.method(false, '', NaN, 0, null, obj).next();
 
+// Stores a reference `ref` for case evaluation
+var ref = C.prototype.method;
+
 assert.sameValue(callCount, 1, 'method invoked exactly once');
 
 assert.sameValue(falseCount, 0, 'initializer not evaluated: false');
diff --git a/test/language/expressions/class/params-gen-meth-dflt-arg-val-undefined.js b/test/language/expressions/class/params-gen-meth-dflt-arg-val-undefined.js
index 45383979e5..a9d7d04a96 100644
--- a/test/language/expressions/class/params-gen-meth-dflt-arg-val-undefined.js
+++ b/test/language/expressions/class/params-gen-meth-dflt-arg-val-undefined.js
@@ -88,4 +88,7 @@ var C = class {
 
 C.prototype.method(undefined, void 0).next();
 
+// Stores a reference `ref` for case evaluation
+var ref = C.prototype.method;
+
 assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/expressions/class/params-gen-meth-dflt-ref-prior.js b/test/language/expressions/class/params-gen-meth-dflt-ref-prior.js
index 08cab97dd2..eb08e5c1ae 100644
--- a/test/language/expressions/class/params-gen-meth-dflt-ref-prior.js
+++ b/test/language/expressions/class/params-gen-meth-dflt-ref-prior.js
@@ -85,4 +85,7 @@ var C = class {
 
 C.prototype.method(3).next();
 
+// Stores a reference `ref` for case evaluation
+var ref = C.prototype.method;
+
 assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/expressions/class/params-gen-meth-static-dflt-arg-val-not-undefined.js b/test/language/expressions/class/params-gen-meth-static-dflt-arg-val-not-undefined.js
index 023fccf96d..94e32b78ef 100644
--- a/test/language/expressions/class/params-gen-meth-static-dflt-arg-val-not-undefined.js
+++ b/test/language/expressions/class/params-gen-meth-static-dflt-arg-val-not-undefined.js
@@ -98,6 +98,9 @@ var C = class {
 
 C.method(false, '', NaN, 0, null, obj).next();
 
+// Stores a reference `ref` for case evaluation
+var ref = C.method;
+
 assert.sameValue(callCount, 1, 'method invoked exactly once');
 
 assert.sameValue(falseCount, 0, 'initializer not evaluated: false');
diff --git a/test/language/expressions/class/params-gen-meth-static-dflt-arg-val-undefined.js b/test/language/expressions/class/params-gen-meth-static-dflt-arg-val-undefined.js
index f3c329ed99..019cae222f 100644
--- a/test/language/expressions/class/params-gen-meth-static-dflt-arg-val-undefined.js
+++ b/test/language/expressions/class/params-gen-meth-static-dflt-arg-val-undefined.js
@@ -88,4 +88,7 @@ var C = class {
 
 C.method(undefined, void 0).next();
 
+// Stores a reference `ref` for case evaluation
+var ref = C.method;
+
 assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/expressions/class/params-gen-meth-static-dflt-ref-prior.js b/test/language/expressions/class/params-gen-meth-static-dflt-ref-prior.js
index 75ae6e0dae..275baaacd9 100644
--- a/test/language/expressions/class/params-gen-meth-static-dflt-ref-prior.js
+++ b/test/language/expressions/class/params-gen-meth-static-dflt-ref-prior.js
@@ -85,4 +85,7 @@ var C = class {
 
 C.method(3).next();
 
+// Stores a reference `ref` for case evaluation
+var ref = C.method;
+
 assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/expressions/class/params-gen-meth-static-trailing-comma-dflt-param.js b/test/language/expressions/class/params-gen-meth-static-trailing-comma-dflt-param.js
new file mode 100644
index 0000000000..1edabc15ea
--- /dev/null
+++ b/test/language/expressions/class/params-gen-meth-static-trailing-comma-dflt-param.js
@@ -0,0 +1,87 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-dflt-param.case
+// - src/params/default/cls-expr-gen-meth-static.template
+/*---
+description: A trailing comma should not increase the respective length, using default parameters (static class expression generator method)
+esid: sec-class-definitions-runtime-semantics-evaluation
+es6id: 14.5.16
+features: [default-parameters]
+flags: [generated]
+info: |
+    ClassExpression : class BindingIdentifieropt ClassTail
+
+    1. If BindingIdentifieropt is not present, let className be undefined.
+    2. Else, let className be StringValue of BindingIdentifier.
+    3. Let value be the result of ClassDefinitionEvaluation of ClassTail
+       with argument className.
+    [...]
+
+    14.5.14 Runtime Semantics: ClassDefinitionEvaluation
+
+    21. For each ClassElement m in order from methods
+        a. If IsStatic of m is false, then
+        b. Else,
+           Let status be the result of performing PropertyDefinitionEvaluation
+           for m with arguments F and false.
+    [...]
+
+    14.4.13 Runtime Semantics: PropertyDefinitionEvaluation
+
+    GeneratorMethod :
+        * PropertyName ( StrictFormalParameters ) { GeneratorBody }
+
+    1. Let propKey be the result of evaluating PropertyName.
+    2. ReturnIfAbrupt(propKey).
+    3. If the function code for this GeneratorMethod is strict mode code,
+       let strict be true. Otherwise let strict be false.
+    4. Let scope be the running execution context's LexicalEnvironment.
+    5. Let closure be GeneratorFunctionCreate(Method,
+       StrictFormalParameters, GeneratorBody, scope, strict).
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+var C = class {
+  static *method(a, b = 39,) {
+    assert.sameValue(a, 42);
+    assert.sameValue(b, 39);
+    callCount = callCount + 1;
+  }
+};
+
+C.method(42, undefined, 1).next();
+
+// Stores a reference `ref` for case evaluation
+var ref = C.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
+
+assert.sameValue(ref.length, 1, 'length is properly set');
diff --git a/test/language/expressions/class/params-gen-meth-static-trailing-comma-multiple-param.js b/test/language/expressions/class/params-gen-meth-static-trailing-comma-multiple-param.js
new file mode 100644
index 0000000000..fd48f9ff48
--- /dev/null
+++ b/test/language/expressions/class/params-gen-meth-static-trailing-comma-multiple-param.js
@@ -0,0 +1,87 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-multiple-param.case
+// - src/params/default/cls-expr-gen-meth-static.template
+/*---
+description: A trailing comma should not increase the respective length, using multiple parameters (static class expression generator method)
+esid: sec-class-definitions-runtime-semantics-evaluation
+es6id: 14.5.16
+features: [default-parameters]
+flags: [generated]
+info: |
+    ClassExpression : class BindingIdentifieropt ClassTail
+
+    1. If BindingIdentifieropt is not present, let className be undefined.
+    2. Else, let className be StringValue of BindingIdentifier.
+    3. Let value be the result of ClassDefinitionEvaluation of ClassTail
+       with argument className.
+    [...]
+
+    14.5.14 Runtime Semantics: ClassDefinitionEvaluation
+
+    21. For each ClassElement m in order from methods
+        a. If IsStatic of m is false, then
+        b. Else,
+           Let status be the result of performing PropertyDefinitionEvaluation
+           for m with arguments F and false.
+    [...]
+
+    14.4.13 Runtime Semantics: PropertyDefinitionEvaluation
+
+    GeneratorMethod :
+        * PropertyName ( StrictFormalParameters ) { GeneratorBody }
+
+    1. Let propKey be the result of evaluating PropertyName.
+    2. ReturnIfAbrupt(propKey).
+    3. If the function code for this GeneratorMethod is strict mode code,
+       let strict be true. Otherwise let strict be false.
+    4. Let scope be the running execution context's LexicalEnvironment.
+    5. Let closure be GeneratorFunctionCreate(Method,
+       StrictFormalParameters, GeneratorBody, scope, strict).
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+var C = class {
+  static *method(a, b,) {
+    assert.sameValue(a, 42);
+    assert.sameValue(b, 39);
+    callCount = callCount + 1;
+  }
+};
+
+C.method(42, 39, 1).next();
+
+// Stores a reference `ref` for case evaluation
+var ref = C.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
+
+assert.sameValue(ref.length, 2, 'length is properly set');
diff --git a/test/language/expressions/class/params-gen-meth-static-trailing-comma-rest-early-error.js b/test/language/expressions/class/params-gen-meth-static-trailing-comma-rest-early-error.js
new file mode 100644
index 0000000000..a177a7db6a
--- /dev/null
+++ b/test/language/expressions/class/params-gen-meth-static-trailing-comma-rest-early-error.js
@@ -0,0 +1,83 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-rest-early-error.case
+// - src/params/syntax/cls-expr-gen-meth-static.template
+/*---
+description: It's a syntax error if a FunctionRestParameter is followed by a trailing comma (static class expression generator method)
+esid: sec-class-definitions-runtime-semantics-evaluation
+es6id: 14.5.16
+features: [default-parameters]
+flags: [generated]
+negative:
+  phase: early
+  type: SyntaxError
+info: |
+    ClassExpression : class BindingIdentifieropt ClassTail
+
+    1. If BindingIdentifieropt is not present, let className be undefined.
+    2. Else, let className be StringValue of BindingIdentifier.
+    3. Let value be the result of ClassDefinitionEvaluation of ClassTail
+       with argument className.
+    [...]
+
+    14.5.14 Runtime Semantics: ClassDefinitionEvaluation
+
+    21. For each ClassElement m in order from methods
+        a. If IsStatic of m is false, then
+        b. Else,
+           Let status be the result of performing PropertyDefinitionEvaluation
+           for m with arguments F and false.
+    [...]
+
+    14.4.13 Runtime Semantics: PropertyDefinitionEvaluation
+
+    GeneratorMethod :
+        * PropertyName ( StrictFormalParameters ) { GeneratorBody }
+
+    1. Let propKey be the result of evaluating PropertyName.
+    2. ReturnIfAbrupt(propKey).
+    3. If the function code for this GeneratorMethod is strict mode code,
+       let strict be true. Otherwise let strict be false.
+    4. Let scope be the running execution context's LexicalEnvironment.
+    5. Let closure be GeneratorFunctionCreate(Method,
+       StrictFormalParameters, GeneratorBody, scope, strict).
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] :
+        [empty]
+        FunctionRestParameter[?Yield, ?Await]
+        FormalParameterList[?Yield, ?Await]
+        FormalParameterList[?Yield, ?Await] ,
+        FormalParameterList[?Yield, ?Await] , FunctionRestParameter[?Yield, ?Await]
+---*/
+
+0, class {
+  static *method(...a,) {
+    
+  }
+};
diff --git a/test/language/expressions/class/params-gen-meth-static-trailing-comma-single-param.js b/test/language/expressions/class/params-gen-meth-static-trailing-comma-single-param.js
new file mode 100644
index 0000000000..ec09cd51b3
--- /dev/null
+++ b/test/language/expressions/class/params-gen-meth-static-trailing-comma-single-param.js
@@ -0,0 +1,86 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-single-param.case
+// - src/params/default/cls-expr-gen-meth-static.template
+/*---
+description: A trailing comma should not increase the respective length, using a single parameter (static class expression generator method)
+esid: sec-class-definitions-runtime-semantics-evaluation
+es6id: 14.5.16
+features: [default-parameters]
+flags: [generated]
+info: |
+    ClassExpression : class BindingIdentifieropt ClassTail
+
+    1. If BindingIdentifieropt is not present, let className be undefined.
+    2. Else, let className be StringValue of BindingIdentifier.
+    3. Let value be the result of ClassDefinitionEvaluation of ClassTail
+       with argument className.
+    [...]
+
+    14.5.14 Runtime Semantics: ClassDefinitionEvaluation
+
+    21. For each ClassElement m in order from methods
+        a. If IsStatic of m is false, then
+        b. Else,
+           Let status be the result of performing PropertyDefinitionEvaluation
+           for m with arguments F and false.
+    [...]
+
+    14.4.13 Runtime Semantics: PropertyDefinitionEvaluation
+
+    GeneratorMethod :
+        * PropertyName ( StrictFormalParameters ) { GeneratorBody }
+
+    1. Let propKey be the result of evaluating PropertyName.
+    2. ReturnIfAbrupt(propKey).
+    3. If the function code for this GeneratorMethod is strict mode code,
+       let strict be true. Otherwise let strict be false.
+    4. Let scope be the running execution context's LexicalEnvironment.
+    5. Let closure be GeneratorFunctionCreate(Method,
+       StrictFormalParameters, GeneratorBody, scope, strict).
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+var C = class {
+  static *method(a,) {
+    assert.sameValue(a, 42);
+    callCount = callCount + 1;
+  }
+};
+
+C.method(42, 39).next();
+
+// Stores a reference `ref` for case evaluation
+var ref = C.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
+
+assert.sameValue(ref.length, 1, 'length is properly set');
diff --git a/test/language/expressions/class/params-gen-meth-trailing-comma-dflt-param.js b/test/language/expressions/class/params-gen-meth-trailing-comma-dflt-param.js
new file mode 100644
index 0000000000..fe8f44849f
--- /dev/null
+++ b/test/language/expressions/class/params-gen-meth-trailing-comma-dflt-param.js
@@ -0,0 +1,87 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-dflt-param.case
+// - src/params/default/cls-expr-gen-meth.template
+/*---
+description: A trailing comma should not increase the respective length, using default parameters (class expression method)
+esid: sec-class-definitions-runtime-semantics-evaluation
+es6id: 14.5.16
+features: [default-parameters]
+flags: [generated]
+info: |
+    ClassExpression : class BindingIdentifieropt ClassTail
+
+    1. If BindingIdentifieropt is not present, let className be undefined.
+    2. Else, let className be StringValue of BindingIdentifier.
+    3. Let value be the result of ClassDefinitionEvaluation of ClassTail
+       with argument className.
+    [...]
+
+    14.5.14 Runtime Semantics: ClassDefinitionEvaluation
+
+    21. For each ClassElement m in order from methods
+        a. If IsStatic of m is false, then
+           i. Let status be the result of performing
+              PropertyDefinitionEvaluation for m with arguments proto and
+              false.
+        [...]
+
+    14.4.13 Runtime Semantics: PropertyDefinitionEvaluation
+
+    GeneratorMethod :
+        * PropertyName ( StrictFormalParameters ) { GeneratorBody }
+
+    1. Let propKey be the result of evaluating PropertyName.
+    2. ReturnIfAbrupt(propKey).
+    3. If the function code for this GeneratorMethod is strict mode code,
+       let strict be true. Otherwise let strict be false.
+    4. Let scope be the running execution context's LexicalEnvironment.
+    5. Let closure be GeneratorFunctionCreate(Method,
+       StrictFormalParameters, GeneratorBody, scope, strict).
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+var C = class {
+  *method(a, b = 39,) {
+    assert.sameValue(a, 42);
+    assert.sameValue(b, 39);
+    callCount = callCount + 1;
+  }
+};
+
+C.prototype.method(42, undefined, 1).next();
+
+// Stores a reference `ref` for case evaluation
+var ref = C.prototype.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
+
+assert.sameValue(ref.length, 1, 'length is properly set');
diff --git a/test/language/expressions/class/params-gen-meth-trailing-comma-multiple-param.js b/test/language/expressions/class/params-gen-meth-trailing-comma-multiple-param.js
new file mode 100644
index 0000000000..1b2307446f
--- /dev/null
+++ b/test/language/expressions/class/params-gen-meth-trailing-comma-multiple-param.js
@@ -0,0 +1,87 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-multiple-param.case
+// - src/params/default/cls-expr-gen-meth.template
+/*---
+description: A trailing comma should not increase the respective length, using multiple parameters (class expression method)
+esid: sec-class-definitions-runtime-semantics-evaluation
+es6id: 14.5.16
+features: [default-parameters]
+flags: [generated]
+info: |
+    ClassExpression : class BindingIdentifieropt ClassTail
+
+    1. If BindingIdentifieropt is not present, let className be undefined.
+    2. Else, let className be StringValue of BindingIdentifier.
+    3. Let value be the result of ClassDefinitionEvaluation of ClassTail
+       with argument className.
+    [...]
+
+    14.5.14 Runtime Semantics: ClassDefinitionEvaluation
+
+    21. For each ClassElement m in order from methods
+        a. If IsStatic of m is false, then
+           i. Let status be the result of performing
+              PropertyDefinitionEvaluation for m with arguments proto and
+              false.
+        [...]
+
+    14.4.13 Runtime Semantics: PropertyDefinitionEvaluation
+
+    GeneratorMethod :
+        * PropertyName ( StrictFormalParameters ) { GeneratorBody }
+
+    1. Let propKey be the result of evaluating PropertyName.
+    2. ReturnIfAbrupt(propKey).
+    3. If the function code for this GeneratorMethod is strict mode code,
+       let strict be true. Otherwise let strict be false.
+    4. Let scope be the running execution context's LexicalEnvironment.
+    5. Let closure be GeneratorFunctionCreate(Method,
+       StrictFormalParameters, GeneratorBody, scope, strict).
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+var C = class {
+  *method(a, b,) {
+    assert.sameValue(a, 42);
+    assert.sameValue(b, 39);
+    callCount = callCount + 1;
+  }
+};
+
+C.prototype.method(42, 39, 1).next();
+
+// Stores a reference `ref` for case evaluation
+var ref = C.prototype.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
+
+assert.sameValue(ref.length, 2, 'length is properly set');
diff --git a/test/language/expressions/class/params-gen-meth-trailing-comma-rest-early-error.js b/test/language/expressions/class/params-gen-meth-trailing-comma-rest-early-error.js
new file mode 100644
index 0000000000..66872635f9
--- /dev/null
+++ b/test/language/expressions/class/params-gen-meth-trailing-comma-rest-early-error.js
@@ -0,0 +1,83 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-rest-early-error.case
+// - src/params/syntax/cls-expr-gen-meth.template
+/*---
+description: It's a syntax error if a FunctionRestParameter is followed by a trailing comma (class expression method)
+esid: sec-class-definitions-runtime-semantics-evaluation
+es6id: 14.5.16
+features: [default-parameters]
+flags: [generated]
+negative:
+  phase: early
+  type: SyntaxError
+info: |
+    ClassExpression : class BindingIdentifieropt ClassTail
+
+    1. If BindingIdentifieropt is not present, let className be undefined.
+    2. Else, let className be StringValue of BindingIdentifier.
+    3. Let value be the result of ClassDefinitionEvaluation of ClassTail
+       with argument className.
+    [...]
+
+    14.5.14 Runtime Semantics: ClassDefinitionEvaluation
+
+    21. For each ClassElement m in order from methods
+        a. If IsStatic of m is false, then
+           i. Let status be the result of performing
+              PropertyDefinitionEvaluation for m with arguments proto and
+              false.
+        [...]
+
+    14.4.13 Runtime Semantics: PropertyDefinitionEvaluation
+
+    GeneratorMethod :
+        * PropertyName ( StrictFormalParameters ) { GeneratorBody }
+
+    1. Let propKey be the result of evaluating PropertyName.
+    2. ReturnIfAbrupt(propKey).
+    3. If the function code for this GeneratorMethod is strict mode code,
+       let strict be true. Otherwise let strict be false.
+    4. Let scope be the running execution context's LexicalEnvironment.
+    5. Let closure be GeneratorFunctionCreate(Method,
+       StrictFormalParameters, GeneratorBody, scope, strict).
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] :
+        [empty]
+        FunctionRestParameter[?Yield, ?Await]
+        FormalParameterList[?Yield, ?Await]
+        FormalParameterList[?Yield, ?Await] ,
+        FormalParameterList[?Yield, ?Await] , FunctionRestParameter[?Yield, ?Await]
+---*/
+
+0, class {
+  *method(...a,) {
+    
+  }
+};
diff --git a/test/language/expressions/class/params-gen-meth-trailing-comma-single-param.js b/test/language/expressions/class/params-gen-meth-trailing-comma-single-param.js
new file mode 100644
index 0000000000..e56043b421
--- /dev/null
+++ b/test/language/expressions/class/params-gen-meth-trailing-comma-single-param.js
@@ -0,0 +1,86 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-single-param.case
+// - src/params/default/cls-expr-gen-meth.template
+/*---
+description: A trailing comma should not increase the respective length, using a single parameter (class expression method)
+esid: sec-class-definitions-runtime-semantics-evaluation
+es6id: 14.5.16
+features: [default-parameters]
+flags: [generated]
+info: |
+    ClassExpression : class BindingIdentifieropt ClassTail
+
+    1. If BindingIdentifieropt is not present, let className be undefined.
+    2. Else, let className be StringValue of BindingIdentifier.
+    3. Let value be the result of ClassDefinitionEvaluation of ClassTail
+       with argument className.
+    [...]
+
+    14.5.14 Runtime Semantics: ClassDefinitionEvaluation
+
+    21. For each ClassElement m in order from methods
+        a. If IsStatic of m is false, then
+           i. Let status be the result of performing
+              PropertyDefinitionEvaluation for m with arguments proto and
+              false.
+        [...]
+
+    14.4.13 Runtime Semantics: PropertyDefinitionEvaluation
+
+    GeneratorMethod :
+        * PropertyName ( StrictFormalParameters ) { GeneratorBody }
+
+    1. Let propKey be the result of evaluating PropertyName.
+    2. ReturnIfAbrupt(propKey).
+    3. If the function code for this GeneratorMethod is strict mode code,
+       let strict be true. Otherwise let strict be false.
+    4. Let scope be the running execution context's LexicalEnvironment.
+    5. Let closure be GeneratorFunctionCreate(Method,
+       StrictFormalParameters, GeneratorBody, scope, strict).
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+var C = class {
+  *method(a,) {
+    assert.sameValue(a, 42);
+    callCount = callCount + 1;
+  }
+};
+
+C.prototype.method(42, 39).next();
+
+// Stores a reference `ref` for case evaluation
+var ref = C.prototype.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
+
+assert.sameValue(ref.length, 1, 'length is properly set');
diff --git a/test/language/expressions/class/params-meth-dflt-arg-val-not-undefined.js b/test/language/expressions/class/params-meth-dflt-arg-val-not-undefined.js
index a882098ce3..67046c63a5 100644
--- a/test/language/expressions/class/params-meth-dflt-arg-val-not-undefined.js
+++ b/test/language/expressions/class/params-meth-dflt-arg-val-not-undefined.js
@@ -95,6 +95,9 @@ var C = class {
 
 C.prototype.method(false, '', NaN, 0, null, obj);
 
+// Stores a reference `ref` for case evaluation
+var ref = C.prototype.method;
+
 assert.sameValue(callCount, 1, 'method invoked exactly once');
 
 assert.sameValue(falseCount, 0, 'initializer not evaluated: false');
diff --git a/test/language/expressions/class/params-meth-dflt-arg-val-undefined.js b/test/language/expressions/class/params-meth-dflt-arg-val-undefined.js
index ec748421f3..49840bdc62 100644
--- a/test/language/expressions/class/params-meth-dflt-arg-val-undefined.js
+++ b/test/language/expressions/class/params-meth-dflt-arg-val-undefined.js
@@ -85,4 +85,7 @@ var C = class {
 
 C.prototype.method(undefined, void 0);
 
+// Stores a reference `ref` for case evaluation
+var ref = C.prototype.method;
+
 assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/expressions/class/params-meth-dflt-ref-prior.js b/test/language/expressions/class/params-meth-dflt-ref-prior.js
index 7a650a08d5..449877bc6a 100644
--- a/test/language/expressions/class/params-meth-dflt-ref-prior.js
+++ b/test/language/expressions/class/params-meth-dflt-ref-prior.js
@@ -82,4 +82,7 @@ var C = class {
 
 C.prototype.method(3);
 
+// Stores a reference `ref` for case evaluation
+var ref = C.prototype.method;
+
 assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/expressions/class/params-meth-static-dflt-arg-val-not-undefined.js b/test/language/expressions/class/params-meth-static-dflt-arg-val-not-undefined.js
index 113d9e75a8..1a5528f143 100644
--- a/test/language/expressions/class/params-meth-static-dflt-arg-val-not-undefined.js
+++ b/test/language/expressions/class/params-meth-static-dflt-arg-val-not-undefined.js
@@ -95,6 +95,9 @@ var C = class {
 
 C.method(false, '', NaN, 0, null, obj);
 
+// Stores a reference `ref` for case evaluation
+var ref = C.method;
+
 assert.sameValue(callCount, 1, 'method invoked exactly once');
 
 assert.sameValue(falseCount, 0, 'initializer not evaluated: false');
diff --git a/test/language/expressions/class/params-meth-static-dflt-arg-val-undefined.js b/test/language/expressions/class/params-meth-static-dflt-arg-val-undefined.js
index 6355c328af..43ce95ca68 100644
--- a/test/language/expressions/class/params-meth-static-dflt-arg-val-undefined.js
+++ b/test/language/expressions/class/params-meth-static-dflt-arg-val-undefined.js
@@ -85,4 +85,7 @@ var C = class {
 
 C.method(undefined, void 0);
 
+// Stores a reference `ref` for case evaluation
+var ref = C.method;
+
 assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/expressions/class/params-meth-static-dflt-ref-prior.js b/test/language/expressions/class/params-meth-static-dflt-ref-prior.js
index 4d9702c610..4ae8dce0fa 100644
--- a/test/language/expressions/class/params-meth-static-dflt-ref-prior.js
+++ b/test/language/expressions/class/params-meth-static-dflt-ref-prior.js
@@ -82,4 +82,7 @@ var C = class {
 
 C.method(3);
 
+// Stores a reference `ref` for case evaluation
+var ref = C.method;
+
 assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/expressions/class/params-meth-static-trailing-comma-dflt-param.js b/test/language/expressions/class/params-meth-static-trailing-comma-dflt-param.js
new file mode 100644
index 0000000000..18ae7c3a31
--- /dev/null
+++ b/test/language/expressions/class/params-meth-static-trailing-comma-dflt-param.js
@@ -0,0 +1,84 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-dflt-param.case
+// - src/params/default/cls-expr-meth-static.template
+/*---
+description: A trailing comma should not increase the respective length, using default parameters (static class expression method)
+esid: sec-class-definitions-runtime-semantics-evaluation
+es6id: 14.5.16
+features: [default-parameters]
+flags: [generated]
+info: |
+    ClassExpression : class BindingIdentifieropt ClassTail
+
+    1. If BindingIdentifieropt is not present, let className be undefined.
+    2. Else, let className be StringValue of BindingIdentifier.
+    3. Let value be the result of ClassDefinitionEvaluation of ClassTail
+       with argument className.
+    [...]
+
+    14.5.14 Runtime Semantics: ClassDefinitionEvaluation
+
+    21. For each ClassElement m in order from methods
+        a. If IsStatic of m is false, then
+        b. Else,
+           Let status be the result of performing PropertyDefinitionEvaluation for
+           m with arguments F and false.
+    [...]
+
+    14.3.8 Runtime Semantics: DefineMethod
+
+    MethodDefinition : PropertyName ( StrictFormalParameters ) { FunctionBody }
+
+    [...]
+    6. Let closure be FunctionCreate(kind, StrictFormalParameters, FunctionBody,
+       scope, strict). If functionPrototype was passed as a parameter then pass its
+       value as the functionPrototype optional argument of FunctionCreate.
+    [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+var C = class {
+  static method(a, b = 39,) {
+    assert.sameValue(a, 42);
+    assert.sameValue(b, 39);
+    callCount = callCount + 1;
+  }
+};
+
+C.method(42, undefined, 1);
+
+// Stores a reference `ref` for case evaluation
+var ref = C.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
+
+assert.sameValue(ref.length, 1, 'length is properly set');
diff --git a/test/language/expressions/class/params-meth-static-trailing-comma-multiple-param.js b/test/language/expressions/class/params-meth-static-trailing-comma-multiple-param.js
new file mode 100644
index 0000000000..a978520b67
--- /dev/null
+++ b/test/language/expressions/class/params-meth-static-trailing-comma-multiple-param.js
@@ -0,0 +1,84 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-multiple-param.case
+// - src/params/default/cls-expr-meth-static.template
+/*---
+description: A trailing comma should not increase the respective length, using multiple parameters (static class expression method)
+esid: sec-class-definitions-runtime-semantics-evaluation
+es6id: 14.5.16
+features: [default-parameters]
+flags: [generated]
+info: |
+    ClassExpression : class BindingIdentifieropt ClassTail
+
+    1. If BindingIdentifieropt is not present, let className be undefined.
+    2. Else, let className be StringValue of BindingIdentifier.
+    3. Let value be the result of ClassDefinitionEvaluation of ClassTail
+       with argument className.
+    [...]
+
+    14.5.14 Runtime Semantics: ClassDefinitionEvaluation
+
+    21. For each ClassElement m in order from methods
+        a. If IsStatic of m is false, then
+        b. Else,
+           Let status be the result of performing PropertyDefinitionEvaluation for
+           m with arguments F and false.
+    [...]
+
+    14.3.8 Runtime Semantics: DefineMethod
+
+    MethodDefinition : PropertyName ( StrictFormalParameters ) { FunctionBody }
+
+    [...]
+    6. Let closure be FunctionCreate(kind, StrictFormalParameters, FunctionBody,
+       scope, strict). If functionPrototype was passed as a parameter then pass its
+       value as the functionPrototype optional argument of FunctionCreate.
+    [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+var C = class {
+  static method(a, b,) {
+    assert.sameValue(a, 42);
+    assert.sameValue(b, 39);
+    callCount = callCount + 1;
+  }
+};
+
+C.method(42, 39, 1);
+
+// Stores a reference `ref` for case evaluation
+var ref = C.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
+
+assert.sameValue(ref.length, 2, 'length is properly set');
diff --git a/test/language/expressions/class/params-meth-static-trailing-comma-rest-early-error.js b/test/language/expressions/class/params-meth-static-trailing-comma-rest-early-error.js
new file mode 100644
index 0000000000..19af19bf30
--- /dev/null
+++ b/test/language/expressions/class/params-meth-static-trailing-comma-rest-early-error.js
@@ -0,0 +1,80 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-rest-early-error.case
+// - src/params/syntax/cls-expr-meth-static.template
+/*---
+description: It's a syntax error if a FunctionRestParameter is followed by a trailing comma (static class expression method)
+esid: sec-class-definitions-runtime-semantics-evaluation
+es6id: 14.5.16
+features: [default-parameters]
+flags: [generated]
+negative:
+  phase: early
+  type: SyntaxError
+info: |
+    ClassExpression : class BindingIdentifieropt ClassTail
+
+    1. If BindingIdentifieropt is not present, let className be undefined.
+    2. Else, let className be StringValue of BindingIdentifier.
+    3. Let value be the result of ClassDefinitionEvaluation of ClassTail
+       with argument className.
+    [...]
+
+    14.5.14 Runtime Semantics: ClassDefinitionEvaluation
+
+    21. For each ClassElement m in order from methods
+        a. If IsStatic of m is false, then
+        b. Else,
+           Let status be the result of performing PropertyDefinitionEvaluation for
+           m with arguments F and false.
+    [...]
+
+    14.3.8 Runtime Semantics: DefineMethod
+
+    MethodDefinition : PropertyName ( StrictFormalParameters ) { FunctionBody }
+
+    [...]
+    6. Let closure be FunctionCreate(kind, StrictFormalParameters, FunctionBody,
+       scope, strict). If functionPrototype was passed as a parameter then pass its
+       value as the functionPrototype optional argument of FunctionCreate.
+    [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] :
+        [empty]
+        FunctionRestParameter[?Yield, ?Await]
+        FormalParameterList[?Yield, ?Await]
+        FormalParameterList[?Yield, ?Await] ,
+        FormalParameterList[?Yield, ?Await] , FunctionRestParameter[?Yield, ?Await]
+---*/
+
+0, class {
+  static method(...a,) {
+    
+  }
+};
diff --git a/test/language/expressions/class/params-meth-static-trailing-comma-single-param.js b/test/language/expressions/class/params-meth-static-trailing-comma-single-param.js
new file mode 100644
index 0000000000..3fc1bdecda
--- /dev/null
+++ b/test/language/expressions/class/params-meth-static-trailing-comma-single-param.js
@@ -0,0 +1,83 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-single-param.case
+// - src/params/default/cls-expr-meth-static.template
+/*---
+description: A trailing comma should not increase the respective length, using a single parameter (static class expression method)
+esid: sec-class-definitions-runtime-semantics-evaluation
+es6id: 14.5.16
+features: [default-parameters]
+flags: [generated]
+info: |
+    ClassExpression : class BindingIdentifieropt ClassTail
+
+    1. If BindingIdentifieropt is not present, let className be undefined.
+    2. Else, let className be StringValue of BindingIdentifier.
+    3. Let value be the result of ClassDefinitionEvaluation of ClassTail
+       with argument className.
+    [...]
+
+    14.5.14 Runtime Semantics: ClassDefinitionEvaluation
+
+    21. For each ClassElement m in order from methods
+        a. If IsStatic of m is false, then
+        b. Else,
+           Let status be the result of performing PropertyDefinitionEvaluation for
+           m with arguments F and false.
+    [...]
+
+    14.3.8 Runtime Semantics: DefineMethod
+
+    MethodDefinition : PropertyName ( StrictFormalParameters ) { FunctionBody }
+
+    [...]
+    6. Let closure be FunctionCreate(kind, StrictFormalParameters, FunctionBody,
+       scope, strict). If functionPrototype was passed as a parameter then pass its
+       value as the functionPrototype optional argument of FunctionCreate.
+    [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+var C = class {
+  static method(a,) {
+    assert.sameValue(a, 42);
+    callCount = callCount + 1;
+  }
+};
+
+C.method(42, 39);
+
+// Stores a reference `ref` for case evaluation
+var ref = C.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
+
+assert.sameValue(ref.length, 1, 'length is properly set');
diff --git a/test/language/expressions/class/params-meth-trailing-comma-dflt-param.js b/test/language/expressions/class/params-meth-trailing-comma-dflt-param.js
new file mode 100644
index 0000000000..7585060a29
--- /dev/null
+++ b/test/language/expressions/class/params-meth-trailing-comma-dflt-param.js
@@ -0,0 +1,84 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-dflt-param.case
+// - src/params/default/cls-expr-meth.template
+/*---
+description: A trailing comma should not increase the respective length, using default parameters (class expression method)
+esid: sec-class-definitions-runtime-semantics-evaluation
+es6id: 14.5.16
+features: [default-parameters]
+flags: [generated]
+info: |
+    ClassExpression : class BindingIdentifieropt ClassTail
+
+    1. If BindingIdentifieropt is not present, let className be undefined.
+    2. Else, let className be StringValue of BindingIdentifier.
+    3. Let value be the result of ClassDefinitionEvaluation of ClassTail
+       with argument className.
+    [...]
+
+    14.5.14 Runtime Semantics: ClassDefinitionEvaluation
+
+    21. For each ClassElement m in order from methods
+        a. If IsStatic of m is false, then
+           i. Let status be the result of performing
+              PropertyDefinitionEvaluation for m with arguments proto and
+              false.
+        [...]
+
+    14.3.8 Runtime Semantics: DefineMethod
+
+    MethodDefinition : PropertyName ( StrictFormalParameters ) { FunctionBody }
+
+    [...]
+    6. Let closure be FunctionCreate(kind, StrictFormalParameters, FunctionBody,
+       scope, strict). If functionPrototype was passed as a parameter then pass its
+       value as the functionPrototype optional argument of FunctionCreate.
+    [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+var C = class {
+  method(a, b = 39,) {
+    assert.sameValue(a, 42);
+    assert.sameValue(b, 39);
+    callCount = callCount + 1;
+  }
+};
+
+C.prototype.method(42, undefined, 1);
+
+// Stores a reference `ref` for case evaluation
+var ref = C.prototype.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
+
+assert.sameValue(ref.length, 1, 'length is properly set');
diff --git a/test/language/expressions/class/params-meth-trailing-comma-multiple-param.js b/test/language/expressions/class/params-meth-trailing-comma-multiple-param.js
new file mode 100644
index 0000000000..2c414dde4a
--- /dev/null
+++ b/test/language/expressions/class/params-meth-trailing-comma-multiple-param.js
@@ -0,0 +1,84 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-multiple-param.case
+// - src/params/default/cls-expr-meth.template
+/*---
+description: A trailing comma should not increase the respective length, using multiple parameters (class expression method)
+esid: sec-class-definitions-runtime-semantics-evaluation
+es6id: 14.5.16
+features: [default-parameters]
+flags: [generated]
+info: |
+    ClassExpression : class BindingIdentifieropt ClassTail
+
+    1. If BindingIdentifieropt is not present, let className be undefined.
+    2. Else, let className be StringValue of BindingIdentifier.
+    3. Let value be the result of ClassDefinitionEvaluation of ClassTail
+       with argument className.
+    [...]
+
+    14.5.14 Runtime Semantics: ClassDefinitionEvaluation
+
+    21. For each ClassElement m in order from methods
+        a. If IsStatic of m is false, then
+           i. Let status be the result of performing
+              PropertyDefinitionEvaluation for m with arguments proto and
+              false.
+        [...]
+
+    14.3.8 Runtime Semantics: DefineMethod
+
+    MethodDefinition : PropertyName ( StrictFormalParameters ) { FunctionBody }
+
+    [...]
+    6. Let closure be FunctionCreate(kind, StrictFormalParameters, FunctionBody,
+       scope, strict). If functionPrototype was passed as a parameter then pass its
+       value as the functionPrototype optional argument of FunctionCreate.
+    [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+var C = class {
+  method(a, b,) {
+    assert.sameValue(a, 42);
+    assert.sameValue(b, 39);
+    callCount = callCount + 1;
+  }
+};
+
+C.prototype.method(42, 39, 1);
+
+// Stores a reference `ref` for case evaluation
+var ref = C.prototype.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
+
+assert.sameValue(ref.length, 2, 'length is properly set');
diff --git a/test/language/expressions/class/params-meth-trailing-comma-rest-early-error.js b/test/language/expressions/class/params-meth-trailing-comma-rest-early-error.js
new file mode 100644
index 0000000000..e4fd102549
--- /dev/null
+++ b/test/language/expressions/class/params-meth-trailing-comma-rest-early-error.js
@@ -0,0 +1,80 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-rest-early-error.case
+// - src/params/syntax/cls-expr-meth.template
+/*---
+description: It's a syntax error if a FunctionRestParameter is followed by a trailing comma (class expression method)
+esid: sec-class-definitions-runtime-semantics-evaluation
+es6id: 14.5.16
+features: [default-parameters]
+flags: [generated]
+negative:
+  phase: early
+  type: SyntaxError
+info: |
+    ClassExpression : class BindingIdentifieropt ClassTail
+
+    1. If BindingIdentifieropt is not present, let className be undefined.
+    2. Else, let className be StringValue of BindingIdentifier.
+    3. Let value be the result of ClassDefinitionEvaluation of ClassTail
+       with argument className.
+    [...]
+
+    14.5.14 Runtime Semantics: ClassDefinitionEvaluation
+
+    21. For each ClassElement m in order from methods
+        a. If IsStatic of m is false, then
+           i. Let status be the result of performing
+              PropertyDefinitionEvaluation for m with arguments proto and
+              false.
+        [...]
+
+    14.3.8 Runtime Semantics: DefineMethod
+
+    MethodDefinition : PropertyName ( StrictFormalParameters ) { FunctionBody }
+
+    [...]
+    6. Let closure be FunctionCreate(kind, StrictFormalParameters, FunctionBody,
+       scope, strict). If functionPrototype was passed as a parameter then pass its
+       value as the functionPrototype optional argument of FunctionCreate.
+    [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] :
+        [empty]
+        FunctionRestParameter[?Yield, ?Await]
+        FormalParameterList[?Yield, ?Await]
+        FormalParameterList[?Yield, ?Await] ,
+        FormalParameterList[?Yield, ?Await] , FunctionRestParameter[?Yield, ?Await]
+---*/
+
+0, class {
+  method(...a,) {
+    
+  }
+};
diff --git a/test/language/expressions/class/params-meth-trailing-comma-single-param.js b/test/language/expressions/class/params-meth-trailing-comma-single-param.js
new file mode 100644
index 0000000000..43739616c4
--- /dev/null
+++ b/test/language/expressions/class/params-meth-trailing-comma-single-param.js
@@ -0,0 +1,83 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-single-param.case
+// - src/params/default/cls-expr-meth.template
+/*---
+description: A trailing comma should not increase the respective length, using a single parameter (class expression method)
+esid: sec-class-definitions-runtime-semantics-evaluation
+es6id: 14.5.16
+features: [default-parameters]
+flags: [generated]
+info: |
+    ClassExpression : class BindingIdentifieropt ClassTail
+
+    1. If BindingIdentifieropt is not present, let className be undefined.
+    2. Else, let className be StringValue of BindingIdentifier.
+    3. Let value be the result of ClassDefinitionEvaluation of ClassTail
+       with argument className.
+    [...]
+
+    14.5.14 Runtime Semantics: ClassDefinitionEvaluation
+
+    21. For each ClassElement m in order from methods
+        a. If IsStatic of m is false, then
+           i. Let status be the result of performing
+              PropertyDefinitionEvaluation for m with arguments proto and
+              false.
+        [...]
+
+    14.3.8 Runtime Semantics: DefineMethod
+
+    MethodDefinition : PropertyName ( StrictFormalParameters ) { FunctionBody }
+
+    [...]
+    6. Let closure be FunctionCreate(kind, StrictFormalParameters, FunctionBody,
+       scope, strict). If functionPrototype was passed as a parameter then pass its
+       value as the functionPrototype optional argument of FunctionCreate.
+    [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+var C = class {
+  method(a,) {
+    assert.sameValue(a, 42);
+    callCount = callCount + 1;
+  }
+};
+
+C.prototype.method(42, 39);
+
+// Stores a reference `ref` for case evaluation
+var ref = C.prototype.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
+
+assert.sameValue(ref.length, 1, 'length is properly set');
diff --git a/test/language/expressions/function/params-dflt-arg-val-not-undefined.js b/test/language/expressions/function/params-dflt-arg-val-not-undefined.js
index d66bd39081..155c4084ae 100644
--- a/test/language/expressions/function/params-dflt-arg-val-not-undefined.js
+++ b/test/language/expressions/function/params-dflt-arg-val-not-undefined.js
@@ -61,8 +61,9 @@ var nullCount = 0;
 var objCount = 0;
 
 var callCount = 0;
-var f;
-f = function(aFalse = falseCount +=1, aString = stringCount += 1, aNaN = nanCount += 1, a0 = zeroCount += 1, aNull = nullCount += 1, aObj = objCount +=1) {
+// Stores a reference `ref` for case evaluation
+var ref;
+ref = function(aFalse = falseCount +=1, aString = stringCount += 1, aNaN = nanCount += 1, a0 = zeroCount += 1, aNull = nullCount += 1, aObj = objCount +=1) {
   assert.sameValue(aFalse, false);
   assert.sameValue(aString, '');
   assert.sameValue(aNaN, NaN);
@@ -72,7 +73,7 @@ f = function(aFalse = falseCount +=1, aString = stringCount += 1, aNaN = nanCoun
   callCount = callCount + 1;
 };
 
-f(false, '', NaN, 0, null, obj);
+ref(false, '', NaN, 0, null, obj);
 
 assert.sameValue(callCount, 1, 'function invoked exactly once');
 
diff --git a/test/language/expressions/function/params-dflt-arg-val-undefined.js b/test/language/expressions/function/params-dflt-arg-val-undefined.js
index 0f05d78629..fce94ee815 100644
--- a/test/language/expressions/function/params-dflt-arg-val-undefined.js
+++ b/test/language/expressions/function/params-dflt-arg-val-undefined.js
@@ -54,14 +54,15 @@ info: |
 ---*/
 
 var callCount = 0;
-var f;
-f = function(fromLiteral = 23, fromExpr = 45, fromHole = 99) {
+// Stores a reference `ref` for case evaluation
+var ref;
+ref = function(fromLiteral = 23, fromExpr = 45, fromHole = 99) {
   assert.sameValue(fromLiteral, 23);
   assert.sameValue(fromExpr, 45);
   assert.sameValue(fromHole, 99);
   callCount = callCount + 1;
 };
 
-f(undefined, void 0);
+ref(undefined, void 0);
 
 assert.sameValue(callCount, 1, 'function invoked exactly once');
diff --git a/test/language/expressions/function/params-dflt-ref-prior.js b/test/language/expressions/function/params-dflt-ref-prior.js
index 2e9601fa7e..5f57f3c3a8 100644
--- a/test/language/expressions/function/params-dflt-ref-prior.js
+++ b/test/language/expressions/function/params-dflt-ref-prior.js
@@ -51,14 +51,15 @@ info: |
 var x = 0;
 
 var callCount = 0;
-var f;
-f = function(x, y = x, z = y) {
+// Stores a reference `ref` for case evaluation
+var ref;
+ref = function(x, y = x, z = y) {
   assert.sameValue(x, 3, 'first argument value');
   assert.sameValue(y, 3, 'second argument value');
   assert.sameValue(z, 3, 'third argument value');
   callCount = callCount + 1;
 };
 
-f(3);
+ref(3);
 
 assert.sameValue(callCount, 1, 'function invoked exactly once');
diff --git a/test/language/expressions/function/params-trailing-comma-dflt-param.js b/test/language/expressions/function/params-trailing-comma-dflt-param.js
new file mode 100644
index 0000000000..0efe0350d1
--- /dev/null
+++ b/test/language/expressions/function/params-trailing-comma-dflt-param.js
@@ -0,0 +1,61 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-dflt-param.case
+// - src/params/default/func-expr.template
+/*---
+description: A trailing comma should not increase the respective length, using default parameters (function expression)
+esid: sec-function-definitions-runtime-semantics-evaluation
+es6id: 14.1.20
+features: [default-parameters]
+flags: [generated]
+info: |
+    FunctionExpression : function ( FormalParameters ) { FunctionBody }
+
+        [...]
+        3. Let closure be FunctionCreate(Normal, FormalParameters, FunctionBody,
+           scope, strict).
+        [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+// Stores a reference `ref` for case evaluation
+var ref;
+ref = function(a, b = 39,) {
+  assert.sameValue(a, 42);
+  assert.sameValue(b, 39);
+  callCount = callCount + 1;
+};
+
+ref(42, undefined, 1);
+
+assert.sameValue(callCount, 1, 'function invoked exactly once');
+
+assert.sameValue(ref.length, 1, 'length is properly set');
diff --git a/test/language/expressions/function/params-trailing-comma-multiple-param.js b/test/language/expressions/function/params-trailing-comma-multiple-param.js
new file mode 100644
index 0000000000..74b5258f25
--- /dev/null
+++ b/test/language/expressions/function/params-trailing-comma-multiple-param.js
@@ -0,0 +1,61 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-multiple-param.case
+// - src/params/default/func-expr.template
+/*---
+description: A trailing comma should not increase the respective length, using multiple parameters (function expression)
+esid: sec-function-definitions-runtime-semantics-evaluation
+es6id: 14.1.20
+features: [default-parameters]
+flags: [generated]
+info: |
+    FunctionExpression : function ( FormalParameters ) { FunctionBody }
+
+        [...]
+        3. Let closure be FunctionCreate(Normal, FormalParameters, FunctionBody,
+           scope, strict).
+        [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+// Stores a reference `ref` for case evaluation
+var ref;
+ref = function(a, b,) {
+  assert.sameValue(a, 42);
+  assert.sameValue(b, 39);
+  callCount = callCount + 1;
+};
+
+ref(42, 39, 1);
+
+assert.sameValue(callCount, 1, 'function invoked exactly once');
+
+assert.sameValue(ref.length, 2, 'length is properly set');
diff --git a/test/language/expressions/function/params-trailing-comma-rest-early-error.js b/test/language/expressions/function/params-trailing-comma-rest-early-error.js
new file mode 100644
index 0000000000..00f17f165b
--- /dev/null
+++ b/test/language/expressions/function/params-trailing-comma-rest-early-error.js
@@ -0,0 +1,58 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-rest-early-error.case
+// - src/params/syntax/func-expr.template
+/*---
+description: It's a syntax error if a FunctionRestParameter is followed by a trailing comma (function expression)
+esid: sec-function-definitions-runtime-semantics-evaluation
+es6id: 14.1.20
+features: [default-parameters]
+flags: [generated]
+negative:
+  phase: early
+  type: SyntaxError
+info: |
+    FunctionExpression : function ( FormalParameters ) { FunctionBody }
+
+        [...]
+        3. Let closure be FunctionCreate(Normal, FormalParameters, FunctionBody,
+           scope, strict).
+        [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] :
+        [empty]
+        FunctionRestParameter[?Yield, ?Await]
+        FormalParameterList[?Yield, ?Await]
+        FormalParameterList[?Yield, ?Await] ,
+        FormalParameterList[?Yield, ?Await] , FunctionRestParameter[?Yield, ?Await]
+---*/
+
+0, function(...a,) {
+  
+};
diff --git a/test/language/expressions/function/params-trailing-comma-single-param.js b/test/language/expressions/function/params-trailing-comma-single-param.js
new file mode 100644
index 0000000000..f11f2f872d
--- /dev/null
+++ b/test/language/expressions/function/params-trailing-comma-single-param.js
@@ -0,0 +1,60 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-single-param.case
+// - src/params/default/func-expr.template
+/*---
+description: A trailing comma should not increase the respective length, using a single parameter (function expression)
+esid: sec-function-definitions-runtime-semantics-evaluation
+es6id: 14.1.20
+features: [default-parameters]
+flags: [generated]
+info: |
+    FunctionExpression : function ( FormalParameters ) { FunctionBody }
+
+        [...]
+        3. Let closure be FunctionCreate(Normal, FormalParameters, FunctionBody,
+           scope, strict).
+        [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+// Stores a reference `ref` for case evaluation
+var ref;
+ref = function(a,) {
+  assert.sameValue(a, 42);
+  callCount = callCount + 1;
+};
+
+ref(42, 39);
+
+assert.sameValue(callCount, 1, 'function invoked exactly once');
+
+assert.sameValue(ref.length, 1, 'length is properly set');
diff --git a/test/language/expressions/generators/params-dflt-arg-val-not-undefined.js b/test/language/expressions/generators/params-dflt-arg-val-not-undefined.js
index f20a26357b..67186d3a80 100644
--- a/test/language/expressions/generators/params-dflt-arg-val-not-undefined.js
+++ b/test/language/expressions/generators/params-dflt-arg-val-not-undefined.js
@@ -61,8 +61,9 @@ var nullCount = 0;
 var objCount = 0;
 
 var callCount = 0;
-var f;
-f = function*(aFalse = falseCount +=1, aString = stringCount += 1, aNaN = nanCount += 1, a0 = zeroCount += 1, aNull = nullCount += 1, aObj = objCount +=1) {
+// Stores a reference `ref` for case evaluation
+var ref;
+ref = function*(aFalse = falseCount +=1, aString = stringCount += 1, aNaN = nanCount += 1, a0 = zeroCount += 1, aNull = nullCount += 1, aObj = objCount +=1) {
   assert.sameValue(aFalse, false);
   assert.sameValue(aString, '');
   assert.sameValue(aNaN, NaN);
@@ -72,7 +73,7 @@ f = function*(aFalse = falseCount +=1, aString = stringCount += 1, aNaN = nanCou
   callCount = callCount + 1;
 };
 
-f(false, '', NaN, 0, null, obj).next();
+ref(false, '', NaN, 0, null, obj).next();
 
 assert.sameValue(callCount, 1, 'generator function invoked exactly once');
 
diff --git a/test/language/expressions/generators/params-dflt-arg-val-undefined.js b/test/language/expressions/generators/params-dflt-arg-val-undefined.js
index a31c11965e..c4d328168a 100644
--- a/test/language/expressions/generators/params-dflt-arg-val-undefined.js
+++ b/test/language/expressions/generators/params-dflt-arg-val-undefined.js
@@ -54,14 +54,15 @@ info: |
 ---*/
 
 var callCount = 0;
-var f;
-f = function*(fromLiteral = 23, fromExpr = 45, fromHole = 99) {
+// Stores a reference `ref` for case evaluation
+var ref;
+ref = function*(fromLiteral = 23, fromExpr = 45, fromHole = 99) {
   assert.sameValue(fromLiteral, 23);
   assert.sameValue(fromExpr, 45);
   assert.sameValue(fromHole, 99);
   callCount = callCount + 1;
 };
 
-f(undefined, void 0).next();
+ref(undefined, void 0).next();
 
 assert.sameValue(callCount, 1, 'generator function invoked exactly once');
diff --git a/test/language/expressions/generators/params-dflt-ref-prior.js b/test/language/expressions/generators/params-dflt-ref-prior.js
index f0cb6d6cb7..7bcc97d555 100644
--- a/test/language/expressions/generators/params-dflt-ref-prior.js
+++ b/test/language/expressions/generators/params-dflt-ref-prior.js
@@ -51,14 +51,15 @@ info: |
 var x = 0;
 
 var callCount = 0;
-var f;
-f = function*(x, y = x, z = y) {
+// Stores a reference `ref` for case evaluation
+var ref;
+ref = function*(x, y = x, z = y) {
   assert.sameValue(x, 3, 'first argument value');
   assert.sameValue(y, 3, 'second argument value');
   assert.sameValue(z, 3, 'third argument value');
   callCount = callCount + 1;
 };
 
-f(3).next();
+ref(3).next();
 
 assert.sameValue(callCount, 1, 'generator function invoked exactly once');
diff --git a/test/language/expressions/generators/params-trailing-comma-dflt-param.js b/test/language/expressions/generators/params-trailing-comma-dflt-param.js
new file mode 100644
index 0000000000..168bea0a88
--- /dev/null
+++ b/test/language/expressions/generators/params-trailing-comma-dflt-param.js
@@ -0,0 +1,61 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-dflt-param.case
+// - src/params/default/gen-func-expr.template
+/*---
+description: A trailing comma should not increase the respective length, using default parameters (generator function expression)
+esid: sec-generator-function-definitions-runtime-semantics-evaluation
+es6id: 14.4.14
+features: [default-parameters]
+flags: [generated]
+info: |
+    GeneratorExpression : function * ( FormalParameters ) { GeneratorBody }
+
+        [...]
+        3. Let closure be GeneratorFunctionCreate(Normal, FormalParameters,
+           GeneratorBody, scope, strict).
+        [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+// Stores a reference `ref` for case evaluation
+var ref;
+ref = function*(a, b = 39,) {
+  assert.sameValue(a, 42);
+  assert.sameValue(b, 39);
+  callCount = callCount + 1;
+};
+
+ref(42, undefined, 1).next();
+
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+assert.sameValue(ref.length, 1, 'length is properly set');
diff --git a/test/language/expressions/generators/params-trailing-comma-multiple-param.js b/test/language/expressions/generators/params-trailing-comma-multiple-param.js
new file mode 100644
index 0000000000..3a88860dd8
--- /dev/null
+++ b/test/language/expressions/generators/params-trailing-comma-multiple-param.js
@@ -0,0 +1,61 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-multiple-param.case
+// - src/params/default/gen-func-expr.template
+/*---
+description: A trailing comma should not increase the respective length, using multiple parameters (generator function expression)
+esid: sec-generator-function-definitions-runtime-semantics-evaluation
+es6id: 14.4.14
+features: [default-parameters]
+flags: [generated]
+info: |
+    GeneratorExpression : function * ( FormalParameters ) { GeneratorBody }
+
+        [...]
+        3. Let closure be GeneratorFunctionCreate(Normal, FormalParameters,
+           GeneratorBody, scope, strict).
+        [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+// Stores a reference `ref` for case evaluation
+var ref;
+ref = function*(a, b,) {
+  assert.sameValue(a, 42);
+  assert.sameValue(b, 39);
+  callCount = callCount + 1;
+};
+
+ref(42, 39, 1).next();
+
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+assert.sameValue(ref.length, 2, 'length is properly set');
diff --git a/test/language/expressions/generators/params-trailing-comma-rest-early-error.js b/test/language/expressions/generators/params-trailing-comma-rest-early-error.js
new file mode 100644
index 0000000000..72d780b1fb
--- /dev/null
+++ b/test/language/expressions/generators/params-trailing-comma-rest-early-error.js
@@ -0,0 +1,58 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-rest-early-error.case
+// - src/params/syntax/gen-func-expr.template
+/*---
+description: It's a syntax error if a FunctionRestParameter is followed by a trailing comma (generator function expression)
+esid: sec-generator-function-definitions-runtime-semantics-evaluation
+es6id: 14.4.14
+features: [default-parameters]
+flags: [generated]
+negative:
+  phase: early
+  type: SyntaxError
+info: |
+    GeneratorExpression : function * ( FormalParameters ) { GeneratorBody }
+
+        [...]
+        3. Let closure be GeneratorFunctionCreate(Normal, FormalParameters,
+           GeneratorBody, scope, strict).
+        [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] :
+        [empty]
+        FunctionRestParameter[?Yield, ?Await]
+        FormalParameterList[?Yield, ?Await]
+        FormalParameterList[?Yield, ?Await] ,
+        FormalParameterList[?Yield, ?Await] , FunctionRestParameter[?Yield, ?Await]
+---*/
+
+0, function*(...a,) {
+  
+};
diff --git a/test/language/expressions/generators/params-trailing-comma-single-param.js b/test/language/expressions/generators/params-trailing-comma-single-param.js
new file mode 100644
index 0000000000..fdcf86ebce
--- /dev/null
+++ b/test/language/expressions/generators/params-trailing-comma-single-param.js
@@ -0,0 +1,60 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-single-param.case
+// - src/params/default/gen-func-expr.template
+/*---
+description: A trailing comma should not increase the respective length, using a single parameter (generator function expression)
+esid: sec-generator-function-definitions-runtime-semantics-evaluation
+es6id: 14.4.14
+features: [default-parameters]
+flags: [generated]
+info: |
+    GeneratorExpression : function * ( FormalParameters ) { GeneratorBody }
+
+        [...]
+        3. Let closure be GeneratorFunctionCreate(Normal, FormalParameters,
+           GeneratorBody, scope, strict).
+        [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+// Stores a reference `ref` for case evaluation
+var ref;
+ref = function*(a,) {
+  assert.sameValue(a, 42);
+  callCount = callCount + 1;
+};
+
+ref(42, 39).next();
+
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+assert.sameValue(ref.length, 1, 'length is properly set');
diff --git a/test/language/expressions/object/method-definition/params-gen-meth-dflt-arg-val-not-undefined.js b/test/language/expressions/object/method-definition/params-gen-meth-dflt-arg-val-not-undefined.js
index 42954aa25f..c7657ec8ec 100644
--- a/test/language/expressions/object/method-definition/params-gen-meth-dflt-arg-val-not-undefined.js
+++ b/test/language/expressions/object/method-definition/params-gen-meth-dflt-arg-val-not-undefined.js
@@ -80,6 +80,9 @@ var obj = {
 
 obj.method(false, '', NaN, 0, null, obj).next();
 
+// Stores a reference `ref` for case evaluation
+var ref = obj.method;
+
 assert.sameValue(callCount, 1, 'generator method invoked exactly once');
 
 assert.sameValue(falseCount, 0, 'initializer not evaluated: false');
diff --git a/test/language/expressions/object/method-definition/params-gen-meth-dflt-arg-val-undefined.js b/test/language/expressions/object/method-definition/params-gen-meth-dflt-arg-val-undefined.js
index f8dae01ee1..8f745ea1aa 100644
--- a/test/language/expressions/object/method-definition/params-gen-meth-dflt-arg-val-undefined.js
+++ b/test/language/expressions/object/method-definition/params-gen-meth-dflt-arg-val-undefined.js
@@ -70,4 +70,7 @@ var obj = {
 
 obj.method(undefined, void 0).next();
 
+// Stores a reference `ref` for case evaluation
+var ref = obj.method;
+
 assert.sameValue(callCount, 1, 'generator method invoked exactly once');
diff --git a/test/language/expressions/object/method-definition/params-gen-meth-dflt-ref-prior.js b/test/language/expressions/object/method-definition/params-gen-meth-dflt-ref-prior.js
index 91c3f8e27c..ea90ea918c 100644
--- a/test/language/expressions/object/method-definition/params-gen-meth-dflt-ref-prior.js
+++ b/test/language/expressions/object/method-definition/params-gen-meth-dflt-ref-prior.js
@@ -67,4 +67,7 @@ var obj = {
 
 obj.method(3).next();
 
+// Stores a reference `ref` for case evaluation
+var ref = obj.method;
+
 assert.sameValue(callCount, 1, 'generator method invoked exactly once');
diff --git a/test/language/expressions/object/method-definition/params-gen-meth-trailing-comma-dflt-param.js b/test/language/expressions/object/method-definition/params-gen-meth-trailing-comma-dflt-param.js
new file mode 100644
index 0000000000..66c2c44563
--- /dev/null
+++ b/test/language/expressions/object/method-definition/params-gen-meth-trailing-comma-dflt-param.js
@@ -0,0 +1,69 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-dflt-param.case
+// - src/params/default/gen-meth.template
+/*---
+description: A trailing comma should not increase the respective length, using default parameters (generator method)
+esid: sec-generator-function-definitions-runtime-semantics-propertydefinitionevaluation
+es6id: 14.4.13
+features: [default-parameters]
+flags: [generated]
+info: |
+    GeneratorMethod :
+        * PropertyName ( StrictFormalParameters ) { GeneratorBody }
+
+    1. Let propKey be the result of evaluating PropertyName.
+    2. ReturnIfAbrupt(propKey).
+    3. If the function code for this GeneratorMethod is strict mode code,
+       let strict be true. Otherwise let strict be false.
+    4. Let scope be the running execution context's LexicalEnvironment.
+    5. Let closure be GeneratorFunctionCreate(Method,
+       StrictFormalParameters, GeneratorBody, scope, strict).
+    [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+var obj = {
+  *method(a, b = 39,) {
+    assert.sameValue(a, 42);
+    assert.sameValue(b, 39);
+    callCount = callCount + 1;
+  }
+};
+
+obj.method(42, undefined, 1).next();
+
+// Stores a reference `ref` for case evaluation
+var ref = obj.method;
+
+assert.sameValue(callCount, 1, 'generator method invoked exactly once');
+
+assert.sameValue(ref.length, 1, 'length is properly set');
diff --git a/test/language/expressions/object/method-definition/params-gen-meth-trailing-comma-multiple-param.js b/test/language/expressions/object/method-definition/params-gen-meth-trailing-comma-multiple-param.js
new file mode 100644
index 0000000000..15c4dff643
--- /dev/null
+++ b/test/language/expressions/object/method-definition/params-gen-meth-trailing-comma-multiple-param.js
@@ -0,0 +1,69 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-multiple-param.case
+// - src/params/default/gen-meth.template
+/*---
+description: A trailing comma should not increase the respective length, using multiple parameters (generator method)
+esid: sec-generator-function-definitions-runtime-semantics-propertydefinitionevaluation
+es6id: 14.4.13
+features: [default-parameters]
+flags: [generated]
+info: |
+    GeneratorMethod :
+        * PropertyName ( StrictFormalParameters ) { GeneratorBody }
+
+    1. Let propKey be the result of evaluating PropertyName.
+    2. ReturnIfAbrupt(propKey).
+    3. If the function code for this GeneratorMethod is strict mode code,
+       let strict be true. Otherwise let strict be false.
+    4. Let scope be the running execution context's LexicalEnvironment.
+    5. Let closure be GeneratorFunctionCreate(Method,
+       StrictFormalParameters, GeneratorBody, scope, strict).
+    [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+var obj = {
+  *method(a, b,) {
+    assert.sameValue(a, 42);
+    assert.sameValue(b, 39);
+    callCount = callCount + 1;
+  }
+};
+
+obj.method(42, 39, 1).next();
+
+// Stores a reference `ref` for case evaluation
+var ref = obj.method;
+
+assert.sameValue(callCount, 1, 'generator method invoked exactly once');
+
+assert.sameValue(ref.length, 2, 'length is properly set');
diff --git a/test/language/expressions/object/method-definition/params-gen-meth-trailing-comma-rest-early-error.js b/test/language/expressions/object/method-definition/params-gen-meth-trailing-comma-rest-early-error.js
new file mode 100644
index 0000000000..2c2dc0ea03
--- /dev/null
+++ b/test/language/expressions/object/method-definition/params-gen-meth-trailing-comma-rest-early-error.js
@@ -0,0 +1,65 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-rest-early-error.case
+// - src/params/syntax/gen-meth.template
+/*---
+description: It's a syntax error if a FunctionRestParameter is followed by a trailing comma (generator method)
+esid: sec-generator-function-definitions-runtime-semantics-propertydefinitionevaluation
+es6id: 14.4.13
+features: [default-parameters]
+flags: [generated]
+negative:
+  phase: early
+  type: SyntaxError
+info: |
+    GeneratorMethod :
+        * PropertyName ( StrictFormalParameters ) { GeneratorBody }
+
+    1. Let propKey be the result of evaluating PropertyName.
+    2. ReturnIfAbrupt(propKey).
+    3. If the function code for this GeneratorMethod is strict mode code,
+       let strict be true. Otherwise let strict be false.
+    4. Let scope be the running execution context's LexicalEnvironment.
+    5. Let closure be GeneratorFunctionCreate(Method,
+       StrictFormalParameters, GeneratorBody, scope, strict).
+    [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] :
+        [empty]
+        FunctionRestParameter[?Yield, ?Await]
+        FormalParameterList[?Yield, ?Await]
+        FormalParameterList[?Yield, ?Await] ,
+        FormalParameterList[?Yield, ?Await] , FunctionRestParameter[?Yield, ?Await]
+---*/
+
+0, {
+  *method(...a,) {
+    
+  }
+};
diff --git a/test/language/expressions/object/method-definition/params-gen-meth-trailing-comma-single-param.js b/test/language/expressions/object/method-definition/params-gen-meth-trailing-comma-single-param.js
new file mode 100644
index 0000000000..499296034e
--- /dev/null
+++ b/test/language/expressions/object/method-definition/params-gen-meth-trailing-comma-single-param.js
@@ -0,0 +1,68 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-single-param.case
+// - src/params/default/gen-meth.template
+/*---
+description: A trailing comma should not increase the respective length, using a single parameter (generator method)
+esid: sec-generator-function-definitions-runtime-semantics-propertydefinitionevaluation
+es6id: 14.4.13
+features: [default-parameters]
+flags: [generated]
+info: |
+    GeneratorMethod :
+        * PropertyName ( StrictFormalParameters ) { GeneratorBody }
+
+    1. Let propKey be the result of evaluating PropertyName.
+    2. ReturnIfAbrupt(propKey).
+    3. If the function code for this GeneratorMethod is strict mode code,
+       let strict be true. Otherwise let strict be false.
+    4. Let scope be the running execution context's LexicalEnvironment.
+    5. Let closure be GeneratorFunctionCreate(Method,
+       StrictFormalParameters, GeneratorBody, scope, strict).
+    [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+var obj = {
+  *method(a,) {
+    assert.sameValue(a, 42);
+    callCount = callCount + 1;
+  }
+};
+
+obj.method(42, 39).next();
+
+// Stores a reference `ref` for case evaluation
+var ref = obj.method;
+
+assert.sameValue(callCount, 1, 'generator method invoked exactly once');
+
+assert.sameValue(ref.length, 1, 'length is properly set');
diff --git a/test/language/expressions/object/method-definition/params-meth-dflt-arg-val-not-undefined.js b/test/language/expressions/object/method-definition/params-meth-dflt-arg-val-not-undefined.js
index edbdc988e7..9a8dea759a 100644
--- a/test/language/expressions/object/method-definition/params-meth-dflt-arg-val-not-undefined.js
+++ b/test/language/expressions/object/method-definition/params-meth-dflt-arg-val-not-undefined.js
@@ -77,6 +77,9 @@ var obj = {
 
 obj.method(false, '', NaN, 0, null, obj);
 
+// Stores a reference `ref` for case evaluation
+var ref = obj.method;
+
 assert.sameValue(callCount, 1, 'method invoked exactly once');
 
 assert.sameValue(falseCount, 0, 'initializer not evaluated: false');
diff --git a/test/language/expressions/object/method-definition/params-meth-dflt-arg-val-undefined.js b/test/language/expressions/object/method-definition/params-meth-dflt-arg-val-undefined.js
index 70a8538f8f..1d28dfd8aa 100644
--- a/test/language/expressions/object/method-definition/params-meth-dflt-arg-val-undefined.js
+++ b/test/language/expressions/object/method-definition/params-meth-dflt-arg-val-undefined.js
@@ -67,4 +67,7 @@ var obj = {
 
 obj.method(undefined, void 0);
 
+// Stores a reference `ref` for case evaluation
+var ref = obj.method;
+
 assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/expressions/object/method-definition/params-meth-dflt-ref-prior.js b/test/language/expressions/object/method-definition/params-meth-dflt-ref-prior.js
index 7ae927f3df..3fa1ed9603 100644
--- a/test/language/expressions/object/method-definition/params-meth-dflt-ref-prior.js
+++ b/test/language/expressions/object/method-definition/params-meth-dflt-ref-prior.js
@@ -64,4 +64,7 @@ var obj = {
 
 obj.method(3);
 
+// Stores a reference `ref` for case evaluation
+var ref = obj.method;
+
 assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/expressions/object/method-definition/params-meth-trailing-comma-dflt-param.js b/test/language/expressions/object/method-definition/params-meth-trailing-comma-dflt-param.js
new file mode 100644
index 0000000000..3b5dabe7d9
--- /dev/null
+++ b/test/language/expressions/object/method-definition/params-meth-trailing-comma-dflt-param.js
@@ -0,0 +1,66 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-dflt-param.case
+// - src/params/default/meth.template
+/*---
+description: A trailing comma should not increase the respective length, using default parameters (method)
+esid: sec-runtime-semantics-definemethod
+es6id: 14.3.8
+features: [default-parameters]
+flags: [generated]
+info: |
+    MethodDefinition : PropertyName ( StrictFormalParameters ) { FunctionBody }
+
+    [...]
+    6. Let closure be FunctionCreate(kind, StrictFormalParameters,
+       FunctionBody, scope, strict). If functionPrototype was passed as a
+       parameter then pass its value as the functionPrototype optional argument
+       of FunctionCreate.
+    [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+var obj = {
+  method(a, b = 39,) {
+    assert.sameValue(a, 42);
+    assert.sameValue(b, 39);
+    callCount = callCount + 1;
+  }
+};
+
+obj.method(42, undefined, 1);
+
+// Stores a reference `ref` for case evaluation
+var ref = obj.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
+
+assert.sameValue(ref.length, 1, 'length is properly set');
diff --git a/test/language/expressions/object/method-definition/params-meth-trailing-comma-multiple-param.js b/test/language/expressions/object/method-definition/params-meth-trailing-comma-multiple-param.js
new file mode 100644
index 0000000000..2c7a740106
--- /dev/null
+++ b/test/language/expressions/object/method-definition/params-meth-trailing-comma-multiple-param.js
@@ -0,0 +1,66 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-multiple-param.case
+// - src/params/default/meth.template
+/*---
+description: A trailing comma should not increase the respective length, using multiple parameters (method)
+esid: sec-runtime-semantics-definemethod
+es6id: 14.3.8
+features: [default-parameters]
+flags: [generated]
+info: |
+    MethodDefinition : PropertyName ( StrictFormalParameters ) { FunctionBody }
+
+    [...]
+    6. Let closure be FunctionCreate(kind, StrictFormalParameters,
+       FunctionBody, scope, strict). If functionPrototype was passed as a
+       parameter then pass its value as the functionPrototype optional argument
+       of FunctionCreate.
+    [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+var obj = {
+  method(a, b,) {
+    assert.sameValue(a, 42);
+    assert.sameValue(b, 39);
+    callCount = callCount + 1;
+  }
+};
+
+obj.method(42, 39, 1);
+
+// Stores a reference `ref` for case evaluation
+var ref = obj.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
+
+assert.sameValue(ref.length, 2, 'length is properly set');
diff --git a/test/language/expressions/object/method-definition/params-meth-trailing-comma-rest-early-error.js b/test/language/expressions/object/method-definition/params-meth-trailing-comma-rest-early-error.js
new file mode 100644
index 0000000000..16bb72dca1
--- /dev/null
+++ b/test/language/expressions/object/method-definition/params-meth-trailing-comma-rest-early-error.js
@@ -0,0 +1,62 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-rest-early-error.case
+// - src/params/syntax/meth.template
+/*---
+description: It's a syntax error if a FunctionRestParameter is followed by a trailing comma (method)
+esid: sec-runtime-semantics-definemethod
+es6id: 14.3.8
+features: [default-parameters]
+flags: [generated]
+negative:
+  phase: early
+  type: SyntaxError
+info: |
+    MethodDefinition : PropertyName ( StrictFormalParameters ) { FunctionBody }
+
+    [...]
+    6. Let closure be FunctionCreate(kind, StrictFormalParameters,
+       FunctionBody, scope, strict). If functionPrototype was passed as a
+       parameter then pass its value as the functionPrototype optional argument
+       of FunctionCreate.
+    [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] :
+        [empty]
+        FunctionRestParameter[?Yield, ?Await]
+        FormalParameterList[?Yield, ?Await]
+        FormalParameterList[?Yield, ?Await] ,
+        FormalParameterList[?Yield, ?Await] , FunctionRestParameter[?Yield, ?Await]
+---*/
+
+0, {
+  method(...a,) {
+    
+  }
+};
diff --git a/test/language/expressions/object/method-definition/params-meth-trailing-comma-single-param.js b/test/language/expressions/object/method-definition/params-meth-trailing-comma-single-param.js
new file mode 100644
index 0000000000..44d366120a
--- /dev/null
+++ b/test/language/expressions/object/method-definition/params-meth-trailing-comma-single-param.js
@@ -0,0 +1,65 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-single-param.case
+// - src/params/default/meth.template
+/*---
+description: A trailing comma should not increase the respective length, using a single parameter (method)
+esid: sec-runtime-semantics-definemethod
+es6id: 14.3.8
+features: [default-parameters]
+flags: [generated]
+info: |
+    MethodDefinition : PropertyName ( StrictFormalParameters ) { FunctionBody }
+
+    [...]
+    6. Let closure be FunctionCreate(kind, StrictFormalParameters,
+       FunctionBody, scope, strict). If functionPrototype was passed as a
+       parameter then pass its value as the functionPrototype optional argument
+       of FunctionCreate.
+    [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+var obj = {
+  method(a,) {
+    assert.sameValue(a, 42);
+    callCount = callCount + 1;
+  }
+};
+
+obj.method(42, 39);
+
+// Stores a reference `ref` for case evaluation
+var ref = obj.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
+
+assert.sameValue(ref.length, 1, 'length is properly set');
diff --git a/test/language/statements/class/params-gen-meth-dflt-arg-val-not-undefined.js b/test/language/statements/class/params-gen-meth-dflt-arg-val-not-undefined.js
index 532a0325df..85db41c299 100644
--- a/test/language/statements/class/params-gen-meth-dflt-arg-val-not-undefined.js
+++ b/test/language/statements/class/params-gen-meth-dflt-arg-val-not-undefined.js
@@ -96,6 +96,9 @@ class C {
 
 C.prototype.method(false, '', NaN, 0, null, obj).next();
 
+// Stores a reference `ref` for case evaluation
+var ref = C.prototype.method;
+
 assert.sameValue(callCount, 1, 'method invoked exactly once');
 
 assert.sameValue(falseCount, 0, 'initializer not evaluated: false');
diff --git a/test/language/statements/class/params-gen-meth-dflt-arg-val-undefined.js b/test/language/statements/class/params-gen-meth-dflt-arg-val-undefined.js
index fb1556a27f..2cdbd15aeb 100644
--- a/test/language/statements/class/params-gen-meth-dflt-arg-val-undefined.js
+++ b/test/language/statements/class/params-gen-meth-dflt-arg-val-undefined.js
@@ -86,4 +86,7 @@ class C {
 
 C.prototype.method(undefined, void 0).next();
 
+// Stores a reference `ref` for case evaluation
+var ref = C.prototype.method;
+
 assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/statements/class/params-gen-meth-dflt-ref-prior.js b/test/language/statements/class/params-gen-meth-dflt-ref-prior.js
index 6215260734..f5531bcde7 100644
--- a/test/language/statements/class/params-gen-meth-dflt-ref-prior.js
+++ b/test/language/statements/class/params-gen-meth-dflt-ref-prior.js
@@ -83,4 +83,7 @@ class C {
 
 C.prototype.method(3).next();
 
+// Stores a reference `ref` for case evaluation
+var ref = C.prototype.method;
+
 assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/statements/class/params-gen-meth-static-dflt-arg-val-not-undefined.js b/test/language/statements/class/params-gen-meth-static-dflt-arg-val-not-undefined.js
index 2663e0c26e..35565f1fdf 100644
--- a/test/language/statements/class/params-gen-meth-static-dflt-arg-val-not-undefined.js
+++ b/test/language/statements/class/params-gen-meth-static-dflt-arg-val-not-undefined.js
@@ -96,6 +96,9 @@ class C {
 
 C.method(false, '', NaN, 0, null, obj).next();
 
+// Stores a reference `ref` for case evaluation
+var ref = C.method;
+
 assert.sameValue(callCount, 1, 'method invoked exactly once');
 
 assert.sameValue(falseCount, 0, 'initializer not evaluated: false');
diff --git a/test/language/statements/class/params-gen-meth-static-dflt-arg-val-undefined.js b/test/language/statements/class/params-gen-meth-static-dflt-arg-val-undefined.js
index e9d90bd5c2..e9f6c788d1 100644
--- a/test/language/statements/class/params-gen-meth-static-dflt-arg-val-undefined.js
+++ b/test/language/statements/class/params-gen-meth-static-dflt-arg-val-undefined.js
@@ -86,4 +86,7 @@ class C {
 
 C.method(undefined, void 0).next();
 
+// Stores a reference `ref` for case evaluation
+var ref = C.method;
+
 assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/statements/class/params-gen-meth-static-dflt-ref-prior.js b/test/language/statements/class/params-gen-meth-static-dflt-ref-prior.js
index 84912b3060..9b052c82c0 100644
--- a/test/language/statements/class/params-gen-meth-static-dflt-ref-prior.js
+++ b/test/language/statements/class/params-gen-meth-static-dflt-ref-prior.js
@@ -83,4 +83,7 @@ class C {
 
 C.method(3).next();
 
+// Stores a reference `ref` for case evaluation
+var ref = C.method;
+
 assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/statements/class/params-gen-meth-static-trailing-comma-dflt-param.js b/test/language/statements/class/params-gen-meth-static-trailing-comma-dflt-param.js
new file mode 100644
index 0000000000..538373d95f
--- /dev/null
+++ b/test/language/statements/class/params-gen-meth-static-trailing-comma-dflt-param.js
@@ -0,0 +1,85 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-dflt-param.case
+// - src/params/default/cls-decl-gen-meth-static.template
+/*---
+description: A trailing comma should not increase the respective length, using default parameters (static class expression generator method)
+esid: sec-runtime-semantics-bindingclassdeclarationevaluation
+es6id: 14.5.15
+features: [default-parameters]
+flags: [generated]
+info: |
+    ClassDeclaration : class BindingIdentifier ClassTail
+
+    1. Let className be StringValue of BindingIdentifier.
+    2. Let value be the result of ClassDefinitionEvaluation of ClassTail with
+       argument className.
+    [...]
+
+    14.5.14 Runtime Semantics: ClassDefinitionEvaluation
+
+    21. For each ClassElement m in order from methods
+        a. If IsStatic of m is false, then
+        b. Else,
+           Let status be the result of performing PropertyDefinitionEvaluation for
+           m with arguments F and false.
+    [...]
+
+    14.4.13 Runtime Semantics: PropertyDefinitionEvaluation
+
+    GeneratorMethod : * PropertyName ( StrictFormalParameters ) { GeneratorBody }
+
+    1. Let propKey be the result of evaluating PropertyName.
+    2. ReturnIfAbrupt(propKey).
+    3. If the function code for this GeneratorMethod is strict mode code,
+       let strict be true. Otherwise let strict be false.
+    4. Let scope be the running execution context's LexicalEnvironment.
+    5. Let closure be GeneratorFunctionCreate(Method,
+       StrictFormalParameters, GeneratorBody, scope, strict).
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+class C {
+  static *method(a, b = 39,) {
+    assert.sameValue(a, 42);
+    assert.sameValue(b, 39);
+    callCount = callCount + 1;
+  }
+}
+
+C.method(42, undefined, 1).next();
+
+// Stores a reference `ref` for case evaluation
+var ref = C.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
+
+assert.sameValue(ref.length, 1, 'length is properly set');
diff --git a/test/language/statements/class/params-gen-meth-static-trailing-comma-multiple-param.js b/test/language/statements/class/params-gen-meth-static-trailing-comma-multiple-param.js
new file mode 100644
index 0000000000..d6ca9b64c9
--- /dev/null
+++ b/test/language/statements/class/params-gen-meth-static-trailing-comma-multiple-param.js
@@ -0,0 +1,85 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-multiple-param.case
+// - src/params/default/cls-decl-gen-meth-static.template
+/*---
+description: A trailing comma should not increase the respective length, using multiple parameters (static class expression generator method)
+esid: sec-runtime-semantics-bindingclassdeclarationevaluation
+es6id: 14.5.15
+features: [default-parameters]
+flags: [generated]
+info: |
+    ClassDeclaration : class BindingIdentifier ClassTail
+
+    1. Let className be StringValue of BindingIdentifier.
+    2. Let value be the result of ClassDefinitionEvaluation of ClassTail with
+       argument className.
+    [...]
+
+    14.5.14 Runtime Semantics: ClassDefinitionEvaluation
+
+    21. For each ClassElement m in order from methods
+        a. If IsStatic of m is false, then
+        b. Else,
+           Let status be the result of performing PropertyDefinitionEvaluation for
+           m with arguments F and false.
+    [...]
+
+    14.4.13 Runtime Semantics: PropertyDefinitionEvaluation
+
+    GeneratorMethod : * PropertyName ( StrictFormalParameters ) { GeneratorBody }
+
+    1. Let propKey be the result of evaluating PropertyName.
+    2. ReturnIfAbrupt(propKey).
+    3. If the function code for this GeneratorMethod is strict mode code,
+       let strict be true. Otherwise let strict be false.
+    4. Let scope be the running execution context's LexicalEnvironment.
+    5. Let closure be GeneratorFunctionCreate(Method,
+       StrictFormalParameters, GeneratorBody, scope, strict).
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+class C {
+  static *method(a, b,) {
+    assert.sameValue(a, 42);
+    assert.sameValue(b, 39);
+    callCount = callCount + 1;
+  }
+}
+
+C.method(42, 39, 1).next();
+
+// Stores a reference `ref` for case evaluation
+var ref = C.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
+
+assert.sameValue(ref.length, 2, 'length is properly set');
diff --git a/test/language/statements/class/params-gen-meth-static-trailing-comma-rest-early-error.js b/test/language/statements/class/params-gen-meth-static-trailing-comma-rest-early-error.js
new file mode 100644
index 0000000000..ee4459fda9
--- /dev/null
+++ b/test/language/statements/class/params-gen-meth-static-trailing-comma-rest-early-error.js
@@ -0,0 +1,81 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-rest-early-error.case
+// - src/params/syntax/cls-decl-gen-meth-static.template
+/*---
+description: It's a syntax error if a FunctionRestParameter is followed by a trailing comma (static class expression generator method)
+esid: sec-runtime-semantics-bindingclassdeclarationevaluation
+es6id: 14.5.15
+features: [default-parameters]
+flags: [generated]
+negative:
+  phase: early
+  type: SyntaxError
+info: |
+    ClassDeclaration : class BindingIdentifier ClassTail
+
+    1. Let className be StringValue of BindingIdentifier.
+    2. Let value be the result of ClassDefinitionEvaluation of ClassTail with
+       argument className.
+    [...]
+
+    14.5.14 Runtime Semantics: ClassDefinitionEvaluation
+
+    21. For each ClassElement m in order from methods
+        a. If IsStatic of m is false, then
+        b. Else,
+           Let status be the result of performing PropertyDefinitionEvaluation for
+           m with arguments F and false.
+    [...]
+
+    14.4.13 Runtime Semantics: PropertyDefinitionEvaluation
+
+    GeneratorMethod : * PropertyName ( StrictFormalParameters ) { GeneratorBody }
+
+    1. Let propKey be the result of evaluating PropertyName.
+    2. ReturnIfAbrupt(propKey).
+    3. If the function code for this GeneratorMethod is strict mode code,
+       let strict be true. Otherwise let strict be false.
+    4. Let scope be the running execution context's LexicalEnvironment.
+    5. Let closure be GeneratorFunctionCreate(Method,
+       StrictFormalParameters, GeneratorBody, scope, strict).
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] :
+        [empty]
+        FunctionRestParameter[?Yield, ?Await]
+        FormalParameterList[?Yield, ?Await]
+        FormalParameterList[?Yield, ?Await] ,
+        FormalParameterList[?Yield, ?Await] , FunctionRestParameter[?Yield, ?Await]
+---*/
+
+class C {
+  static *method(...a,) {
+    
+  }
+}
diff --git a/test/language/statements/class/params-gen-meth-static-trailing-comma-single-param.js b/test/language/statements/class/params-gen-meth-static-trailing-comma-single-param.js
new file mode 100644
index 0000000000..2d9b91451d
--- /dev/null
+++ b/test/language/statements/class/params-gen-meth-static-trailing-comma-single-param.js
@@ -0,0 +1,84 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-single-param.case
+// - src/params/default/cls-decl-gen-meth-static.template
+/*---
+description: A trailing comma should not increase the respective length, using a single parameter (static class expression generator method)
+esid: sec-runtime-semantics-bindingclassdeclarationevaluation
+es6id: 14.5.15
+features: [default-parameters]
+flags: [generated]
+info: |
+    ClassDeclaration : class BindingIdentifier ClassTail
+
+    1. Let className be StringValue of BindingIdentifier.
+    2. Let value be the result of ClassDefinitionEvaluation of ClassTail with
+       argument className.
+    [...]
+
+    14.5.14 Runtime Semantics: ClassDefinitionEvaluation
+
+    21. For each ClassElement m in order from methods
+        a. If IsStatic of m is false, then
+        b. Else,
+           Let status be the result of performing PropertyDefinitionEvaluation for
+           m with arguments F and false.
+    [...]
+
+    14.4.13 Runtime Semantics: PropertyDefinitionEvaluation
+
+    GeneratorMethod : * PropertyName ( StrictFormalParameters ) { GeneratorBody }
+
+    1. Let propKey be the result of evaluating PropertyName.
+    2. ReturnIfAbrupt(propKey).
+    3. If the function code for this GeneratorMethod is strict mode code,
+       let strict be true. Otherwise let strict be false.
+    4. Let scope be the running execution context's LexicalEnvironment.
+    5. Let closure be GeneratorFunctionCreate(Method,
+       StrictFormalParameters, GeneratorBody, scope, strict).
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+class C {
+  static *method(a,) {
+    assert.sameValue(a, 42);
+    callCount = callCount + 1;
+  }
+}
+
+C.method(42, 39).next();
+
+// Stores a reference `ref` for case evaluation
+var ref = C.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
+
+assert.sameValue(ref.length, 1, 'length is properly set');
diff --git a/test/language/statements/class/params-gen-meth-trailing-comma-dflt-param.js b/test/language/statements/class/params-gen-meth-trailing-comma-dflt-param.js
new file mode 100644
index 0000000000..138089140a
--- /dev/null
+++ b/test/language/statements/class/params-gen-meth-trailing-comma-dflt-param.js
@@ -0,0 +1,85 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-dflt-param.case
+// - src/params/default/cls-decl-gen-meth.template
+/*---
+description: A trailing comma should not increase the respective length, using default parameters (class expression method)
+esid: sec-class-definitions-runtime-semantics-evaluation
+es6id: 14.5.16
+features: [default-parameters]
+flags: [generated]
+info: |
+    ClassDeclaration : class BindingIdentifier ClassTail
+
+    1. Let className be StringValue of BindingIdentifier.
+    2. Let value be the result of ClassDefinitionEvaluation of ClassTail with
+       argument className.
+    [...]
+
+    14.5.14 Runtime Semantics: ClassDefinitionEvaluation
+
+    21. For each ClassElement m in order from methods
+        a. If IsStatic of m is false, then
+           i. Let status be the result of performing
+              PropertyDefinitionEvaluation for m with arguments proto and
+              false.
+        [...]
+
+    14.4.13 Runtime Semantics: PropertyDefinitionEvaluation
+
+    GeneratorMethod : * PropertyName ( StrictFormalParameters ) { GeneratorBody }
+
+    1. Let propKey be the result of evaluating PropertyName.
+    2. ReturnIfAbrupt(propKey).
+    3. If the function code for this GeneratorMethod is strict mode code,
+       let strict be true. Otherwise let strict be false.
+    4. Let scope be the running execution context's LexicalEnvironment.
+    5. Let closure be GeneratorFunctionCreate(Method,
+       StrictFormalParameters, GeneratorBody, scope, strict).
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+class C {
+  *method(a, b = 39,) {
+    assert.sameValue(a, 42);
+    assert.sameValue(b, 39);
+    callCount = callCount + 1;
+  }
+}
+
+C.prototype.method(42, undefined, 1).next();
+
+// Stores a reference `ref` for case evaluation
+var ref = C.prototype.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
+
+assert.sameValue(ref.length, 1, 'length is properly set');
diff --git a/test/language/statements/class/params-gen-meth-trailing-comma-multiple-param.js b/test/language/statements/class/params-gen-meth-trailing-comma-multiple-param.js
new file mode 100644
index 0000000000..fca88318d0
--- /dev/null
+++ b/test/language/statements/class/params-gen-meth-trailing-comma-multiple-param.js
@@ -0,0 +1,85 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-multiple-param.case
+// - src/params/default/cls-decl-gen-meth.template
+/*---
+description: A trailing comma should not increase the respective length, using multiple parameters (class expression method)
+esid: sec-class-definitions-runtime-semantics-evaluation
+es6id: 14.5.16
+features: [default-parameters]
+flags: [generated]
+info: |
+    ClassDeclaration : class BindingIdentifier ClassTail
+
+    1. Let className be StringValue of BindingIdentifier.
+    2. Let value be the result of ClassDefinitionEvaluation of ClassTail with
+       argument className.
+    [...]
+
+    14.5.14 Runtime Semantics: ClassDefinitionEvaluation
+
+    21. For each ClassElement m in order from methods
+        a. If IsStatic of m is false, then
+           i. Let status be the result of performing
+              PropertyDefinitionEvaluation for m with arguments proto and
+              false.
+        [...]
+
+    14.4.13 Runtime Semantics: PropertyDefinitionEvaluation
+
+    GeneratorMethod : * PropertyName ( StrictFormalParameters ) { GeneratorBody }
+
+    1. Let propKey be the result of evaluating PropertyName.
+    2. ReturnIfAbrupt(propKey).
+    3. If the function code for this GeneratorMethod is strict mode code,
+       let strict be true. Otherwise let strict be false.
+    4. Let scope be the running execution context's LexicalEnvironment.
+    5. Let closure be GeneratorFunctionCreate(Method,
+       StrictFormalParameters, GeneratorBody, scope, strict).
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+class C {
+  *method(a, b,) {
+    assert.sameValue(a, 42);
+    assert.sameValue(b, 39);
+    callCount = callCount + 1;
+  }
+}
+
+C.prototype.method(42, 39, 1).next();
+
+// Stores a reference `ref` for case evaluation
+var ref = C.prototype.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
+
+assert.sameValue(ref.length, 2, 'length is properly set');
diff --git a/test/language/statements/class/params-gen-meth-trailing-comma-rest-early-error.js b/test/language/statements/class/params-gen-meth-trailing-comma-rest-early-error.js
new file mode 100644
index 0000000000..52658dd368
--- /dev/null
+++ b/test/language/statements/class/params-gen-meth-trailing-comma-rest-early-error.js
@@ -0,0 +1,81 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-rest-early-error.case
+// - src/params/syntax/cls-decl-gen-meth.template
+/*---
+description: It's a syntax error if a FunctionRestParameter is followed by a trailing comma (class expression method)
+esid: sec-class-definitions-runtime-semantics-evaluation
+es6id: 14.5.16
+features: [default-parameters]
+flags: [generated]
+negative:
+  phase: early
+  type: SyntaxError
+info: |
+    ClassDeclaration : class BindingIdentifier ClassTail
+
+    1. Let className be StringValue of BindingIdentifier.
+    2. Let value be the result of ClassDefinitionEvaluation of ClassTail with
+       argument className.
+    [...]
+
+    14.5.14 Runtime Semantics: ClassDefinitionEvaluation
+
+    21. For each ClassElement m in order from methods
+        a. If IsStatic of m is false, then
+           i. Let status be the result of performing
+              PropertyDefinitionEvaluation for m with arguments proto and
+              false.
+        [...]
+
+    14.4.13 Runtime Semantics: PropertyDefinitionEvaluation
+
+    GeneratorMethod : * PropertyName ( StrictFormalParameters ) { GeneratorBody }
+
+    1. Let propKey be the result of evaluating PropertyName.
+    2. ReturnIfAbrupt(propKey).
+    3. If the function code for this GeneratorMethod is strict mode code,
+       let strict be true. Otherwise let strict be false.
+    4. Let scope be the running execution context's LexicalEnvironment.
+    5. Let closure be GeneratorFunctionCreate(Method,
+       StrictFormalParameters, GeneratorBody, scope, strict).
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] :
+        [empty]
+        FunctionRestParameter[?Yield, ?Await]
+        FormalParameterList[?Yield, ?Await]
+        FormalParameterList[?Yield, ?Await] ,
+        FormalParameterList[?Yield, ?Await] , FunctionRestParameter[?Yield, ?Await]
+---*/
+
+class C {
+  *method(...a,) {
+    
+  }
+}
diff --git a/test/language/statements/class/params-gen-meth-trailing-comma-single-param.js b/test/language/statements/class/params-gen-meth-trailing-comma-single-param.js
new file mode 100644
index 0000000000..7122abdfb1
--- /dev/null
+++ b/test/language/statements/class/params-gen-meth-trailing-comma-single-param.js
@@ -0,0 +1,84 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-single-param.case
+// - src/params/default/cls-decl-gen-meth.template
+/*---
+description: A trailing comma should not increase the respective length, using a single parameter (class expression method)
+esid: sec-class-definitions-runtime-semantics-evaluation
+es6id: 14.5.16
+features: [default-parameters]
+flags: [generated]
+info: |
+    ClassDeclaration : class BindingIdentifier ClassTail
+
+    1. Let className be StringValue of BindingIdentifier.
+    2. Let value be the result of ClassDefinitionEvaluation of ClassTail with
+       argument className.
+    [...]
+
+    14.5.14 Runtime Semantics: ClassDefinitionEvaluation
+
+    21. For each ClassElement m in order from methods
+        a. If IsStatic of m is false, then
+           i. Let status be the result of performing
+              PropertyDefinitionEvaluation for m with arguments proto and
+              false.
+        [...]
+
+    14.4.13 Runtime Semantics: PropertyDefinitionEvaluation
+
+    GeneratorMethod : * PropertyName ( StrictFormalParameters ) { GeneratorBody }
+
+    1. Let propKey be the result of evaluating PropertyName.
+    2. ReturnIfAbrupt(propKey).
+    3. If the function code for this GeneratorMethod is strict mode code,
+       let strict be true. Otherwise let strict be false.
+    4. Let scope be the running execution context's LexicalEnvironment.
+    5. Let closure be GeneratorFunctionCreate(Method,
+       StrictFormalParameters, GeneratorBody, scope, strict).
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+class C {
+  *method(a,) {
+    assert.sameValue(a, 42);
+    callCount = callCount + 1;
+  }
+}
+
+C.prototype.method(42, 39).next();
+
+// Stores a reference `ref` for case evaluation
+var ref = C.prototype.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
+
+assert.sameValue(ref.length, 1, 'length is properly set');
diff --git a/test/language/statements/class/params-meth-dflt-arg-val-not-undefined.js b/test/language/statements/class/params-meth-dflt-arg-val-not-undefined.js
index 54abd9ccc1..a407a3d8e1 100644
--- a/test/language/statements/class/params-meth-dflt-arg-val-not-undefined.js
+++ b/test/language/statements/class/params-meth-dflt-arg-val-not-undefined.js
@@ -94,6 +94,9 @@ class C {
 
 C.prototype.method(false, '', NaN, 0, null, obj);
 
+// Stores a reference `ref` for case evaluation
+var ref = C.prototype.method;
+
 assert.sameValue(callCount, 1, 'method invoked exactly once');
 
 assert.sameValue(falseCount, 0, 'initializer not evaluated: false');
diff --git a/test/language/statements/class/params-meth-dflt-arg-val-undefined.js b/test/language/statements/class/params-meth-dflt-arg-val-undefined.js
index 5812589776..c069432fce 100644
--- a/test/language/statements/class/params-meth-dflt-arg-val-undefined.js
+++ b/test/language/statements/class/params-meth-dflt-arg-val-undefined.js
@@ -84,4 +84,7 @@ class C {
 
 C.prototype.method(undefined, void 0);
 
+// Stores a reference `ref` for case evaluation
+var ref = C.prototype.method;
+
 assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/statements/class/params-meth-dflt-ref-prior.js b/test/language/statements/class/params-meth-dflt-ref-prior.js
index ab52842d56..de033f27d5 100644
--- a/test/language/statements/class/params-meth-dflt-ref-prior.js
+++ b/test/language/statements/class/params-meth-dflt-ref-prior.js
@@ -81,4 +81,7 @@ class C {
 
 C.prototype.method(3);
 
+// Stores a reference `ref` for case evaluation
+var ref = C.prototype.method;
+
 assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/statements/class/params-meth-static-dflt-arg-val-not-undefined.js b/test/language/statements/class/params-meth-static-dflt-arg-val-not-undefined.js
index b15ade8354..fdd20d4711 100644
--- a/test/language/statements/class/params-meth-static-dflt-arg-val-not-undefined.js
+++ b/test/language/statements/class/params-meth-static-dflt-arg-val-not-undefined.js
@@ -94,6 +94,9 @@ class C {
 
 C.method(false, '', NaN, 0, null, obj);
 
+// Stores a reference `ref` for case evaluation
+var ref = C.method;
+
 assert.sameValue(callCount, 1, 'method invoked exactly once');
 
 assert.sameValue(falseCount, 0, 'initializer not evaluated: false');
diff --git a/test/language/statements/class/params-meth-static-dflt-arg-val-undefined.js b/test/language/statements/class/params-meth-static-dflt-arg-val-undefined.js
index 1be4da47e6..a3a8058c11 100644
--- a/test/language/statements/class/params-meth-static-dflt-arg-val-undefined.js
+++ b/test/language/statements/class/params-meth-static-dflt-arg-val-undefined.js
@@ -84,4 +84,7 @@ class C {
 
 C.method(undefined, void 0);
 
+// Stores a reference `ref` for case evaluation
+var ref = C.method;
+
 assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/statements/class/params-meth-static-dflt-ref-prior.js b/test/language/statements/class/params-meth-static-dflt-ref-prior.js
index 2f827d3e38..5a40559bf1 100644
--- a/test/language/statements/class/params-meth-static-dflt-ref-prior.js
+++ b/test/language/statements/class/params-meth-static-dflt-ref-prior.js
@@ -81,4 +81,7 @@ class C {
 
 C.method(3);
 
+// Stores a reference `ref` for case evaluation
+var ref = C.method;
+
 assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/statements/class/params-meth-static-trailing-comma-dflt-param.js b/test/language/statements/class/params-meth-static-trailing-comma-dflt-param.js
new file mode 100644
index 0000000000..2cebf2c45e
--- /dev/null
+++ b/test/language/statements/class/params-meth-static-trailing-comma-dflt-param.js
@@ -0,0 +1,83 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-dflt-param.case
+// - src/params/default/cls-decl-meth-static.template
+/*---
+description: A trailing comma should not increase the respective length, using default parameters (static class expression method)
+esid: sec-runtime-semantics-bindingclassdeclarationevaluation
+es6id: 14.5.15
+features: [default-parameters]
+flags: [generated]
+info: |
+    ClassDeclaration : class BindingIdentifier ClassTail
+
+    1. Let className be StringValue of BindingIdentifier.
+    2. Let value be the result of ClassDefinitionEvaluation of ClassTail with
+       argument className.
+    [...]
+
+    14.5.14 Runtime Semantics: ClassDefinitionEvaluation
+
+    21. For each ClassElement m in order from methods
+        a. If IsStatic of m is false, then
+        b. Else,
+           Let status be the result of performing PropertyDefinitionEvaluation for
+           m with arguments F and false.
+    [...]
+
+    14.3.8 Runtime Semantics: DefineMethod
+
+    MethodDefinition : PropertyName ( StrictFormalParameters ) { FunctionBody }
+
+    [...]
+    6. Let closure be FunctionCreate(kind, StrictFormalParameters, FunctionBody,
+       scope, strict). If functionPrototype was passed as a parameter then pass its
+       value as the functionPrototype optional argument of FunctionCreate.
+    [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+class C {
+  static method(a, b = 39,) {
+    assert.sameValue(a, 42);
+    assert.sameValue(b, 39);
+    callCount = callCount + 1;
+  }
+}
+
+C.method(42, undefined, 1);
+
+// Stores a reference `ref` for case evaluation
+var ref = C.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
+
+assert.sameValue(ref.length, 1, 'length is properly set');
diff --git a/test/language/statements/class/params-meth-static-trailing-comma-multiple-param.js b/test/language/statements/class/params-meth-static-trailing-comma-multiple-param.js
new file mode 100644
index 0000000000..dedc564c25
--- /dev/null
+++ b/test/language/statements/class/params-meth-static-trailing-comma-multiple-param.js
@@ -0,0 +1,83 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-multiple-param.case
+// - src/params/default/cls-decl-meth-static.template
+/*---
+description: A trailing comma should not increase the respective length, using multiple parameters (static class expression method)
+esid: sec-runtime-semantics-bindingclassdeclarationevaluation
+es6id: 14.5.15
+features: [default-parameters]
+flags: [generated]
+info: |
+    ClassDeclaration : class BindingIdentifier ClassTail
+
+    1. Let className be StringValue of BindingIdentifier.
+    2. Let value be the result of ClassDefinitionEvaluation of ClassTail with
+       argument className.
+    [...]
+
+    14.5.14 Runtime Semantics: ClassDefinitionEvaluation
+
+    21. For each ClassElement m in order from methods
+        a. If IsStatic of m is false, then
+        b. Else,
+           Let status be the result of performing PropertyDefinitionEvaluation for
+           m with arguments F and false.
+    [...]
+
+    14.3.8 Runtime Semantics: DefineMethod
+
+    MethodDefinition : PropertyName ( StrictFormalParameters ) { FunctionBody }
+
+    [...]
+    6. Let closure be FunctionCreate(kind, StrictFormalParameters, FunctionBody,
+       scope, strict). If functionPrototype was passed as a parameter then pass its
+       value as the functionPrototype optional argument of FunctionCreate.
+    [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+class C {
+  static method(a, b,) {
+    assert.sameValue(a, 42);
+    assert.sameValue(b, 39);
+    callCount = callCount + 1;
+  }
+}
+
+C.method(42, 39, 1);
+
+// Stores a reference `ref` for case evaluation
+var ref = C.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
+
+assert.sameValue(ref.length, 2, 'length is properly set');
diff --git a/test/language/statements/class/params-meth-static-trailing-comma-rest-early-error.js b/test/language/statements/class/params-meth-static-trailing-comma-rest-early-error.js
new file mode 100644
index 0000000000..37f99374bd
--- /dev/null
+++ b/test/language/statements/class/params-meth-static-trailing-comma-rest-early-error.js
@@ -0,0 +1,79 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-rest-early-error.case
+// - src/params/syntax/cls-decl-meth-static.template
+/*---
+description: It's a syntax error if a FunctionRestParameter is followed by a trailing comma (static class expression method)
+esid: sec-runtime-semantics-bindingclassdeclarationevaluation
+es6id: 14.5.15
+features: [default-parameters]
+flags: [generated]
+negative:
+  phase: early
+  type: SyntaxError
+info: |
+    ClassDeclaration : class BindingIdentifier ClassTail
+
+    1. Let className be StringValue of BindingIdentifier.
+    2. Let value be the result of ClassDefinitionEvaluation of ClassTail with
+       argument className.
+    [...]
+
+    14.5.14 Runtime Semantics: ClassDefinitionEvaluation
+
+    21. For each ClassElement m in order from methods
+        a. If IsStatic of m is false, then
+        b. Else,
+           Let status be the result of performing PropertyDefinitionEvaluation for
+           m with arguments F and false.
+    [...]
+
+    14.3.8 Runtime Semantics: DefineMethod
+
+    MethodDefinition : PropertyName ( StrictFormalParameters ) { FunctionBody }
+
+    [...]
+    6. Let closure be FunctionCreate(kind, StrictFormalParameters, FunctionBody,
+       scope, strict). If functionPrototype was passed as a parameter then pass its
+       value as the functionPrototype optional argument of FunctionCreate.
+    [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] :
+        [empty]
+        FunctionRestParameter[?Yield, ?Await]
+        FormalParameterList[?Yield, ?Await]
+        FormalParameterList[?Yield, ?Await] ,
+        FormalParameterList[?Yield, ?Await] , FunctionRestParameter[?Yield, ?Await]
+---*/
+
+class C {
+  static method(...a,) {
+    
+  }
+}
diff --git a/test/language/statements/class/params-meth-static-trailing-comma-single-param.js b/test/language/statements/class/params-meth-static-trailing-comma-single-param.js
new file mode 100644
index 0000000000..c27a4bd40d
--- /dev/null
+++ b/test/language/statements/class/params-meth-static-trailing-comma-single-param.js
@@ -0,0 +1,82 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-single-param.case
+// - src/params/default/cls-decl-meth-static.template
+/*---
+description: A trailing comma should not increase the respective length, using a single parameter (static class expression method)
+esid: sec-runtime-semantics-bindingclassdeclarationevaluation
+es6id: 14.5.15
+features: [default-parameters]
+flags: [generated]
+info: |
+    ClassDeclaration : class BindingIdentifier ClassTail
+
+    1. Let className be StringValue of BindingIdentifier.
+    2. Let value be the result of ClassDefinitionEvaluation of ClassTail with
+       argument className.
+    [...]
+
+    14.5.14 Runtime Semantics: ClassDefinitionEvaluation
+
+    21. For each ClassElement m in order from methods
+        a. If IsStatic of m is false, then
+        b. Else,
+           Let status be the result of performing PropertyDefinitionEvaluation for
+           m with arguments F and false.
+    [...]
+
+    14.3.8 Runtime Semantics: DefineMethod
+
+    MethodDefinition : PropertyName ( StrictFormalParameters ) { FunctionBody }
+
+    [...]
+    6. Let closure be FunctionCreate(kind, StrictFormalParameters, FunctionBody,
+       scope, strict). If functionPrototype was passed as a parameter then pass its
+       value as the functionPrototype optional argument of FunctionCreate.
+    [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+class C {
+  static method(a,) {
+    assert.sameValue(a, 42);
+    callCount = callCount + 1;
+  }
+}
+
+C.method(42, 39);
+
+// Stores a reference `ref` for case evaluation
+var ref = C.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
+
+assert.sameValue(ref.length, 1, 'length is properly set');
diff --git a/test/language/statements/class/params-meth-trailing-comma-dflt-param.js b/test/language/statements/class/params-meth-trailing-comma-dflt-param.js
new file mode 100644
index 0000000000..9d7d73d21b
--- /dev/null
+++ b/test/language/statements/class/params-meth-trailing-comma-dflt-param.js
@@ -0,0 +1,83 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-dflt-param.case
+// - src/params/default/cls-decl-meth.template
+/*---
+description: A trailing comma should not increase the respective length, using default parameters (class expression method)
+esid: sec-runtime-semantics-bindingclassdeclarationevaluation
+es6id: 14.5.15
+features: [default-parameters]
+flags: [generated]
+info: |
+    ClassDeclaration : class BindingIdentifier ClassTail
+
+    1. Let className be StringValue of BindingIdentifier.
+    2. Let value be the result of ClassDefinitionEvaluation of ClassTail with
+       argument className.
+    [...]
+
+    14.5.14 Runtime Semantics: ClassDefinitionEvaluation
+
+    21. For each ClassElement m in order from methods
+        a. If IsStatic of m is false, then
+           i. Let status be the result of performing
+              PropertyDefinitionEvaluation for m with arguments proto and
+              false.
+        [...]
+
+    14.3.8 Runtime Semantics: DefineMethod
+
+    MethodDefinition : PropertyName ( StrictFormalParameters ) { FunctionBody }
+
+    [...]
+    6. Let closure be FunctionCreate(kind, StrictFormalParameters, FunctionBody,
+       scope, strict). If functionPrototype was passed as a parameter then pass its
+       value as the functionPrototype optional argument of FunctionCreate.
+    [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+class C {
+  method(a, b = 39,) {
+    assert.sameValue(a, 42);
+    assert.sameValue(b, 39);
+    callCount = callCount + 1;
+  }
+}
+
+C.prototype.method(42, undefined, 1);
+
+// Stores a reference `ref` for case evaluation
+var ref = C.prototype.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
+
+assert.sameValue(ref.length, 1, 'length is properly set');
diff --git a/test/language/statements/class/params-meth-trailing-comma-multiple-param.js b/test/language/statements/class/params-meth-trailing-comma-multiple-param.js
new file mode 100644
index 0000000000..d94dd4afca
--- /dev/null
+++ b/test/language/statements/class/params-meth-trailing-comma-multiple-param.js
@@ -0,0 +1,83 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-multiple-param.case
+// - src/params/default/cls-decl-meth.template
+/*---
+description: A trailing comma should not increase the respective length, using multiple parameters (class expression method)
+esid: sec-runtime-semantics-bindingclassdeclarationevaluation
+es6id: 14.5.15
+features: [default-parameters]
+flags: [generated]
+info: |
+    ClassDeclaration : class BindingIdentifier ClassTail
+
+    1. Let className be StringValue of BindingIdentifier.
+    2. Let value be the result of ClassDefinitionEvaluation of ClassTail with
+       argument className.
+    [...]
+
+    14.5.14 Runtime Semantics: ClassDefinitionEvaluation
+
+    21. For each ClassElement m in order from methods
+        a. If IsStatic of m is false, then
+           i. Let status be the result of performing
+              PropertyDefinitionEvaluation for m with arguments proto and
+              false.
+        [...]
+
+    14.3.8 Runtime Semantics: DefineMethod
+
+    MethodDefinition : PropertyName ( StrictFormalParameters ) { FunctionBody }
+
+    [...]
+    6. Let closure be FunctionCreate(kind, StrictFormalParameters, FunctionBody,
+       scope, strict). If functionPrototype was passed as a parameter then pass its
+       value as the functionPrototype optional argument of FunctionCreate.
+    [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+class C {
+  method(a, b,) {
+    assert.sameValue(a, 42);
+    assert.sameValue(b, 39);
+    callCount = callCount + 1;
+  }
+}
+
+C.prototype.method(42, 39, 1);
+
+// Stores a reference `ref` for case evaluation
+var ref = C.prototype.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
+
+assert.sameValue(ref.length, 2, 'length is properly set');
diff --git a/test/language/statements/class/params-meth-trailing-comma-rest-early-error.js b/test/language/statements/class/params-meth-trailing-comma-rest-early-error.js
new file mode 100644
index 0000000000..4294a1aa8b
--- /dev/null
+++ b/test/language/statements/class/params-meth-trailing-comma-rest-early-error.js
@@ -0,0 +1,79 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-rest-early-error.case
+// - src/params/syntax/cls-decl-meth.template
+/*---
+description: It's a syntax error if a FunctionRestParameter is followed by a trailing comma (class expression method)
+esid: sec-runtime-semantics-bindingclassdeclarationevaluation
+es6id: 14.5.15
+features: [default-parameters]
+flags: [generated]
+negative:
+  phase: early
+  type: SyntaxError
+info: |
+    ClassDeclaration : class BindingIdentifier ClassTail
+
+    1. Let className be StringValue of BindingIdentifier.
+    2. Let value be the result of ClassDefinitionEvaluation of ClassTail with
+       argument className.
+    [...]
+
+    14.5.14 Runtime Semantics: ClassDefinitionEvaluation
+
+    21. For each ClassElement m in order from methods
+        a. If IsStatic of m is false, then
+           i. Let status be the result of performing
+              PropertyDefinitionEvaluation for m with arguments proto and
+              false.
+        [...]
+
+    14.3.8 Runtime Semantics: DefineMethod
+
+    MethodDefinition : PropertyName ( StrictFormalParameters ) { FunctionBody }
+
+    [...]
+    6. Let closure be FunctionCreate(kind, StrictFormalParameters, FunctionBody,
+       scope, strict). If functionPrototype was passed as a parameter then pass its
+       value as the functionPrototype optional argument of FunctionCreate.
+    [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] :
+        [empty]
+        FunctionRestParameter[?Yield, ?Await]
+        FormalParameterList[?Yield, ?Await]
+        FormalParameterList[?Yield, ?Await] ,
+        FormalParameterList[?Yield, ?Await] , FunctionRestParameter[?Yield, ?Await]
+---*/
+
+class C {
+  method(...a,) {
+    
+  }
+}
diff --git a/test/language/statements/class/params-meth-trailing-comma-single-param.js b/test/language/statements/class/params-meth-trailing-comma-single-param.js
new file mode 100644
index 0000000000..415db35db5
--- /dev/null
+++ b/test/language/statements/class/params-meth-trailing-comma-single-param.js
@@ -0,0 +1,82 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-single-param.case
+// - src/params/default/cls-decl-meth.template
+/*---
+description: A trailing comma should not increase the respective length, using a single parameter (class expression method)
+esid: sec-runtime-semantics-bindingclassdeclarationevaluation
+es6id: 14.5.15
+features: [default-parameters]
+flags: [generated]
+info: |
+    ClassDeclaration : class BindingIdentifier ClassTail
+
+    1. Let className be StringValue of BindingIdentifier.
+    2. Let value be the result of ClassDefinitionEvaluation of ClassTail with
+       argument className.
+    [...]
+
+    14.5.14 Runtime Semantics: ClassDefinitionEvaluation
+
+    21. For each ClassElement m in order from methods
+        a. If IsStatic of m is false, then
+           i. Let status be the result of performing
+              PropertyDefinitionEvaluation for m with arguments proto and
+              false.
+        [...]
+
+    14.3.8 Runtime Semantics: DefineMethod
+
+    MethodDefinition : PropertyName ( StrictFormalParameters ) { FunctionBody }
+
+    [...]
+    6. Let closure be FunctionCreate(kind, StrictFormalParameters, FunctionBody,
+       scope, strict). If functionPrototype was passed as a parameter then pass its
+       value as the functionPrototype optional argument of FunctionCreate.
+    [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+class C {
+  method(a,) {
+    assert.sameValue(a, 42);
+    callCount = callCount + 1;
+  }
+}
+
+C.prototype.method(42, 39);
+
+// Stores a reference `ref` for case evaluation
+var ref = C.prototype.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
+
+assert.sameValue(ref.length, 1, 'length is properly set');
diff --git a/test/language/statements/function/params-dflt-arg-val-not-undefined.js b/test/language/statements/function/params-dflt-arg-val-not-undefined.js
index 7b5244dfdf..5b0312659b 100644
--- a/test/language/statements/function/params-dflt-arg-val-not-undefined.js
+++ b/test/language/statements/function/params-dflt-arg-val-not-undefined.js
@@ -62,7 +62,8 @@ var nullCount = 0;
 var objCount = 0;
 
 var callCount = 0;
-function f(aFalse = falseCount +=1, aString = stringCount += 1, aNaN = nanCount += 1, a0 = zeroCount += 1, aNull = nullCount += 1, aObj = objCount +=1) {
+// Stores a reference `ref` for case evaluation
+function ref(aFalse = falseCount +=1, aString = stringCount += 1, aNaN = nanCount += 1, a0 = zeroCount += 1, aNull = nullCount += 1, aObj = objCount +=1) {
   assert.sameValue(aFalse, false);
   assert.sameValue(aString, '');
   assert.sameValue(aNaN, NaN);
@@ -72,7 +73,7 @@ function f(aFalse = falseCount +=1, aString = stringCount += 1, aNaN = nanCount
   callCount = callCount + 1;
 }
 
-f(false, '', NaN, 0, null, obj);
+ref(false, '', NaN, 0, null, obj);
 
 assert.sameValue(callCount, 1, 'function invoked exactly once');
 
diff --git a/test/language/statements/function/params-dflt-arg-val-undefined.js b/test/language/statements/function/params-dflt-arg-val-undefined.js
index 0486e5ae74..52ac16f96b 100644
--- a/test/language/statements/function/params-dflt-arg-val-undefined.js
+++ b/test/language/statements/function/params-dflt-arg-val-undefined.js
@@ -55,13 +55,14 @@ info: |
 ---*/
 
 var callCount = 0;
-function f(fromLiteral = 23, fromExpr = 45, fromHole = 99) {
+// Stores a reference `ref` for case evaluation
+function ref(fromLiteral = 23, fromExpr = 45, fromHole = 99) {
   assert.sameValue(fromLiteral, 23);
   assert.sameValue(fromExpr, 45);
   assert.sameValue(fromHole, 99);
   callCount = callCount + 1;
 }
 
-f(undefined, void 0);
+ref(undefined, void 0);
 
 assert.sameValue(callCount, 1, 'function invoked exactly once');
diff --git a/test/language/statements/function/params-dflt-ref-prior.js b/test/language/statements/function/params-dflt-ref-prior.js
index 597692de3d..6abe926cd1 100644
--- a/test/language/statements/function/params-dflt-ref-prior.js
+++ b/test/language/statements/function/params-dflt-ref-prior.js
@@ -52,13 +52,14 @@ info: |
 var x = 0;
 
 var callCount = 0;
-function f(x, y = x, z = y) {
+// Stores a reference `ref` for case evaluation
+function ref(x, y = x, z = y) {
   assert.sameValue(x, 3, 'first argument value');
   assert.sameValue(y, 3, 'second argument value');
   assert.sameValue(z, 3, 'third argument value');
   callCount = callCount + 1;
 }
 
-f(3);
+ref(3);
 
 assert.sameValue(callCount, 1, 'function invoked exactly once');
diff --git a/test/language/statements/function/params-trailing-comma-dflt-param.js b/test/language/statements/function/params-trailing-comma-dflt-param.js
new file mode 100644
index 0000000000..c266163d52
--- /dev/null
+++ b/test/language/statements/function/params-trailing-comma-dflt-param.js
@@ -0,0 +1,61 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-dflt-param.case
+// - src/params/default/func-decl.template
+/*---
+description: A trailing comma should not increase the respective length, using default parameters (function declaration)
+esid: sec-function-definitions-runtime-semantics-instantiatefunctionobject
+es6id: 14.1.19
+features: [default-parameters]
+flags: [generated]
+info: |
+    FunctionDeclaration :
+        function BindingIdentifier ( FormalParameters ) { FunctionBody }
+
+        [...]
+        3. Let F be FunctionCreate(Normal, FormalParameters, FunctionBody,
+           scope, strict).
+        [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+// Stores a reference `ref` for case evaluation
+function ref(a, b = 39,) {
+  assert.sameValue(a, 42);
+  assert.sameValue(b, 39);
+  callCount = callCount + 1;
+}
+
+ref(42, undefined, 1);
+
+assert.sameValue(callCount, 1, 'function invoked exactly once');
+
+assert.sameValue(ref.length, 1, 'length is properly set');
diff --git a/test/language/statements/function/params-trailing-comma-multiple-param.js b/test/language/statements/function/params-trailing-comma-multiple-param.js
new file mode 100644
index 0000000000..db6a1ce4c2
--- /dev/null
+++ b/test/language/statements/function/params-trailing-comma-multiple-param.js
@@ -0,0 +1,61 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-multiple-param.case
+// - src/params/default/func-decl.template
+/*---
+description: A trailing comma should not increase the respective length, using multiple parameters (function declaration)
+esid: sec-function-definitions-runtime-semantics-instantiatefunctionobject
+es6id: 14.1.19
+features: [default-parameters]
+flags: [generated]
+info: |
+    FunctionDeclaration :
+        function BindingIdentifier ( FormalParameters ) { FunctionBody }
+
+        [...]
+        3. Let F be FunctionCreate(Normal, FormalParameters, FunctionBody,
+           scope, strict).
+        [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+// Stores a reference `ref` for case evaluation
+function ref(a, b,) {
+  assert.sameValue(a, 42);
+  assert.sameValue(b, 39);
+  callCount = callCount + 1;
+}
+
+ref(42, 39, 1);
+
+assert.sameValue(callCount, 1, 'function invoked exactly once');
+
+assert.sameValue(ref.length, 2, 'length is properly set');
diff --git a/test/language/statements/function/params-trailing-comma-rest-early-error.js b/test/language/statements/function/params-trailing-comma-rest-early-error.js
new file mode 100644
index 0000000000..6a3e82315c
--- /dev/null
+++ b/test/language/statements/function/params-trailing-comma-rest-early-error.js
@@ -0,0 +1,59 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-rest-early-error.case
+// - src/params/syntax/func-decl.template
+/*---
+description: It's a syntax error if a FunctionRestParameter is followed by a trailing comma (function declaration)
+esid: sec-function-definitions-runtime-semantics-instantiatefunctionobject
+es6id: 14.1.19
+features: [default-parameters]
+flags: [generated]
+negative:
+  phase: early
+  type: SyntaxError
+info: |
+    FunctionDeclaration :
+        function BindingIdentifier ( FormalParameters ) { FunctionBody }
+
+        [...]
+        3. Let F be FunctionCreate(Normal, FormalParameters, FunctionBody,
+           scope, strict).
+        [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] :
+        [empty]
+        FunctionRestParameter[?Yield, ?Await]
+        FormalParameterList[?Yield, ?Await]
+        FormalParameterList[?Yield, ?Await] ,
+        FormalParameterList[?Yield, ?Await] , FunctionRestParameter[?Yield, ?Await]
+---*/
+
+function f(...a,) {
+  
+}
diff --git a/test/language/statements/function/params-trailing-comma-single-param.js b/test/language/statements/function/params-trailing-comma-single-param.js
new file mode 100644
index 0000000000..737d0ccaa9
--- /dev/null
+++ b/test/language/statements/function/params-trailing-comma-single-param.js
@@ -0,0 +1,60 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-single-param.case
+// - src/params/default/func-decl.template
+/*---
+description: A trailing comma should not increase the respective length, using a single parameter (function declaration)
+esid: sec-function-definitions-runtime-semantics-instantiatefunctionobject
+es6id: 14.1.19
+features: [default-parameters]
+flags: [generated]
+info: |
+    FunctionDeclaration :
+        function BindingIdentifier ( FormalParameters ) { FunctionBody }
+
+        [...]
+        3. Let F be FunctionCreate(Normal, FormalParameters, FunctionBody,
+           scope, strict).
+        [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+// Stores a reference `ref` for case evaluation
+function ref(a,) {
+  assert.sameValue(a, 42);
+  callCount = callCount + 1;
+}
+
+ref(42, 39);
+
+assert.sameValue(callCount, 1, 'function invoked exactly once');
+
+assert.sameValue(ref.length, 1, 'length is properly set');
diff --git a/test/language/statements/generators/params-dflt-arg-val-not-undefined.js b/test/language/statements/generators/params-dflt-arg-val-not-undefined.js
index 1208267a2e..a910b31a98 100644
--- a/test/language/statements/generators/params-dflt-arg-val-not-undefined.js
+++ b/test/language/statements/generators/params-dflt-arg-val-not-undefined.js
@@ -61,7 +61,8 @@ var nullCount = 0;
 var objCount = 0;
 
 var callCount = 0;
-function* f(aFalse = falseCount +=1, aString = stringCount += 1, aNaN = nanCount += 1, a0 = zeroCount += 1, aNull = nullCount += 1, aObj = objCount +=1) {
+// Stores a reference `ref` for case evaluation
+function* ref(aFalse = falseCount +=1, aString = stringCount += 1, aNaN = nanCount += 1, a0 = zeroCount += 1, aNull = nullCount += 1, aObj = objCount +=1) {
   assert.sameValue(aFalse, false);
   assert.sameValue(aString, '');
   assert.sameValue(aNaN, NaN);
@@ -71,7 +72,7 @@ function* f(aFalse = falseCount +=1, aString = stringCount += 1, aNaN = nanCount
   callCount = callCount + 1;
 }
 
-f(false, '', NaN, 0, null, obj).next();
+ref(false, '', NaN, 0, null, obj).next();
 
 assert.sameValue(callCount, 1, 'generator function invoked exactly once');
 
diff --git a/test/language/statements/generators/params-dflt-arg-val-undefined.js b/test/language/statements/generators/params-dflt-arg-val-undefined.js
index 19623e5fb8..69c553aa7a 100644
--- a/test/language/statements/generators/params-dflt-arg-val-undefined.js
+++ b/test/language/statements/generators/params-dflt-arg-val-undefined.js
@@ -54,13 +54,14 @@ info: |
 ---*/
 
 var callCount = 0;
-function* f(fromLiteral = 23, fromExpr = 45, fromHole = 99) {
+// Stores a reference `ref` for case evaluation
+function* ref(fromLiteral = 23, fromExpr = 45, fromHole = 99) {
   assert.sameValue(fromLiteral, 23);
   assert.sameValue(fromExpr, 45);
   assert.sameValue(fromHole, 99);
   callCount = callCount + 1;
 }
 
-f(undefined, void 0).next();
+ref(undefined, void 0).next();
 
 assert.sameValue(callCount, 1, 'generator function invoked exactly once');
diff --git a/test/language/statements/generators/params-dflt-ref-prior.js b/test/language/statements/generators/params-dflt-ref-prior.js
index 687741166d..e00c5ea392 100644
--- a/test/language/statements/generators/params-dflt-ref-prior.js
+++ b/test/language/statements/generators/params-dflt-ref-prior.js
@@ -51,13 +51,14 @@ info: |
 var x = 0;
 
 var callCount = 0;
-function* f(x, y = x, z = y) {
+// Stores a reference `ref` for case evaluation
+function* ref(x, y = x, z = y) {
   assert.sameValue(x, 3, 'first argument value');
   assert.sameValue(y, 3, 'second argument value');
   assert.sameValue(z, 3, 'third argument value');
   callCount = callCount + 1;
 }
 
-f(3).next();
+ref(3).next();
 
 assert.sameValue(callCount, 1, 'generator function invoked exactly once');
diff --git a/test/language/statements/generators/params-trailing-comma-dflt-param.js b/test/language/statements/generators/params-trailing-comma-dflt-param.js
new file mode 100644
index 0000000000..e8898caf4a
--- /dev/null
+++ b/test/language/statements/generators/params-trailing-comma-dflt-param.js
@@ -0,0 +1,60 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-dflt-param.case
+// - src/params/default/gen-func-decl.template
+/*---
+description: A trailing comma should not increase the respective length, using default parameters (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+es6id: 14.4.12
+features: [default-parameters]
+flags: [generated]
+info: |
+    GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+        [...]
+        2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+           GeneratorBody, scope, strict).
+        [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+// Stores a reference `ref` for case evaluation
+function* ref(a, b = 39,) {
+  assert.sameValue(a, 42);
+  assert.sameValue(b, 39);
+  callCount = callCount + 1;
+}
+
+ref(42, undefined, 1).next();
+
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+assert.sameValue(ref.length, 1, 'length is properly set');
diff --git a/test/language/statements/generators/params-trailing-comma-multiple-param.js b/test/language/statements/generators/params-trailing-comma-multiple-param.js
new file mode 100644
index 0000000000..a5a46cb50a
--- /dev/null
+++ b/test/language/statements/generators/params-trailing-comma-multiple-param.js
@@ -0,0 +1,60 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-multiple-param.case
+// - src/params/default/gen-func-decl.template
+/*---
+description: A trailing comma should not increase the respective length, using multiple parameters (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+es6id: 14.4.12
+features: [default-parameters]
+flags: [generated]
+info: |
+    GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+        [...]
+        2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+           GeneratorBody, scope, strict).
+        [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+// Stores a reference `ref` for case evaluation
+function* ref(a, b,) {
+  assert.sameValue(a, 42);
+  assert.sameValue(b, 39);
+  callCount = callCount + 1;
+}
+
+ref(42, 39, 1).next();
+
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+assert.sameValue(ref.length, 2, 'length is properly set');
diff --git a/test/language/statements/generators/params-trailing-comma-rest-early-error.js b/test/language/statements/generators/params-trailing-comma-rest-early-error.js
new file mode 100644
index 0000000000..3fe5a33a69
--- /dev/null
+++ b/test/language/statements/generators/params-trailing-comma-rest-early-error.js
@@ -0,0 +1,58 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-rest-early-error.case
+// - src/params/syntax/gen-func-decl.template
+/*---
+description: It's a syntax error if a FunctionRestParameter is followed by a trailing comma (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+es6id: 14.4.12
+features: [default-parameters]
+flags: [generated]
+negative:
+  phase: early
+  type: SyntaxError
+info: |
+    GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+        [...]
+        2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+           GeneratorBody, scope, strict).
+        [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] :
+        [empty]
+        FunctionRestParameter[?Yield, ?Await]
+        FormalParameterList[?Yield, ?Await]
+        FormalParameterList[?Yield, ?Await] ,
+        FormalParameterList[?Yield, ?Await] , FunctionRestParameter[?Yield, ?Await]
+---*/
+
+function* f(...a,) {
+  
+}
diff --git a/test/language/statements/generators/params-trailing-comma-single-param.js b/test/language/statements/generators/params-trailing-comma-single-param.js
new file mode 100644
index 0000000000..8d26691060
--- /dev/null
+++ b/test/language/statements/generators/params-trailing-comma-single-param.js
@@ -0,0 +1,59 @@
+// This file was procedurally generated from the following sources:
+// - src/params/trailing-comma-single-param.case
+// - src/params/default/gen-func-decl.template
+/*---
+description: A trailing comma should not increase the respective length, using a single parameter (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+es6id: 14.4.12
+features: [default-parameters]
+flags: [generated]
+info: |
+    GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
+
+        [...]
+        2. Let F be GeneratorFunctionCreate(Normal, FormalParameters,
+           GeneratorBody, scope, strict).
+        [...]
+
+    9.2.1 [[Call]] ( thisArgument, argumentsList)
+
+    [...]
+    7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
+    [...]
+
+    9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList )
+
+    1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
+    [...]
+
+    9.2.12 FunctionDeclarationInstantiation(func, argumentsList)
+
+    [...]
+    23. Let iteratorRecord be Record {[[iterator]]:
+        CreateListIterator(argumentsList), [[done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        b. Let formalStatus be IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+
+    Trailing comma in the parameters list
+
+    14.1 Function Definitions
+
+    FormalParameters[Yield, Await] : FormalParameterList[?Yield, ?Await] ,
+---*/
+
+var callCount = 0;
+// Stores a reference `ref` for case evaluation
+function* ref(a,) {
+  assert.sameValue(a, 42);
+  callCount = callCount + 1;
+}
+
+ref(42, 39).next();
+
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+assert.sameValue(ref.length, 1, 'length is properly set');
-- 
GitLab