comp.lang.ada
 help / color / mirror / Atom feed
From: stt@houdini.camb.inmet.com (Tucker Taft)
Subject: Re: Subprogram access types and generic packages
Date: 1997/03/20
Date: 1997-03-20T00:00:00+00:00	[thread overview]
Message-ID: <E7CHyw.n0q.0.-s@inmet.camb.inmet.com> (raw)
In-Reply-To: bond-ya023680001803971613240001@nntp.ucs.ubc.ca


Greg Bond (bond@ee.ubc.ca) wrote:

: I'm trying to write a generic package that will register an access type
: of one of its internal subprograms with an external subprogram when
: instantiated. I get the error message:

: pkg.adb:12:14: access type must not be outside generic body

: Why not? 

Because the RM says so ;-).  RM95 3.10.2(32) says:

 P'Access
   ... If the subprogram denoted by P is declared within a generic body,
   S [the access-to-subp type] shall be declared within the generic body.

The annotated RM goes on to say:
    ... This rule is partly to prevent contract model problems with respect
    to accessibility rules, and partly to ease shared-generic-body 
    implementations, in which a subprogram declared in an instance needs
    to have a different calling convention from other subprograms with
    the same profile.

The way to avoid the problem is to move the declaration of the subprogram
up into the private part of the generic spec.  This gives the shared-generic
implementation the chance to create a unique wrapper at each instantiation,
so a simple address (rather than an address + a pointer to an "instance
descriptor) is sufficient to call the subprogram.

If none of the above makes sense, then revert to my first explanation
(the RM says so) or talk to Randy Brukardt or other compiler implementor
whose compiler uses "universal" generic sharing.

: * Greg Bond                       * Dept. of Electrical and Computer Eng.  
: * email: bond@ee.ubc.ca           * Univ. of British Columbia      
: * voice: (604) 822 0899           * 2356 Main Mall                 
: * fax:   (604) 822 5949           * Vancouver, BC              
: * web: http://www.ee.ubc.ca/~bond * Canada, V6T 1Z4                                       
-Tucker Taft   stt@inmet.com   http://www.inmet.com/~stt/
Intermetrics, Inc.  Burlington, MA  USA




      parent reply	other threads:[~1997-03-20  0:00 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1997-03-18  0:00 Subprogram access types and generic packages Greg Bond
1997-03-19  0:00 ` Robert A Duff
1997-03-20  0:00 ` Tucker Taft [this message]
replies disabled

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