diff options
author | Laurent Le Brun <laurentlb@google.com> | 2015-03-18 14:43:58 +0000 |
---|---|---|
committer | Ulf Adams <ulfjack@google.com> | 2015-03-18 15:53:57 +0000 |
commit | d930682f850d80f67973ca02d10348d767c4ba3b (patch) | |
tree | 4b235db9a6f05ad0b9055333d4956b330f1b4f93 /src/main/java/com/google/devtools/build/lib | |
parent | e63c3816926736f08edc8ad56801d0f56f11f27c (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/devtools/build/lib')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/syntax/Lexer.java | 28 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/syntax/TokenKind.java | 4 |
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"), |