comp.lang.ada
 help / color / mirror / Atom feed
From: "Stephen Cole" <s_k_cole@userat.freeserve.co.uk>
Subject: Re: Simple Question 3
Date: Sun, 14 Oct 2001 19:53:07 +0100
Date: 2001-10-14T18:52:25+00:00	[thread overview]
Message-ID: <9qcmt9$8n1$1@newsg1.svr.pol.co.uk> (raw)
In-Reply-To: 9q49v5$6dj$1@trog.dera.gov.uk


"Stephen Cole" <s_k_cole@yahoo.com> wrote in message
news:9q49v5$6dj$1@trog.dera.gov.uk...
> Hi
>
> Question 3.....
>
> package MyTstTypes is
>    type MyRcd is tagged
>       record
>          a: Integer;
>          b: Float;
>       end record;
>
>    function Unit return MyRcd;
>
>    type MyNewRcd is new MyRcd with
>       record
>          c: Integer;
>       end record;
>
> --   function Unit return MyNewRcd;
>
>    type MyNewRcd2 is new MyNewRcd with
>       record
>          d: Float;
>       end record;
>
> end MyTstTypes;
>
> The compiler complains with the following text....
>
> "mytsttypes.ads:10:09: type must be declared abstract or "Unit"
overridden"
>
> It wants me to define a version of Unit() for each derived type?! Why?
>
>

Look....people...my confusion is deeper than that. Its about this whole
question of what a primitive operation is! Is it a function/procedure which
takes a derived type parameter and/or returns a derived type? Or is it just
functions which return a derived type only? Or what? The rules seem a bit
fuzzy and inconsistent here. Why does returning a derived type seem to have
more rules about what must be later declared in a derived type, than
function/procedures that just take that derived type as a parameter?

Example
Look at the following code....

package MyTest is

   type MyTestType1 is tagged
      record
         a: Integer;
         b: Float;
      end record;

   function UnitA(a: MyTestType1) return Integer;
   function UnitB(a: MyTestType1) return MyTestType1;
   function UnitC return MyTestType1;

   type MyTestType2 is new MyTestType1 with
      record
         c: Integer;
      end record;

end MyTest;

UnitA() does not get flagged by the compiler as needing to be declared for
MyTestType2. But UnitB() and UnitC() do! But they all hold enough type
information for the compiler to be "intelligent" enough to know where static
matching takes place or not. The way the compiler is behaving, its as if it
only takes into account "out" parameters and does not care what "in"
parameters look like. My case is futher confussed by the use of class wide
types. But I'll come back to that if you can answer this static-only case
for me first.

Thanks.







  parent reply	other threads:[~2001-10-14 18:53 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-10-11 14:28 Simple Question 3 Stephen Cole
2001-10-11 22:41 ` tmoran
2001-10-12 11:33   ` Stephen Cole
2001-10-12 17:03     ` tmoran
2001-10-14  7:51     ` Jean-Marc Bourguet
2001-10-12 13:33 ` David C. Hoos
2001-10-14 18:53 ` Stephen Cole [this message]
2001-10-14 20:45   ` Vincent Marciante
2001-10-14 21:00   ` Jeffrey Carter
2001-10-14 22:08     ` Stephen Cole
2001-10-15  6:26       ` Jeffrey Carter
2001-10-14 21:15   ` Primitive operations and derived types (Was: Simple Question 3) Jacob Sparre Andersen
2001-10-14 21:42   ` Simple Question 3 tmoran
2001-10-14 22:30     ` Stephen Cole
replies disabled

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