Codetools: Fix the scope of finding nested procedures. Issue #23994, patch by WooBean007.

This commit is contained in:
Juha 2024-12-25 20:21:40 +02:00
parent 27ca5f8137
commit 6dd342cef1

View File

@ -6868,14 +6868,27 @@ var
if AliasDeclarationNode<>nil then begin
UseProcHead(AliasDeclarationNode);
if DeclarationTool=Self then begin
//debugln(['FindDeclarationNode adding alias node ...']);
AddNodeReference(AliasDeclarationNode);
Node:=DeclarationNode.Parent;
while (Node<>nil) do begin
if Node.Desc = ctnProcedure then begin //here context is clearly limited
if Node.EndPos<AliasDeclarationNode.StartPos then begin
AliasDeclarationNode:=nil; //alias candidate out of context
break;
end;
end;
Node:=Node.Parent;
end;
if AliasDeclarationNode.StartPos>DeclarationNode.StartPos then begin
Node:=AliasDeclarationNode;
AliasDeclarationNode:=DeclarationNode;
DeclarationNode:=Node;
if AliasDeclarationNode<>nil then begin
if DeclarationTool=Self then begin
//debugln(['FindDeclarationNode adding alias node ...']);
AddNodeReference(AliasDeclarationNode);
end;
if AliasDeclarationNode.StartPos>DeclarationNode.StartPos then begin
Node:=AliasDeclarationNode;
AliasDeclarationNode:=DeclarationNode;
DeclarationNode:=Node;
end;
end;
end;