Contents Index Search Related Documents Previous Next
B.2 The Package Interfaces
1
Package Interfaces is the parent of several library
packages that declare types and other entities useful for interfacing
to foreign languages. It also contains some implementation-defined types
that are useful across more than one language (in particular for interfacing
to assembly language).
Static Semantics
2
The library package
Interfaces has the following skeletal declaration:
3
package Interfaces is
pragma Pure(Interfaces);
4
type Integer_n is range -2**(n-1) .. 2**(n-1) - 1; --2's complement
5
type Unsigned_n is mod 2**n;
6
function Shift_Left (Value : Unsigned_n; Amount : Natural)
return Unsigned_n;
function Shift_Right (Value : Unsigned_n; Amount : Natural)
return Unsigned_n;
function Shift_Right_Arithmetic (Value : Unsigned_n; Amount : Natural)
return Unsigned_n;
function Rotate_Left (Value : Unsigned_n; Amount : Natural)
return Unsigned_n;
function Rotate_Right (Value : Unsigned_n; Amount : Natural)
return Unsigned_n;
...
end Interfaces;
Implementation Requirements
7
An implementation
shall provide the following declarations in the visible part of package
Interfaces:
8
- Signed and modular integer types of
n bits, if supported by the target architecture, for each n
that is at least the size of a storage element and that is a factor of
the word size. The names of these types are of the form Integer_n
for the signed types, and Unsigned_n for the modular types;
9
- For
each such modular type in Interfaces, shifting and rotating subprograms
as specified in the declaration of Interfaces above. These subprograms
are Intrinsic. They operate on a bit-by-bit basis, using the binary representation
of the value of the operands to yield a binary representation for the
result. The Amount parameter gives the number of bits by which to shift
or rotate. For shifting, zero bits are shifted in, except in the case
of Shift_Right_Arithmetic, where one bits are shifted in if Value is
at least half the modulus.
10
- Floating point types corresponding
to each floating point format fully supported by the hardware.
10.1/2
Support for interfacing to any foreign language
is optional. However, an implementation shall not provide any attribute,
library unit, or pragma having the same name as an attribute, library
unit, or pragma (respectively) specified in the following clauses of
this Annex unless the provided construct is either as specified in those
clauses or is more limited in capability than that required by those
clauses. A program that attempts to use an unsupported capability of
this Annex shall either be identified by the implementation before run
time or shall raise an exception at run time.
Implementation Permissions
11
An implementation may provide implementation-defined
library units that are children of Interfaces, and may add declarations
to the visible part of Interfaces in addition to the ones defined above.
11.1/2
A child package of package Interfaces with
the name of a convention may be provided independently of whether the
convention is supported by the pragma Convention and vice versa. Such
a child package should contain any declarations that would be useful
for interfacing to the language (implementation) represented by the convention.
Any declarations useful for interfacing to any language on the given
hardware architecture should be provided directly in Interfaces.
Implementation Advice
12/2
This paragraph was deleted.
13
An implementation supporting an interface to
C, COBOL, or Fortran should provide the corresponding package or packages
described in the following clauses.
Contents Index Search Related Documents Previous Next Legal