6.1 Subprogram Declarations
Syntax
This paragraph
was deleted.
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 subclause
4.5.
mode ::= [
in] |
in out |
out
Name Resolution Rules
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
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.
Static Semantics
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.
An
explicitly
aliased parameter is a formal parameter whose
parameter_specification
includes the reserved word
aliased.
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.
The
subtypes of a profile are:
For any non-access parameters, the nominal subtype
of the parameter.
For any access parameters of an access-to-object
type, the designated subtype of the parameter type.
For any access parameters of an access-to-subprogram
type, the subtypes of the designated profile of the parameter type.
For any non-access result, the nominal subtype
of the function result.
For any access result type of an access-to-object
type, the designated subtype of the result type.
For any access result type of an access-to-subprogram
type, the subtypes of the designated profile of the result type.
The
types of a profile
are the types of those subtypes.
Dynamic Semantics
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.
4 Subprograms can be called recursively
and can be called concurrently from multiple tasks.
Examples
Examples of subprogram
declarations:
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
function Random
return Probability; --
see 3.5.7
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
function Find(B :
aliased in out Barrel; Key : String)
return Real;
--
see 4.1.5
function "*"(Left, Right : Matrix)
return Matrix; --
see 3.6
Examples of in
parameters with default expressions:
procedure Print_Header(Pages :
in Natural;
Header :
in Line := (1 .. Line'Last => ' '); --
see 3.6
Center :
in Boolean := True);
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe