From b5ad4cdfdec153794bc8966d583c66f3864c29b3 Mon Sep 17 00:00:00 2001 From: Simon Arlott Date: Sat, 29 Jul 2017 17:37:53 +0100 Subject: [PATCH] make soft asserts better by allowing them to be used in expressions --- include/s_assert.h | 30 +++++++++++++++--------------- librb/include/rb_lib.h | 23 +++++++++++------------ 2 files changed, 26 insertions(+), 27 deletions(-) diff --git a/include/s_assert.h b/include/s_assert.h index 74a48198..d6483413 100644 --- a/include/s_assert.h +++ b/include/s_assert.h @@ -28,37 +28,37 @@ #include "defaults.h" -#ifdef SOFT_ASSERT - #include "logger.h" #include "send.h" #include "snomask.h" #ifdef __GNUC__ -#define s_assert(expr) do \ - if(!(expr)) { \ +#define ss_assert(expr) ( \ + ((expr)) || ( \ ilog(L_MAIN, \ "file: %s line: %d (%s): Assertion failed: (%s)", \ - __FILE__, __LINE__, __PRETTY_FUNCTION__, #expr); \ + __FILE__, __LINE__, __PRETTY_FUNCTION__, #expr), 0) || (\ sendto_realops_snomask(SNO_GENERAL, L_ALL, \ "file: %s line: %d (%s): Assertion failed: (%s)", \ - __FILE__, __LINE__, __PRETTY_FUNCTION__, #expr); \ - } \ - while(0) + __FILE__, __LINE__, __PRETTY_FUNCTION__, #expr), 0) \ + ) #else -#define s_assert(expr) do \ - if(!(expr)) { \ +#define ss_assert(expr) ( \ + ((expr)) || ( \ ilog(L_MAIN, \ "file: %s line: %d: Assertion failed: (%s)", \ - __FILE__, __LINE__, #expr); \ + __FILE__, __LINE__, #expr), 0) || ( \ sendto_realops_snomask(SNO_GENERAL, L_ALL, \ "file: %s line: %d: Assertion failed: (%s)" \ - __FILE__, __LINE__, #expr); \ - } \ - while(0) + __FILE__, __LINE__, #expr), 0) \ + ) #endif + +/* evaluates to true if assertion fails */ +#ifdef SOFT_ASSERT +#define s_assert(expr) (!ss_assert(expr)) #else -#define s_assert(expr) assert(expr) +#define s_assert(expr) (assert(ss_assert(expr)), 0) #endif #endif /* INCLUDED_s_assert_h */ diff --git a/librb/include/rb_lib.h b/librb/include/rb_lib.h index 2a817408..e8440f54 100644 --- a/librb/include/rb_lib.h +++ b/librb/include/rb_lib.h @@ -128,27 +128,26 @@ char *rb_strerror(int error); #endif #ifdef __GNUC__ -#define slrb_assert(expr) do \ - if(rb_unlikely(!(expr))) { \ +#define slrb_assert(expr) ( \ + rb_likely((expr)) || ( \ rb_lib_log( \ "file: %s line: %d (%s): Assertion failed: (%s)", \ - __FILE__, __LINE__, __PRETTY_FUNCTION__, #expr); \ - } \ - while(0) + __FILE__, __LINE__, __PRETTY_FUNCTION__, #expr), 0) \ + ) #else -#define slrb_assert(expr) do \ - if(rb_unlikely(!(expr))) { \ +#define slrb_assert(expr) ( \ + rb_likely((expr)) || ( \ rb_lib_log( \ "file: %s line: %d: Assertion failed: (%s)", \ - __FILE__, __LINE__, #expr); \ - } \ - while(0) + __FILE__, __LINE__, #expr), 0) \ + ) #endif +/* evaluates to true if assertion fails */ #ifdef SOFT_ASSERT -#define lrb_assert(expr) slrb_assert(expr) +#define lrb_assert(expr) (!slrb_assert(expr)) #else -#define lrb_assert(expr) do { slrb_assert(expr); assert(expr); } while(0) +#define lrb_assert(expr) (assert(slrb_assert(expr)), 0) #endif #ifdef RB_SOCKADDR_HAS_SA_LEN