Browse Source

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)
Jonas Maebe 3 years ago
parent
commit
13055bb58a
1 changed files with 9 additions and 9 deletions
  1. 9 9
      compiler/llvm/llvmtype.pas

+ 9 - 9
compiler/llvm/llvmtype.pas

@@ -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));