summaryrefslogtreecommitdiff
path: root/src/assert/assert.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/assert/assert.c')
-rw-r--r--src/assert/assert.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/assert/assert.c b/src/assert/assert.c
new file mode 100644
index 00000000..65e4ea6e
--- /dev/null
+++ b/src/assert/assert.c
@@ -0,0 +1,44 @@
+#include <assert.h>
+
+#undef assert
+
+#ifdef NDEBUG
+
+#define assert(ignore) ((void)0)
+
+#else
+
+#if __STDC_VERSION__ < 199901L
+#define __func__ ((char*)0)
+#endif
+
+#define assert(__exp__) \
+ ((void)(__exp__ ? 0 : __assert(#__exp__, __FILE__, __LINE__, __func__)))
+
+#endif
+
+/* in c89 - void assert(int expression); */
+/* in c99 - void assert(/scalar/ expression); */
+
+/** insert program diagnostics **/
+
+/***
+adds mandatory checks to programs. If ARGUMENT(expression) is false,
+FUNCTION(assert) prints a diagnostic message to IDENTIFIER(stderr). The
+message includes the text of the failed assertion as well as the file name and
+line number of the source where the assertion failed. Compilers supporting
+std(C99) or higher will also include the name of the function in which the
+assertion failed. After printing the diagnostic message, THIS()
+causes abnormal program termination by calling FUNCTION(abort).
+
+If the macro IDENTIFIER(NDEBUG) is defined, THIS() is
+defined as DEFINITION(((void)0)).
+***/
+
+/*
+PROTOTYPE(void assert(int expression);)
+IMPLEMENTATION(The format of the diagnostic message, TODO: document this here)
+UNDEFINED(The THIS() macro is suppressed)
+UNDEFINED(ARGUMENT(expression) does not have a scalar type)
+STDC(1)
+*/