Contents   Index   Search   Previous   Next

13.10 Unchecked Access Value Creation

   [The attribute Unchecked_Access is used to create access values in an unsafe manner -- the programmer is responsible for preventing ``dangling references.'']

Static Semantics

   The following attribute is defined for a prefix X that denotes an aliased view of an object:
All rules and semantics that apply to X'Access (see 3.10.2) apply also to X'Unchecked_Access, except that, for the purposes of accessibility rules and checks, it is as if X were declared immediately within a library package. {Access attribute: See also Unchecked_Access attribute}
21  This attribute is provided to support the situation where a local object is to be inserted into a global linked data structure, when the programmer knows that it will always be removed from the data structure prior to exiting the object's scope. The Access attribute would be illegal in this case (see 3.10.2, ``Operations of Access Types'').
Ramification: {expected type (Unchecked_Access attribute) [partial]} The expected type for X'Unchecked_Access is as for X'Access.
If an attribute_reference with Unchecked_Access is used as the actual parameter for an access parameter, an Accessibility_Check can never fail on that access parameter.
22  There is no Unchecked_Access attribute for subprograms.
Reason: Such an attribute would allow ``downward closures,'' where an access value designating a more nested subprogram is passed to a less nested subprogram. This requires some means of reconstructing the global environment for the more nested subprogram, so that it can do up-level references to objects. The two methods of implementing up-level references are displays and static links. If downward closures were supported, each access-to-subprogram value would have to carry the static link or display with it. In the case of displays, this was judged to be infeasible, and we don't want to disrupt implementations by forcing them to use static links if they already use displays.
If desired, an instance of Unchecked_Conversion can be used to create an access value of a global access-to-subprogram type that designates a local subprogram. The semantics of using such a value are not specified by the language. In particular, it is not specified what happens if such subprograms make up-level references; even if the frame being referenced still exists, the up-level reference might go awry if the representation of a value of a global access-to-subprogram type doesn't include a static link.

Contents   Index   Search   Previous   Next   Legal