Index: pkg/compiler/lib/src/parser/parser.dart |
diff --git a/pkg/compiler/lib/src/parser/parser.dart b/pkg/compiler/lib/src/parser/parser.dart |
index 6ed2657b74a53e158e607f8e2b38a95ab8db671c..56e82f3be055318d488bcc7cecad745a025a1289 100644 |
--- a/pkg/compiler/lib/src/parser/parser.dart |
+++ b/pkg/compiler/lib/src/parser/parser.dart |
@@ -152,12 +152,13 @@ class Parser { |
return token; |
} |
- /// import uri (as identifier)? combinator* ';' |
+ /// import uri (if (test) uri)* (as identifier)? combinator* ';' |
Token parseImport(Token token) { |
Token importKeyword = token; |
listener.beginImport(importKeyword); |
assert(optional('import', token)); |
token = parseLiteralStringOrRecoverExpression(token.next); |
+ token = parseConditionalUris(token); |
Token deferredKeyword; |
if (optional('deferred', token)) { |
deferredKeyword = token; |
@@ -175,12 +176,55 @@ class Parser { |
return token; |
} |
+ /// if (test) uri |
+ Token parseConditionalUris(Token token) { |
+ listener.beginConditionalUris(token); |
+ int count = 0; |
+ while (optional('if', token)) { |
+ count++; |
+ token = parseConditionalUri(token); |
+ } |
+ listener.endConditionalUris(count); |
+ return token; |
+ } |
+ |
+ Token parseConditionalUri(Token token) { |
+ listener.beginConditionalUri(token); |
+ Token ifKeyword = token; |
+ token = expect('if', token); |
+ token = expect('(', token); |
+ token = parseDottedName(token); |
+ Token equalitySign; |
+ if (optional('==', token)) { |
+ equalitySign = token; |
+ token = parseLiteralStringOrRecoverExpression(token.next); |
+ } |
+ token = expect(')', token); |
+ token = parseLiteralStringOrRecoverExpression(token); |
+ listener.endConditionalUri(ifKeyword, equalitySign); |
+ return token; |
+ } |
+ |
+ Token parseDottedName(Token token) { |
+ listener.beginDottedName(token); |
+ Token firstIdentifier = token; |
+ token = parseIdentifier(token); |
+ int count = 1; |
+ while (optional('.', token)) { |
+ token = parseIdentifier(token.next); |
+ count++; |
+ } |
+ listener.endDottedName(count, firstIdentifier); |
+ return token; |
+ } |
+ |
/// export uri combinator* ';' |
Johnni Winther
2015/10/13 08:44:29
Update comment.
floitsch
2015/10/13 21:01:44
Done.
|
Token parseExport(Token token) { |
Token exportKeyword = token; |
listener.beginExport(exportKeyword); |
assert(optional('export', token)); |
token = parseLiteralStringOrRecoverExpression(token.next); |
+ token = parseConditionalUris(token); |
token = parseCombinators(token); |
Token semicolon = token; |
token = expect(';', token); |