llvmtype: ensure all processed defs get recorded

This is necessary so they get reset as well, as they may be reprocessed while
compiling other units (both by llvmtype and dbgllvm)
This commit is contained in:
Jonas Maebe 2022-04-26 20:25:38 +02:00
parent f832444eaa
commit 13055bb58a

View File

@ -79,6 +79,8 @@ interface
procedure appendsym_const(list:TAsmList;sym:tconstsym);override;
procedure appendsym_absolute(list:TAsmList;sym:tabsolutevarsym);override;
procedure afterappenddef(list: TAsmList; def: tdef); override;
procedure enum_membersyms_callback(p:TObject;arg:pointer);
procedure collect_llvmins_info(deftypelist: tasmlist; p: taillvm);
@ -561,7 +563,6 @@ implementation
procedure TLLVMTypeInfo.appenddef_array(list:TAsmList;def:tarraydef);
begin
record_def(def);
appenddef(list,def.elementdef);
end;
@ -571,7 +572,6 @@ implementation
symdeflist: tfpobjectlist;
i: longint;
begin
record_def(def);
symdeflist:=tabstractrecordsymtable(def.symtable).llvmst.symdeflist;
for i:=0 to symdeflist.Count-1 do
record_def(tllvmshadowsymtableentry(symdeflist[i]).def);
@ -587,7 +587,6 @@ implementation
procedure TLLVMTypeInfo.appenddef_pointer(list:TAsmList;def:tpointerdef);
begin
record_def(def);
appenddef(list,def.pointeddef);
end;
@ -596,7 +595,6 @@ implementation
var
i: longint;
begin
record_def(def);
{ todo: handle mantis #25551; there is no way to create a symbolic
la_type for a procvardef (unless it's a procedure of object/record),
which means that recursive references should become plain "procedure"
@ -664,6 +662,12 @@ implementation
appenddef(list,sym.vardef);
end;
procedure TLLVMTypeInfo.afterappenddef(list: TAsmList; def: tdef);
begin
record_def(def);
inherited;
end;
procedure TLLVMTypeInfo.inserttypeinfo;
@ -771,7 +775,6 @@ implementation
begin
if is_interface(def) then
begin
record_def(def);
record_def(def.vmt_def);
end
else
@ -781,7 +784,6 @@ implementation
procedure TLLVMTypeInfo.appenddef_classref(list: TAsmList; def: tclassrefdef);
begin
record_def(def);
{ can also be an objcclass, which doesn't have a vmt }
if is_class(tclassrefdef(def).pointeddef) then
record_def(tobjectdef(tclassrefdef(def).pointeddef).vmt_def);
@ -790,14 +792,12 @@ implementation
procedure TLLVMTypeInfo.appenddef_variant(list:TAsmList;def: tvariantdef);
begin
record_def(def);
appenddef(list,tabstractrecorddef(search_system_type('TVARDATA').typedef));
end;
procedure TLLVMTypeInfo.appenddef_file(list:TAsmList;def:tfiledef);
procedure TLLVMTypeInfo.appenddef_file(list: TasmList; def: tfiledef);
begin
record_def(def);
case tfiledef(def).filetyp of
ft_text :
appenddef(list,tabstractrecorddef(search_system_type('TEXTREC').typedef));