Contents Index Search Previous Next
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
- Visibility within
a subunit is the visibility that would be obtained at the place of the
corresponding body_stub (within
the parent body) if the context_clause
of the subunit were appended to that of the parent body.
18
- The effect of
the elaboration of a body_stub is
to elaborate the subunit.
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;
Contents Index Search Previous Next Legal