Go to the first, previous, next, last section, table of contents.


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 section D.1 Task Priorities.:
       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 See section G Numerics (normative).)
    
  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 section 13.5.3 Bit Ordering, 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.

    NOTES

  38. (14) There are also some language-defined child packages of System defined elsewhere.


Go to the first, previous, next, last section, table of contents.