]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/debug.h
do platform-specific checks after ensuring that the symbols we use are defined; extra...
[wxWidgets.git] / include / wx / debug.h
index fc12f49f2510a0dd4e4f555e5e9e4a7da8ca9c99..936755e71bd02fd2054b891455c80b189011e9a4 100644 (file)
@@ -19,7 +19,7 @@
 #endif
 #include  <limits.h>            /*  for CHAR_BIT used below */
 
-#include  "wx/wxchar.h"         /*  for __TFILE__ and wxChar */
+#include  "wx/chartype.h"     /*  for __TFILE__ and wxChar */
 
 /*  ---------------------------------------------------------------------------- */
 /*  Defines controlling the debugging macros */
@@ -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
        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 */
       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 */
 */
 
 /*  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 */