summaryrefslogtreecommitdiff
path: root/fitz/exceptxxx.h
diff options
context:
space:
mode:
Diffstat (limited to 'fitz/exceptxxx.h')
-rw-r--r--fitz/exceptxxx.h36
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 */