Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Parmap: process the whole dynar, don't force workers to fetch work
[simgrid.git] / include / xbt / ex.h
index 11d4037..f1f3cc9 100644 (file)
@@ -55,16 +55,16 @@ SG_BEGIN_DECL()
 # include <stdio.h>
 #include <errno.h>
 #  define MAYDAY_SAVE(m)    printf("%d %s:%d save %p\n",                \
-                                   (*xbt_getpid)(),__FILE__,__LINE__,  \
+                                   xbt_getpid(), __FILE__, __LINE__,    \
                                    (m)->jb                              \
                                   ),
 #  define MAYDAY_RESTORE(m) printf("%d %s:%d restore %p\n",             \
-                                   (*xbt_getpid)(),__FILE__,__LINE__,  \
+                                   xbt_getpid(), __FILE__, __LINE__,    \
                                    (m)->jb                              \
                                   ),
 #  define MAYDAY_CATCH(e)   printf("%d %s:%d Catched '%s'\n",           \
-                                   (*xbt_getpid)(),__FILE__,__LINE__,  \
-                                   e.msg                                \
+                                   xbt_getpid(), __FILE__, __LINE__,    \
+                                   (e).msg                              \
                                  ),
 #else
 #  define MAYDAY_SAVE(m)
@@ -385,6 +385,17 @@ extern void __xbt_ex_terminate_default(xbt_ex_t * e);
  *  @hideinitializer
  */
 #define CATCH(e) \
+  DO_CATCH((e) = XBT_EX_T_CPLUSPLUSCAST __xbt_running_ctx_fetch()->exception)
+
+/** @brief like CATCH(e) but without argument
+ *  @hideinitializer
+ *
+ *  Useful if you only want to rethrow the exception caught, and do not want to
+ *  bother with an unused variable.
+ */
+#define CATCH_ANONYMOUS DO_CATCH(0)
+
+#define DO_CATCH(_xbt_do_catch_set_e) \
             else { \
             } \
             if (!(__ex_cleanup)) \
@@ -398,7 +409,8 @@ extern void __xbt_ex_terminate_default(xbt_ex_t * e);
         __xbt_ex_ctx_ptr->ctx_mctx = __ex_mctx_en; \
     } \
     if (   !(__xbt_running_ctx_fetch()->ctx_caught) \
-        || ((e) = XBT_EX_T_CPLUSPLUSCAST __xbt_running_ctx_fetch()->exception, MAYDAY_CATCH(e) 0)) { \
+        || ((void)(_xbt_do_catch_set_e),                             \
+            MAYDAY_CATCH(__xbt_running_ctx_fetch()->exception) 0)) {    \
     } \
     else
 
@@ -438,7 +450,7 @@ extern void __xbt_ex_terminate_default(xbt_ex_t * e);
      _throw_ctx->exception.remote   = 0;                                     \
      _throw_ctx->exception.host     = (char*)NULL;                           \
      _throw_ctx->exception.procname = (char*)xbt_procname();                 \
-     _throw_ctx->exception.pid      = (*xbt_getpid)();                       \
+     _throw_ctx->exception.pid      = xbt_getpid();                          \
      _throw_ctx->exception.file     = (char*)__FILE__;                       \
      _throw_ctx->exception.line     = __LINE__;                              \
      _throw_ctx->exception.func     = (char*)_XBT_FUNCTION;                  \
@@ -461,7 +473,7 @@ extern void __xbt_ex_terminate_default(xbt_ex_t * e);
   THROWF(unknown_error, 0, "Function %s unimplemented",_XBT_FUNCTION)
 
 #ifndef NDEBUG
-#  define DIE_IMPOSSIBLE       xbt_assert0(0,"The Impossible Did Happen (yet again)")
+#  define DIE_IMPOSSIBLE       xbt_assert(0,"The Impossible Did Happen (yet again)")
 #else
 #  define DIE_IMPOSSIBLE       exit(1);
 #endif
@@ -501,7 +513,7 @@ XBT_PUBLIC(void) xbt_backtrace_current(xbt_ex_t * e);
 /** @brief Display a previously captured backtrace */
 XBT_PUBLIC(void) xbt_backtrace_display(xbt_ex_t * e);
 
-#if 1 || defined(XBT_USE_DEPRECATED)
+#ifdef XBT_USE_DEPRECATED
 
 /* Kept for backward compatibility. */