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

Michael Van Canneyt michael at freepascal.org
Sat Apr 14 10:24:05 CEST 2018



On Sat, 14 Apr 2018, Ondrej Pokorny wrote:

> On 14.04.2018 9:59, Michael Van Canneyt wrote:
>>
>>
>> On Sat, 14 Apr 2018, Ondrej Pokorny wrote:
>>
>>> On 02.07.2017 18:49, Jonas Maebe wrote:
>>>> I would be in favour of a new intrinsic.
>>>
>>> I have to admit that for some usages I would prefer a compiler 
>>> intrinsic that returns False instead of raising an exception. 
>>> Something like:
>>>
>>> function TryIntToEnum<T: type of enum>(const AValue: Integer; var 
>>> AEnumValue: T): Boolean;
>>
>> Please, don't use this ridiculous generics syntax. If it is a compiler 
>> intrinsic, then
>>
>> function TryIntToEnum(T: atype; const AValue: Integer; var AEnumValue: 
>> aType): Boolean;
>>
>> will work, just like typeinfo() or sizeof() works.
>
> The syntax I used was just for illustration. You don't type the <T: type 
> of enum> part in your own code.
>
> What I wanted to tell was that you can omit the enum type parameter (the 
> first parameter "T: atype" from your function). The type should be 
> possible to get directly from AEnumValue: aType:
>
> function TryIntToEnum(const AValue: Integer; var AEnumValue: aType): 
> Boolean; // aType being an enum type
> - If you like this description more :)
>
> Effectively, you should be able to use:
> var
>   E: TMyEnum;
> begin
>   if TryIntToEnum(1, E) then
>
> instead of
>   if TryIntToEnum(TMyEnum, 1, E) then

I am all for it, although I think the "as" syntax is more elegant, and that
has my preference.

Michael.


More information about the fpc-devel mailing list