[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