diff options
| author | Denys Vlasenko <vda.linux@googlemail.com> | 2023-06-29 11:01:50 +0200 |
|---|---|---|
| committer | Denys Vlasenko <vda.linux@googlemail.com> | 2023-06-29 11:01:50 +0200 |
| commit | 6a0ba673820cb6880e2f93f739de7d16d45d2b26 (patch) | |
| tree | a34deefba58982730214d3359475cf74186a7065 /shell | |
| parent | 800207b90a4f5f78cbe65a0f4b3ecd3b93abbd7d (diff) | |
| download | busybox-w32-6a0ba673820cb6880e2f93f739de7d16d45d2b26.tar.gz busybox-w32-6a0ba673820cb6880e2f93f739de7d16d45d2b26.tar.bz2 busybox-w32-6a0ba673820cb6880e2f93f739de7d16d45d2b26.zip | |
shell/math: code shrink
function old new delta
arith_apply 1023 996 -27
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'shell')
| -rw-r--r-- | shell/math.c | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/shell/math.c b/shell/math.c index e15b014aa..5b996703e 100644 --- a/shell/math.c +++ b/shell/math.c | |||
| @@ -313,8 +313,10 @@ arith_lookup_val(arith_state_t *math_state, const char *name, char *endname) | |||
| 313 | } | 313 | } |
| 314 | 314 | ||
| 315 | /* "Applying" a token means performing it on the top elements on the integer | 315 | /* "Applying" a token means performing it on the top elements on the integer |
| 316 | * stack. For an unary operator it will only change the top element, but a | 316 | * stack. For an unary operator it will only change the top element, |
| 317 | * binary operator will pop two arguments and push the result */ | 317 | * a binary operator will pop two arguments and push the result, |
| 318 | * the ternary ?: op will pop three arguments and push the result. | ||
| 319 | */ | ||
| 318 | static NOINLINE const char* | 320 | static NOINLINE const char* |
| 319 | arith_apply(arith_state_t *math_state, operator op, var_or_num_t *numstack, var_or_num_t **numstackptr) | 321 | arith_apply(arith_state_t *math_state, operator op, var_or_num_t *numstack, var_or_num_t **numstackptr) |
| 320 | { | 322 | { |
| @@ -337,9 +339,9 @@ arith_apply(arith_state_t *math_state, operator op, var_or_num_t *numstack, var_ | |||
| 337 | return "malformed ?: operator"; | 339 | return "malformed ?: operator"; |
| 338 | if (expr1->val != 0) /* select expr2 or expr3 */ | 340 | if (expr1->val != 0) /* select expr2 or expr3 */ |
| 339 | top_of_stack--; | 341 | top_of_stack--; |
| 340 | expr1->val = top_of_stack->val; | 342 | rez = top_of_stack->val; |
| 341 | expr1->var_name = NULL; | 343 | top_of_stack = expr1; |
| 342 | return NULL; | 344 | goto ret_rez; |
| 343 | } | 345 | } |
| 344 | if (op == TOK_CONDITIONAL) /* Example: $((a ? b)) */ | 346 | if (op == TOK_CONDITIONAL) /* Example: $((a ? b)) */ |
| 345 | return "malformed ?: operator"; | 347 | return "malformed ?: operator"; |
| @@ -469,13 +471,13 @@ arith_apply(arith_state_t *math_state, operator op, var_or_num_t *numstack, var_ | |||
| 469 | math_state->setvar(top_of_stack->var_name, buf); | 471 | math_state->setvar(top_of_stack->var_name, buf); |
| 470 | *e = c; | 472 | *e = c; |
| 471 | } | 473 | } |
| 472 | /* After saving, make previous value for v++ or v-- */ | 474 | /* VAR++ or VAR--? */ |
| 473 | if (op == TOK_POST_INC) | 475 | if (PREC(op) == PREC_POST) { |
| 474 | rez--; | 476 | /* Do not store new value to stack (keep old value) */ |
| 475 | if (op == TOK_POST_DEC) | 477 | goto ret_NULL; |
| 476 | rez++; | 478 | } |
| 477 | } | 479 | } |
| 478 | 480 | ret_rez: | |
| 479 | top_of_stack->val = rez; | 481 | top_of_stack->val = rez; |
| 480 | ret_NULL: | 482 | ret_NULL: |
| 481 | /* Erase var name, it is just a number now */ | 483 | /* Erase var name, it is just a number now */ |
