diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2018-12-16 22:44:51 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2018-12-16 22:44:51 +0100 |
commit | 06ade77002eaa28bb3f19480f68ad270b22bd48e (patch) | |
tree | 257712440df650debf886de5b614c81b6e3af08b | |
parent | 146a79d19c19465aa5a29c271341158b46cc5ade (diff) | |
download | busybox-06ade77002eaa28bb3f19480f68ad270b22bd48e.tar.gz |
bc: simplify use of "ip" in loop parsing functions
function old new delta
zbc_parse_stmt_possibly_auto 2106 2065 -41
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-41) Total: -41 bytes
text data bss dec hex filename
982076 485 7296 989857 f1aa1 busybox_old
982035 485 7296 989816 f1a78 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | miscutils/bc.c | 8 | ||||
-rwxr-xr-x | testsuite/bc.tests | 31 |
2 files changed, 33 insertions, 6 deletions
diff --git a/miscutils/bc.c b/miscutils/bc.c index f85ab1aea..925950d78 100644 --- a/miscutils/bc.c +++ b/miscutils/bc.c @@ -4174,7 +4174,6 @@ static BC_STATUS zbc_parse_while(BcParse *p) { BcStatus s; BcInstPtr ip; - BcInstPtr *ipp; size_t *label; size_t n; @@ -4214,14 +4213,13 @@ static BC_STATUS zbc_parse_while(BcParse *p) bc_parse_push(p, BC_INST_JUMP); bc_parse_pushIndex(p, n); - ipp = bc_vec_top(&p->exits); label = bc_vec_top(&p->conds); dbg_lex("%s:%d BC_INST_JUMP to %d", __func__, __LINE__, *label); bc_parse_push(p, BC_INST_JUMP); bc_parse_pushIndex(p, *label); - label = bc_vec_item(&p->func->labels, ipp->idx); + label = bc_vec_item(&p->func->labels, ip.idx); dbg_lex("%s:%d rewriting label: %d -> %d", __func__, __LINE__, *label, p->func->code.len); *label = p->func->code.len; @@ -4238,7 +4236,6 @@ static BC_STATUS zbc_parse_for(BcParse *p) { BcStatus s; BcInstPtr ip; - BcInstPtr *ipp; size_t *label; size_t cond_idx, exit_idx, body_idx, update_idx; size_t n; @@ -4318,7 +4315,6 @@ static BC_STATUS zbc_parse_for(BcParse *p) bc_parse_push(p, BC_INST_JUMP); bc_parse_pushIndex(p, n); - ipp = bc_vec_top(&p->exits); label = bc_vec_top(&p->conds); //TODO: commonalize? @@ -4326,7 +4322,7 @@ static BC_STATUS zbc_parse_for(BcParse *p) bc_parse_push(p, BC_INST_JUMP); bc_parse_pushIndex(p, *label); - label = bc_vec_item(&p->func->labels, ipp->idx); + label = bc_vec_item(&p->func->labels, ip.idx); dbg_lex("%s:%d rewriting label: %d -> %d", __func__, __LINE__, *label, p->func->code.len); *label = p->func->code.len; diff --git a/testsuite/bc.tests b/testsuite/bc.tests index 21b26008f..987461ebb 100755 --- a/testsuite/bc.tests +++ b/testsuite/bc.tests @@ -76,6 +76,37 @@ testing "bc print 1,2,3" \ "123" \ "" "print 1,2,3" +testing "bc nested loops and breaks" \ + "bc" \ + "\ +11 +21 +31 +22 +12 +99 +" \ + "" "\ +if(1) { + 11 + while(1) { + 21 + while(1) { + 31 + break + 32 + } + 22 + break + 23 + } + 12 +} else { + 88 +} +99 +" + tar xJf bc_large.tar.xz for f in bc*.bc; do |