8.5.1 Object Renaming Declarations
Syntax
Name Resolution Rules
The type of the
object_name
shall resolve to the type determined by the
subtype_mark,
or in the case where the type is defined by an
access_definition,
to an anonymous access type. If the anonymous access type is an access-to-object
type, the type of the
object_name
shall have the same designated type as that of the
access_definition.
If the anonymous access type is an access-to-subprogram type, the type
of the
object_name
shall have a designated profile that is type conformant with that of
the
access_definition.
Legality Rules
The renamed entity shall be an object.
shall both be access-to-object types with statically
matching designated subtypes and with both or neither being access-to-constant
types; or
shall both be access-to-subprogram types with subtype
conformant designated profiles.
if the
object_name
denotes a generic formal object of a generic unit
G, and the
object_renaming_declaration
occurs within the body of
G or within the body of a generic unit
declared within the declarative region of
G, then the declaration
of the formal object of
G shall have a
null_exclusion;
otherwise, the subtype of the
object_name
shall exclude null.
In addition to the places where
Legality Rules normally apply (see
12.3),
this rule applies also in the private part of an instance of a generic
unit.
The renamed entity shall not be a subcomponent that
depends on discriminants of a variable whose nominal subtype is unconstrained,
unless this subtype is indefinite, or the variable is constrained by
its initial value. A
slice
of an array shall not be renamed if this restriction disallows renaming
of the array. In addition to the places where Legality Rules normally
apply, these rules apply also in the private part of an instance of a
generic unit. These rules also apply for a renaming that appears in the
body of a generic unit, with the additional requirement that even if
the nominal subtype of the variable is indefinite, its type shall not
be a descendant of an untagged generic formal derived type.
Static Semantics
Examples
Example of renaming
an object:
declare
L : Person
renames Leftmost_Person; --
see 3.10.1
begin
L.Age := L.Age + 1;
end;