gm2-libs/RTExceptions (The GNU Modula-2 Compiler)

#### 4.1.31 gm2-libs/RTExceptions ¶

    DEFINITION MODULE RTExceptions ;

    (* Runtime exception handler routines.  This should
       be considered as a system module for GNU Modula-2
       and allow the compiler to interface with exception
       handling.  *)

    FROM SYSTEM IMPORT ADDRESS ;
    EXPORT QUALIFIED EHBlock,
                     Raise, SetExceptionBlock, GetExceptionBlock,
                     GetTextBuffer, GetTextBufferSize, GetNumber,
                     InitExceptionBlock, KillExceptionBlock,
                     PushHandler, PopHandler,
                     BaseExceptionsThrow, DefaultErrorCatch,
                     IsInExceptionState, SetExceptionState,
                     SwitchExceptionState, GetBaseExceptionBlock,
                     SetExceptionSource, GetExceptionSource ;

    TYPE
       EHBlock ;
       ProcedureHandler = PROCEDURE ;

    (*
       Raise - invoke the exception handler associated with, number,
               in the active EHBlock.  It keeps a record of the number
               and message in the EHBlock for later use.
    *)

    PROCEDURE Raise (number: CARDINAL;
                     file: ADDRESS; line: CARDINAL;
                     column: CARDINAL; function: ADDRESS;
                     message: ADDRESS) <* noreturn *> ;

    (*
       SetExceptionBlock - sets, source, as the active EHB.
    *)

    PROCEDURE SetExceptionBlock (source: EHBlock) ;

    (*
       GetExceptionBlock - returns the active EHB.
    *)

    PROCEDURE GetExceptionBlock () : EHBlock ;

    (*
       GetTextBuffer - returns the address of the EHB buffer.
    *)

    PROCEDURE GetTextBuffer (e: EHBlock) : ADDRESS ;

    (*
       GetTextBufferSize - return the size of the EHB text buffer.
    *)

    PROCEDURE GetTextBufferSize (e: EHBlock) : CARDINAL ;

    (*
       GetNumber - return the exception number associated with,
                   source.
    *)

    PROCEDURE GetNumber (source: EHBlock) : CARDINAL ;

    (*
       InitExceptionBlock - creates and returns a new exception block.
    *)

    PROCEDURE InitExceptionBlock () : EHBlock ;

    (*
       KillExceptionBlock - destroys the EHB, e, and all its handlers.
    *)

    PROCEDURE KillExceptionBlock (e: EHBlock) : EHBlock ;

    (*
       PushHandler - install a handler in EHB, e.
    *)

    PROCEDURE PushHandler (e: EHBlock; number: CARDINAL; p: ProcedureHandler) ;

    (*
       PopHandler - removes the handler associated with, number, from
                    EHB, e.
    *)

    PROCEDURE PopHandler (e: EHBlock; number: CARDINAL) ;

    (*
       DefaultErrorCatch - displays the current error message in
                           the current exception block and then
                           calls HALT.
    *)

    PROCEDURE DefaultErrorCatch ;

    (*
       BaseExceptionsThrow - configures the Modula-2 exceptions to call
                             THROW which in turn can be caught by an
                             exception block.  If this is not called then
                             a Modula-2 exception will simply call an
                             error message routine and then HALT.
    *)

    PROCEDURE BaseExceptionsThrow ;

    (*
       IsInExceptionState - returns TRUE if the program is currently
                            in the exception state.
    *)

    PROCEDURE IsInExceptionState () : BOOLEAN ;

    (*
       SetExceptionState - returns the current exception state and
                           then sets the current exception state to,
                           to.
    *)

    PROCEDURE SetExceptionState (to: BOOLEAN) : BOOLEAN ;

    (*
       SwitchExceptionState - assigns, from, with the current exception
                              state and then assigns the current exception
                              to, to.
    *)

    PROCEDURE SwitchExceptionState (VAR from: BOOLEAN; to: BOOLEAN) ;

    (*
       GetBaseExceptionBlock - returns the initial language exception block
                               created.
    *)

    PROCEDURE GetBaseExceptionBlock () : EHBlock ;

    (*
       SetExceptionSource - sets the current exception source to, source.
    *)

    PROCEDURE SetExceptionSource (source: ADDRESS) ;

    (*
       GetExceptionSource - returns the current exception source.
    *)

    PROCEDURE GetExceptionSource () : ADDRESS ;

    END RTExceptions.