source: git/factory/cf_assert.h @ 650f2d8

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