From 943da88ddacfbad9b5d730ed61c59cb31529e27e Mon Sep 17 00:00:00 2001 From: Sven/Sarah Barth Date: Wed, 30 Mar 2022 22:42:30 +0200 Subject: [PATCH] * rework tprocsym.Find_procdef_byprocvardef so that its implementation can be used in a more generic manner --- compiler/symsym.pas | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/compiler/symsym.pas b/compiler/symsym.pas index b9f37c08c6..e953763931 100644 --- a/compiler/symsym.pas +++ b/compiler/symsym.pas @@ -128,11 +128,16 @@ interface { tprocsym } tprocsym = class(tstoredsym) + protected type + tprocdefcomparer = function(pd:tprocdef;arg:tobject):tequaltype; protected FProcdefList : TFPObjectList; FProcdefDerefList : TFPList; fgenprocsymovlds : tfpobjectlist; fgenprocsymovldsderefs : tfplist; + + function find_procdef_with_comparer(comparer:tprocdefcomparer;arg:tobject):tprocdef; + class function compare_procvardef(pd:tprocdef;arg:tobject):tequaltype;static; public constructor create(const n : TSymStr);virtual; constructor ppuload(ppufile:tcompilerppufile); @@ -1229,7 +1234,7 @@ implementation end; end; - function Tprocsym.Find_procdef_byprocvardef(d:Tprocvardef):Tprocdef; + function Tprocsym.find_procdef_with_comparer(comparer:tprocdefcomparer;arg:tobject):tprocdef; var i : longint; bestpd, @@ -1249,7 +1254,7 @@ implementation for i:=0 to ps.ProcdefList.Count-1 do begin pd:=tprocdef(ps.ProcdefList[i]); - eq:=proc_to_procvar_equal(pd,d,false); + eq:=comparer(pd,arg); if eq>=te_convert_l1 then begin { multiple procvars with the same equal level } @@ -1289,6 +1294,18 @@ implementation end; + class function Tprocsym.compare_procvardef(pd:tprocdef;arg:tobject):tequaltype; + begin + result:=proc_to_procvar_equal(pd,tprocvardef(arg),false); + end; + + + function Tprocsym.Find_procdef_byprocvardef(d:Tprocvardef):Tprocdef; + begin + result:=find_procdef_with_comparer(@compare_procvardef,d); + end; + + function Tprocsym.Find_procdef_assignment_operator(fromdef,todef:tdef;var besteq:tequaltype;isexplicit:boolean):Tprocdef; var paraidx, realparamcount,