|
@@ -33,6 +33,7 @@ interface
|
|
|
protected
|
|
|
function first_int_to_real: tnode; override;
|
|
|
function first_int_to_bool: tnode; override;
|
|
|
+ function first_nil_to_methodprocvar: tnode; override;
|
|
|
procedure second_int_to_int;override;
|
|
|
{ procedure second_string_to_string;override; }
|
|
|
{ procedure second_cstring_to_pchar;override; }
|
|
@@ -45,6 +46,7 @@ interface
|
|
|
{ procedure second_real_to_real;override; }
|
|
|
{ procedure second_cord_to_pointer;override; }
|
|
|
{ procedure second_proc_to_procvar;override; }
|
|
|
+ procedure second_nil_to_methodprocvar; override;
|
|
|
procedure second_bool_to_int;override;
|
|
|
procedure second_int_to_bool;override;
|
|
|
{ procedure second_load_smallset;override; }
|
|
@@ -63,7 +65,7 @@ uses
|
|
|
llvmbase,aasmllvm,
|
|
|
procinfo,
|
|
|
symconst,symtype,symdef,defutil,
|
|
|
- cgbase,cgutils,hlcgobj,pass_2;
|
|
|
+ cgbase,cgutils,tgobj,hlcgobj,pass_2;
|
|
|
|
|
|
{ tllvmtypeconvnode }
|
|
|
|
|
@@ -86,6 +88,15 @@ function tllvmtypeconvnode.first_int_to_bool: tnode;
|
|
|
end;
|
|
|
|
|
|
|
|
|
+function tllvmtypeconvnode.first_nil_to_methodprocvar: tnode;
|
|
|
+ begin
|
|
|
+ result:=inherited;
|
|
|
+ if assigned(result) then
|
|
|
+ exit;
|
|
|
+ expectloc:=LOC_REFERENCE;
|
|
|
+ end;
|
|
|
+
|
|
|
+
|
|
|
procedure tllvmtypeconvnode.second_int_to_int;
|
|
|
var
|
|
|
fromsize, tosize: tcgint;
|
|
@@ -138,6 +149,19 @@ procedure tllvmtypeconvnode.second_int_to_real;
|
|
|
end;
|
|
|
|
|
|
|
|
|
+procedure tllvmtypeconvnode.second_nil_to_methodprocvar;
|
|
|
+ var
|
|
|
+ href: treference;
|
|
|
+ begin
|
|
|
+ tg.gethltemp(current_asmdata.CurrAsmList,resultdef,resultdef.size,tt_normal,href);
|
|
|
+ location_reset_ref(location,LOC_REFERENCE,def_cgsize(resultdef),href.alignment);
|
|
|
+ location.reference:=href;
|
|
|
+ hlcg.g_ptrtypecast_ref(current_asmdata.CurrAsmList,cpointerdef.getreusable(resultdef),cpointerdef.getreusable(methodpointertype),href);
|
|
|
+ hlcg.g_load_const_field_by_name(current_asmdata.CurrAsmList,trecorddef(methodpointertype),'proc',0,href);
|
|
|
+ hlcg.g_load_const_field_by_name(current_asmdata.CurrAsmList,trecorddef(methodpointertype),'self',0,href);
|
|
|
+ end;
|
|
|
+
|
|
|
+
|
|
|
procedure tllvmtypeconvnode.second_bool_to_int;
|
|
|
var
|
|
|
pdef: tdef;
|