mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-09 16:49:00 +02:00
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:
parent
f832444eaa
commit
13055bb58a
@ -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));
|
||||
|
Loading…
Reference in New Issue
Block a user