summaryrefslogtreecommitdiff
path: root/gcc/ada/prj.adb
diff options
context:
space:
mode:
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2011-08-29 13:31:02 +0000
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2011-08-29 13:31:02 +0000
commit6c5f0aa07837db864367d79a9a8dbb7c329ef31e (patch)
tree3d87f1a7616c77e1cd8ee882c97c12269c878086 /gcc/ada/prj.adb
parent12bbfd83b12c7de41a43221efef8cdbd9668353d (diff)
downloadgcc-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.adb131
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;
-------------------