1.
- In Delphi mode method parameters can have same name as class members.
- In ObjFpc mode method parameters cannot have same name as class members.
This can be changed by adding {$modeswitch duplicatelocals}...
However,
2.
- In Delphi mode local variables in methods can have same name as class members.
- In ObjFpc mode local variables in methods cannot have same name as class members.
Unlike (1), this cannot be changed with {$modeswitch duplicatelocals}!
This compiles (delphi mode):
program Project1;
{$mode delphi}
type
TClass1 = class(TObject)
public
X: Integer;
procedure Proc1(X: Integer);
procedure Proc2;
end;
// Parameter has same name as member field.
// Compiles in delphi mode
procedure TClass1.Proc1(X: Integer);
begin
end;
// local variable has same name as member field.
// Compiles in delphi mode
procedure TClass1.Proc2;
var
X: Integer;
begin
end;
begin
end.
But this does not compile (objfpc mode with duplicatelocals):
program Project1;
{$mode objfpc}{$H+}
{$ModeSwitch duplicatelocals}
type
TClass1 = class(TObject)
public
X: Integer;
procedure Proc1(X: Integer);
procedure Proc2;
end;
// Parameter has same name as member field.
// This is okay with duplicatelocals
procedure TClass1.Proc1(X: Integer);
begin
end;
// Local variable has same name as member field.
// Unlike with delphi mode, this is compiler error, even with duplicatelocals!
procedure TClass1.Proc2;
var
X: Integer;
begin
end;
begin
end.
Why so?
I would expect that duplicatelocals allows that...
Can you please comment on this, why duplicatelocals doesn't allow this? Is this the decision made for some reason, or something that was just missed to implement?