From 7ef8a7379f7f7d09e71ccae2a0b688c3cd80423f Mon Sep 17 00:00:00 2001 From: Jakob Kaivo Date: Fri, 8 Feb 2019 18:42:39 -0500 Subject: merge sources into single tree --- src/assert/NDEBUG.c | 14 ++++++++++++++ src/assert/__assert.c | 15 +++++++++++++++ src/assert/assert.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 73 insertions(+) create mode 100644 src/assert/NDEBUG.c create mode 100644 src/assert/__assert.c create mode 100644 src/assert/assert.c (limited to 'src/assert') diff --git a/src/assert/NDEBUG.c b/src/assert/NDEBUG.c new file mode 100644 index 00000000..b09e73ce --- /dev/null +++ b/src/assert/NDEBUG.c @@ -0,0 +1,14 @@ +/* #undef NDEBUG */ + +#define NDEBUG /** control program diagnostics **/ + +/*** +THIS() is not defined by the compiler or any header. If it is defined +by the programmer before including HEADER(assert.h), it causes +FUNCTION(assert) to be a void statement. Otherwise, FUNCTION(assert) has +its normal behavior. +***/ + +/* +STDC(1) +*/ diff --git a/src/assert/__assert.c b/src/assert/__assert.c new file mode 100644 index 00000000..630fdec1 --- /dev/null +++ b/src/assert/__assert.c @@ -0,0 +1,15 @@ +#include +#include "stdio.h" +#include "stdlib.h" + +void __assert(const char *expr, const char *file, int line, const char *func) +{ + if (func) { + fprintf(stderr, "Assertion failed: %s (%s:%d:%s())\n", expr, + file, line, func); + } else { + fprintf(stderr, "Assertion failed: %s (%s:%d)\n", expr, file, + line); + } + abort(); +} 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 + +#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) +*/ -- cgit v1.2.1