diff --git a/test/language/expressions/arrow-function/params-dflt-abrupt.js b/test/language/expressions/arrow-function/params-dflt-abrupt.js
new file mode 100644
index 0000000000..04b7c2f954
--- /dev/null
+++ b/test/language/expressions/arrow-function/params-dflt-abrupt.js
@@ -0,0 +1,61 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/abrupt.case
+// - src/dflt-params/error/arrow-function.template
+/*---
+description: Abrupt completion returned by evaluation of initializer (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+
+var callCount = 0;
+var f;
+f = (_ = (function() { throw new Test262Error(); }())) => {
+  
+  callCount = callCount + 1;
+};
+
+assert.throws(Test262Error, function() {
+  f();
+});
+assert.sameValue(callCount, 0, 'arrow function body not evaluated');
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
new file mode 100644
index 0000000000..317600ccec
--- /dev/null
+++ b/test/language/expressions/arrow-function/params-dflt-arg-val-not-undefined.js
@@ -0,0 +1,82 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/arg-val-not-undefined.case
+// - src/dflt-params/default/arrow-function.template
+/*---
+description: Use of intializer when argument value is not `undefined` (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    [...]
+    23. Let iteratorRecord be Record {[[Iterator]]:
+        CreateListIterator(argumentsList), [[Done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        a. Perform ? IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+---*/
+var obj = {};
+var falseCount = 0;
+var stringCount = 0;
+var nanCount = 0;
+var zeroCount = 0;
+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) => {
+  assert.sameValue(aFalse, false);
+  assert.sameValue(aString, '');
+  assert.sameValue(aNaN, NaN);
+  assert.sameValue(a0, 0);
+  assert.sameValue(aNull, null);
+  assert.sameValue(aObj, obj);
+  callCount = callCount + 1;
+};
+
+f(false, '', NaN, 0, null, obj);
+assert.sameValue(callCount, 1, 'arrow function invoked exactly once');
+
+assert.sameValue(falseCount, 0, 'initializer not evaluated: false');
+assert.sameValue(stringCount, 0, 'initializer not evaluated: string');
+assert.sameValue(nanCount, 0, 'initializer not evaluated: NaN');
+assert.sameValue(zeroCount, 0, 'initializer not evaluated: 0');
+assert.sameValue(nullCount, 0, 'initializer not evaluated: null');
+assert.sameValue(objCount, 0, 'initializer not evaluated: object');
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
new file mode 100644
index 0000000000..300537d3b2
--- /dev/null
+++ b/test/language/expressions/arrow-function/params-dflt-arg-val-undefined.js
@@ -0,0 +1,65 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/arg-val-undefined.case
+// - src/dflt-params/default/arrow-function.template
+/*---
+description: Use of intializer when argument value is `undefined` (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    [...]
+    23. Let iteratorRecord be Record {[[Iterator]]:
+        CreateListIterator(argumentsList), [[Done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        a. Perform ? IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+---*/
+
+var callCount = 0;
+var f;
+f = (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);
+assert.sameValue(callCount, 1, 'arrow function invoked exactly once');
diff --git a/test/language/expressions/arrow-function/params-dflt-duplicates.js b/test/language/expressions/arrow-function/params-dflt-duplicates.js
new file mode 100644
index 0000000000..8b338f7e42
--- /dev/null
+++ b/test/language/expressions/arrow-function/params-dflt-duplicates.js
@@ -0,0 +1,57 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/duplicates.case
+// - src/dflt-params/syntax/arrow-function.template
+/*---
+description: It is a Syntax Error if BoundNames of FormalParameters contains any duplicate elements. (arrow function expression)
+esid: sec-arrow-function-definitions-runtime-semantics-evaluation
+es6id: 14.2.16
+features: [default-parameters]
+flags: [generated]
+negative: 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.
+    [...]
+
+    14.1.2 Static Semantics: Early Errors
+
+    StrictFormalParameters : FormalParameters
+
+    - It is a Syntax Error if BoundNames of FormalParameters contains any
+      duplicate elements.
+
+    FormalParameters : FormalParameterList
+
+    - It is a Syntax Error if IsSimpleParameterList of FormalParameterList is
+      false and BoundNames of FormalParameterList contains any duplicate
+      elements.
+---*/
+
+0, (x = 0, x) => {
+  
+};
diff --git a/test/language/expressions/arrow-function/params-dflt-ref-later.js b/test/language/expressions/arrow-function/params-dflt-ref-later.js
new file mode 100644
index 0000000000..96789cbf65
--- /dev/null
+++ b/test/language/expressions/arrow-function/params-dflt-ref-later.js
@@ -0,0 +1,62 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-later.case
+// - src/dflt-params/error/arrow-function.template
+/*---
+description: Referencing a parameter that occurs later in the ParameterList (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+var f;
+f = (x = y, y) => {
+  
+  callCount = callCount + 1;
+};
+
+assert.throws(ReferenceError, function() {
+  f();
+});
+assert.sameValue(callCount, 0, 'arrow function body not evaluated');
diff --git a/test/language/expressions/arrow-function/params-dflt-ref-prior.js b/test/language/expressions/arrow-function/params-dflt-ref-prior.js
new file mode 100644
index 0000000000..b34679a104
--- /dev/null
+++ b/test/language/expressions/arrow-function/params-dflt-ref-prior.js
@@ -0,0 +1,62 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-prior.case
+// - src/dflt-params/default/arrow-function.template
+/*---
+description: Referencing a parameter that occurs earlier in the ParameterList (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+var f;
+f = (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);
+assert.sameValue(callCount, 1, 'arrow function invoked exactly once');
diff --git a/test/language/expressions/arrow-function/params-dflt-ref-self.js b/test/language/expressions/arrow-function/params-dflt-ref-self.js
new file mode 100644
index 0000000000..8f45c38968
--- /dev/null
+++ b/test/language/expressions/arrow-function/params-dflt-ref-self.js
@@ -0,0 +1,62 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-self.case
+// - src/dflt-params/error/arrow-function.template
+/*---
+description: Referencing a parameter from within its own initializer (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+var f;
+f = (x = x) => {
+  
+  callCount = callCount + 1;
+};
+
+assert.throws(ReferenceError, function() {
+  f();
+});
+assert.sameValue(callCount, 0, 'arrow function body not evaluated');
diff --git a/test/language/expressions/arrow-function/params-dflt-rest.js b/test/language/expressions/arrow-function/params-dflt-rest.js
new file mode 100644
index 0000000000..5981599564
--- /dev/null
+++ b/test/language/expressions/arrow-function/params-dflt-rest.js
@@ -0,0 +1,62 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/rest.case
+// - src/dflt-params/syntax/arrow-function.template
+/*---
+description: RestParameter does not support an initializer (arrow function expression)
+esid: sec-arrow-function-definitions-runtime-semantics-evaluation
+es6id: 14.2.16
+features: [default-parameters]
+flags: [generated]
+negative: 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.
+    [...]
+
+    14.1 Function Definitions
+
+    Syntax
+
+    FunctionRestParameter[Yield] :
+
+      BindingRestElement[?Yield]
+
+    13.3.3 Destructuring Binding Patterns
+
+    Syntax
+
+    BindingRestElement[Yield] :
+
+      ...BindingIdentifier[?Yield]
+      ...BindingPattern[?Yield]
+
+---*/
+
+0, (...x = []) => {
+  
+};
diff --git a/test/language/expressions/class/params-dflt-gen-meth-abrupt.js b/test/language/expressions/class/params-dflt-gen-meth-abrupt.js
new file mode 100644
index 0000000000..889bd23139
--- /dev/null
+++ b/test/language/expressions/class/params-dflt-gen-meth-abrupt.js
@@ -0,0 +1,86 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/abrupt.case
+// - src/dflt-params/error/cls-expr-gen-meth.template
+/*---
+description: Abrupt completion returned by evaluation of initializer (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+
+var callCount = 0;
+var C = class {
+  *method(_ = (function() { throw new Test262Error(); }())) {
+    
+    callCount = callCount + 1;
+  }
+};
+
+assert.throws(Test262Error, function() {
+  C.prototype.method();
+});
+assert.sameValue(callCount, 0, 'method body not evaluated');
diff --git a/test/language/expressions/class/params-dflt-gen-meth-arg-val-not-undefined.js b/test/language/expressions/class/params-dflt-gen-meth-arg-val-not-undefined.js
new file mode 100644
index 0000000000..68e84f1551
--- /dev/null
+++ b/test/language/expressions/class/params-dflt-gen-meth-arg-val-not-undefined.js
@@ -0,0 +1,108 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/arg-val-not-undefined.case
+// - src/dflt-params/default/cls-expr-gen-meth.template
+/*---
+description: Use of intializer when argument value is not `undefined` (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    [...]
+    23. Let iteratorRecord be Record {[[Iterator]]:
+        CreateListIterator(argumentsList), [[Done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        a. Perform ? IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+---*/
+var obj = {};
+var falseCount = 0;
+var stringCount = 0;
+var nanCount = 0;
+var zeroCount = 0;
+var nullCount = 0;
+var objCount = 0;
+
+var callCount = 0;
+var C = class {
+  *method(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);
+    assert.sameValue(a0, 0);
+    assert.sameValue(aNull, null);
+    assert.sameValue(aObj, obj);
+    callCount = callCount + 1;
+  }
+};
+
+C.prototype.method(false, '', NaN, 0, null, obj).next();
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
+
+assert.sameValue(falseCount, 0, 'initializer not evaluated: false');
+assert.sameValue(stringCount, 0, 'initializer not evaluated: string');
+assert.sameValue(nanCount, 0, 'initializer not evaluated: NaN');
+assert.sameValue(zeroCount, 0, 'initializer not evaluated: 0');
+assert.sameValue(nullCount, 0, 'initializer not evaluated: null');
+assert.sameValue(objCount, 0, 'initializer not evaluated: object');
diff --git a/test/language/expressions/class/params-dflt-gen-meth-arg-val-undefined.js b/test/language/expressions/class/params-dflt-gen-meth-arg-val-undefined.js
new file mode 100644
index 0000000000..5a412e0b52
--- /dev/null
+++ b/test/language/expressions/class/params-dflt-gen-meth-arg-val-undefined.js
@@ -0,0 +1,91 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/arg-val-undefined.case
+// - src/dflt-params/default/cls-expr-gen-meth.template
+/*---
+description: Use of intializer when argument value is `undefined` (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    [...]
+    23. Let iteratorRecord be Record {[[Iterator]]:
+        CreateListIterator(argumentsList), [[Done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        a. Perform ? IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+---*/
+
+var callCount = 0;
+var C = class {
+  *method(fromLiteral = 23, fromExpr = 45, fromHole = 99) {
+    assert.sameValue(fromLiteral, 23);
+    assert.sameValue(fromExpr, 45);
+    assert.sameValue(fromHole, 99);
+    callCount = callCount + 1;
+  }
+};
+
+C.prototype.method(undefined, void 0).next();
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/expressions/class/params-dflt-gen-meth-duplicates.js b/test/language/expressions/class/params-dflt-gen-meth-duplicates.js
new file mode 100644
index 0000000000..64e8a6de67
--- /dev/null
+++ b/test/language/expressions/class/params-dflt-gen-meth-duplicates.js
@@ -0,0 +1,83 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/duplicates.case
+// - src/dflt-params/syntax/cls-expr-gen-meth.template
+/*---
+description: It is a Syntax Error if BoundNames of FormalParameters contains any duplicate elements. (class expression method)
+esid: sec-class-definitions-runtime-semantics-evaluation
+es6id: 14.5.16
+features: [default-parameters]
+flags: [generated]
+negative: 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.
+    [...]
+
+    14.1.2 Static Semantics: Early Errors
+
+    StrictFormalParameters : FormalParameters
+
+    - It is a Syntax Error if BoundNames of FormalParameters contains any
+      duplicate elements.
+
+    FormalParameters : FormalParameterList
+
+    - It is a Syntax Error if IsSimpleParameterList of FormalParameterList is
+      false and BoundNames of FormalParameterList contains any duplicate
+      elements.
+---*/
+
+0, class {
+  *method(x = 0, x) {
+    
+  }
+};
diff --git a/test/language/expressions/class/params-dflt-gen-meth-ref-later.js b/test/language/expressions/class/params-dflt-gen-meth-ref-later.js
new file mode 100644
index 0000000000..8187aab07a
--- /dev/null
+++ b/test/language/expressions/class/params-dflt-gen-meth-ref-later.js
@@ -0,0 +1,87 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-later.case
+// - src/dflt-params/error/cls-expr-gen-meth.template
+/*---
+description: Referencing a parameter that occurs later in the ParameterList (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+var C = class {
+  *method(x = y, y) {
+    
+    callCount = callCount + 1;
+  }
+};
+
+assert.throws(ReferenceError, function() {
+  C.prototype.method();
+});
+assert.sameValue(callCount, 0, 'method body not evaluated');
diff --git a/test/language/expressions/class/params-dflt-gen-meth-ref-prior.js b/test/language/expressions/class/params-dflt-gen-meth-ref-prior.js
new file mode 100644
index 0000000000..e5a098a17a
--- /dev/null
+++ b/test/language/expressions/class/params-dflt-gen-meth-ref-prior.js
@@ -0,0 +1,88 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-prior.case
+// - src/dflt-params/default/cls-expr-gen-meth.template
+/*---
+description: Referencing a parameter that occurs earlier in the ParameterList (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+var C = class {
+  *method(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;
+  }
+};
+
+C.prototype.method(3).next();
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/expressions/class/params-dflt-gen-meth-ref-self.js b/test/language/expressions/class/params-dflt-gen-meth-ref-self.js
new file mode 100644
index 0000000000..35ee467af1
--- /dev/null
+++ b/test/language/expressions/class/params-dflt-gen-meth-ref-self.js
@@ -0,0 +1,87 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-self.case
+// - src/dflt-params/error/cls-expr-gen-meth.template
+/*---
+description: Referencing a parameter from within its own initializer (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+var C = class {
+  *method(x = x) {
+    
+    callCount = callCount + 1;
+  }
+};
+
+assert.throws(ReferenceError, function() {
+  C.prototype.method();
+});
+assert.sameValue(callCount, 0, 'method body not evaluated');
diff --git a/test/language/expressions/class/params-dflt-gen-meth-rest.js b/test/language/expressions/class/params-dflt-gen-meth-rest.js
new file mode 100644
index 0000000000..3047f2288f
--- /dev/null
+++ b/test/language/expressions/class/params-dflt-gen-meth-rest.js
@@ -0,0 +1,88 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/rest.case
+// - src/dflt-params/syntax/cls-expr-gen-meth.template
+/*---
+description: RestParameter does not support an initializer (class expression method)
+esid: sec-class-definitions-runtime-semantics-evaluation
+es6id: 14.5.16
+features: [default-parameters]
+flags: [generated]
+negative: 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.
+    [...]
+
+    14.1 Function Definitions
+
+    Syntax
+
+    FunctionRestParameter[Yield] :
+
+      BindingRestElement[?Yield]
+
+    13.3.3 Destructuring Binding Patterns
+
+    Syntax
+
+    BindingRestElement[Yield] :
+
+      ...BindingIdentifier[?Yield]
+      ...BindingPattern[?Yield]
+
+---*/
+
+0, class {
+  *method(...x = []) {
+    
+  }
+};
diff --git a/test/language/expressions/class/params-dflt-gen-meth-static-abrupt.js b/test/language/expressions/class/params-dflt-gen-meth-static-abrupt.js
new file mode 100644
index 0000000000..c0ec1c62b9
--- /dev/null
+++ b/test/language/expressions/class/params-dflt-gen-meth-static-abrupt.js
@@ -0,0 +1,86 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/abrupt.case
+// - src/dflt-params/error/cls-expr-gen-meth-static.template
+/*---
+description: Abrupt completion returned by evaluation of initializer (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+
+var callCount = 0;
+var C = class {
+  static *method(_ = (function() { throw new Test262Error(); }())) {
+    
+    callCount = callCount + 1;
+  }
+};
+
+assert.throws(Test262Error, function() {
+  C.method();
+});
+assert.sameValue(callCount, 0, 'method body not evaluated');
diff --git a/test/language/expressions/class/params-dflt-gen-meth-static-arg-val-not-undefined.js b/test/language/expressions/class/params-dflt-gen-meth-static-arg-val-not-undefined.js
new file mode 100644
index 0000000000..5908b88cb9
--- /dev/null
+++ b/test/language/expressions/class/params-dflt-gen-meth-static-arg-val-not-undefined.js
@@ -0,0 +1,108 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/arg-val-not-undefined.case
+// - src/dflt-params/default/cls-expr-gen-meth-static.template
+/*---
+description: Use of intializer when argument value is not `undefined` (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    [...]
+    23. Let iteratorRecord be Record {[[Iterator]]:
+        CreateListIterator(argumentsList), [[Done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        a. Perform ? IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+---*/
+var obj = {};
+var falseCount = 0;
+var stringCount = 0;
+var nanCount = 0;
+var zeroCount = 0;
+var nullCount = 0;
+var objCount = 0;
+
+var callCount = 0;
+var C = class {
+  static *method(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);
+    assert.sameValue(a0, 0);
+    assert.sameValue(aNull, null);
+    assert.sameValue(aObj, obj);
+    callCount = callCount + 1;
+  }
+};
+
+C.method(false, '', NaN, 0, null, obj).next();
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
+
+assert.sameValue(falseCount, 0, 'initializer not evaluated: false');
+assert.sameValue(stringCount, 0, 'initializer not evaluated: string');
+assert.sameValue(nanCount, 0, 'initializer not evaluated: NaN');
+assert.sameValue(zeroCount, 0, 'initializer not evaluated: 0');
+assert.sameValue(nullCount, 0, 'initializer not evaluated: null');
+assert.sameValue(objCount, 0, 'initializer not evaluated: object');
diff --git a/test/language/expressions/class/params-dflt-gen-meth-static-arg-val-undefined.js b/test/language/expressions/class/params-dflt-gen-meth-static-arg-val-undefined.js
new file mode 100644
index 0000000000..c5312c7bdf
--- /dev/null
+++ b/test/language/expressions/class/params-dflt-gen-meth-static-arg-val-undefined.js
@@ -0,0 +1,91 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/arg-val-undefined.case
+// - src/dflt-params/default/cls-expr-gen-meth-static.template
+/*---
+description: Use of intializer when argument value is `undefined` (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    [...]
+    23. Let iteratorRecord be Record {[[Iterator]]:
+        CreateListIterator(argumentsList), [[Done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        a. Perform ? IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+---*/
+
+var callCount = 0;
+var C = class {
+  static *method(fromLiteral = 23, fromExpr = 45, fromHole = 99) {
+    assert.sameValue(fromLiteral, 23);
+    assert.sameValue(fromExpr, 45);
+    assert.sameValue(fromHole, 99);
+    callCount = callCount + 1;
+  }
+};
+
+C.method(undefined, void 0).next();
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/expressions/class/params-dflt-gen-meth-static-duplicates.js b/test/language/expressions/class/params-dflt-gen-meth-static-duplicates.js
new file mode 100644
index 0000000000..eb5663a6b3
--- /dev/null
+++ b/test/language/expressions/class/params-dflt-gen-meth-static-duplicates.js
@@ -0,0 +1,83 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/duplicates.case
+// - src/dflt-params/syntax/cls-expr-gen-meth-static.template
+/*---
+description: It is a Syntax Error if BoundNames of FormalParameters contains any duplicate elements. (static class expression generator method)
+esid: sec-class-definitions-runtime-semantics-evaluation
+es6id: 14.5.16
+features: [default-parameters]
+flags: [generated]
+negative: 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.
+    [...]
+
+    14.1.2 Static Semantics: Early Errors
+
+    StrictFormalParameters : FormalParameters
+
+    - It is a Syntax Error if BoundNames of FormalParameters contains any
+      duplicate elements.
+
+    FormalParameters : FormalParameterList
+
+    - It is a Syntax Error if IsSimpleParameterList of FormalParameterList is
+      false and BoundNames of FormalParameterList contains any duplicate
+      elements.
+---*/
+
+0, class {
+  static *method(x = 0, x) {
+    
+  }
+};
diff --git a/test/language/expressions/class/params-dflt-gen-meth-static-ref-later.js b/test/language/expressions/class/params-dflt-gen-meth-static-ref-later.js
new file mode 100644
index 0000000000..41da2d30d5
--- /dev/null
+++ b/test/language/expressions/class/params-dflt-gen-meth-static-ref-later.js
@@ -0,0 +1,87 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-later.case
+// - src/dflt-params/error/cls-expr-gen-meth-static.template
+/*---
+description: Referencing a parameter that occurs later in the ParameterList (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+var C = class {
+  static *method(x = y, y) {
+    
+    callCount = callCount + 1;
+  }
+};
+
+assert.throws(ReferenceError, function() {
+  C.method();
+});
+assert.sameValue(callCount, 0, 'method body not evaluated');
diff --git a/test/language/expressions/class/params-dflt-gen-meth-static-ref-prior.js b/test/language/expressions/class/params-dflt-gen-meth-static-ref-prior.js
new file mode 100644
index 0000000000..993d308096
--- /dev/null
+++ b/test/language/expressions/class/params-dflt-gen-meth-static-ref-prior.js
@@ -0,0 +1,88 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-prior.case
+// - src/dflt-params/default/cls-expr-gen-meth-static.template
+/*---
+description: Referencing a parameter that occurs earlier in the ParameterList (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+var C = class {
+  static *method(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;
+  }
+};
+
+C.method(3).next();
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/expressions/class/params-dflt-gen-meth-static-ref-self.js b/test/language/expressions/class/params-dflt-gen-meth-static-ref-self.js
new file mode 100644
index 0000000000..2d5c619c37
--- /dev/null
+++ b/test/language/expressions/class/params-dflt-gen-meth-static-ref-self.js
@@ -0,0 +1,87 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-self.case
+// - src/dflt-params/error/cls-expr-gen-meth-static.template
+/*---
+description: Referencing a parameter from within its own initializer (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+var C = class {
+  static *method(x = x) {
+    
+    callCount = callCount + 1;
+  }
+};
+
+assert.throws(ReferenceError, function() {
+  C.method();
+});
+assert.sameValue(callCount, 0, 'method body not evaluated');
diff --git a/test/language/expressions/class/params-dflt-gen-meth-static-rest.js b/test/language/expressions/class/params-dflt-gen-meth-static-rest.js
new file mode 100644
index 0000000000..92a5a6fffd
--- /dev/null
+++ b/test/language/expressions/class/params-dflt-gen-meth-static-rest.js
@@ -0,0 +1,88 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/rest.case
+// - src/dflt-params/syntax/cls-expr-gen-meth-static.template
+/*---
+description: RestParameter does not support an initializer (static class expression generator method)
+esid: sec-class-definitions-runtime-semantics-evaluation
+es6id: 14.5.16
+features: [default-parameters]
+flags: [generated]
+negative: 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.
+    [...]
+
+    14.1 Function Definitions
+
+    Syntax
+
+    FunctionRestParameter[Yield] :
+
+      BindingRestElement[?Yield]
+
+    13.3.3 Destructuring Binding Patterns
+
+    Syntax
+
+    BindingRestElement[Yield] :
+
+      ...BindingIdentifier[?Yield]
+      ...BindingPattern[?Yield]
+
+---*/
+
+0, class {
+  static *method(...x = []) {
+    
+  }
+};
diff --git a/test/language/expressions/class/params-dflt-meth-abrupt.js b/test/language/expressions/class/params-dflt-meth-abrupt.js
new file mode 100644
index 0000000000..7e0d921f7e
--- /dev/null
+++ b/test/language/expressions/class/params-dflt-meth-abrupt.js
@@ -0,0 +1,83 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/abrupt.case
+// - src/dflt-params/error/cls-expr-meth.template
+/*---
+description: Abrupt completion returned by evaluation of initializer (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+
+var callCount = 0;
+var C = class {
+  method(_ = (function() { throw new Test262Error(); }())) {
+    
+    callCount = callCount + 1;
+  }
+};
+
+assert.throws(Test262Error, function() {
+  C.prototype.method();
+});
+assert.sameValue(callCount, 0, 'method body not evaluated');
diff --git a/test/language/expressions/class/params-dflt-meth-arg-val-not-undefined.js b/test/language/expressions/class/params-dflt-meth-arg-val-not-undefined.js
new file mode 100644
index 0000000000..792198b412
--- /dev/null
+++ b/test/language/expressions/class/params-dflt-meth-arg-val-not-undefined.js
@@ -0,0 +1,105 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/arg-val-not-undefined.case
+// - src/dflt-params/default/cls-expr-meth.template
+/*---
+description: Use of intializer when argument value is not `undefined` (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    [...]
+    23. Let iteratorRecord be Record {[[Iterator]]:
+        CreateListIterator(argumentsList), [[Done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        a. Perform ? IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+---*/
+var obj = {};
+var falseCount = 0;
+var stringCount = 0;
+var nanCount = 0;
+var zeroCount = 0;
+var nullCount = 0;
+var objCount = 0;
+
+var callCount = 0;
+var C = class {
+  method(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);
+    assert.sameValue(a0, 0);
+    assert.sameValue(aNull, null);
+    assert.sameValue(aObj, obj);
+    callCount = callCount + 1;
+  }
+};
+
+C.prototype.method(false, '', NaN, 0, null, obj);
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
+
+assert.sameValue(falseCount, 0, 'initializer not evaluated: false');
+assert.sameValue(stringCount, 0, 'initializer not evaluated: string');
+assert.sameValue(nanCount, 0, 'initializer not evaluated: NaN');
+assert.sameValue(zeroCount, 0, 'initializer not evaluated: 0');
+assert.sameValue(nullCount, 0, 'initializer not evaluated: null');
+assert.sameValue(objCount, 0, 'initializer not evaluated: object');
diff --git a/test/language/expressions/class/params-dflt-meth-arg-val-undefined.js b/test/language/expressions/class/params-dflt-meth-arg-val-undefined.js
new file mode 100644
index 0000000000..e9a40bd677
--- /dev/null
+++ b/test/language/expressions/class/params-dflt-meth-arg-val-undefined.js
@@ -0,0 +1,88 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/arg-val-undefined.case
+// - src/dflt-params/default/cls-expr-meth.template
+/*---
+description: Use of intializer when argument value is `undefined` (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    [...]
+    23. Let iteratorRecord be Record {[[Iterator]]:
+        CreateListIterator(argumentsList), [[Done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        a. Perform ? IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+---*/
+
+var callCount = 0;
+var C = class {
+  method(fromLiteral = 23, fromExpr = 45, fromHole = 99) {
+    assert.sameValue(fromLiteral, 23);
+    assert.sameValue(fromExpr, 45);
+    assert.sameValue(fromHole, 99);
+    callCount = callCount + 1;
+  }
+};
+
+C.prototype.method(undefined, void 0);
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/expressions/class/params-dflt-meth-duplicates.js b/test/language/expressions/class/params-dflt-meth-duplicates.js
new file mode 100644
index 0000000000..d7f7bf30ce
--- /dev/null
+++ b/test/language/expressions/class/params-dflt-meth-duplicates.js
@@ -0,0 +1,80 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/duplicates.case
+// - src/dflt-params/syntax/cls-expr-meth.template
+/*---
+description: It is a Syntax Error if BoundNames of FormalParameters contains any duplicate elements. (class expression method)
+esid: sec-class-definitions-runtime-semantics-evaluation
+es6id: 14.5.16
+features: [default-parameters]
+flags: [generated]
+negative: 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.
+    [...]
+
+    14.1.2 Static Semantics: Early Errors
+
+    StrictFormalParameters : FormalParameters
+
+    - It is a Syntax Error if BoundNames of FormalParameters contains any
+      duplicate elements.
+
+    FormalParameters : FormalParameterList
+
+    - It is a Syntax Error if IsSimpleParameterList of FormalParameterList is
+      false and BoundNames of FormalParameterList contains any duplicate
+      elements.
+---*/
+
+0, class {
+  method(x = 0, x) {
+    
+  }
+};
diff --git a/test/language/expressions/class/params-dflt-meth-ref-later.js b/test/language/expressions/class/params-dflt-meth-ref-later.js
new file mode 100644
index 0000000000..ca04f536dc
--- /dev/null
+++ b/test/language/expressions/class/params-dflt-meth-ref-later.js
@@ -0,0 +1,84 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-later.case
+// - src/dflt-params/error/cls-expr-meth.template
+/*---
+description: Referencing a parameter that occurs later in the ParameterList (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+var C = class {
+  method(x = y, y) {
+    
+    callCount = callCount + 1;
+  }
+};
+
+assert.throws(ReferenceError, function() {
+  C.prototype.method();
+});
+assert.sameValue(callCount, 0, 'method body not evaluated');
diff --git a/test/language/expressions/class/params-dflt-meth-ref-prior.js b/test/language/expressions/class/params-dflt-meth-ref-prior.js
new file mode 100644
index 0000000000..eceb7cd01c
--- /dev/null
+++ b/test/language/expressions/class/params-dflt-meth-ref-prior.js
@@ -0,0 +1,85 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-prior.case
+// - src/dflt-params/default/cls-expr-meth.template
+/*---
+description: Referencing a parameter that occurs earlier in the ParameterList (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+var C = class {
+  method(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;
+  }
+};
+
+C.prototype.method(3);
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/expressions/class/params-dflt-meth-ref-self.js b/test/language/expressions/class/params-dflt-meth-ref-self.js
new file mode 100644
index 0000000000..7ec1a9bb96
--- /dev/null
+++ b/test/language/expressions/class/params-dflt-meth-ref-self.js
@@ -0,0 +1,84 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-self.case
+// - src/dflt-params/error/cls-expr-meth.template
+/*---
+description: Referencing a parameter from within its own initializer (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+var C = class {
+  method(x = x) {
+    
+    callCount = callCount + 1;
+  }
+};
+
+assert.throws(ReferenceError, function() {
+  C.prototype.method();
+});
+assert.sameValue(callCount, 0, 'method body not evaluated');
diff --git a/test/language/expressions/class/params-dflt-meth-rest.js b/test/language/expressions/class/params-dflt-meth-rest.js
new file mode 100644
index 0000000000..20e2a79ec3
--- /dev/null
+++ b/test/language/expressions/class/params-dflt-meth-rest.js
@@ -0,0 +1,85 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/rest.case
+// - src/dflt-params/syntax/cls-expr-meth.template
+/*---
+description: RestParameter does not support an initializer (class expression method)
+esid: sec-class-definitions-runtime-semantics-evaluation
+es6id: 14.5.16
+features: [default-parameters]
+flags: [generated]
+negative: 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.
+    [...]
+
+    14.1 Function Definitions
+
+    Syntax
+
+    FunctionRestParameter[Yield] :
+
+      BindingRestElement[?Yield]
+
+    13.3.3 Destructuring Binding Patterns
+
+    Syntax
+
+    BindingRestElement[Yield] :
+
+      ...BindingIdentifier[?Yield]
+      ...BindingPattern[?Yield]
+
+---*/
+
+0, class {
+  method(...x = []) {
+    
+  }
+};
diff --git a/test/language/expressions/class/params-dflt-meth-static-abrupt.js b/test/language/expressions/class/params-dflt-meth-static-abrupt.js
new file mode 100644
index 0000000000..4c7724491f
--- /dev/null
+++ b/test/language/expressions/class/params-dflt-meth-static-abrupt.js
@@ -0,0 +1,83 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/abrupt.case
+// - src/dflt-params/error/cls-expr-meth-static.template
+/*---
+description: Abrupt completion returned by evaluation of initializer (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+
+var callCount = 0;
+var C = class {
+  static method(_ = (function() { throw new Test262Error(); }())) {
+    
+    callCount = callCount + 1;
+  }
+};
+
+assert.throws(Test262Error, function() {
+  C.method();
+});
+assert.sameValue(callCount, 0, 'method body not evaluated');
diff --git a/test/language/expressions/class/params-dflt-meth-static-arg-val-not-undefined.js b/test/language/expressions/class/params-dflt-meth-static-arg-val-not-undefined.js
new file mode 100644
index 0000000000..5a0a0c52d6
--- /dev/null
+++ b/test/language/expressions/class/params-dflt-meth-static-arg-val-not-undefined.js
@@ -0,0 +1,105 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/arg-val-not-undefined.case
+// - src/dflt-params/default/cls-expr-meth-static.template
+/*---
+description: Use of intializer when argument value is not `undefined` (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    [...]
+    23. Let iteratorRecord be Record {[[Iterator]]:
+        CreateListIterator(argumentsList), [[Done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        a. Perform ? IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+---*/
+var obj = {};
+var falseCount = 0;
+var stringCount = 0;
+var nanCount = 0;
+var zeroCount = 0;
+var nullCount = 0;
+var objCount = 0;
+
+var callCount = 0;
+var C = class {
+  static method(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);
+    assert.sameValue(a0, 0);
+    assert.sameValue(aNull, null);
+    assert.sameValue(aObj, obj);
+    callCount = callCount + 1;
+  }
+};
+
+C.method(false, '', NaN, 0, null, obj);
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
+
+assert.sameValue(falseCount, 0, 'initializer not evaluated: false');
+assert.sameValue(stringCount, 0, 'initializer not evaluated: string');
+assert.sameValue(nanCount, 0, 'initializer not evaluated: NaN');
+assert.sameValue(zeroCount, 0, 'initializer not evaluated: 0');
+assert.sameValue(nullCount, 0, 'initializer not evaluated: null');
+assert.sameValue(objCount, 0, 'initializer not evaluated: object');
diff --git a/test/language/expressions/class/params-dflt-meth-static-arg-val-undefined.js b/test/language/expressions/class/params-dflt-meth-static-arg-val-undefined.js
new file mode 100644
index 0000000000..13ac0287fe
--- /dev/null
+++ b/test/language/expressions/class/params-dflt-meth-static-arg-val-undefined.js
@@ -0,0 +1,88 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/arg-val-undefined.case
+// - src/dflt-params/default/cls-expr-meth-static.template
+/*---
+description: Use of intializer when argument value is `undefined` (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    [...]
+    23. Let iteratorRecord be Record {[[Iterator]]:
+        CreateListIterator(argumentsList), [[Done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        a. Perform ? IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+---*/
+
+var callCount = 0;
+var C = class {
+  static method(fromLiteral = 23, fromExpr = 45, fromHole = 99) {
+    assert.sameValue(fromLiteral, 23);
+    assert.sameValue(fromExpr, 45);
+    assert.sameValue(fromHole, 99);
+    callCount = callCount + 1;
+  }
+};
+
+C.method(undefined, void 0);
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/expressions/class/params-dflt-meth-static-duplicates.js b/test/language/expressions/class/params-dflt-meth-static-duplicates.js
new file mode 100644
index 0000000000..6d68a6a053
--- /dev/null
+++ b/test/language/expressions/class/params-dflt-meth-static-duplicates.js
@@ -0,0 +1,80 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/duplicates.case
+// - src/dflt-params/syntax/cls-expr-meth-static.template
+/*---
+description: It is a Syntax Error if BoundNames of FormalParameters contains any duplicate elements. (static class expression method)
+esid: sec-class-definitions-runtime-semantics-evaluation
+es6id: 14.5.16
+features: [default-parameters]
+flags: [generated]
+negative: 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.
+    [...]
+
+    14.1.2 Static Semantics: Early Errors
+
+    StrictFormalParameters : FormalParameters
+
+    - It is a Syntax Error if BoundNames of FormalParameters contains any
+      duplicate elements.
+
+    FormalParameters : FormalParameterList
+
+    - It is a Syntax Error if IsSimpleParameterList of FormalParameterList is
+      false and BoundNames of FormalParameterList contains any duplicate
+      elements.
+---*/
+
+0, class {
+  static method(x = 0, x) {
+    
+  }
+};
diff --git a/test/language/expressions/class/params-dflt-meth-static-ref-later.js b/test/language/expressions/class/params-dflt-meth-static-ref-later.js
new file mode 100644
index 0000000000..a28ef9f809
--- /dev/null
+++ b/test/language/expressions/class/params-dflt-meth-static-ref-later.js
@@ -0,0 +1,84 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-later.case
+// - src/dflt-params/error/cls-expr-meth-static.template
+/*---
+description: Referencing a parameter that occurs later in the ParameterList (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+var C = class {
+  static method(x = y, y) {
+    
+    callCount = callCount + 1;
+  }
+};
+
+assert.throws(ReferenceError, function() {
+  C.method();
+});
+assert.sameValue(callCount, 0, 'method body not evaluated');
diff --git a/test/language/expressions/class/params-dflt-meth-static-ref-prior.js b/test/language/expressions/class/params-dflt-meth-static-ref-prior.js
new file mode 100644
index 0000000000..cf8be79437
--- /dev/null
+++ b/test/language/expressions/class/params-dflt-meth-static-ref-prior.js
@@ -0,0 +1,85 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-prior.case
+// - src/dflt-params/default/cls-expr-meth-static.template
+/*---
+description: Referencing a parameter that occurs earlier in the ParameterList (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+var C = class {
+  static method(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;
+  }
+};
+
+C.method(3);
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/expressions/class/params-dflt-meth-static-ref-self.js b/test/language/expressions/class/params-dflt-meth-static-ref-self.js
new file mode 100644
index 0000000000..93a1ad3252
--- /dev/null
+++ b/test/language/expressions/class/params-dflt-meth-static-ref-self.js
@@ -0,0 +1,84 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-self.case
+// - src/dflt-params/error/cls-expr-meth-static.template
+/*---
+description: Referencing a parameter from within its own initializer (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+var C = class {
+  static method(x = x) {
+    
+    callCount = callCount + 1;
+  }
+};
+
+assert.throws(ReferenceError, function() {
+  C.method();
+});
+assert.sameValue(callCount, 0, 'method body not evaluated');
diff --git a/test/language/expressions/class/params-dflt-meth-static-rest.js b/test/language/expressions/class/params-dflt-meth-static-rest.js
new file mode 100644
index 0000000000..1772004b57
--- /dev/null
+++ b/test/language/expressions/class/params-dflt-meth-static-rest.js
@@ -0,0 +1,85 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/rest.case
+// - src/dflt-params/syntax/cls-expr-meth-static.template
+/*---
+description: RestParameter does not support an initializer (static class expression method)
+esid: sec-class-definitions-runtime-semantics-evaluation
+es6id: 14.5.16
+features: [default-parameters]
+flags: [generated]
+negative: 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.
+    [...]
+
+    14.1 Function Definitions
+
+    Syntax
+
+    FunctionRestParameter[Yield] :
+
+      BindingRestElement[?Yield]
+
+    13.3.3 Destructuring Binding Patterns
+
+    Syntax
+
+    BindingRestElement[Yield] :
+
+      ...BindingIdentifier[?Yield]
+      ...BindingPattern[?Yield]
+
+---*/
+
+0, class {
+  static method(...x = []) {
+    
+  }
+};
diff --git a/test/language/expressions/function/params-dflt-abrupt.js b/test/language/expressions/function/params-dflt-abrupt.js
new file mode 100644
index 0000000000..8fbc1c7fd6
--- /dev/null
+++ b/test/language/expressions/function/params-dflt-abrupt.js
@@ -0,0 +1,62 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/abrupt.case
+// - src/dflt-params/error/func-expr.template
+/*---
+description: Abrupt completion returned by evaluation of initializer (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+
+var callCount = 0;
+var f;
+f = function(_ = (function() { throw new Test262Error(); }())) {
+  
+  callCount = callCount + 1;
+};
+
+assert.throws(Test262Error, function() {
+  f();
+});
+assert.sameValue(callCount, 0, 'function body not evaluated');
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
new file mode 100644
index 0000000000..3a1604d8b3
--- /dev/null
+++ b/test/language/expressions/function/params-dflt-arg-val-not-undefined.js
@@ -0,0 +1,84 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/arg-val-not-undefined.case
+// - src/dflt-params/default/func-expr.template
+/*---
+description: Use of intializer when argument value is not `undefined` (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    [...]
+    23. Let iteratorRecord be Record {[[Iterator]]:
+        CreateListIterator(argumentsList), [[Done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        a. Perform ? IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+---*/
+var obj = {};
+var falseCount = 0;
+var stringCount = 0;
+var nanCount = 0;
+var zeroCount = 0;
+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) {
+  assert.sameValue(aFalse, false);
+  assert.sameValue(aString, '');
+  assert.sameValue(aNaN, NaN);
+  assert.sameValue(a0, 0);
+  assert.sameValue(aNull, null);
+  assert.sameValue(aObj, obj);
+  callCount = callCount + 1;
+};
+
+f(false, '', NaN, 0, null, obj);
+
+assert.sameValue(callCount, 1, 'function invoked exactly once');
+
+assert.sameValue(falseCount, 0, 'initializer not evaluated: false');
+assert.sameValue(stringCount, 0, 'initializer not evaluated: string');
+assert.sameValue(nanCount, 0, 'initializer not evaluated: NaN');
+assert.sameValue(zeroCount, 0, 'initializer not evaluated: 0');
+assert.sameValue(nullCount, 0, 'initializer not evaluated: null');
+assert.sameValue(objCount, 0, 'initializer not evaluated: object');
diff --git a/test/language/expressions/function/params-dflt-arg-val-undefined.js b/test/language/expressions/function/params-dflt-arg-val-undefined.js
new file mode 100644
index 0000000000..cec9fa0a13
--- /dev/null
+++ b/test/language/expressions/function/params-dflt-arg-val-undefined.js
@@ -0,0 +1,67 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/arg-val-undefined.case
+// - src/dflt-params/default/func-expr.template
+/*---
+description: Use of intializer when argument value is `undefined` (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    [...]
+    23. Let iteratorRecord be Record {[[Iterator]]:
+        CreateListIterator(argumentsList), [[Done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        a. Perform ? IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+---*/
+
+var callCount = 0;
+var f;
+f = 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);
+
+assert.sameValue(callCount, 1, 'function invoked exactly once');
diff --git a/test/language/expressions/function/params-dflt-duplicates.js b/test/language/expressions/function/params-dflt-duplicates.js
new file mode 100644
index 0000000000..2d98b532f7
--- /dev/null
+++ b/test/language/expressions/function/params-dflt-duplicates.js
@@ -0,0 +1,58 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/duplicates.case
+// - src/dflt-params/syntax/func-expr.template
+/*---
+description: It is a Syntax Error if BoundNames of FormalParameters contains any duplicate elements. (function expression)
+esid: sec-function-definitions-runtime-semantics-evaluation
+es6id: 14.1.20
+features: [default-parameters]
+flags: [generated]
+negative: 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.
+    [...]
+
+    14.1.2 Static Semantics: Early Errors
+
+    StrictFormalParameters : FormalParameters
+
+    - It is a Syntax Error if BoundNames of FormalParameters contains any
+      duplicate elements.
+
+    FormalParameters : FormalParameterList
+
+    - It is a Syntax Error if IsSimpleParameterList of FormalParameterList is
+      false and BoundNames of FormalParameterList contains any duplicate
+      elements.
+---*/
+
+0, function(x = 0, x) {
+  
+};
diff --git a/test/language/expressions/function/params-dflt-ref-later.js b/test/language/expressions/function/params-dflt-ref-later.js
new file mode 100644
index 0000000000..0e1122a564
--- /dev/null
+++ b/test/language/expressions/function/params-dflt-ref-later.js
@@ -0,0 +1,63 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-later.case
+// - src/dflt-params/error/func-expr.template
+/*---
+description: Referencing a parameter that occurs later in the ParameterList (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+var f;
+f = function(x = y, y) {
+  
+  callCount = callCount + 1;
+};
+
+assert.throws(ReferenceError, function() {
+  f();
+});
+assert.sameValue(callCount, 0, 'function body not evaluated');
diff --git a/test/language/expressions/function/params-dflt-ref-prior.js b/test/language/expressions/function/params-dflt-ref-prior.js
new file mode 100644
index 0000000000..0d6619d5ca
--- /dev/null
+++ b/test/language/expressions/function/params-dflt-ref-prior.js
@@ -0,0 +1,64 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-prior.case
+// - src/dflt-params/default/func-expr.template
+/*---
+description: Referencing a parameter that occurs earlier in the ParameterList (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+var f;
+f = 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);
+
+assert.sameValue(callCount, 1, 'function invoked exactly once');
diff --git a/test/language/expressions/function/params-dflt-ref-self.js b/test/language/expressions/function/params-dflt-ref-self.js
new file mode 100644
index 0000000000..0e1f974f27
--- /dev/null
+++ b/test/language/expressions/function/params-dflt-ref-self.js
@@ -0,0 +1,63 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-self.case
+// - src/dflt-params/error/func-expr.template
+/*---
+description: Referencing a parameter from within its own initializer (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+var f;
+f = function(x = x) {
+  
+  callCount = callCount + 1;
+};
+
+assert.throws(ReferenceError, function() {
+  f();
+});
+assert.sameValue(callCount, 0, 'function body not evaluated');
diff --git a/test/language/expressions/function/params-dflt-rest.js b/test/language/expressions/function/params-dflt-rest.js
new file mode 100644
index 0000000000..9c837d7eca
--- /dev/null
+++ b/test/language/expressions/function/params-dflt-rest.js
@@ -0,0 +1,63 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/rest.case
+// - src/dflt-params/syntax/func-expr.template
+/*---
+description: RestParameter does not support an initializer (function expression)
+esid: sec-function-definitions-runtime-semantics-evaluation
+es6id: 14.1.20
+features: [default-parameters]
+flags: [generated]
+negative: 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.
+    [...]
+
+    14.1 Function Definitions
+
+    Syntax
+
+    FunctionRestParameter[Yield] :
+
+      BindingRestElement[?Yield]
+
+    13.3.3 Destructuring Binding Patterns
+
+    Syntax
+
+    BindingRestElement[Yield] :
+
+      ...BindingIdentifier[?Yield]
+      ...BindingPattern[?Yield]
+
+---*/
+
+0, function(...x = []) {
+  
+};
diff --git a/test/language/expressions/generators/params-dflt-abrupt.js b/test/language/expressions/generators/params-dflt-abrupt.js
new file mode 100644
index 0000000000..ed1b7d6191
--- /dev/null
+++ b/test/language/expressions/generators/params-dflt-abrupt.js
@@ -0,0 +1,62 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/abrupt.case
+// - src/dflt-params/error/gen-func-expr.template
+/*---
+description: Abrupt completion returned by evaluation of initializer (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+
+var callCount = 0;
+var f;
+f = function*(_ = (function() { throw new Test262Error(); }())) {
+  
+  callCount = callCount + 1;
+};
+
+assert.throws(Test262Error, function() {
+  f();
+});
+assert.sameValue(callCount, 0, 'generator function body not evaluated');
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
new file mode 100644
index 0000000000..7761519475
--- /dev/null
+++ b/test/language/expressions/generators/params-dflt-arg-val-not-undefined.js
@@ -0,0 +1,84 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/arg-val-not-undefined.case
+// - src/dflt-params/default/gen-func-expr.template
+/*---
+description: Use of intializer when argument value is not `undefined` (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    [...]
+    23. Let iteratorRecord be Record {[[Iterator]]:
+        CreateListIterator(argumentsList), [[Done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        a. Perform ? IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+---*/
+var obj = {};
+var falseCount = 0;
+var stringCount = 0;
+var nanCount = 0;
+var zeroCount = 0;
+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) {
+  assert.sameValue(aFalse, false);
+  assert.sameValue(aString, '');
+  assert.sameValue(aNaN, NaN);
+  assert.sameValue(a0, 0);
+  assert.sameValue(aNull, null);
+  assert.sameValue(aObj, obj);
+  callCount = callCount + 1;
+};
+
+f(false, '', NaN, 0, null, obj).next();
+
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+assert.sameValue(falseCount, 0, 'initializer not evaluated: false');
+assert.sameValue(stringCount, 0, 'initializer not evaluated: string');
+assert.sameValue(nanCount, 0, 'initializer not evaluated: NaN');
+assert.sameValue(zeroCount, 0, 'initializer not evaluated: 0');
+assert.sameValue(nullCount, 0, 'initializer not evaluated: null');
+assert.sameValue(objCount, 0, 'initializer not evaluated: object');
diff --git a/test/language/expressions/generators/params-dflt-arg-val-undefined.js b/test/language/expressions/generators/params-dflt-arg-val-undefined.js
new file mode 100644
index 0000000000..9c1802394d
--- /dev/null
+++ b/test/language/expressions/generators/params-dflt-arg-val-undefined.js
@@ -0,0 +1,67 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/arg-val-undefined.case
+// - src/dflt-params/default/gen-func-expr.template
+/*---
+description: Use of intializer when argument value is `undefined` (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    [...]
+    23. Let iteratorRecord be Record {[[Iterator]]:
+        CreateListIterator(argumentsList), [[Done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        a. Perform ? IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+---*/
+
+var callCount = 0;
+var f;
+f = 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();
+
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
diff --git a/test/language/expressions/generators/params-dflt-duplicates.js b/test/language/expressions/generators/params-dflt-duplicates.js
new file mode 100644
index 0000000000..e3f678e6de
--- /dev/null
+++ b/test/language/expressions/generators/params-dflt-duplicates.js
@@ -0,0 +1,58 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/duplicates.case
+// - src/dflt-params/syntax/gen-func-expr.template
+/*---
+description: It is a Syntax Error if BoundNames of FormalParameters contains any duplicate elements. (generator function expression)
+esid: sec-generator-function-definitions-runtime-semantics-evaluation
+es6id: 14.4.14
+features: [default-parameters]
+flags: [generated]
+negative: 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.
+    [...]
+
+    14.1.2 Static Semantics: Early Errors
+
+    StrictFormalParameters : FormalParameters
+
+    - It is a Syntax Error if BoundNames of FormalParameters contains any
+      duplicate elements.
+
+    FormalParameters : FormalParameterList
+
+    - It is a Syntax Error if IsSimpleParameterList of FormalParameterList is
+      false and BoundNames of FormalParameterList contains any duplicate
+      elements.
+---*/
+
+0, function*(x = 0, x) {
+  
+};
diff --git a/test/language/expressions/generators/params-dflt-ref-later.js b/test/language/expressions/generators/params-dflt-ref-later.js
new file mode 100644
index 0000000000..14d668116e
--- /dev/null
+++ b/test/language/expressions/generators/params-dflt-ref-later.js
@@ -0,0 +1,63 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-later.case
+// - src/dflt-params/error/gen-func-expr.template
+/*---
+description: Referencing a parameter that occurs later in the ParameterList (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+var f;
+f = function*(x = y, y) {
+  
+  callCount = callCount + 1;
+};
+
+assert.throws(ReferenceError, function() {
+  f();
+});
+assert.sameValue(callCount, 0, 'generator function body not evaluated');
diff --git a/test/language/expressions/generators/params-dflt-ref-prior.js b/test/language/expressions/generators/params-dflt-ref-prior.js
new file mode 100644
index 0000000000..af750a8dcb
--- /dev/null
+++ b/test/language/expressions/generators/params-dflt-ref-prior.js
@@ -0,0 +1,64 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-prior.case
+// - src/dflt-params/default/gen-func-expr.template
+/*---
+description: Referencing a parameter that occurs earlier in the ParameterList (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+var f;
+f = 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();
+
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
diff --git a/test/language/expressions/generators/params-dflt-ref-self.js b/test/language/expressions/generators/params-dflt-ref-self.js
new file mode 100644
index 0000000000..8cf2c9461c
--- /dev/null
+++ b/test/language/expressions/generators/params-dflt-ref-self.js
@@ -0,0 +1,63 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-self.case
+// - src/dflt-params/error/gen-func-expr.template
+/*---
+description: Referencing a parameter from within its own initializer (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+var f;
+f = function*(x = x) {
+  
+  callCount = callCount + 1;
+};
+
+assert.throws(ReferenceError, function() {
+  f();
+});
+assert.sameValue(callCount, 0, 'generator function body not evaluated');
diff --git a/test/language/expressions/generators/params-dflt-rest.js b/test/language/expressions/generators/params-dflt-rest.js
new file mode 100644
index 0000000000..132b5c3ca7
--- /dev/null
+++ b/test/language/expressions/generators/params-dflt-rest.js
@@ -0,0 +1,63 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/rest.case
+// - src/dflt-params/syntax/gen-func-expr.template
+/*---
+description: RestParameter does not support an initializer (generator function expression)
+esid: sec-generator-function-definitions-runtime-semantics-evaluation
+es6id: 14.4.14
+features: [default-parameters]
+flags: [generated]
+negative: 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.
+    [...]
+
+    14.1 Function Definitions
+
+    Syntax
+
+    FunctionRestParameter[Yield] :
+
+      BindingRestElement[?Yield]
+
+    13.3.3 Destructuring Binding Patterns
+
+    Syntax
+
+    BindingRestElement[Yield] :
+
+      ...BindingIdentifier[?Yield]
+      ...BindingPattern[?Yield]
+
+---*/
+
+0, function*(...x = []) {
+  
+};
diff --git a/test/language/expressions/object/method-definition/params-dflt-gen-meth-abrupt.js b/test/language/expressions/object/method-definition/params-dflt-gen-meth-abrupt.js
new file mode 100644
index 0000000000..47af741479
--- /dev/null
+++ b/test/language/expressions/object/method-definition/params-dflt-gen-meth-abrupt.js
@@ -0,0 +1,68 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/abrupt.case
+// - src/dflt-params/error/gen-meth.template
+/*---
+description: Abrupt completion returned by evaluation of initializer (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+
+var callCount = 0;
+var obj = {
+  *method(_ = (function() { throw new Test262Error(); }())) {
+    
+    callCount = callCount + 1;
+  }
+};
+
+assert.throws(Test262Error, function() {
+  obj.method();
+});
+assert.sameValue(callCount, 0, 'generator method body not evaluated');
diff --git a/test/language/expressions/object/method-definition/params-dflt-gen-meth-arg-val-not-undefined.js b/test/language/expressions/object/method-definition/params-dflt-gen-meth-arg-val-not-undefined.js
new file mode 100644
index 0000000000..469ff9fb43
--- /dev/null
+++ b/test/language/expressions/object/method-definition/params-dflt-gen-meth-arg-val-not-undefined.js
@@ -0,0 +1,90 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/arg-val-not-undefined.case
+// - src/dflt-params/default/gen-meth.template
+/*---
+description: Use of intializer when argument value is not `undefined` (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    [...]
+    23. Let iteratorRecord be Record {[[Iterator]]:
+        CreateListIterator(argumentsList), [[Done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        a. Perform ? IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+---*/
+var obj = {};
+var falseCount = 0;
+var stringCount = 0;
+var nanCount = 0;
+var zeroCount = 0;
+var nullCount = 0;
+var objCount = 0;
+
+var callCount = 0;
+var obj = {
+  *method(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);
+    assert.sameValue(a0, 0);
+    assert.sameValue(aNull, null);
+    assert.sameValue(aObj, obj);
+    callCount = callCount + 1;
+  }
+};
+
+obj.method(false, '', NaN, 0, null, obj).next();
+
+assert.sameValue(callCount, 1, 'generator method invoked exactly once');
+
+assert.sameValue(falseCount, 0, 'initializer not evaluated: false');
+assert.sameValue(stringCount, 0, 'initializer not evaluated: string');
+assert.sameValue(nanCount, 0, 'initializer not evaluated: NaN');
+assert.sameValue(zeroCount, 0, 'initializer not evaluated: 0');
+assert.sameValue(nullCount, 0, 'initializer not evaluated: null');
+assert.sameValue(objCount, 0, 'initializer not evaluated: object');
diff --git a/test/language/expressions/object/method-definition/params-dflt-gen-meth-arg-val-undefined.js b/test/language/expressions/object/method-definition/params-dflt-gen-meth-arg-val-undefined.js
new file mode 100644
index 0000000000..6ad5e3af25
--- /dev/null
+++ b/test/language/expressions/object/method-definition/params-dflt-gen-meth-arg-val-undefined.js
@@ -0,0 +1,73 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/arg-val-undefined.case
+// - src/dflt-params/default/gen-meth.template
+/*---
+description: Use of intializer when argument value is `undefined` (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    [...]
+    23. Let iteratorRecord be Record {[[Iterator]]:
+        CreateListIterator(argumentsList), [[Done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        a. Perform ? IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+---*/
+
+var callCount = 0;
+var obj = {
+  *method(fromLiteral = 23, fromExpr = 45, fromHole = 99) {
+    assert.sameValue(fromLiteral, 23);
+    assert.sameValue(fromExpr, 45);
+    assert.sameValue(fromHole, 99);
+    callCount = callCount + 1;
+  }
+};
+
+obj.method(undefined, void 0).next();
+
+assert.sameValue(callCount, 1, 'generator method invoked exactly once');
diff --git a/test/language/expressions/object/method-definition/params-dflt-gen-meth-duplicates.js b/test/language/expressions/object/method-definition/params-dflt-gen-meth-duplicates.js
new file mode 100644
index 0000000000..254363d98b
--- /dev/null
+++ b/test/language/expressions/object/method-definition/params-dflt-gen-meth-duplicates.js
@@ -0,0 +1,65 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/duplicates.case
+// - src/dflt-params/syntax/gen-meth.template
+/*---
+description: It is a Syntax Error if BoundNames of FormalParameters contains any duplicate elements. (generator method)
+esid: sec-generator-function-definitions-runtime-semantics-propertydefinitionevaluation
+es6id: 14.4.13
+features: [default-parameters]
+flags: [generated]
+negative: 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.
+    [...]
+
+    14.1.2 Static Semantics: Early Errors
+
+    StrictFormalParameters : FormalParameters
+
+    - It is a Syntax Error if BoundNames of FormalParameters contains any
+      duplicate elements.
+
+    FormalParameters : FormalParameterList
+
+    - It is a Syntax Error if IsSimpleParameterList of FormalParameterList is
+      false and BoundNames of FormalParameterList contains any duplicate
+      elements.
+---*/
+
+0, {
+  *method(x = 0, x) {
+    
+  }
+};
diff --git a/test/language/expressions/object/method-definition/params-dflt-gen-meth-ref-later.js b/test/language/expressions/object/method-definition/params-dflt-gen-meth-ref-later.js
new file mode 100644
index 0000000000..d729ae01b1
--- /dev/null
+++ b/test/language/expressions/object/method-definition/params-dflt-gen-meth-ref-later.js
@@ -0,0 +1,69 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-later.case
+// - src/dflt-params/error/gen-meth.template
+/*---
+description: Referencing a parameter that occurs later in the ParameterList (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+var obj = {
+  *method(x = y, y) {
+    
+    callCount = callCount + 1;
+  }
+};
+
+assert.throws(ReferenceError, function() {
+  obj.method();
+});
+assert.sameValue(callCount, 0, 'generator method body not evaluated');
diff --git a/test/language/expressions/object/method-definition/params-dflt-gen-meth-ref-prior.js b/test/language/expressions/object/method-definition/params-dflt-gen-meth-ref-prior.js
new file mode 100644
index 0000000000..c0b3ded9da
--- /dev/null
+++ b/test/language/expressions/object/method-definition/params-dflt-gen-meth-ref-prior.js
@@ -0,0 +1,70 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-prior.case
+// - src/dflt-params/default/gen-meth.template
+/*---
+description: Referencing a parameter that occurs earlier in the ParameterList (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+var obj = {
+  *method(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;
+  }
+};
+
+obj.method(3).next();
+
+assert.sameValue(callCount, 1, 'generator method invoked exactly once');
diff --git a/test/language/expressions/object/method-definition/params-dflt-gen-meth-ref-self.js b/test/language/expressions/object/method-definition/params-dflt-gen-meth-ref-self.js
new file mode 100644
index 0000000000..2c0e653635
--- /dev/null
+++ b/test/language/expressions/object/method-definition/params-dflt-gen-meth-ref-self.js
@@ -0,0 +1,69 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-self.case
+// - src/dflt-params/error/gen-meth.template
+/*---
+description: Referencing a parameter from within its own initializer (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+var obj = {
+  *method(x = x) {
+    
+    callCount = callCount + 1;
+  }
+};
+
+assert.throws(ReferenceError, function() {
+  obj.method();
+});
+assert.sameValue(callCount, 0, 'generator method body not evaluated');
diff --git a/test/language/expressions/object/method-definition/params-dflt-gen-meth-rest.js b/test/language/expressions/object/method-definition/params-dflt-gen-meth-rest.js
new file mode 100644
index 0000000000..6e313f186e
--- /dev/null
+++ b/test/language/expressions/object/method-definition/params-dflt-gen-meth-rest.js
@@ -0,0 +1,70 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/rest.case
+// - src/dflt-params/syntax/gen-meth.template
+/*---
+description: RestParameter does not support an initializer (generator method)
+esid: sec-generator-function-definitions-runtime-semantics-propertydefinitionevaluation
+es6id: 14.4.13
+features: [default-parameters]
+flags: [generated]
+negative: 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.
+    [...]
+
+    14.1 Function Definitions
+
+    Syntax
+
+    FunctionRestParameter[Yield] :
+
+      BindingRestElement[?Yield]
+
+    13.3.3 Destructuring Binding Patterns
+
+    Syntax
+
+    BindingRestElement[Yield] :
+
+      ...BindingIdentifier[?Yield]
+      ...BindingPattern[?Yield]
+
+---*/
+
+0, {
+  *method(...x = []) {
+    
+  }
+};
diff --git a/test/language/expressions/object/method-definition/params-dflt-meth-abrupt.js b/test/language/expressions/object/method-definition/params-dflt-meth-abrupt.js
new file mode 100644
index 0000000000..ceea6067b7
--- /dev/null
+++ b/test/language/expressions/object/method-definition/params-dflt-meth-abrupt.js
@@ -0,0 +1,65 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/abrupt.case
+// - src/dflt-params/error/meth.template
+/*---
+description: Abrupt completion returned by evaluation of initializer (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+
+var callCount = 0;
+var obj = {
+  method(_ = (function() { throw new Test262Error(); }())) {
+    
+    callCount = callCount + 1;
+  }
+};
+
+assert.throws(Test262Error, function() {
+  obj.method();
+});
+assert.sameValue(callCount, 0, 'method body not evaluated');
diff --git a/test/language/expressions/object/method-definition/params-dflt-meth-arg-val-not-undefined.js b/test/language/expressions/object/method-definition/params-dflt-meth-arg-val-not-undefined.js
new file mode 100644
index 0000000000..4d8f4f3af7
--- /dev/null
+++ b/test/language/expressions/object/method-definition/params-dflt-meth-arg-val-not-undefined.js
@@ -0,0 +1,87 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/arg-val-not-undefined.case
+// - src/dflt-params/default/meth.template
+/*---
+description: Use of intializer when argument value is not `undefined` (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    [...]
+    23. Let iteratorRecord be Record {[[Iterator]]:
+        CreateListIterator(argumentsList), [[Done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        a. Perform ? IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+---*/
+var obj = {};
+var falseCount = 0;
+var stringCount = 0;
+var nanCount = 0;
+var zeroCount = 0;
+var nullCount = 0;
+var objCount = 0;
+
+var callCount = 0;
+var obj = {
+  method(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);
+    assert.sameValue(a0, 0);
+    assert.sameValue(aNull, null);
+    assert.sameValue(aObj, obj);
+    callCount = callCount + 1;
+  }
+};
+
+obj.method(false, '', NaN, 0, null, obj);
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
+
+assert.sameValue(falseCount, 0, 'initializer not evaluated: false');
+assert.sameValue(stringCount, 0, 'initializer not evaluated: string');
+assert.sameValue(nanCount, 0, 'initializer not evaluated: NaN');
+assert.sameValue(zeroCount, 0, 'initializer not evaluated: 0');
+assert.sameValue(nullCount, 0, 'initializer not evaluated: null');
+assert.sameValue(objCount, 0, 'initializer not evaluated: object');
diff --git a/test/language/expressions/object/method-definition/params-dflt-meth-arg-val-undefined.js b/test/language/expressions/object/method-definition/params-dflt-meth-arg-val-undefined.js
new file mode 100644
index 0000000000..c95f192e47
--- /dev/null
+++ b/test/language/expressions/object/method-definition/params-dflt-meth-arg-val-undefined.js
@@ -0,0 +1,70 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/arg-val-undefined.case
+// - src/dflt-params/default/meth.template
+/*---
+description: Use of intializer when argument value is `undefined` (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    [...]
+    23. Let iteratorRecord be Record {[[Iterator]]:
+        CreateListIterator(argumentsList), [[Done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        a. Perform ? IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+---*/
+
+var callCount = 0;
+var obj = {
+  method(fromLiteral = 23, fromExpr = 45, fromHole = 99) {
+    assert.sameValue(fromLiteral, 23);
+    assert.sameValue(fromExpr, 45);
+    assert.sameValue(fromHole, 99);
+    callCount = callCount + 1;
+  }
+};
+
+obj.method(undefined, void 0);
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/expressions/object/method-definition/params-dflt-meth-duplicates.js b/test/language/expressions/object/method-definition/params-dflt-meth-duplicates.js
new file mode 100644
index 0000000000..3f996e27d3
--- /dev/null
+++ b/test/language/expressions/object/method-definition/params-dflt-meth-duplicates.js
@@ -0,0 +1,62 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/duplicates.case
+// - src/dflt-params/syntax/meth.template
+/*---
+description: It is a Syntax Error if BoundNames of FormalParameters contains any duplicate elements. (method)
+esid: sec-runtime-semantics-definemethod
+es6id: 14.3.8
+features: [default-parameters]
+flags: [generated]
+negative: 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.
+    [...]
+
+    14.1.2 Static Semantics: Early Errors
+
+    StrictFormalParameters : FormalParameters
+
+    - It is a Syntax Error if BoundNames of FormalParameters contains any
+      duplicate elements.
+
+    FormalParameters : FormalParameterList
+
+    - It is a Syntax Error if IsSimpleParameterList of FormalParameterList is
+      false and BoundNames of FormalParameterList contains any duplicate
+      elements.
+---*/
+
+0, {
+  method(x = 0, x) {
+    
+  }
+};
diff --git a/test/language/expressions/object/method-definition/params-dflt-meth-ref-later.js b/test/language/expressions/object/method-definition/params-dflt-meth-ref-later.js
new file mode 100644
index 0000000000..e1fb94fbfd
--- /dev/null
+++ b/test/language/expressions/object/method-definition/params-dflt-meth-ref-later.js
@@ -0,0 +1,66 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-later.case
+// - src/dflt-params/error/meth.template
+/*---
+description: Referencing a parameter that occurs later in the ParameterList (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+var obj = {
+  method(x = y, y) {
+    
+    callCount = callCount + 1;
+  }
+};
+
+assert.throws(ReferenceError, function() {
+  obj.method();
+});
+assert.sameValue(callCount, 0, 'method body not evaluated');
diff --git a/test/language/expressions/object/method-definition/params-dflt-meth-ref-prior.js b/test/language/expressions/object/method-definition/params-dflt-meth-ref-prior.js
new file mode 100644
index 0000000000..7b221b18d4
--- /dev/null
+++ b/test/language/expressions/object/method-definition/params-dflt-meth-ref-prior.js
@@ -0,0 +1,67 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-prior.case
+// - src/dflt-params/default/meth.template
+/*---
+description: Referencing a parameter that occurs earlier in the ParameterList (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+var obj = {
+  method(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;
+  }
+};
+
+obj.method(3);
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/expressions/object/method-definition/params-dflt-meth-ref-self.js b/test/language/expressions/object/method-definition/params-dflt-meth-ref-self.js
new file mode 100644
index 0000000000..a260573c96
--- /dev/null
+++ b/test/language/expressions/object/method-definition/params-dflt-meth-ref-self.js
@@ -0,0 +1,66 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-self.case
+// - src/dflt-params/error/meth.template
+/*---
+description: Referencing a parameter from within its own initializer (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+var obj = {
+  method(x = x) {
+    
+    callCount = callCount + 1;
+  }
+};
+
+assert.throws(ReferenceError, function() {
+  obj.method();
+});
+assert.sameValue(callCount, 0, 'method body not evaluated');
diff --git a/test/language/expressions/object/method-definition/params-dflt-meth-rest.js b/test/language/expressions/object/method-definition/params-dflt-meth-rest.js
new file mode 100644
index 0000000000..258dabf587
--- /dev/null
+++ b/test/language/expressions/object/method-definition/params-dflt-meth-rest.js
@@ -0,0 +1,67 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/rest.case
+// - src/dflt-params/syntax/meth.template
+/*---
+description: RestParameter does not support an initializer (method)
+esid: sec-runtime-semantics-definemethod
+es6id: 14.3.8
+features: [default-parameters]
+flags: [generated]
+negative: 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.
+    [...]
+
+    14.1 Function Definitions
+
+    Syntax
+
+    FunctionRestParameter[Yield] :
+
+      BindingRestElement[?Yield]
+
+    13.3.3 Destructuring Binding Patterns
+
+    Syntax
+
+    BindingRestElement[Yield] :
+
+      ...BindingIdentifier[?Yield]
+      ...BindingPattern[?Yield]
+
+---*/
+
+0, {
+  method(...x = []) {
+    
+  }
+};
diff --git a/test/language/statements/class/params-dflt-gen-meth-abrupt.js b/test/language/statements/class/params-dflt-gen-meth-abrupt.js
new file mode 100644
index 0000000000..e13f949a65
--- /dev/null
+++ b/test/language/statements/class/params-dflt-gen-meth-abrupt.js
@@ -0,0 +1,84 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/abrupt.case
+// - src/dflt-params/error/cls-decl-gen-meth.template
+/*---
+description: Abrupt completion returned by evaluation of initializer (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+
+var callCount = 0;
+class C {
+  *method(_ = (function() { throw new Test262Error(); }())) {
+    
+    callCount = callCount + 1;
+  }
+}
+
+assert.throws(Test262Error, function() {
+  C.prototype.method();
+});
+assert.sameValue(callCount, 0, 'method body not evaluated');
diff --git a/test/language/statements/class/params-dflt-gen-meth-arg-val-not-undefined.js b/test/language/statements/class/params-dflt-gen-meth-arg-val-not-undefined.js
new file mode 100644
index 0000000000..34cca4966c
--- /dev/null
+++ b/test/language/statements/class/params-dflt-gen-meth-arg-val-not-undefined.js
@@ -0,0 +1,106 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/arg-val-not-undefined.case
+// - src/dflt-params/default/cls-decl-gen-meth.template
+/*---
+description: Use of intializer when argument value is not `undefined` (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    [...]
+    23. Let iteratorRecord be Record {[[Iterator]]:
+        CreateListIterator(argumentsList), [[Done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        a. Perform ? IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+---*/
+var obj = {};
+var falseCount = 0;
+var stringCount = 0;
+var nanCount = 0;
+var zeroCount = 0;
+var nullCount = 0;
+var objCount = 0;
+
+var callCount = 0;
+class C {
+  *method(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);
+    assert.sameValue(a0, 0);
+    assert.sameValue(aNull, null);
+    assert.sameValue(aObj, obj);
+    callCount = callCount + 1;
+  }
+}
+
+C.prototype.method(false, '', NaN, 0, null, obj).next();
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
+
+assert.sameValue(falseCount, 0, 'initializer not evaluated: false');
+assert.sameValue(stringCount, 0, 'initializer not evaluated: string');
+assert.sameValue(nanCount, 0, 'initializer not evaluated: NaN');
+assert.sameValue(zeroCount, 0, 'initializer not evaluated: 0');
+assert.sameValue(nullCount, 0, 'initializer not evaluated: null');
+assert.sameValue(objCount, 0, 'initializer not evaluated: object');
diff --git a/test/language/statements/class/params-dflt-gen-meth-arg-val-undefined.js b/test/language/statements/class/params-dflt-gen-meth-arg-val-undefined.js
new file mode 100644
index 0000000000..c37777c163
--- /dev/null
+++ b/test/language/statements/class/params-dflt-gen-meth-arg-val-undefined.js
@@ -0,0 +1,89 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/arg-val-undefined.case
+// - src/dflt-params/default/cls-decl-gen-meth.template
+/*---
+description: Use of intializer when argument value is `undefined` (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    [...]
+    23. Let iteratorRecord be Record {[[Iterator]]:
+        CreateListIterator(argumentsList), [[Done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        a. Perform ? IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+---*/
+
+var callCount = 0;
+class C {
+  *method(fromLiteral = 23, fromExpr = 45, fromHole = 99) {
+    assert.sameValue(fromLiteral, 23);
+    assert.sameValue(fromExpr, 45);
+    assert.sameValue(fromHole, 99);
+    callCount = callCount + 1;
+  }
+}
+
+C.prototype.method(undefined, void 0).next();
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/statements/class/params-dflt-gen-meth-duplicates.js b/test/language/statements/class/params-dflt-gen-meth-duplicates.js
new file mode 100644
index 0000000000..332f0623f0
--- /dev/null
+++ b/test/language/statements/class/params-dflt-gen-meth-duplicates.js
@@ -0,0 +1,81 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/duplicates.case
+// - src/dflt-params/syntax/cls-decl-gen-meth.template
+/*---
+description: It is a Syntax Error if BoundNames of FormalParameters contains any duplicate elements. (class expression method)
+esid: sec-class-definitions-runtime-semantics-evaluation
+es6id: 14.5.16
+features: [default-parameters]
+flags: [generated]
+negative: 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.
+    [...]
+
+    14.1.2 Static Semantics: Early Errors
+
+    StrictFormalParameters : FormalParameters
+
+    - It is a Syntax Error if BoundNames of FormalParameters contains any
+      duplicate elements.
+
+    FormalParameters : FormalParameterList
+
+    - It is a Syntax Error if IsSimpleParameterList of FormalParameterList is
+      false and BoundNames of FormalParameterList contains any duplicate
+      elements.
+---*/
+
+class C {
+  *method(x = 0, x) {
+    
+  }
+}
diff --git a/test/language/statements/class/params-dflt-gen-meth-ref-later.js b/test/language/statements/class/params-dflt-gen-meth-ref-later.js
new file mode 100644
index 0000000000..9135d8693d
--- /dev/null
+++ b/test/language/statements/class/params-dflt-gen-meth-ref-later.js
@@ -0,0 +1,85 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-later.case
+// - src/dflt-params/error/cls-decl-gen-meth.template
+/*---
+description: Referencing a parameter that occurs later in the ParameterList (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+class C {
+  *method(x = y, y) {
+    
+    callCount = callCount + 1;
+  }
+}
+
+assert.throws(ReferenceError, function() {
+  C.prototype.method();
+});
+assert.sameValue(callCount, 0, 'method body not evaluated');
diff --git a/test/language/statements/class/params-dflt-gen-meth-ref-prior.js b/test/language/statements/class/params-dflt-gen-meth-ref-prior.js
new file mode 100644
index 0000000000..669e36b06e
--- /dev/null
+++ b/test/language/statements/class/params-dflt-gen-meth-ref-prior.js
@@ -0,0 +1,86 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-prior.case
+// - src/dflt-params/default/cls-decl-gen-meth.template
+/*---
+description: Referencing a parameter that occurs earlier in the ParameterList (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+class C {
+  *method(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;
+  }
+}
+
+C.prototype.method(3).next();
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/statements/class/params-dflt-gen-meth-ref-self.js b/test/language/statements/class/params-dflt-gen-meth-ref-self.js
new file mode 100644
index 0000000000..d222690a9f
--- /dev/null
+++ b/test/language/statements/class/params-dflt-gen-meth-ref-self.js
@@ -0,0 +1,85 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-self.case
+// - src/dflt-params/error/cls-decl-gen-meth.template
+/*---
+description: Referencing a parameter from within its own initializer (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+class C {
+  *method(x = x) {
+    
+    callCount = callCount + 1;
+  }
+}
+
+assert.throws(ReferenceError, function() {
+  C.prototype.method();
+});
+assert.sameValue(callCount, 0, 'method body not evaluated');
diff --git a/test/language/statements/class/params-dflt-gen-meth-rest.js b/test/language/statements/class/params-dflt-gen-meth-rest.js
new file mode 100644
index 0000000000..29a37231a0
--- /dev/null
+++ b/test/language/statements/class/params-dflt-gen-meth-rest.js
@@ -0,0 +1,86 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/rest.case
+// - src/dflt-params/syntax/cls-decl-gen-meth.template
+/*---
+description: RestParameter does not support an initializer (class expression method)
+esid: sec-class-definitions-runtime-semantics-evaluation
+es6id: 14.5.16
+features: [default-parameters]
+flags: [generated]
+negative: 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.
+    [...]
+
+    14.1 Function Definitions
+
+    Syntax
+
+    FunctionRestParameter[Yield] :
+
+      BindingRestElement[?Yield]
+
+    13.3.3 Destructuring Binding Patterns
+
+    Syntax
+
+    BindingRestElement[Yield] :
+
+      ...BindingIdentifier[?Yield]
+      ...BindingPattern[?Yield]
+
+---*/
+
+class C {
+  *method(...x = []) {
+    
+  }
+}
diff --git a/test/language/statements/class/params-dflt-gen-meth-static-abrupt.js b/test/language/statements/class/params-dflt-gen-meth-static-abrupt.js
new file mode 100644
index 0000000000..509c791b3c
--- /dev/null
+++ b/test/language/statements/class/params-dflt-gen-meth-static-abrupt.js
@@ -0,0 +1,85 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/abrupt.case
+// - src/dflt-params/error/cls-decl-gen-meth-static.template
+/*---
+description: Abrupt completion returned by evaluation of initializer (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+
+var callCount = 0;
+class C {
+  static *method(_ = (function() { throw new Test262Error(); }())) {
+    
+    callCount = callCount + 1;
+  }
+}
+
+assert.throws(Test262Error, function() {
+  C.method();
+});
+
+assert.sameValue(callCount, 0, 'method body not evaluated');
diff --git a/test/language/statements/class/params-dflt-gen-meth-static-arg-val-not-undefined.js b/test/language/statements/class/params-dflt-gen-meth-static-arg-val-not-undefined.js
new file mode 100644
index 0000000000..b90ad27f4b
--- /dev/null
+++ b/test/language/statements/class/params-dflt-gen-meth-static-arg-val-not-undefined.js
@@ -0,0 +1,106 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/arg-val-not-undefined.case
+// - src/dflt-params/default/cls-decl-gen-meth-static.template
+/*---
+description: Use of intializer when argument value is not `undefined` (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    [...]
+    23. Let iteratorRecord be Record {[[Iterator]]:
+        CreateListIterator(argumentsList), [[Done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        a. Perform ? IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+---*/
+var obj = {};
+var falseCount = 0;
+var stringCount = 0;
+var nanCount = 0;
+var zeroCount = 0;
+var nullCount = 0;
+var objCount = 0;
+
+var callCount = 0;
+class C {
+  static *method(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);
+    assert.sameValue(a0, 0);
+    assert.sameValue(aNull, null);
+    assert.sameValue(aObj, obj);
+    callCount = callCount + 1;
+  }
+}
+
+C.method(false, '', NaN, 0, null, obj).next();
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
+
+assert.sameValue(falseCount, 0, 'initializer not evaluated: false');
+assert.sameValue(stringCount, 0, 'initializer not evaluated: string');
+assert.sameValue(nanCount, 0, 'initializer not evaluated: NaN');
+assert.sameValue(zeroCount, 0, 'initializer not evaluated: 0');
+assert.sameValue(nullCount, 0, 'initializer not evaluated: null');
+assert.sameValue(objCount, 0, 'initializer not evaluated: object');
diff --git a/test/language/statements/class/params-dflt-gen-meth-static-arg-val-undefined.js b/test/language/statements/class/params-dflt-gen-meth-static-arg-val-undefined.js
new file mode 100644
index 0000000000..a1f02fb247
--- /dev/null
+++ b/test/language/statements/class/params-dflt-gen-meth-static-arg-val-undefined.js
@@ -0,0 +1,89 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/arg-val-undefined.case
+// - src/dflt-params/default/cls-decl-gen-meth-static.template
+/*---
+description: Use of intializer when argument value is `undefined` (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    [...]
+    23. Let iteratorRecord be Record {[[Iterator]]:
+        CreateListIterator(argumentsList), [[Done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        a. Perform ? IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+---*/
+
+var callCount = 0;
+class C {
+  static *method(fromLiteral = 23, fromExpr = 45, fromHole = 99) {
+    assert.sameValue(fromLiteral, 23);
+    assert.sameValue(fromExpr, 45);
+    assert.sameValue(fromHole, 99);
+    callCount = callCount + 1;
+  }
+}
+
+C.method(undefined, void 0).next();
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/statements/class/params-dflt-gen-meth-static-duplicates.js b/test/language/statements/class/params-dflt-gen-meth-static-duplicates.js
new file mode 100644
index 0000000000..f7c866e762
--- /dev/null
+++ b/test/language/statements/class/params-dflt-gen-meth-static-duplicates.js
@@ -0,0 +1,81 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/duplicates.case
+// - src/dflt-params/syntax/cls-decl-gen-meth-static.template
+/*---
+description: It is a Syntax Error if BoundNames of FormalParameters contains any duplicate elements. (static class expression generator method)
+esid: sec-runtime-semantics-bindingclassdeclarationevaluation
+es6id: 14.5.15
+features: [default-parameters]
+flags: [generated]
+negative: 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.
+    [...]
+
+    14.1.2 Static Semantics: Early Errors
+
+    StrictFormalParameters : FormalParameters
+
+    - It is a Syntax Error if BoundNames of FormalParameters contains any
+      duplicate elements.
+
+    FormalParameters : FormalParameterList
+
+    - It is a Syntax Error if IsSimpleParameterList of FormalParameterList is
+      false and BoundNames of FormalParameterList contains any duplicate
+      elements.
+---*/
+
+class C {
+  static *method(x = 0, x) {
+    
+  }
+}
diff --git a/test/language/statements/class/params-dflt-gen-meth-static-ref-later.js b/test/language/statements/class/params-dflt-gen-meth-static-ref-later.js
new file mode 100644
index 0000000000..54e345bd8f
--- /dev/null
+++ b/test/language/statements/class/params-dflt-gen-meth-static-ref-later.js
@@ -0,0 +1,86 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-later.case
+// - src/dflt-params/error/cls-decl-gen-meth-static.template
+/*---
+description: Referencing a parameter that occurs later in the ParameterList (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+class C {
+  static *method(x = y, y) {
+    
+    callCount = callCount + 1;
+  }
+}
+
+assert.throws(ReferenceError, function() {
+  C.method();
+});
+
+assert.sameValue(callCount, 0, 'method body not evaluated');
diff --git a/test/language/statements/class/params-dflt-gen-meth-static-ref-prior.js b/test/language/statements/class/params-dflt-gen-meth-static-ref-prior.js
new file mode 100644
index 0000000000..2eb401b3f2
--- /dev/null
+++ b/test/language/statements/class/params-dflt-gen-meth-static-ref-prior.js
@@ -0,0 +1,86 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-prior.case
+// - src/dflt-params/default/cls-decl-gen-meth-static.template
+/*---
+description: Referencing a parameter that occurs earlier in the ParameterList (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+class C {
+  static *method(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;
+  }
+}
+
+C.method(3).next();
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/statements/class/params-dflt-gen-meth-static-ref-self.js b/test/language/statements/class/params-dflt-gen-meth-static-ref-self.js
new file mode 100644
index 0000000000..0832563011
--- /dev/null
+++ b/test/language/statements/class/params-dflt-gen-meth-static-ref-self.js
@@ -0,0 +1,86 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-self.case
+// - src/dflt-params/error/cls-decl-gen-meth-static.template
+/*---
+description: Referencing a parameter from within its own initializer (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+class C {
+  static *method(x = x) {
+    
+    callCount = callCount + 1;
+  }
+}
+
+assert.throws(ReferenceError, function() {
+  C.method();
+});
+
+assert.sameValue(callCount, 0, 'method body not evaluated');
diff --git a/test/language/statements/class/params-dflt-gen-meth-static-rest.js b/test/language/statements/class/params-dflt-gen-meth-static-rest.js
new file mode 100644
index 0000000000..61fd2b4525
--- /dev/null
+++ b/test/language/statements/class/params-dflt-gen-meth-static-rest.js
@@ -0,0 +1,86 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/rest.case
+// - src/dflt-params/syntax/cls-decl-gen-meth-static.template
+/*---
+description: RestParameter does not support an initializer (static class expression generator method)
+esid: sec-runtime-semantics-bindingclassdeclarationevaluation
+es6id: 14.5.15
+features: [default-parameters]
+flags: [generated]
+negative: 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.
+    [...]
+
+    14.1 Function Definitions
+
+    Syntax
+
+    FunctionRestParameter[Yield] :
+
+      BindingRestElement[?Yield]
+
+    13.3.3 Destructuring Binding Patterns
+
+    Syntax
+
+    BindingRestElement[Yield] :
+
+      ...BindingIdentifier[?Yield]
+      ...BindingPattern[?Yield]
+
+---*/
+
+class C {
+  static *method(...x = []) {
+    
+  }
+}
diff --git a/test/language/statements/class/params-dflt-meth-abrupt.js b/test/language/statements/class/params-dflt-meth-abrupt.js
new file mode 100644
index 0000000000..a05ce4108e
--- /dev/null
+++ b/test/language/statements/class/params-dflt-meth-abrupt.js
@@ -0,0 +1,82 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/abrupt.case
+// - src/dflt-params/error/cls-decl-meth.template
+/*---
+description: Abrupt completion returned by evaluation of initializer (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+
+var callCount = 0;
+class C {
+  method(_ = (function() { throw new Test262Error(); }())) {
+    
+    callCount = callCount + 1;
+  }
+}
+
+assert.throws(Test262Error, function() {
+  C.prototype.method();
+});
+assert.sameValue(callCount, 0, 'method body not evaluated');
diff --git a/test/language/statements/class/params-dflt-meth-arg-val-not-undefined.js b/test/language/statements/class/params-dflt-meth-arg-val-not-undefined.js
new file mode 100644
index 0000000000..49ee863364
--- /dev/null
+++ b/test/language/statements/class/params-dflt-meth-arg-val-not-undefined.js
@@ -0,0 +1,104 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/arg-val-not-undefined.case
+// - src/dflt-params/default/cls-decl-meth.template
+/*---
+description: Use of intializer when argument value is not `undefined` (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    [...]
+    23. Let iteratorRecord be Record {[[Iterator]]:
+        CreateListIterator(argumentsList), [[Done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        a. Perform ? IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+---*/
+var obj = {};
+var falseCount = 0;
+var stringCount = 0;
+var nanCount = 0;
+var zeroCount = 0;
+var nullCount = 0;
+var objCount = 0;
+
+var callCount = 0;
+class C {
+  method(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);
+    assert.sameValue(a0, 0);
+    assert.sameValue(aNull, null);
+    assert.sameValue(aObj, obj);
+    callCount = callCount + 1;
+  }
+}
+
+C.prototype.method(false, '', NaN, 0, null, obj);
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
+
+assert.sameValue(falseCount, 0, 'initializer not evaluated: false');
+assert.sameValue(stringCount, 0, 'initializer not evaluated: string');
+assert.sameValue(nanCount, 0, 'initializer not evaluated: NaN');
+assert.sameValue(zeroCount, 0, 'initializer not evaluated: 0');
+assert.sameValue(nullCount, 0, 'initializer not evaluated: null');
+assert.sameValue(objCount, 0, 'initializer not evaluated: object');
diff --git a/test/language/statements/class/params-dflt-meth-arg-val-undefined.js b/test/language/statements/class/params-dflt-meth-arg-val-undefined.js
new file mode 100644
index 0000000000..f290c6f245
--- /dev/null
+++ b/test/language/statements/class/params-dflt-meth-arg-val-undefined.js
@@ -0,0 +1,87 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/arg-val-undefined.case
+// - src/dflt-params/default/cls-decl-meth.template
+/*---
+description: Use of intializer when argument value is `undefined` (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    [...]
+    23. Let iteratorRecord be Record {[[Iterator]]:
+        CreateListIterator(argumentsList), [[Done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        a. Perform ? IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+---*/
+
+var callCount = 0;
+class C {
+  method(fromLiteral = 23, fromExpr = 45, fromHole = 99) {
+    assert.sameValue(fromLiteral, 23);
+    assert.sameValue(fromExpr, 45);
+    assert.sameValue(fromHole, 99);
+    callCount = callCount + 1;
+  }
+}
+
+C.prototype.method(undefined, void 0);
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/statements/class/params-dflt-meth-duplicates.js b/test/language/statements/class/params-dflt-meth-duplicates.js
new file mode 100644
index 0000000000..80ec29e6e0
--- /dev/null
+++ b/test/language/statements/class/params-dflt-meth-duplicates.js
@@ -0,0 +1,79 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/duplicates.case
+// - src/dflt-params/syntax/cls-decl-meth.template
+/*---
+description: It is a Syntax Error if BoundNames of FormalParameters contains any duplicate elements. (class expression method)
+esid: sec-runtime-semantics-bindingclassdeclarationevaluation
+es6id: 14.5.15
+features: [default-parameters]
+flags: [generated]
+negative: 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.
+    [...]
+
+    14.1.2 Static Semantics: Early Errors
+
+    StrictFormalParameters : FormalParameters
+
+    - It is a Syntax Error if BoundNames of FormalParameters contains any
+      duplicate elements.
+
+    FormalParameters : FormalParameterList
+
+    - It is a Syntax Error if IsSimpleParameterList of FormalParameterList is
+      false and BoundNames of FormalParameterList contains any duplicate
+      elements.
+---*/
+
+class C {
+  method(x = 0, x) {
+    
+  }
+}
diff --git a/test/language/statements/class/params-dflt-meth-ref-later.js b/test/language/statements/class/params-dflt-meth-ref-later.js
new file mode 100644
index 0000000000..f097abbbdf
--- /dev/null
+++ b/test/language/statements/class/params-dflt-meth-ref-later.js
@@ -0,0 +1,83 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-later.case
+// - src/dflt-params/error/cls-decl-meth.template
+/*---
+description: Referencing a parameter that occurs later in the ParameterList (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+class C {
+  method(x = y, y) {
+    
+    callCount = callCount + 1;
+  }
+}
+
+assert.throws(ReferenceError, function() {
+  C.prototype.method();
+});
+assert.sameValue(callCount, 0, 'method body not evaluated');
diff --git a/test/language/statements/class/params-dflt-meth-ref-prior.js b/test/language/statements/class/params-dflt-meth-ref-prior.js
new file mode 100644
index 0000000000..82f9ef21f3
--- /dev/null
+++ b/test/language/statements/class/params-dflt-meth-ref-prior.js
@@ -0,0 +1,84 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-prior.case
+// - src/dflt-params/default/cls-decl-meth.template
+/*---
+description: Referencing a parameter that occurs earlier in the ParameterList (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+class C {
+  method(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;
+  }
+}
+
+C.prototype.method(3);
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/statements/class/params-dflt-meth-ref-self.js b/test/language/statements/class/params-dflt-meth-ref-self.js
new file mode 100644
index 0000000000..cf5282510e
--- /dev/null
+++ b/test/language/statements/class/params-dflt-meth-ref-self.js
@@ -0,0 +1,83 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-self.case
+// - src/dflt-params/error/cls-decl-meth.template
+/*---
+description: Referencing a parameter from within its own initializer (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+class C {
+  method(x = x) {
+    
+    callCount = callCount + 1;
+  }
+}
+
+assert.throws(ReferenceError, function() {
+  C.prototype.method();
+});
+assert.sameValue(callCount, 0, 'method body not evaluated');
diff --git a/test/language/statements/class/params-dflt-meth-rest.js b/test/language/statements/class/params-dflt-meth-rest.js
new file mode 100644
index 0000000000..4a5c2530dc
--- /dev/null
+++ b/test/language/statements/class/params-dflt-meth-rest.js
@@ -0,0 +1,84 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/rest.case
+// - src/dflt-params/syntax/cls-decl-meth.template
+/*---
+description: RestParameter does not support an initializer (class expression method)
+esid: sec-runtime-semantics-bindingclassdeclarationevaluation
+es6id: 14.5.15
+features: [default-parameters]
+flags: [generated]
+negative: 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.
+    [...]
+
+    14.1 Function Definitions
+
+    Syntax
+
+    FunctionRestParameter[Yield] :
+
+      BindingRestElement[?Yield]
+
+    13.3.3 Destructuring Binding Patterns
+
+    Syntax
+
+    BindingRestElement[Yield] :
+
+      ...BindingIdentifier[?Yield]
+      ...BindingPattern[?Yield]
+
+---*/
+
+class C {
+  method(...x = []) {
+    
+  }
+}
diff --git a/test/language/statements/class/params-dflt-meth-static-abrupt.js b/test/language/statements/class/params-dflt-meth-static-abrupt.js
new file mode 100644
index 0000000000..f9b8319dc3
--- /dev/null
+++ b/test/language/statements/class/params-dflt-meth-static-abrupt.js
@@ -0,0 +1,82 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/abrupt.case
+// - src/dflt-params/error/cls-decl-meth-static.template
+/*---
+description: Abrupt completion returned by evaluation of initializer (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+
+var callCount = 0;
+class C {
+  static method(_ = (function() { throw new Test262Error(); }())) {
+    
+    callCount = callCount + 1;
+  }
+}
+
+assert.throws(Test262Error, function() {
+  C.method();
+});
+assert.sameValue(callCount, 0, 'method body not evaluated');
diff --git a/test/language/statements/class/params-dflt-meth-static-arg-val-not-undefined.js b/test/language/statements/class/params-dflt-meth-static-arg-val-not-undefined.js
new file mode 100644
index 0000000000..fe2d8391db
--- /dev/null
+++ b/test/language/statements/class/params-dflt-meth-static-arg-val-not-undefined.js
@@ -0,0 +1,104 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/arg-val-not-undefined.case
+// - src/dflt-params/default/cls-decl-meth-static.template
+/*---
+description: Use of intializer when argument value is not `undefined` (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    [...]
+    23. Let iteratorRecord be Record {[[Iterator]]:
+        CreateListIterator(argumentsList), [[Done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        a. Perform ? IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+---*/
+var obj = {};
+var falseCount = 0;
+var stringCount = 0;
+var nanCount = 0;
+var zeroCount = 0;
+var nullCount = 0;
+var objCount = 0;
+
+var callCount = 0;
+class C {
+  static method(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);
+    assert.sameValue(a0, 0);
+    assert.sameValue(aNull, null);
+    assert.sameValue(aObj, obj);
+    callCount = callCount + 1;
+  }
+}
+
+C.method(false, '', NaN, 0, null, obj);
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
+
+assert.sameValue(falseCount, 0, 'initializer not evaluated: false');
+assert.sameValue(stringCount, 0, 'initializer not evaluated: string');
+assert.sameValue(nanCount, 0, 'initializer not evaluated: NaN');
+assert.sameValue(zeroCount, 0, 'initializer not evaluated: 0');
+assert.sameValue(nullCount, 0, 'initializer not evaluated: null');
+assert.sameValue(objCount, 0, 'initializer not evaluated: object');
diff --git a/test/language/statements/class/params-dflt-meth-static-arg-val-undefined.js b/test/language/statements/class/params-dflt-meth-static-arg-val-undefined.js
new file mode 100644
index 0000000000..df22ab4032
--- /dev/null
+++ b/test/language/statements/class/params-dflt-meth-static-arg-val-undefined.js
@@ -0,0 +1,87 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/arg-val-undefined.case
+// - src/dflt-params/default/cls-decl-meth-static.template
+/*---
+description: Use of intializer when argument value is `undefined` (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    [...]
+    23. Let iteratorRecord be Record {[[Iterator]]:
+        CreateListIterator(argumentsList), [[Done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        a. Perform ? IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+---*/
+
+var callCount = 0;
+class C {
+  static method(fromLiteral = 23, fromExpr = 45, fromHole = 99) {
+    assert.sameValue(fromLiteral, 23);
+    assert.sameValue(fromExpr, 45);
+    assert.sameValue(fromHole, 99);
+    callCount = callCount + 1;
+  }
+}
+
+C.method(undefined, void 0);
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/statements/class/params-dflt-meth-static-duplicates.js b/test/language/statements/class/params-dflt-meth-static-duplicates.js
new file mode 100644
index 0000000000..63eb7c0feb
--- /dev/null
+++ b/test/language/statements/class/params-dflt-meth-static-duplicates.js
@@ -0,0 +1,79 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/duplicates.case
+// - src/dflt-params/syntax/cls-decl-meth-static.template
+/*---
+description: It is a Syntax Error if BoundNames of FormalParameters contains any duplicate elements. (static class expression method)
+esid: sec-runtime-semantics-bindingclassdeclarationevaluation
+es6id: 14.5.15
+features: [default-parameters]
+flags: [generated]
+negative: 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.
+    [...]
+
+    14.1.2 Static Semantics: Early Errors
+
+    StrictFormalParameters : FormalParameters
+
+    - It is a Syntax Error if BoundNames of FormalParameters contains any
+      duplicate elements.
+
+    FormalParameters : FormalParameterList
+
+    - It is a Syntax Error if IsSimpleParameterList of FormalParameterList is
+      false and BoundNames of FormalParameterList contains any duplicate
+      elements.
+---*/
+
+class C {
+  static method(x = 0, x) {
+    
+  }
+}
diff --git a/test/language/statements/class/params-dflt-meth-static-ref-later.js b/test/language/statements/class/params-dflt-meth-static-ref-later.js
new file mode 100644
index 0000000000..5ba90a1fb8
--- /dev/null
+++ b/test/language/statements/class/params-dflt-meth-static-ref-later.js
@@ -0,0 +1,83 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-later.case
+// - src/dflt-params/error/cls-decl-meth-static.template
+/*---
+description: Referencing a parameter that occurs later in the ParameterList (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+class C {
+  static method(x = y, y) {
+    
+    callCount = callCount + 1;
+  }
+}
+
+assert.throws(ReferenceError, function() {
+  C.method();
+});
+assert.sameValue(callCount, 0, 'method body not evaluated');
diff --git a/test/language/statements/class/params-dflt-meth-static-ref-prior.js b/test/language/statements/class/params-dflt-meth-static-ref-prior.js
new file mode 100644
index 0000000000..633f02f3b0
--- /dev/null
+++ b/test/language/statements/class/params-dflt-meth-static-ref-prior.js
@@ -0,0 +1,84 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-prior.case
+// - src/dflt-params/default/cls-decl-meth-static.template
+/*---
+description: Referencing a parameter that occurs earlier in the ParameterList (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+class C {
+  static method(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;
+  }
+}
+
+C.method(3);
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/statements/class/params-dflt-meth-static-ref-self.js b/test/language/statements/class/params-dflt-meth-static-ref-self.js
new file mode 100644
index 0000000000..47e295d5f1
--- /dev/null
+++ b/test/language/statements/class/params-dflt-meth-static-ref-self.js
@@ -0,0 +1,83 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-self.case
+// - src/dflt-params/error/cls-decl-meth-static.template
+/*---
+description: Referencing a parameter from within its own initializer (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+class C {
+  static method(x = x) {
+    
+    callCount = callCount + 1;
+  }
+}
+
+assert.throws(ReferenceError, function() {
+  C.method();
+});
+assert.sameValue(callCount, 0, 'method body not evaluated');
diff --git a/test/language/statements/class/params-dflt-meth-static-rest.js b/test/language/statements/class/params-dflt-meth-static-rest.js
new file mode 100644
index 0000000000..5d47e12dbc
--- /dev/null
+++ b/test/language/statements/class/params-dflt-meth-static-rest.js
@@ -0,0 +1,84 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/rest.case
+// - src/dflt-params/syntax/cls-decl-meth-static.template
+/*---
+description: RestParameter does not support an initializer (static class expression method)
+esid: sec-runtime-semantics-bindingclassdeclarationevaluation
+es6id: 14.5.15
+features: [default-parameters]
+flags: [generated]
+negative: 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.
+    [...]
+
+    14.1 Function Definitions
+
+    Syntax
+
+    FunctionRestParameter[Yield] :
+
+      BindingRestElement[?Yield]
+
+    13.3.3 Destructuring Binding Patterns
+
+    Syntax
+
+    BindingRestElement[Yield] :
+
+      ...BindingIdentifier[?Yield]
+      ...BindingPattern[?Yield]
+
+---*/
+
+class C {
+  static method(...x = []) {
+    
+  }
+}
diff --git a/test/language/statements/function/params-dflt-abrupt.js b/test/language/statements/function/params-dflt-abrupt.js
new file mode 100644
index 0000000000..7de9d77e55
--- /dev/null
+++ b/test/language/statements/function/params-dflt-abrupt.js
@@ -0,0 +1,61 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/abrupt.case
+// - src/dflt-params/error/func-decl.template
+/*---
+description: Abrupt completion returned by evaluation of initializer (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+
+var callCount = 0;
+function f(_ = (function() { throw new Test262Error(); }())) {
+  
+  callCount = callCount + 1;
+}
+assert.throws(Test262Error, function() {
+  f();
+});
+assert.sameValue(callCount, 0, 'function body not evaluated');
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
new file mode 100644
index 0000000000..cd8937f37c
--- /dev/null
+++ b/test/language/statements/function/params-dflt-arg-val-not-undefined.js
@@ -0,0 +1,84 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/arg-val-not-undefined.case
+// - src/dflt-params/default/func-decl.template
+/*---
+description: Use of intializer when argument value is not `undefined` (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    [...]
+    23. Let iteratorRecord be Record {[[Iterator]]:
+        CreateListIterator(argumentsList), [[Done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        a. Perform ? IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+---*/
+var obj = {};
+var falseCount = 0;
+var stringCount = 0;
+var nanCount = 0;
+var zeroCount = 0;
+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) {
+  assert.sameValue(aFalse, false);
+  assert.sameValue(aString, '');
+  assert.sameValue(aNaN, NaN);
+  assert.sameValue(a0, 0);
+  assert.sameValue(aNull, null);
+  assert.sameValue(aObj, obj);
+  callCount = callCount + 1;
+}
+
+f(false, '', NaN, 0, null, obj);
+
+assert.sameValue(callCount, 1, 'function invoked exactly once');
+
+assert.sameValue(falseCount, 0, 'initializer not evaluated: false');
+assert.sameValue(stringCount, 0, 'initializer not evaluated: string');
+assert.sameValue(nanCount, 0, 'initializer not evaluated: NaN');
+assert.sameValue(zeroCount, 0, 'initializer not evaluated: 0');
+assert.sameValue(nullCount, 0, 'initializer not evaluated: null');
+assert.sameValue(objCount, 0, 'initializer not evaluated: object');
diff --git a/test/language/statements/function/params-dflt-arg-val-undefined.js b/test/language/statements/function/params-dflt-arg-val-undefined.js
new file mode 100644
index 0000000000..5aebf35be0
--- /dev/null
+++ b/test/language/statements/function/params-dflt-arg-val-undefined.js
@@ -0,0 +1,67 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/arg-val-undefined.case
+// - src/dflt-params/default/func-decl.template
+/*---
+description: Use of intializer when argument value is `undefined` (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    [...]
+    23. Let iteratorRecord be Record {[[Iterator]]:
+        CreateListIterator(argumentsList), [[Done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        a. Perform ? IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+---*/
+
+var callCount = 0;
+function f(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);
+
+assert.sameValue(callCount, 1, 'function invoked exactly once');
diff --git a/test/language/statements/function/params-dflt-duplicates.js b/test/language/statements/function/params-dflt-duplicates.js
new file mode 100644
index 0000000000..8596f0c19a
--- /dev/null
+++ b/test/language/statements/function/params-dflt-duplicates.js
@@ -0,0 +1,59 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/duplicates.case
+// - src/dflt-params/syntax/func-decl.template
+/*---
+description: It is a Syntax Error if BoundNames of FormalParameters contains any duplicate elements. (function declaration)
+esid: sec-function-definitions-runtime-semantics-instantiatefunctionobject
+es6id: 14.1.19
+features: [default-parameters]
+flags: [generated]
+negative: 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.
+    [...]
+
+    14.1.2 Static Semantics: Early Errors
+
+    StrictFormalParameters : FormalParameters
+
+    - It is a Syntax Error if BoundNames of FormalParameters contains any
+      duplicate elements.
+
+    FormalParameters : FormalParameterList
+
+    - It is a Syntax Error if IsSimpleParameterList of FormalParameterList is
+      false and BoundNames of FormalParameterList contains any duplicate
+      elements.
+---*/
+
+function f(x = 0, x) {
+  
+}
diff --git a/test/language/statements/function/params-dflt-ref-later.js b/test/language/statements/function/params-dflt-ref-later.js
new file mode 100644
index 0000000000..9bcd3e9388
--- /dev/null
+++ b/test/language/statements/function/params-dflt-ref-later.js
@@ -0,0 +1,62 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-later.case
+// - src/dflt-params/error/func-decl.template
+/*---
+description: Referencing a parameter that occurs later in the ParameterList (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+function f(x = y, y) {
+  
+  callCount = callCount + 1;
+}
+assert.throws(ReferenceError, function() {
+  f();
+});
+assert.sameValue(callCount, 0, 'function body not evaluated');
diff --git a/test/language/statements/function/params-dflt-ref-prior.js b/test/language/statements/function/params-dflt-ref-prior.js
new file mode 100644
index 0000000000..972551976d
--- /dev/null
+++ b/test/language/statements/function/params-dflt-ref-prior.js
@@ -0,0 +1,64 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-prior.case
+// - src/dflt-params/default/func-decl.template
+/*---
+description: Referencing a parameter that occurs earlier in the ParameterList (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+function f(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);
+
+assert.sameValue(callCount, 1, 'function invoked exactly once');
diff --git a/test/language/statements/function/params-dflt-ref-self.js b/test/language/statements/function/params-dflt-ref-self.js
new file mode 100644
index 0000000000..de76d71584
--- /dev/null
+++ b/test/language/statements/function/params-dflt-ref-self.js
@@ -0,0 +1,62 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-self.case
+// - src/dflt-params/error/func-decl.template
+/*---
+description: Referencing a parameter from within its own initializer (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+function f(x = x) {
+  
+  callCount = callCount + 1;
+}
+assert.throws(ReferenceError, function() {
+  f();
+});
+assert.sameValue(callCount, 0, 'function body not evaluated');
diff --git a/test/language/statements/function/params-dflt-rest.js b/test/language/statements/function/params-dflt-rest.js
new file mode 100644
index 0000000000..532ac9669f
--- /dev/null
+++ b/test/language/statements/function/params-dflt-rest.js
@@ -0,0 +1,64 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/rest.case
+// - src/dflt-params/syntax/func-decl.template
+/*---
+description: RestParameter does not support an initializer (function declaration)
+esid: sec-function-definitions-runtime-semantics-instantiatefunctionobject
+es6id: 14.1.19
+features: [default-parameters]
+flags: [generated]
+negative: 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.
+    [...]
+
+    14.1 Function Definitions
+
+    Syntax
+
+    FunctionRestParameter[Yield] :
+
+      BindingRestElement[?Yield]
+
+    13.3.3 Destructuring Binding Patterns
+
+    Syntax
+
+    BindingRestElement[Yield] :
+
+      ...BindingIdentifier[?Yield]
+      ...BindingPattern[?Yield]
+
+---*/
+
+function f(...x = []) {
+  
+}
diff --git a/test/language/statements/generators/params-dflt-abrupt.js b/test/language/statements/generators/params-dflt-abrupt.js
new file mode 100644
index 0000000000..88aacc649c
--- /dev/null
+++ b/test/language/statements/generators/params-dflt-abrupt.js
@@ -0,0 +1,62 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/abrupt.case
+// - src/dflt-params/error/gen-func-decl.template
+/*---
+description: Abrupt completion returned by evaluation of initializer (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+
+var callCount = 0;
+function* f(_ = (function() { throw new Test262Error(); }())) {
+  
+  callCount = callCount + 1;
+}
+
+assert.throws(Test262Error, function() {
+  f();
+});
+
+assert.sameValue(callCount, 0, 'generator function body not evaluated');
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
new file mode 100644
index 0000000000..a4b38ac36a
--- /dev/null
+++ b/test/language/statements/generators/params-dflt-arg-val-not-undefined.js
@@ -0,0 +1,83 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/arg-val-not-undefined.case
+// - src/dflt-params/default/gen-func-decl.template
+/*---
+description: Use of intializer when argument value is not `undefined` (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    [...]
+    23. Let iteratorRecord be Record {[[Iterator]]:
+        CreateListIterator(argumentsList), [[Done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        a. Perform ? IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+---*/
+var obj = {};
+var falseCount = 0;
+var stringCount = 0;
+var nanCount = 0;
+var zeroCount = 0;
+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) {
+  assert.sameValue(aFalse, false);
+  assert.sameValue(aString, '');
+  assert.sameValue(aNaN, NaN);
+  assert.sameValue(a0, 0);
+  assert.sameValue(aNull, null);
+  assert.sameValue(aObj, obj);
+  callCount = callCount + 1;
+}
+
+f(false, '', NaN, 0, null, obj).next();
+
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
+
+assert.sameValue(falseCount, 0, 'initializer not evaluated: false');
+assert.sameValue(stringCount, 0, 'initializer not evaluated: string');
+assert.sameValue(nanCount, 0, 'initializer not evaluated: NaN');
+assert.sameValue(zeroCount, 0, 'initializer not evaluated: 0');
+assert.sameValue(nullCount, 0, 'initializer not evaluated: null');
+assert.sameValue(objCount, 0, 'initializer not evaluated: object');
diff --git a/test/language/statements/generators/params-dflt-arg-val-undefined.js b/test/language/statements/generators/params-dflt-arg-val-undefined.js
new file mode 100644
index 0000000000..e675be80df
--- /dev/null
+++ b/test/language/statements/generators/params-dflt-arg-val-undefined.js
@@ -0,0 +1,66 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/arg-val-undefined.case
+// - src/dflt-params/default/gen-func-decl.template
+/*---
+description: Use of intializer when argument value is `undefined` (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    [...]
+    23. Let iteratorRecord be Record {[[Iterator]]:
+        CreateListIterator(argumentsList), [[Done]]: false}.
+    24. If hasDuplicates is true, then
+        [...]
+    25. Else,
+        a. Perform ? IteratorBindingInitialization for formals with
+           iteratorRecord and env as arguments.
+    [...]
+---*/
+
+var callCount = 0;
+function* f(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();
+
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
diff --git a/test/language/statements/generators/params-dflt-duplicates.js b/test/language/statements/generators/params-dflt-duplicates.js
new file mode 100644
index 0000000000..eb4c445943
--- /dev/null
+++ b/test/language/statements/generators/params-dflt-duplicates.js
@@ -0,0 +1,58 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/duplicates.case
+// - src/dflt-params/syntax/gen-func-decl.template
+/*---
+description: It is a Syntax Error if BoundNames of FormalParameters contains any duplicate elements. (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+es6id: 14.4.12
+features: [default-parameters]
+flags: [generated]
+negative: 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.
+    [...]
+
+    14.1.2 Static Semantics: Early Errors
+
+    StrictFormalParameters : FormalParameters
+
+    - It is a Syntax Error if BoundNames of FormalParameters contains any
+      duplicate elements.
+
+    FormalParameters : FormalParameterList
+
+    - It is a Syntax Error if IsSimpleParameterList of FormalParameterList is
+      false and BoundNames of FormalParameterList contains any duplicate
+      elements.
+---*/
+
+function* f(x = 0, x) {
+  
+}
diff --git a/test/language/statements/generators/params-dflt-ref-later.js b/test/language/statements/generators/params-dflt-ref-later.js
new file mode 100644
index 0000000000..6b988e5d18
--- /dev/null
+++ b/test/language/statements/generators/params-dflt-ref-later.js
@@ -0,0 +1,63 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-later.case
+// - src/dflt-params/error/gen-func-decl.template
+/*---
+description: Referencing a parameter that occurs later in the ParameterList (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+function* f(x = y, y) {
+  
+  callCount = callCount + 1;
+}
+
+assert.throws(ReferenceError, function() {
+  f();
+});
+
+assert.sameValue(callCount, 0, 'generator function body not evaluated');
diff --git a/test/language/statements/generators/params-dflt-ref-prior.js b/test/language/statements/generators/params-dflt-ref-prior.js
new file mode 100644
index 0000000000..42a4e20cb6
--- /dev/null
+++ b/test/language/statements/generators/params-dflt-ref-prior.js
@@ -0,0 +1,63 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-prior.case
+// - src/dflt-params/default/gen-func-decl.template
+/*---
+description: Referencing a parameter that occurs earlier in the ParameterList (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+function* f(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();
+
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
diff --git a/test/language/statements/generators/params-dflt-ref-self.js b/test/language/statements/generators/params-dflt-ref-self.js
new file mode 100644
index 0000000000..71c29e010e
--- /dev/null
+++ b/test/language/statements/generators/params-dflt-ref-self.js
@@ -0,0 +1,63 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/ref-self.case
+// - src/dflt-params/error/gen-func-decl.template
+/*---
+description: Referencing a parameter from within its own initializer (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.
+    [...]
+
+    14.1.19 Runtime Semantics: IteratorBindingInitialization
+
+    FormalsList : FormalsList , FormalParameter
+
+    1. Let status be the result of performing IteratorBindingInitialization for
+       FormalsList using iteratorRecord and environment as the arguments.
+    2. ReturnIfAbrupt(status).
+    3. Return the result of performing IteratorBindingInitialization for
+       FormalParameter using iteratorRecord and environment as the arguments.
+---*/
+var x = 0;
+
+var callCount = 0;
+function* f(x = x) {
+  
+  callCount = callCount + 1;
+}
+
+assert.throws(ReferenceError, function() {
+  f();
+});
+
+assert.sameValue(callCount, 0, 'generator function body not evaluated');
diff --git a/test/language/statements/generators/params-dflt-rest.js b/test/language/statements/generators/params-dflt-rest.js
new file mode 100644
index 0000000000..c198c3f325
--- /dev/null
+++ b/test/language/statements/generators/params-dflt-rest.js
@@ -0,0 +1,63 @@
+// This file was procedurally generated from the following sources:
+// - src/dflt-params/rest.case
+// - src/dflt-params/syntax/gen-func-decl.template
+/*---
+description: RestParameter does not support an initializer (generator function declaration)
+esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject
+es6id: 14.4.12
+features: [default-parameters]
+flags: [generated]
+negative: 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.
+    [...]
+
+    14.1 Function Definitions
+
+    Syntax
+
+    FunctionRestParameter[Yield] :
+
+      BindingRestElement[?Yield]
+
+    13.3.3 Destructuring Binding Patterns
+
+    Syntax
+
+    BindingRestElement[Yield] :
+
+      ...BindingIdentifier[?Yield]
+      ...BindingPattern[?Yield]
+
+---*/
+
+function* f(...x = []) {
+  
+}