Interfacing Pragmas
Author: JTC1/SC22/WG9/ARG, by Randall Brukardt, ARG Editor

Ada Reference Manual — Legal Information

# J.15.5 Interfacing Pragmas

#### Syntax

1/3
An interfacing pragma is a representation pragma that is one of the pragmas Import, Export, or Convention. Their forms are as follows:
2/3
pragma Import(
[Convention =>] convention_ identifier, [Entity =>] local_name
[, [External_Name =>] external_name_string_ expression]
[, [Link_Name =>] link_name_string_ expression]);
3/3
pragma Export(
[Convention =>] convention_ identifier, [Entity =>] local_name
[, [External_Name =>] external_name_string_ expression]
[, [Link_Name =>] link_name_string_ expression]);
4/3
pragma Convention([Convention =>] convention_ identifier,[Entity =>] local_name);
5/3
For pragmas Import and Export, the argument for Link_Name shall not be given without the pragma_argument_ identifier unless the argument for External_Name is given.

#### Name Resolution Rules

6/3
The expected type for an external_name_string_ expression and a link_name_string_ expression in an interfacing pragma is String.

#### Legality Rules

7/3
The convention_ identifier of an interfacing pragma shall be the name of a convention (see B.1).
8/3
A pragma Import shall be the completion of a declaration. Notwithstanding any rule to the contrary, a pragma Import may serve as the completion of any kind of (explicit) declaration if supported by an implementation for that kind of declaration. If a completion is a pragma Import, then it shall appear in the same declarative_part, package_specification, task_definition, or protected_definition as the declaration. For a library unit, it shall appear in the same compilation, before any subsequent compilation_units other than pragmas. If the local_name denotes more than one entity, then the pragma Import is the completion of all of them.
9/3
The external_name_string_ expression and link_name_string_ expression of a pragma Import or Export shall be static.
10/3
The local_name of each of these pragmas shall denote a declaration that may have the similarly named aspect specified.

#### Static Semantics

11/3
An interfacing pragma specifies various aspects of the entity denoted by the local_name as follows:
12/3
The Convention aspect (see B.1) is convention_ identifier.
13/3
A pragma Import specifies that the Import aspect (see B.1) is True.
14/3
A pragma Export specifies that the Export aspect (see B.1) is True.
15/3
For both pragma Import and Export, if an external name is given in the pragma, the External_Name aspect (see B.1) is specified to be external_name_string_ expression. If a link name is given in the pragma, the Link_Name aspect (see B.1) is specified to be the link_name_string_ expression.

Ada 2005 and 2012 Editions sponsored in part by Ada-Europe