comp.lang.ada
 help / color / mirror / Atom feed
From: "J-P. Rosen" <rosen@adalog.fr>
Subject: Re: Question on variant/discriminated records
Date: Thu, 31 Dec 2020 11:52:23 +0100	[thread overview]
Message-ID: <rskah8$85j$1@dont-email.me> (raw)
In-Reply-To: <3c1a2fe9-e8f2-401f-870d-aecd9e0f9c69n@googlegroups.com>

Le 31/12/2020 à 11:38, reinert a écrit :
> Assume the following program and change "y1" to "y". 
> 
> procedure test3 is
>  type options1_Type is (a,b,c);
>  type rec1_Type(option1 : options1_Type) is
>    record
>       x : Float;
>       case option1 is
>         when a => null;
>         when b => y : float;
>         when c => y1,z : float;
>       end case;
>    end record;
> begin
>    null;
> end test3;
> 
> My compiler does not like this change.  I find it not natural to invent
> a new name "y1" instead of "y". What should I do?
> 
Yes, it is a rule that identifiers in parallel branches cannot be
identical. And there is a good reason for this: in Ada, when you access
a component, the compiler checks that the component exists, according to
the value of the discriminant. Assume that you write (if V is of type
rec1_type):
   V.Y := 1.0;

If both components are named Y, should the discriminant be B or C?
-- 
J-P. Rosen
Adalog
2 rue du Docteur Lombard, 92441 Issy-les-Moulineaux CEDEX
Tel: +33 1 45 29 21 52, Fax: +33 1 45 29 25 00
http://www.adalog.fr

  reply	other threads:[~2020-12-31 10:52 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-31 10:38 Question on variant/discriminated records reinert
2020-12-31 10:52 ` J-P. Rosen [this message]
2020-12-31 12:24   ` reinert
2020-12-31 12:46     ` Gautier write-only address
2020-12-31 12:57       ` reinert
2020-12-31 13:29       ` DrPi
2020-12-31 16:06         ` Gautier write-only address
2020-12-31 15:03 ` Dmitry A. Kazakov
2021-01-01  9:19   ` reinert
replies disabled

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