From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.3 required=5.0 tests=BAYES_00,INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,cc43b0dfc6b2a131 X-Google-Attributes: gid103376,public From: Robert A Duff Subject: Re: Accessibility levels, continued Date: 1999/02/05 Message-ID: #1/1 X-Deja-AN: 441091516 Sender: bobduff@world.std.com (Robert A Duff) References: <79dse1$ut4$1@nnrp1.dejanews.com> Organization: The World Public Access UNIX, Brookline, MA Newsgroups: comp.lang.ada Date: 1999-02-05T00:00:00+00:00 List-Id: 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.