Contents Index Previous Next
13.10 Unchecked Access Value Creation
1
[The attribute Unchecked_Access is used to create
access values in an unsafe manner -- the programmer is responsible for
preventing ``dangling references.'']
Static Semantics
2
The following attribute
is defined for a prefix X that denotes
an aliased view of an object:
3
- X'Unchecked_Access
- 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}
4
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'').
4.a
Ramification: {expected
type (Unchecked_Access attribute) [partial]} The
expected type for X'Unchecked_Access is as for X'Access.
4.b
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.
5
22 There is no Unchecked_Access
attribute for subprograms.
5.a
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.
5.b
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 Previous Next Legal