comp.lang.ada
 help / color / mirror / Atom feed
From: "J-P. Rosen" <rosen@adalog.fr>
Subject: Re: Assignment access type with discriminants
Date: Fri, 24 Mar 2023 10:41:20 +0100	[thread overview]
Message-ID: <tvjr7l$1js79$1@dont-email.me> (raw)
In-Reply-To: <k83llkF8ubmU2@mid.individual.net>

Le 23/03/2023 à 19:55, Niklas Holsti a écrit :
 >
 >> Here is a slightly modified version of your example:
 >>
 >> procedure Test is
 >>     type F is (F1, F2, F3);
 >>
 >>     type Foo (K : F := F1) is record
 >>        case K is
 >>           when F1 =>
 >>              X1 : Integer;
 >>           when F2 =>
 >>              X2 : Float;
 >>           when F3 =>
 >>              X3 : String (1..2);
 >>        end case;
 >>     end record;
 >>     type Foo_Ptr is access all Foo;
 >>     type Foo_Ptr2 is access Foo;
 >>     X : aliased Foo;
 >>     P : Foo_Ptr := X'Access;
 >>     PF2: Foo_PTR2 (F2);
 >> begin
 >>     X := (F2, 1.0);   -- OK
 >>     PF2 := new Foo (F2);
 >>     P := PF2.all'Access;
 >>     P.all := (F1, 3); -- Error!
 >> end Test;
 >>
 >> Without this rule, PF2.all would now designate a value whose
 >> discriminant is F1!
 >
 >
 > This error is understandable and valid, because now P.all is PF2.all
 > which is an allocated object and therefore constrained by its initial
 > value with K = F2.
 >
 > But why should the same apply when P designates X, which is
 > unconstrained? Is it just an optimization (in the RM) so that a
 > general access value does not have to carry around a flag showing
 > whether its designated object is constrained or unconstrained?

I didn't dig in the RM in all details, but I think this comes from the 
fact that being constrained (always) is a property of the pointer (more 
precisely, its subtype), not of the pointed-at object.

-- 
J-P. Rosen
Adalog
2 rue du Docteur Lombard, 92441 Issy-les-Moulineaux CEDEX
https://www.adalog.fr https://www.adacontrol.fr

  parent reply	other threads:[~2023-03-24  9:41 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-22  9:19 Assignment access type with discriminants Dmitry A. Kazakov
2023-03-22  9:31 ` Björn Lundin
2023-03-22 14:10 ` G.B.
2023-03-23 11:51   ` Dmitry A. Kazakov
2023-03-23 16:53     ` AdaMagica
2023-03-23 18:09       ` Niklas Holsti
2023-03-23 17:04 ` J-P. Rosen
2023-03-23 18:55   ` Niklas Holsti
2023-03-23 19:53     ` Dmitry A. Kazakov
2023-03-24  9:41     ` J-P. Rosen [this message]
2023-03-25  8:51       ` Randy Brukardt
replies disabled

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