+ add function to check whether a procdef can be converted to a function reference

This commit is contained in:
Sven/Sarah Barth 2022-02-06 13:06:16 +01:00
parent 749faa42ee
commit 6fe9a15094

View File

@ -152,6 +152,9 @@ interface
{ used to test compatibility between two pprocvardefs (JM) }
function proc_to_procvar_equal(def1:tabstractprocdef;def2:tprocvardef;checkincompatibleuniv: boolean):tequaltype;
{ True if a function can be assigned to a function reference }
function proc_to_funcref_equal(def1:tabstractprocdef;def2:tobjectdef):tequaltype;
{ Checks if an funcref interface can be assigned to the other }
function funcref_equal(def1,def2:tobjectdef):tequaltype;
@ -2631,6 +2634,24 @@ implementation
end;
function proc_to_funcref_equal(def1:tabstractprocdef;def2:tobjectdef):tequaltype;
var
invoke : tprocdef;
begin
result:=te_incompatible;
if not assigned(def1) or not assigned(def2) then
exit;
if not is_invokable(def2) then
internalerror(2022011601);
invoke:=get_invoke_procdef(def2);
result:=proc_to_procvar_equal_internal(def1,invoke,false,true);
{ as long as the two methods are considered convertible we consider the
procdef and the function reference as equal }
if result>te_convert_operator then
result:=te_equal;
end;
function funcref_equal(def1,def2:tobjectdef):tequaltype;
var
invoke1,