[git commit] bc: simplify zbc_parse_break_or_continue(), logic is the same
Denys Vlasenko
vda.linux at googlemail.com
Sun Dec 16 18:47:40 UTC 2018
commit: https://git.busybox.net/busybox/commit/?id=563d93c9a4e2a784dfbec6703c572fb88eb99332
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master
function old new delta
zbc_parse_stmt_possibly_auto 2259 2224 -35
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-35) Total: -35 bytes
text data bss dec hex filename
982218 485 7296 989999 f1b2f busybox_old
982183 485 7296 989964 f1b0c busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
miscutils/bc.c | 21 ++++++++++-----------
1 file changed, 10 insertions(+), 11 deletions(-)
diff --git a/miscutils/bc.c b/miscutils/bc.c
index 9ce6ab667..8aaeeaf9f 100644
--- a/miscutils/bc.c
+++ b/miscutils/bc.c
@@ -4358,20 +4358,19 @@ static BC_STATUS zbc_parse_break_or_continue(BcParse *p, BcLexType type)
{
BcStatus s;
size_t i;
- BcInstPtr *ip;
if (type == BC_LEX_KEY_BREAK) {
- if (p->exits.len == 0) RETURN_STATUS(bc_error_bad_token());
-
- i = p->exits.len - 1;
- ip = bc_vec_item(&p->exits, i);
-
- while (!ip->func && i < p->exits.len)
- ip = bc_vec_item(&p->exits, i--);
- if (i >= p->exits.len && !ip->func)
- RETURN_STATUS(bc_error_bad_token());
+ BcInstPtr *ipp;
- i = ip->idx;
+ i = p->exits.len;
+ for (;;) {
+ if (i == 0) // none of the enclosing blocks is a loop
+ RETURN_STATUS(bc_error_bad_token());
+ ipp = bc_vec_item(&p->exits, --i);
+ if (ipp->func != 0)
+ break;
+ }
+ i = ipp->idx;
}
else
i = *((size_t *) bc_vec_top(&p->conds));
More information about the busybox-cvs
mailing list