From: Robert A Duff <bobduff@world.std.com>
Subject: Re: Accessibility levels, continued
Date: 1999/02/05
Date: 1999-02-05T00:00:00+00:00 [thread overview]
Message-ID: <wcc1zk47jon.fsf@world.std.com> (raw)
In-Reply-To: 79dse1$ut4$1@nnrp1.dejanews.com
adam@irvine.com writes:
> Should this program raise an exception?
It's illegal (ie compile-time error). ;-)
(OK, sorry for being a smart-aleck. If you fix the compile-time error,
it should not raise an exception.)
> 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.
Right.
>...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.
So far, so good.
> 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".
"Designated" means the thing it points to. It's not the same thing as
"denoted". The actual is Outer_Param; the designated object is
Outer_Param.all. So you then invoke the same paragraphs you mentioned
above, again. So you end up with the accessibility level of Var, which
is the *same* as Access_T, so all is well.
- Bob
--
Change robert to bob to get my real email address. Sorry.
prev 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 ` Tucker Taft
1999-02-05 0:00 ` adam
1999-02-05 0:00 ` Robert A Duff [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