6.2 Formal Parameter Modes
1
A parameter_specification
declares a formal parameter of mode in, in out, or out.
Static Semantics
2
A
parameter is passed either
by copy or
by reference. When
a parameter is passed by copy, the formal parameter denotes a separate
object from the actual parameter, and any information transfer between
the two occurs only before and after executing the subprogram. When a
parameter is passed by reference, the formal parameter denotes (a view
of) the object denoted by the actual parameter; reads and updates of
the formal parameter directly reference the actual parameter object.
3
A type is a
by-copy type
if it is an elementary type, or if it is a descendant of a private type
whose full type is a by-copy type. A parameter of a by-copy type is passed
by copy.
4
A
type is a
by-reference type if it is a descendant of one of the
following:
5
6
- a task or protected type;
7
- a nonprivate type with the reserved
word limited in its declaration;
8
- a composite type with a subcomponent
of a by-reference type;
9
- a private type whose full type is
a by-reference type.
10
A parameter of a by-reference type is passed by reference.
Each value of a by-reference type has an associated
object. For a parenthesized expression,
qualified_expression,
or
type_conversion, this object is the one
associated with the operand.
11
For parameters of other types,
it is unspecified whether the parameter is passed by copy or by reference.
Bounded (Run-Time) Errors
12
If
one
name denotes a part of a formal parameter,
and a second
name denotes a part of a distinct
formal parameter or an object that is not part of a formal parameter,
then the two
names are considered
distinct
access paths. If an object is of a type for which the parameter passing
mechanism is not specified, then it is a bounded error to assign to the
object via one access path, and then read the value of the object via
a distinct access path, unless the first access path denotes a part of
a formal parameter that no longer exists at the point of the second access
(due to leaving the corresponding callable construct).
The
possible consequences are that Program_Error is raised, or the newly
assigned value is read, or some old value of the object is read.
13
5 A formal parameter of mode
in
is a constant view (see
3.3); it cannot be
updated within the
subprogram_body.