30#define RAISE(e) Except_raise(&(e), __FILE__, __LINE__)
31#define RERAISE Except_raise(Except_frame.exception, \
32 Except_frame.file, Except_frame.line)
33#define RETURN switch (Except_stack = Except_stack->prev,0) default: return
35 volatile int Except_flag; \
36 Except_Frame Except_frame; \
37 Except_frame.prev = Except_stack; \
38 Except_stack = &Except_frame; \
39 Except_flag = setjmp(Except_frame.env); \
40 if (Except_flag == Except_entered) {
42 if (Except_flag == Except_entered) Except_stack = Except_stack->prev; \
43 } else if (Except_frame.exception == &(e)) { \
44 Except_flag = Except_handled;
46 if (Except_flag == Except_entered) Except_stack = Except_stack->prev; \
48 Except_flag = Except_handled;
50 if (Except_flag == Except_entered) Except_stack = Except_stack->prev; \
52 if (Except_flag == Except_entered) \
53 Except_flag = Except_finalized;
55 if (Except_flag == Except_entered) Except_stack = Except_stack->prev; \
56 } if (Except_flag == Except_raised) RERAISE; \
const Except_T Assert_Failed
Except_Frame * Except_stack
void Except_raise(const T *e, const char *file, int line)