summaryrefslogtreecommitdiff
path: root/test/lib/exceptions.h
diff options
context:
space:
mode:
Diffstat (limited to 'test/lib/exceptions.h')
-rw-r--r--test/lib/exceptions.h34
1 files changed, 34 insertions, 0 deletions
diff --git a/test/lib/exceptions.h b/test/lib/exceptions.h
new file mode 100644
index 0000000..1c6b8e2
--- /dev/null
+++ b/test/lib/exceptions.h
@@ -0,0 +1,34 @@
+#ifndef exceptions_h_
+#define exceptions_h_
+
+#include <setjmp.h>
+
+#include <dom/core/exceptions.h>
+
+/* Usage:
+ TRY
+ THROW(DOM_NOT_FOUND_ERR);
+ THROW_IF_ERR(dom_document_get_doctype(...));
+ CATCH(ex)
+ printf("exception: %d\n", ex);
+ ENDTRY
+*/
+#define TRY __exvalue=setjmp(__exbuf); \
+ if (__exvalue==0) {
+#define CATCH(x) } else { \
+ int x = __exvalue;
+#define ENDTRY }
+#define THROW(x) longjmp(__exbuf, x)
+
+#define THROW_IF_ERR(x) \
+ do { \
+ int err = x; \
+ if (err != DOM_NO_ERR) \
+ THROW(err); \
+ } while (0)
+
+jmp_buf __exbuf;
+int __exvalue;
+
+#endif
+