Skip to content

Commit 690ada2

Browse files
committed
Trigger debug break on assert
1 parent b9685f0 commit 690ada2

File tree

1 file changed

+33
-14
lines changed

1 file changed

+33
-14
lines changed

src/CppParser/Parser.cpp

+33-14
Original file line numberDiff line numberDiff line change
@@ -71,13 +71,13 @@
7171
#define _assertm(condition, message, call) \
7272
do{ \
7373
if (!(condition)) { \
74-
std::cerr << "Assert at " \
74+
std::cerr << "Assert at `" \
7575
<< __FILE__ \
7676
<< ":" \
7777
<< __LINE__ \
78-
<< " in " \
78+
<< "` in `" \
7979
<< __FUNCTION__ \
80-
<< "failed. " \
80+
<< "` failed. " \
8181
<< message; \
8282
call; \
8383
} \
@@ -89,38 +89,57 @@
8989
if (!(condition)) { \
9090
const clang::SourceManager& _sm = sm; \
9191
clang::SourceLocation _loc = loc; \
92-
std::cerr << "Assert at " \
92+
std::cerr << "Assert at `" \
9393
<< __FILE__ \
9494
<< ":" \
9595
<< __LINE__ \
96-
<< " in " \
96+
<< "` in `" \
9797
<< __FUNCTION__ \
98-
<< "failed. " \
98+
<< "` failed. " \
9999
<< message \
100-
<< " Filename " \
100+
<< " Filename `" \
101101
<< _sm.getFilename(_loc).str() \
102102
<< ":" \
103103
<< _sm.getSpellingLineNumber(_loc) \
104-
<< "\n"; \
104+
<< "`\n"; \
105105
call; \
106106
} \
107107
}while(0)
108108

109109
// Macros which output messages to console if parsing encounters oddity.
110-
// If _DEBUG is defined but DEBUG_NO_ABORT is not macros abort.
110+
// In debug builds, macros abort unless DEBUG_NO_ABORT is defined.
111111
//
112112
// Macro assertm outputs a message if condition is false.
113113
// Macro assertml outputs a message and parsing file and line on given source manager and source line.
114114
//
115115
// assertml adds newline ending.
116-
#if defined(_DEBUG) && !defined(DEBUG_NO_ABORT)
117-
#define assertm(condition, message) _assertm(condition, message, abort())
118-
#define assertml(condition, message, sm, source) _assertml(condition, message, sm, source, abort())
116+
#ifdef NDEBUG
117+
#define debug_break() ((void)0)
118+
#define debug_fail() ((void)0)
119119
#else
120-
#define assertm(condition, message) _assertm(condition, message, )
121-
#define assertml(condition, message, sm, source) _assertml(condition, message, sm, source, )
120+
121+
#if __GNUC__
122+
#define debug_break() \
123+
__builtin_trap()
124+
#elif _MSC_VER
125+
#define debug_break() \
126+
__debugbreak()
127+
#else
128+
#define debug_break(c) \
129+
*reinterpret_cast<volatile int*>(0) = 47283;
130+
#endif
131+
132+
#ifdef DEBUG_NO_ABORT
133+
#define debug_fail() debug_break()
134+
#else
135+
#define debug_fail() debug_break(); abort()
136+
#endif
137+
122138
#endif
123139

140+
#define assertm(condition, message) _assertm(condition, message, debug_fail())
141+
#define assertml(condition, message, sm, source) _assertml(condition, message, sm, source, debug_fail())
142+
124143
using namespace CppSharp::CppParser;
125144

126145
// We use this as a placeholder for pointer values that should be ignored.

0 commit comments

Comments
 (0)