dc: fix '?'

function                                             old     new   delta
zdc_parse_expr                                       470     479      +9
zxc_vm_process                                       839     814     -25
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 9/-25)             Total: -16 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2019-01-04 05:41:47 +01:00
parent 377cc97b19
commit 6842c6062a
2 changed files with 9 additions and 9 deletions

View File

@ -5054,6 +5054,9 @@ static BC_STATUS zdc_parse_expr(void)
BcParse *p = &G.prs; BcParse *p = &G.prs;
int i; int i;
if (p->lex == XC_LEX_NLINE)
RETURN_STATUS(zxc_lex_next());
i = (int)p->lex - (int)XC_LEX_OP_POWER; i = (int)p->lex - (int)XC_LEX_OP_POWER;
if (i >= 0) { if (i >= 0) {
BcInst inst = dc_LEX_to_INST[i]; BcInst inst = dc_LEX_to_INST[i];
@ -6766,14 +6769,6 @@ static BC_STATUS zxc_vm_process(const char *text)
#endif #endif
} else { } else {
#if ENABLE_DC #if ENABLE_DC
// Most of dc parsing assumes all whitespace,
// including '\n', is eaten.
while (G.prs.lex == XC_LEX_NLINE) {
s = zxc_lex_next();
if (s) goto err;
if (G.prs.lex == XC_LEX_EOF)
goto done;
}
s = zdc_parse_expr(); s = zdc_parse_expr();
#endif #endif
} }
@ -6836,7 +6831,7 @@ static BC_STATUS zxc_vm_process(const char *text)
bc_vec_pop_all(&f->code); bc_vec_pop_all(&f->code);
ip->inst_idx = 0; ip->inst_idx = 0;
} }
IF_DC(done:)
dbg_lex_done("%s:%d done", __func__, __LINE__); dbg_lex_done("%s:%d done", __func__, __LINE__);
RETURN_STATUS(s); RETURN_STATUS(s);
} }

View File

@ -41,6 +41,11 @@ testing "dc complex without spaces (multiple args)" \
"16\n" \ "16\n" \
"" "" "" ""
testing "dc read" \
"dc -finput" \
"2\n9\n1\n" \
"1?2\nf" "9\n"
optional FEATURE_DC_BIG optional FEATURE_DC_BIG
# All tests below depend on FEATURE_DC_BIG # All tests below depend on FEATURE_DC_BIG