diff options
author | Denys Vlasenko | 2023-06-15 11:19:15 +0200 |
---|---|---|
committer | Denys Vlasenko | 2023-06-15 11:22:13 +0200 |
commit | 61a4959251667751e424e600c6cb75de39d6b1c3 (patch) | |
tree | 3207a4f46eeac1db063c7b0edd0181661e781d3f | |
parent | 5f56a0388271d2de6cf31af1041bdcb3d11029fc (diff) | |
download | busybox-61a4959251667751e424e600c6cb75de39d6b1c3.zip busybox-61a4959251667751e424e600c6cb75de39d6b1c3.tar.gz |
shell/math: remove special code to handle a?b?c:d:e, it works without it now
The "hack" to virtually parenthesize ? EXPR : made this unnecessary.
The expression is effectively a?(b?(c):d):e and thus b?c:d is evaluated
before continuing with the second :
function old new delta
evaluate_string 1148 1132 -16
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | shell/ash_test/ash-arith/arith-ternary_nested2.right | 1 | ||||
-rwxr-xr-x | shell/ash_test/ash-arith/arith-ternary_nested2.tests | 2 | ||||
-rw-r--r-- | shell/hush_test/hush-arith/arith-ternary_nested2.right | 1 | ||||
-rwxr-xr-x | shell/hush_test/hush-arith/arith-ternary_nested2.tests | 2 | ||||
-rw-r--r-- | shell/math.c | 12 |
5 files changed, 9 insertions, 9 deletions
diff --git a/shell/ash_test/ash-arith/arith-ternary_nested2.right b/shell/ash_test/ash-arith/arith-ternary_nested2.right new file mode 100644 index 0000000..d803196 --- /dev/null +++ b/shell/ash_test/ash-arith/arith-ternary_nested2.right @@ -0,0 +1 @@ +3:3 diff --git a/shell/ash_test/ash-arith/arith-ternary_nested2.tests b/shell/ash_test/ash-arith/arith-ternary_nested2.tests new file mode 100755 index 0000000..e8b8a9e --- /dev/null +++ b/shell/ash_test/ash-arith/arith-ternary_nested2.tests @@ -0,0 +1,2 @@ +exec 2>&1 +echo 3:$((0?1:2?3:4?5:6?7:8)) diff --git a/shell/hush_test/hush-arith/arith-ternary_nested2.right b/shell/hush_test/hush-arith/arith-ternary_nested2.right new file mode 100644 index 0000000..d803196 --- /dev/null +++ b/shell/hush_test/hush-arith/arith-ternary_nested2.right @@ -0,0 +1 @@ +3:3 diff --git a/shell/hush_test/hush-arith/arith-ternary_nested2.tests b/shell/hush_test/hush-arith/arith-ternary_nested2.tests new file mode 100755 index 0000000..e8b8a9e --- /dev/null +++ b/shell/hush_test/hush-arith/arith-ternary_nested2.tests @@ -0,0 +1,2 @@ +exec 2>&1 +echo 3:$((0?1:2?3:4?5:6?7:8)) diff --git a/shell/math.c b/shell/math.c index f6aa02a..8d0c9de 100644 --- a/shell/math.c +++ b/shell/math.c @@ -840,15 +840,9 @@ evaluate_string(arith_state_t *math_state, const char *expr) if (prev_prec < prec || (prev_prec == prec && is_right_associative(prec)) ) { - /* Unless a?b?c:d:... and we are at the second : */ - if (op != TOK_CONDITIONAL_SEP - || prev_op != TOK_CONDITIONAL_SEP - ) { - /* ...x~y@: push @ on opstack */ - opstackptr++; /* undo removal of ~ op */ - goto push_op; - } - /* else: a?b?c:d:. Evaluate b?c:d, replace it on stack with result. Then repeat */ + /* ...x~y@: push @ on opstack */ + opstackptr++; /* undo removal of ~ op */ + goto push_op; } /* else: ...x~y@. Evaluate x~y, replace it on stack with result. Then repeat */ } |