| Index: lib/compiler/implementation/scanner/parser.dart
|
| diff --git a/lib/compiler/implementation/scanner/parser.dart b/lib/compiler/implementation/scanner/parser.dart
|
| index 16ef40061de8c2bbd6d0cb76ca5a39028e9efacf..03c6c4e19b9307cd6df49c8040d0bfc5c047bd2d 100644
|
| --- a/lib/compiler/implementation/scanner/parser.dart
|
| +++ b/lib/compiler/implementation/scanner/parser.dart
|
| @@ -69,7 +69,7 @@ class Parser {
|
| token = parseReturnTypeOpt(token.next);
|
| token = parseIdentifier(token);
|
| token = parseTypeVariablesOpt(token);
|
| - token = parseFormalParameters(token);
|
| + token = parseFormalParameters(token, DISALLOW_VALUES_FOR_NAMED_OPTIONAL_PARAMS);
|
| listener.endFunctionTypeAlias(typedefKeyword, token);
|
| return expect(';', token);
|
| }
|
| @@ -83,7 +83,8 @@ class Parser {
|
| }
|
| }
|
|
|
| - Token parseFormalParameters(Token token) {
|
| + final bool DISALLOW_VALUES_FOR_NAMED_OPTIONAL_PARAMS = false;
|
| + Token parseFormalParameters(Token token, [bool allowValuesForNamedOptionalParams = true]) {
|
| Token begin = token;
|
| listener.beginFormalParameters(begin);
|
| expect('(', token);
|
| @@ -96,16 +97,16 @@ class Parser {
|
| ++parameterCount;
|
| token = token.next;
|
| if (optional('[', token)) {
|
| - token = parseOptionalFormalParameters(token);
|
| + token = parseOptionalFormalParameters(token, allowValuesForNamedOptionalParams);
|
| break;
|
| }
|
| - token = parseFormalParameter(token);
|
| + token = parseFormalParameter(token, allowValuesForNamedOptionalParams);
|
| } while (optional(',', token));
|
| listener.endFormalParameters(parameterCount, begin, token);
|
| return expect(')', token);
|
| }
|
|
|
| - Token parseFormalParameter(Token token) {
|
| + Token parseFormalParameter(Token token, bool allowValuesForNamedOptionalParams) {
|
| listener.beginFormalParameter(token);
|
| token = parseModifiers(token);
|
| // TODO(ahe): Validate that there are formal parameters if void.
|
| @@ -119,10 +120,14 @@ class Parser {
|
| }
|
| token = parseIdentifier(token);
|
| if (optional('(', token)) {
|
| - token = parseFormalParameters(token);
|
| + token = parseFormalParameters(token, DISALLOW_VALUES_FOR_NAMED_OPTIONAL_PARAMS);
|
| listener.handleFunctionTypedFormalParameter(token);
|
| }
|
| if (optional('=', token)) {
|
| + if (!allowValuesForNamedOptionalParams) {
|
| + listener.recoverableError("parameter must not specify a default value", token: token);
|
| + }
|
| +
|
| // TODO(ahe): Validate that these are only used for optional parameters.
|
| Token equal = token;
|
| token = parseExpression(token.next);
|
| @@ -132,14 +137,14 @@ class Parser {
|
| return token;
|
| }
|
|
|
| - Token parseOptionalFormalParameters(Token token) {
|
| + Token parseOptionalFormalParameters(Token token, bool allowValuesForNamedOptionalParams) {
|
| Token begin = token;
|
| listener.beginOptionalFormalParameters(begin);
|
| assert(optional('[', token));
|
| int parameterCount = 0;
|
| do {
|
| token = token.next;
|
| - token = parseFormalParameter(token);
|
| + token = parseFormalParameter(token, allowValuesForNamedOptionalParams);
|
| ++parameterCount;
|
| } while (optional(',', token));
|
| listener.endOptionalFormalParameters(parameterCount, begin, token);
|
|
|