From 563d93c9a4e2a784dfbec6703c572fb88eb99332 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Sun, 16 Dec 2018 19:47:40 +0100 Subject: [PATCH] bc: simplify zbc_parse_break_or_continue(), logic is the same 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 --- 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)); -- 2.25.1