- (1)
- A subprogram_body specifies the execution of a subprogram.
(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;
Subclauses
- Conformance Rules
- Inline Expansion of Subprograms
-- Email comments, additions, corrections, gripes, kudos, etc. to:
Magnus Kempe -- Magnus.Kempe@di.epfl.ch
Copyright statement
Page last generated: 95-03-12