Thread overview
bit expression is not a boolean ??
Aug 21, 2003
Mike Wynn
Aug 21, 2003
Walter
Aug 21, 2003
Derek Parnell
Aug 21, 2003
Mike Wynn
Aug 21, 2003
Philippe Mori
Aug 21, 2003
Derek Parnell
Aug 22, 2003
Mike Wynn
Aug 29, 2003
Matthew Wilson
Sep 12, 2003
Walter
August 21, 2003
is this a compiler bug ? v0.69 win32

int main( char[][] args ) {
 bit dostuff;
 if ( dostuff = (args.length > 2) ) {
  return 0;
 }
 return 1;
}

//bit_test.d(4): '=' does not give a boolean result

after all the bit is bool postings etc, I would have expected to be able to
write the above code
and not
 if ( (dostuff = (args.length > 2)) == true ) {
  return 0;
 }


August 21, 2003
This is not about bit types, but more about disallowing '=' as the operator for a boolean test, due to it being usually a typo for '=='.


"Mike Wynn" <mike.wynn@l8night.co.uk> wrote in message news:bi1me1$1n9p$1@digitaldaemon.com...
> is this a compiler bug ? v0.69 win32
>
> int main( char[][] args ) {
>  bit dostuff;
>  if ( dostuff = (args.length > 2) ) {
>   return 0;
>  }
>  return 1;
> }
>
> //bit_test.d(4): '=' does not give a boolean result
>
> after all the bit is bool postings etc, I would have expected to be able
to
> write the above code
> and not
>  if ( (dostuff = (args.length > 2)) == true ) {
>   return 0;
>  }
>
>


August 21, 2003
On Wed, 20 Aug 2003 23:21:09 -0700 (08/21/03 16:21:09)
, Walter <walter@digitalmars.com> wrote:

> This is not about bit types, but more about disallowing '=' as the operator
> for a boolean test, due to it being usually a typo for '=='.
>
>
> "Mike Wynn" <mike.wynn@l8night.co.uk> wrote in message
> news:bi1me1$1n9p$1@digitaldaemon.com...
>> is this a compiler bug ? v0.69 win32
>>
>> int main( char[][] args ) {
>> bit dostuff;
>> if ( dostuff = (args.length > 2) ) {
>> return 0;
>> }
>> return 1;
>> }
>>
>> //bit_test.d(4): '=' does not give a boolean result
>>
>> after all the bit is bool postings etc, I would have expected to be able
> to
>> write the above code
>> and not
>> if ( (dostuff = (args.length > 2)) == true ) {
>> return 0;
>> }

Or maybe ..

 int main( char[][] args ) {
 bit dostuff;
 if ( dostuff = (args.length > 2), dostuff ) {
   return 0;
 }
 return 1;
 }


-- 
Derek
August 21, 2003
"Derek Parnell" <derek.parnell@no.spam> wrote in message news:oprt8s4jv759ej19@news.digitalmars.com...
> On Wed, 20 Aug 2003 23:21:09 -0700 (08/21/03 16:21:09)
> , Walter <walter@digitalmars.com> wrote:
>
> > This is not about bit types, but more about disallowing '=' as the
> > operator
> > for a boolean test, due to it being usually a typo for '=='.
> >
> >
> > "Mike Wynn" <mike.wynn@l8night.co.uk> wrote in message news:bi1me1$1n9p$1@digitaldaemon.com...
> >> is this a compiler bug ? v0.69 win32
> >>
> >> int main( char[][] args ) {
> >> bit dostuff;
> >> if ( dostuff = (args.length > 2) ) {
> >> return 0;
> >> }
> >> return 1;
> >> }
> >>
> >> //bit_test.d(4): '=' does not give a boolean result
> >>
> >> after all the bit is bool postings etc, I would have expected to be
able
> > to
> >> write the above code
> >> and not
> >> if ( (dostuff = (args.length > 2)) == true ) {
> >> return 0;
> >> }
>
> Or maybe ..
>
>   int main( char[][] args ) {
>   bit dostuff;
>   if ( dostuff = (args.length > 2), dostuff ) {
>     return 0;
>   }
>   return 1;
>   }
>
I personally hate that form, like that it does not look too bad, but i've seen some "wonderful" uses of comma operator in if's in the past.


