v8/test/mjsunit/harmony/trailing-commas-length.js
jwolfe 1ac0965542 Allow trailing commas in function parameter lists
Add a flag harmony_trailing_commas_in_parameters that allows trailing
commas in function parameter declaration lists and function call
parameter lists. Trailing commas are allowed in parenthetical lists like
`(a, b, c,)` only if the next token is `=>`, thereby making it an arrow
function declaration. Only 1 trailing comma is allowed, not `(a,,)`. A
trailing comma must follow a non-rest parameter, so `(,)` and `(...a,)`
are still SyntaxErrors. However, a trailing comma is allowed after a
spread parameter, e.g. `a(...b,);`.

Add parser tests for all of the above.

BUG=v8:5051
LOG=y

Review-Url: https://codereview.chromium.org/2094463002
Cr-Commit-Position: refs/heads/master@{#37355}
2016-06-29 01:39:10 +00:00

32 lines
899 B
JavaScript

// Copyright 2016 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Flags: --harmony-trailing-commas
function f1(a,) {}
function f2(a,b,) {}
function f3(a,b,c,) {}
assertEquals(1, f1.length);
assertEquals(2, f2.length);
assertEquals(3, f3.length);
function* g1(a,) {}
function* g2(a,b,) {}
function* g3(a,b,c,) {}
assertEquals(1, g1.length);
assertEquals(2, g2.length);
assertEquals(3, g3.length);
assertEquals(1, (function(a,) {}).length);
assertEquals(2, (function(a,b,) {}).length);
assertEquals(3, (function(a,b,c,) {}).length);
assertEquals(1, (function*(a,) {}).length);
assertEquals(2, (function*(a,b,) {}).length);
assertEquals(3, (function*(a,b,c,) {}).length);
assertEquals(1, ((a,) => {}).length);
assertEquals(2, ((a,b,) => {}).length);
assertEquals(3, ((a,b,c,) => {}).length);