code: private Stmt.Return parseReturnStatement(EnclosingScope scope) {
  		int start = index;
  		match(Return);
  		// A return statement may optionally have one or more return
  		// expressions. Therefore, we first skip all whitespace on the given
  		// line.
  		int next = skipLineSpace(index);
  		// Then, we check whether or not we reached the end of the line. If not,
  		// then we assume what's remaining is the returned expression. This
  		// means expressions must start on the same line as a return. Otherwise,
  		// a potentially cryptic error message will be given.
  		Tuple<Expr> returns;
  		if (next < tokens.size() && tokens.get(next).kind != NewLine) {
  			returns = parseExpressions(scope, false);
  		} else {
  			returns = new Tuple<>();
  		}
  		// Finally, at this point we are expecting a new-line to signal the
  		// end-of-statement.
  		int end = index;
  		matchEndLine();
  		// Done.
  		return annotateSourceLocation(new Stmt.Return(returns), start, end-1);
  	}
docs: Parse a return statement, which has the form:
  
  <pre>
  ReturnStmt ::= "return" [Expr] NewLine
  </pre>
  
  The optional expression is referred to as the <i>return value</i>. Note
  that, the returned expression (if there is one) must begin on the same
  line as the return statement itself.
  
  @param scope
  The enclosing scope for this statement, which determines the
  set of visible (i.e. declared) variables and also the current
  indentation level.
  
  @see wyc.lang.Stmt.Return
  @return