From dd6db01dd62ad34b0a1d74fe9f5cfc64fa6e34f2 Mon Sep 17 00:00:00 2001 From: Christian Thaeter Date: Sat, 23 Dec 2006 05:52:38 +0100 Subject: [PATCH] MODE_CASE to MODE_SWITCH, _DBG macros only in alpha builds, BLOCK macro, disabled unfinished gdb support --- nobug.h | 226 +++++++++++++++++++++++++++++++++++----------------------------- 1 file changed, 123 insertions(+), 103 deletions(-) diff --git a/nobug.h b/nobug.h index c3ca106..c3d7836 100644 --- a/nobug.h +++ b/nobug.h @@ -236,42 +236,42 @@ NOBUG_IF_NOT_RELEASE(NOBUG_ASSERT_DBG_(expr, "PRECONDITION FAILED", check postcondistions (computation outcomes) */ #define NOBUG_ENSURE(expr, ...) \ -NOBUG_MODE_CASE( \ +NOBUG_MODE_SWITCH( \ NOBUG_ASSERT_(expr, "POSTCONDITION FAILED", \ __FILE__, __LINE__, ## __VA_ARGS__), \ - do { \ + NOBUG_BLOCK ( \ if (NOBUG_SCOPE_UNCHECKED) \ { \ NOBUG_ASSERT_(expr, "POSTCONDITION FAILED", \ __FILE__, __LINE__, ## __VA_ARGS__); \ } \ - } while (0), \ + ), \ NOBUG_PASS \ ) #define NOBUG_ENSURE_DBG(expr, ...) \ -NOBUG_MODE_CASE( \ +NOBUG_MODE_SWITCH( \ NOBUG_ASSERT_DBG_(expr, "POSTCONDITION FAILED", \ __FILE__, __LINE__, ## __VA_ARGS__), \ - do { \ + NOBUG_BLOCK ( \ if (NOBUG_SCOPE_UNCHECKED) \ { \ NOBUG_ASSERT_DBG_(expr, "POSTCONDITION FAILED", \ __FILE__, __LINE__, ## __VA_ARGS__); \ } \ - } while (0), \ + ), \ NOBUG_PASS \ ) #define NOBUG_ASSERT(expr, ...) \ NOBUG_IF_NOT_RELEASE( \ - do { \ + NOBUG_BLOCK ( \ NOBUG_ASSERT_(expr, "ASSERTION FAILED", __FILE__, __LINE__, ## __VA_ARGS__) \ - } while(0)) + )) #define NOBUG_ASSERT_DBG(expr, what, ...) \ NOBUG_IF_NOT_RELEASE( \ - do { \ + NOBUG_BLOCK ( \ NOBUG_ASSERT_DBG_(expr, "ASSERTION FAILED", \ __FILE__, __LINE__, ## __VA_ARGS__); \ } while(0) \ @@ -289,35 +289,36 @@ if (!(expr)) } #define NOBUG_ASSERT_DBG_(expr, what, file, line, ...) \ -if (NOBUG_DBG_ACTIVE && !(expr)) \ - { \ - NOBUG_LOG_( NOBUG_ON, LOG_EMERG, \ - what": %s@%d (%s) : " \ - NOBUG_HEAD(__VA_ARGS__), \ - NOBUG_BASENAME(file), line, #expr NOBUG_TAIL(__VA_ARGS__)); \ - NOBUG_BACKTRACE; \ - NOBUG_ABORT; \ - } +NOBUG_IF_DBG_ACTIVE( \ +if (!(expr)) \ +{ \ + NOBUG_LOG_( NOBUG_ON, LOG_EMERG, \ + what": %s@%d (%s) : " \ + NOBUG_HEAD(__VA_ARGS__), \ + NOBUG_BASENAME(file), line, #expr NOBUG_TAIL(__VA_ARGS__)); \ + NOBUG_BACKTRACE; \ + NOBUG_ABORT; \ +}) #define NOBUG_INVARIANT(type, pointer, depth) \ -NOBUG_MODE_CASE( \ - do { \ +NOBUG_MODE_SWITCH( \ + NOBUG_BLOCK ( \ if (NOBUG_SCOPE_UNCHECKED) \ { \ NOBUG_CAT(type,_invariant)(pointer, depth, __FILE__, __LINE__); \ } \ - } while (0), \ + ), \ NOBUG_PASS, NOBUG_PASS \ ) #define NOBUG_INVARIANT_DBG(type, pointer, ...) \ -NOBUG_MODE_CASE( \ - do { \ - if (NOBUG_DBG_ACTIVE && NOBUG_SCOPE_UNCHECKED) \ +NOBUG_MODE_SWITCH( \ + NOBUG_IF_DBG_ACTIVE ( \ + if (NOBUG_SCOPE_UNCHECKED) \ { \ NOBUG_CAT(type,_invariant)(pointer, depth, __FILE__, __LINE__); \ } \ - } while (0), \ + ), \ NOBUG_PASS, NOBUG_PASS \ ) @@ -326,137 +327,140 @@ NOBUG_MODE_CASE( #define NOBUG_DUMP(type, pointer, depth) \ NOBUG_IF_NOT_RELEASE( \ - do { \ + NOBUG_BLOCK ( \ NOBUG_CAT(type,_dump)(pointer, depth, __FILE__, __LINE__); \ - } while (0) \ + ) \ ) #define NOBUG_DUMP_DBG(type, pointer, depth) \ NOBUG_IF_NOT_RELEASE( \ - do { \ - if (NOBUG_DBG_ACTIVE) \ - { \ - NOBUG_CAT(type,_dump)(pointer, depth, __FILE__, __LINE__); \ - } \ - } while (0) \ + NOBUG_IF_DBG_ACTIVE ( \ + NOBUG_CAT(type,_dump)(pointer, depth, __FILE__, __LINE__); \ + ) \ ) #define NOBUG_DUMPIF(expr, type, pointer, depth) \ NOBUG_IF_NOT_RELEASE( \ - do { \ + NOBUG_BLOCK ( \ if (expr) \ { \ NOBUG_CAT(type,_dump)(pointer, depth, __FILE__, __LINE__); \ } \ - } while (0) \ + ) \ ) #define NOBUG_DUMPIF_DBG(expr, type, pointer, depth) \ NOBUG_IF_NOT_RELEASE( \ - do { \ - if (NOBUG_DBG_ACTIVE && (expr)) \ + NOBUG_IF_DBG_ACTIVE ( \ + if (expr) \ { \ NOBUG_CAT(type,_dump)(pointer, depth, __FILE__, __LINE__); \ } \ - } while (0) \ + ) \ ) #define NOBUG_DUMP_LOG(fmt, ...) \ -do { \ NOBUG_LOG_( NOBUG_ON, LOG_INFO, \ "%s@%d : " fmt, \ NOBUG_BASENAME(file), line, ## __VA_ARGS__); \ -} while (0) + + +//NOBUG_BLOCK ( \ +//) #define NOBUG_DUMP_LOG_DBG(fmt, ...) \ -do { \ - if (NOBUG_DBG_ACTIVE) { \ - NOBUG_LOG_( NOBUG_ON, LOG_INFO, \ - "%s@%d : " fmt, \ - NOBUG_BASENAME(file), line, ## __VA_ARGS__); \ - } \ -} while (0) +NOBUG_IF_DBG_ACTIVE ( \ + NOBUG_LOG_( NOBUG_ON, LOG_INFO, \ + "%s@%d : " fmt, \ + NOBUG_BASENAME(file), line, ## __VA_ARGS__); \ +) #define NOBUG_DUMP_LOGIF(expr, fmt, ...) \ -do { \ +NOBUG_BLOCK ( \ if (expr) { \ NOBUG_LOG_( NOBUG_ON, LOG_INFO, \ "%s@%d (%s) : " fmt, \ NOBUG_BASENAME(file), line, #expr, ## __VA_ARGS__); \ } \ -} while (0) +) #define NOBUG_DUMP_LOGIF_DBG(expr, fmt, ...) \ -do { \ - if (NOBUG_DBG_ACTIVE && (expr)) { \ +NOBUG_IF_DBG_ACTIVE ( \ + if (expr) { \ NOBUG_LOG_( NOBUG_ON, LOG_INFO, \ "%s@%d (%s) : " fmt, \ NOBUG_BASENAME(file), line, #expr, ## __VA_ARGS__); \ } \ -} while (0) +) #define NOBUG_LOG(flag, lvl, fmt, ...) \ -do { \ +NOBUG_BLOCK ( \ NOBUG_LOG_(flag, lvl, \ fmt, \ ## __VA_ARGS__); \ -} while (0) +) #define NOBUG_LOG_DBG(flag, lvl, fmt, ...) \ -do { \ - if (NOBUG_DBG_ACTIVE) { \ - NOBUG_LOG_(flag, lvl, \ - fmt, \ - ## __VA_ARGS__); \ - } \ -} while (0) +NOBUG_IF_DBG_ACTIVE ( \ + NOBUG_LOG_(flag, lvl, \ + fmt, \ + ## __VA_ARGS__); \ +) #define NOBUG_LOGIF(expr, flag, lvl, fmt, ...) \ -do { \ +NOBUG_BLOCK ( \ if (expr) { \ NOBUG_LOG_(flag, lvl, \ fmt, \ ## __VA_ARGS__); \ } \ -} while (0) +) #define NOBUG_LOGIF_DBG(expr, flag, lvl, fmt, ...) \ -do { \ - if (NOBUG_DBG_ACTIVE && (expr)) { \ +NOBUG_IF_DBG_ACTIVE ( \ + if (expr) { \ NOBUG_LOG_(flag, lvl, \ fmt, \ ## __VA_ARGS__); \ } \ -} while (0) +) // TODO wenn NOBUG_LOGGING_TARGET vereinfachen s/MIN/LIMIT/ #define NOBUG_LOG_(flag, lvl, fmt, ...) \ if (NOBUG_FLAG(flag) && lvl <= NOBUG_LOG_LIMIT) \ { \ -NOBUG_IF_NOT_RELEASE( \ +NOBUG_MODE_SWITCH ( \ if (NOBUG_DBG_ACTIVE) { \ NOBUG_LOG_2_(lvl, "DEBUG: %s : " fmt, __func__, ## __VA_ARGS__); \ - } else ) { \ + } else { \ NOBUG_CAT(NOBUG_LOG_, NOBUG_LOGGING_TARGET) (lvl, "DEBUG: %s :" fmt, \ __func__, ## __VA_ARGS__); \ - } \ -} + }, \ + NOBUG_CAT(NOBUG_LOG_, NOBUG_LOGGING_TARGET) (lvl, "DEBUG: %s :" fmt, \ + __func__, ## __VA_ARGS__), \ + NOBUG_CAT(NOBUG_LOG_, NOBUG_LOGGING_TARGET) (lvl, "DEBUG: %s :" fmt, \ + __func__, ## __VA_ARGS__) \ +)} #define NOBUG_LOG_0(lvl, fmt, ...) fprintf(stderr, "" fmt "\n", ## __VA_ARGS__) #define NOBUG_LOG_1(lvl, fmt, ...) syslog(lvl, fmt, ## __VA_ARGS__) -#define NOBUG_LOG_2(lvl, fmt, ...) \ -NOBUG_IF_NOT_RELEASE(if (NOBUG_DBG_ACTIVE) NOBUG_LOG_2_(lvl, fmt, ## __VA_ARGS__)) +#define NOBUG_LOG_2(lvl, fmt, ...) NOBUG_LOG_2_(lvl, fmt, ## __VA_ARGS__) + //NOBUG_IF_DBG_ACTIVE(NOBUG_LOG_2_(lvl, fmt, ## __VA_ARGS__)) #define NOBUG_LOG_3(lvl, fmt, ...) fprintf(stderr, fmt, ## __VA_ARGS__) +// disabled +#if 0 #define NOBUG_LOG_2_(lvl, fmt, ...) \ -NOBUG_IF_NOT_RELEASE( \ switch (NOBUG_DBG_ACTIVE) { \ case NOBUG_DBG_GDB: \ fprintf(stderr, "TODO gdb logging not implemented" fmt, ## __VA_ARGS__); \ break; \ case NOBUG_DBG_VALGRIND: \ VALGRIND_PRINTF(fmt, ## __VA_ARGS__); \ - }) + } +#else // only valgrind support for now +#define NOBUG_LOG_2_(lvl, fmt, ...) VALGRIND_PRINTF(fmt, ## __VA_ARGS__) +#endif #define NOBUG_LVL(lvl) NOBUG_LVL_##lvl #define NOBUG_LVL_0 "EMERG" @@ -564,26 +568,29 @@ checked Preconditions, Postconditions Preconditions #define NOBUG_DBG_GDB 1 #define NOBUG_DBG_VALGRIND 2 -#define NOBUG_BACKTRACE \ -NOBUG_IF_NOT_RELEASE( \ - switch (NOBUG_DBG_ACTIVE) { \ +#if 0 // no gdb support yet case NOBUG_DBG_GDB: \ NOBUG_BACKTRACE_GDB; \ break; \ + +#endif + +#define NOBUG_BACKTRACE \ +NOBUG_MODE_SWITCH( \ + switch (NOBUG_DBG_ACTIVE) { \ case NOBUG_DBG_VALGRIND: \ NOBUG_BACKTRACE_VALGRIND; \ break; \ default: \ - ) \ NOBUG_BACKTRACE_GLIBC; \ -NOBUG_IF_NOT_RELEASE(}) + }, \ + NOBUG_BACKTRACE_GLIBC, \ + NOBUG_BACKTRACE_GLIBC \ +) #define NOBUG_BACKTRACE_DBG \ NOBUG_IF_NOT_RELEASE( \ switch (NOBUG_DBG_ACTIVE) { \ - case NOBUG_DBG_GDB: \ - NOBUG_BACKTRACE_GDB; \ - break; \ case NOBUG_DBG_VALGRIND: \ NOBUG_BACKTRACE_VALGRIND; \ break; \ @@ -602,25 +609,23 @@ VALGRIND_PRINTF_BACKTRACE("BACKTRACE : %s@%d", \ #define NOBUG_BACKTRACE_GLIBC \ NOBUG_IF_NOT_RELEASE( \ -do { \ +NOBUG_BLOCK ( \ void* nobug_backtrace_buffer[NOBUG_BACKTRACE_DEPTH]; \ backtrace_symbols_fd (nobug_backtrace_buffer, \ - backtrace (nobug_backtrace_buffer, NOBUG_BACKTRACE_DEPTH), 2); \ -} while (0) ) - + backtrace (nobug_backtrace_buffer, NOBUG_BACKTRACE_DEPTH), 2))) /* alpha beta release UNIMPLEMENTED abort abort wont compile */ #define NOBUG_UNIMPLEMENTED(msg) \ -NOBUG_IF(NOBUG_OR(NOBUG_MODE_ALPHA, NOBUG_MODE_BETA), \ - do { \ +NOBUG_IF_NOT_RELEASE ( \ + NOBUG_BLOCK ( \ NOBUG_LOG_( NOBUG_ON, LOG_EMERG, \ "UNIMPLEMENTED: %s@%d : " msg, \ NOBUG_BASENAME(__FILE__), __LINE__); \ NOBUG_ABORT; \ - } while (0) ) \ + )) \ NOBUG_IF(NOBUG_MODE_RELEASE, NOBUG_UNIMPLEMENTED_NOT_ALLOWED_IN_RELEASE_BUILD(msg);) /* @@ -628,18 +633,18 @@ NOBUG_IF(NOBUG_MODE_RELEASE, NOBUG_UNIMPLEMENTED_NOT_ALLOWED_IN_RELEASE_BUILD(ms BUG log abort wont compile */ #define NOBUG_BUG(msg) \ -NOBUG_MODE_CASE( \ +NOBUG_MODE_SWITCH( \ NOBUG_ONCE ( \ NOBUG_LOG_( NOBUG_ON, LOG_ALERT, \ "BUG: %s@%d : " msg, \ NOBUG_BASENAME(__FILE__), __LINE__); \ ), \ - do { \ + NOBUG_BLOCK ( \ NOBUG_LOG_( NOBUG_ON, LOG_ALERT, \ "BUG: %s@%d : " msg, \ NOBUG_BASENAME(__FILE__), __LINE__); \ NOBUG_ABORT; \ - } while (0), \ + ), \ NOBUG_BUG_NOT_ALLOWED_IN_RELEASE_BUILD(msg) \ ) @@ -648,7 +653,7 @@ NOBUG_MODE_CASE( \ TODO log log wont compile */ #define NOBUG_TODO(msg) \ -NOBUG_IF(NOBUG_OR(NOBUG_MODE_ALPHA, NOBUG_MODE_BETA), \ +NOBUG_IF_NOT_RELEASE ( \ NOBUG_ONCE ( \ NOBUG_LOG_( NOBUG_ON, LOG_CRIT, \ "TODO: %s@%d : " msg, \ @@ -661,9 +666,9 @@ NOBUG_IF(NOBUG_MODE_RELEASE, NOBUG_TODO_NOT_ALLOWED_IN_RELEASE_BUILD(msg);) PLANNED log nothing nothing */ #define NOBUG_PLANNED(msg) \ -NOBUG_MODE_CASE( \ +NOBUG_MODE_SWITCH ( \ NOBUG_ONCE ( \ - NOBUG_LOG_( NOBUG_ON, LOG_INFO, \ + NOBUG_LOG_ (NOBUG_ON, LOG_INFO, \ "PLANNED: %s@%d : " msg, \ NOBUG_BASENAME(__FILE__), __LINE__); \ ), \ @@ -675,14 +680,15 @@ NOBUG_MODE_CASE( \ NOTREACHED abort abort nothing */ #define NOBUG_NOTREACHED \ -NOBUG_IF_NOT_RELEASE( \ - do { \ +NOBUG_IF_NOT_RELEASE ( \ + NOBUG_BLOCK ( \ NOBUG_LOG_( NOBUG_ON, LOG_EMERG, \ "NOTREACHED: %s@%d : ", \ NOBUG_BASENAME(__FILE__), __LINE__); \ NOBUG_ABORT; \ - } while (0) \ -) + ) \ +) \ +NOBUG_IF(NOBUG_MODE_RELEASE, NOBUG_PASS) #ifdef __GNUC__ #define NOBUG_CLEANUP(fn) __attribute__((cleanup(fn))) @@ -691,24 +697,38 @@ NOBUG_IF_NOT_RELEASE( \ #endif #define NOBUG_ONCE(code) \ -do { \ +NOBUG_BLOCK ( \ static int NOBUG_CAT(nobug_once_,__LINE__) = 0; \ if (!NOBUG_CAT(nobug_once_,__LINE__)) \ { \ NOBUG_CAT(nobug_once_,__LINE__) = 1; \ code; \ } \ -} while (0) +) #define NOBUG_PASS {(void)0;} +#define NOBUG_BLOCK(code) do { code; } while (0) + +#define NOBUG_IF_DBG_ACTIVE(code) \ +NOBUG_IF(NOBUG_MODE_ALPHA, \ + NOBUG_BLOCK ( \ + if (NOBUG_DBG_ACTIVE) \ + { \ + code; \ + } \ + ) \ +) \ +NOBUG_IF(NOBUG_NOT(NOBUG_MODE_ALPHA), NOBUG_PASS) + + #define NOBUG_IF_NOT_RELEASE(code) \ NOBUG_IF(NOBUG_NOT(NOBUG_MODE_RELEASE), code) \ NOBUG_IF(NOBUG_MODE_RELEASE, NOBUG_PASS) -#define NOBUG_MODE_CASE(alpha_code, beta_code, release_code) \ +#define NOBUG_MODE_SWITCH(alpha_code, beta_code, release_code) \ NOBUG_IF(NOBUG_MODE_ALPHA, alpha_code) \ -NOBUG_IF(NOBUG_MODE_BETA, alpha_code) \ +NOBUG_IF(NOBUG_MODE_BETA, beta_code) \ NOBUG_IF(NOBUG_MODE_RELEASE, release_code) #define NOBUG_IF(bool, code) NOBUG_CAT(NOBUG_IF_,bool)(code) -- 2.11.4.GIT