Spec-Zone.ru › Ada 2005
Справочное руководство по Ada 2005

10.1.3 Подразделения единиц компиляции

Подразделения подобны дочерним единицам, но с важными отличиями: подразделения поддерживают только отдельную компиляцию тел (не объявлений); родительская единица содержит заглушку_тела для обозначения существования и расположения каждого из её подразделений; объявления, присутствующие в теле родительской единицы, могут быть видимыми внутри подразделений.

Синтаксис

заглушка_тела ::= заглушка_тела_подпрограммы | заглушка_тела_пакета | заглушка_тела_задачи | заглушка_тела_защищенного_типа
заглушка_тела_подпрограммы ::=
[индикатор_переопределения]
спецификация_подпрограммы is separate;
заглушка_тела_пакета ::= package body идентификатор_определения is separate;
заглушка_тела_задачи ::= task body идентификатор_определения is separate;
заглушка_тела_защищенного_типа ::= protected body идентификатор_определения is separate;
подразделение ::= separate (имя_родительской_единицы) тело_подразделения

Правила допустимости

Тело родителя подразделения — это тело программы, обозначенной его имя_родительской_единицы. Термин подразделение используется для обозначения подразделения, а также тело_подразделения подразделения. Подразделения единицы программы включают любое подразделение, которое называет эту программу в качестве родителя, а также любое подразделение, которое называет такое подразделение родителем (рекурсивно).
Тело родителя подразделения должно быть в текущей среде и должно содержать соответствующую заглушку_тела с тем же идентификатор_определения, что и подразделение.
заглушка_тела_пакета должна быть завершением объявление_пакета или объявление_генерического_пакета; заглушка_тела_задачи должна быть завершением объявления задачи; заглушка_тела_защищенного_типа должна быть завершением объявления защищенного типа.
В отличие от этого, заглушка_тела_подпрограммы необязательно должна быть завершением предыдущего объявления, в этом случае _заглушка объявляет подпрограмму. Если _заглушка является завершением, она должна быть завершением объявление_подпрограммы или объявление_генерической_подпрограммы. Профиль заглушка_тела_подпрограммы, завершающей объявление, должен полностью соответствовать профилю объявления.
Подразделение, соответствующее заглушке_тела, должно быть того же типа (package_, subprogram_, task_ или protected_), что и заглушка_тела. Профиль тела_подпрограммы подразделения должен полностью соответствовать профилю соответствующей заглушки_тела.
заглушка_тела должна появляться непосредственно внутри раздел_объявлений тела единицы компиляции. Это правило не применяется внутри экземпляра генерируемой единицы.
Идентификаторы идентификатор_определения всех заглушек_тела, которые появляются непосредственно внутри определённого раздела_объявлений, должны быть различными.

Правила после компиляции

Для каждой заглушки_тела должно быть подразделение, содержащее соответствующее тело_подразделения.
ПРИМЕЧАНИЯ
4 Правила в 10.1.4, «Процесс компиляции» указывают, что заглушка_тела эквивалентна соответствующему телу_подразделения. Это подразумевает:
  • Видимость внутри подразделения — это видимость, которая была бы получена в месте соответствующей заглушки_тела (в теле родителя), если бы пункт_контекста подразделения был добавлен к пункту контекста родительского тела.
  • Эффект выполнения заглушки_тела заключается в выполнении подразделения.

Примеры

Пакет Parent сначала записывается без подразделений:
package Parent is
procedure Inner;
end Parent;
with Ada.Text_IO;
package body Parent is
Variable : String := "Привет, там.";
procedure Inner is
begin
Ada.Text_IO.Put_Line(Variable);
end Inner;
end Parent;
Тело подпрограммы Inner можно превратить в подразделение, переписав тело пакета следующим образом (с оставшимся объявлением Parent):
package body Parent is
Variable : String := "Привет, там.";
procedure Inner is separate;
end Parent;
with Ada.Text_IO;
separate(Parent)
procedure Inner is
begin
Ada.Text_IO.Put_Line(Variable);
end Inner;


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API