From: brangdon@cix.co.uk (Dave Harris)
Subject: Re: Merits of re-dispatching [LONG]
Date: Sat, 16 Feb 2002 12:10 +0000 (GMT Standard Time)
Date: 2002-02-16T12:10:00+00:00 [thread overview]
Message-ID: <memo.20020216121052.11581C@brangdon.madasafish.com> (raw)
In-Reply-To: 3c6bcb27.4632484@News.CIS.DFN.DE
dmitry@elros.cbb-automation.de (Dmitry A. Kazakov) wrote (abridged):
> That there are three types changes nothing. It works pretty well in
> Ada 95:
That still doesn't capture the full complexity, because although you have
Foo you don't have a Call_Foo. The call to Foo from within Call_Foo must
be dispatching, because it must dispatch to different places. Given that
it can do this, it's simplest to say the call to Foo from within the
destructor is dispatching too, in the same way. So there is no
non-dispatching call in the C++.
I don't know Ada, but I think it would look like:
type A is ...
procedure Foo (Object : A) is
begin
Put_Line ("A.Foo");
end Foo;
procedure Call_Foo (Object : A) is
begin
Foo( Object ); -- Dispatching, A.Foo or B.Foo called.
end Foo;
procedure Finalize (Object : in out A) is
begin
Call_Foo (Object);
Foo (Object);
end Finalize;
type B is new A ...
procedure Foo (Object : B) is
begin
Put_Line ("B.Foo");
end Foo;
procedure Finalize (Object : in out B) is
begin
Call_Foo (Object);
Foo( Object );
Finalize (A (Object));
end Finalize;
This should produce B.Foo B.Foo A.Foo A.Foo. The call to Foo from
B.Finalize can use exactly the same implementation as the call to Foo from
A.Call_Foo. Both end up in B.Foo when the object is of type B. Both are
dispatching calls.
Dave Harris, Nottingham, UK | "Weave a circle round him thrice,
brangdon@cix.co.uk | And close your eyes with holy dread,
| For he on honey dew hath fed
http://www.bhresearch.co.uk/ | And drunk the milk of Paradise."
next prev parent reply other threads:[~2002-02-16 12:10 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-02-07 10:26 Merits of re-dispatching [LONG] Dmitry A. Kazakov
2002-02-07 15:03 ` Hyman Rosen
2002-02-08 1:29 ` Matthew Heaney
2002-02-08 9:16 ` Dmitry A. Kazakov
2002-02-08 18:30 ` Hyman Rosen
2002-02-09 0:10 ` Matthew Heaney
2002-02-12 8:32 ` Dmitry A. Kazakov
2002-02-12 21:37 ` Hyman Rosen
2002-02-13 9:29 ` Dmitry A. Kazakov
2002-02-13 14:32 ` Hyman Rosen
2002-02-13 19:58 ` Dave Harris
2002-02-14 15:06 ` Dmitry A. Kazakov
2002-02-16 12:10 ` Dave Harris [this message]
2002-02-18 8:57 ` Dmitry A. Kazakov
2002-02-18 19:47 ` Merits of re-dispatching Dave Harris
2002-02-19 9:20 ` Dmitry A. Kazakov
2002-02-21 5:49 ` Hyman Rosen
2002-02-21 9:04 ` Dmitry A. Kazakov
2002-02-21 18:17 ` Hyman Rosen
2002-02-22 9:21 ` Dmitry A. Kazakov
2002-02-22 16:59 ` Hyman Rosen
2002-02-25 8:51 ` Dmitry A. Kazakov
2002-02-08 23:51 ` Merits of re-dispatching [LONG] Matthew Heaney
2002-02-12 9:02 ` Dmitry A. Kazakov
2002-02-07 23:40 ` Nick Roberts
2002-02-08 8:56 ` Dmitry A. Kazakov
2002-02-08 1:06 ` Matthew Heaney
2002-02-08 9:48 ` Dmitry A. Kazakov
2002-02-09 0:16 ` Matthew Heaney
2002-02-08 18:10 ` Hyman Rosen
2002-02-09 0:41 ` Matthew Heaney
2002-02-08 18:33 ` Nick Roberts
2002-02-09 4:07 ` Nick Roberts
2002-02-12 10:13 ` Dmitry A. Kazakov
2002-02-14 20:57 ` Tucker Taft
2002-02-15 15:43 ` Dmitry A. Kazakov
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox