13.7 The Package System
For each implementation there is a library package
called System which includes the definitions of certain configuration-dependent
characteristics.
Static Semantics
The following language-defined
library package exists:
package System
is
pragma Pure(System);
type Name
is implementation-defined-enumeration-type;
System_Name :
constant Name :=
implementation-defined;
-- System-Dependent Named Numbers:
Min_Int :
constant :=
root_integer'First;
Max_Int :
constant :=
root_integer'Last;
Max_Binary_Modulus :
constant :=
implementation-defined;
Max_Nonbinary_Modulus :
constant :=
implementation-defined;
Max_Base_Digits :
constant :=
root_real'Digits;
Max_Digits :
constant :=
implementation-defined;
Max_Mantissa :
constant :=
implementation-defined;
Fine_Delta :
constant :=
implementation-defined;
Tick :
constant :=
implementation-defined;
-- Storage-related Declarations:
type Address
is implementation-defined;
Null_Address :
constant Address;
Storage_Unit :
constant :=
implementation-defined;
Word_Size :
constant :=
implementation-defined * Storage_Unit;
Memory_Size :
constant :=
implementation-defined;
--
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
--
Other System-Dependent Declarations:
type Bit_Order
is (
High_Order_First,
Low_Order_First);
Default_Bit_Order :
constant Bit_Order :=
implementation-defined;
--
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;
Default_Priority :
constant Priority :=
(Priority'First + Priority'Last)/2;
private
... -- not specified by the language
end System;
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.
The named numbers Fine_Delta and Tick are of the
type universal_real; the others are of the type universal_integer.
The meanings of the
named numbers are:
Min_Int
The smallest (most negative) value allowed for the expressions of a
signed_integer_type_definition.
Max_Int
The largest (most positive) value allowed for the expressions of a
signed_integer_type_definition.
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.
Max_Nonbinary_Modulus
A value such that it, and all lesser positive integers, are allowed as
the modulus of a
modular_type_definition.
Max_Base_Digits
The largest value allowed for the requested decimal precision in a
floating_point_definition.
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.
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.)
Fine_Delta
The smallest delta allowed in an
ordinary_fixed_point_definition
that has the
real_range_specification
range –1.0 .. 1.0.
Tick
A period in seconds approximating the real time interval during which
the value of Calendar.Clock remains constant.
Storage_Unit
The number of bits per storage element.
Word_Size
The number of bits per word.
Memory_Size
An implementation-defined value that is intended to reflect the memory
size of the configuration in storage elements.
Address is a definite, nonlimited type with preelaborable
initialization (see
10.2.1). 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.
Default_Bit_Order shall be a static constant. See
13.5.3 for an explanation of Bit_Order and
Default_Bit_Order.
Implementation Permissions
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.
Implementation Advice
Address should be a private type.
14 There are also some language-defined
child packages of System defined elsewhere.