Reject files when the first line is indented.
A bug in the lexer ignored indentation on the first line of a file. This now
causes an error.
Also, remove the COMMENT token from the lexer. Comments are now accessed separately. This will allow further optimizations in the lexer. It also aligns the code a bit more with the Go implementation.
RELNOTES[INC]:
Indentation on the first line of a file was previously ignored. This is now fixed.
PiperOrigin-RevId: 197889775
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 d593dc0..ec6d323 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
@@ -115,7 +115,6 @@
private final Lexer lexer;
private final EventHandler eventHandler;
- private final List<Comment> comments;
private static final Map<TokenKind, Operator> binaryOperators =
new ImmutableMap.Builder<TokenKind, Operator>()
@@ -167,7 +166,6 @@
private Parser(Lexer lexer, EventHandler eventHandler) {
this.lexer = lexer;
this.eventHandler = eventHandler;
- this.comments = new ArrayList<>();
nextToken();
}
@@ -195,7 +193,7 @@
List<Statement> statements = parser.parseFileInput();
boolean errors = parser.errorsCount > 0 || lexer.containsErrors();
return new ParseResult(
- statements, parser.comments, locationFromStatements(lexer, statements), errors);
+ statements, lexer.getComments(), locationFromStatements(lexer, statements), errors);
}
/**
@@ -415,11 +413,6 @@
private void nextToken() {
if (token == null || token.kind != TokenKind.EOF) {
token = lexer.nextToken();
- // transparently handle comment tokens
- while (token.kind == TokenKind.COMMENT) {
- makeComment();
- token = lexer.nextToken();
- }
}
checkForbiddenKeywords();
if (DEBUGGING) {
@@ -1344,9 +1337,4 @@
}
return setLocation(new ReturnStatement(expression), start, end);
}
-
- // create a comment node
- private void makeComment() {
- comments.add(setLocation(new Comment((String) token.value), token.left, token.right));
- }
}