[fpc-pascal] bug or feature?
Michael Van Canneyt
michael at freepascal.org
Sat Feb 12 17:36:17 CET 2022
On Sat, 12 Feb 2022, Sven Barth via fpc-pascal wrote:
> Michael Van Canneyt via fpc-pascal <fpc-pascal at lists.freepascal.org>
> schrieb am Sa., 12. Feb. 2022, 12:14:
>
>>
>>
>> On Sat, 12 Feb 2022, Mattias Gaertner via fpc-pascal wrote:
>>
>>> Hi,
>>>
>>> This can't be right, can it?
>>>
>>> type
>>> TBird = class
>>> procedure Fly;
>>> end;
>>> TEagle = TBird; // alias
>>>
>>> procedure TEagle.Fly;
>>> begin
>>> end;
>>
>> Personally, I would not allow this.
>> But Delphi compiles and runs it...
>>
>> Maybe something to check for {$mode objfpc} =-)
>>
>
> The compiler does not have any real tracking for non-type aliases... As far
> as the compiler is concerned these are interchangeable...
I think Mattias just got some more gray hairs :-)
So if I understand this correctly, I can do
---
Interface
Type
TSomeReallyAnnoyingIncrediblyLongClassName = Class
Procedure DoSomething;
end;
implementation
Type
T1 = TSomeReallyAnnoyingUltraLongClassName;
procedure T1.DoSomething;
begin
end;
---
And consequently also
---
Interface
Type
TSomeReallyAnnoyingIncrediblyLongClassName = Class
Type
TSomeReallyAnnoyingSubClass = class
Procedure DoSomething;
end;
end;
implementation
Type
T1 = TSomeReallyAnnoyingIncrediblyLongClassName.TSomeReallyAnnoyingSubClass;
procedure T1.DoSomething;
begin
end;
---
The lazarus code tools maintainer will have a field day with this one ;-)
Michael.
PS. Just tested, the compiler accepts both... Amazing, I never thought this
would be possible. I'd better update the docs :-)
More information about the fpc-pascal
mailing list