comp.lang.ada
 help / color / mirror / Atom feed
From: "Vladimir Olensky" <vladimir_olensky@yahoo.com>
Subject: Re: Problem with instantiating generic procedure
Date: 1999/07/17
Date: 1999-07-17T00:00:00+00:00	[thread overview]
Message-ID: <932239182.670.84@news.remarQ.com> (raw)
In-Reply-To: 7mqfcq$9og$1@pegasus.csx.cam.ac.uk

Here are two working examples that solves your problem.
Gnat 3.11p, WinNT.
Hope this will help.


As I understand it one  should first have  instantiation  of generic
procedure and only then bind it with the procedure name declared at spec.

--===============================
Example 1:
----------------------------------
package Bug is
   procedure A;
end Bug;
---------------------------------
with ada.text_io; use ada.text_io;
package body Bug is

   generic
   procedure G;

   procedure G is
   begin
      put_line("Body of A implemented as generic");
   end G;

   procedure AA is new G;
   procedure A renames AA;
end Bug;

--===============================
Example 2:
----------------------------------
generic
package G is
  procedure GP;
end G;
----------------------------------
with ada.text_IO; use ada.text_io;
package body G is

  procedure GP is
   begin
      put_line("Body of A implemented as generic");
   end GP;

end G;

-----------------------
package Bug is
   procedure A;
end Bug;
----------------
with G;
package body Bug is
  package AA is new G;
  procedure A renames AA.GP;
end Bug;
----------------------------

--==================================
-- test procedure for both examples
with Bug;
procedure Tst_Bug is
begin
   Bug.A;
end Tst_Bug;

----------------------------------------------

Regards,
Vladimir Olensky



Markus Kuhn wrote in message <7mqfcq$9og$1@pegasus.csx.cam.ac.uk>...
>Sorry, but after searching through the RM for almost an hour, I still
>haven't figured out what I do wrong here and how I should fix this.
>I declare in a package spec a procedure A and I want to implement the
>procedure body of A by instantiating a generic procedure G. The following
>is the shortest possible program that reproduces my problem:
>
>-- bug.ads --
>package Bug is
>
>   procedure A;
>
>end Bug;
>-- bug.adb --
>package body Bug is
>
>   generic
>   procedure G;
>
>   procedure G is
>   begin
>      null;
>   end G;
>
>   procedure A is new G;
>
>end Bug;
>-------------
>
>GNAT 3.11p on Linux insists on the following error message:
>
>bug.adb:1:14: missing body for "A" declared at bug.ads:3
>bug.adb:11:14: "A" conflicts with declaration at bug.ads:3
>
>What is wrong with simply implementing a procedure declared
>in the spec file in the body file by instantiating it from
>a generic procedure of the exact same signature? Both A and G
>have no parameters, so how can there be a conflict?
>
>It would be nice if GNAT wrote out explicitely the two conflicting
>sides, each time it uses the word "conflict" in an error message.
>
>Any idea what is wrong here?
>
>Markus
>
>--
>Markus G. Kuhn, Computer Laboratory, University of Cambridge, UK
>Email: mkuhn at acm.org,  WWW: <http://www.cl.cam.ac.uk/~mgk25/>






  parent reply	other threads:[~1999-07-17  0:00 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1999-07-17  0:00 Problem with instantiating generic procedure Markus Kuhn
1999-07-17  0:00 ` Florian Weimer
1999-07-18  0:00   ` Markus Kuhn
1999-07-18  0:00     ` Chad R. Meiners
1999-07-18  0:00     ` Florian Weimer
1999-07-19  0:00       ` Robert Dewar
1999-07-19  0:00         ` Florian Weimer
1999-07-17  0:00 ` Vladimir Olensky [this message]
1999-07-18  0:00 ` David C. Hoos, Sr.
1999-07-19  0:00 ` Tucker Taft
1999-07-19  0:00   ` Markus Kuhn
1999-07-23  0:00     ` Tucker Taft
1999-07-19  0:00 ` Robert A Duff
replies disabled

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