* get rid of aktcallnode

This commit is contained in:
florian 2026-02-14 22:33:32 +01:00
parent 342abd9cc0
commit 9ae7eba247
2 changed files with 711 additions and 720 deletions

File diff suppressed because it is too large Load Diff

View File

@ -334,13 +334,13 @@ implementation
begin
hlcg.maybe_change_load_node_reg(current_asmdata.CurrAsmList,left,true);
paramanager.createtempparaloc(current_asmdata.CurrAsmList,aktcallnode.procdefinition.proccalloption,parasym,not followed_by_stack_tainting_call_cached,tempcgpara);
paramanager.createtempparaloc(current_asmdata.CurrAsmList,callnode.procdefinition.proccalloption,parasym,not followed_by_stack_tainting_call_cached,tempcgpara);
{ handle varargs first, because parasym is not valid }
if (cpf_varargs_para in callparaflags) then
begin
if paramanager.push_addr_param(vs_value,left.resultdef,
aktcallnode.procdefinition.proccalloption) then
callnode.procdefinition.proccalloption) then
push_addr_para
else
push_value_para;
@ -362,13 +362,13 @@ implementation
param if the method is part of a type helper which
extends a pointer type }
(vo_is_self in parasym.varoptions) and
(aktcallnode.procdefinition.owner.symtabletype=objectsymtable) and
(is_objectpascal_helper(tdef(aktcallnode.procdefinition.owner.defowner))) and
(tobjectdef(aktcallnode.procdefinition.owner.defowner).extendeddef.typ=pointerdef)
(callnode.procdefinition.owner.symtabletype=objectsymtable) and
(is_objectpascal_helper(tdef(callnode.procdefinition.owner.defowner))) and
(tobjectdef(callnode.procdefinition.owner.defowner).extendeddef.typ=pointerdef)
)
) and
paramanager.push_addr_param(parasym.varspez,parasym.vardef,
aktcallnode.procdefinition.proccalloption));
callnode.procdefinition.proccalloption));
if pushaddr then
begin
@ -385,7 +385,7 @@ implementation
push_formal_para
{ Normal parameter }
else if paramanager.push_copyout_param(parasym.varspez,parasym.vardef,
aktcallnode.procdefinition.proccalloption) then
callnode.procdefinition.proccalloption) then
push_copyout_para
else
begin
@ -396,7 +396,7 @@ implementation
(left.resultdef.typ in [pointerdef,classrefdef])
) and
paramanager.push_addr_param(parasym.varspez,parasym.vardef,
aktcallnode.procdefinition.proccalloption)) and
callnode.procdefinition.proccalloption)) and
{ dyn. arrays passed to an array of const must be passed by value, see tests/webtbs/tw4219.pp }
not(
is_array_of_const(parasym.vardef) and
@ -432,12 +432,12 @@ implementation
{ for type helper/record constructor check that it is self parameter }
(
(vo_is_self in parasym.varoptions) and
(aktcallnode.procdefinition.proctypeoption=potype_constructor) and
(callnode.procdefinition.proctypeoption=potype_constructor) and
(parasym.vardef.typ<>objectdef)
) or
(vo_is_funcret in parasym.varoptions)
) then
location_copy(aktcallnode.location,left.location);
location_copy(callnode.location,left.location);
end;
@ -989,7 +989,6 @@ implementation
href : treference;
pop_size : longint;
pvreg : tregister;
oldaktcallnode : tcallnode;
retlocitem: pcgparalocation;
callpvdef: tabstractprocdef;
pd : tprocdef;
@ -1050,14 +1049,8 @@ implementation
end;
end;
{ Process parameters, register parameters will be loaded
in imaginary registers. The actual load to the correct
register is done just before the call }
oldaktcallnode:=aktcallnode;
aktcallnode:=self;
if assigned(left) then
tcallparanode(left).secondcallparan;
aktcallnode:=oldaktcallnode;
{ procedure variable or normal function call ? }
if (right=nil) then