From da22db06d16f05763a0ef04d66b5ea903876f7f4 Mon Sep 17 00:00:00 2001
From: Leonardo Balter <leonardo.balter@gmail.com>
Date: Tue, 14 Mar 2017 16:30:12 -0400
Subject: [PATCH] Generate tests

---
 ...eth-static-trailing-comma-multiple-args.js | 38 +++++++++++++++++++
 ...ecl-gen-meth-static-trailing-comma-null.js | 38 +++++++++++++++++++
 ...-meth-static-trailing-comma-single-args.js | 37 ++++++++++++++++++
 ...en-meth-static-trailing-comma-undefined.js | 38 +++++++++++++++++++
 ...l-gen-meth-trailing-comma-multiple-args.js | 38 +++++++++++++++++++
 .../cls-decl-gen-meth-trailing-comma-null.js  | 38 +++++++++++++++++++
 ...ecl-gen-meth-trailing-comma-single-args.js | 37 ++++++++++++++++++
 ...-decl-gen-meth-trailing-comma-undefined.js | 38 +++++++++++++++++++
 ...eth-static-trailing-comma-multiple-args.js | 38 +++++++++++++++++++
 ...ls-decl-meth-static-trailing-comma-null.js | 38 +++++++++++++++++++
 ...-meth-static-trailing-comma-single-args.js | 37 ++++++++++++++++++
 ...cl-meth-static-trailing-comma-undefined.js | 38 +++++++++++++++++++
 ...-decl-meth-trailing-comma-multiple-args.js | 38 +++++++++++++++++++
 .../cls-decl-meth-trailing-comma-null.js      | 38 +++++++++++++++++++
 ...ls-decl-meth-trailing-comma-single-args.js | 37 ++++++++++++++++++
 .../cls-decl-meth-trailing-comma-undefined.js | 38 +++++++++++++++++++
 ...eth-static-trailing-comma-multiple-args.js | 38 +++++++++++++++++++
 ...xpr-gen-meth-static-trailing-comma-null.js | 38 +++++++++++++++++++
 ...-meth-static-trailing-comma-single-args.js | 37 ++++++++++++++++++
 ...en-meth-static-trailing-comma-undefined.js | 38 +++++++++++++++++++
 ...r-gen-meth-trailing-comma-multiple-args.js | 38 +++++++++++++++++++
 .../cls-expr-gen-meth-trailing-comma-null.js  | 38 +++++++++++++++++++
 ...xpr-gen-meth-trailing-comma-single-args.js | 37 ++++++++++++++++++
 ...-expr-gen-meth-trailing-comma-undefined.js | 38 +++++++++++++++++++
 ...eth-static-trailing-comma-multiple-args.js | 38 +++++++++++++++++++
 ...ls-expr-meth-static-trailing-comma-null.js | 38 +++++++++++++++++++
 ...-meth-static-trailing-comma-single-args.js | 37 ++++++++++++++++++
 ...pr-meth-static-trailing-comma-undefined.js | 38 +++++++++++++++++++
 ...-expr-meth-trailing-comma-multiple-args.js | 38 +++++++++++++++++++
 .../cls-expr-meth-trailing-comma-null.js      | 38 +++++++++++++++++++
 ...ls-expr-meth-trailing-comma-single-args.js | 37 ++++++++++++++++++
 .../cls-expr-meth-trailing-comma-undefined.js | 38 +++++++++++++++++++
 .../func-decl-trailing-comma-multiple-args.js | 34 +++++++++++++++++
 .../func-decl-trailing-comma-null.js          | 34 +++++++++++++++++
 .../func-decl-trailing-comma-single-args.js   | 33 ++++++++++++++++
 .../func-decl-trailing-comma-undefined.js     | 34 +++++++++++++++++
 .../func-expr-trailing-comma-multiple-args.js | 35 +++++++++++++++++
 .../func-expr-trailing-comma-null.js          | 35 +++++++++++++++++
 .../func-expr-trailing-comma-single-args.js   | 34 +++++++++++++++++
 .../func-expr-trailing-comma-undefined.js     | 35 +++++++++++++++++
 ...-func-decl-trailing-comma-multiple-args.js | 34 +++++++++++++++++
 .../gen-func-decl-trailing-comma-null.js      | 34 +++++++++++++++++
 ...en-func-decl-trailing-comma-single-args.js | 33 ++++++++++++++++
 .../gen-func-decl-trailing-comma-undefined.js | 34 +++++++++++++++++
 ...-func-expr-trailing-comma-multiple-args.js | 35 +++++++++++++++++
 .../gen-func-expr-trailing-comma-null.js      | 35 +++++++++++++++++
 ...en-func-expr-trailing-comma-single-args.js | 34 +++++++++++++++++
 .../gen-func-expr-trailing-comma-undefined.js | 35 +++++++++++++++++
 .../gen-meth-trailing-comma-multiple-args.js  | 38 +++++++++++++++++++
 .../gen-meth-trailing-comma-null.js           | 38 +++++++++++++++++++
 .../gen-meth-trailing-comma-single-args.js    | 37 ++++++++++++++++++
 .../gen-meth-trailing-comma-undefined.js      | 38 +++++++++++++++++++
 .../meth-trailing-comma-multiple-args.js      | 38 +++++++++++++++++++
 .../meth-trailing-comma-null.js               | 38 +++++++++++++++++++
 .../meth-trailing-comma-single-args.js        | 37 ++++++++++++++++++
 .../meth-trailing-comma-undefined.js          | 38 +++++++++++++++++++
 56 files changed, 2058 insertions(+)
 create mode 100644 test/language/arguments-object/cls-decl-gen-meth-static-trailing-comma-multiple-args.js
 create mode 100644 test/language/arguments-object/cls-decl-gen-meth-static-trailing-comma-null.js
 create mode 100644 test/language/arguments-object/cls-decl-gen-meth-static-trailing-comma-single-args.js
 create mode 100644 test/language/arguments-object/cls-decl-gen-meth-static-trailing-comma-undefined.js
 create mode 100644 test/language/arguments-object/cls-decl-gen-meth-trailing-comma-multiple-args.js
 create mode 100644 test/language/arguments-object/cls-decl-gen-meth-trailing-comma-null.js
 create mode 100644 test/language/arguments-object/cls-decl-gen-meth-trailing-comma-single-args.js
 create mode 100644 test/language/arguments-object/cls-decl-gen-meth-trailing-comma-undefined.js
 create mode 100644 test/language/arguments-object/cls-decl-meth-static-trailing-comma-multiple-args.js
 create mode 100644 test/language/arguments-object/cls-decl-meth-static-trailing-comma-null.js
 create mode 100644 test/language/arguments-object/cls-decl-meth-static-trailing-comma-single-args.js
 create mode 100644 test/language/arguments-object/cls-decl-meth-static-trailing-comma-undefined.js
 create mode 100644 test/language/arguments-object/cls-decl-meth-trailing-comma-multiple-args.js
 create mode 100644 test/language/arguments-object/cls-decl-meth-trailing-comma-null.js
 create mode 100644 test/language/arguments-object/cls-decl-meth-trailing-comma-single-args.js
 create mode 100644 test/language/arguments-object/cls-decl-meth-trailing-comma-undefined.js
 create mode 100644 test/language/arguments-object/cls-expr-gen-meth-static-trailing-comma-multiple-args.js
 create mode 100644 test/language/arguments-object/cls-expr-gen-meth-static-trailing-comma-null.js
 create mode 100644 test/language/arguments-object/cls-expr-gen-meth-static-trailing-comma-single-args.js
 create mode 100644 test/language/arguments-object/cls-expr-gen-meth-static-trailing-comma-undefined.js
 create mode 100644 test/language/arguments-object/cls-expr-gen-meth-trailing-comma-multiple-args.js
 create mode 100644 test/language/arguments-object/cls-expr-gen-meth-trailing-comma-null.js
 create mode 100644 test/language/arguments-object/cls-expr-gen-meth-trailing-comma-single-args.js
 create mode 100644 test/language/arguments-object/cls-expr-gen-meth-trailing-comma-undefined.js
 create mode 100644 test/language/arguments-object/cls-expr-meth-static-trailing-comma-multiple-args.js
 create mode 100644 test/language/arguments-object/cls-expr-meth-static-trailing-comma-null.js
 create mode 100644 test/language/arguments-object/cls-expr-meth-static-trailing-comma-single-args.js
 create mode 100644 test/language/arguments-object/cls-expr-meth-static-trailing-comma-undefined.js
 create mode 100644 test/language/arguments-object/cls-expr-meth-trailing-comma-multiple-args.js
 create mode 100644 test/language/arguments-object/cls-expr-meth-trailing-comma-null.js
 create mode 100644 test/language/arguments-object/cls-expr-meth-trailing-comma-single-args.js
 create mode 100644 test/language/arguments-object/cls-expr-meth-trailing-comma-undefined.js
 create mode 100644 test/language/arguments-object/func-decl-trailing-comma-multiple-args.js
 create mode 100644 test/language/arguments-object/func-decl-trailing-comma-null.js
 create mode 100644 test/language/arguments-object/func-decl-trailing-comma-single-args.js
 create mode 100644 test/language/arguments-object/func-decl-trailing-comma-undefined.js
 create mode 100644 test/language/arguments-object/func-expr-trailing-comma-multiple-args.js
 create mode 100644 test/language/arguments-object/func-expr-trailing-comma-null.js
 create mode 100644 test/language/arguments-object/func-expr-trailing-comma-single-args.js
 create mode 100644 test/language/arguments-object/func-expr-trailing-comma-undefined.js
 create mode 100644 test/language/arguments-object/gen-func-decl-trailing-comma-multiple-args.js
 create mode 100644 test/language/arguments-object/gen-func-decl-trailing-comma-null.js
 create mode 100644 test/language/arguments-object/gen-func-decl-trailing-comma-single-args.js
 create mode 100644 test/language/arguments-object/gen-func-decl-trailing-comma-undefined.js
 create mode 100644 test/language/arguments-object/gen-func-expr-trailing-comma-multiple-args.js
 create mode 100644 test/language/arguments-object/gen-func-expr-trailing-comma-null.js
 create mode 100644 test/language/arguments-object/gen-func-expr-trailing-comma-single-args.js
 create mode 100644 test/language/arguments-object/gen-func-expr-trailing-comma-undefined.js
 create mode 100644 test/language/arguments-object/gen-meth-trailing-comma-multiple-args.js
 create mode 100644 test/language/arguments-object/gen-meth-trailing-comma-null.js
 create mode 100644 test/language/arguments-object/gen-meth-trailing-comma-single-args.js
 create mode 100644 test/language/arguments-object/gen-meth-trailing-comma-undefined.js
 create mode 100644 test/language/arguments-object/meth-trailing-comma-multiple-args.js
 create mode 100644 test/language/arguments-object/meth-trailing-comma-null.js
 create mode 100644 test/language/arguments-object/meth-trailing-comma-single-args.js
 create mode 100644 test/language/arguments-object/meth-trailing-comma-undefined.js

