source: git/factory/assert.h @ 735322b

spielwiese
Last change on this file since 735322b was 735322b, checked in by Jens Schmidt <schmidt@…>, 27 years ago
* assert.h: prints the function now where the assrtion occured if we are translating with gcc git-svn-id: file:///usr/local/Singular/svn/trunk@747 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 4.6 KB
Line 
1/* emacs edit mode for this file is -*- C -*- */
2/* $Id: assert.h,v 1.6 1997-09-29 06:56:27 schmidt 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#include <stdio.h>
32#include <stdlib.h>
33
34/* {{{ permanent macro definitions */
35#ifndef __GNUC__
36#define __ASSERT(expression, message, file, line) \
37(fprintf( stderr, "error: " message "\n%s:%u: failed assertion `%s'\n", \
38 file, line, expression ), abort(), 0 )
39#define __ASSERT1(expression, message, parameter1, file, line)  \
40(fprintf( stderr, "error: " message "\n%s:%u: failed assertion `%s'\n", \
41 parameter1, file, line, expression ), abort(), 0 )
42
43#define STICKYASSERT(expression, message) \
44((void)((expression) ? 0 : __ASSERT(#expression, message, __FILE__, __LINE__)))
45#define STICKYASSERT1(expression, message, parameter1) \
46((void)((expression) ? 0 : __ASSERT1(#expression, message, parameter1, __FILE__, __LINE__)))
47
48#define __WARN(expression, message, file, line)  \
49(fprintf( stderr, "warning: " message "\n%s:%u: failed assertion `%s'\n", \
50 file, line, expression ), 0 )
51#define STICKYWARN(expression, message) \
52((void)((expression) ? 0 : __WARN(#expression, message, __FILE__, __LINE__)))
53#else /* __GNUCC__ */
54/* use preprocessor macro __PRETTY_FUNCTION__ for more informative output */
55#define __ASSERT(expression, message, file, line, function) \
56(fprintf( stderr, "error: " message "\n%s:%u: In function `%s':\nfailed assertion `%s'\n", \
57 file, line, function, expression ), abort(), 0 )
58#define __ASSERT1(expression, message, parameter1, file, line, function)  \
59(fprintf( stderr, "error: " message "\n%s:%u: In function `%s':\nfailed assertion `%s'\n", \
60 parameter1, file, line, function, expression ), abort(), 0 )
61
62#define STICKYASSERT(expression, message) \
63((void)((expression) ? 0 : __ASSERT(#expression, message, __FILE__, __LINE__, __PRETTY_FUNCTION__)))
64#define STICKYASSERT1(expression, message, parameter1) \
65((void)((expression) ? 0 : __ASSERT1(#expression, message, parameter1, __FILE__, __LINE__, __PRETTY_FUNCTION__)))
66
67#define __WARN(expression, message, file, line, function)  \
68(fprintf( stderr, "warning: " message "\n%s:%u: In function `%s':\nfailed assertion `%s'\n", \
69 file, line, function, expression ), 0 )
70#define STICKYWARN(expression, message) \
71((void)((expression) ? 0 : __WARN(#expression, message, __FILE__, __LINE__, __PRETTY_FUNCTION__)))
72#endif /* __GNUCC__ */
73/* }}} */
74
75/* {{{ macro definitions dependent on NOASSERT */
76#ifndef NOASSERT
77#ifndef __GNUC__
78#define ASSERT(expression, message) \
79((void)((expression) ? 0 : __ASSERT(#expression, message, __FILE__, __LINE__)))
80#define ASSERT1(expression, message, parameter1) \
81((void)((expression) ? 0 : __ASSERT1(#expression, message, parameter1, __FILE__, __LINE__)))
82
83#define WARN(expression, message) \
84((void)((expression) ? 0 : __WARN(#expression, message, __FILE__, __LINE__)))
85#else /* __GNUCC__ */
86/* use preprocessor macro __PRETTY_FUNCTION__ for more informative output */
87#define ASSERT(expression, message) \
88((void)((expression) ? 0 : __ASSERT(#expression, message, __FILE__, __LINE__, __PRETTY_FUNCTION__)))
89#define ASSERT1(expression, message, parameter1) \
90((void)((expression) ? 0 : __ASSERT1(#expression, message, parameter1, __FILE__, __LINE__, __PRETTY_FUNCTION__)))
91
92#define WARN(expression, message) \
93((void)((expression) ? 0 : __WARN(#expression, message, __FILE__, __LINE__, __PRETTY_FUNCTION__)))
94#endif /* __GNUCC__ */
95
96#define PVIRT_VOID(msg) \
97{ fprintf( stderr, "pure method( " msg " ) called\n" ); abort(); }
98#define PVIRT_INTCF(msg) \
99{ fprintf( stderr, "pure method( " msg " ) called\n" ); abort(); return 0; }
100#define PVIRT_BOOL(msg) \
101{ fprintf( stderr, "pure method( " msg " ) called\n" ); abort(); return false; }
102#define PVIRT_INT(msg) \
103{ fprintf( stderr, "pure method( " msg " ) called\n" ); abort(); return 0; }
104#define PVIRT_CHARCC(msg) \
105{ fprintf( stderr, "pure method( " msg " ) called\n" ); abort(); return 0; }
106#else /* NOASSERT */
107#define ASSERT(expression, message)
108#define ASSERT1(expression, message, parameter1)
109
110#define WARN(expression, message)
111
112#define PVIRT_VOID(msg) = 0
113#define PVIRT_INTCF(msg) = 0
114#define PVIRT_BOOL(msg) = 0
115#define PVIRT_INT(msg) = 0
116#define PVIRT_CHARCC(msg) = 0
117#endif /* NOASSERT */
118/* }}} */
Note: See TracBrowser for help on using the repository browser.