Contents Index Search Related Documents Previous Next
12.4 Formal Objects
1
A generic
formal object can be used to pass a value or variable to a generic unit.
Syntax
2/2
formal_object_declaration
::=
defining_identifier_list :
mode [
null_exclusion]
subtype_mark [:=
default_expression];
defining_identifier_list :
mode access_definition [:=
default_expression];
Name Resolution Rules
3
The expected type for the
default_expression, if any, of a
formal object is the type of the formal object.
4
For a generic formal object
of mode
in, the expected type for the actual is the type of the
formal.
5/2
For a generic formal object of mode
in out,
the type of the actual shall resolve to the type determined by the
subtype_mark,
or for a
formal_object_declaration
with an
access_definition, to a
specific anonymous access type. If the anonymous access type is an access-to-object
type, the type of the actual shall have the same designated type as that
of the
access_definition. If the
anonymous access type is an access-to-subprogram type, the type of the
actual shall have a designated profile which is type conformant with
that of the
access_definition.
.
Legality Rules
6
If a generic formal object has a default_expression,
then the mode shall be in (either explicitly or by default); otherwise,
its mode shall be either in or in out.
7
For a generic formal object of mode
in,
the actual shall be an
expression.
For a generic formal object of mode
in out, the actual shall be
a
name that denotes a variable for
which renaming is allowed (see
8.5.1).
8/2
In the case where
the type of the formal is defined by an access_definition,
the type of the actual and the type of the formal:
8.1/2
- shall both be access-to-object types
with statically matching designated subtypes and with both or neither
being access-to-constant types; or
8.2/2
- shall both be access-to-subprogram
types with subtype conformant designated profiles.
8.3/2
For a formal_object_declaration
with a null_exclusion or an access_definition
that has a null_exclusion:
8.4/2
- for an instantiation that occurs within
the body of a generic unit or within the body of a generic unit declared
within the declarative region of the generic unit, and the actual denotes
a generic formal object of that generic unit, then the declaration of
that formal object shall have a null_exclusion;
8.5/2
- otherwise, the subtype of the actual
shall exclude null. In addition to the places where
Legality Rules normally apply (see 12.3),
this rule applies also in the private part of an instance of a generic
unit.
Static Semantics
9/2
A
formal_object_declaration
declares a generic formal object. The default mode is
in.
For
a formal object of mode
in, the nominal subtype is the one denoted
by the
subtype_mark or
access_definition
in the declaration of the formal.
For a formal object
of mode
in out, its type is determined by the
subtype_mark
or
access_definition in the declaration;
its nominal subtype is nonstatic, even if the
subtype_mark
denotes a static subtype; for a composite type, its nominal subtype is
unconstrained if the first subtype of the type is unconstrained, even
if the
subtype_mark denotes a constrained
subtype.
10/2
In
an instance, a
formal_object_declaration
of mode
in is a
full constant declaration and declares
a new stand-alone constant object whose initialization expression is
the actual, whereas a
formal_object_declaration
of mode
in out declares a view whose properties are identical
to those of the actual.
Dynamic Semantics
11
For the
evaluation of a
generic_association
for a formal object of mode
in, a constant object is created,
the value of the actual parameter is converted to the nominal subtype
of the formal object, and assigned to the object, including any value
adjustment — see
7.6.
12
6 The constraints that
apply to a generic formal object of mode in out are those of the
corresponding generic actual parameter (not those implied by the subtype_mark
that appears in the formal_object_declaration).
Therefore, to avoid confusion, it is recommended that the name of a first
subtype be used for the declaration of such a formal object.
Contents Index Search Related Documents Previous Next Legal