mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-12 09:56:12 +02:00
codetools: fixed saving find declaration result in parent cache, bug #16985
git-svn-id: trunk@26752 -
This commit is contained in:
parent
2124f02726
commit
a6fb6c5e13
@ -147,7 +147,8 @@ type
|
||||
CleanStartPos, CleanEndPos: integer;
|
||||
InFront: boolean): PCodeTreeNodeCacheEntry;
|
||||
function Find(Identifier: PChar): PCodeTreeNodeCacheEntry;
|
||||
procedure Add(Identifier: PChar; CleanStartPos, CleanEndPos: integer;
|
||||
procedure Add(Identifier: PChar;
|
||||
SrcTool: TPascalParserTool; CleanStartPos, CleanEndPos: integer;
|
||||
NewNode: TCodeTreeNode; NewTool: TPascalParserTool; NewCleanPos: integer;
|
||||
Flags: TNodeCacheEntryFlags);
|
||||
procedure Clear;
|
||||
@ -779,7 +780,7 @@ begin
|
||||
end;
|
||||
|
||||
procedure TCodeTreeNodeCache.Add(Identifier: PChar;
|
||||
CleanStartPos, CleanEndPos: integer;
|
||||
SrcTool: TPascalParserTool; CleanStartPos, CleanEndPos: integer;
|
||||
NewNode: TCodeTreeNode; NewTool: TPascalParserTool; NewCleanPos: integer;
|
||||
Flags: TNodeCacheEntryFlags);
|
||||
|
||||
@ -802,23 +803,28 @@ var
|
||||
OldNode: TAVLTreeNode;
|
||||
NewSearchRangeFlags: TNodeCacheEntryFlags;
|
||||
|
||||
function P2S(CleanPos: integer): string;
|
||||
begin
|
||||
Result:=SrcTool.CleanPosToStr(CleanPos);
|
||||
end;
|
||||
|
||||
function ParamsDebugReport: string;
|
||||
var
|
||||
s: string;
|
||||
begin
|
||||
s:=' Ident='+GetIdentifier(Identifier);
|
||||
s:=s+' New: Range='+IntToStr(CleanStartPos)
|
||||
+'-'+IntToStr(CleanEndPos);
|
||||
s:=s+' New: Range='+P2S(CleanStartPos)
|
||||
+'-'+P2S(CleanEndPos);
|
||||
if Owner<>nil then begin
|
||||
s:=s+' Owner='+Owner.DescAsString;
|
||||
s:=s+' OwnerPos='+IntToStr(Owner.StartPos);
|
||||
s:=s+' OwnerPos='+P2S(Owner.StartPos);
|
||||
end;
|
||||
if OldEntry<>nil then begin
|
||||
s:=s+' Old: Range='+IntToStr(OldEntry^.CleanStartPos)
|
||||
+'-'+IntToStr(OldEntry^.CleanEndPos);
|
||||
s:=s+' Old: Range='+P2S(OldEntry^.CleanStartPos)
|
||||
+'-'+P2S(OldEntry^.CleanEndPos);
|
||||
if OldEntry^.NewNode<>nil then begin
|
||||
s:=s+' Node='+OldEntry^.NewNode.DescAsString
|
||||
+' Pos='+IntToStr(OldEntry^.NewNode.StartPos);
|
||||
+' Pos='+OldEntry^.NewTool.CleanPosToStr(OldEntry^.NewNode.StartPos);
|
||||
end else
|
||||
s:=s+' Node=nil';
|
||||
if OldEntry^.NewTool<>nil then begin
|
||||
@ -831,7 +837,7 @@ var
|
||||
end;
|
||||
if NewNode<>nil then begin
|
||||
s:=s+' Node='+NewNode.DescAsString
|
||||
+' Pos='+IntToStr(NewNode.StartPos);
|
||||
+' Pos='+NewTool.CleanPosToStr(NewNode.StartPos);
|
||||
end else
|
||||
s:=s+' Node=nil';
|
||||
if NewTool<>nil then begin
|
||||
|
@ -8971,11 +8971,12 @@ var Node: TCodeTreeNode;
|
||||
else
|
||||
Result:='?'+ANodeOwner.ClassName+'?';
|
||||
end;
|
||||
|
||||
{$ENDIF}
|
||||
begin
|
||||
{$IFDEF CheckNodeTool}CheckNodeTool(StartNode);{$ENDIF}
|
||||
if StartNode=nil then exit;
|
||||
if EndNode=nil then EndNode:=StartNode;
|
||||
|
||||
if Params.NewNode<>nil then begin
|
||||
// identifier found
|
||||
NewNode:=Params.NewNode;
|
||||
@ -9056,17 +9057,7 @@ begin
|
||||
LastNodeCache:=nil;
|
||||
// start with parent of deepest node and end parent of highest
|
||||
Node:=StartNode;
|
||||
if (EndNode<>nil) then begin
|
||||
if (EndNode.GetLevel>StartNode.GetLevel) then begin
|
||||
Node:=EndNode;
|
||||
EndNode:=StartNode.Parent;
|
||||
end else begin
|
||||
EndNode:=EndNode.Parent;
|
||||
end;
|
||||
end else
|
||||
EndNode:=StartNode.Parent;
|
||||
Node:=Node.Parent;
|
||||
while (Node<>nil) do begin
|
||||
repeat
|
||||
if (Node.Desc in AllNodeCacheDescs) then begin
|
||||
if (Node.Cache=nil) then
|
||||
CreateNewNodeCache(Node);
|
||||
@ -9079,7 +9070,7 @@ begin
|
||||
end;
|
||||
{$ENDIF}
|
||||
CurNodeCache.Add(Params.Identifier,
|
||||
CleanStartPos,CleanEndPos,
|
||||
Self,CleanStartPos,CleanEndPos,
|
||||
NewNode,NewTool,NewCleanPos,SearchRangeFlags);
|
||||
{$IFDEF ShowNodeCache}
|
||||
if BeVerbose then begin
|
||||
@ -9091,8 +9082,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
Node:=Node.Parent;
|
||||
if (EndNode=Node) then break;
|
||||
end;
|
||||
until (Node=nil) or (EndNode=Node) or EndNode.HasAsParent(Node);
|
||||
{$IFDEF ShowNodeCache}
|
||||
if BeVerbose then begin
|
||||
DebugLn('=========================))))))))))))))))))))))))))))))))');
|
||||
|
Loading…
Reference in New Issue
Block a user