[fpc-devel] Dangerous optimization in CASE..OF

Ondrej Pokorny lazarus at kluug.net
Sun Apr 22 12:05:03 CEST 2018


On 22.04.2018 10:46, Luca Olivetti wrote:
> El 22/04/18 a les 06:53, Ondrej Pokorny ha escrit:
>
>> My goal is to get the best from it. If disallowing of IS/AS for enums 
>> with holes in FPC modes is a requirement for applying the patch, I am 
>> OK with this sacrifice.
>
> Why disallow it instead of simply checking if it's one of the valid 
> values?

What do you understand with "valid values"? Do you mean "declared values"?

Reasons why I haven't worked on checking declared values in assigned enums:

1.) It's not "simply checking". The check would be much more complex 
than a simple low-high check. At least I cannot do that for an arbitrary 
assigned enum - I admit I don't have enough compiler knowledge and 
motivation. I don't use assigned enums myself.

2.) I am not even 100% sure what valid values are in assigned enums. At 
least no FPC developer has confirmed yet what they understand with valid 
values for assigned enums. I assume only "declared values" are "valid 
values" (unlike in Delphi where the whole range is valid) but nobody 
from FPC team has confirmed it yet (or I missed it).

3.) It is potentially very dangerous if the IS/AS operator behaved 
differently in Delphi and FPC mode. I feel that modes are more about 
syntax sugar and not about substantially different behavior. The clean 
way to go is to write a compiler intrinsic that checks for declared 
values only (in all modes) and a different intrinsic to check for valid 
range (in all modes) and make the IS/AS operator to duplicate one of 
these intrinsics on all modes, eventually disabling it in some modes for 
unclear preconditions.

+++

So: if Sven (or the FPC team) think that the IS/AS check for valid range 
of assigned enums doesn't belong to FPC mode, it's better to disallow it 
there and not change its behavior.

+++

And as always: feel free to extend the patch and add support for 
checking only declared values in assigned enums - if you have the skill 
and motivation and you believe it can and will be applied to FPC trunk. 
(I write this without any offense.)

Ondrej



More information about the fpc-devel mailing list