source: git/factory/assert.h @ 4d50d8c

fieker-DuValspielwiese
Last change on this file since 4d50d8c was 80f8055, checked in by Hans Schönemann <hannes@…>, 18 years ago
*hannes/grayson: C++ git-svn-id: file:///usr/local/Singular/svn/trunk@9486 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 4.7 KB
Line 
1/* emacs edit mode for this file is -*- C -*- */
2/* $Id: assert.h,v 1.7 2006-11-13 14:15:04 Singular Exp $ */
3
4/* This is for compatibility with standard 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
32extern "C" {
33#endif
34
35#include <stdio.h>
36#include <stdlib.h>
37
38#ifdef __cplusplus
39}
40#endif
41
42/* {{{ permanent macro definitions */
43#ifndef __GNUC__
44#define __ASSERT(expression, message, file, line) \
45(fprintf( stderr, "error: " message "\n%s:%u: failed assertion `%s'\n", \
46 file, line, expression ), abort(), 0 )
47#define __ASSERT1(expression, message, parameter1, file, line)  \
48(fprintf( stderr, "error: " message "\n%s:%u: failed assertion `%s'\n", \
49 parameter1, file, line, expression ), abort(), 0 )
50
51#define STICKYASSERT(expression, message) \
52((void)((expression) ? 0 : __ASSERT(#expression, message, __FILE__, __LINE__)))
53#define STICKYASSERT1(expression, message, parameter1) \
54((void)((expression) ? 0 : __ASSERT1(#expression, message, parameter1, __FILE__, __LINE__)))
55
56#define __WARN(expression, message, file, line)  \
57(fprintf( stderr, "warning: " message "\n%s:%u: failed assertion `%s'\n", \
58 file, line, expression ), 0 )
59#define STICKYWARN(expression, message) \
60((void)((expression) ? 0 : __WARN(#expression, message, __FILE__, __LINE__)))
61#else /* __GNUCC__ */
62/* use preprocessor macro __PRETTY_FUNCTION__ for more informative output */
63#define __ASSERT(expression, message, file, line, function) \
64(fprintf( stderr, "error: " message "\n%s:%u: In function `%s':\nfailed assertion `%s'\n", \
65 file, line, function, expression ), abort(), 0 )
66#define __ASSERT1(expression, message, parameter1, file, line, function)  \
67(fprintf( stderr, "error: " message "\n%s:%u: In function `%s':\nfailed assertion `%s'\n", \
68 parameter1, file, line, function, expression ), abort(), 0 )
69
70#define STICKYASSERT(expression, message) \
71((void)((expression) ? 0 : __ASSERT(#expression, message, __FILE__, __LINE__, __PRETTY_FUNCTION__)))
72#define STICKYASSERT1(expression, message, parameter1) \
73((void)((expression) ? 0 : __ASSERT1(#expression, message, parameter1, __FILE__, __LINE__, __PRETTY_FUNCTION__)))
74
75#define __WARN(expression, message, file, line, function)  \
76(fprintf( stderr, "warning: " message "\n%s:%u: In function `%s':\nfailed assertion `%s'\n", \
77 file, line, function, expression ), 0 )
78#define STICKYWARN(expression, message) \
79((void)((expression) ? 0 : __WARN(#expression, message, __FILE__, __LINE__, __PRETTY_FUNCTION__)))
80#endif /* __GNUCC__ */
81/* }}} */
82
83/* {{{ macro definitions dependent on NOASSERT */
84#ifndef NOASSERT
85#ifndef __GNUC__
86#define ASSERT(expression, message) \
87((void)((expression) ? 0 : __ASSERT(#expression, message, __FILE__, __LINE__)))
88#define ASSERT1(expression, message, parameter1) \
89((void)((expression) ? 0 : __ASSERT1(#expression, message, parameter1, __FILE__, __LINE__)))
90
91#define WARN(expression, message) \
92((void)((expression) ? 0 : __WARN(#expression, message, __FILE__, __LINE__)))
93#else /* __GNUCC__ */
94/* use preprocessor macro __PRETTY_FUNCTION__ for more informative output */
95#define ASSERT(expression, message) \
96((void)((expression) ? 0 : __ASSERT(#expression, message, __FILE__, __LINE__, __PRETTY_FUNCTION__)))
97#define ASSERT1(expression, message, parameter1) \
98((void)((expression) ? 0 : __ASSERT1(#expression, message, parameter1, __FILE__, __LINE__, __PRETTY_FUNCTION__)))
99
100#define WARN(expression, message) \
101((void)((expression) ? 0 : __WARN(#expression, message, __FILE__, __LINE__, __PRETTY_FUNCTION__)))
102#endif /* __GNUCC__ */
103
104#define PVIRT_VOID(msg) \
105{ fprintf( stderr, "pure method( " msg " ) called\n" ); abort(); }
106#define PVIRT_INTCF(msg) \
107{ fprintf( stderr, "pure method( " msg " ) called\n" ); abort(); return 0; }
108#define PVIRT_BOOL(msg) \
109{ fprintf( stderr, "pure method( " msg " ) called\n" ); abort(); return false; }
110#define PVIRT_INT(msg) \
111{ fprintf( stderr, "pure method( " msg " ) called\n" ); abort(); return 0; }
112#define PVIRT_CHARCC(msg) \
113{ fprintf( stderr, "pure method( " msg " ) called\n" ); abort(); return 0; }
114#else /* NOASSERT */
115#define ASSERT(expression, message)
116#define ASSERT1(expression, message, parameter1)
117
118#define WARN(expression, message)
119
120#define PVIRT_VOID(msg) = 0
121#define PVIRT_INTCF(msg) = 0
122#define PVIRT_BOOL(msg) = 0
123#define PVIRT_INT(msg) = 0
124#define PVIRT_CHARCC(msg) = 0
125#endif /* NOASSERT */
126/* }}} */
Note: See TracBrowser for help on using the repository browser.