X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e3f6cbd99cd7c5b86742d56114b21da5b34a5c74..4e57034053aa0c73313f806c7b544e43c794394d:/include/wx/debug.h diff --git a/include/wx/debug.h b/include/wx/debug.h index f7815a9844..936755e71b 100644 --- a/include/wx/debug.h +++ b/include/wx/debug.h @@ -92,7 +92,7 @@ /* This function is called whenever one of debugging macros fails (i.e. condition is false in an assertion). To customize its behaviour, override - wxApp::OnAssert(). + wxApp::OnAssertFailure(). Parameters: szFile and nLine - file name and line number of the ASSERT @@ -100,18 +100,72 @@ szCond - text form of the condition which failed szMsg - optional message explaining the reason */ + + /* this version is for compatibility with wx 2.8 Unicode build only: */ extern void WXDLLIMPEXP_BASE wxOnAssert(const wxChar *szFile, int nLine, const char *szFunc, const wxChar *szCond, const wxChar *szMsg = NULL); +#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, NULL) + #define wxASSERT(cond) wxASSERT_MSG(cond, (const char*)NULL) /* assert with additional message explaining its cause */ @@ -123,24 +177,24 @@ if ( cond ) \ {} \ else \ - wxOnAssert(__TFILE__, __LINE__, __WXFUNCTION__, _T(#cond), msg) + wxOnAssert(__FILE__, __LINE__, __WXFUNCTION__, #cond, msg) #else #define wxASSERT_MSG(cond, msg) \ if ( cond ) \ ; \ else \ - wxOnAssert(__TFILE__, __LINE__, __WXFUNCTION__, _T(#cond), msg) + wxOnAssert(__FILE__, __LINE__, __WXFUNCTION__, #cond, msg) #endif /* special form of assert: always triggers it (in debug mode) */ - #define wxFAIL wxFAIL_MSG(NULL) + #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(__TFILE__, __LINE__, __WXFUNCTION__, _T(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 */ @@ -180,13 +234,13 @@ */ /* check that expression is true, "return" if not (also FAILs in debug mode) */ -#define wxCHECK(cond, rc) wxCHECK_MSG(cond, rc, NULL) +#define wxCHECK(cond, rc) wxCHECK_MSG(cond, rc, (const char*)NULL) /* as wxCHECK but with a message explaining why we fail */ #define wxCHECK_MSG(cond, rc, msg) wxCHECK2_MSG(cond, return rc, msg) /* check that expression is true, perform op if not */ -#define wxCHECK2(cond, op) wxCHECK2_MSG(cond, op, NULL) +#define wxCHECK2(cond, op) wxCHECK2_MSG(cond, op, (const char*)NULL) /* as wxCHECK2 but with a message explaining why we fail */