diff options
Diffstat (limited to 'miscutils/bc.c')
-rw-r--r-- | miscutils/bc.c | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/miscutils/bc.c b/miscutils/bc.c index e5726ca40..6d8e2d991 100644 --- a/miscutils/bc.c +++ b/miscutils/bc.c | |||
@@ -4121,18 +4121,15 @@ static BC_STATUS zbc_parse_return(void) | |||
4121 | if (s) RETURN_STATUS(s); | 4121 | if (s) RETURN_STATUS(s); |
4122 | 4122 | ||
4123 | t = p->lex; | 4123 | t = p->lex; |
4124 | if (t == XC_LEX_NLINE || t == BC_LEX_SCOLON) | 4124 | if (t == XC_LEX_NLINE || t == BC_LEX_SCOLON || t == BC_LEX_RBRACE) |
4125 | xc_parse_push(BC_INST_RET0); | 4125 | xc_parse_push(BC_INST_RET0); |
4126 | else { | 4126 | else { |
4127 | bool paren = (t == BC_LEX_LPAREN); | 4127 | s = zbc_parse_expr(0); |
4128 | s = bc_parse_expr_empty_ok(0); | ||
4129 | if (s == BC_STATUS_PARSE_EMPTY_EXP) { | ||
4130 | xc_parse_push(BC_INST_RET0); | ||
4131 | s = zxc_lex_next(); | ||
4132 | } | ||
4133 | if (s) RETURN_STATUS(s); | 4128 | if (s) RETURN_STATUS(s); |
4134 | 4129 | ||
4135 | if (!paren || p->lex_last != BC_LEX_RPAREN) { | 4130 | if (t != BC_LEX_LPAREN // "return EXPR", no () |
4131 | || p->lex_last != BC_LEX_RPAREN // example: "return (a) + b" | ||
4132 | ) { | ||
4136 | s = zbc_POSIX_requires("parentheses around return expressions"); | 4133 | s = zbc_POSIX_requires("parentheses around return expressions"); |
4137 | if (s) RETURN_STATUS(s); | 4134 | if (s) RETURN_STATUS(s); |
4138 | } | 4135 | } |