comp.lang.ada
 help / color / mirror / Atom feed
From: aio!dnsurber@tmc.edu  (Douglas N. Surber)
Subject: Re: null arrays
Date: 18 Nov 92 14:48:45 GMT	[thread overview]
Message-ID: <dnsurber.722098125@node_26400> (raw)

In <BxvtCA.LM1@dale.cts.com> jhb@dale.cts.com (John Bollenbacher) writes:

>procedure TEST is

>  subtype T is NATURAL range 0 .. 10;

>  type ARR is array (T range <>) of BOOLEAN;
>  
>  type A(N : T := 0) is record 
>    DATA : ARR(1..N);
>  end record;  
>  I : INTEGER;
>  O : A := (3, (TRUE, FALSE, TRUE));
>  
>  N1 : constant ARR := O.DATA(1..0) & O.DATA(1..0);
>  N2 : constant ARR := O.DATA(1..0) & O.DATA(3..2);

N2'first = 3 (LRM 4.5.3 4)

>begin
>  I := N1'LENGTH; -- I = 0 
>  I := N2'LENGTH; -- I = 0
>  O := (0, N1);   -- does not raise constraint
>  O := (0, N2);   -- raises constraint
 
O.Data'first /= N2'first thus raises constraint error (LRM 4.3.1 3, 3.3 4)

>end TEST; 

The trick here is that the constraint error is raised in forming the
aggregate, not in the assignment.  LRM 4.3.1 3 says "A check is made that
the value of each subcomponent of the aggregate _belongs_ to the subtype
of this component."  The magic word is "belongs".  LRM 3.3 4 says "a value
is said to belong to a subtype of a given type if it belongs to the type
and satisfies the constraint." The bounds of N2, i.e. 3 and 2, do not
satisfy the constraint of the aggregate, i.e. in the range 1 .. 0.  If this
were an array assignment rather than an aggregate, it would work.

Douglas Surber
Lockheed
Houston, TX

             reply	other threads:[~1992-11-18 14:48 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1992-11-18 14:48 Douglas N. Surber [this message]
  -- strict thread matches above, loose matches on Subject: below --
1992-11-20 20:38 null arrays Tucker Taft
1992-11-18 13:22 cis.ohio-state.edu!zaphod.mps.ohio-state.edu!saimiri.primate.wisc.edu!apl
replies disabled

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