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,FREEMAIL_FROM, 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: denreimer@aol.com (DenReimer) Subject: Re: Elaboration order Date: 1996/03/20 Message-ID: <4io8rn$gfn@newsbf02.news.aol.com>#1/1 X-Deja-AN: 143349159 sender: root@newsbf02.news.aol.com references: <314701A1.469D@lfwc.lockheed.com> organization: America Online, Inc. (1-800-827-6364) reply-to: denreimer@aol.com (DenReimer) newsgroups: comp.lang.ada Date: 1996-03-20T00:00:00+00:00 List-Id: 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. I've tried the above source code with Ada/ED and an Alsys Ada83 compiler and it seems to work OK. When I use gnat, I get a program error. The Ada95 pragmas used for controlling elaboration order seem to only apply to library units. In the example above, I believe that INSTANCE is a program unit but not a library unit. Is there some way I can force the elaboration of INSTANCE to occur immediately? The only other alternative I can think of is to create another compilation unit just for the instantiation so that INSTANCE will then be a library unit. Thanks, Dennis Reimer