28 #ifndef __MU_ERROR_H__
29 #define __MU_ERROR_H__
33 #include <moonunit/internal/boilerplate.h>
42 typedef enum MuStatusCode
53 MU_ERROR_LOAD_LIBRARY = 4,
55 MU_ERROR_CONSTRUCT_LIBRARY = 5,
57 MU_ERROR_DESTRUCT_LIBRARY = 6
66 void mu_error_raise(
MuError** err, MuStatusCode code,
const char* format, ...);
67 void mu_error_handle(
MuError** err);
69 bool mu_error_equal(
MuError* err,
int code);
71 #define MU_RAISE_RETURN_VOID(err, code, ...) \
74 mu_error_raise(err, code, __VA_ARGS__); \
78 #define MU_RAISE_RETURN(ret, err, code, ...) \
81 mu_error_raise(err, code, __VA_ARGS__); \
85 #define MU_RAISE_GOTO(lab, err, code, ...) \
88 mu_error_raise(err, code, __VA_ARGS__); \
92 #define MU_RERAISE_RETURN_VOID(err, src) \
95 mu_error_reraise(err, src); \
99 #define MU_RERAISE_RETURN(ret, err, src) \
102 mu_error_reraise(err, src); \
106 #define MU_RERAISE_GOTO(lab, err, src) \
109 mu_error_reraise(err, src); \
113 #define MU_CATCH_GOTO(lab, code) \
116 if (mu_error_equal(err, code)) \
120 #define MU_PROPAGATE(lab, err, src) \
123 MuError* e_ = (src); \
126 MU_RERAISE_GOTO(lab, err, e_); \
130 #define MU_CATCH(err, code) \
131 if (mu_error_equal(err, code)) \
133 #define MU_CATCH_ALL(err) \
136 #define MU_HANDLE(err) \