6.3 Subprogram Bodies

From OC Systems Wiki!
Jump to: navigation, search

A subprogram_body specifies the execution of a subprogram.


subprogram_body ::=
    subprogram_specification is
    end [designator];

If a designator appears at the end of a subprogram_body, it shall repeat the defining_designator of the subprogram_specification.

Legality Rules

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

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

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.

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.


Example of procedure body:

procedure Push(E in Element_Type; S in out Stack) is
       if S.Index = S.Size then
           raise Stack_Overflow; 
           S.Index := S.Index + 1;
           S.Space(S.Index) := E; 
       end if;
end Push;

Example of a function body:

function Dot_Product(Left, Right Vector) return Real is 
    Sum : Real := 0.0;
    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;

Copyright © 1992,1993,1994,1995 Intermetrics, Inc.
Copyright © 2000 The MITRE Corporation, Inc. Ada Reference Manual