Allow return without expression, AST-equivalent to return None.
--
MOS_MIGRATED_REVID=100268427
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 21eb2a5..8f59047 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
@@ -84,7 +84,7 @@
}
private static final EnumSet<TokenKind> STATEMENT_TERMINATOR_SET =
- EnumSet.of(TokenKind.EOF, TokenKind.NEWLINE);
+ EnumSet.of(TokenKind.EOF, TokenKind.NEWLINE, TokenKind.SEMI);
private static final EnumSet<TokenKind> LIST_TERMINATOR_SET =
EnumSet.of(TokenKind.EOF, TokenKind.RBRACKET, TokenKind.SEMI);
@@ -1483,11 +1483,20 @@
token.right);
}
- // return_stmt ::= RETURN expr
+ // return_stmt ::= RETURN [expr]
private ReturnStatement parseReturnStatement() {
int start = token.left;
+ int end = token.right;
expect(TokenKind.RETURN);
- Expression expression = parseExpression();
+
+ Expression expression;
+ if (STATEMENT_TERMINATOR_SET.contains(token.kind)) {
+ // this None makes the AST not correspond to the source exactly anymore
+ expression = new Identifier("None");
+ setLocation(expression, start, end);
+ } else {
+ expression = parseExpression();
+ }
return setLocation(new ReturnStatement(expression), start, expression);
}