Range analysis result printing?

bearophile bearophileHUGS at lycos.com
Sun Jun 23 07:20:51 PDT 2013


I am thinking about opening an enhancement request, but this time 
I first prefer to ask your opinion here.

For this code:

void main() {
     ubyte x;
     ubyte y = x << 1;
}


The range analysis determines that it's conceivable to the result 
of that expression to not fit in y, so the D compiler 2.064alpha 
gives:


temp.d(3): Error: cannot implicitly convert expression 
(cast(int)x << 1) of type int to ubyte


To help the programmer understand faster the mistake in his/her 
code when expressions become more complex I think it's also 
useful to print the range resulting from the analysis, like:


temp.d(3): Error: cannot implicitly convert expression 
(cast(int)x << 1) in interval [0 ... 510] of type int to ubyte


It uses 3 dots because it's an interval that includes the right 
end. Otherwise if you print an interval open on the right in a 
case like this you have to print a ulong.max+1 value:


void main() {
     ulong x;
     int y = x;
}


Do you like?

Bye,
bearophile


More information about the Digitalmars-d-learn mailing list