[Lazarus] Wrong Duplicate Identifier error message?

Michael Van Canneyt michael at freepascal.org
Thu Jul 2 09:17:51 CEST 2020



On Thu, 2 Jul 2020, Special via lazarus wrote:

> Am 01.07.2020 um 20:36 schrieb Mattias Gaertner via lazarus:
>> On Wed, 1 Jul 2020 20:15:45 +0200
>> Special via lazarus <lazarus at lists.lazarus-ide.org> wrote:
>>
>>> [...]
>>> the following unit throws an (I think wrong) compile error "Duplicate
>>> identifier 'Connection'". This happens Lazarus with 2.0.8 under Win
>>> 10 (64). According to Nicklaus Wirth and Kathleen Jensen ('Pascal
>>> User Manual and Report') there is no duplicate  identifier in this
>>> unit, since 'Connection' in procedure Proc ist strictly local and
>>> does not interfere with Identfiers outside this procedure.
>> You are aware, that this manual was way before Object Pascal?
>>
>> 
>>> Code:
>>>
>>> unit DoubleDefinition;
>>> {$mode objfpc}{$H+}
>> $mode objfpc is more strict on duplicates.
>> FPC supports other modes like $mode Delphi, which allows this
>> duplicate.
>>
>> Mattias
>
> Here there is no Duplicate Identifier error message:
>
> program Duplicate;
> {$mode objfpc}{$H+}
>
> var TestVar: string;
>
> procedure Proc;
> var TestVar: string;
> begin
>   TestVar:= 'zwei';
>   writeln (TestVar)
> end;
>
> begin
>   TestVar:= 'eins';
>   writeln (TestVar);
>   Proc
> end.
>
> Why this inconsistency?

There is no inconsistency: there is no object.

An object in some way represents a single scope of identifiers. 
In that sense, it makes sense to forbid duplicates. It's a thin line.

In practice, I find that the objfpc mode is less error prone 
than the Delphi mode. I had some nasty surprises in the past in
Delphi with duplicate names in methods and properties.

Michael.

Michael.


More information about the lazarus mailing list