]> pd.if.org Git - pdclib.old/blobdiff - includes/assert.h
Modify various POSIX platform files so you can build on top of glibc for testing
[pdclib.old] / includes / assert.h
index 7bd6e41a6ded9145224628d42479ec32ec0e2274..cb5c47e4bd2875ba8e1874c96c6e6b7c951d0562 100644 (file)
@@ -1,37 +1,53 @@
-/* ----------------------------------------------------------------------------
- * $Id$
- * ----------------------------------------------------------------------------
- * Public Domain C Library - http://pdclib.sourceforge.net
- * This code is Public Domain. Use, modify, and redistribute at will.
- * ----------------------------------------------------------------------------
- * Diagnostics
- * --------------------------------------------------------------------------*/
-
-#ifndef _ASSERT_H
-#define _ASSERT_H _ASSERT_H
-
-/* ----------------------------------------------------------------------------
- * AUXILIARY
- * --------------------------------------------------------------------------*/
-
-/* Helper function doing the print to stderr and call to abort(). */
-void __assert( char const * const expression, /* the tested expression       */
-               char const * const file,       /* name of source file         */
-               char const * const function,   /* name of function            */
-               int const line );              /* number of source file line  */
-
-#endif /* _ASSERT_H - note that the header guard ends here on purpose. The
-                      assert macro is redefined upon each inclusion, in
-                      dependence of NDEBUG.                                  */
-
-/* ----------------------------------------------------------------------------
- * DEFINES
- * --------------------------------------------------------------------------*/
+/* $Id$ */
 
+/* 7.2 Diagnostics <assert.h>
+
+   This file is part of the Public Domain C Library (PDCLib).
+   Permission is granted to use, modify, and / or redistribute at will.
+*/
+
+#ifndef _PDCLIB_ASSERT_H
+#define _PDCLIB_ASSERT_H _PDCLIB_ASSERT_H
+#include <_PDCLIB_aux.h>
+#include <_PDCLIB_config.h>
+_PDCLIB_BEGIN_EXTERN_C
+
+/* 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
-#if defined NDEBUG
-#define assert( x ) ( (void) 0 )
+
+#ifdef NDEBUG
+#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( x ) ( x ) ? ( (void) 0 ) \
-                          :  __assert( #x, __FILE__, __func__, __LINE__ )
+#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
+