/*
 * Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
 * for details. All rights reserved. Use of this source code is governed by a
 * BSD-style license that can be found in the LICENSE file.
 */
/**
 * @assertion Every function includes a formal parameter list, which consists
 * of a list of required parameters, followed by any optional parameters.
 * The optional parameters may be specified either as a set of named parameters
 * or as a list of positional parameters, but not both.
 * formalParameterList:
 *   '(' ')' |
 *   '('normalFormalParameters(',' optionalFormalParameters)?')' |
 *   '('optionalFormalParameters')'
 * ;
 * normalFormalParameters:
 *   normalFormalParameter(',' normalFormalParameter)*
 * ;
 * optionalFormalParameters:
 *   optionalPositionalFormalParameters |
 *   namedFormalParameters
 * ;
 * optionalPositionalFormalParameters:
 *  `['defaultFormalParameter(`,' defaultFormalParameter)*`]'
 * ;
 * namedFormalParameters:
 *  `{'defaultNamedParameter(`,' defaultNamedParameter)*`}'
 * ;
 * @description Checks that the named parameter list may end with a comma.
 * @author iefremov
 */

void f({var p1, }) {}

main () {
  f(p1: 1);
}
