diff options
Diffstat (limited to 'includes/RtsMessages.h')
-rw-r--r-- | includes/RtsMessages.h | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/includes/RtsMessages.h b/includes/RtsMessages.h new file mode 100644 index 0000000000..3f0da3d7ed --- /dev/null +++ b/includes/RtsMessages.h @@ -0,0 +1,76 @@ +/* ----------------------------------------------------------------------------- + * + * (c) The GHC Team, 1998-2004 + * + * Message API for use inside the RTS. All messages generated by the + * RTS should go through one of the functions declared here, and we + * also provide hooks so that messages from the RTS can be redirected + * as appropriate. + * + * ---------------------------------------------------------------------------*/ + +#ifndef RTSMESSAGES_H +#define RTSMESSAGES_H + +#include <stdarg.h> + +/* ----------------------------------------------------------------------------- + * Message generation + * -------------------------------------------------------------------------- */ + +/* + * A fatal internal error: this is for errors that probably indicate + * bugs in the RTS or compiler. We normally output bug reporting + * instructions along with the error message. + * + * barf() invokes (*fatalInternalErrorFn)(). This function is not + * expected to return. + */ +extern void barf(char *s, ...) + GNUC3_ATTRIBUTE(__noreturn__); + +extern void vbarf(char *s, va_list ap) + GNUC3_ATTRIBUTE(__noreturn__); + +extern void _assertFail(char *filename, unsigned int linenum) + GNUC3_ATTRIBUTE(__noreturn__); + +/* + * An error condition which is caused by and/or can be corrected by + * the user. + * + * errorBelch() invokes (*errorMsgFn)(). + */ +extern void errorBelch(char *s, ...) + GNUC3_ATTRIBUTE(format (printf, 1, 2)); + +extern void verrorBelch(char *s, va_list ap); + +/* + * A debugging message. Debugging messages are generated either as a + * virtue of having DEBUG turned on, or by being explicitly selected + * via RTS options (eg. +RTS -Ds). + * + * debugBelch() invokes (*debugMsgFn)(). + */ +extern void debugBelch(char *s, ...) + GNUC3_ATTRIBUTE(format (printf, 1, 2)); + +extern void vdebugBelch(char *s, va_list ap); + + +/* Hooks for redirecting message generation: */ + +typedef void RtsMsgFunction(char *, va_list); + +extern RtsMsgFunction *fatalInternalErrorFn; +extern RtsMsgFunction *debugMsgFn; +extern RtsMsgFunction *errorMsgFn; + +/* Default stdio implementation of the message hooks: */ + +extern RtsMsgFunction rtsFatalInternalErrorFn; +extern RtsMsgFunction rtsDebugMsgFn; +extern RtsMsgFunction rtsErrorMsgFn; + +#endif /* RTSMESSAGES_H */ |