sh: arith: Return only 0 and 1 from && and ||.
This agrees with C, POSIX and other shells.
This commit is contained in:
parent
8ca5ff35e6
commit
63ccda7719
@ -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
|
||||
|
30
tools/regression/bin/sh/expansion/arith1.0
Normal file
30
tools/regression/bin/sh/expansion/arith1.0
Normal file
@ -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))
|
Loading…
x
Reference in New Issue
Block a user