Commit 6b9aa578 by Ed Schonberg Committed by Arnaud Charlet

2008-05-26 Ed Schonberg <schonberg@adacore.com>

	* sem_ch12.adb:
	(Remove_Parent): If the enclosing scope is an instance whose generic
	parent is declared within some parent scope of the just completed
	instance, make full views of the entities in that parent visible, when
	applicable.

From-SVN: r135908
parent c9999044
...@@ -10807,6 +10807,10 @@ package body Sem_Ch12 is ...@@ -10807,6 +10807,10 @@ package body Sem_Ch12 is
procedure Remove_Parent (In_Body : Boolean := False) is procedure Remove_Parent (In_Body : Boolean := False) is
S : Entity_Id := Current_Scope; S : Entity_Id := Current_Scope;
-- S is the scope containing the instantiation just completed. The
-- scope stack contains the parent instances of the instantiation,
-- followed by the original S.
E : Entity_Id; E : Entity_Id;
P : Entity_Id; P : Entity_Id;
Hidden : Elmt_Id; Hidden : Elmt_Id;
...@@ -10853,6 +10857,21 @@ package body Sem_Ch12 is ...@@ -10853,6 +10857,21 @@ package body Sem_Ch12 is
and then not Parent_Unit_Visible) and then not Parent_Unit_Visible)
then then
Set_Is_Immediately_Visible (P, False); Set_Is_Immediately_Visible (P, False);
-- If the current scope is itself an instantiation of a generic
-- nested within P, and we are in the private part of body of
-- this instantiation, restore the full views of P, that were
-- removed in End_Package_Scope above. This obscure case can
-- occur when a subunit of a generic contains an instance of
-- of a child unit of its generic parent unit.
elsif S = Current_Scope
and then Is_Generic_Instance (S)
and then P = Scope (Generic_Parent (Parent (S)))
and then (In_Package_Body (S) or else In_Private_Part (S))
then
Set_In_Private_Part (P);
Install_Private_Declarations (P);
end if; end if;
end loop; end loop;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment