comp.lang.ada
 help / color / mirror / Atom feed
From: Adam Beneschan <adambeneschan@gmail.com>
Subject: Re: Quick question regarding limited type return syntax
Date: Wed, 30 Jul 2014 18:29:10 -0700 (PDT)
Date: 2014-07-30T18:29:10-07:00	[thread overview]
Message-ID: <bf9193d6-e1a8-4df3-8e36-b07a2b07655e@googlegroups.com> (raw)
In-Reply-To: <16a6846f-2964-438a-ab9b-2029075f7924@googlegroups.com>

On Wednesday, July 30, 2014 6:00:43 PM UTC-7, NiGHTS wrote:
> On Wednesday, July 30, 2014 8:48:34 PM UTC-4, Shark8 wrote:
> 
> > On 30-Jul-14 17:51, NiGHTS wrote:
> 
> > >   return  Object (Connection_String'Access) do null; end return;

> package body Test is
>    function Create(...) return Object is
>       ...
>    begin
>       return Object'(Connection_String'Access);
>    end;
>    ...
> end Test;

What you need to do is return an aggregate.  And to return an aggregate, you need to specify both fields--the Parameters discriminant and the Database.  This syntax:

    Object'(Connection_String'Access)

is just wrong.  It tells the compiler that the value is Connection_String'Access, and asks the compiler to treat it as an Object.  It can't do that, because Object isn't an access type.  (This sort of syntax can be useful in overloading cases, when the compiler can't determine the correct access type without help.)

If you said

    Object'(Parameters => Connection_String'Access)

you'd get an error that Database is missing.  So you need

    Object'(Parameters => Connection_String'Access, Database => <>)

or just

    (Parameters => Connection_String'Access, Database => <>)

or    

    (Parameters => Connection_String'Access, others => <>)

(It's OK for a function that returns a limited type to return an aggregate like this.)

The effect is that subcomponents of Database that have default initial values will be initialized, and subcomponents that don't have default initial values will be initialized to garbage (except where the language says otherwise).  That's really the same as your original example was trying to do.  I guess that explicitly putting "others => <>" in an aggregate is enough to convince GNAT not to think you were accidentally leaving something initialized to garbage.  

                              -- Adam




  reply	other threads:[~2014-07-31  1:29 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-30 23:51 Quick question regarding limited type return syntax NiGHTS
2014-07-31  0:02 ` Adam Beneschan
2014-07-31  0:56   ` NiGHTS
2014-07-31  0:48 ` Shark8
2014-07-31  1:00   ` NiGHTS
2014-07-31  1:29     ` Adam Beneschan [this message]
2014-07-31  1:38       ` NiGHTS
2014-07-31  4:01         ` Shark8
2014-08-01  2:12       ` Randy Brukardt
2014-08-01  3:40         ` Shark8
2014-08-01  7:57         ` J-P. Rosen
2014-08-01 19:23           ` Randy Brukardt
2014-08-01 19:37             ` J-P. Rosen
2014-08-01 20:53             ` Shark8
2014-08-02  7:11               ` Niklas Holsti
2014-08-02  7:34                 ` Dmitry A. Kazakov
2014-08-02 13:20                   ` Robert A Duff
2014-08-02 13:44                     ` Dmitry A. Kazakov
2014-08-02 14:34                       ` Robert A Duff
2014-08-02 16:56                         ` Dmitry A. Kazakov
2014-08-02 20:35                           ` Niklas Holsti
2014-08-03  7:30                             ` Dmitry A. Kazakov
2014-08-04  9:24                               ` Niklas Holsti
2014-08-04 10:42                                 ` G.B.
2014-08-04 11:39                                   ` Peter Chapin
2014-08-04 17:49                                     ` Niklas Holsti
2014-08-04 11:36                                 ` Peter Chapin
2014-08-04 12:43                                 ` Dmitry A. Kazakov
2014-08-04 16:19                                   ` G.B.
2014-08-04 16:38                                     ` Dmitry A. Kazakov
2014-08-04 16:51                                       ` G.B.
2014-08-04 17:23                                         ` Dmitry A. Kazakov
2014-08-04 19:37                                   ` Niklas Holsti
2014-08-05  8:30                                     ` Dmitry A. Kazakov
2014-08-05 19:24                                       ` Randy Brukardt
2014-08-03 16:35                           ` Robert A Duff
2014-08-02  8:02               ` Jacob Sparre Andersen
2014-08-02 19:20                 ` Shark8
2014-08-03 16:07                   ` Default values (Was: Quick question regarding limited type return syntax) Jacob Sparre Andersen
2014-08-04 21:29                     ` 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