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