aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--miscutils/bc.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/miscutils/bc.c b/miscutils/bc.c
index d2713ceee..eb5aff5e2 100644
--- a/miscutils/bc.c
+++ b/miscutils/bc.c
@@ -3616,6 +3616,7 @@ static void bc_parse_create(BcParse *p, size_t func,
3616static BcStatus bc_parse_else(BcParse *p); 3616static BcStatus bc_parse_else(BcParse *p);
3617static BcStatus bc_parse_stmt(BcParse *p); 3617static BcStatus bc_parse_stmt(BcParse *p);
3618static BcStatus bc_parse_expr(BcParse *p, uint8_t flags, BcParseNext next); 3618static BcStatus bc_parse_expr(BcParse *p, uint8_t flags, BcParseNext next);
3619static BcStatus bc_parse_expr_empty_ok(BcParse *p, uint8_t flags, BcParseNext next);
3619 3620
3620static BcStatus bc_parse_operator(BcParse *p, BcLexType type, size_t start, 3621static BcStatus bc_parse_operator(BcParse *p, BcLexType type, size_t start,
3621 size_t *nexprs, bool next) 3622 size_t *nexprs, bool next)
@@ -4027,7 +4028,7 @@ static BcStatus bc_parse_return(BcParse *p)
4027 bc_parse_push(p, BC_INST_RET0); 4028 bc_parse_push(p, BC_INST_RET0);
4028 else { 4029 else {
4029 4030
4030 s = bc_parse_expr(p, 0, bc_parse_next_expr); 4031 s = bc_parse_expr_empty_ok(p, 0, bc_parse_next_expr);
4031 if (s == BC_STATUS_PARSE_EMPTY_EXP) { 4032 if (s == BC_STATUS_PARSE_EMPTY_EXP) {
4032 bc_parse_push(p, BC_INST_RET0); 4033 bc_parse_push(p, BC_INST_RET0);
4033 s = bc_lex_next(&p->l); 4034 s = bc_lex_next(&p->l);
@@ -4690,7 +4691,7 @@ static BcStatus bc_parse_parse(BcParse *p)
4690 return s; 4691 return s;
4691} 4692}
4692 4693
4693static BcStatus bc_parse_expr(BcParse *p, uint8_t flags, BcParseNext next) 4694static BcStatus bc_parse_expr_empty_ok(BcParse *p, uint8_t flags, BcParseNext next)
4694{ 4695{
4695 BcStatus s = BC_STATUS_SUCCESS; 4696 BcStatus s = BC_STATUS_SUCCESS;
4696 BcInst prev = BC_INST_PRINT; 4697 BcInst prev = BC_INST_PRINT;
@@ -4944,6 +4945,16 @@ static BcStatus bc_parse_expr(BcParse *p, uint8_t flags, BcParseNext next)
4944 return s; 4945 return s;
4945} 4946}
4946 4947
4948static BcStatus bc_parse_expr(BcParse *p, uint8_t flags, BcParseNext next)
4949{
4950 BcStatus s;
4951
4952 s = bc_parse_expr_empty_ok(p, flags, next);
4953 if (s == BC_STATUS_PARSE_EMPTY_EXP)
4954 return bc_error("empty expression");
4955 return s;
4956}
4957
4947static void bc_parse_init(BcParse *p, size_t func) 4958static void bc_parse_init(BcParse *p, size_t func)
4948{ 4959{
4949 bc_parse_create(p, func, bc_parse_parse, bc_lex_token); 4960 bc_parse_create(p, func, bc_parse_parse, bc_lex_token);