- (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.
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.
Implementation Advice
- (12)
- For each implementation-defined convention identifier, there should be a
child package of package Interfaces with the corresponding name. This
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.
- (13)
- An implementation supporting an interface to C, COBOL, or Fortran should
provide the corresponding package or packages described in the following
clauses.
-- Email comments, additions, corrections, gripes, kudos, etc. to:
Magnus Kempe -- Magnus.Kempe@di.epfl.ch
Copyright statement
Page last generated: 95-03-12