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

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

Issue 11227007: Unify parsing of constructor references. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 8 years, 2 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: 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 a7f9fcd07da968f599986e5d8900878fe8e73280..ae182b5474cee0a47db5fc49b0729bc596f3f9f8 100644
--- a/dart/lib/compiler/implementation/scanner/parser.dart
+++ b/dart/lib/compiler/implementation/scanner/parser.dart
@@ -975,21 +975,14 @@ class Parser {
Token factoryKeyword = token;
listener.beginFactoryMethod(factoryKeyword);
token = token.next; // Skip 'factory'.
- token = parseIdentifier(token);
- token = parseQualifiedRestOpt(token);
- token = parseTypeVariablesOpt(token);
- Token period = null;
- if (optional('.', token)) {
- period = token;
- token = parseIdentifier(token.next);
- }
+ token = parseConstructorReference(token);
token = parseFormalParameters(token);
if (optional('=', token)) {
token = parseRedirectingFactoryBody(token);
} else {
token = parseFunctionBody(token, false);
}
- listener.endFactoryMethod(start, period, token);
+ listener.endFactoryMethod(start, token);
return token.next;
}
@@ -1650,22 +1643,22 @@ class Parser {
return false;
}
- Token parseNewExpression(Token token) {
- Token newKeyword = token;
- token = expect('new', token);
- token = parseType(token);
- bool named = false;
- if (optional('.', token)) {
- named = true;
- token = parseIdentifier(token.next);
- }
+ Token parseRequiredArguments(Token token) {
if (optional('(', token)) {
token = parseArguments(token);
} else {
listener.handleNoArguments(token);
token = listener.unexpected(token);
}
- listener.handleNewExpression(newKeyword, named);
+ return token;
+ }
+
+ Token parseNewExpression(Token token) {
+ Token newKeyword = token;
+ token = expect('new', token);
+ token = parseConstructorReference(token);
+ token = parseRequiredArguments(token);
+ listener.handleNewExpression(newKeyword);
return token;
}
@@ -1679,15 +1672,9 @@ class Parser {
(identical(value, '{'))) {
return parseLiteralListOrMap(constKeyword);
}
- token = parseType(token);
- bool named = false;
- if (optional('.', token)) {
- named = true;
- token = parseIdentifier(token.next);
- }
- expect('(', token);
- token = parseArguments(token);
- listener.handleConstExpression(constKeyword, named);
+ token = parseConstructorReference(token);
+ token = parseRequiredArguments(token);
+ listener.handleConstExpression(constKeyword);
return token;
}

Powered by Google App Engine
This is Rietveld 408576698