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

Reply via email to