Prev | Up | Next | Back | Forward
TOC -- / --.-- / --.--.-- | Index | Search | Syntax | Help


10.1.3 Subunits of Compilation Units

(1)
Subunits are like child units, with these (important) differences: subunits support the separate compilation of bodies only (not declarations); the parent contains a body_stub to indicate the existence and place of each of its subunits; declarations appearing in the parent's body can be visible within the subunits.
Syntax
(2)
       body_stub ::= subprogram_body_stub | package_body_stub | task_body_stub | protected_body_stub
(3)
       subprogram_body_stub ::= subprogram_specification is separate;
(4)
       package_body_stub ::= package body defining_identifier is separate;
(5)
       task_body_stub ::= task body defining_identifier is separate;
(6)
       protected_body_stub ::= protected body defining_identifier is separate;
(7)
       subunit ::= separate (parent_unit_name) proper_body
Legality Rules
(8)
The parent body of a subunit is the body of the program unit denoted by its parent_unit_name. The term subunit is used to refer to a subunit and also to the proper_body of a subunit.
(9)
The parent body of a subunit shall be present in the current environment, and shall contain a corresponding body_stub with the same defining_identifier as the subunit.
(10)
A package_body_stub shall be the completion of a package_declaration or generic_package_declaration; a task_body_stub shall be the completion of a task_declaration; a protected_body_stub shall be the completion of a protected_declaration.
(11)
In contrast, a subprogram_body_stub need not be the completion of a previous declaration, in which case the _stub declares the subprogram. If the _stub is a completion, it shall be the completion of a subprogram_declaration or generic_subprogram_declaration. The profile of a subprogram_body_stub that completes a declaration shall conform fully to that of the declaration.
(12)
A subunit that corresponds to a body_stub shall be of the same kind (package_, subprogram_, task_, or protected_) as the body_stub. The profile of a subprogram_body subunit shall be fully conformant to that of the corresponding body_stub.
(13)
A body_stub shall appear immediately within the declarative_part of a compilation unit body. This rule does not apply within an instance of a generic unit.
(14)
The defining_identifiers of all body_stubs that appear immediately within a particular declarative_part shall be distinct.
Post-Compilation Rules
(15)
For each body_stub, there shall be a subunit containing the corresponding proper_body.

(16)
(17)
(18)
Examples
(19)
The package Parent is first written without subunits:
(20)
       package Parent is
           procedure Inner;
       end Parent;
(21)
       with Ada.Text_IO;
       package body Parent is
           Variable : String := "Hello, there.";
           procedure Inner is
           begin
               Ada.Text_IO.Put_Line(Variable);
           end Inner;
       end Parent;
(22)
The body of procedure Inner may be turned into a subunit by rewriting the package body as follows (with the declaration of Parent remaining the same):
(23)
       package body Parent is
           Variable : String := "Hello, there.";
           procedure Inner is separate;
       end Parent;
(24)
       with Ada.Text_IO;
       separate(Parent)
       procedure Inner is
       begin
           Ada.Text_IO.Put_Line(Variable);
       end Inner;

Prev | Up | Next | Back | Forward
TOC -- / --.-- / --.--.-- | Index | Search | Syntax | Help

Ada WWW Home -- Email comments, additions, corrections, gripes, kudos, etc. to:

Magnus Kempe -- Magnus.Kempe@di.epfl.ch
Copyright statement
Page last generated: 95-03-12