{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.
{AI12-0125-3}
[If a target_name
occurs in an assignment_statementA, the variable_nameV of A is a complete context. The target name is a constant
view of V, having the nominal subtype of V.]
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.
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_nameV 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.
{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.