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


11.4.1 The Package Exceptions

Static Semantics

  1. The following language-defined library package exists:
  2. package Ada.Exceptions is
        type Exception_Id is private;
        Null_Id : constant Exception_Id;
        function Exception_Name(Id : Exception_Id) return String;
    
  3.     type Exception_Occurrence is limited private;
        type Exception_Occurrence_Access is
          access all Exception_Occurrence;
        Null_Occurrence : constant Exception_Occurrence;
    
  4.     procedure Raise_Exception
          (E       : in Exception_Id;
           Message : in String := "");
        function Exception_Message(X : Exception_Occurrence)
          return String;
        procedure Reraise_Occurrence(X : in Exception_Occurrence);
    
  5.     function Exception_Identity(X : Exception_Occurrence)
          return Exception_Id;
        function Exception_Name(X : Exception_Occurrence)
          return String;
        --  Same as Exception_Name(Exception_Identity(X)).
        function Exception_Information(X : Exception_Occurrence)
          return String;
    
  6.     procedure Save_Occurrence(Target : out Exception_Occurrence;
                                  Source : in Exception_Occurrence);
        function Save_Occurrence(Source : Exception_Occurrence)
                                 return Exception_Occurrence_Access;
    private
       ... -- not specified by the language
    end Ada.Exceptions;
    
  7. Each distinct exception is represented by a distinct value of type Exception_Id. Null_Id does not represent any exception, and is the default initial value of type Exception_Id. Each occurrence of an exception is represented by a value of type Exception_Occurrence. Null_Occurrence does not represent any exception occurrence, and is the default initial value of type Exception_Occurrence.
  8. For a prefix E that denotes an exception, the following attribute is defined:
  9. E'Identity
    E'Identity returns the unique identity of the exception. The
    type of this attribute is Exception_Id.
    
  10. Raise_Exception raises a new occurrence of the identified exception. In this case, Exception_Message returns the Message parameter of Raise_Exception. For a raise_statement with an exception_name, Exception_Message returns implementation-defined information about the exception occurrence. Reraise_Occurrence reraises the specified exception occurrence.
  11. Exception_Identity returns the identity of the exception of the occurrence.
  12. The Exception_Name functions return the full expanded name of the exception, in upper case, starting with a root library unit. For an exception declared immediately within package Standard, the defining_identifier is returned. The result is implementation defined if the exception is declared within an unnamed block_statement.
  13. Exception_Information returns implementation-defined information about the exception occurrence.
  14. Raise_Exception and Reraise_Occurrence have no effect in the case of Null_Id or Null_Occurrence. Exception_Message, Exception_Identity, Exception_Name, and Exception_Information raise Constraint_Error for a Null_Id or Null_Occurrence.
  15. The Save_Occurrence procedure copies the Source to the Target. The Save_Occurrence function uses an allocator of type Exception_Occurrence_Access to create a new object, copies the Source to this new object, and returns an access value designating this new object; the result may be deallocated using an instance of Unchecked_Deallocation.

    Implementation Requirements

  16. The implementation of the Write attribute, See section 13.13.2 Stream-Oriented Attributes, of Exception_Occurrence shall support writing a representation of an exception occurrence to a stream; the implementation of the Read attribute of Exception_Occurrence shall support reconstructing an exception occurrence from a stream (including one written in a different partition).

    Implementation Permissions

  17. An implementation of Exception_Name in a space-constrained environment may return the defining_identifier instead of the full expanded name.
  18. The string returned by Exception_Message may be truncated (to no less than 200 characters) by the Save_Occurrence procedure (not the function), the Reraise_Occurrence procedure, and the re-raise statement.

    Implementation Advice

  19. Exception_Message (by default) and Exception_Information should produce information useful for debugging. Exception_Message should be short (about one line), whereas Exception_Information can be long. Exception_Message should not include the Exception_Name. Exception_Information should include both the Exception_Name and the Exception_Message.


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