Contents   Index   Search   Previous   Next
 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.
 
Contents   Index   Search   Previous   Next   Legal