[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Tue, 22 Jun 2010 06:47:22 +0000 (08:47 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Tue, 22 Jun 2010 06:47:22 +0000 (08:47 +0200)
2010-06-22  Vincent Celier  <celier@adacore.com>

* prj-nmsc.adb (Find_Sources): When a source from a multi-unit file is
found, check if it's path has aready been found, whatever its index.

2010-06-22  Robert Dewar  <dewar@adacore.com>

* atree.adb, gnatbind.adb: Minor reformatting.
Minor code reorganization.

From-SVN: r161131

gcc/ada/ChangeLog
gcc/ada/atree.adb
gcc/ada/gnatbind.adb
gcc/ada/prj-nmsc.adb

index 317195a..a58cf0d 100644 (file)
@@ -1,3 +1,13 @@
+2010-06-22  Vincent Celier  <celier@adacore.com>
+
+       * prj-nmsc.adb (Find_Sources): When a source from a multi-unit file is
+       found, check if it's path has aready been found, whatever its index.
+
+2010-06-22  Robert Dewar  <dewar@adacore.com>
+
+       * atree.adb, gnatbind.adb: Minor reformatting.
+       Minor code reorganization.
+
 2010-06-21  Robert Dewar  <dewar@adacore.com>
 
        * exp_ch4.adb (Expand_N_Conditional_Expression): Fold if condition
index 6f1fc55..8bf09cb 100644 (file)
@@ -63,15 +63,15 @@ package body Atree is
 
    --  Either way, gnat1 will stop when node 12345 is created
 
-   --  The second method is faster
+   --  The second method is much faster
 
-   --  Similarly, rr and rrd allow breaking on rewriting of a given node.
+   --  Similarly, rr and rrd allow breaking on rewriting of a given node
 
    ww : Node_Id'Base := Node_Id'First - 1;
    pragma Export (Ada, ww); --  trick the optimizer
    Watch_Node : Node_Id'Base renames ww;
-   --  Node to "watch"; that is, whenever a node is created, we check if it is
-   --  equal to Watch_Node, and if so, call New_Node_Breakpoint. You have
+   --  Node to "watch"; that is, whenever a node is created, we check if it
+   --  is equal to Watch_Node, and if so, call New_Node_Breakpoint. You have
    --  presumably set a breakpoint on New_Node_Breakpoint. Note that the
    --  initial value of Node_Id'First - 1 ensures that by default, no node
    --  will be equal to Watch_Node.
@@ -108,7 +108,7 @@ package body Atree is
    --  calls Rewrite_Breakpoint. Otherwise, does nothing.
 
    procedure Node_Debug_Output (Op : String; N : Node_Id);
-   --  Common code for nnd and rrd. Write Op followed by information about N.
+   --  Common code for nnd and rrd, writes Op followed by information about N
 
    -----------------------------
    -- Local Objects and Types --
index cc06ce3..9d7ac41 100644 (file)
@@ -826,7 +826,7 @@ begin
             --  sources) if -R was used.
 
             if List_Closure then
-               declare
+               List_Closure_Display : declare
                   Source : File_Name_Type;
 
                   function Put_In_Sources (S : File_Name_Type) return Boolean;
@@ -852,6 +852,8 @@ begin
                      return True;
                   end Put_In_Sources;
 
+               --  Start of processing for List_Closure_Display
+
                begin
                   Closure_Sources.Init;
 
@@ -862,7 +864,6 @@ begin
                   end if;
 
                   for J in reverse Elab_Order.First .. Elab_Order.Last loop
-
                      Source := Units.Table (Elab_Order.Table (J)).Sfile;
 
                      --  Do not include the sources of the runtime and do not
@@ -875,7 +876,7 @@ begin
                            Write_Str ("   ");
                         end if;
 
-                        Write_Str (Get_Name_String  (Source));
+                        Write_Str (Get_Name_String (Source));
                         Write_Eol;
                      end if;
                   end loop;
@@ -908,7 +909,7 @@ begin
                   if not Zero_Formatting then
                      Write_Eol;
                   end if;
-               end;
+               end List_Closure_Display;
             end if;
          end if;
       end if;
index 7932486..498a01e 100644 (file)
@@ -57,8 +57,14 @@ package body Prj.Nmsc is
       Listed   : Boolean := False;
       Found    : Boolean := False;
    end record;
+
    No_Name_Location : constant Name_Location :=
-     (No_File, No_Location, No_Source, False, False);
+                        (Name     => No_File,
+                         Location => No_Location,
+                         Source   => No_Source,
+                         Listed   => False,
+                         Found    => False);
+
    package Source_Names_Htable is new GNAT.Dynamic_HTables.Simple_HTable
      (Header_Num => Header_Num,
       Element    => Name_Location,
@@ -66,11 +72,10 @@ package body Prj.Nmsc is
       Key        => File_Name_Type,
       Hash       => Hash,
       Equal      => "=");
-   --  Information about file names found in string list attribute
-   --  (Source_Files or Source_List_File).
-   --  Except is set to True if source is a naming exception in the project.
-   --  This is used to check that all referenced files were indeed found on the
-   --  disk.
+   --  File name information found in string list attribute (Source_Files or
+   --  Source_List_File). Except is set to True if source is a naming exception
+   --  in the project. Used to check that all referenced files were indeed
+   --  found on the disk.
 
    type Unit_Exception is record
       Name : Name_Id;  --  ??? duplicates the key
@@ -6405,6 +6410,8 @@ package body Prj.Nmsc is
       declare
          Source : Source_Id;
          Iter   : Source_Iterator;
+         Found  : Boolean := False;
+         Path   : Path_Information;
 
       begin
          Iter := For_Each_Source (Data.Tree, Project.Project);
@@ -6416,16 +6423,22 @@ package body Prj.Nmsc is
               and then Source.Path = No_Path_Information
             then
                if Source.Unit /= No_Unit_Index then
+                  Found := False;
 
                   --  For multi-unit source files, source_id gets duplicated
                   --  once for every unit. Only the first source_id got its
-                  --  full path set. So if it isn't set for that first one,
-                  --  the file wasn't found. Otherwise we need to update for
-                  --  units after the first one.
+                  --  full path set.
 
-                  if Source.Index = 0
-                    or else Source.Index = 1
-                  then
+                  if Source.Index /= 0 then
+                     Path := Files_Htable.Get
+                       (Data.File_To_Source, Source.File).Path;
+
+                     if Path /= No_Path_Information then
+                        Found := True;
+                     end if;
+                  end if;
+
+                  if not Found then
                      Error_Msg_Name_1 := Name_Id (Source.Display_File);
                      Error_Msg_Name_2 := Name_Id (Source.Unit.Name);
                      Error_Msg
@@ -6434,8 +6447,7 @@ package body Prj.Nmsc is
                         No_Location, Project.Project);
 
                   else
-                     Source.Path := Files_Htable.Get
-                       (Data.File_To_Source, Source.File).Path;
+                     Source.Path := Path;
 
                      if Current_Verbosity = High then
                         if Source.Path /= No_Path_Information then
@@ -6443,7 +6455,7 @@ package body Prj.Nmsc is
                                        & Get_Name_String (Source.File)
                                        & " at" & Source.Index'Img
                                        & " to "
-                                       & Get_Name_String (Source.Path.Name));
+                                       & Get_Name_String (Path.Name));
                         end if;
                      end if;
                   end if;