diff options
author | 2015-08-10 12:01:34 +0000 | |
---|---|---|
committer | 2015-08-11 07:50:40 +0000 | |
commit | cc0d9954c86a0ba07d4de2bde939d2debf7fea38 (patch) | |
tree | e864c8ae87479c7e7dc88307afcf17de59ca667a /src/main/java/com/google | |
parent | bac37ad709f99c1963a805f767dadea08878d43b (diff) |
Allow return without expression, AST-equivalent to return None.
--
MOS_MIGRATED_REVID=100268427
Diffstat (limited to 'src/main/java/com/google')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/syntax/Parser.java | 15 |
1 files changed, 12 insertions, 3 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 21eb2a5a80..8f590472dc 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 @@ class Parser { } 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 @@ class Parser { 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); } |