]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
sem_ch12.adb (Analyze_Package_Instantiation): Create a separate node to use as the...
authorArnaud Charlet <charlet@gcc.gnu.org>
Mon, 3 Jan 2005 15:41:04 +0000 (16:41 +0100)
committerArnaud Charlet <charlet@gcc.gnu.org>
Mon, 3 Jan 2005 15:41:04 +0000 (16:41 +0100)
* sem_ch12.adb (Analyze_Package_Instantiation): Create a separate node
to use as the defining identifier for a formal package.
(Remove_Parent): If the instance takes place within (an instance of)
a sibling, preserve private declarations of common parent.

From-SVN: r92848

gcc/ada/sem_ch12.adb

index b1779e118f86a72c24a96cc2bc866a79084f4c09..588ce993dfb76ceab5d32d504cc21f71fa1e22f2 100644 (file)
@@ -2849,6 +2849,17 @@ package body Sem_Ch12 is
          Inline_Instance_Body (N, Gen_Unit, Act_Decl);
       end if;
 
+      --  The following is a tree patch for ASIS: ASIS needs separate nodes
+      --  to be used as defining identifiers for a formal package and for the
+      --  corresponding expanded package
+
+      if Nkind (N) = N_Formal_Package_Declaration then
+         Act_Decl_Id := New_Copy (Defining_Entity (N));
+         Set_Comes_From_Source (Act_Decl_Id, True);
+         Set_Is_Generic_Instance (Act_Decl_Id, False);
+         Set_Defining_Identifier (N, Act_Decl_Id);
+      end if;
+
    exception
       when Instantiation_Error =>
          if Parent_Installed then
@@ -8904,9 +8915,11 @@ package body Sem_Ch12 is
                  and then P /= Current_Scope
                then
                   --  We are within an instance of some sibling. Retain
-                  --  visibility of parent, for proper subsequent cleanup.
+                  --  visibility of parent, for proper subsequent cleanup,
+                  --  and reinstall private declarations as well.
 
                   Set_In_Private_Part (P);
+                  Install_Private_Declarations (P);
                end if;
 
             --  This looks incomplete: what about compilation units that