From: Jeffrey Carter <jrcarter@acm.org>
Subject: Re: Question about subtype of loop index variable
Date: Thu, 10 Oct 2002 20:09:25 GMT
Date: 2002-10-10T20:09:25+00:00 [thread overview]
Message-ID: <3DA5DE58.4030105@acm.org> (raw)
In-Reply-To: 3DA5CF6D.C703306F@cadence.com
Paul Graham wrote:
> with Text_Io; use Text_Io;
> procedure Test_Range is
> package Int_Io is new Integer_Io(Integer); use Int_Io;
> type T1 is range 0 .. 7;
> type T2 is array(T1 range <>) of Integer;
> X : T2(0 .. 3);
> Y : Integer;
> begin
> Y := 0;
> for I in X'First - 1 .. X'Last + 1 loop
> Y := Y + 1;
> end loop;
> Put("Y = ");
> Put(Y);
> New_Line;
> end;
>
> My question is, what is the type (and subtype) of loop index I? Since
> the
> expressions X'First - 1 and X'Last + 1 are of type T1, then
> I is also of type T1. But the values X'First - 1 and X'Last + 1 lie
> outside
> the bounds of T1, so I would think that a range constraint error would
> occur
> as I is assigned these values. Yet gnat 3.13 compiles and executes this
> code
> without error. Am I misunderstanding something?
I think so. The expressions X'First - 1 and X'Last + 1 are evaluated
using the base type of the subtype. In this case the subtype is T1,
because types are always anonymous and the name in a type statement is
the "first named subtype". The base type of T1 is T1'Base. T1'Base has a
range of at least -7 .. 7 because signed integer types are symmetric
about 0 but may have an additional negative value. The compiler almost
certainly used an 8-bit base type here, so the real range is probably
-128 .. 127; you can check by printing out T1'Base'First and T1'Base'Last.
Of course, it would be easier and quicker to calculate Y as
Y := X'Length + 2;
--
Jeff Carter
"You've got the brain of a four-year-old boy,
and I bet he was glad to get rid of it."
Horse Feathers
next prev parent reply other threads:[~2002-10-10 20:09 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-10-10 19:05 Question about subtype of loop index variable Paul Graham
2002-10-10 20:09 ` Jeffrey Carter [this message]
2002-10-10 21:01 ` 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