Next: , Previous: 6.2, Up: 6


6.3 Subprogram Bodies

1
A subprogram_body specifies the execution of a subprogram.

Syntax

2/2

subprogram_body::=
    [overriding_indicator]
    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; 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 in Left'Range loop
           Sum := Sum Left(J)*Right(J);
        end loop;
        return Sum;
     end Dot_Product;