diff options
author | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-08-29 13:31:02 +0000 |
---|---|---|
committer | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-08-29 13:31:02 +0000 |
commit | 6c5f0aa07837db864367d79a9a8dbb7c329ef31e (patch) | |
tree | 3d87f1a7616c77e1cd8ee882c97c12269c878086 /gcc/ada/prj.adb | |
parent | 12bbfd83b12c7de41a43221efef8cdbd9668353d (diff) | |
download | gcc-6c5f0aa07837db864367d79a9a8dbb7c329ef31e.tar.gz |
2011-08-29 Emmanuel Briot <briot@adacore.com>
* make.adb, prj.adb, prj.ads (Compute_All_Imported_Projects): Also
initialize aggregated projects.
2011-08-29 Ed Schonberg <schonberg@adacore.com>
* sem_ch8.adb (Find_Renamed_Entity): Within an instance, use scope
depth of candidates to resolve a potentially spurious ambiguity between
two visible subprograms.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@178225 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/prj.adb')
-rw-r--r-- | gcc/ada/prj.adb | 131 |
1 files changed, 78 insertions, 53 deletions
diff --git a/gcc/ada/prj.adb b/gcc/ada/prj.adb index fc65860aee2..63fb12759de 100644 --- a/gcc/ada/prj.adb +++ b/gcc/ada/prj.adb @@ -1283,72 +1283,97 @@ package body Prj is -- Compute_All_Imported_Projects -- ----------------------------------- - procedure Compute_All_Imported_Projects (Tree : Project_Tree_Ref) is - Project : Project_Id; - - procedure Recursive_Add - (Prj : Project_Id; - Tree : Project_Tree_Ref; - Dummy : in out Boolean); - -- Recursively add the projects imported by project Project, but not - -- those that are extended. - - ------------------- - -- Recursive_Add -- - ------------------- - - procedure Recursive_Add - (Prj : Project_Id; - Tree : Project_Tree_Ref; - Dummy : in out Boolean) + procedure Compute_All_Imported_Projects + (Root_Project : Project_Id; + Tree : Project_Tree_Ref) + is + procedure Analyze_Tree + (Local_Root : Project_Id; Local_Tree : Project_Tree_Ref); + -- Process Project and all its aggregated project to analyze their own + -- imported projects. + + ------------------ + -- Analyze_Tree -- + ------------------ + + procedure Analyze_Tree + (Local_Root : Project_Id; Local_Tree : Project_Tree_Ref) is - pragma Unreferenced (Dummy, Tree); - List : Project_List; - Prj2 : Project_Id; + pragma Unreferenced (Local_Root); + + Project : Project_Id; + + procedure Recursive_Add + (Prj : Project_Id; + Tree : Project_Tree_Ref; + Dummy : in out Boolean); + -- Recursively add the projects imported by project Project, but not + -- those that are extended. + + ------------------- + -- Recursive_Add -- + ------------------- + + procedure Recursive_Add + (Prj : Project_Id; + Tree : Project_Tree_Ref; + Dummy : in out Boolean) + is + pragma Unreferenced (Dummy, Tree); + List : Project_List; + Prj2 : Project_Id; - begin - -- A project is not importing itself + begin + -- A project is not importing itself - Prj2 := Ultimate_Extending_Project_Of (Prj); + Prj2 := Ultimate_Extending_Project_Of (Prj); - if Project /= Prj2 then + if Project /= Prj2 then - -- Check that the project is not already in the list. We know the - -- one passed to Recursive_Add have never been visited before, but - -- the one passed it are the extended projects. + -- Check that the project is not already in the list. We know + -- the one passed to Recursive_Add have never been visited + -- before, but the one passed it are the extended projects. - List := Project.All_Imported_Projects; - while List /= null loop - if List.Project = Prj2 then - return; - end if; + List := Project.All_Imported_Projects; + while List /= null loop + if List.Project = Prj2 then + return; + end if; - List := List.Next; - end loop; + List := List.Next; + end loop; - -- Add it to the list + -- Add it to the list - Project.All_Imported_Projects := - new Project_List_Element' - (Project => Prj2, - Next => Project.All_Imported_Projects); - end if; - end Recursive_Add; + Project.All_Imported_Projects := + new Project_List_Element' + (Project => Prj2, + Next => Project.All_Imported_Projects); + end if; + end Recursive_Add; - procedure For_All_Projects is - new For_Every_Project_Imported (Boolean, Recursive_Add); + procedure For_All_Projects is + new For_Every_Project_Imported (Boolean, Recursive_Add); - Dummy : Boolean := False; - List : Project_List; + Dummy : Boolean := False; + List : Project_List; + begin + List := Local_Tree.Projects; + while List /= null loop + Project := List.Project; + Free_List + (Project.All_Imported_Projects, Free_Project => False); + For_All_Projects + (Project, Local_Tree, Dummy, Include_Aggregated => False); + List := List.Next; + end loop; + end Analyze_Tree; + + procedure For_Aggregates is + new For_Project_And_Aggregated (Analyze_Tree); begin - List := Tree.Projects; - while List /= null loop - Project := List.Project; - Free_List (Project.All_Imported_Projects, Free_Project => False); - For_All_Projects (Project, Tree, Dummy, Include_Aggregated => False); - List := List.Next; - end loop; + For_Aggregates (Root_Project, Tree); end Compute_All_Imported_Projects; ------------------- |