X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=includes%2Fassert.h;h=cb5c47e4bd2875ba8e1874c96c6e6b7c951d0562;hb=3862b03514c94f37966f61693619e6483ead6045;hp=35c2795352bba439b21e4e391c73864a090b5613;hpb=d9dcf16664c81809258992e1653ecb68c8079974;p=pdclib.old diff --git a/includes/assert.h b/includes/assert.h index 35c2795..cb5c47e 100644 --- a/includes/assert.h +++ b/includes/assert.h @@ -6,44 +6,48 @@ Permission is granted to use, modify, and / or redistribute at will. */ -#ifndef _PDCLIB_AUX_H -#define _PDCLIB_AUX_H _PDCLIB_AUX_H +#ifndef _PDCLIB_ASSERT_H +#define _PDCLIB_ASSERT_H _PDCLIB_ASSERT_H #include <_PDCLIB_aux.h> -#endif - -#ifndef _PDCLIB_CONFIG_H -#define _PDCLIB_CONFIG_H _PDCLIB_CONFIG_H #include <_PDCLIB_config.h> -#endif +_PDCLIB_BEGIN_EXTERN_C -#ifndef _PDCLIB_ASSERT_H -#define _PDCLIB_ASSERT_H _PDCLIB_ASSERT_H -#if _PDCLIB_C_VERSION == 99 -void _PDCLIB_assert( char const * const, char const * const, char const * const ); -#else -void _PDCLIB_assert( char const * const ); -#endif -#endif +/* Functions _NOT_ tagged noreturn as this hampers debugging */ +void _PDCLIB_assert99( char const * const, char const * const, char const * const ); +void _PDCLIB_assert89( char const * const ); /* If NDEBUG is set, assert() is a null operation. */ #undef assert #ifdef NDEBUG -#define assert( ignore ) ( (void) 0 ) -#else -#if _PDCLIB_C_VERSION == 99 -#define assert( expression ) ( ( expression ) ? (void) 0 \ - : _PDCLIB_assert( "Assertion failed: " #expression \ - ", function ", __func__, \ - ", file " __FILE__ \ - ", line " _PDCLIB_symbol2string( __LINE__ ) \ - "." _PDCLIB_endl ) ) +#define assert( ignore ) do { \ + if(!(expression)) { _PDCLIB_UNREACHABLE; } \ + } while(0) + +#elif _PDCLIB_C_MIN(99) +#define assert(expression) \ + do { if(!(expression)) { \ + _PDCLIB_assert99("Assertion failed: " _PDCLIB_symbol2string(expression)\ + ", function ", __func__, \ + ", file " __FILE__ \ + ", line " _PDCLIB_symbol2string( __LINE__ ) \ + "." _PDCLIB_endl ); \ + _PDCLIB_UNREACHABLE; \ + } \ + } while(0) + #else -#define assert( expression ) ( ( expression ) ? (void) 0 \ - : _PDCLIB_assert( "Assertion failed: " #expression \ - ", file " __FILE__ \ - ", line " _PDCLIB_symbol2string( __LINE__ ) \ - "." _PDCLIB_endl ) ) +#define assert(expression) \ + do { if(!(expression)) { \ + _PDCLIB_assert89("Assertion failed: " _PDCLIB_symbol2string(expression)\ + ", file " __FILE__ \ + ", line " _PDCLIB_symbol2string( __LINE__ ) \ + "." _PDCLIB_endl ); \ + _PDCLIB_UNREACHABLE; \ + } \ + } while(0) #endif + +_PDCLIB_END_EXTERN_C #endif