Index: runtime/vm/parser.cc |
=================================================================== |
--- runtime/vm/parser.cc (revision 1158) |
+++ runtime/vm/parser.cc (working copy) |
@@ -1770,6 +1770,9 @@ |
ExpectToken(Token::kRBRACE); |
} else if (CurrentToken() == Token::kARROW) { |
ConsumeToken(); |
+ if (func.IsConstructor()) { |
+ ErrorMsg("constructors may not return a value"); |
+ } |
intptr_t expr_pos = token_index_; |
AstNode* expr = ParseExpr(kAllowConst); |
ASSERT(expr != NULL); |
@@ -4838,8 +4841,13 @@ |
} else if (CurrentToken() == Token::kTRY) { |
statement = ParseTryStatement(label_name); |
} else if (CurrentToken() == Token::kRETURN) { |
+ const intptr_t return_pos = token_index_; |
ConsumeToken(); |
if (CurrentToken() != Token::kSEMICOLON) { |
+ if (current_function().IsConstructor() && |
+ (current_block_->scope->function_level() == 0)) { |
+ ErrorMsg(return_pos, "return of a value not allowed in constructors"); |
+ } |
AstNode* expr = ParseExpr(kAllowConst); |
statement = new ReturnNode(statement_pos, expr); |
} else { |