6.4 Subprogram Calls
Syntax
Name Resolution Rules
A subprogram call shall contain at most one association 
for each formal parameter. Each formal parameter without an association 
shall have a 
default_expression 
(in the profile of the view denoted by the 
name 
or 
prefix). 
This rule is an overloading rule (see 
8.6). 
 
Dynamic Semantics
 For the execution of a subprogram 
call, the 
name 
or 
prefix 
of the call is evaluated, and each 
parameter_association 
is evaluated (see 
6.4.1). If a 
default_expression 
is used, an implicit 
parameter_association 
is assumed for this rule. These evaluations are done in an arbitrary 
order. The 
subprogram_body 
is then executed, or a call on an entry or protected subprogram is performed 
(see 
3.9.2). Finally, if the subprogram completes 
normally, then after it is left, any necessary assigning back of formal 
to actual parameters occurs (see 
6.4.1).
 
   If the 
name 
or 
prefix 
of a subprogram call denotes a prefixed view (see 
4.1.3), 
the subprogram call is equivalent to a call on the underlying subprogram, 
with the first actual parameter being provided by the 
prefix 
of the prefixed view (or the Access attribute of this 
prefix 
if the first formal parameter is an access parameter), and the remaining 
actual parameters given by the 
actual_parameter_part, 
if any.
 
 The exception Program_Error 
is raised at the point of a 
function_call 
if the function completes normally without executing a return statement. 
 
 A 
function_call 
denotes a constant, as defined in 
6.5; the 
nominal subtype of the constant is given by the nominal subtype of the 
function result. 
 
Examples
Examples of procedure 
calls: 
Traverse_Tree;                                               --
  see 6.1
Print_Header(128, Title, True);                              --
  see 6.1 
Switch(From => X, To => Next);                               --
  see 6.1
Print_Header(128, Header => Title, Center => True);          --
  see 6.1
Print_Header(Header => Title, Center => True, Pages => 128); --
  see 6.1 
Examples of function 
calls: 
Dot_Product(U, V)   --
  see 6.1 and 6.3
Clock               --
  see 9.6
F.
all               --
  presuming F is of an access-to-subprogram type — see 3.10 
Examples of procedures 
with default expressions: 
procedure Activate(Process : in Process_Name;
                   After   : in Process_Name := No_Process;
                   Wait    : in Duration := 0.0;
                   Prior   : in Boolean := False);
procedure Pair(Left, Right : 
in Person_Name := 
new Person(M));   --
  see 3.10.1 
Examples of their 
calls: 
Activate(X);
Activate(X, After => Y);
Activate(X, Wait => 60.0, Prior => True);
Activate(X, Y, 10.0, False);
Pair;
Pair(Left => new Person(F), Right => new Person(M));
Examples
Examples of overloaded 
subprograms: 
procedure Put(X : in Integer);
procedure Put(X : in String);
procedure Set(Tint   : in Color);
procedure Set(Signal : in Light);
Examples of their 
calls: 
Put(28);
Put("no possible ambiguity here");
Set(Tint   => Red);
Set(Signal => Red);
Set(Color'(Red));
--  Set(Red) would be ambiguous since Red may
--  denote a value either of type Color or of type Light
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe