Contents Index Search Related Documents Previous Next
6.1 Subprogram Declarations
1
A subprogram_declaration
declares a procedure or function.
Syntax
2/2
subprogram_declaration
::=
[
overriding_indicator]
subprogram_specification;
3/2
This paragraph was deleted.
4/2
subprogram_specification
::=
procedure_specification
|
function_specification
4.1/2
procedure_specification
::= procedure defining_program_unit_name parameter_profile
4.2/2
function_specification
::= function defining_designator parameter_and_result_profile
5
designator
::= [
parent_unit_name . ]
identifier |
operator_symbol
6
defining_designator
::= defining_program_unit_name |
defining_operator_symbol
7
defining_program_unit_name
::= [
parent_unit_name . ]
defining_identifier
8
The optional
parent_unit_name
is only allowed for library units (see
10.1.1).
9
operator_symbol
::= string_literal
10/2
The sequence of characters in an
operator_symbol
shall form a reserved word, a delimiter, or compound delimiter that corresponds
to an operator belonging to one of the six categories of operators defined
in clause
4.5.
11
defining_operator_symbol
::= operator_symbol
12
parameter_profile
::= [
formal_part]
13/2
parameter_and_result_profile
::=
[
formal_part]
return [
null_exclusion]
subtype_mark
| [
formal_part]
return access_definition
14
formal_part
::=
(
parameter_specification {;
parameter_specification})
15/2
parameter_specification
::=
defining_identifier_list :
mode [
null_exclusion]
subtype_mark [:=
default_expression]
|
defining_identifier_list :
access_definition [:=
default_expression]
16
mode
::= [
in] |
in out |
out
Name Resolution Rules
17
A
formal parameter
is an object directly visible within a
subprogram_body
that represents the actual parameter passed to the subprogram in a call;
it is declared by a
parameter_specification.
For a formal parameter, the expected type for its
default_expression, if any, is that
of the formal parameter.
Legality Rules
18
The
parameter mode
of a formal parameter conveys the direction of information transfer with
the actual parameter:
in,
in out, or
out. Mode
in
is the default, and is the mode of a parameter defined by an
access_definition.
The formal parameters of a function, if any, shall have the mode
in.
19
A default_expression
is only allowed in a parameter_specification
for a formal parameter of mode in.
20/2
A
subprogram_declaration
or a
generic_subprogram_declaration
requires a completion: a body, a
renaming_declaration
(see
8.5), or a
pragma
Import (see
B.1). A completion is not allowed
for an
abstract_subprogram_declaration
(see
3.9.3) or a
null_procedure_declaration
(see
6.7).
21
A name that
denotes a formal parameter is not allowed within the formal_part
in which it is declared, nor within the formal_part
of a corresponding body or accept_statement.
Static Semantics
22
The
profile of (a
view of) a callable entity is either a
parameter_profile
or
parameter_and_result_profile;
it embodies information about the interface to that entity — for
example, the profile includes information about parameters passed to
the callable entity. All callable entities have a profile — enumeration
literals, other subprograms, and entries. An access-to-subprogram type
has a designated profile. Associated with a profile is a calling convention.
A
subprogram_declaration declares
a procedure or a function, as indicated by the initial reserved word,
with name and profile as given by its specification.
23/2
The nominal subtype of
a formal parameter is the subtype determined by the optional
null_exclusion
and the
subtype_mark, or defined
by the
access_definition, in the
parameter_specification. The nominal
subtype of a function result is the subtype determined by the optional
null_exclusion and the
subtype_mark,
or defined by the
access_definition,
in the
parameter_and_result_profile.
24/2
An
access parameter
is a formal
in parameter specified by an
access_definition.
An
access result type is a function result
type specified by an
access_definition.
An access parameter or result type is of an anonymous access type (see
3.10). Access parameters of an access-to-object
type allow dispatching calls to be controlled by access values. Access
parameters of an access-to-subprogram type permit calls to subprograms
passed as parameters irrespective of their accessibility level.
25
The
subtypes of a profile are:
26
- For any non-access parameters, the
nominal subtype of the parameter.
27/2
- For any access parameters of an access-to-object
type, the designated subtype of the parameter type.
27.1/2
- For any access parameters of an access-to-subprogram
type, the subtypes of the profile of the parameter type.
28/2
- For any non-access result, the nominal
subtype of the function result.
28.1/2
- For any access result type of an access-to-object
type, the designated subtype of the result type.
28.2/2
- For any access result type of an access-to-subprogram
type, the subtypes of the profile of the result type.
29
The
types of a profile
are the types of those subtypes.
30/2
A subprogram declared by an
abstract_subprogram_declaration
is abstract; a subprogram declared by a
subprogram_declaration
is not. See
3.9.3, “
Abstract
Types and Subprograms”. Similarly, a procedure defined by a
null_procedure_declaration is a
null procedure; a procedure declared by a
subprogram_declaration
is not. See
6.7, “
Null
Procedures”.
30.1/2
Dynamic Semantics
31/2
The elaboration of a
subprogram_declaration
or an
abstract_subprogram_declaration
has no effect.
32
1 A parameter_specification
with several identifiers is equivalent to a sequence of single parameter_specifications,
as explained in 3.3.
33
34
3 The evaluation of default_expressions
is caused by certain calls, as described in 6.4.1.
They are not evaluated during the elaboration of the subprogram declaration.
35
4 Subprograms can be called
recursively and can be called concurrently from multiple tasks.
Examples
36
Examples of
subprogram declarations:
37
procedure Traverse_Tree;
procedure Increment(X : in out Integer);
procedure Right_Indent(Margin : out Line_Size); -- see 3.5.4
procedure Switch(From, To : in out Link); -- see 3.10.1
38
function Random return Probability; -- see 3.5.7
39
function Min_Cell(X : Link) return Cell; -- see 3.10.1
function Next_Frame(K : Positive) return Frame; -- see 3.10
function Dot_Product(Left, Right : Vector) return Real; -- see 3.6
40
function "*"(Left, Right : Matrix) return Matrix; -- see 3.6
41
Examples of in
parameters with default expressions:
42
procedure Print_Header(Pages : in Natural;
Header : in Line := (1 .. Line'Last => ' '); -- see 3.6
Center : in Boolean := True);
Contents Index Search Related Documents Previous Next Legal