comp.lang.ada
 help / color / mirror / Atom feed
From: Tucker Taft <stt@averstar.com>
Subject: Re: Accessibility levels, continued
Date: 1999/02/05
Date: 1999-02-05T00:00:00+00:00	[thread overview]
Message-ID: <36BB771D.1825E9C@averstar.com> (raw)
In-Reply-To: 79dse1$ut4$1@nnrp1.dejanews.com

adam@irvine.com wrote:
> 
> Should this program raise an exception?

No.  The "accessibility level" of Var passes through the
two calls with access parameters, meaning that your line marked
[1] is equivalent to "Acc_Var := Var'access;" as far
as accessibility checking, with the difference that the check is
performed at run-time rather than compile-time.
 
>     procedure Test is
> 
>         type T is record
>             Field : Integer;
>         end record;
> 
>         Var : T;
> 
>         type Access_T is access T;
>         Acc_Var : Access_T;
> 
>         procedure Outer (Outer_Param : access T) is
> 
>             procedure Inner (Inner_Param : access T) is
>             begin
>                 Acc_Var := Inner_Param.all'access; -- [1]
>             end Inner;
> 
>         begin
>             Inner (Outer_Param);
>         end Outer;
> 
>     begin
>         Outer (Var'access);                        -- [2]
>     end Test;
> 
> It doesn't look like it should, if you follow the intent of the
> accessibility rules in 3.10.2.  Acc_Var will be assigned to an access
> to Var, and since Acc_Var's type does not have a deeper accessibility
> level than Var, everything should be fine.  However, I believe that
> the way the RM is written, the program should raise Program_Error at
> line [1].  Here's what seems to be going on:
> 
> 3.10.2(29): 'ACCESS will succeed as long as the accessibility level of
> Inner_Param.all is not deeper than that of Access_T.
> 
> 3.10.2(15): The accessibility level of Inner_Param.all equals that of
> Inner_Param's type, which is an anonymous access type.
> 
> 3.10.2(13): The accessibility level of Inner_Param's anonymous access
> type is the same as that of the view designated by the actual, in this
> case Outer_Param.
> 
> I don't know the exact meaning of the "view designated by the actual"
> when the actual is another parameter.  I haven't found any reason to
> believe that the last clause of the above paragraph is different from,
> more simply, "the accessibility level of Outer_Param". 

No, it is the accessibility level of the object *designated* by
Outer_Param.  Remember that "designated" by is the same as
"pointed-to" by.  Ada mantra: "Pointers point, access values designate,
names denote."

> ... Which leads
> us to:
> 
> 3.10.2(7): Since Outer_Param is a parameter, the accessibility level
> of Outer_Param is the same as its master, Outer.

If you had written Outer_Param'Access, then you would be 
interested in the accessibility level of Outer_Param itself.
But if you just write Outer_Param, you are interested in 
the accessibility level of the thing it points at (Outer_Param.all).
"Access parameters" (aka parameters of an anonymous access type)
are unique in that they "carry" along at run-time the accessibility
level of the thing they point at (their designated object). 


> Stringing everything together, the accessibility level of
> Inner_Param.all'access is the same as that of Outer; and since the
> accessibility level of Outer is deeper than that of Access_T, the
> program should raise a Program_Error.

Nope.  The accessibility level of Inner_Param.all is the same
as that of Outer_param.all, which is the same as Var.

> Is this the right interpretation?  Or did I miss something?

You missed (no William Tell award today ;-).

>                                 -- thanks, Adam

-Tuck
-- 
-Tucker Taft   stt@averstar.com   http://www.averstar.com/~stt/
Technical Director, Distributed IT Solutions  (www.averstar.com/tools)
AverStar (formerly Intermetrics, Inc.)   Burlington, MA  USA




      parent reply	other threads:[~1999-02-05  0:00 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1999-02-05  0:00 Accessibility levels, continued adam
1999-02-05  0:00 ` Robert A Duff
1999-02-05  0:00 ` adam
1999-02-05  0:00 ` Tucker Taft [this message]
replies disabled

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