[fpc-pascal] Incompleteness of current fix for #22860

Jonas Maebe jonas.maebe at elis.ugent.be
Thu Sep 13 10:17:01 CEST 2012


JC Chu wrote on Thu, 13 Sep 2012:

> Regarding bug #22860 on the inability to define enumeration members
> using expressions containing previously defined members of the same
> type, the current fix does not provide a complete solution.
>
> The current fix won’t allow for valid declarations such as TYPE
> TMyEnum = (meA, meB = 1 + meA) and TYPE TMyEnum = (meA, meB = meA xor
> meA).

Thanks, I'll fix that.

> Forbidding all of those enumeration-related overloads, however, will
> undo much of what the relaxation patch was intended for.

As I think I mentioned in the original thread, I was never a very big  
fan of that relaxation because of unforeseen side effects.

> The compiler should expect an integer-typed constant expression after
> ‘=’, with a weakened type checking that takes as Ord(x) each
> enumeration member x in the expression, where x must belong to the
> enumeration type being declared, and must appear before the member
> it’s used to define.

I think one of the prime requirements to get readable code is that a  
compilable expression always means the same. Changing the meaning of  
"enum + int" or vice versa depending on whether you're in a type  
definition or in regular code following an overloaded operator goes  
completely against that principle.

Of course, a programmer can circumvent that by defining a particular  
operator in multiple units with different meanings, but at least as  
far as natively supported operators are concerned we can ensure that  
this principle is respected.


Jonas



More information about the fpc-pascal mailing list