On Fri, Jul 26, 2013 at 3:02 AM, David Korn <[email protected]> wrote: > cc: [email protected] [email protected] > Subject: Re: Re: [ast-users] Problems with (( !b ... )) and bools... > -------- > > On 25 July 2013 15:44, David Korn <[email protected]> wrote: >> cc: [email protected] >> Subject: Re: Problems with (( !b ... )) and bools... >> -------- >> >> >> Hi! >> >> ---- >> >> The following example prints the wrong boolean value with >> >> ast-ksh.2013-07-19 on SuSE 12.3/AMD64/64bit: >> >> -- snip -- >> >> $ ./arch/linux.i386-64/bin/ksh -c 'bool b=true ; (( >> >> b=(!b)?(!false):(!true) )) ; printf "%s\n" "$b"' >> >> true >> >> -- snip -- >> >> >> >> AFAIK it should print "false" ... >> >> >> >> ---- >> >> Bye, >> >> Roland >> >> >> > >> > true and false are not constants so there is no meaning to true and >> > false unless you create varibles true and false and define them >> > as 1 and 0. >> > >> > bool is an enumeration contain the enumeration constants true and >> > false. This is no different than >> > >> > enum Color=(red green blue yellow) >> >> How can I access the integer value of a enum? Is integer i; (( >> i=Color.green )) valid? >> >> > There is no meaning to !blue inside an arithmetic expression except >> > to do ! blue where blue is a variable. >> >> David, I think you are wrong. First, assuming that ksh arithmetic >> expressions work like ANSI C arithmetic expressions a bool from >> stdbool.h is still of type bool if the negation (!) operator has been >> applied, i.e. the result of !b is still of type bool. >> Second, as the result of !b is of type bool, shouldn't be b=!true a >> valid expression? >> >> > The only operators that recognize enumeriation constants are >> > == != and = >> > when the left hand size is an enumeration variable. >> > >> > My patch allowed >> > enum_var = expr?var1:var2 >> > to recognize var1 and var2 as possible enumeration constants, >> > but it does not recognize !var1. >> >> Why are enumerations handled special? Can the ksh arithmetic >> expression engine not just take their integer value? >> >> Wendy >> > > In C, with <stdbool.h> true and false are constants. In ksh, true and > false are valid variable names. > > bool is an enumeration consisting of enumeration constants true and false. > In C you can't do > int false=5; > In shell you can do > integer false=5. > > > The shell recognizes enumeriation constants are with operators > == != and = > only.
Could you change the enum code to allow that using _Bool.true and _Bool.false refer to their numeric values? That might just solve the problem by making the numeric values accessible without breaking backwards compatibility. Irek _______________________________________________ ast-users mailing list [email protected] http://lists.research.att.com/mailman/listinfo/ast-users
