The Package System
Author: JTC1/SC22/WG9/ARG, by Randall Brukardt, ARG Editor

Contents Index Search Previous Next

# 13.7 The Package System

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 a private type.
NOTES
38
14 There are also some language-defined child packages of System defined elsewhere.

Contents Index Search Previous Next Legal