aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/syntax/Parser.java
diff options
context:
space:
mode:
authorGravatar Laurent Le Brun <laurentlb@google.com>2015-03-23 16:48:01 +0000
committerGravatar Han-Wen Nienhuys <hanwen@google.com>2015-03-24 16:41:37 +0000
commit0ddcba2d0148e662cca8487d91d8ae797a9a89e6 (patch)
tree74e365e899e8b1a1876d62580e99ef3f7f7a4869 /src/main/java/com/google/devtools/build/lib/syntax/Parser.java
parent4ccfb20f52d2d178d002bc4a71777e9e698a86dd (diff)
Parser: Useful error messages when a Python keyword is used.
-- MOS_MIGRATED_REVID=89307831
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.java26
1 files changed, 26 insertions, 0 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 3ce949dac6..297aa13922 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
@@ -299,6 +299,31 @@ class Parser {
return previous;
}
+ // Keywords that exist in Python and that we don't parse.
+ private static final EnumSet<TokenKind> FORBIDDEN_KEYWORDS =
+ EnumSet.of(TokenKind.AS, TokenKind.ASSERT, TokenKind.BREAK, TokenKind.CONTINUE,
+ TokenKind.DEL, TokenKind.EXCEPT, TokenKind.FINALLY, TokenKind.FROM, TokenKind.GLOBAL,
+ TokenKind.IMPORT, TokenKind.IS, TokenKind.LAMBDA, TokenKind.NONLOCAL, TokenKind.RAISE,
+ TokenKind.TRY, TokenKind.WITH, TokenKind.WHILE, TokenKind.YIELD);
+
+ private void checkForbiddenKeywords(Token token) {
+ if (parsePython || !FORBIDDEN_KEYWORDS.contains(token.kind)) {
+ return;
+ }
+ String error;
+ switch (token.kind) {
+ case ASSERT: error = "'assert' not supported, use 'fail' instead"; break;
+ case TRY: error = "'try' not supported, all exceptions are fatal"; break;
+ case IMPORT: error = "'import' not supported, use 'load' instead"; break;
+ case IS: error = "'is' not supported, use '==' instead"; break;
+ case LAMBDA: error = "'lambda' not supported, declare a function instead"; break;
+ case RAISE: error = "'raise' not supported, use 'fail' instead"; break;
+ case WHILE: error = "'while' not supported, use 'for' instead"; break;
+ default: error = "keyword '" + token.kind.getPrettyName() + "' not supported"; break;
+ }
+ reportError(lexer.createLocation(token.left, token.right), error);
+ }
+
private void nextToken() {
if (pushedToken != null) {
token = pushedToken;
@@ -313,6 +338,7 @@ class Parser {
}
}
}
+ checkForbiddenKeywords(token);
if (DEBUGGING) {
System.err.print(token);
}