[fpc-pascal] Re: Duplicate Identifier
Marcos Douglas
md at delfire.net
Fri Mar 2 22:14:10 CET 2012
On Fri, Mar 2, 2012 at 5:14 PM, Sven Barth <pascaldragon at googlemail.com> wrote:
> On 02.03.2012 20:03, Sven Barth wrote:
>>
>> > One more question: why this feature isn't works when used with
>> arguments?
>> > The arguments could have the same name of a property.
>>
>> Normally it should work with arguments as well, but there is a bug if
>> you define a property with an identifier that's used in a method that
>> was defined before the property. In that latter case the check does not
>> work.
>
>
> To illustrate this a bit:
>
> === source begin ===
>
> program dupidenttest;
>
> {$mode objfpc}
>
> type
> TTest1 = class
> fFoo: LongInt;
> property Foo: LongInt read fFoo;
> procedure Bar(Foo: LongInt);
> end;
>
> TTest2 = class
> fFoo: LongInt;
> procedure Bar(Foo: LongInt);
> property Foo: LongInt read fFoo;
> end;
>
> procedure TTest1.Bar(Foo: LongInt);
> begin
>
> end;
>
> procedure TTest2.Bar(Foo: LongInt);
> begin
>
> end;
>
> begin
>
> end.
>
> === source end ===
>
> results in the following compiler output:
>
> === output begin ===
>
> Free Pascal Compiler version 2.6.0 [2011/12/23] for i386
> Copyright (c) 1993-2011 by Florian Klaempfl and others
> Target OS: Linux for i386
> Compiling dupidenttest.pas
> dupidenttest.pas(9,19) Error: Duplicate identifier "Foo"
> dupidenttest.pas(31) Fatal: There were 1 errors compiling module, stopping
> Fatal: Compilation aborted
> Error: /mnt/data/applications/fpc/2.6.0/bin/ppc386 returned an error
> exitcode (normal if you did not specify a source file to be compiled)
>
> === output end ===
>
> If I comment out TTest1 then the program compiles successfully.
>
>
> Regards,
> Sven
OK.
Well, the safe way is using a prefix/suffix in everything.
Thanks for the example.
Marcos Douglas
More information about the fpc-pascal
mailing list