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

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

Issue 10907129: Parse and resolve new syntax for named parameters. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Rebased Created 8 years, 3 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
« no previous file with comments | « dart/lib/compiler/implementation/resolver.dart ('k') | dart/tests/co19/co19-dart2js.status » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: dart/lib/compiler/implementation/scanner/parser.dart
diff --git a/dart/lib/compiler/implementation/scanner/parser.dart b/dart/lib/compiler/implementation/scanner/parser.dart
index 98bb484f0920a73208110583fd78a74adb61e472..2dba34448856d03d18dd38c41edc678f64f266ab 100644
--- a/dart/lib/compiler/implementation/scanner/parser.dart
+++ b/dart/lib/compiler/implementation/scanner/parser.dart
@@ -142,8 +142,12 @@ class Parser {
do {
++parameterCount;
token = token.next;
- if (optional('[', token)) {
- token = parseOptionalFormalParameters(token);
+ String value = token.stringValue;
+ if (value === '[') {
+ token = parseOptionalFormalParameters(token, false);
+ break;
+ } else if (value === '{') {
+ token = parseOptionalFormalParameters(token, true);
break;
}
token = parseFormalParameter(token);
@@ -169,7 +173,8 @@ class Parser {
token = parseFormalParameters(token);
listener.handleFunctionTypedFormalParameter(token);
}
- if (optional('=', token)) {
+ String value = token.stringValue;
+ if (('=' === value) || (':' === value)) {
// TODO(ahe): Validate that these are only used for optional parameters.
Token equal = token;
token = parseExpression(token.next);
@@ -179,10 +184,10 @@ class Parser {
return token;
}
- Token parseOptionalFormalParameters(Token token) {
+ Token parseOptionalFormalParameters(Token token, bool isNamed) {
Token begin = token;
listener.beginOptionalFormalParameters(begin);
- assert(optional('[', token));
+ assert((isNamed && optional('{', token)) || optional('[', token));
int parameterCount = 0;
do {
token = token.next;
@@ -190,7 +195,11 @@ class Parser {
++parameterCount;
} while (optional(',', token));
listener.endOptionalFormalParameters(parameterCount, begin, token);
- return expect(']', token);
+ if (isNamed) {
+ return expect('}', token);
+ } else {
+ return expect(']', token);
+ }
}
Token parseTypeOpt(Token token) {
« no previous file with comments | « dart/lib/compiler/implementation/resolver.dart ('k') | dart/tests/co19/co19-dart2js.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698