Quellcode durchsuchen

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