Next: , Previous: 13.6, Up: 13


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/2

     package System is
        pragma Pure(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/2

        −− Other System−Dependent Declarations:
        type Bit_Order is (High_Order_First, Low_Order_First);
        Default_Bit_Order constant Bit_Order := implementation−defined;

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 (see 3.5.4).

23
Max_Int

The largest (most positive) value allowed for the expressions of a signed_integer_type_definition (see 3.5.4).

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 (see 3.5.7).

27
Max_Digits

The largest value allowed for the requested decimal precision in a floating_point_definition (see 3.5.7) that has no real_range_specification (see 3.5.7). 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 (see 3.5.7) 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/2
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. 35/2
Default_Bit_Order shall be a static constant. See 13.5.3 for an explanation of Bit_Order and Default_Bit_Order.

Implementation Permissions

36/2
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

37
Address should be a private type.

     NOTES

38

14  There are also some language−defined child packages of System defined elsewhere.