August 21, 2003
> > > This is not about bit types, but more about disallowing '=' as the
> > > operator
> > > for a boolean test, due to it being usually a typo for '=='.
> > >
> > >
> > > "Mike Wynn" <mike.wynn@l8night.co.uk> wrote in message news:bi1me1$1n9p$1@digitaldaemon.com...
> > >> is this a compiler bug ? v0.69 win32
> > >>
> > >> int main( char[][] args ) {
> > >> bit dostuff;
> > >> if ( dostuff = (args.length > 2) ) {
> > >> return 0;
> > >> }
> > >> return 1;
> > >> }
> > >>
> > >> //bit_test.d(4): '=' does not give a boolean result
> > >>
> > >> after all the bit is bool postings etc, I would have expected to be
> able
> > > to
> > >> write the above code
> > >> and not
> > >> if ( (dostuff = (args.length > 2)) == true ) {
> > >> return 0;
> > >> }
> >
> > Or maybe ..
> >
> >   int main( char[][] args ) {
> >   bit dostuff;
> >   if ( dostuff = (args.length > 2), dostuff ) {
> >     return 0;
> >   }
> >   return 1;
> >   }
> >
> I personally hate that form, like that it does not look too bad, but i've seen some "wonderful" uses of comma operator in if's in the past.
>
>

Maybe we should extend if (and also while) such to allows the
following syntax (similar to for):

if (declaration; condition)
{
}

Otherwise yo can always do

{
    declarations;
    if (condition)
    {
    }
}


August 21, 2003
On Thu, 21 Aug 2003 10:01:43 -0400 (08/22/03 00:01:43)
, Philippe Mori <philippe_mori@hotmail.com> wrote:

>> > > This is not about bit types, but more about disallowing '=' as the
>> > > operator
>> > > for a boolean test, due to it being usually a typo for '=='.
>> > >
>> > >
>> > > "Mike Wynn" <mike.wynn@l8night.co.uk> wrote in message
>> > > news:bi1me1$1n9p$1@digitaldaemon.com...
>> > >> is this a compiler bug ? v0.69 win32
>> > >>
>> > >> int main( char[][] args ) {
>> > >> bit dostuff;
>> > >> if ( dostuff = (args.length > 2) ) {
>> > >> return 0;
>> > >> }
>> > >> return 1;
>> > >> }
>> > >>
>> > >> //bit_test.d(4): '=' does not give a boolean result
>> > >>
>> > >> after all the bit is bool postings etc, I would have expected to be
>> able
>> > > to
>> > >> write the above code
>> > >> and not
>> > >> if ( (dostuff = (args.length > 2)) == true ) {
>> > >> return 0;
>> > >> }
>> >
>> > Or maybe ..
>> >
>> >   int main( char[][] args ) {
>> >   bit dostuff;
>> >   if ( dostuff = (args.length > 2), dostuff ) {
>> >     return 0;
>> >   }
>> >   return 1;
>> >   }
>> >
>> I personally hate that form, like that it does not look too bad, but i've
>> seen some "wonderful" uses of comma operator in if's in the past.
>>
>>
>
> Maybe we should extend if (and also while) such to allows the
> following syntax (similar to for):
>
> if (declaration; condition)
> {
> }
>
> Otherwise yo can always do
>
> {
> declarations;
> if (condition)
> {
> }
> }
>
>
>

Possibly, but I was thinking more along the lines of this ...

As the form if ( <EXPRESSION> )  is valid then it might be just simple enough to do ...

 if ( (a = b) )

in other words, if the assignment expression is enclosed in its own parenthesis, it is considered to be a simple single-term expression, which does provided a valid boolean result.

