source: git/factory/cf_assert.h @ b1d287

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