source: git/factory/cf_assert.h @ 6bc4cd

spielwiese
Last change on this file since 6bc4cd was 021751, checked in by Niels Ranosch <ranosch@…>, 13 years ago
FIX: empty debug function-macros should better be: ((void) 0/1)
  • Property mode set to 100644
File size: 4.7 KB
RevLine 
[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]36extern "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/* }}} */
Note: See TracBrowser for help on using the repository browser.