From 51850c818cf909cde0e07091a8015532cc645b7a Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Mon, 13 Sep 2010 01:09:11 +0200 Subject: shell: small code shrink function old new delta arith 680 675 -5 Signed-off-by: Denys Vlasenko --- shell/math.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'shell/math.c') diff --git a/shell/math.c b/shell/math.c index 2f093391f..c698a442b 100644 --- a/shell/math.c +++ b/shell/math.c @@ -635,28 +635,29 @@ arith(const char *expr, int *perrcode, a_e_h_t *math_hooks) goto err; } while (stackptr != stack) { + operator prev_op = *--stackptr; if (op == TOK_RPAREN) { /* The algorithm employed here is simple: while we don't * hit an open paren nor the bottom of the stack, pop * tokens and apply them */ - if (stackptr[-1] == TOK_LPAREN) { - --stackptr; + if (prev_op == TOK_LPAREN) { /* Any operator directly after a */ lasttok = TOK_NUM; /* close paren should consider itself binary */ goto next; } } else { - operator prev_prec = PREC(stackptr[-1]); + operator prev_prec = PREC(prev_op); convert_prec_is_assign(prec); convert_prec_is_assign(prev_prec); - if (prev_prec < prec) - break; - /* check right assoc */ - if (prev_prec == prec && is_right_associativity(prec)) + if (prev_prec < prec + || (prev_prec == prec && is_right_associativity(prec)) + ) { + stackptr++; break; + } } - errcode = arith_apply(*--stackptr, numstack, &numstackptr, math_hooks); + errcode = arith_apply(prev_op, numstack, &numstackptr, math_hooks); if (errcode) goto ret; } -- cgit v1.2.3