Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(463)

Unified Diff: lib/compiler/implementation/scanner/parser.dart

Issue 10800027: Fixed tests so they do indeed confirm that values on optional named parameters are not allowed. Add… (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);

Powered by Google App Engine
This is Rietveld 408576698