diff --git a/test/language/arguments-object/cls-decl-gen-meth-static-trailing-comma-multiple-args.js b/test/language/arguments-object/cls-decl-gen-meth-static-trailing-comma-multiple-args.js
new file mode 100644
index 0000000000..af22068be0
--- /dev/null
+++ b/test/language/arguments-object/cls-decl-gen-meth-static-trailing-comma-multiple-args.js
@@ -0,0 +1,38 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-multiple-args.case
+// - src/arguments/default/cls-decl-gen-meth-static.template
+/*---
+description: A trailing comma should not increase the arguments.length, using multiple args (class declaration generator method)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+class C {
+  static *method() {
+    assert.sameValue(arguments.length, 2);
+    assert.sameValue(arguments[0], 42);
+    assert.sameValue(arguments[1], 'TC39');
+    callCount = callCount + 1;
+  }
+}
+
+C.method(42, 'TC39',).next();
+
+// Stores a reference `ref` for case evaluation
+var ref = C.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/arguments-object/cls-decl-gen-meth-static-trailing-comma-null.js b/test/language/arguments-object/cls-decl-gen-meth-static-trailing-comma-null.js
new file mode 100644
index 0000000000..04b050d3fd
--- /dev/null
+++ b/test/language/arguments-object/cls-decl-gen-meth-static-trailing-comma-null.js
@@ -0,0 +1,38 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-null.case
+// - src/arguments/default/cls-decl-gen-meth-static.template
+/*---
+description: A trailing comma after null should not increase the arguments.length (class declaration generator method)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+class C {
+  static *method() {
+    assert.sameValue(arguments.length, 2);
+    assert.sameValue(arguments[0], 42);
+    assert.sameValue(arguments[1], null);
+    callCount = callCount + 1;
+  }
+}
+
+C.method(42, null,).next();
+
+// Stores a reference `ref` for case evaluation
+var ref = C.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/arguments-object/cls-decl-gen-meth-static-trailing-comma-single-args.js b/test/language/arguments-object/cls-decl-gen-meth-static-trailing-comma-single-args.js
new file mode 100644
index 0000000000..f277d51337
--- /dev/null
+++ b/test/language/arguments-object/cls-decl-gen-meth-static-trailing-comma-single-args.js
@@ -0,0 +1,37 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-single-args.case
+// - src/arguments/default/cls-decl-gen-meth-static.template
+/*---
+description: A trailing comma should not increase the arguments.length, using a single arg (class declaration generator method)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+class C {
+  static *method() {
+    assert.sameValue(arguments.length, 1);
+    assert.sameValue(arguments[0], 42);
+    callCount = callCount + 1;
+  }
+}
+
+C.method(42,).next();
+
+// Stores a reference `ref` for case evaluation
+var ref = C.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/arguments-object/cls-decl-gen-meth-static-trailing-comma-undefined.js b/test/language/arguments-object/cls-decl-gen-meth-static-trailing-comma-undefined.js
new file mode 100644
index 0000000000..b2782f1cd6
--- /dev/null
+++ b/test/language/arguments-object/cls-decl-gen-meth-static-trailing-comma-undefined.js
@@ -0,0 +1,38 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-undefined.case
+// - src/arguments/default/cls-decl-gen-meth-static.template
+/*---
+description: A trailing comma after undefined should not increase the arguments.length (class declaration generator method)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+class C {
+  static *method() {
+    assert.sameValue(arguments.length, 2);
+    assert.sameValue(arguments[0], 42);
+    assert.sameValue(arguments[1], undefined);
+    callCount = callCount + 1;
+  }
+}
+
+C.method(42, undefined,).next();
+
+// Stores a reference `ref` for case evaluation
+var ref = C.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/arguments-object/cls-decl-gen-meth-trailing-comma-multiple-args.js b/test/language/arguments-object/cls-decl-gen-meth-trailing-comma-multiple-args.js
new file mode 100644
index 0000000000..19404642d0
--- /dev/null
+++ b/test/language/arguments-object/cls-decl-gen-meth-trailing-comma-multiple-args.js
@@ -0,0 +1,38 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-multiple-args.case
+// - src/arguments/default/cls-decl-gen-meth.template
+/*---
+description: A trailing comma should not increase the arguments.length, using multiple args (class declaration generator method)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+class C {
+  *method() {
+    assert.sameValue(arguments.length, 2);
+    assert.sameValue(arguments[0], 42);
+    assert.sameValue(arguments[1], 'TC39');
+    callCount = callCount + 1;
+  }
+}
+
+C.prototype.method(42, 'TC39',).next();
+
+// Stores a reference `ref` for case evaluation
+var ref = C.prototype.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/arguments-object/cls-decl-gen-meth-trailing-comma-null.js b/test/language/arguments-object/cls-decl-gen-meth-trailing-comma-null.js
new file mode 100644
index 0000000000..8a960cdcb0
--- /dev/null
+++ b/test/language/arguments-object/cls-decl-gen-meth-trailing-comma-null.js
@@ -0,0 +1,38 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-null.case
+// - src/arguments/default/cls-decl-gen-meth.template
+/*---
+description: A trailing comma after null should not increase the arguments.length (class declaration generator method)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+class C {
+  *method() {
+    assert.sameValue(arguments.length, 2);
+    assert.sameValue(arguments[0], 42);
+    assert.sameValue(arguments[1], null);
+    callCount = callCount + 1;
+  }
+}
+
+C.prototype.method(42, null,).next();
+
+// Stores a reference `ref` for case evaluation
+var ref = C.prototype.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/arguments-object/cls-decl-gen-meth-trailing-comma-single-args.js b/test/language/arguments-object/cls-decl-gen-meth-trailing-comma-single-args.js
new file mode 100644
index 0000000000..d507f4e5ec
--- /dev/null
+++ b/test/language/arguments-object/cls-decl-gen-meth-trailing-comma-single-args.js
@@ -0,0 +1,37 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-single-args.case
+// - src/arguments/default/cls-decl-gen-meth.template
+/*---
+description: A trailing comma should not increase the arguments.length, using a single arg (class declaration generator method)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+class C {
+  *method() {
+    assert.sameValue(arguments.length, 1);
+    assert.sameValue(arguments[0], 42);
+    callCount = callCount + 1;
+  }
+}
+
+C.prototype.method(42,).next();
+
+// Stores a reference `ref` for case evaluation
+var ref = C.prototype.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/arguments-object/cls-decl-gen-meth-trailing-comma-undefined.js b/test/language/arguments-object/cls-decl-gen-meth-trailing-comma-undefined.js
new file mode 100644
index 0000000000..453f515a4b
--- /dev/null
+++ b/test/language/arguments-object/cls-decl-gen-meth-trailing-comma-undefined.js
@@ -0,0 +1,38 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-undefined.case
+// - src/arguments/default/cls-decl-gen-meth.template
+/*---
+description: A trailing comma after undefined should not increase the arguments.length (class declaration generator method)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+class C {
+  *method() {
+    assert.sameValue(arguments.length, 2);
+    assert.sameValue(arguments[0], 42);
+    assert.sameValue(arguments[1], undefined);
+    callCount = callCount + 1;
+  }
+}
+
+C.prototype.method(42, undefined,).next();
+
+// Stores a reference `ref` for case evaluation
+var ref = C.prototype.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/arguments-object/cls-decl-meth-static-trailing-comma-multiple-args.js b/test/language/arguments-object/cls-decl-meth-static-trailing-comma-multiple-args.js
new file mode 100644
index 0000000000..7d0c69d154
--- /dev/null
+++ b/test/language/arguments-object/cls-decl-meth-static-trailing-comma-multiple-args.js
@@ -0,0 +1,38 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-multiple-args.case
+// - src/arguments/default/cls-decl-meth-static.template
+/*---
+description: A trailing comma should not increase the arguments.length, using multiple args (static class declaration method)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+class C {
+  static method() {
+    assert.sameValue(arguments.length, 2);
+    assert.sameValue(arguments[0], 42);
+    assert.sameValue(arguments[1], 'TC39');
+    callCount = callCount + 1;
+  }
+}
+
+C.method(42, 'TC39',);
+
+// Stores a reference `ref` for case evaluation
+var ref = C.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/arguments-object/cls-decl-meth-static-trailing-comma-null.js b/test/language/arguments-object/cls-decl-meth-static-trailing-comma-null.js
new file mode 100644
index 0000000000..6ac2ace1c0
--- /dev/null
+++ b/test/language/arguments-object/cls-decl-meth-static-trailing-comma-null.js
@@ -0,0 +1,38 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-null.case
+// - src/arguments/default/cls-decl-meth-static.template
+/*---
+description: A trailing comma after null should not increase the arguments.length (static class declaration method)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+class C {
+  static method() {
+    assert.sameValue(arguments.length, 2);
+    assert.sameValue(arguments[0], 42);
+    assert.sameValue(arguments[1], null);
+    callCount = callCount + 1;
+  }
+}
+
+C.method(42, null,);
+
+// Stores a reference `ref` for case evaluation
+var ref = C.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/arguments-object/cls-decl-meth-static-trailing-comma-single-args.js b/test/language/arguments-object/cls-decl-meth-static-trailing-comma-single-args.js
new file mode 100644
index 0000000000..7389cc51e9
--- /dev/null
+++ b/test/language/arguments-object/cls-decl-meth-static-trailing-comma-single-args.js
@@ -0,0 +1,37 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-single-args.case
+// - src/arguments/default/cls-decl-meth-static.template
+/*---
+description: A trailing comma should not increase the arguments.length, using a single arg (static class declaration method)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+class C {
+  static method() {
+    assert.sameValue(arguments.length, 1);
+    assert.sameValue(arguments[0], 42);
+    callCount = callCount + 1;
+  }
+}
+
+C.method(42,);
+
+// Stores a reference `ref` for case evaluation
+var ref = C.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/arguments-object/cls-decl-meth-static-trailing-comma-undefined.js b/test/language/arguments-object/cls-decl-meth-static-trailing-comma-undefined.js
new file mode 100644
index 0000000000..3ee1f645ba
--- /dev/null
+++ b/test/language/arguments-object/cls-decl-meth-static-trailing-comma-undefined.js
@@ -0,0 +1,38 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-undefined.case
+// - src/arguments/default/cls-decl-meth-static.template
+/*---
+description: A trailing comma after undefined should not increase the arguments.length (static class declaration method)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+class C {
+  static method() {
+    assert.sameValue(arguments.length, 2);
+    assert.sameValue(arguments[0], 42);
+    assert.sameValue(arguments[1], undefined);
+    callCount = callCount + 1;
+  }
+}
+
+C.method(42, undefined,);
+
+// Stores a reference `ref` for case evaluation
+var ref = C.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/arguments-object/cls-decl-meth-trailing-comma-multiple-args.js b/test/language/arguments-object/cls-decl-meth-trailing-comma-multiple-args.js
new file mode 100644
index 0000000000..b5910ff593
--- /dev/null
+++ b/test/language/arguments-object/cls-decl-meth-trailing-comma-multiple-args.js
@@ -0,0 +1,38 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-multiple-args.case
+// - src/arguments/default/cls-decl-meth.template
+/*---
+description: A trailing comma should not increase the arguments.length, using multiple args (class declaration method)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+class C {
+  method() {
+    assert.sameValue(arguments.length, 2);
+    assert.sameValue(arguments[0], 42);
+    assert.sameValue(arguments[1], 'TC39');
+    callCount = callCount + 1;
+  }
+}
+
+C.prototype.method(42, 'TC39',);
+
+// Stores a reference `ref` for case evaluation
+var ref = C.prototype.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/arguments-object/cls-decl-meth-trailing-comma-null.js b/test/language/arguments-object/cls-decl-meth-trailing-comma-null.js
new file mode 100644
index 0000000000..32a9d3a764
--- /dev/null
+++ b/test/language/arguments-object/cls-decl-meth-trailing-comma-null.js
@@ -0,0 +1,38 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-null.case
+// - src/arguments/default/cls-decl-meth.template
+/*---
+description: A trailing comma after null should not increase the arguments.length (class declaration method)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+class C {
+  method() {
+    assert.sameValue(arguments.length, 2);
+    assert.sameValue(arguments[0], 42);
+    assert.sameValue(arguments[1], null);
+    callCount = callCount + 1;
+  }
+}
+
+C.prototype.method(42, null,);
+
+// Stores a reference `ref` for case evaluation
+var ref = C.prototype.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/arguments-object/cls-decl-meth-trailing-comma-single-args.js b/test/language/arguments-object/cls-decl-meth-trailing-comma-single-args.js
new file mode 100644
index 0000000000..b3a6ba8a71
--- /dev/null
+++ b/test/language/arguments-object/cls-decl-meth-trailing-comma-single-args.js
@@ -0,0 +1,37 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-single-args.case
+// - src/arguments/default/cls-decl-meth.template
+/*---
+description: A trailing comma should not increase the arguments.length, using a single arg (class declaration method)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+class C {
+  method() {
+    assert.sameValue(arguments.length, 1);
+    assert.sameValue(arguments[0], 42);
+    callCount = callCount + 1;
+  }
+}
+
+C.prototype.method(42,);
+
+// Stores a reference `ref` for case evaluation
+var ref = C.prototype.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/arguments-object/cls-decl-meth-trailing-comma-undefined.js b/test/language/arguments-object/cls-decl-meth-trailing-comma-undefined.js
new file mode 100644
index 0000000000..ac3710a870
--- /dev/null
+++ b/test/language/arguments-object/cls-decl-meth-trailing-comma-undefined.js
@@ -0,0 +1,38 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-undefined.case
+// - src/arguments/default/cls-decl-meth.template
+/*---
+description: A trailing comma after undefined should not increase the arguments.length (class declaration method)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+class C {
+  method() {
+    assert.sameValue(arguments.length, 2);
+    assert.sameValue(arguments[0], 42);
+    assert.sameValue(arguments[1], undefined);
+    callCount = callCount + 1;
+  }
+}
+
+C.prototype.method(42, undefined,);
+
+// Stores a reference `ref` for case evaluation
+var ref = C.prototype.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/arguments-object/cls-expr-gen-meth-static-trailing-comma-multiple-args.js b/test/language/arguments-object/cls-expr-gen-meth-static-trailing-comma-multiple-args.js
new file mode 100644
index 0000000000..1a797aa980
--- /dev/null
+++ b/test/language/arguments-object/cls-expr-gen-meth-static-trailing-comma-multiple-args.js
@@ -0,0 +1,38 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-multiple-args.case
+// - src/arguments/default/cls-expr-gen-meth-static.template
+/*---
+description: A trailing comma should not increase the arguments.length, using multiple args (static class expression generator method)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+var C = class {
+  static *method() {
+    assert.sameValue(arguments.length, 2);
+    assert.sameValue(arguments[0], 42);
+    assert.sameValue(arguments[1], 'TC39');
+    callCount = callCount + 1;
+  }
+};
+
+C.method(42, 'TC39',).next();
+
+// Stores a reference `ref` for case evaluation
+var ref = C.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/arguments-object/cls-expr-gen-meth-static-trailing-comma-null.js b/test/language/arguments-object/cls-expr-gen-meth-static-trailing-comma-null.js
new file mode 100644
index 0000000000..770887168c
--- /dev/null
+++ b/test/language/arguments-object/cls-expr-gen-meth-static-trailing-comma-null.js
@@ -0,0 +1,38 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-null.case
+// - src/arguments/default/cls-expr-gen-meth-static.template
+/*---
+description: A trailing comma after null should not increase the arguments.length (static class expression generator method)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+var C = class {
+  static *method() {
+    assert.sameValue(arguments.length, 2);
+    assert.sameValue(arguments[0], 42);
+    assert.sameValue(arguments[1], null);
+    callCount = callCount + 1;
+  }
+};
+
+C.method(42, null,).next();
+
+// Stores a reference `ref` for case evaluation
+var ref = C.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/arguments-object/cls-expr-gen-meth-static-trailing-comma-single-args.js b/test/language/arguments-object/cls-expr-gen-meth-static-trailing-comma-single-args.js
new file mode 100644
index 0000000000..f729a442ca
--- /dev/null
+++ b/test/language/arguments-object/cls-expr-gen-meth-static-trailing-comma-single-args.js
@@ -0,0 +1,37 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-single-args.case
+// - src/arguments/default/cls-expr-gen-meth-static.template
+/*---
+description: A trailing comma should not increase the arguments.length, using a single arg (static class expression generator method)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+var C = class {
+  static *method() {
+    assert.sameValue(arguments.length, 1);
+    assert.sameValue(arguments[0], 42);
+    callCount = callCount + 1;
+  }
+};
+
+C.method(42,).next();
+
+// Stores a reference `ref` for case evaluation
+var ref = C.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/arguments-object/cls-expr-gen-meth-static-trailing-comma-undefined.js b/test/language/arguments-object/cls-expr-gen-meth-static-trailing-comma-undefined.js
new file mode 100644
index 0000000000..5a36a31ab2
--- /dev/null
+++ b/test/language/arguments-object/cls-expr-gen-meth-static-trailing-comma-undefined.js
@@ -0,0 +1,38 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-undefined.case
+// - src/arguments/default/cls-expr-gen-meth-static.template
+/*---
+description: A trailing comma after undefined should not increase the arguments.length (static class expression generator method)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+var C = class {
+  static *method() {
+    assert.sameValue(arguments.length, 2);
+    assert.sameValue(arguments[0], 42);
+    assert.sameValue(arguments[1], undefined);
+    callCount = callCount + 1;
+  }
+};
+
+C.method(42, undefined,).next();
+
+// Stores a reference `ref` for case evaluation
+var ref = C.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/arguments-object/cls-expr-gen-meth-trailing-comma-multiple-args.js b/test/language/arguments-object/cls-expr-gen-meth-trailing-comma-multiple-args.js
new file mode 100644
index 0000000000..67ce4d54c5
--- /dev/null
+++ b/test/language/arguments-object/cls-expr-gen-meth-trailing-comma-multiple-args.js
@@ -0,0 +1,38 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-multiple-args.case
+// - src/arguments/default/cls-expr-gen-meth.template
+/*---
+description: A trailing comma should not increase the arguments.length, using multiple args (class expression generator method)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+var C = class {
+  *method() {
+    assert.sameValue(arguments.length, 2);
+    assert.sameValue(arguments[0], 42);
+    assert.sameValue(arguments[1], 'TC39');
+    callCount = callCount + 1;
+  }
+};
+
+C.prototype.method(42, 'TC39',).next();
+
+// Stores a reference `ref` for case evaluation
+var ref = C.prototype.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/arguments-object/cls-expr-gen-meth-trailing-comma-null.js b/test/language/arguments-object/cls-expr-gen-meth-trailing-comma-null.js
new file mode 100644
index 0000000000..b3b8402818
--- /dev/null
+++ b/test/language/arguments-object/cls-expr-gen-meth-trailing-comma-null.js
@@ -0,0 +1,38 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-null.case
+// - src/arguments/default/cls-expr-gen-meth.template
+/*---
+description: A trailing comma after null should not increase the arguments.length (class expression generator method)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+var C = class {
+  *method() {
+    assert.sameValue(arguments.length, 2);
+    assert.sameValue(arguments[0], 42);
+    assert.sameValue(arguments[1], null);
+    callCount = callCount + 1;
+  }
+};
+
+C.prototype.method(42, null,).next();
+
+// Stores a reference `ref` for case evaluation
+var ref = C.prototype.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/arguments-object/cls-expr-gen-meth-trailing-comma-single-args.js b/test/language/arguments-object/cls-expr-gen-meth-trailing-comma-single-args.js
new file mode 100644
index 0000000000..2b025b1f27
--- /dev/null
+++ b/test/language/arguments-object/cls-expr-gen-meth-trailing-comma-single-args.js
@@ -0,0 +1,37 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-single-args.case
+// - src/arguments/default/cls-expr-gen-meth.template
+/*---
+description: A trailing comma should not increase the arguments.length, using a single arg (class expression generator method)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+var C = class {
+  *method() {
+    assert.sameValue(arguments.length, 1);
+    assert.sameValue(arguments[0], 42);
+    callCount = callCount + 1;
+  }
+};
+
+C.prototype.method(42,).next();
+
+// Stores a reference `ref` for case evaluation
+var ref = C.prototype.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/arguments-object/cls-expr-gen-meth-trailing-comma-undefined.js b/test/language/arguments-object/cls-expr-gen-meth-trailing-comma-undefined.js
new file mode 100644
index 0000000000..666723a9a1
--- /dev/null
+++ b/test/language/arguments-object/cls-expr-gen-meth-trailing-comma-undefined.js
@@ -0,0 +1,38 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-undefined.case
+// - src/arguments/default/cls-expr-gen-meth.template
+/*---
+description: A trailing comma after undefined should not increase the arguments.length (class expression generator method)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+var C = class {
+  *method() {
+    assert.sameValue(arguments.length, 2);
+    assert.sameValue(arguments[0], 42);
+    assert.sameValue(arguments[1], undefined);
+    callCount = callCount + 1;
+  }
+};
+
+C.prototype.method(42, undefined,).next();
+
+// Stores a reference `ref` for case evaluation
+var ref = C.prototype.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/arguments-object/cls-expr-meth-static-trailing-comma-multiple-args.js b/test/language/arguments-object/cls-expr-meth-static-trailing-comma-multiple-args.js
new file mode 100644
index 0000000000..9720302d40
--- /dev/null
+++ b/test/language/arguments-object/cls-expr-meth-static-trailing-comma-multiple-args.js
@@ -0,0 +1,38 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-multiple-args.case
+// - src/arguments/default/cls-expr-meth-static.template
+/*---
+description: A trailing comma should not increase the arguments.length, using multiple args (static class expression method)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+var C = class {
+  static method() {
+    assert.sameValue(arguments.length, 2);
+    assert.sameValue(arguments[0], 42);
+    assert.sameValue(arguments[1], 'TC39');
+    callCount = callCount + 1;
+  }
+};
+
+C.method(42, 'TC39',);
+
+// Stores a reference `ref` for case evaluation
+var ref = C.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/arguments-object/cls-expr-meth-static-trailing-comma-null.js b/test/language/arguments-object/cls-expr-meth-static-trailing-comma-null.js
new file mode 100644
index 0000000000..02ebc63c38
--- /dev/null
+++ b/test/language/arguments-object/cls-expr-meth-static-trailing-comma-null.js
@@ -0,0 +1,38 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-null.case
+// - src/arguments/default/cls-expr-meth-static.template
+/*---
+description: A trailing comma after null should not increase the arguments.length (static class expression method)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+var C = class {
+  static method() {
+    assert.sameValue(arguments.length, 2);
+    assert.sameValue(arguments[0], 42);
+    assert.sameValue(arguments[1], null);
+    callCount = callCount + 1;
+  }
+};
+
+C.method(42, null,);
+
+// Stores a reference `ref` for case evaluation
+var ref = C.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/arguments-object/cls-expr-meth-static-trailing-comma-single-args.js b/test/language/arguments-object/cls-expr-meth-static-trailing-comma-single-args.js
new file mode 100644
index 0000000000..81cb12a473
--- /dev/null
+++ b/test/language/arguments-object/cls-expr-meth-static-trailing-comma-single-args.js
@@ -0,0 +1,37 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-single-args.case
+// - src/arguments/default/cls-expr-meth-static.template
+/*---
+description: A trailing comma should not increase the arguments.length, using a single arg (static class expression method)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+var C = class {
+  static method() {
+    assert.sameValue(arguments.length, 1);
+    assert.sameValue(arguments[0], 42);
+    callCount = callCount + 1;
+  }
+};
+
+C.method(42,);
+
+// Stores a reference `ref` for case evaluation
+var ref = C.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/arguments-object/cls-expr-meth-static-trailing-comma-undefined.js b/test/language/arguments-object/cls-expr-meth-static-trailing-comma-undefined.js
new file mode 100644
index 0000000000..1c4d255317
--- /dev/null
+++ b/test/language/arguments-object/cls-expr-meth-static-trailing-comma-undefined.js
@@ -0,0 +1,38 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-undefined.case
+// - src/arguments/default/cls-expr-meth-static.template
+/*---
+description: A trailing comma after undefined should not increase the arguments.length (static class expression method)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+var C = class {
+  static method() {
+    assert.sameValue(arguments.length, 2);
+    assert.sameValue(arguments[0], 42);
+    assert.sameValue(arguments[1], undefined);
+    callCount = callCount + 1;
+  }
+};
+
+C.method(42, undefined,);
+
+// Stores a reference `ref` for case evaluation
+var ref = C.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/arguments-object/cls-expr-meth-trailing-comma-multiple-args.js b/test/language/arguments-object/cls-expr-meth-trailing-comma-multiple-args.js
new file mode 100644
index 0000000000..cf08d53d0b
--- /dev/null
+++ b/test/language/arguments-object/cls-expr-meth-trailing-comma-multiple-args.js
@@ -0,0 +1,38 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-multiple-args.case
+// - src/arguments/default/cls-expr-meth.template
+/*---
+description: A trailing comma should not increase the arguments.length, using multiple args (class expression method)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+var C = class {
+  method() {
+    assert.sameValue(arguments.length, 2);
+    assert.sameValue(arguments[0], 42);
+    assert.sameValue(arguments[1], 'TC39');
+    callCount = callCount + 1;
+  }
+};
+
+C.prototype.method(42, 'TC39',);
+
+// Stores a reference `ref` for case evaluation
+var ref = C.prototype.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/arguments-object/cls-expr-meth-trailing-comma-null.js b/test/language/arguments-object/cls-expr-meth-trailing-comma-null.js
new file mode 100644
index 0000000000..b1460168d4
--- /dev/null
+++ b/test/language/arguments-object/cls-expr-meth-trailing-comma-null.js
@@ -0,0 +1,38 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-null.case
+// - src/arguments/default/cls-expr-meth.template
+/*---
+description: A trailing comma after null should not increase the arguments.length (class expression method)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+var C = class {
+  method() {
+    assert.sameValue(arguments.length, 2);
+    assert.sameValue(arguments[0], 42);
+    assert.sameValue(arguments[1], null);
+    callCount = callCount + 1;
+  }
+};
+
+C.prototype.method(42, null,);
+
+// Stores a reference `ref` for case evaluation
+var ref = C.prototype.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/arguments-object/cls-expr-meth-trailing-comma-single-args.js b/test/language/arguments-object/cls-expr-meth-trailing-comma-single-args.js
new file mode 100644
index 0000000000..4b68d6fd37
--- /dev/null
+++ b/test/language/arguments-object/cls-expr-meth-trailing-comma-single-args.js
@@ -0,0 +1,37 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-single-args.case
+// - src/arguments/default/cls-expr-meth.template
+/*---
+description: A trailing comma should not increase the arguments.length, using a single arg (class expression method)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+var C = class {
+  method() {
+    assert.sameValue(arguments.length, 1);
+    assert.sameValue(arguments[0], 42);
+    callCount = callCount + 1;
+  }
+};
+
+C.prototype.method(42,);
+
+// Stores a reference `ref` for case evaluation
+var ref = C.prototype.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/arguments-object/cls-expr-meth-trailing-comma-undefined.js b/test/language/arguments-object/cls-expr-meth-trailing-comma-undefined.js
new file mode 100644
index 0000000000..ffd2447438
--- /dev/null
+++ b/test/language/arguments-object/cls-expr-meth-trailing-comma-undefined.js
@@ -0,0 +1,38 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-undefined.case
+// - src/arguments/default/cls-expr-meth.template
+/*---
+description: A trailing comma after undefined should not increase the arguments.length (class expression method)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+var C = class {
+  method() {
+    assert.sameValue(arguments.length, 2);
+    assert.sameValue(arguments[0], 42);
+    assert.sameValue(arguments[1], undefined);
+    callCount = callCount + 1;
+  }
+};
+
+C.prototype.method(42, undefined,);
+
+// Stores a reference `ref` for case evaluation
+var ref = C.prototype.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/arguments-object/func-decl-trailing-comma-multiple-args.js b/test/language/arguments-object/func-decl-trailing-comma-multiple-args.js
new file mode 100644
index 0000000000..a431a3a944
--- /dev/null
+++ b/test/language/arguments-object/func-decl-trailing-comma-multiple-args.js
@@ -0,0 +1,34 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-multiple-args.case
+// - src/arguments/default/func-decl.template
+/*---
+description: A trailing comma should not increase the arguments.length, using multiple args (function declaration)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+// Stores a reference `ref` for case evaluation
+function ref() {
+  assert.sameValue(arguments.length, 2);
+  assert.sameValue(arguments[0], 42);
+  assert.sameValue(arguments[1], 'TC39');
+  callCount = callCount + 1;
+}
+
+ref(42, 'TC39',);
+
+assert.sameValue(callCount, 1, 'function invoked exactly once');
diff --git a/test/language/arguments-object/func-decl-trailing-comma-null.js b/test/language/arguments-object/func-decl-trailing-comma-null.js
new file mode 100644
index 0000000000..2aa8c8284e
--- /dev/null
+++ b/test/language/arguments-object/func-decl-trailing-comma-null.js
@@ -0,0 +1,34 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-null.case
+// - src/arguments/default/func-decl.template
+/*---
+description: A trailing comma after null should not increase the arguments.length (function declaration)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+// Stores a reference `ref` for case evaluation
+function ref() {
+  assert.sameValue(arguments.length, 2);
+  assert.sameValue(arguments[0], 42);
+  assert.sameValue(arguments[1], null);
+  callCount = callCount + 1;
+}
+
+ref(42, null,);
+
+assert.sameValue(callCount, 1, 'function invoked exactly once');
diff --git a/test/language/arguments-object/func-decl-trailing-comma-single-args.js b/test/language/arguments-object/func-decl-trailing-comma-single-args.js
new file mode 100644
index 0000000000..19f4eab18c
--- /dev/null
+++ b/test/language/arguments-object/func-decl-trailing-comma-single-args.js
@@ -0,0 +1,33 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-single-args.case
+// - src/arguments/default/func-decl.template
+/*---
+description: A trailing comma should not increase the arguments.length, using a single arg (function declaration)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+// Stores a reference `ref` for case evaluation
+function ref() {
+  assert.sameValue(arguments.length, 1);
+  assert.sameValue(arguments[0], 42);
+  callCount = callCount + 1;
+}
+
+ref(42,);
+
+assert.sameValue(callCount, 1, 'function invoked exactly once');
diff --git a/test/language/arguments-object/func-decl-trailing-comma-undefined.js b/test/language/arguments-object/func-decl-trailing-comma-undefined.js
new file mode 100644
index 0000000000..cb4bb55ca0
--- /dev/null
+++ b/test/language/arguments-object/func-decl-trailing-comma-undefined.js
@@ -0,0 +1,34 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-undefined.case
+// - src/arguments/default/func-decl.template
+/*---
+description: A trailing comma after undefined should not increase the arguments.length (function declaration)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+// Stores a reference `ref` for case evaluation
+function ref() {
+  assert.sameValue(arguments.length, 2);
+  assert.sameValue(arguments[0], 42);
+  assert.sameValue(arguments[1], undefined);
+  callCount = callCount + 1;
+}
+
+ref(42, undefined,);
+
+assert.sameValue(callCount, 1, 'function invoked exactly once');
diff --git a/test/language/arguments-object/func-expr-trailing-comma-multiple-args.js b/test/language/arguments-object/func-expr-trailing-comma-multiple-args.js
new file mode 100644
index 0000000000..07a9ca9fd9
--- /dev/null
+++ b/test/language/arguments-object/func-expr-trailing-comma-multiple-args.js
@@ -0,0 +1,35 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-multiple-args.case
+// - src/arguments/default/func-expr.template
+/*---
+description: A trailing comma should not increase the arguments.length, using multiple args (function expression)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+// Stores a reference `ref` for case evaluation
+var ref;
+ref = function() {
+  assert.sameValue(arguments.length, 2);
+  assert.sameValue(arguments[0], 42);
+  assert.sameValue(arguments[1], 'TC39');
+  callCount = callCount + 1;
+};
+
+ref(42, 'TC39',);
+
+assert.sameValue(callCount, 1, 'function invoked exactly once');
diff --git a/test/language/arguments-object/func-expr-trailing-comma-null.js b/test/language/arguments-object/func-expr-trailing-comma-null.js
new file mode 100644
index 0000000000..242d0dd28b
--- /dev/null
+++ b/test/language/arguments-object/func-expr-trailing-comma-null.js
@@ -0,0 +1,35 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-null.case
+// - src/arguments/default/func-expr.template
+/*---
+description: A trailing comma after null should not increase the arguments.length (function expression)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+// Stores a reference `ref` for case evaluation
+var ref;
+ref = function() {
+  assert.sameValue(arguments.length, 2);
+  assert.sameValue(arguments[0], 42);
+  assert.sameValue(arguments[1], null);
+  callCount = callCount + 1;
+};
+
+ref(42, null,);
+
+assert.sameValue(callCount, 1, 'function invoked exactly once');
diff --git a/test/language/arguments-object/func-expr-trailing-comma-single-args.js b/test/language/arguments-object/func-expr-trailing-comma-single-args.js
new file mode 100644
index 0000000000..3fc9a95c35
--- /dev/null
+++ b/test/language/arguments-object/func-expr-trailing-comma-single-args.js
@@ -0,0 +1,34 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-single-args.case
+// - src/arguments/default/func-expr.template
+/*---
+description: A trailing comma should not increase the arguments.length, using a single arg (function expression)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+// Stores a reference `ref` for case evaluation
+var ref;
+ref = function() {
+  assert.sameValue(arguments.length, 1);
+  assert.sameValue(arguments[0], 42);
+  callCount = callCount + 1;
+};
+
+ref(42,);
+
+assert.sameValue(callCount, 1, 'function invoked exactly once');
diff --git a/test/language/arguments-object/func-expr-trailing-comma-undefined.js b/test/language/arguments-object/func-expr-trailing-comma-undefined.js
new file mode 100644
index 0000000000..1516acf3de
--- /dev/null
+++ b/test/language/arguments-object/func-expr-trailing-comma-undefined.js
@@ -0,0 +1,35 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-undefined.case
+// - src/arguments/default/func-expr.template
+/*---
+description: A trailing comma after undefined should not increase the arguments.length (function expression)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+// Stores a reference `ref` for case evaluation
+var ref;
+ref = function() {
+  assert.sameValue(arguments.length, 2);
+  assert.sameValue(arguments[0], 42);
+  assert.sameValue(arguments[1], undefined);
+  callCount = callCount + 1;
+};
+
+ref(42, undefined,);
+
+assert.sameValue(callCount, 1, 'function invoked exactly once');
diff --git a/test/language/arguments-object/gen-func-decl-trailing-comma-multiple-args.js b/test/language/arguments-object/gen-func-decl-trailing-comma-multiple-args.js
new file mode 100644
index 0000000000..ff1ac6f609
--- /dev/null
+++ b/test/language/arguments-object/gen-func-decl-trailing-comma-multiple-args.js
@@ -0,0 +1,34 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-multiple-args.case
+// - src/arguments/default/gen-func-decl.template
+/*---
+description: A trailing comma should not increase the arguments.length, using multiple args (generator function declaration)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+// Stores a reference `ref` for case evaluation
+function* ref() {
+  assert.sameValue(arguments.length, 2);
+  assert.sameValue(arguments[0], 42);
+  assert.sameValue(arguments[1], 'TC39');
+  callCount = callCount + 1;
+}
+
+ref(42, 'TC39',).next();
+
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
diff --git a/test/language/arguments-object/gen-func-decl-trailing-comma-null.js b/test/language/arguments-object/gen-func-decl-trailing-comma-null.js
new file mode 100644
index 0000000000..7d3a1ecf3f
--- /dev/null
+++ b/test/language/arguments-object/gen-func-decl-trailing-comma-null.js
@@ -0,0 +1,34 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-null.case
+// - src/arguments/default/gen-func-decl.template
+/*---
+description: A trailing comma after null should not increase the arguments.length (generator function declaration)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+// Stores a reference `ref` for case evaluation
+function* ref() {
+  assert.sameValue(arguments.length, 2);
+  assert.sameValue(arguments[0], 42);
+  assert.sameValue(arguments[1], null);
+  callCount = callCount + 1;
+}
+
+ref(42, null,).next();
+
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
diff --git a/test/language/arguments-object/gen-func-decl-trailing-comma-single-args.js b/test/language/arguments-object/gen-func-decl-trailing-comma-single-args.js
new file mode 100644
index 0000000000..000a932a56
--- /dev/null
+++ b/test/language/arguments-object/gen-func-decl-trailing-comma-single-args.js
@@ -0,0 +1,33 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-single-args.case
+// - src/arguments/default/gen-func-decl.template
+/*---
+description: A trailing comma should not increase the arguments.length, using a single arg (generator function declaration)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+// Stores a reference `ref` for case evaluation
+function* ref() {
+  assert.sameValue(arguments.length, 1);
+  assert.sameValue(arguments[0], 42);
+  callCount = callCount + 1;
+}
+
+ref(42,).next();
+
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
diff --git a/test/language/arguments-object/gen-func-decl-trailing-comma-undefined.js b/test/language/arguments-object/gen-func-decl-trailing-comma-undefined.js
new file mode 100644
index 0000000000..e1d772bc39
--- /dev/null
+++ b/test/language/arguments-object/gen-func-decl-trailing-comma-undefined.js
@@ -0,0 +1,34 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-undefined.case
+// - src/arguments/default/gen-func-decl.template
+/*---
+description: A trailing comma after undefined should not increase the arguments.length (generator function declaration)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+// Stores a reference `ref` for case evaluation
+function* ref() {
+  assert.sameValue(arguments.length, 2);
+  assert.sameValue(arguments[0], 42);
+  assert.sameValue(arguments[1], undefined);
+  callCount = callCount + 1;
+}
+
+ref(42, undefined,).next();
+
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
diff --git a/test/language/arguments-object/gen-func-expr-trailing-comma-multiple-args.js b/test/language/arguments-object/gen-func-expr-trailing-comma-multiple-args.js
new file mode 100644
index 0000000000..63f0911461
--- /dev/null
+++ b/test/language/arguments-object/gen-func-expr-trailing-comma-multiple-args.js
@@ -0,0 +1,35 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-multiple-args.case
+// - src/arguments/default/gen-func-expr.template
+/*---
+description: A trailing comma should not increase the arguments.length, using multiple args (generator function expression)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+// Stores a reference `ref` for case evaluation
+var ref;
+ref = function*() {
+  assert.sameValue(arguments.length, 2);
+  assert.sameValue(arguments[0], 42);
+  assert.sameValue(arguments[1], 'TC39');
+  callCount = callCount + 1;
+};
+
+ref(42, 'TC39',).next();
+
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
diff --git a/test/language/arguments-object/gen-func-expr-trailing-comma-null.js b/test/language/arguments-object/gen-func-expr-trailing-comma-null.js
new file mode 100644
index 0000000000..cac540994a
--- /dev/null
+++ b/test/language/arguments-object/gen-func-expr-trailing-comma-null.js
@@ -0,0 +1,35 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-null.case
+// - src/arguments/default/gen-func-expr.template
+/*---
+description: A trailing comma after null should not increase the arguments.length (generator function expression)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+// Stores a reference `ref` for case evaluation
+var ref;
+ref = function*() {
+  assert.sameValue(arguments.length, 2);
+  assert.sameValue(arguments[0], 42);
+  assert.sameValue(arguments[1], null);
+  callCount = callCount + 1;
+};
+
+ref(42, null,).next();
+
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
diff --git a/test/language/arguments-object/gen-func-expr-trailing-comma-single-args.js b/test/language/arguments-object/gen-func-expr-trailing-comma-single-args.js
new file mode 100644
index 0000000000..a8a977ec15
--- /dev/null
+++ b/test/language/arguments-object/gen-func-expr-trailing-comma-single-args.js
@@ -0,0 +1,34 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-single-args.case
+// - src/arguments/default/gen-func-expr.template
+/*---
+description: A trailing comma should not increase the arguments.length, using a single arg (generator function expression)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+// Stores a reference `ref` for case evaluation
+var ref;
+ref = function*() {
+  assert.sameValue(arguments.length, 1);
+  assert.sameValue(arguments[0], 42);
+  callCount = callCount + 1;
+};
+
+ref(42,).next();
+
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
diff --git a/test/language/arguments-object/gen-func-expr-trailing-comma-undefined.js b/test/language/arguments-object/gen-func-expr-trailing-comma-undefined.js
new file mode 100644
index 0000000000..8c9f829e65
--- /dev/null
+++ b/test/language/arguments-object/gen-func-expr-trailing-comma-undefined.js
@@ -0,0 +1,35 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-undefined.case
+// - src/arguments/default/gen-func-expr.template
+/*---
+description: A trailing comma after undefined should not increase the arguments.length (generator function expression)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+// Stores a reference `ref` for case evaluation
+var ref;
+ref = function*() {
+  assert.sameValue(arguments.length, 2);
+  assert.sameValue(arguments[0], 42);
+  assert.sameValue(arguments[1], undefined);
+  callCount = callCount + 1;
+};
+
+ref(42, undefined,).next();
+
+assert.sameValue(callCount, 1, 'generator function invoked exactly once');
diff --git a/test/language/arguments-object/gen-meth-trailing-comma-multiple-args.js b/test/language/arguments-object/gen-meth-trailing-comma-multiple-args.js
new file mode 100644
index 0000000000..633968c46b
--- /dev/null
+++ b/test/language/arguments-object/gen-meth-trailing-comma-multiple-args.js
@@ -0,0 +1,38 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-multiple-args.case
+// - src/arguments/default/gen-meth.template
+/*---
+description: A trailing comma should not increase the arguments.length, using multiple args (generator method)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+var obj = {
+  *method() {
+    assert.sameValue(arguments.length, 2);
+    assert.sameValue(arguments[0], 42);
+    assert.sameValue(arguments[1], 'TC39');
+    callCount = callCount + 1;
+  }
+};
+
+obj.method(42, 'TC39',).next();
+
+// Stores a reference `ref` for case evaluation
+var ref = obj.method;
+
+assert.sameValue(callCount, 1, 'generator method invoked exactly once');
diff --git a/test/language/arguments-object/gen-meth-trailing-comma-null.js b/test/language/arguments-object/gen-meth-trailing-comma-null.js
new file mode 100644
index 0000000000..f39d4abf8e
--- /dev/null
+++ b/test/language/arguments-object/gen-meth-trailing-comma-null.js
@@ -0,0 +1,38 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-null.case
+// - src/arguments/default/gen-meth.template
+/*---
+description: A trailing comma after null should not increase the arguments.length (generator method)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+var obj = {
+  *method() {
+    assert.sameValue(arguments.length, 2);
+    assert.sameValue(arguments[0], 42);
+    assert.sameValue(arguments[1], null);
+    callCount = callCount + 1;
+  }
+};
+
+obj.method(42, null,).next();
+
+// Stores a reference `ref` for case evaluation
+var ref = obj.method;
+
+assert.sameValue(callCount, 1, 'generator method invoked exactly once');
diff --git a/test/language/arguments-object/gen-meth-trailing-comma-single-args.js b/test/language/arguments-object/gen-meth-trailing-comma-single-args.js
new file mode 100644
index 0000000000..b162f30b3e
--- /dev/null
+++ b/test/language/arguments-object/gen-meth-trailing-comma-single-args.js
@@ -0,0 +1,37 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-single-args.case
+// - src/arguments/default/gen-meth.template
+/*---
+description: A trailing comma should not increase the arguments.length, using a single arg (generator method)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+var obj = {
+  *method() {
+    assert.sameValue(arguments.length, 1);
+    assert.sameValue(arguments[0], 42);
+    callCount = callCount + 1;
+  }
+};
+
+obj.method(42,).next();
+
+// Stores a reference `ref` for case evaluation
+var ref = obj.method;
+
+assert.sameValue(callCount, 1, 'generator method invoked exactly once');
diff --git a/test/language/arguments-object/gen-meth-trailing-comma-undefined.js b/test/language/arguments-object/gen-meth-trailing-comma-undefined.js
new file mode 100644
index 0000000000..438aeae9ea
--- /dev/null
+++ b/test/language/arguments-object/gen-meth-trailing-comma-undefined.js
@@ -0,0 +1,38 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-undefined.case
+// - src/arguments/default/gen-meth.template
+/*---
+description: A trailing comma after undefined should not increase the arguments.length (generator method)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+var obj = {
+  *method() {
+    assert.sameValue(arguments.length, 2);
+    assert.sameValue(arguments[0], 42);
+    assert.sameValue(arguments[1], undefined);
+    callCount = callCount + 1;
+  }
+};
+
+obj.method(42, undefined,).next();
+
+// Stores a reference `ref` for case evaluation
+var ref = obj.method;
+
+assert.sameValue(callCount, 1, 'generator method invoked exactly once');
diff --git a/test/language/arguments-object/meth-trailing-comma-multiple-args.js b/test/language/arguments-object/meth-trailing-comma-multiple-args.js
new file mode 100644
index 0000000000..6bd15dcc08
--- /dev/null
+++ b/test/language/arguments-object/meth-trailing-comma-multiple-args.js
@@ -0,0 +1,38 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-multiple-args.case
+// - src/arguments/default/meth.template
+/*---
+description: A trailing comma should not increase the arguments.length, using multiple args (method)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+var obj = {
+  method() {
+    assert.sameValue(arguments.length, 2);
+    assert.sameValue(arguments[0], 42);
+    assert.sameValue(arguments[1], 'TC39');
+    callCount = callCount + 1;
+  }
+};
+
+obj.method(42, 'TC39',);
+
+// Stores a reference `ref` for case evaluation
+var ref = obj.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/arguments-object/meth-trailing-comma-null.js b/test/language/arguments-object/meth-trailing-comma-null.js
new file mode 100644
index 0000000000..9645f4739c
--- /dev/null
+++ b/test/language/arguments-object/meth-trailing-comma-null.js
@@ -0,0 +1,38 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-null.case
+// - src/arguments/default/meth.template
+/*---
+description: A trailing comma after null should not increase the arguments.length (method)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+var obj = {
+  method() {
+    assert.sameValue(arguments.length, 2);
+    assert.sameValue(arguments[0], 42);
+    assert.sameValue(arguments[1], null);
+    callCount = callCount + 1;
+  }
+};
+
+obj.method(42, null,);
+
+// Stores a reference `ref` for case evaluation
+var ref = obj.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/arguments-object/meth-trailing-comma-single-args.js b/test/language/arguments-object/meth-trailing-comma-single-args.js
new file mode 100644
index 0000000000..571fe47a8f
--- /dev/null
+++ b/test/language/arguments-object/meth-trailing-comma-single-args.js
@@ -0,0 +1,37 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-single-args.case
+// - src/arguments/default/meth.template
+/*---
+description: A trailing comma should not increase the arguments.length, using a single arg (method)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+var obj = {
+  method() {
+    assert.sameValue(arguments.length, 1);
+    assert.sameValue(arguments[0], 42);
+    callCount = callCount + 1;
+  }
+};
+
+obj.method(42,);
+
+// Stores a reference `ref` for case evaluation
+var ref = obj.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
diff --git a/test/language/arguments-object/meth-trailing-comma-undefined.js b/test/language/arguments-object/meth-trailing-comma-undefined.js
new file mode 100644
index 0000000000..aee2de278d
--- /dev/null
+++ b/test/language/arguments-object/meth-trailing-comma-undefined.js
@@ -0,0 +1,38 @@
+// This file was procedurally generated from the following sources:
+// - src/arguments/trailing-comma-undefined.case
+// - src/arguments/default/meth.template
+/*---
+description: A trailing comma after undefined should not increase the arguments.length (method)
+esid: sec-arguments-exotic-objects
+flags: [generated]
+info: |
+    9.4.4 Arguments Exotic Objects
+
+    Most ECMAScript functions make an arguments object available to their code. Depending upon the
+    characteristics of the function definition, its arguments object is either an ordinary object
+    or an arguments exotic object.
+
+    Trailing comma in the arguments list
+
+    12.3 Left-Hand-Side Expressions
+
+    Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , )
+---*/
+
+
+var callCount = 0;
+var obj = {
+  method() {
+    assert.sameValue(arguments.length, 2);
+    assert.sameValue(arguments[0], 42);
+    assert.sameValue(arguments[1], undefined);
+    callCount = callCount + 1;
+  }
+};
+
+obj.method(42, undefined,);
+
+// Stores a reference `ref` for case evaluation
+var ref = obj.method;
+
+assert.sameValue(callCount, 1, 'method invoked exactly once');
-- 
GitLab