فهرست منبع

* record rather than immediately append encountered defs, so that we don't
emit the same def multiple times

git-svn-id: trunk@32162 -

Jonas Maebe 9 سال پیش
والد
کامیت
d7bda793f2
1فایلهای تغییر یافته به همراه8 افزوده شده و 6 حذف شده
  1. 8 6
      compiler/llvm/llvmtype.pas

+ 8 - 6
compiler/llvm/llvmtype.pas

@@ -180,7 +180,7 @@ implementation
         for opidx:=0 to p.ops-1 do
         for opidx:=0 to p.ops-1 do
           case p.oper[opidx]^.typ of
           case p.oper[opidx]^.typ of
             top_def:
             top_def:
-              appenddef(deftypelist,p.oper[opidx]^.def);
+              record_def(p.oper[opidx]^.def);
             top_tai:
             top_tai:
               collect_tai_info(deftypelist,p.oper[opidx]^.ai);
               collect_tai_info(deftypelist,p.oper[opidx]^.ai);
             top_ref:
             top_ref:
@@ -201,7 +201,7 @@ implementation
               for paraidx:=0 to p.oper[opidx]^.paras.count-1 do
               for paraidx:=0 to p.oper[opidx]^.paras.count-1 do
                 begin
                 begin
                   callpara:=pllvmcallpara(p.oper[opidx]^.paras[paraidx]);
                   callpara:=pllvmcallpara(p.oper[opidx]^.paras[paraidx]);
-                  appenddef(deftypelist,callpara^.def);
+                  record_def(callpara^.def);
                 end;
                 end;
           end;
           end;
       end;
       end;
@@ -212,19 +212,21 @@ implementation
         case p.typ of
         case p.typ of
           ait_llvmalias:
           ait_llvmalias:
             begin
             begin
-              appenddef(deftypelist,taillvmalias(p).def);
+              record_def(taillvmalias(p).def);
               record_asmsym_def(taillvmalias(p).newsym,taillvmalias(p).def,true);
               record_asmsym_def(taillvmalias(p).newsym,taillvmalias(p).def,true);
             end;
             end;
           ait_llvmdecl:
           ait_llvmdecl:
             begin
             begin
-              appenddef(deftypelist,taillvmdecl(p).def);
+              if taillvmdecl(p).namesym.Name='\01_U_$OBJPAS_$$_EXCEPTIONCLASS' then
+                writeln('here');
+              record_def(taillvmdecl(p).def);
               record_asmsym_def(taillvmdecl(p).namesym,taillvmdecl(p).def,true);
               record_asmsym_def(taillvmdecl(p).namesym,taillvmdecl(p).def,true);
               collect_asmlist_info(deftypelist,taillvmdecl(p).initdata);
               collect_asmlist_info(deftypelist,taillvmdecl(p).initdata);
             end;
             end;
           ait_llvmins:
           ait_llvmins:
             collect_llvmins_info(deftypelist,taillvm(p));
             collect_llvmins_info(deftypelist,taillvm(p));
           ait_typedconst:
           ait_typedconst:
-            appenddef(deftypelist,tai_abstracttypedconst(p).def);
+            record_def(tai_abstracttypedconst(p).def);
         end;
         end;
       end;
       end;
 
 
@@ -472,7 +474,7 @@ implementation
       begin
       begin
         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
-          appenddef(list,tllvmshadowsymtableentry(symdeflist[i]).def);
+          record_def(tllvmshadowsymtableentry(symdeflist[i]).def);
         if assigned(def.typesym) then
         if assigned(def.typesym) then
           list.concat(taillvm.op_size(LA_TYPE,record_def(def)));
           list.concat(taillvm.op_size(LA_TYPE,record_def(def)));
       end;
       end;