diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/syntax/Parser.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/syntax/Parser.java | 21 |
1 files changed, 7 insertions, 14 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Parser.java b/src/main/java/com/google/devtools/build/lib/syntax/Parser.java index f5e5b51659..06f0ac92d0 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/Parser.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/Parser.java @@ -1091,6 +1091,8 @@ public class Parser { // load '(' STRING (COMMA [IDENTIFIER EQUALS] STRING)* COMMA? ')' private void parseLoad(List<Statement> list) { int start = token.left; + expect(TokenKind.LOAD); + expect(TokenKind.LPAREN); if (token.kind != TokenKind.STRING) { expect(TokenKind.STRING); return; @@ -1165,21 +1167,12 @@ public class Parser { } private void parseTopLevelStatement(List<Statement> list) { - // In Python grammar, there is no "top-level statement" and imports are - // considered as "small statements". We are a bit stricter than Python here. - // Check if there is an include - if (token.kind == TokenKind.IDENTIFIER) { - Token identToken = token; - Identifier ident = parseIdent(); - - if (ident.getName().equals("load") && token.kind == TokenKind.LPAREN) { - expect(TokenKind.LPAREN); - parseLoad(list); - return; - } - pushToken(identToken); // push the ident back to parse it as a statement + // Unlike Python imports, load statements can appear only at top-level. + if (token.kind == TokenKind.LOAD) { + parseLoad(list); + } else { + parseStatement(list, ParsingLevel.TOP_LEVEL); } - parseStatement(list, ParsingLevel.TOP_LEVEL); } // small_stmt | 'pass' |