[fpc-devel] Dangerous optimization in CASE..OF
    Ondrej Pokorny 
    lazarus at kluug.net
       
    Sun Jul  2 18:43:17 CEST 2017
    
    
  
On 02.07.2017 18:28, Jonas Maebe wrote:
> On 02/07/17 18:26, Ondrej Pokorny wrote:
>> Allow me a stupid question: how to convert an integer to enum with 
>> range checking?
>
> The current possibilities and possibly improvements have been 
> mentioned elsewhere in this thread already
> * http://lists.freepascal.org/pipermail/fpc-devel/2017-July/038013.html
> * http://lists.freepascal.org/pipermail/fpc-devel/2017-July/038014.html
Thanks, so there is no enumeration range checking from the compiler at 
all :/ Everything has to be done manually :/
1.) if (I>=Ord(Low(TMyEnum))) and (I<=Ord(High(TMyEnum))) then
It's long and ugly and it is manual checking that the $RANGECHECKS 
directive has no effect to. (Yes, I use it in my code.)
2.) function ValueInEnumRange(TypeInfo : PTypeInfo; AValue : Integer) : 
boolean;
This still involves a manual checking.
Another problem: RTTI is not generated for enums with explicit indexes, 
if I am not mistaken: TEnum = (two = 2, four = 4).
---
IMO FPC/Pascal lacks an assignment operator for enums with range 
checking. Something like:
EnumValue := IntegerValue as TEnum;
Are there any disadvantages of the enum-AS operator that prevents its 
introduction?
Ondrej
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20170702/527c950e/attachment.html>
    
    
More information about the fpc-devel
mailing list