aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google
diff options
context:
space:
mode:
authorGravatar Laurent Le Brun <laurentlb@google.com>2015-03-18 14:43:58 +0000
committerGravatar Ulf Adams <ulfjack@google.com>2015-03-18 15:53:57 +0000
commitd930682f850d80f67973ca02d10348d767c4ba3b (patch)
tree4b235db9a6f05ad0b9055333d4956b330f1b4f93 /src/main/java/com/google
parente63c3816926736f08edc8ad56801d0f56f11f27c (diff)
Skylark: New error message in the lexer when an unsupported Python keyword is used.
-- MOS_MIGRATED_REVID=88930203
Diffstat (limited to 'src/main/java/com/google')
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/Lexer.java28
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/TokenKind.java4
2 files changed, 23 insertions, 9 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 7531b84ae3..0b96c00060 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
@@ -441,28 +441,46 @@ public final class Lexer {
private static final Map<String, TokenKind> keywordMap = new HashMap<>();
static {
+ // We insert TokenKind.ILLEGAL for every unsupported Python keyword.
+ // List of keywords come from "keyword.kwlist" in Python 3.4.0.
keywordMap.put("and", TokenKind.AND);
keywordMap.put("as", TokenKind.AS);
- keywordMap.put("class", TokenKind.CLASS); // reserved for future expansion
+ keywordMap.put("assert", TokenKind.ILLEGAL);
+ keywordMap.put("break", TokenKind.ILLEGAL);
+ keywordMap.put("class", TokenKind.CLASS);
+ keywordMap.put("continue", TokenKind.ILLEGAL);
keywordMap.put("def", TokenKind.DEF);
+ keywordMap.put("del", TokenKind.ILLEGAL);
keywordMap.put("elif", TokenKind.ELIF);
keywordMap.put("else", TokenKind.ELSE);
- keywordMap.put("except", TokenKind.EXCEPT);
- keywordMap.put("finally", TokenKind.FINALLY);
+ keywordMap.put("except", TokenKind.ILLEGAL);
+ keywordMap.put("finally", TokenKind.ILLEGAL);
keywordMap.put("for", TokenKind.FOR);
- keywordMap.put("from", TokenKind.FROM);
+ keywordMap.put("from", TokenKind.ILLEGAL);
+ keywordMap.put("global", TokenKind.ILLEGAL);
keywordMap.put("if", TokenKind.IF);
- keywordMap.put("import", TokenKind.IMPORT);
+ keywordMap.put("import", TokenKind.ILLEGAL);
keywordMap.put("in", TokenKind.IN);
+ keywordMap.put("is", TokenKind.ILLEGAL);
+ keywordMap.put("lambda", TokenKind.ILLEGAL);
+ keywordMap.put("nonlocal", TokenKind.ILLEGAL);
keywordMap.put("not", TokenKind.NOT);
keywordMap.put("or", TokenKind.OR);
keywordMap.put("pass", TokenKind.PASS);
+ keywordMap.put("raise", TokenKind.ILLEGAL);
keywordMap.put("return", TokenKind.RETURN);
keywordMap.put("try", TokenKind.TRY);
+ keywordMap.put("while", TokenKind.ILLEGAL);
+ keywordMap.put("with", TokenKind.ILLEGAL);
+ keywordMap.put("yield", TokenKind.ILLEGAL);
}
private TokenKind getTokenKindForIdentfier(String id) {
TokenKind kind = keywordMap.get(id);
+ if (kind == TokenKind.ILLEGAL) {
+ error("The Python keyword '" + id + "' is not supported");
+ return TokenKind.IDENTIFIER;
+ }
return kind == null ? TokenKind.IDENTIFIER : kind;
}
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 e7e92b4260..fa73a09852 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
@@ -32,16 +32,12 @@ public enum TokenKind {
EOF("EOF"),
EQUALS("="),
EQUALS_EQUALS("=="),
- EXCEPT("except"),
- FINALLY("finally"),
FOR("for"),
- FROM("from"),
GREATER(">"),
GREATER_EQUALS(">="),
IDENTIFIER("identifier"),
IF("if"),
ILLEGAL("illegal character"),
- IMPORT("import"),
IN("in"),
INDENT("indent"),
INT("integer"),