- (1)
- For each implementation there is a library package called System which
includes the definitions of certain configuration-dependent characteristics.
Static Semantics
- (2)
- The following language-defined library package exists:
(3)
package System is
pragma Preelaborate(System);
(4)
type Name is implementation-defined-enumeration-type;
System_Name : constant Name := implementation-defined;
(5)
-- System-Dependent Named Numbers:
(6)
Min_Int : constant := root_integer'First;
Max_Int : constant := root_integer'Last;
(7)
Max_Binary_Modulus : constant := implementation-defined;
Max_Nonbinary_Modulus : constant := implementation-defined;
(8)
Max_Base_Digits : constant := root_real'Digits;
Max_Digits : constant := implementation-defined;
(9)
Max_Mantissa : constant := implementation-defined;
Fine_Delta : constant := implementation-defined;
(10)
Tick : constant := implementation-defined;
(11)
-- Storage-related Declarations:
(12)
type Address is implementation-defined;
Null_Address : constant Address;
(13)
Storage_Unit : constant := implementation-defined;
Word_Size : constant := implementation-defined * Storage_Unit;
Memory_Size : constant := implementation-defined;
(14)
-- Address Comparison:
function "<" (Left, Right : Address) return Boolean;
function "<="(Left, Right : Address) return Boolean;
function ">" (Left, Right : Address) return Boolean;
function ">="(Left, Right : Address) return Boolean;
function "=" (Left, Right : Address) return Boolean;
-- function "/=" (Left, Right : Address) return Boolean;
-- "/=" is implicitly defined
pragma Convention(Intrinsic, "<");
... -- and so on for all language-defined subprograms in this package
(15)
-- Other System-Dependent Declarations:
type Bit_Order is (High_Order_First, Low_Order_First);
Default_Bit_Order : constant Bit_Order;
(16)
-- Priority-related declarations (see D.1):
subtype Any_Priority is Integer range implementation-defined;
subtype Priority is Any_Priority range Any_Priority'First .. implementation-defined;
subtype Interrupt_Priority is Any_Priority range Priority'Last+1 .. Any_Priority'Last;
(17)
Default_Priority : constant Priority := (Priority'First + Priority'Last)/2;
(18)
private
... -- not specified by the language
end System;
- (19)
- Name is an enumeration subtype. Values of type Name are the names of
alternative machine configurations handled by the implementation. System_Name represents the current machine configuration.
- (20)
- The named numbers Fine_Delta and Tick are of the type universal_real;
the others are of the type universal_integer.
- (21)
- The meanings of the named numbers are:
- (22)
- Min_Int
The smallest (most negative) value allowed for the
expressions of a signed_integer_type_definition.
- (23)
- Max_Int
The largest (most positive) value allowed for the expressions
of a signed_integer_type_definition.
- (24)
- Max_Binary_Modulus
A power of two such that it, and all lesser positive powers
of two, are allowed as the modulus of a modular_type_definition.
- (25)
- Max_Nonbinary_Modulus
A value such that it, and all lesser positive integers, are
allowed as the modulus of a modular_type_definition.
- (26)
- Max_Base_Digits
The largest value allowed for the requested decimal precision
in a floating_point_definition.
- (27)
- Max_Digits
The largest value allowed for the requested decimal precision
in a floating_point_definition that has no real_range_specification. Max_Digits is less than or equal to Max_Base_Digits.
- (28)
- Max_Mantissa
The largest possible number of binary digits in the mantissa of machine
numbers of a user-defined ordinary fixed point type. (The mantissa is defined
in Annex G.)
- (29)
- Fine_Delta
The smallest delta allowed in an ordinary_fixed_point_definition that has the real_range_specification range -1.0
.. 1.0.
- (30)
- Tick
A period in seconds approximating the real time interval
during which the value of Calendar.Clock remains constant.
- (31)
- Storage_Unit
The number of bits per storage element.
- (32)
- Word_Size
The number of bits per word.
- (33)
- Memory_Size
An implementation-defined value that is intended to reflect
the memory size of the configuration in storage elements.
- (34)
- Address is of a definite, nonlimited type. Address represents machine
addresses capable of addressing individual storage elements. Null_Address is
an address that is distinct from the address of any object or program unit.
- (35)
- See 13.5.3 for an explanation of Bit_Order and
Default_Bit_Order.
Implementation Permissions
- (36)
- An implementation may add additional implementation-defined declarations
to package System and its children. However, it is usually better for the
implementation to provide additional functionality via implementation-defined
children of System. Package System may be declared pure.
Implementation Advice
- (37)
- Address should be of a private type.
-
- (38)
(14) There are also some language-defined child packages of System
defined elsewhere.
Subclauses
- The Package System.Storage_Elements
- The Package System.Address_To_Access_Conversions
-- Email comments, additions, corrections, gripes, kudos, etc. to:
Magnus Kempe -- Magnus.Kempe@di.epfl.ch
Copyright statement
Page last generated: 95-03-12