mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-01 21:30:35 +02:00
fcl-passrc: proc references: fixed duplicate names
git-svn-id: trunk@38574 -
This commit is contained in:
parent
0f758b78b9
commit
13e050baef
@ -2335,7 +2335,11 @@ var
|
||||
Ref: TPasScopeReference absolute Item;
|
||||
List: TFPList absolute aList;
|
||||
begin
|
||||
List.Add(Ref);
|
||||
while Ref<>nil do
|
||||
begin
|
||||
List.Add(Ref);
|
||||
Ref:=Ref.NextSameName;
|
||||
end;
|
||||
end;
|
||||
|
||||
constructor TPasScopeReferences.Create(aScope: TPasScope);
|
||||
@ -2362,12 +2366,12 @@ function TPasScopeReferences.Add(El: TPasElement; Access: TPSRefAccess
|
||||
): TPasScopeReference;
|
||||
var
|
||||
LoName: String;
|
||||
OldItem, Item: TPasScopeReference;
|
||||
Index: Integer;
|
||||
OldItem, Item, LastItem: TPasScopeReference;
|
||||
begin
|
||||
LoName:=lowercase(El.Name);
|
||||
OldItem:=TPasScopeReference(References.Find(LoName));
|
||||
Item:=OldItem;
|
||||
LastItem:=nil;
|
||||
while Item<>nil do
|
||||
begin
|
||||
if Item.Element=El then
|
||||
@ -2417,14 +2421,14 @@ begin
|
||||
end;
|
||||
exit(Item);
|
||||
end;
|
||||
LastItem:=Item;
|
||||
Item:=Item.NextSameName;
|
||||
end;
|
||||
// new reference
|
||||
Item:=TPasScopeReference.Create;
|
||||
Item.Element:=El;
|
||||
Item.Access:=Access;
|
||||
Index:=References.FindIndexOf(LoName);
|
||||
if Index<0 then
|
||||
if LastItem=nil then
|
||||
begin
|
||||
References.Add(LoName,Item);
|
||||
{$IFDEF VerbosePCUFiler}
|
||||
@ -2433,15 +2437,7 @@ begin
|
||||
{$ENDIF}
|
||||
end
|
||||
else
|
||||
begin
|
||||
OldItem:=TPasScopeReference(References.List^[Index].Data);
|
||||
{$IFDEF VerbosePCUFiler}
|
||||
if lowercase(OldItem.Element.Name)<>LoName then
|
||||
raise EPasResolve.Create('20180219230055');
|
||||
{$ENDIF}
|
||||
Item.NextSameName:=OldItem;
|
||||
References.List^[Index].Data:=Item;
|
||||
end;
|
||||
LastItem.NextSameName:=Item;
|
||||
Result:=Item;
|
||||
end;
|
||||
|
||||
|
@ -518,20 +518,24 @@ var
|
||||
Scope: TPasScope absolute DeclScope;
|
||||
begin
|
||||
if Scope=nil then ;
|
||||
case Ref.Access of
|
||||
psraNone: ;
|
||||
psraRead: UseElement(Ref.Element,rraRead,false);
|
||||
psraWrite: UseElement(Ref.Element,rraAssign,false);
|
||||
psraReadWrite: UseElement(Ref.Element,rraReadAndAssign,false);
|
||||
psraWriteRead:
|
||||
begin
|
||||
UseElement(Ref.Element,rraAssign,false);
|
||||
UseElement(Ref.Element,rraRead,false);
|
||||
end;
|
||||
psraTypeInfo: UsePublished(Ref.Element);
|
||||
else
|
||||
RaiseNotSupported(20180228191928,Ref.Element,dbgs(Ref.Access));
|
||||
end;
|
||||
while Ref<>nil do
|
||||
begin
|
||||
case Ref.Access of
|
||||
psraNone: ;
|
||||
psraRead: UseElement(Ref.Element,rraRead,false);
|
||||
psraWrite: UseElement(Ref.Element,rraAssign,false);
|
||||
psraReadWrite: UseElement(Ref.Element,rraReadAndAssign,false);
|
||||
psraWriteRead:
|
||||
begin
|
||||
UseElement(Ref.Element,rraAssign,false);
|
||||
UseElement(Ref.Element,rraRead,false);
|
||||
end;
|
||||
psraTypeInfo: UsePublished(Ref.Element);
|
||||
else
|
||||
RaiseNotSupported(20180228191928,Ref.Element,dbgs(Ref.Access));
|
||||
end;
|
||||
Ref:=Ref.NextSameName;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TPasAnalyzer.RaiseInconsistency(const Id: int64; Msg: string);
|
||||
|
Loading…
Reference in New Issue
Block a user