[735322b] | 1 | /* emacs edit mode for this file is -*- C -*- */ |
---|
[341696] | 2 | /* $Id$ */ |
---|
[2dd068] | 3 | |
---|
[650f2d8] | 4 | /* This is for compatibility with standard cf_assert.h */ |
---|
[bc428ca] | 5 | #if defined (NDEBUG) && ! defined (NOASSERT) |
---|
| 6 | #define NOASSERT |
---|
| 7 | #endif |
---|
| 8 | |
---|
[2dd068] | 9 | /* It should be possible to include this file multiple times for different */ |
---|
[bc428ca] | 10 | /* settings of NOASSERT */ |
---|
[2dd068] | 11 | |
---|
[735322b] | 12 | /* {{{ undefines */ |
---|
[2dd068] | 13 | #undef __ASSERT |
---|
[bc428ca] | 14 | #undef __ASSERT1 |
---|
[2dd068] | 15 | #undef STICKYASSERT |
---|
[d93b48] | 16 | #undef STICKYASSERT1 |
---|
[bc428ca] | 17 | #undef ASSERT |
---|
| 18 | #undef ASSERT1 |
---|
| 19 | |
---|
| 20 | #undef __WARN |
---|
| 21 | #undef STICKYWARN |
---|
| 22 | #undef WARN |
---|
| 23 | |
---|
| 24 | #undef PVIRT_VOID |
---|
| 25 | #undef PVIRT_INTCF |
---|
| 26 | #undef PVIRT_BOOL |
---|
| 27 | #undef PVIRT_INT |
---|
| 28 | #undef PVIRT_CHARCC |
---|
[735322b] | 29 | /* }}} */ |
---|
[2dd068] | 30 | |
---|
[cfd4a8] | 31 | #ifdef __cplusplus |
---|
[9c6887] | 32 | #ifndef NOSTREAMIO |
---|
[958fc4] | 33 | #ifdef HAVE_CSTDIO |
---|
| 34 | #include <cstdio> |
---|
| 35 | #else |
---|
[80f8055] | 36 | extern "C" { |
---|
[2dd068] | 37 | #include <stdio.h> |
---|
[e866b0] | 38 | #include <stdlib.h> |
---|
[80f8055] | 39 | } |
---|
| 40 | #endif |
---|
[cfd4a8] | 41 | #else |
---|
| 42 | #include <stdio.h> |
---|
| 43 | #include <stdlib.h> |
---|
[958fc4] | 44 | #endif |
---|
[9c6887] | 45 | #endif |
---|
[80f8055] | 46 | |
---|
[735322b] | 47 | /* {{{ permanent macro definitions */ |
---|
| 48 | #ifndef __GNUC__ |
---|
[bc428ca] | 49 | #define __ASSERT(expression, message, file, line) \ |
---|
| 50 | (fprintf( stderr, "error: " message "\n%s:%u: failed assertion `%s'\n", \ |
---|
| 51 | file, line, expression ), abort(), 0 ) |
---|
| 52 | #define __ASSERT1(expression, message, parameter1, file, line) \ |
---|
| 53 | (fprintf( stderr, "error: " message "\n%s:%u: failed assertion `%s'\n", \ |
---|
| 54 | parameter1, file, line, expression ), abort(), 0 ) |
---|
[735322b] | 55 | |
---|
[bc428ca] | 56 | #define STICKYASSERT(expression, message) \ |
---|
[2dd068] | 57 | ((void)((expression) ? 0 : __ASSERT(#expression, message, __FILE__, __LINE__))) |
---|
[d93b48] | 58 | #define STICKYASSERT1(expression, message, parameter1) \ |
---|
| 59 | ((void)((expression) ? 0 : __ASSERT1(#expression, message, parameter1, __FILE__, __LINE__))) |
---|
[2dd068] | 60 | |
---|
[bc428ca] | 61 | #define __WARN(expression, message, file, line) \ |
---|
| 62 | (fprintf( stderr, "warning: " message "\n%s:%u: failed assertion `%s'\n", \ |
---|
| 63 | file, line, expression ), 0 ) |
---|
| 64 | #define STICKYWARN(expression, message) \ |
---|
| 65 | ((void)((expression) ? 0 : __WARN(#expression, message, __FILE__, __LINE__))) |
---|
[735322b] | 66 | #else /* __GNUCC__ */ |
---|
| 67 | /* use preprocessor macro __PRETTY_FUNCTION__ for more informative output */ |
---|
| 68 | #define __ASSERT(expression, message, file, line, function) \ |
---|
| 69 | (fprintf( stderr, "error: " message "\n%s:%u: In function `%s':\nfailed assertion `%s'\n", \ |
---|
| 70 | file, line, function, expression ), abort(), 0 ) |
---|
| 71 | #define __ASSERT1(expression, message, parameter1, file, line, function) \ |
---|
| 72 | (fprintf( stderr, "error: " message "\n%s:%u: In function `%s':\nfailed assertion `%s'\n", \ |
---|
| 73 | parameter1, file, line, function, expression ), abort(), 0 ) |
---|
| 74 | |
---|
| 75 | #define STICKYASSERT(expression, message) \ |
---|
| 76 | ((void)((expression) ? 0 : __ASSERT(#expression, message, __FILE__, __LINE__, __PRETTY_FUNCTION__))) |
---|
| 77 | #define STICKYASSERT1(expression, message, parameter1) \ |
---|
| 78 | ((void)((expression) ? 0 : __ASSERT1(#expression, message, parameter1, __FILE__, __LINE__, __PRETTY_FUNCTION__))) |
---|
| 79 | |
---|
| 80 | #define __WARN(expression, message, file, line, function) \ |
---|
| 81 | (fprintf( stderr, "warning: " message "\n%s:%u: In function `%s':\nfailed assertion `%s'\n", \ |
---|
| 82 | file, line, function, expression ), 0 ) |
---|
| 83 | #define STICKYWARN(expression, message) \ |
---|
| 84 | ((void)((expression) ? 0 : __WARN(#expression, message, __FILE__, __LINE__, __PRETTY_FUNCTION__))) |
---|
| 85 | #endif /* __GNUCC__ */ |
---|
| 86 | /* }}} */ |
---|
[bc428ca] | 87 | |
---|
[735322b] | 88 | /* {{{ macro definitions dependent on NOASSERT */ |
---|
[bc428ca] | 89 | #ifndef NOASSERT |
---|
[735322b] | 90 | #ifndef __GNUC__ |
---|
[bc428ca] | 91 | #define ASSERT(expression, message) \ |
---|
[2dd068] | 92 | ((void)((expression) ? 0 : __ASSERT(#expression, message, __FILE__, __LINE__))) |
---|
[bc428ca] | 93 | #define ASSERT1(expression, message, parameter1) \ |
---|
| 94 | ((void)((expression) ? 0 : __ASSERT1(#expression, message, parameter1, __FILE__, __LINE__))) |
---|
[2dd068] | 95 | |
---|
[bc428ca] | 96 | #define WARN(expression, message) \ |
---|
| 97 | ((void)((expression) ? 0 : __WARN(#expression, message, __FILE__, __LINE__))) |
---|
[735322b] | 98 | #else /* __GNUCC__ */ |
---|
| 99 | /* use preprocessor macro __PRETTY_FUNCTION__ for more informative output */ |
---|
| 100 | #define ASSERT(expression, message) \ |
---|
| 101 | ((void)((expression) ? 0 : __ASSERT(#expression, message, __FILE__, __LINE__, __PRETTY_FUNCTION__))) |
---|
| 102 | #define ASSERT1(expression, message, parameter1) \ |
---|
| 103 | ((void)((expression) ? 0 : __ASSERT1(#expression, message, parameter1, __FILE__, __LINE__, __PRETTY_FUNCTION__))) |
---|
| 104 | |
---|
| 105 | #define WARN(expression, message) \ |
---|
| 106 | ((void)((expression) ? 0 : __WARN(#expression, message, __FILE__, __LINE__, __PRETTY_FUNCTION__))) |
---|
| 107 | #endif /* __GNUCC__ */ |
---|
[bc428ca] | 108 | |
---|
| 109 | #define PVIRT_VOID(msg) \ |
---|
| 110 | { fprintf( stderr, "pure method( " msg " ) called\n" ); abort(); } |
---|
| 111 | #define PVIRT_INTCF(msg) \ |
---|
| 112 | { fprintf( stderr, "pure method( " msg " ) called\n" ); abort(); return 0; } |
---|
| 113 | #define PVIRT_BOOL(msg) \ |
---|
| 114 | { fprintf( stderr, "pure method( " msg " ) called\n" ); abort(); return false; } |
---|
| 115 | #define PVIRT_INT(msg) \ |
---|
| 116 | { fprintf( stderr, "pure method( " msg " ) called\n" ); abort(); return 0; } |
---|
| 117 | #define PVIRT_CHARCC(msg) \ |
---|
| 118 | { fprintf( stderr, "pure method( " msg " ) called\n" ); abort(); return 0; } |
---|
| 119 | #else /* NOASSERT */ |
---|
[021751] | 120 | #define ASSERT(expression, message) ((void) 0) |
---|
| 121 | #define ASSERT1(expression, message, parameter1) ((void) 0) |
---|
[bc428ca] | 122 | |
---|
[021751] | 123 | #define WARN(expression, message) ((void) 0) |
---|
[bc428ca] | 124 | |
---|
| 125 | #define PVIRT_VOID(msg) = 0 |
---|
| 126 | #define PVIRT_INTCF(msg) = 0 |
---|
| 127 | #define PVIRT_BOOL(msg) = 0 |
---|
| 128 | #define PVIRT_INT(msg) = 0 |
---|
| 129 | #define PVIRT_CHARCC(msg) = 0 |
---|
| 130 | #endif /* NOASSERT */ |
---|
[735322b] | 131 | /* }}} */ |
---|