Re: using assignment statement as conditional in a where

2016-12-03 Thread rikki cattermole via Digitalmars-d-learn

On 04/12/2016 7:26 AM, dan wrote:

On Saturday, 3 December 2016 at 09:03:25 UTC, rikki cattermole wrote:

On 03/12/2016 9:55 PM, dan wrote:

[...]


If you can use another compiler do so, gdc is on an old
frontend/Phobos now. I recommend ldc or you know the reference
compiler dmd if performance/platform isn't an issue (not that dmd
can't produce decent codegen).

This does compile:

int func() {
return 0;
}

void main() {
int x;
while((x = func()) != 0) {

}
}


Thanks Rikki, that works great and is nearly ideal (doesn't seem to
allow 'auto' but probably that's some scoping issue).

I do prefer gdc because it is gpl'ed, but appreciate any suggestions.

Thanks again for your help!

dan


The only thing in gdc that is GPL is the backend and glue layer.
The frontend is the same one in ldc and dmd.


Re: using assignment statement as conditional in a where

2016-12-03 Thread dan via Digitalmars-d-learn
On Saturday, 3 December 2016 at 09:03:25 UTC, rikki cattermole 
wrote:

On 03/12/2016 9:55 PM, dan wrote:

[...]


If you can use another compiler do so, gdc is on an old 
frontend/Phobos now. I recommend ldc or you know the reference 
compiler dmd if performance/platform isn't an issue (not that 
dmd can't produce decent codegen).


This does compile:

int func() {
return 0;   
}

void main() {
int x;
while((x = func()) != 0) {

}
}


Thanks Rikki, that works great and is nearly ideal (doesn't seem 
to allow 'auto' but probably that's some scoping issue).


I do prefer gdc because it is gpl'ed, but appreciate any 
suggestions.


Thanks again for your help!

dan


Re: using assignment statement as conditional in a where

2016-12-03 Thread rikki cattermole via Digitalmars-d-learn

On 03/12/2016 9:55 PM, dan wrote:

In c, you can have code like this:

static void wtest( void ) {
  int f;
  while ( ( f = some_val( ) ) ) {
printf(" our value is now: %d\n", f );
  }
}

gcc compiles this without warning or error (at least if you use the
double parentheses to assure the compiler that you realize you are
testing an assignment, not a comparison).

I would like to do the same thing in d, something like this:

private void wtest( ) {
  int f;
  while ( ( f = some_val( ) ) ) {
writeln(" our value is now: ", f );
  }
}

or even better:

private void wtest( ) {
  while ( ( auto f = some_val( ) ) ) {
writeln(" our value is now: ", f );
  }
}

This however does not work, and the gdc compiler says "assignment cannot
be used as a condition, perhaps == was meant?"

I don't absolutely have to do it this way, as i guess i could do 'while
(true) {...' and then break if the assignment returns zero.

But i really, really would like to use the idiom of assigning a value
from inside a while condition.

Is it possible to do this?  Perhaps with extra braces or something, like
while ( {something here} ) {  } ?

TIA for any pointers or advice.

dan


If you can use another compiler do so, gdc is on an old frontend/Phobos 
now. I recommend ldc or you know the reference compiler dmd if 
performance/platform isn't an issue (not that dmd can't produce decent 
codegen).


This does compile:

int func() {
return 0;   
}

void main() {
int x;
while((x = func()) != 0) {

}
}



using assignment statement as conditional in a where

2016-12-03 Thread dan via Digitalmars-d-learn

In c, you can have code like this:

static void wtest( void ) {
  int f;
  while ( ( f = some_val( ) ) ) {
printf(" our value is now: %d\n", f );
  }
}

gcc compiles this without warning or error (at least if you use 
the double parentheses to assure the compiler that you realize 
you are testing an assignment, not a comparison).


I would like to do the same thing in d, something like this:

private void wtest( ) {
  int f;
  while ( ( f = some_val( ) ) ) {
writeln(" our value is now: ", f );
  }
}

or even better:

private void wtest( ) {
  while ( ( auto f = some_val( ) ) ) {
writeln(" our value is now: ", f );
  }
}

This however does not work, and the gdc compiler says "assignment 
cannot be used as a condition, perhaps == was meant?"


I don't absolutely have to do it this way, as i guess i could do 
'while (true) {...' and then break if the assignment returns zero.


But i really, really would like to use the idiom of assigning a 
value from inside a while condition.


Is it possible to do this?  Perhaps with extra braces or 
something, like while ( {something here} ) {  } ?


TIA for any pointers or advice.

dan