comp.lang.ada
 help / color / mirror / Atom feed
* Accessibility levels, continued
@ 1999-02-05  0:00 adam
  1999-02-05  0:00 ` Robert A Duff
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: adam @ 1999-02-05  0:00 UTC (permalink / raw)


Should this program 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.  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".  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.

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.

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

                                -- thanks, Adam

-----------== Posted via Deja News, The Discussion Network ==----------
http://www.dejanews.com/       Search, Read, Discuss, or Start Your Own    




^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~1999-02-05  0:00 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1999-02-05  0:00 Accessibility levels, continued adam
1999-02-05  0:00 ` Robert A Duff
1999-02-05  0:00 ` Tucker Taft
1999-02-05  0:00 ` adam

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