summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/parse/expr.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/parse/expr.cpp b/src/parse/expr.cpp
index f01272f6..fbc43dcf 100644
--- a/src/parse/expr.cpp
+++ b/src/parse/expr.cpp
@@ -205,6 +205,21 @@ ExprNodeP Parse_ExprBlockLine(TokenStream& lex, bool *add_silence)
return rv;
}
+ case TOK_RWORD_RETURN:
+ case TOK_RWORD_CONTINUE:
+ case TOK_RWORD_BREAK: {
+ PUTBACK(tok, lex);
+ auto ret = Parse_Stmt(lex);
+ if( GET_TOK(tok, lex) != TOK_SEMICOLON ) {
+ CHECK_TOK(tok, TOK_BRACE_CLOSE);
+ PUTBACK(tok, lex);
+ }
+ else {
+ // return/continue/break don't need silencing
+ }
+ return ret;
+ }
+
case TOK_MACRO:
// If a braced macro invocation is the first part of a statement, don't expect a semicolon
if( LOOK_AHEAD(lex) == TOK_BRACE_OPEN || (lex.lookahead(0) == TOK_IDENT && lex.lookahead(1) == TOK_BRACE_OPEN) ) {