comp.lang.ada
 help / color / mirror / Atom feed
From: Jacob Sparre Andersen <sparre@nbi.dk>
Subject: Primitive operations and derived types (Was: Simple Question 3)
Date: Sun, 14 Oct 2001 23:15:42 +0200
Date: 2001-10-14T23:15:42+02:00	[thread overview]
Message-ID: <3BCA007E.B4066A1C@nbi.dk> (raw)
In-Reply-To: 9qcmt9$8n1$1@newsg1.svr.pol.co.uk

Stephen:

> 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;

If I have understood the concept of primitive operations
correctly, then all of the three functions above are
primitive operations [RM 3.2.3(6)].

>    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.

No. The common element of UnitB and UnitC is that they
_return_ objects of type MyTestType1. It appears to have
something to do with UnitB and UnitC being "constructors"
for type MyTestType1. I suspect that the explanation is
hidden somewhere in RM 3.4, but I have not been able to find
it.

Jacob
-- 
http://www.ldraw.org/download/start/linux/
                         Get started with LEGO CAD on Linux.



  parent reply	other threads:[~2001-10-14 21:15 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
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   ` Jacob Sparre Andersen [this message]
2001-10-14 21:42   ` 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