5.2.1 Target Name Symbols
{
AI12-0125-3}
@, known as the
target name of an assignment statement, provides
an abbreviation to avoid repetition of potentially long names in assignment
statements.
Syntax
Name Resolution Rules
Proof: {
AI12-0125-3}
{
AI12-0322-1}
The complete context rule is formally given in
8.6.
The constant view rule is formally given in
3.3;
the nominal subtype is a property taken from the target object as described
below in Dynamic Semantics.
Legality Rules
Dynamic Semantics
To be honest: The properties here include
static properties like whether the
target_name
is aliased and the nominal subtype of the
target_name.
It was too weird to give separate rules for static and dynamic properties
that said almost the same thing.
Ramification: {
AI12-0322-1}
Use of a
target_name
can be erroneous if the
variable_name
V is a discriminant-dependent component, and some other constituent
of the
expression
modifies the discriminant governing the component
V. The assignment
probably would be erroneous anyway, but the use of a
target_name
eliminates the possibility that a later evaluation of
V raises
an exception before any erroneous execution occurs. See
3.7.2.
Examples
{
AI12-0429-1}
Examples of the use of target name symbols:
{
AI12-0125-3}
My_Complex_Array :
array (1 .. Max)
of Complex; --
See 3.3.2, 3.8.
...
--
Square the element in the Count (see 3.3.1) position:
My_Complex_Array (Count) := (Re => @.Re**2 - @.Im**2,
Im => 2.0 * @.Re * @.Im);
--
A target_name can be used multiple times and
--
as a prefix if desired.
Extensions to Ada 2012
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe