From 8364925760fe4705c121c975fca117d26ac81aea Mon Sep 17 00:00:00 2001 From: Pascal Obry Date: Wed, 8 Feb 2012 09:29:11 +0000 Subject: [PATCH] prj.ads, prj.adb (For_Project_And_Aggregated_Context): New generic routine with a context parameter. 2012-02-08 Pascal Obry * prj.ads, prj.adb (For_Project_And_Aggregated_Context): New generic routine with a context parameter. From-SVN: r183998 --- gcc/ada/ChangeLog | 5 +++++ gcc/ada/prj.adb | 50 +++++++++++++++++++++++++++++++++++++++++++++++ gcc/ada/prj.ads | 11 +++++++++++ 3 files changed, 66 insertions(+) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 16cd2e91dd6a..76ff4fb23fcd 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,8 @@ +2012-02-08 Pascal Obry + + * prj.ads, prj.adb (For_Project_And_Aggregated_Context): New + generic routine with a context parameter. + 2012-02-08 Robert Dewar * a-coinve.adb, sem_util.adb, sem_ch8.adb, a-cobove.adb, diff --git a/gcc/ada/prj.adb b/gcc/ada/prj.adb index 1327b58bda0e..15cb808f0d1d 100644 --- a/gcc/ada/prj.adb +++ b/gcc/ada/prj.adb @@ -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 diff --git a/gcc/ada/prj.ads b/gcc/ada/prj.ads index fa36d850e1cf..44aa94d81517 100644 --- a/gcc/ada/prj.ads +++ b/gcc/ada/prj.ads @@ -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; -- 2.47.2