Chromium Code Reviews| 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); |