blob: 285e88b7ae8d37ddadb8dc1f0c3a1264dea1baa7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
#ifndef EXCEPTXXX_H
#define EXCEPTXXX_H
#include <setjmp.h>
#define fz_try(ctx) \
if(fz_except_xxx_push(ctx->except), \
!setjmp(ctx->except->stack[ctx->except->depth].buffer)) \
{
#define fz_catch(ctx) \
ctx->except->stack[ctx->except->depth].failed = 0;\
}\
else\
{\
ctx->except->stack[ctx->except->depth].failed = 1;\
}\
if(ctx->except->stack[ctx->except->depth--].failed)
typedef struct fz_except_xxx_stack
{
int failed;
jmp_buf buffer;
} fz_except_xxx_stack;
#define MAXDEPTH (20)
struct fz_except_context {
fz_except_xxx_stack stack[MAXDEPTH];
int depth;
fz_except except;
};
void fz_except_xxx_push(struct fz_except_context *);
#endif /* EXCEPTXXX */
|