-- 
Derek
August 22, 2003
"Philippe Mori" <philippe_mori@hotmail.com> wrote in message news:bi2j25$31bd$1@digitaldaemon.com...
> > > > This is not about bit types, but more about disallowing '=' as the
> > > > operator
> > > > for a boolean test, due to it being usually a typo for '=='.
> > > >
> > > >
> > > > "Mike Wynn" <mike.wynn@l8night.co.uk> wrote in message news:bi1me1$1n9p$1@digitaldaemon.com...
> > > >> is this a compiler bug ? v0.69 win32
> > > >>
> > > >> int main( char[][] args ) {
> > > >> bit dostuff;
> > > >> if ( dostuff = (args.length > 2) ) {
> > > >> return 0;
> > > >> }
> > > >> return 1;
> > > >> }
> > > >>
> > > >> //bit_test.d(4): '=' does not give a boolean result
> > > >>
> > > >> after all the bit is bool postings etc, I would have expected to be
> > able
> > > > to
> > > >> write the above code
> > > >> and not
> > > >> if ( (dostuff = (args.length > 2)) == true ) {
> > > >> return 0;
> > > >> }
> > >
> > > Or maybe ..
> > >
> > >   int main( char[][] args ) {
> > >   bit dostuff;
> > >   if ( dostuff = (args.length > 2), dostuff ) {
> > >     return 0;
> > >   }
> > >   return 1;
> > >   }
> > >
> > I personally hate that form, like that it does not look too bad, but
i've
> > seen some "wonderful" uses of comma operator in if's in the past.
> >
> Maybe we should extend if (and also while) such to allows the
> following syntax (similar to for):
>
> if (declaration; condition)
> {
> }
>
> Otherwise yo can always do
>
> {
>     declarations;
>     if (condition)
>     {
>     }
> }
>
and how exactly is that better (or different) from
if ( expr, var ) { .... }
and for IS an extended while!

my complaint was if ( bit_assign ) is an error
I agree `if ( object_assign ) ...` or `if ( int_assign ) ...` are not `if
( boolean )` and thus an error (or potential error.


August 29, 2003
> Maybe we should extend if (and also while) such to allows the
> following syntax (similar to for):
>
> if (declaration; condition)
> {
> }

Wow, I thought it did support this!

It must do.

> Otherwise yo can always do
>
> {
>     declarations;
>     if (condition)
>     {
>     }
> }

This is the ugly C++ workaround, but not good enough for D, methinks.

Another imperfection in C++ is the fact that you can declare variables of only one type in a for statement.

We would like to be able to do the following in D:

  for(int i = 0, j, k = 0, long l = 0, m, n = 0; ...)
 {

 } // i, j, k, l, m, n all cease to exist here

Walter, does this present any serious problem for the parser? (I'm assuming it'd be a breeze for a man of your talent.)



September 12, 2003
"Matthew Wilson" <matthew@stlsoft.org> wrote in message news:biojkj$ah0$1@digitaldaemon.com...
> > Maybe we should extend if (and also while) such to allows the
> > following syntax (similar to for):
> >
> > if (declaration; condition)
> > {
> > }
>
> Wow, I thought it did support this!

Nope.

> It must do.

Why?

> > Otherwise yo can always do
> >
> > {
> >     declarations;
> >     if (condition)
> >     {
> >     }
> > }
>
> This is the ugly C++ workaround, but not good enough for D, methinks.
>
> Another imperfection in C++ is the fact that you can declare variables of only one type in a for statement.
>
> We would like to be able to do the following in D:
>
>   for(int i = 0, j, k = 0, long l = 0, m, n = 0; ...)
>  {
>
>  } // i, j, k, l, m, n all cease to exist here
>
> Walter, does this present any serious problem for the parser? (I'm
assuming
> it'd be a breeze for a man of your talent.)

There are some ambiguity problems using typedef'd names after the ,.