comp.lang.ada
 help / color / mirror / Atom feed
From: "Stuart" <stuart@0.0>
Subject: Re: how to import a package
Date: Thu, 7 Dec 2006 09:32:11 -0000
Date: 2006-12-07T09:32:11+00:00	[thread overview]
Message-ID: <4577dc92$1_1@glkas0286.greenlnk.net> (raw)
In-Reply-To: sa4veko5ndy.fsf@margay.local

"Brian May" <bam@snoopy.apana.org.au> wrote in message 
news:sa4veko5ndy.fsf@margay.local...
>>>>>> "markww" == markww  <markww@gmail.com> writes:
> Going back in time, you said you defined Next_Rec as:
>
> type Node;
> type Node_Ptr is access Node;
> type Node is record
>            Data     : T;
>            Prev_Rec : access Node;
>            Next_Rec : access Node;
> end record;
>
> Note that "access Node" is not the same thing as "Node_Ptr".
>
> From memory the first is an "anonymous access type", but my memory is
> a bit rusty on this topic right now (Ada 2005 feature when used in a
> record?).

Ada is very particular about type matching and this can lead to some 
consequences that, at first, appear very odd.
If you look at this example:
   package P is
      pragma Elaborate_Body(P);  -- Allow a package body to exist!
   end P;

   package body P is
      type T is array(0..5) of integer;
      A, B : array(0..5) of integer;
      C, D : T;
   begin
      A := B;
      -- Not allowed because types don't match!
      C := D;
      -- Types match!
   end P;

Even though A and B appear in the same statement, they are of different 
anonymous types.  This is because
      A, B : array(0..5) of integer;
is equivalent to

      A : array(0..5) of integer;
      B : array(0..5) of integer;
and, as you may already have realized, homographs are not treated as being 
the same in Ada.

However, both C and D are of the same named type - even though the type T 
has an anonymous type as an index range.  I think it is better to avoid 
anonymous types - so the declaration of T might be better written as:
      type T_index is range 0..5;
      type T is array(T_index) of integer;

-- 
Stuart 





  reply	other threads:[~2006-12-07  9:32 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-12-06  2:14 how to import a package markww
2006-12-06  3:06 ` Adam Beneschan
2006-12-06  3:34   ` markww
2006-12-06  9:18     ` Simon Wright
2006-12-06 19:47 ` Jeffrey R. Carter
2006-12-06 23:56   ` markww
2006-12-07  1:18     ` Björn Persson
2006-12-07  1:26     ` Brian May
2006-12-07  4:14       ` markww
2006-12-07  4:40         ` Brian May
2006-12-07  9:32           ` Stuart [this message]
2006-12-07 11:21             ` Jean-Pierre Rosen
2006-12-11  6:16               ` markww
2006-12-11  6:50                 ` markww
2006-12-11  9:40                   ` Georg Bauhaus
2006-12-11 14:19                     ` markww
2006-12-11 15:03                       ` Dmitry A. Kazakov
2006-12-11 16:22                       ` Adam Beneschan
2006-12-11 20:28                       ` Jeffrey R. Carter
2006-12-12  3:19                         ` markww
2006-12-12  3:31                           ` Jeffrey R. Carter
2006-12-12  9:03                           ` Stuart
2006-12-12 10:56                           ` Georg Bauhaus
2006-12-11  7:00                 ` Simon Wright
2006-12-07  4:06     ` Jeffrey R. Carter
replies disabled

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