mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-25 17:11:08 +02:00
* fixed types in tcgcallnode.load_block_invoke()
o made the method non-virtual, as there is no reason to override it anymore (it was virtual to be able to override it with a typesafe LLVM-specific version) git-svn-id: trunk@32597 -
This commit is contained in:
parent
2046220f56
commit
a249950a45
@ -109,7 +109,7 @@ interface
|
|||||||
{ loads the procvar code pointer into a register with type def }
|
{ loads the procvar code pointer into a register with type def }
|
||||||
procedure load_procvar_codeptr(out reg: tregister; out callprocdef: tabstractprocdef);
|
procedure load_procvar_codeptr(out reg: tregister; out callprocdef: tabstractprocdef);
|
||||||
|
|
||||||
procedure load_block_invoke(toreg: tregister; out callprocdef: tabstractprocdef);virtual;
|
procedure load_block_invoke(toreg: tregister; out callprocdef: tabstractprocdef);
|
||||||
|
|
||||||
function get_call_reg(list: TAsmList): tregister; virtual;
|
function get_call_reg(list: TAsmList): tregister; virtual;
|
||||||
procedure unget_call_reg(list: TAsmList; reg: tregister); virtual;
|
procedure unget_call_reg(list: TAsmList; reg: tregister); virtual;
|
||||||
@ -439,20 +439,13 @@ implementation
|
|||||||
procedure tcgcallnode.load_block_invoke(toreg: tregister; out callprocdef: tabstractprocdef);
|
procedure tcgcallnode.load_block_invoke(toreg: tregister; out callprocdef: tabstractprocdef);
|
||||||
var
|
var
|
||||||
href: treference;
|
href: treference;
|
||||||
srsym: tsym;
|
|
||||||
srsymtable: tsymtable;
|
|
||||||
literaldef: trecorddef;
|
literaldef: trecorddef;
|
||||||
begin
|
begin
|
||||||
literaldef:=get_block_literal_type_for_proc(tabstractprocdef(right.resultdef));
|
literaldef:=get_block_literal_type_for_proc(tabstractprocdef(right.resultdef));
|
||||||
hlcg.location_force_reg(current_asmdata.CurrAsmList,right.location,right.resultdef,cpointerdef.getreusable(literaldef),true);
|
hlcg.location_force_reg(current_asmdata.CurrAsmList,right.location,right.resultdef,cpointerdef.getreusable(literaldef),true);
|
||||||
{ load the invoke pointer }
|
{ load the invoke pointer }
|
||||||
hlcg.reference_reset_base(href,right.resultdef,right.location.register,0,right.resultdef.alignment);
|
hlcg.reference_reset_base(href,right.resultdef,right.location.register,0,right.resultdef.alignment);
|
||||||
if not searchsym_in_record(literaldef,'INVOKE',srsym,srsymtable) or
|
hlcg.g_load_field_reg_by_name(current_asmdata.CurrAsmList,literaldef,procdefinition,'INVOKE',href,toreg);
|
||||||
(srsym.typ<>fieldvarsym) or
|
|
||||||
(tfieldvarsym(srsym).vardef<>voidpointertype) then
|
|
||||||
internalerror(2014071506);
|
|
||||||
href.offset:=tfieldvarsym(srsym).fieldoffset;
|
|
||||||
hlcg.a_load_ref_reg(current_asmdata.CurrAsmList,tfieldvarsym(srsym).vardef,procdefinition,href,toreg);
|
|
||||||
callprocdef:=procdefinition;
|
callprocdef:=procdefinition;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user