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 <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2018-12-16 19:47:40 +01:00
parent a50576a415
commit 563d93c9a4

View File

@ -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());
BcInstPtr *ipp;
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)
i = p->exits.len;
for (;;) {
if (i == 0) // none of the enclosing blocks is a loop
RETURN_STATUS(bc_error_bad_token());
i = ip->idx;
ipp = bc_vec_item(&p->exits, --i);
if (ipp->func != 0)
break;
}
i = ipp->idx;
}
else
i = *((size_t *) bc_vec_top(&p->conds));