diff options
-rw-r--r-- | bin/sh/arith.y | 4 | ||||
-rw-r--r-- | tools/regression/bin/sh/expansion/arith1.0 | 30 |
2 files changed, 32 insertions, 2 deletions
diff --git a/bin/sh/arith.y b/bin/sh/arith.y index fd3d219..5db1633 100644 --- a/bin/sh/arith.y +++ b/bin/sh/arith.y @@ -85,9 +85,9 @@ expr: ARITH_LPAREN expr ARITH_RPAREN { $$ = $2; } | expr ARITH_OR expr - { $$ = $1 ? $1 : $3 ? $3 : 0; } | + { $$ = $1 || $3; } | expr ARITH_AND expr - { $$ = $1 ? ( $3 ? $3 : 0 ) : 0; } | + { $$ = $1 && $3; } | expr ARITH_BOR expr { $$ = $1 | $3; } | expr ARITH_BXOR expr diff --git a/tools/regression/bin/sh/expansion/arith1.0 b/tools/regression/bin/sh/expansion/arith1.0 new file mode 100644 index 0000000..118ba22 --- /dev/null +++ b/tools/regression/bin/sh/expansion/arith1.0 @@ -0,0 +1,30 @@ +# $FreeBSD$ + +failures=0 + +check() { + if [ $(($1)) != $2 ]; then + failures=$((failures+1)) + echo "For $1, expected $2 actual $(($1))" + fi +} + +check "0&&0" 0 +check "1&&0" 0 +check "0&&1" 0 +check "1&&1" 1 +check "2&&2" 1 +check "1&&2" 1 +check "1<<40&&1<<40" 1 +check "1<<40&&4" 1 + +check "0||0" 0 +check "1||0" 1 +check "0||1" 1 +check "1||1" 1 +check "2||2" 1 +check "1||2" 1 +check "1<<40||1<<40" 1 +check "1<<40||4" 1 + +exit $((failures != 0)) |