diff options
Diffstat (limited to 'fitz/exceptxxx.h')
-rw-r--r-- | fitz/exceptxxx.h | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/fitz/exceptxxx.h b/fitz/exceptxxx.h new file mode 100644 index 00000000..185f73f6 --- /dev/null +++ b/fitz/exceptxxx.h @@ -0,0 +1,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(ex->stack[ex->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(fz_except_context *); + +#endif /* EXCEPTXXX */ |