Справочник по Ada 2012
J.15.5 Прагмы взаимодействия
Синтаксис
Прагма взаимодействия — это прагма представления, которая является одной из прагм pragma Import, Export или Convention. Их формы следующие:
pragma Import(
[Convention =>] convention_identifier, [Entity =>] local_name
[, [External_Name =>] external_name_string_expression]
[, [Link_Name =>] link_name_string_expression]);
[Convention =>] convention_identifier, [Entity =>] local_name
[, [External_Name =>] external_name_string_expression]
[, [Link_Name =>] link_name_string_expression]);
pragma Export(
[Convention =>] convention_identifier, [Entity =>] local_name
[, [External_Name =>] external_name_string_expression]
[, [Link_Name =>] link_name_string_expression]);
[Convention =>] convention_identifier, [Entity =>] local_name
[, [External_Name =>] external_name_string_expression]
[, [Link_Name =>] link_name_string_expression]);
pragma Convention([Convention =>] convention_identifier,[Entity =>] local_name);
Для прагм Import и Export аргумент Link_Name не должен быть указан без аргумента pragma_argument_identifier, если не указан аргумент External_Name.
Правила разрешения имен
Ожидаемый тип для external_name_string_expression и link_name_string_expression в прагме взаимодействия — String.
Правила допустимости
Идентификатор convention_identifier прагмы взаимодействия должен соответствовать имени соглашения (см. B.1).
Прагма Import завершает объявление. Несмотря на любые противоположные правила, прагма Import может служить завершением любого типа (явного) объявления, если это поддерживается реализацией для этого типа объявления. Если завершение является прагмой Import, то оно должно появляться в той же части объявления, спецификации пакета, определении задачи или определении защищенного типа, что и объявление. Для модуля библиотеки оно должно появляться в той же компиляции, перед любыми последующими единицами компиляции, кроме прагм. Если local_name обозначает более одного объекта, то прагма Import завершает все из них.
Выражения external_name_string_expression и link_name_string_expression прагмы Import или Export должны быть статическими.
Имя local_name каждой из этих прагм должно обозначать объявление, для которого может быть указан аспект с аналогичным именем.
Статическая семантика
Прагма взаимодействия определяет различные аспекты объекта, обозначаемого local_name, следующим образом:
- Аспект Convention (см. B.1) равен convention_identifier.
- Прагма Import указывает, что аспект Import (см. B.1) равен True.
- Прагма Export указывает, что аспект Export (см. B.1) равен True.
- Для обеих прагм Import и Export, если в прагме указано внешнее имя, то аспект External_Name (см. B.1) равен external_name_string_expression. Если указано имя связи, то аспект Link_Name (см. B.1) равен link_name_string_expression.