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

Unified Diff: compiler/java/com/google/dart/compiler/parser/DartParser.java

Issue 10889010: Fix for issue 4776 (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 4 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: compiler/java/com/google/dart/compiler/parser/DartParser.java
===================================================================
--- compiler/java/com/google/dart/compiler/parser/DartParser.java (revision 11473)
+++ compiler/java/com/google/dart/compiler/parser/DartParser.java (working copy)
@@ -1465,7 +1465,7 @@
reportError(position(), ParserErrorCode.ONLY_FACTORIES_CAN_REDIRECT);
}
modifiers = modifiers.makeRedirectedConstructor();
- DartTypeNode redirectedTypeName = parseTypeAnnotation();
+ DartTypeNode redirectedTypeName = parseTypeAnnotationPossiblyFollowedByName();
DartIdentifier redirectedConstructorName = null;
if (optional(Token.PERIOD)) {
redirectedConstructorName = parseIdentifier();
@@ -1649,7 +1649,7 @@
reportError(position(), ParserErrorCode.ONLY_FACTORIES_CAN_REDIRECT);
}
modifiers = modifiers.makeRedirectedConstructor();
- redirectedTypeName = parseTypeAnnotation();
+ redirectedTypeName = parseTypeAnnotationPossiblyFollowedByName();
if (optional(Token.PERIOD)) {
redirectedConstructorName = parseIdentifier();
}
@@ -4911,6 +4911,32 @@
/**
* <pre>
+ * type
+ * : qualified typeArguments? ('.' identifier)?
+ * ;
+ * </pre>
+ */
+ private DartTypeNode parseTypeAnnotationPossiblyFollowedByName() {
+ beginTypeAnnotation();
+ boolean canBeFollowedByPeriod = true;
+ if (peek(Token.IDENTIFIER, Token.LT) || peek(Token.IDENTIFIER, Token.PERIOD, Token.IDENTIFIER, Token.LT)) {
+ canBeFollowedByPeriod = false;
+ }
+ return done(new DartTypeNode(parseQualified(canBeFollowedByPeriod), parseTypeArgumentsOpt()));
+ }
+
+ private boolean peek(Token... tokens) {
+ int index = 0;
+ for (Token token : tokens) {
+ if (peek(index++) != token) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * <pre>
* typeArguments
* : '<' typeList '>'
* ;

Powered by Google App Engine
This is Rietveld 408576698