Contents   Index   Search   Previous   Next
 6.1 Subprogram Declarations
1
   A subprogram_declaration
declares a procedure or function. 
Syntax
2
subprogram_declaration
::= subprogram_specification;
 
3
abstract_subprogram_declaration
::= subprogram_specification is abstract;
 
4
subprogram_specification
::= 
     procedure defining_program_unit_name  parameter_profile
   | 
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
The sequence of characters in an 
operator_symbol
shall correspond to an operator belonging to one of the six classes of
operators defined in clause 
4.5 (spaces are
not allowed and the case of letters is not significant). 
 
11
defining_operator_symbol
::= operator_symbol 
12
parameter_profile
::= [
formal_part]
 
13
parameter_and_result_profile
::= [
formal_part] 
return subtype_mark 
14
formal_part
::= 
   (
parameter_specification {; 
parameter_specification})
 
15
parameter_specification
::= 
    defining_identifier_list : 
mode  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
    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.
 
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
    The nominal subtype of a
formal parameter is the subtype denoted by the 
subtype_mark,
or defined by the 
access_definition,
in the 
parameter_specification.
 
24
    An 
access parameter
is a formal 
in parameter specified by an 
access_definition.
An access parameter is of an anonymous general access-to-variable type
(see 
3.10). Access parameters allow dispatching
calls to be controlled by access values.
 
25
    The
subtypes of a profile are: 
 
26
- For any non-access parameters, the
nominal subtype of the parameter.
 
27
- For any access parameters, the designated
subtype of the parameter type.
 
28
- For any result, the result subtype.
 
29
    The 
types of a profile
are the types of those subtypes.
 
30
    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''. 
 
Dynamic Semantics
31
    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   Previous   Next   Legal