Contents   Index   Search   Previous   Next
 6.3 Subprogram Bodies
1
   A subprogram_body
specifies the execution of a subprogram. 
Syntax
2
subprogram_body
::= 
    subprogram_specification is
       declarative_part
    begin
        handled_sequence_of_statements
    end [
designator];
 
3
If a designator
appears at the end of a subprogram_body,
it shall repeat the defining_designator
of the subprogram_specification.
Legality Rules
4
   In contrast to other bodies, a 
subprogram_body
need not be the completion of a previous declaration, in which case the
body declares the subprogram. If the body is a completion, it shall be
the completion of a 
subprogram_declaration
or 
generic_subprogram_declaration.
The profile of a 
subprogram_body
that completes a declaration shall conform fully to that of the declaration.
 
Static Semantics
5
   A subprogram_body
is considered a declaration. It can either complete a previous declaration,
or itself be the initial declaration of the subprogram. 
Dynamic Semantics
6
   The elaboration of a non-generic
subprogram_body has no other effect
than to establish that the subprogram can from then on be called without
failing the Elaboration_Check. 
 
7
   The execution of a 
subprogram_body
is invoked by a subprogram call. For this execution the 
declarative_part
is elaborated, and the 
handled_sequence_of_statements
is then executed. 
 
Examples
8
   Example of procedure
body: 
9
procedure Push(E : in Element_Type; S : in out Stack) is
begin
   if S.Index = S.Size then
      raise Stack_Overflow;
   else
      S.Index := S.Index + 1;
      S.Space(S.Index) := E;
   end if;
end Push;
10
    Example of a function
body: 
11
function Dot_Product(Left, Right : Vector) return Real is
   Sum : Real := 0.0;
begin
   Check(Left'First = Right'First and Left'Last = Right'Last);
   for J in Left'Range loop
      Sum := Sum + Left(J)*Right(J);
   end loop;
   return Sum;
end Dot_Product;
Contents   Index   Search   Previous   Next   Legal