aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google')
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/Lexer.java1
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/Parser.java21
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/TokenKind.java1
3 files changed, 9 insertions, 14 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Lexer.java b/src/main/java/com/google/devtools/build/lib/syntax/Lexer.java
index e5805f5bc0..61fdb60349 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/Lexer.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/Lexer.java
@@ -528,6 +528,7 @@ public final class Lexer {
keywordMap.put("in", TokenKind.IN);
keywordMap.put("is", TokenKind.IS);
keywordMap.put("lambda", TokenKind.LAMBDA);
+ keywordMap.put("load", TokenKind.LOAD);
keywordMap.put("nonlocal", TokenKind.NONLOCAL);
keywordMap.put("not", TokenKind.NOT);
keywordMap.put("or", TokenKind.OR);
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'
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/TokenKind.java b/src/main/java/com/google/devtools/build/lib/syntax/TokenKind.java
index 52acce13e9..e5098f18e2 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/TokenKind.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/TokenKind.java
@@ -56,6 +56,7 @@ public enum TokenKind {
LBRACKET("["),
LESS("<"),
LESS_EQUALS("<="),
+ LOAD("load"),
LPAREN("("),
MINUS("-"),
MINUS_EQUALS("-="),