diff options
author | Denys Vlasenko | 2019-01-04 05:41:47 +0100 |
---|---|---|
committer | Denys Vlasenko | 2019-01-04 05:41:47 +0100 |
commit | 6842c6062a201cc34a262b4c450cf8e1374e9e3a (patch) | |
tree | e065483955285b3a6fdc3748c067efc2f0e2f3b7 | |
parent | 377cc97b193204595d00a0b8d0d2b52c2d596586 (diff) | |
download | busybox-6842c6062a201cc34a262b4c450cf8e1374e9e3a.zip busybox-6842c6062a201cc34a262b4c450cf8e1374e9e3a.tar.gz |
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>
-rw-r--r-- | miscutils/bc.c | 13 | ||||
-rwxr-xr-x | testsuite/dc.tests | 5 |
2 files changed, 9 insertions, 9 deletions
diff --git a/miscutils/bc.c b/miscutils/bc.c index ec3560c..1e8056c 100644 --- a/miscutils/bc.c +++ b/miscutils/bc.c @@ -5054,6 +5054,9 @@ static BC_STATUS zdc_parse_expr(void) BcParse *p = &G.prs; int i; + if (p->lex == XC_LEX_NLINE) + RETURN_STATUS(zxc_lex_next()); + i = (int)p->lex - (int)XC_LEX_OP_POWER; if (i >= 0) { BcInst inst = dc_LEX_to_INST[i]; @@ -6766,14 +6769,6 @@ static BC_STATUS zxc_vm_process(const char *text) #endif } else { #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(); #endif } @@ -6836,7 +6831,7 @@ static BC_STATUS zxc_vm_process(const char *text) bc_vec_pop_all(&f->code); ip->inst_idx = 0; } - IF_DC(done:) + dbg_lex_done("%s:%d done", __func__, __LINE__); RETURN_STATUS(s); } diff --git a/testsuite/dc.tests b/testsuite/dc.tests index 29b413c..87b1e71 100755 --- a/testsuite/dc.tests +++ b/testsuite/dc.tests @@ -41,6 +41,11 @@ testing "dc complex without spaces (multiple args)" \ "16\n" \ "" "" +testing "dc read" \ + "dc -finput" \ + "2\n9\n1\n" \ + "1?2\nf" "9\n" + optional FEATURE_DC_BIG # All tests below depend on FEATURE_DC_BIG |