comp.lang.ada
 help / color / mirror / Atom feed
From: Scott Renfro <srenfro@sirinet.net>
Subject: Discriminant as default initial value
Date: 1997/03/29
Date: 1997-03-29T00:00:00+00:00	[thread overview]
Message-ID: <333DB640.59EA@sirinet.net> (raw)


Greetings,

I'm new to Ada and have scoured the FAQ, RM, and Rationale, but haven't
found an answer to my question that I understand.

I want to use a discriminant in a record as both a bound in the index
constraint of a component declaration and as a default initial value. 
I'm not sure that this is allowed by the RM.

The following example, while contrived, exhibits behavior that I
definitely do not understand.  Using GNAT 3.09 for NT with Max defined
before the Position Matrix, the component record is initialized as
expected.  When Max is defined after the Position Matrix within the
record, Max is initialized to a large value that is not even within the
subtype's range.  No exception is raised.

Is this expected behavior?  Is it permissible to use the same
discriminant as both an index bound and a default initial value?  Should
the behavior change when the order of declaration within the record
changes?

Thanks in advance,
Scott

-----------------------------------------------------
--
-- Test_Discrim.adb
--
-----------------------------------------------------
with Ada.Text_IO, Ada.Command_Line;
use  Ada.Text_IO;

procedure Test_Discrim is

   type Matrix is array (Integer range <>, Integer range <>) of Integer;
   subtype Matrix_Range is Natural range 1 .. 80;
   
   type Matrix_Record (Columns : Matrix_Range) is
      record
--         Max      : Natural := Columns;   -- if declared here, all is
well
         Position : Matrix (1 .. Columns, 1 .. Columns);
         Max      : Matrix_Range := Columns;   -- if declared here, max
improper
      end record;

   width : Matrix_Range := 1;
   
begin
   width := Integer'value (Ada.Command_Line.Argument (1));
   declare
      Temp_Matrix : Matrix_Record (Width);
   begin
      Put_Line (Integer'Image (Temp_Matrix.Max));
   end;
end test_discrim;




             reply	other threads:[~1997-03-29  0:00 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1997-03-29  0:00 Scott Renfro [this message]
1997-03-29  0:00 ` Discriminant as default initial value Matthew Heaney
1997-03-30  0:00   ` Scott Renfro
1997-03-30  0:00 ` Bob Klungle
1997-03-30  0:00   ` Robert Dewar
1997-03-31  0:00     ` Bob Klungle
1997-03-31  0:00       ` Robert Dewar
1997-03-31  0:00 ` Jon S Anthony
1997-03-31  0:00   ` Robert Dewar
1997-04-02  0:00   ` Jon S Anthony
  -- strict thread matches above, loose matches on Subject: below --
1997-03-30  0:00 Kees de Lezenne Coulande
1997-03-30  0:00 ` Robert Dewar
1997-04-02  0:00 Kees de Lezenne Coulande
1997-04-02  0:00 ` Robert Dewar
1997-04-07  0:00   ` Keith Thompson
1997-04-02  0:00 ` Scott Renfro
1997-04-02  0:00   ` Robert Dewar
replies disabled

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