comp.lang.ada
 help / color / mirror / Atom feed
From: Michael Erdmann <michael.erdmann@snafu.de>
Subject: Q: Endless loop by dispatching
Date: Fri, 11 Jul 2003 10:22:54 +0200
Date: 2003-07-11T10:22:54+02:00	[thread overview]
Message-ID: <un82u-4kb.ln1@boavista.snafu.de> (raw)

Dear all,

i got a problem with the following code fragment below. The Idea is that 
the procedure Serialize defines the strategy how to display object which
are derived from A.Object. Searialize simply dispatches into the class
by calling a procedure Write, which does the job for the class.

package A is

    type Object is tagged record
          P1 : Natural := 1;
          P2 : Natural := 2;
       end record;


    procedure Write(
       This : in Object );

    procedure Serialize(
       This : in Object'Class );

end A;


package body A is

    procedure Serialize(
       This : in Object'Class ) is
    begin
       Write( This );
    end Serialize;

    procedure Write(
       This : in Object ) is
    begin
       Put_Line( "P1 =" & Natural'Image( This.P1 ) );
       Put_Line( "P2 =" & Natural'Image( This.P2 ) );
    end Write;

end A;

In the following fragment i am defining a package B with an
derived objec B.Object as below. When an instance of B.Object
shall be serialized, the element of the super class (A.Object)
shall be serialzed as well. The code looks nice and compiles
but does not work, since the Serialize dispatches again with
Object.B even ther was a a case given  A.Object( This ).

package B is

    type Object is new A.Object with record
          Q : Natural := 2;
       end record;

    procedure Write(
       This : in Object );

end B;

..........
package body B is

    procedure Write(
       This : in Object ) is
    begin
       A.Serialize( A.Object( This ) );
       Put_Line( "Q =" & Natural'Image(This.Q));
    end Write;

end B;

Does any body know, what this loop causes?! I am not sure
if this is a bug or simply i missed the point.

Michael






             reply	other threads:[~2003-07-11  8:22 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-07-11  8:22 Michael Erdmann [this message]
2003-07-11  9:46 ` Endless loop by dispatching Jean-Pierre Rosen
2003-07-11 15:19   ` Michael Erdmann
2003-07-11 10:01 ` Q: " Dmitry A. Kazakov
2003-07-11 15:07   ` Michael Erdmann
2003-07-12  1:41     ` Jeffrey Carter
2003-07-14  8:48     ` Dmitry A. Kazakov
2003-07-14 18:38       ` Randy Brukardt
2003-07-15  8:47         ` Dmitry A. Kazakov
2003-07-15 17:23           ` Randy Brukardt
2003-07-16  8:08             ` Dmitry A. Kazakov
2003-07-16 17:44               ` Robert I. Eachus
2003-07-17  1:57               ` Robert A Duff
2003-07-18  9:10                 ` Dale Stanbrough
2003-07-18 20:26                   ` Robert I. Eachus
2003-07-18 21:35                     ` tmoran
2003-07-19  0:25                       ` Robert I. Eachus
2003-07-19  2:30                         ` tmoran
2003-07-19  5:48                           ` Robert I. Eachus
2003-07-21  8:38                             ` Dmitry A. Kazakov
2003-07-21 10:08                               ` Robert I. Eachus
2003-07-21 13:21                                 ` Dmitry A. Kazakov
2003-07-21 18:51                                   ` Robert I. Eachus
2003-07-22  7:41                                     ` Dmitry A. Kazakov
2003-07-22 10:36                                       ` Lutz Donnerhacke
2003-07-22 12:11                                         ` Dmitry A. Kazakov
2003-07-22 12:18                                           ` Lutz Donnerhacke
2003-07-22 14:46                                             ` Dmitry A. Kazakov
2003-07-22 15:11                                               ` Lutz Donnerhacke
2003-07-23  8:12                                                 ` Dmitry A. Kazakov
2003-07-19 14:44                     ` Chad R. Meiners
2003-07-20 12:36                       ` Robert I. Eachus
2003-07-11 16:27 ` T. Kurt Bond
2003-07-12  8:37   ` Michael Erdmann
2003-07-15  7:11     ` Kenneth Almquist
replies disabled

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