- // call this function to break into the debugger unconditionally (assuming
- // the program is running under debugger, of course)
- extern void WXDLLEXPORT_BASE wxTrap();
-
- // helper function used to implement wxASSERT and wxASSERT_MSG
- //
- // note using "int" and not "bool" for cond to avoid VC++ warnings about
- // implicit conversions when doing "wxAssert( pointer )" and also use of
- // "!!cond" below to ensure that everything is converted to int
- extern void WXDLLEXPORT_BASE wxAssert(int cond,
- const wxChar *szFile,
- int nLine,
- const wxChar *szCond,
- const wxChar *szMsg = NULL) ;
-
- // generic assert macro
- #define wxASSERT(cond) wxAssert(!!(cond), __TFILE__, __LINE__, _T(#cond))
-
- // assert with additional message explaining it's cause
- #define wxASSERT_MSG(cond, msg) \
- wxAssert(!!(cond), __TFILE__, __LINE__, _T(#cond), msg)
-
- // an assert helper used to avoid warning when testing constant expressions,
- // i.e. wxASSERT( sizeof(int) == 4 ) can generate a compiler warning about
- // expression being always true, but not using
- // wxASSERT( wxAssertIsEqual(sizeof(int), 4) )
- //
- // NB: this is made obsolete by wxCOMPILE_TIME_ASSERT() and shouldn't be
- // used any longer
- extern bool WXDLLEXPORT_BASE wxAssertIsEqual(int x, int y);
+#if wxUSE_UNICODE
+ /* char versions are used by debugging macros; we have to provide
+ wxChar* szMsg version because it's common to use _T() in the macros
+ and finally, we can't use const wx(char)* szMsg = NULL, because that
+ would be ambiguous: */
+ extern void WXDLLIMPEXP_BASE wxOnAssert(const char *szFile,
+ int nLine,
+ const char *szFunc,
+ const char *szCond);
+
+ extern void WXDLLIMPEXP_BASE wxOnAssert(const char *szFile,
+ int nLine,
+ const char *szFunc,
+ const char *szCond,
+ const char *szMsg);
+
+ extern void WXDLLIMPEXP_BASE wxOnAssert(const char *szFile,
+ int nLine,
+ const char *szFunc,
+ const char *szCond,
+ const wxChar *szMsg);
+#endif /* wxUSE_UNICODE */
+
+ class WXDLLIMPEXP_FWD_BASE wxString;
+ class WXDLLIMPEXP_FWD_BASE wxCStrData;
+
+ /* these two work when szMsg passed to debug macro is a string,
+ we also have to provide wxCStrData overload to resolve ambiguity
+ which would otherwise arise from wxASSERT( s.c_str() ): */
+ extern void WXDLLIMPEXP_BASE wxOnAssert(const wxString& szFile,
+ int nLine,
+ const wxString& szFunc,
+ const wxString& szCond,
+ const wxString& szMsg);
+
+ extern void WXDLLIMPEXP_BASE wxOnAssert(const wxString& szFile,
+ int nLine,
+ const wxString& szFunc,
+ const wxString& szCond);
+
+ extern void WXDLLIMPEXP_BASE wxOnAssert(const char *szFile,
+ int nLine,
+ const char *szFunc,
+ const char *szCond,
+ const wxCStrData& msg);
+
+ extern void WXDLLIMPEXP_BASE wxOnAssert(const char *szFile,
+ int nLine,
+ const char *szFunc,
+ const char *szCond,
+ const wxString& szMsg);
+
+ /* call this function to break into the debugger unconditionally (assuming */
+ /* the program is running under debugger, of course) */
+ extern void WXDLLIMPEXP_BASE wxTrap();
+
+ /* generic assert macro */
+ #define wxASSERT(cond) wxASSERT_MSG(cond, (const char*)NULL)
+
+
+ /* assert with additional message explaining its cause */
+
+ /* compilers can give a warning (such as "possible unwanted ;") when using */
+ /* the default definition of wxASSERT_MSG so we provide an alternative */
+ #if defined(__MWERKS__)
+ #define wxASSERT_MSG(cond, msg) \
+ if ( cond ) \
+ {} \
+ else \
+ wxOnAssert(__FILE__, __LINE__, __WXFUNCTION__, #cond, msg)
+ #else
+ #define wxASSERT_MSG(cond, msg) \
+ if ( cond ) \
+ ; \
+ else \
+ wxOnAssert(__FILE__, __LINE__, __WXFUNCTION__, #cond, msg)
+ #endif
+
+ /* special form of assert: always triggers it (in debug mode) */
+ #define wxFAIL wxFAIL_MSG((const char*)NULL)
+
+ /* FAIL with some message */
+ #define wxFAIL_MSG(msg) wxFAIL_COND_MSG("wxAssertFailure", msg)
+
+ /* FAIL with some message and a condition */
+ #define wxFAIL_COND_MSG(cond, msg) \
+ wxOnAssert(__FILE__, __LINE__, __WXFUNCTION__, cond, msg)
+
+ /* An assert helper used to avoid warning when testing constant expressions, */
+ /* i.e. wxASSERT( sizeof(int) == 4 ) can generate a compiler warning about */
+ /* expression being always true, but not using */
+ /* wxASSERT( wxAssertIsEqual(sizeof(int), 4) ) */
+ /* */
+ /* NB: this is made obsolete by wxCOMPILE_TIME_ASSERT() and should no */
+ /* longer be used. */
+ extern bool WXDLLIMPEXP_BASE wxAssertIsEqual(int x, int y);