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