[fpc-devel] Dangerous optimization in CASE..OF
Ondrej Pokorny
lazarus at kluug.net
Sun Apr 15 20:17:45 CEST 2018
On 15.04.2018 19:46, Martok wrote:
> Am 15.04.2018 um 11:09 schrieb Ondrej Pokorny:
>> Please note that I want to support all ordinal values on the left side
>> of the operator. You can then validate a value of variable of the enum
>> type itself.
> Useful indeed! It still strikes me as weird that one will need to add this check
> many times when porting code from Delphi, but at least now one can.
>
> Jonas will probably argue that this is a tautology and should always evaluate to
> true because a variable of a type by definition is of that type, regardless of
> content, but it might be considered as somewhat in line with how "var is class"
> handles nil values as "not an instance of class".
Yes, unfortunately the "implementation detail"/"undefined behavior"
mantra can strike us here as well :/ Actually it can strike us
everywhere. If you take it to an extreme, the Ord(E) result is undefined
for an invalid enum value as well:
type
TMyEnum = (zero, one);
var
E: TMyEnum;
begin
E := TMyEnum(5);
case Ord(E) of
Ord(zero): A;
Ord(two): B;
else
C;
end;
Who knows what will be executed. A, B or C or nothing? Undefined
behavior indeed...
Ondrej
More information about the fpc-devel
mailing list