Go to the first, previous, next, last section, table of contents.


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];
    
    1. If a designator appears at the end of a subprogram_body, it shall repeat the defining_designator of the subprogram_specification.

Legality Rules

  1. 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

  2. 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

  3. 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.
  4. 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

  5. Example of procedure body:
  6. 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;
    
  7. Example of a function body:
  8. 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;
    


Go to the first, previous, next, last section, table of contents.