[fpc-devel] *** GMX Spamverdacht *** Re: Dangerous optimization in CASE..OF

Thorsten Engler thorsten.engler at gmx.net
Sat Apr 14 14:38:19 CEST 2018


Eh, Ozz? Did you actually read this thread?

It has nothing to do with the declared type of i. it compares the current value of i against the range of the specified type and will return true if the current value falls inside that range.

5 is TSubRange -> true
2000 is TSubRange -> false

Also:

case i as TSubRange of //exception if i < -5 or i > 5



> -----Original Message-----
> From: fpc-devel <fpc-devel-bounces at lists.freepascal.org> On Behalf
> Of Ozz Nixon
> Sent: Saturday, 14 April 2018 22:13
> To: FPC developers' list <fpc-devel at lists.freepascal.org>
> Subject: *** GMX Spamverdacht *** Re: [fpc-devel] Dangerous
> optimization in CASE..OF
> 
> I have to ask why?
> 
> i is Int64 only, will always be int64 only, so all other
> comparisons are always skipped.
> 
> I could see this, inside a method with an untyped parameter:
> 
> procedure doSomething(myvar;out success:boolean); Begin
>    {… your if is comparisons …}
> end;
> 
> This opens your method to be used for all types for param1.
> 
> Ozz
> 
> > On Apr 14, 2018, at 5:51 AM, Thorsten Engler
> <thorsten.engler at gmx.net> wrote:
> >
> > I haven't checked out the changes you made to the compiler, so
> you might have already covered this, but while you are at it, you
> might want to just make this work for any ordinal type with a well-
> defined upper/lower bound (any type for which High()/Low() can be
> evaluated at compile time). So:
> >
> > type
> >  TSubRange=-5..5;
> >  TEnum=(One, Two);
> >
> > var
> >  i: Int64;
> >
> > begin
> >  if i is TSubRange then
> >    //...
> >  If i is TEnum then
> >    //...
> >  If i is SmallInt then
> >    //...
> >
> > (same with "as").
> >
> >
> >
> >> -----Original Message-----
> >> From: fpc-devel <fpc-devel-bounces at lists.freepascal.org> On
> Behalf Of
> >> Ondrej Pokorny
> >> Sent: Saturday, 14 April 2018 19:03
> >> To: fpc-devel at lists.freepascal.org
> >> Subject: Re: [fpc-devel] Dangerous optimization in CASE..OF
> >>
> >> On 14.04.2018 10:39, Thorsten Engler wrote:
> >>> How about following the same schema as with classes?
> >>>
> >>> If 1 is TMyEnum then
> >>>   //use hard cast here
> >>
> >> Yes, that is reasonable as well and it will be easier to
> implement
> >> than the TryIntToEnum/IntToEnum intrinsics for me.
> >>
> >> Ondrej
> >> _______________________________________________
> >> fpc-devel maillist  -  fpc-devel at lists.freepascal.org
> >> http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
> >
> > _______________________________________________
> > fpc-devel maillist  -  fpc-devel at lists.freepascal.org
> > http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
> 
> _______________________________________________
> fpc-devel maillist  -  fpc-devel at lists.freepascal.org
> http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel




More information about the fpc-devel mailing list