comp.lang.ada
 help / color / mirror / Atom feed
From: stt@henning.camb.inmet.com (Tucker Taft)
Subject: Re: Use of generic child formal package
Date: Tue, 28 Feb 1995 20:35:37 GMT
Date: 1995-02-28T20:35:37+00:00	[thread overview]
Message-ID: <D4q97E.8Mr@inmet.camb.inmet.com> (raw)
In-Reply-To: D4IyJB.5C2@thomsoft.com

Ed Falis (falis@east.alsys.com) wrote:

: I'd like to provide an instance of a generic child unit as a formal package
: actual parameter to another generic.  To wit:

: generic
:    -- parent's formals
: package parent is ... ; end parent;

: generic
:    -- child's formals
: package parent.child is ...; end parent.child;


: with parent;
: generic
:    -- client formals
: package client is 

:    package parent_instance is new parent(...);

: end client;


: -- Here's the hitch:
: with parent.child;
: generic

:    -- ??:
:    with parent_instance.child is new parent.child (...);
: package client.child is ...;


: Gnat 2.02 doesn't like the syntax for the formal package parameter: the selected
: name notation is rejected. I've tried a few other ways of declaring the formal
: package, without success.
: So, is it legal, or is it GNAT?

The rules for children of generic packages changed in the final months
before the standard was released.  I don't know whether GNAT has 
implemented the final semantics.  However, your usage above is not
correct.  With the final formulation for children of generics,
the effect of a with clause for a child of a generic is to make
a corresponding generic subpackage of the same name appear in
every instance of the parent.  

In other words, when you mention a child of a generic 
in a with clause, it is as though the parent unit had 
*always* included the child as a generic subpackage,
so that any instances of the parent would hence include a 
corresponding generic subpackage.  

Given the above rules, what you should write (though
no guarantees that GNAT will understand it yet):

   with Parent.Child;
   generic
       with package Child_Instance is new Client.Parent_Instance.Child(<>);
   package Client.Child is ...

: What I'm trying to do is to use multiple child units for distinct generic
: implementations of generic component, binding the implementation at the
: time of instantiating client.child, which will present an interface to its
: own clients.

: - Ed

-Tucker Taft   stt@inmet.com
Intermetrics, Inc.



  reply	other threads:[~1995-02-28 20:35 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1995-02-24 22:01 Use of generic child formal package Ed Falis
1995-02-28 20:35 ` Tucker Taft [this message]
1995-03-02  2:48   ` Robert Dewar
1995-03-08  0:12 ` Jack Beidler
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox