[git commit] shell/math: simplify handling of unary plus

Denys Vlasenko vda.linux at googlemail.com
Thu Jun 15 15:16:46 UTC 2023


commit: https://git.busybox.net/busybox/commit/?id=f8263528cd44ac5dc95778556c6fd3feea14742e
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

function                                             old     new   delta
evaluate_string                                     1257    1271     +14
arith_apply                                          977     968      -9
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 14/-9)               Total: 5 bytes

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 shell/math.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/shell/math.c b/shell/math.c
index 4623c979e..a398bcb98 100644
--- a/shell/math.c
+++ b/shell/math.c
@@ -345,7 +345,7 @@ arith_apply(arith_state_t *math_state, operator op, var_or_num_t *numstack, var_
 		rez++;
 	else if (op == TOK_POST_DEC || op == TOK_PRE_DEC)
 		rez--;
-	else if (op != TOK_UPLUS) {
+	else /*if (op != TOK_UPLUS) - always true, we drop TOK_UPLUS earlier */ {
 		/* Binary operators */
 		arith_t right_side_val;
 
@@ -770,8 +770,10 @@ evaluate_string(arith_state_t *math_state, const char *expr)
 		if (lasttok != TOK_NUM) {
 			switch (op) {
 			case TOK_ADD:
-				op = TOK_UPLUS;
-				break;
+				//op = TOK_UPLUS;
+				//break;
+				/* Unary plus does nothing, do not even push it to opstack */
+				continue;
 			case TOK_SUB:
 				op = TOK_UMINUS;
 				break;


More information about the busybox-cvs mailing list