diff options
Diffstat (limited to 'camel/providers/imapp/camel-imapp-exception.h')
-rw-r--r-- | camel/providers/imapp/camel-imapp-exception.h | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/camel/providers/imapp/camel-imapp-exception.h b/camel/providers/imapp/camel-imapp-exception.h new file mode 100644 index 0000000000..5e18b6c815 --- /dev/null +++ b/camel/providers/imapp/camel-imapp-exception.h @@ -0,0 +1,35 @@ + +/* This implements 'real' exceptions that work a bit like c++/java exceptions */ + +/* Still experimental code */ + +#ifndef __CAMEL_IMAPP_EXCEPTION_H +#define __CAMEL_IMAPP_EXCEPTION_H + +#include <setjmp.h> +#include "camel/camel-exception.h" + +struct _CamelExceptionEnv { + struct _CamelExceptionEnv *parent; + CamelException *ex; + jmp_buf env; +}; + +#define CAMEL_TRY { struct _CamelExceptionEnv __env; camel_exception_try(&__env); if (setjmp(__env.env) == 0) +#define CAMEL_IGNORE camel_exception_done(&__env); } +#define CAMEL_CATCH(x) { CamelException *x; x=__env.ex; if (x != NULL) +#define CAMEL_DONE } camel_exception_done(&__env); } +#define CAMEL_DROP() camel_exception_drop(&__env) + +void camel_exception_setup(void); + +/* internal functions, use macro's above */ +void camel_exception_try(struct _CamelExceptionEnv *env); +void camel_exception_done(struct _CamelExceptionEnv *env); +void camel_exception_drop(struct _CamelExceptionEnv *env); + +/* user functions */ +void camel_exception_throw_ex(CamelException *ex) __attribute__ ((noreturn)); +void camel_exception_throw(int id, char *fmt, ...) __attribute__ ((noreturn)); + +#endif |