comp.lang.ada
 help / color / mirror / Atom feed
From: Jere <jhb.chat@gmail.com>
Subject: Re: limited agregate and limited components default initialization
Date: Sat, 31 Mar 2018 19:40:20 -0700 (PDT)
Date: 2018-03-31T19:40:20-07:00	[thread overview]
Message-ID: <27d34604-c37e-4731-886d-41cdc6addfec@googlegroups.com> (raw)
In-Reply-To: <c4fa910b-cd5e-495a-a7e5-9dd899f09f12@googlegroups.com>

On Saturday, March 31, 2018 at 10:07:20 PM UTC-4, Jean-Claude Rostaing wrote:
> --
> -- Item_type and ITEM_RECORD are NOT meant to be declared uninitialized, ever.
> -- So how do I tell this to GNAT so that Item: aliased ITEM_TYPE as a component is allowed ?
> -- Implementing List_type with common access types and "type Bla, type Blabla is access Bla, complete declaration" would have been easy, but the private type Smart_Pointers made a hell of it.
> 
> with Pointers;
> 
> generic
>    type Item_Type(<>) is limited private;
> package Lists is
>    type List_Type is limited private;
>    type Item_Accessor (Item: not null access Item_type) is limited private with Implicit_Dereference => Item;
>       function Get(Position: in List_Iterator) return Item_Accessor;
> private
>    type ITEM_ACCESS;
>    type Item_Record is limited
>       record
>          Item: aliased Item_type;
>          Next : Item_Access;
>          Pred : Item_Access;
>       end record;
>    package Record_Pointers is new Pointers (Item_type => Item_Record);
>    type Item_Access is new Record_Pointers.Smart_Pointers;
> 
>    type Item_Accessor (Item: not null access Item_type) is limited record
>       REF: ITEM_ACCESS := SET(ITEM_RECORD'(ITEM.all, others => <>));
>    end record;
> 
>    type List_Type is limited record
>       First: Item_Access;
>       Last : Item_Access;
>       Count : Natural := 1;
>    end record;
> end Lists;
> 
> And what I was pointing your attention at was:
> lists.ads:39:49: initialization not allowed for limited types
> for: REF: ITEM_ACCESS := SET(ITEM_RECORD'(ITEM.all, others => <>));

Ok, your problems:
1.  For  your Item_Record type, the parameter Item, cannot be of type
    Item_Type as it is unconstrained.  That is what gives you the first
    error
2.  Item'(Item.all, others => <>) ==>  The problem here is "Item.all".
    You are essentially trying to initialize a limited component with
    a limited variable and copying a limited variable is not allowed.

you need a function that builds a limited type of type Item_Type and use
that in place of Set.  It has to be aggregate initialization.  What you
are trying to do is copy a limited variable to initialize another.
Essentially your Lists package needs to be modified:

generic
    type Item_Type is limited private;  --removed unconstrained
    with function Make_Item return Item_Type;
package Lists is

then your set call is:

REF: ITEM_ACCESS := SET(Make_Item);


  reply	other threads:[~2018-04-01  2:40 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-31 23:36 limited agregate and limited components default initialization Jean-Claude Rostaing
2018-04-01  0:52 ` Jere
2018-04-01  1:12   ` Jere
2018-04-01  1:16   ` Jean-Claude Rostaing
2018-04-01  1:34     ` Jere
2018-04-01  2:07       ` Jean-Claude Rostaing
2018-04-01  2:40         ` Jere [this message]
2018-04-01  2:54           ` Jere
2018-04-01  3:14         ` Jere
2018-04-01  3:31           ` Jere
2018-04-01  9:32         ` Jacob Sparre Andersen
2018-04-01 12:58           ` Jean-Claude Rostaing
2018-04-01 13:33 ` Dmitry A. Kazakov
2018-04-01 15:46   ` Jean-Claude Rostaing
2018-04-01 15:53     ` Jean-Claude Rostaing
2018-04-01 15:54       ` Jean-Claude Rostaing
2018-04-01 21:31       ` Dmitry A. Kazakov
2018-04-02  3:44         ` Randy Brukardt
2018-04-02 11:25           ` Jean-Claude Rostaing
2018-04-02 12:11             ` Dmitry A. Kazakov
2018-04-02 12:15             ` Jean-Claude Rostaing
2018-04-02 21:37             ` Randy Brukardt
2018-04-03 17:01               ` Jeffrey R. Carter
2018-04-05 10:27           ` AdaMagica
2018-04-02  3:42     ` Randy Brukardt
2018-04-01 22:52 ` Jean-Claude Rostaing
2018-04-01 23:36   ` Jean-Claude Rostaing
2018-04-01 23:39     ` Jean-Claude Rostaing
2018-04-02 18:19       ` Jere
2018-04-02 18:50         ` Dmitry A. Kazakov
2018-04-02 19:46           ` Jere
2018-04-02 19:59             ` Dmitry A. Kazakov
2018-04-02 21:03               ` Jean-Claude Rostaing
2018-04-03  8:14                 ` Dmitry A. Kazakov
2018-04-03  1:27             ` Dennis Lee Bieber
2018-04-02 22:39     ` Robert I. Eachus
2018-04-03 18:18 ` Jean-Claude Rostaing
2018-04-03 18:28   ` Jean-Claude Rostaing
2018-04-03 19:18   ` Jeffrey R. Carter
2018-04-03 19:25     ` Jean-Claude Rostaing
2018-04-03 20:12       ` Jeffrey R. Carter
2018-04-03 22:37         ` Jean-Claude Rostaing
2018-04-04  2:18   ` Jere
replies disabled

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