diff options
Diffstat (limited to 'includes/rts/Messages.h')
-rw-r--r-- | includes/rts/Messages.h | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/includes/rts/Messages.h b/includes/rts/Messages.h new file mode 100644 index 0000000000..e01eff47cf --- /dev/null +++ b/includes/rts/Messages.h @@ -0,0 +1,92 @@ +/* ----------------------------------------------------------------------------- + * + * (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 RTS_MESSAGES_H +#define RTS_MESSAGES_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. + */ +void barf(const char *s, ...) + GNUC3_ATTRIBUTE(__noreturn__); + +void vbarf(const char *s, va_list ap) + GNUC3_ATTRIBUTE(__noreturn__); + +// declared in Rts.h: +// extern void _assertFail(const 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)(). + */ +void errorBelch(const char *s, ...) + GNUC3_ATTRIBUTE(format (printf, 1, 2)); + +void verrorBelch(const char *s, va_list ap); + +/* + * An error condition which is caused by and/or can be corrected by + * the user, and which has an associated error condition reported + * by the system (in errno on Unix, and GetLastError() on Windows). + * The system error message is appended to the message generated + * from the supplied format string. + * + * sysErrorBelch() invokes (*sysErrorMsgFn)(). + */ +void sysErrorBelch(const char *s, ...) + GNUC3_ATTRIBUTE(format (printf, 1, 2)); + +void vsysErrorBelch(const 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)(). + */ +void debugBelch(const char *s, ...) + GNUC3_ATTRIBUTE(format (printf, 1, 2)); + +void vdebugBelch(const char *s, va_list ap); + + +/* Hooks for redirecting message generation: */ + +typedef void RtsMsgFunction(const 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; +extern RtsMsgFunction rtsSysErrorMsgFn; + +#endif /* RTS_MESSAGES_H */ |