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); }