[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