On Thu, Jul 05, 2007 at 02:54:33AM +0100, Pedro Alves wrote: > #define TRY_EXCEPTION_HANDLER \ > struct eh_data __ehd; \ > int __ret = setjmp(__ehd.env); \ > if (!__ret) { \ > start_ehandling(&__ehd); > > #define CATCH_EXCEPTION_HANDLER \ > end_ehandling(&__ehd); \ > } else > > Very nice. Hiding the __ehd would be great. If not possible > then I suggest at least adding ##__LINE__ to it.
I suppose one could do something like: #define TRY_SEH \ do { \ struct eh_data __ehd; \ int __ret = setjmp(__ehd.env); \ if (!__ret) { \ start_ehandling(&__ehd); #define CATCH_SEH \ end_ehandling(&__ehd); \ } else { #define END_SEH \ } \ } while (0); which would be used with: TRY_SEH { while (wcount--) *vaddr++ = value; } CATCH_SEH { Output(C_ERROR "EXCEPTION while writing %08x to address %p", value, vaddr); } END_SEH This has the advantage that it should work with C code. (I'm pretty sure you could hide __ehd and not require an END decl with C++, but it would look ugly and not be significantly better than the previous implementation.) Earlier on, I tried to use the same __try/__except syntax that msdn documents. However, I gave up on it - it was too complicated and not useful for me. In particular, implementing __finally would be painful. -Kevin ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ Cegcc-devel mailing list Cegcc-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/cegcc-devel