- (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.
-- Email comments, additions, corrections, gripes, kudos, etc. to:
Magnus Kempe -- Magnus.Kempe@di.epfl.ch
Copyright statement
Page last generated: 95-03-12