[fpc-devel] Re: Testing for..in feature

Michael Van Canneyt michael at freepascal.org
Thu Nov 5 09:42:59 CET 2009



On Thu, 5 Nov 2009, Paul Ishenin wrote:

> Florian Klaempfl wrote:
>
>> This rtti isn't published for program use but e.g. writeln(<enum>) uses it.
>
> Yes, I was surprised when I tried to look why writeln gives a runtime error 
> for unexistent element of enum.
>
> Also I looked at compile - it just checks if enum has jumps and refuses 
> typeinfo() call for it. Why does compiler hides this info?

Because - for one thing - the RTTI functions of the typinfo unit will fail on it.

They expect 0 to be the first value, and count(elements)-1 to be the last,
and everything else between should be valid values.

tmyenum = (a,b,c=-1,D);

does not cope with this. If you want to support succ(), pred() and whatnot,
you'll have to rewrite a large part of the RTL and RTTI stuff, which I think
is such a can of works and so risky, that it isn't worth the effort.
You'll also have to write all possible values, and so on. 
A can of worms you don't want to open.

Such enums should be used only to import some braindead C headers.
Like I said, it's just a set of constants, wrapped in a type.

Maybe we should not name them enumerated.

Michael.



More information about the fpc-devel mailing list