bc: simplify bc_parse_expr_empty_ok()

function                                             old     new   delta
bc_parse_expr_empty_ok                              1810    1791     -19

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2018-12-25 01:43:52 +01:00
parent d0238d83f0
commit 73b3ebc0e1

View File

@ -4664,15 +4664,16 @@ static BcStatus bc_parse_expr_empty_ok(BcParse *p, uint8_t flags)
BcInst prev = XC_INST_PRINT; BcInst prev = XC_INST_PRINT;
size_t nexprs = 0, ops_bgn = p->ops.len; size_t nexprs = 0, ops_bgn = p->ops.len;
unsigned nparens, nrelops; unsigned nparens, nrelops;
bool paren_first, paren_expr, rprn, get_token, assign, bin_last; bool paren_first, paren_expr, rprn, assign, bin_last;
dbg_lex_enter("%s:%d entered", __func__, __LINE__); dbg_lex_enter("%s:%d entered", __func__, __LINE__);
paren_first = (p->l.lex == BC_LEX_LPAREN); paren_first = (p->l.lex == BC_LEX_LPAREN);
nparens = nrelops = 0; nparens = nrelops = 0;
paren_expr = rprn = get_token = assign = false; paren_expr = rprn = assign = false;
bin_last = true; bin_last = true;
for (;;) { for (;;) {
bool get_token;
BcStatus s; BcStatus s;
BcLexType t = p->l.lex; BcLexType t = p->l.lex;
@ -4680,16 +4681,19 @@ static BcStatus bc_parse_expr_empty_ok(BcParse *p, uint8_t flags)
break; break;
dbg_lex("%s:%d t:%d", __func__, __LINE__, t); dbg_lex("%s:%d t:%d", __func__, __LINE__, t);
get_token = false;
s = BC_STATUS_SUCCESS; s = BC_STATUS_SUCCESS;
switch (t) { switch (t) {
case BC_LEX_OP_INC: case BC_LEX_OP_INC:
case BC_LEX_OP_DEC: case BC_LEX_OP_DEC:
s = zbc_parse_incdec(p, &prev, &paren_expr, &nexprs, flags); s = zbc_parse_incdec(p, &prev, &paren_expr, &nexprs, flags);
rprn = get_token = bin_last = false; rprn = bin_last = false;
//get_token = false; - already is
break; break;
case XC_LEX_OP_MINUS: case XC_LEX_OP_MINUS:
s = zbc_parse_minus(p, &prev, ops_bgn, rprn, &nexprs); s = zbc_parse_minus(p, &prev, ops_bgn, rprn, &nexprs);
rprn = get_token = false; rprn = false;
//get_token = false; - already is
bin_last = (prev == XC_INST_MINUS); bin_last = (prev == XC_INST_MINUS);
break; break;
case BC_LEX_OP_ASSIGN_POWER: case BC_LEX_OP_ASSIGN_POWER:
@ -4733,16 +4737,18 @@ static BcStatus bc_parse_expr_empty_ok(BcParse *p, uint8_t flags)
prev = BC_TOKEN_2_INST(t); prev = BC_TOKEN_2_INST(t);
bc_parse_operator(p, t, ops_bgn, &nexprs); bc_parse_operator(p, t, ops_bgn, &nexprs);
s = zbc_lex_next(&p->l); s = zbc_lex_next(&p->l);
rprn = get_token = false; rprn = false;
//get_token = false; - already is
bin_last = (t != BC_LEX_OP_BOOL_NOT); bin_last = (t != BC_LEX_OP_BOOL_NOT);
break; break;
case BC_LEX_LPAREN: case BC_LEX_LPAREN:
if (BC_PARSE_LEAF(prev, rprn)) if (BC_PARSE_LEAF(prev, rprn))
return bc_error_bad_expression(); return bc_error_bad_expression();
nparens++;
paren_expr = rprn = bin_last = false;
get_token = true;
bc_vec_push(&p->ops, &t); bc_vec_push(&p->ops, &t);
nparens++;
get_token = true;
paren_expr = false;
rprn = bin_last = false;
break; break;
case BC_LEX_RPAREN: case BC_LEX_RPAREN:
if (bin_last || prev == XC_INST_BOOL_NOT) if (bin_last || prev == XC_INST_BOOL_NOT)
@ -4754,27 +4760,30 @@ static BcStatus bc_parse_expr_empty_ok(BcParse *p, uint8_t flags)
dbg_lex_done("%s:%d done (returning EMPTY_EXP)", __func__, __LINE__); dbg_lex_done("%s:%d done (returning EMPTY_EXP)", __func__, __LINE__);
return BC_STATUS_PARSE_EMPTY_EXP; return BC_STATUS_PARSE_EMPTY_EXP;
} }
s = zbc_parse_rightParen(p, ops_bgn, &nexprs);
nparens--; nparens--;
paren_expr = rprn = true; paren_expr = rprn = true;
get_token = bin_last = false; bin_last = false;
s = zbc_parse_rightParen(p, ops_bgn, &nexprs); //get_token = false; - already is
break; break;
case XC_LEX_NAME: case XC_LEX_NAME:
if (BC_PARSE_LEAF(prev, rprn)) if (BC_PARSE_LEAF(prev, rprn))
return bc_error_bad_expression(); return bc_error_bad_expression();
paren_expr = true;
rprn = get_token = bin_last = false;
s = zbc_parse_name(p, &prev, flags & ~BC_PARSE_NOCALL); s = zbc_parse_name(p, &prev, flags & ~BC_PARSE_NOCALL);
paren_expr = true;
rprn = bin_last = false;
//get_token = false; - already is
nexprs++; nexprs++;
break; break;
case XC_LEX_NUMBER: case XC_LEX_NUMBER:
if (BC_PARSE_LEAF(prev, rprn)) if (BC_PARSE_LEAF(prev, rprn))
return bc_error_bad_expression(); return bc_error_bad_expression();
bc_parse_pushNUM(p); bc_parse_pushNUM(p);
nexprs++;
prev = XC_INST_NUM; prev = XC_INST_NUM;
paren_expr = get_token = true; get_token = true;
paren_expr = true;
rprn = bin_last = false; rprn = bin_last = false;
nexprs++;
break; break;
case BC_LEX_KEY_IBASE: case BC_LEX_KEY_IBASE:
case BC_LEX_KEY_LAST: case BC_LEX_KEY_LAST:
@ -4783,7 +4792,8 @@ static BcStatus bc_parse_expr_empty_ok(BcParse *p, uint8_t flags)
return bc_error_bad_expression(); return bc_error_bad_expression();
prev = (char) (t - BC_LEX_KEY_IBASE + XC_INST_IBASE); prev = (char) (t - BC_LEX_KEY_IBASE + XC_INST_IBASE);
bc_parse_push(p, (char) prev); bc_parse_push(p, (char) prev);
paren_expr = get_token = true; get_token = true;
paren_expr = true;
rprn = bin_last = false; rprn = bin_last = false;
nexprs++; nexprs++;
break; break;
@ -4793,17 +4803,19 @@ static BcStatus bc_parse_expr_empty_ok(BcParse *p, uint8_t flags)
return bc_error_bad_expression(); return bc_error_bad_expression();
s = zbc_parse_builtin(p, t, flags, &prev); s = zbc_parse_builtin(p, t, flags, &prev);
paren_expr = true; paren_expr = true;
rprn = get_token = bin_last = false; rprn = bin_last = false;
//get_token = false; - already is
nexprs++; nexprs++;
break; break;
case BC_LEX_KEY_READ: case BC_LEX_KEY_READ:
if (BC_PARSE_LEAF(prev, rprn)) if (BC_PARSE_LEAF(prev, rprn))
return bc_error_bad_expression(); return bc_error_bad_expression();
s = zbc_parse_read(p); s = zbc_parse_read(p);
paren_expr = true;
rprn = get_token = bin_last = false;
nexprs++;
prev = XC_INST_READ; prev = XC_INST_READ;
paren_expr = true;
rprn = bin_last = false;
//get_token = false; - already is
nexprs++;
break; break;
case BC_LEX_KEY_SCALE: case BC_LEX_KEY_SCALE:
if (BC_PARSE_LEAF(prev, rprn)) if (BC_PARSE_LEAF(prev, rprn))
@ -4811,12 +4823,12 @@ static BcStatus bc_parse_expr_empty_ok(BcParse *p, uint8_t flags)
s = zbc_parse_scale(p, &prev, flags); s = zbc_parse_scale(p, &prev, flags);
prev = XC_INST_SCALE; prev = XC_INST_SCALE;
paren_expr = true; paren_expr = true;
rprn = get_token = bin_last = false; rprn = bin_last = false;
//get_token = false; - already is
nexprs++; nexprs++;
break; break;
default: default:
s = bc_error_bad_token(); return bc_error_bad_token();
break;
} }
if (s || G_interrupt) // error, or ^C: stop parsing if (s || G_interrupt) // error, or ^C: stop parsing