comp.lang.ada
 help / color / mirror / Atom feed
From: dmitry6243@my-deja.com
Subject: Re: controlled type in generic package?
Date: Thu, 08 Feb 2001 09:36:42 GMT
Date: 2001-02-08T09:36:42+00:00	[thread overview]
Message-ID: <95tpba$9va$1@nnrp1.deja.com> (raw)
In-Reply-To: 95sjs9$ral$1@wanadoo.fr

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 1397 bytes --]

In article <95sjs9$ral$1@wanadoo.fr>,
  "Jean-Pierre Rosen" <rosen.adalog@wanadoo.fr> wrote:
>
> "Ted Dennison" <dennison@telepath.com> a �crit dans le message news:
95rpj5$gq7$1@nnrp1.deja.com...
> > I have to admit I'm a little unclear as to what nasty things could
> > happen to me if I were allowed to declare a derived tagged type at a
> > lower scope level than their parent type.
> OK, let's go:
>
> package body Pack is
>    type Parent is tagged ...;
>    procedure Proc (X : Parent) is ... end Proc;
>
>    type Ptr is access Parent'Class;
>    V : Ptr;
>
>    procedure P is
>       type Child is new Parent with...;
>       procedure Proc (X : Child) is... end Proc;
>    begin
>       V := new Child;
>    end P;
>
> begin
>    P;
> -- Now, V.all points to an object of type P.Child
> -- We can call Proc (V.all) which will result in a dispatching call
> to P.Proc, but P is out of scope at this point !!!

This is an issue of how dispatch tables are implemented and maintained
at run-time. One could imagine a mechanism that would restore the
dispatch table, when a derived type goes away. The type tag could
be "redirected" to the base type tag, or the table slots corresponding
to the overriden methods could be restored etc. What is really nasty,
is that the semantic of V.Proc would depend on the context.

--
Regards,
Dmitry Kazakov


Sent via Deja.com
http://www.deja.com/



  reply	other threads:[~2001-02-08  9:36 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-02-06 11:06 controlled type in generic package? Nils Priebe
     [not found] ` <slrn97vtf5.ho.lutz@taranis.iks-jena.de>
     [not found]   ` <95q19j$9d$1@usenet.rational.com>
2001-02-07 10:11     ` Lutz Donnerhacke
2001-02-07 21:57       ` Mark Lundquist
     [not found]   ` <95p2ab$463$1@nnrp1.deja.com>
2001-02-07 15:08     ` Jean-Pierre Rosen
2001-02-08 15:41       ` Ted Dennison
2001-02-08 18:21         ` Jean-Pierre Rosen
2001-02-08 16:31       ` Florian Weimer
2001-02-08 21:10       ` Brian Rogoff
2001-02-09 10:39         ` Florian Weimer
2001-02-09 17:02           ` Brian Rogoff
2001-02-09 18:45             ` Florian Weimer
2001-02-13  0:32           ` Nick Roberts
2001-02-14  0:30             ` Jon S Anthony
     [not found]               ` <x7vg0hd20cm.fsf@smaug.pushface.org>
     [not found]                 ` <hovk6.96$aw5.304@www.newsranger.com>
2001-02-23 20:50                   ` Simon Wright
     [not found]     ` <95q1fa$9e$1@usenet.rational.com>
2001-02-07 15:28       ` Ted Dennison
2001-02-07 16:29         ` Brian Rogoff
     [not found]           ` <3A82A66D.49DE7EBD@bton.ac.uk>
2001-02-08 15:15             ` Robert Dewar
2001-02-08 16:56             ` Florian Weimer
2001-02-09 10:25               ` John English
2001-02-09 19:46                 ` Brian Rogoff
2001-02-07 18:52         ` Pat Rogers
2001-02-07 19:23           ` Pat Rogers
2001-02-07 19:50             ` Ted Dennison
2001-02-07 22:52         ` Jean-Pierre Rosen
2001-02-08  9:36           ` dmitry6243 [this message]
2001-02-09  8:51             ` Jean-Pierre Rosen
2001-02-09 12:28               ` dmitry6243
2001-02-08 19:58           ` Mark Lundquist
2001-02-10  9:54           ` Thomas Wolf
replies disabled

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