OSDN Git Service

2012-02-08 Pascal Obry <obry@adacore.com>
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 8 Feb 2012 09:29:11 +0000 (09:29 +0000)
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 8 Feb 2012 09:29:11 +0000 (09:29 +0000)
* prj.ads, prj.adb (For_Project_And_Aggregated_Context): New
generic routine with a context parameter.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@183998 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ada/ChangeLog
gcc/ada/prj.adb
gcc/ada/prj.ads

index 16cd2e9..76ff4fb 100644 (file)
@@ -1,3 +1,8 @@
+2012-02-08  Pascal Obry  <obry@adacore.com>
+
+       * prj.ads, prj.adb (For_Project_And_Aggregated_Context): New
+       generic routine with a context parameter.
+
 2012-02-08  Robert Dewar  <dewar@adacore.com>
 
        * a-coinve.adb, sem_util.adb, sem_ch8.adb, a-cobove.adb,
index 1327b58..15cb808 100644 (file)
@@ -1863,6 +1863,56 @@ package body Prj is
       end if;
    end For_Project_And_Aggregated;
 
+   ----------------------------------------
+   -- For_Project_And_Aggregated_Context --
+   ----------------------------------------
+
+   procedure For_Project_And_Aggregated_Context
+     (Root_Project : Project_Id;
+      Root_Tree    : Project_Tree_Ref)
+   is
+
+      procedure Recursive_Process
+        (Project : Project_Id;
+         Tree    : Project_Tree_Ref;
+         Context : Project_Context);
+      --  Process Project and all aggregated projects recursively
+
+      -----------------------
+      -- Recursive_Process --
+      -----------------------
+
+      procedure Recursive_Process
+        (Project : Project_Id;
+         Tree    : Project_Tree_Ref;
+         Context : Project_Context)
+      is
+         Agg : Aggregated_Project_List;
+         Ctx : Project_Context;
+      begin
+         Action (Project, Tree, Context);
+
+         if Project.Qualifier in Aggregate_Project then
+            Ctx :=
+              (In_Aggregate_Lib      => True,
+               From_Encapsulated_Lib =>
+                 Context.From_Encapsulated_Lib
+                   or else
+                 Project.Standalone_Library = Encapsulated);
+
+            Agg := Project.Aggregated_Projects;
+            while Agg /= null loop
+               Recursive_Process (Agg.Project, Agg.Tree, Ctx);
+               Agg := Agg.Next;
+            end loop;
+         end if;
+      end Recursive_Process;
+
+   begin
+      Recursive_Process
+        (Root_Project, Root_Tree, Project_Context'(False, False));
+   end For_Project_And_Aggregated_Context;
+
 --  Package initialization for Prj
 
 begin
index fa36d85..44aa94d 100644 (file)
@@ -1621,6 +1621,17 @@ package Prj is
       With_State         : in out State;
       Include_Aggregated : Boolean := True;
       Imported_First     : Boolean := False);
+   --  As above but with an associated context
+
+   generic
+      with procedure Action
+        (Project : Project_Id;
+         Tree    : Project_Tree_Ref;
+         Context : Project_Context);
+   procedure For_Project_And_Aggregated_Context
+     (Root_Project : Project_Id;
+      Root_Tree    : Project_Tree_Ref);
+   --  As above but with an associated context
 
    function Extend_Name
      (File        : File_Name_Type;