[fpc-devel] The usage of Include() doesn't work any more in 2.3.1
Daniël Mantione
daniel.mantione at freepascal.org
Wed Jul 16 11:05:23 CEST 2008
Op Wed, 16 Jul 2008, schreef Graeme Geldenhuys:
> On Wed, Jul 16, 2008 at 9:40 AM, Daniël Mantione
> <daniel.mantione at freepascal.org> wrote:
>> I think there can be two visions here:
>> - Include is not a real procedure, so this internal implementation detail
>> should be hidden and this can/should be allowed; the
>> compiler internally should convert it into set:=set+[member].
>
> I think this would be ideal. Using Include() is much cleaner than set
> := set + [member]. And yes I understand that as it was implement, you
> could circumvent the getter/setter, but I believe it's something the
> compiler must handle correctly.
>
> It's easy for me (from a developers point of view <wink>) to say, but
> I think that it's up to the compiler to resolve the issue at hand.
> It's not the job of the developer to change all existing code. Surely
> the compiler must be able to detect if set is a property or field
> variable. If it's a property, resolve the call to set := set +
> [member]
This is argumentation for transparantly calling any procedure; it does not
hold as an argument to handle it transparently for "include" only.
> As it stands now, FPC 2.3.1 is going to break a LOT of code. Yes I
> know it was maybe a unsafe way of using Include(), but surely the
> compiler can handle it better. Thoughts?
We are aware it breaks a lot of code, and the fact that "include" is also
affected does not change this, it is just a procedure that has a var
parameter. Any procedure that passes properties to var parameters is
affected.
The reason 2.2 still accepts it is that while the old behaviour is
incorrect, many code may appear to work correctly and we do not want to
break it during a stable series.
Daniël
More information about the fpc-devel
mailing list