From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=0.2 required=5.0 tests=BAYES_00,INVALID_MSGID, REPLYTO_WITHOUT_TO_CC autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,16e3a8dd4f3ab3f3 X-Google-Attributes: gid103376,public From: ncohen@watson.ibm.com (Norman H. Cohen) Subject: Re: Elaboration order Date: 1996/03/20 Message-ID: <4ip8vv$1fv2@watnews1.watson.ibm.com>#1/1 X-Deja-AN: 143396115 distribution: world references: <314701A1.469D@lfwc.lockheed.com> <4io8rn$gfn@newsbf02.news.aol.com> organization: IBM T.J. Watson Research Center reply-to: ncohen@watson.ibm.com newsgroups: comp.lang.ada Date: 1996-03-20T00:00:00+00:00 List-Id: In article <4io8rn$gfn@newsbf02.news.aol.com>, denreimer@aol.com (DenReimer) writes: |> Here's something that I'm trying to do in Ada83 and Ada95: |> |> with GENERIC_PACKAGE; |> package A_PKG is |> package INSTANCE is new GENERIC_PACKAGE ( ... ); |> X : INTEGER := INSTANCE.SOME_FUNCTION; |> end A_PKG; |> |> The elaboration of X requires that the instantiated package INSTANCE be |> elaborated first (both spec and body.) The compiler will not let me use |> pragma elaborate (INSTANCE); |> |> It is not clear to me what the elaboration order should be in the case of |> nested packages. I would like to assume that for nested packages, the |> elaboration is also nested. In the case of generic instantiations, both |> spec and body would be elaborated at the point of instantiation. |> Unfortunately, the LRM does not seem to make any requirements regarding |> elaboration order for nested packages. RM83-7.2(3), RM95-7.1(8): "The elaboration of a package declaration consists of the elaboration of its basic declarative items in the given order." RM83-12.3(17): "For the elaboration of a generic instantiation, .... Finally, the implicitly generated instance is elaborated." RM95-12.3(20) is more explicit: "Finally, the instance declaration and body are elaborated." Thus both the declaration and body of Instance are sure to be elaborated before the declaration of X is elaborated. |> When I use gnat, I get a program error. Possibly from an attempt to instantiate the TEMPLATE before its GENERIC BODY has been elaborated. (See RM83-3.9(7), RM95-3.11(13).) Change your context clause to: with Generic_Package; pragma Elaborate(Generic_Package); -- Norman H. Cohen ncohen@watson.ibm.com