codetools: fixed saving find declaration result in parent cache, bug #16985

git-svn-id: trunk@26752 -
This commit is contained in:
mattias 2010-07-20 13:06:23 +00:00
parent 2124f02726
commit a6fb6c5e13
2 changed files with 20 additions and 24 deletions

View File

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

View File

@ -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('=========================))))))))))))))))))))))))))))))))');