Go to the first, previous, next, last section, table of contents.
-
A parameter_specification declares a formal parameter of mode in, in
out, or out.
Static Semantics
-
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.
-
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.
-
A type is a by-reference type if it is a descendant of one of the
following:
-
a tagged type;
-
a task or protected type;
-
a nonprivate type with the reserved word limited in its declaration;
-
a composite type with a subcomponent of a by-reference type;
-
a private type whose full type is a by-reference type.
-
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.
-
For parameters of other types, it is unspecified whether the parameter
is passed by copy or by reference.
Bounded (Run-Time) Errors
-
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.
NOTES
-
(5) A formal parameter of mode in is a constant view, See section 3.3 Objects and Named Numbers, it
cannot be updated within the subprogram_body.
Go to the first, previous, next, last section, table of contents.