comp.lang.ada
 help / color / mirror / Atom feed
From: stt@henning.camb.inmet.com (Tucker Taft)
Subject: Re: Dispatching in Ada95
Date: 1996/04/23
Date: 1996-04-23T00:00:00+00:00	[thread overview]
Message-ID: <DqAr5E.H6D.0.-s@inmet.camb.inmet.com> (raw)
In-Reply-To: 317BCF1F.6542@csehp3.mdc.com

James A. Squire (m193884@CSEHP3.MDC.COM) wrote:
: On Fri, 19 Apr 1996 13:34:34, Samuel Tardieu <sam@INF.ENST.FR> wrote:

: > >>>>> "James" == James A Squire <m193884@CSEHP3.MDC.COM> writes:

: > You're right in saying that it will check a subprogram which is
: > directly visible (if you don't give a prefix). But if your parameter
: > is of a class-wide type, only a subprogram with the base type of this
: > class-wide type needs to be visible.

: Correction:  Directly visible.

No, not directly visible.  Direct visibility is required only if you want
to write "F(X)"; just plain "visibility" is required if you are willing to
write "P.F(X)."

In any case, dispatching has nothing to do with visibility.

: > Let's take an example. We create a package AAA which defines a class A
: > as well as a Create function, and a Get_Info function.

: [example snipped]

: > Now, our main procedure T. T withes AAA, BBB and Text_IO, and uses all
: > of them except BBB.

: So, you do compromise and use the use clause, then.  That was my whole
: question.  The use clause *is* essential to dispatching.

No, the use clause is irrelevant to dispatching.  You can write P.F(X)
in a dispatching call.  Furthermore, presuming X is of type T'Class,
then only the "F" on "T" needs to be visible.  The "F" on T1, T2, etc.,
need not be visible.

: Thank you for answering my question.  Just another "gotcha" of Ada95 to
: note for future reference.

I fear these answers have only served to confuse you more ...

To reiterate:

Dispatching happens at run-time, whenever the controlling operand is 
class-wide (or otherwise "dynamically tagged") in a call on a primitive
subprogram of a tagged type.  

Dispatching has nothing to do with "use" clauses, and the only 
thing that has to be visible at compile-time (and not necessarily 
directly visible) is the primitive operation of the (root) type T, presuming 
the operand is of (compile-time) type T'Class.

: James Squire
: MDA Avionics Tools & Processes
: ja_squire@csehp3.mdc.com

-Tucker Taft   stt@inmet.com   http://www.inmet.com/~stt/
Intermetrics, Inc.  Cambridge, MA  USA




  reply	other threads:[~1996-04-23  0:00 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <md5:331AE542B80F60CE2470F379EDBF578B>
1996-04-22  0:00 ` Dispatching in Ada95 James A. Squire
1996-04-23  0:00   ` Tucker Taft [this message]
1996-04-24  0:00   ` Robert Dewar
1996-04-24  0:00 ` Jon S Anthony
     [not found] <md5:F8080176D9F8A3EEEF6212652DAEEEE5>
1996-04-29  0:00 ` James A. Squire
1996-04-29  0:00   ` Robert Dewar
     [not found] <md5:5BDD03FA023B9E2881F3A55BFDD6938A>
1996-04-23  0:00 ` James A. Squire
     [not found] <md5:85373D6BBD0F0A69C09034C3F08892BC>
1996-04-18  0:00 ` James A. Squire
1996-04-19  0:00   ` Robert A Duff
1996-04-19  0:00 ` Samuel Tardieu
replies disabled

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