Procházet zdrojové kódy

* Do not implicitly load Variants unit when compiling units. Doing so is mostly waste of time, and introduces unwanted build dependencies. It is enough to set uf_uses_variants flag for units, and examine these flags when compiling program/library. Resolves #24880.

git-svn-id: trunk@25269 -
sergei před 12 roky
rodič
revize
e1ddd914ac
1 změnil soubory, kde provedl 9 přidání a 8 odebrání
  1. 9 8
      compiler/pmodules.pas

+ 9 - 8
compiler/pmodules.pas

@@ -195,20 +195,24 @@ implementation
     procedure maybeloadvariantsunit;
     procedure maybeloadvariantsunit;
       var
       var
         hp : tmodule;
         hp : tmodule;
+        load : boolean;
       begin
       begin
-        { Do we need the variants unit? Skip this
-          for VarUtils unit for bootstrapping }
-        if (current_module.flags and uf_uses_variants=0) or
-           (current_module.modulename^='VARUTILS') then
-          exit;
+        { Must not be called for units }
+        if current_module.is_unit then
+          InternalError(2013081601);
         { Variants unit already loaded? }
         { Variants unit already loaded? }
+        load:=(current_module.flags and uf_uses_variants)<>0;
         hp:=tmodule(loaded_units.first);
         hp:=tmodule(loaded_units.first);
         while assigned(hp) do
         while assigned(hp) do
           begin
           begin
             if hp.modulename^='VARIANTS' then
             if hp.modulename^='VARIANTS' then
               exit;
               exit;
+            if (hp.flags and uf_uses_variants)<>0 then
+              load:=true;
             hp:=tmodule(hp.next);
             hp:=tmodule(hp.next);
           end;
           end;
+        if (not load) then
+          exit;
         { Variants unit is not loaded yet, load it now }
         { Variants unit is not loaded yet, load it now }
         Message(parser_w_implicit_uses_of_variants_unit);
         Message(parser_w_implicit_uses_of_variants_unit);
         AddUnit('variants');
         AddUnit('variants');
@@ -1158,9 +1162,6 @@ type
          { if an Objective-C module, generate rtti and module info }
          { if an Objective-C module, generate rtti and module info }
          MaybeGenerateObjectiveCImageInfo(current_module.globalsymtable,current_module.localsymtable);
          MaybeGenerateObjectiveCImageInfo(current_module.globalsymtable,current_module.localsymtable);
 
 
-         { do we need to add the variants unit? }
-         maybeloadvariantsunit;
-
          { generate rtti/init tables }
          { generate rtti/init tables }
          write_persistent_type_info(current_module.globalsymtable,true);
          write_persistent_type_info(current_module.globalsymtable,true);
          write_persistent_type_info(current_module.localsymtable,false);
          write_persistent_type_info(current_module.localsymtable,false);