fcl-passrc: proc references: fixed duplicate names

git-svn-id: trunk@38574 -
This commit is contained in:
Mattias Gaertner 2018-03-19 17:07:55 +00:00
parent 0f758b78b9
commit 13e050baef
2 changed files with 28 additions and 28 deletions

View File

@ -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;

View File

@ -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);