]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/debug.h
fix wxBitmapComboBox Gtk-CRITICAL assertion `GTK_IS_ENTRY (entry)' failed
[wxWidgets.git] / include / wx / debug.h
index 46c676359b3bd6aafff81fdf9fe733bf7d978660..f1a4d9b4e86975a6f72b0cda86d136d9463b19cf 100644 (file)
@@ -11,7 +11,7 @@
 #ifndef _WX_DEBUG_H_
 #define _WX_DEBUG_H_
 
-#if !defined(__WXPALMOS5__) && !defined(__WXWINCE__)
+#if !defined(__WXWINCE__)
     #include  <assert.h>
 #endif // systems without assert.h
 
@@ -148,7 +148,7 @@ inline void wxDisableAsserts() { wxSetAssertHandler(NULL); }
 /*
     A macro which disables asserts for applications compiled in release build.
 
-    By default, IMPLEMENT_APP (or rather IMPLEMENT_WXWIN_MAIN) disable the
+    By default, wxIMPLEMENT_APP (or rather wxIMPLEMENT_WXWIN_MAIN) disable the
     asserts in the applications compiled in the release build by calling this.
     It does nothing if NDEBUG is not defined.
  */
@@ -162,7 +162,7 @@ inline void wxDisableAsserts() { wxSetAssertHandler(NULL); }
 
 /*
     wxOnAssert() is used by the debugging macros defined below. Different
-    overloads are needed because these macros can be used with or without _T().
+    overloads are needed because these macros can be used with or without wxT().
 
     All of them are implemented in src/common/appcmn.cpp and unconditionally
     call wxTheAssertHandler so the caller must check that it is non-NULL
@@ -172,34 +172,34 @@ inline void wxDisableAsserts() { wxSetAssertHandler(NULL); }
 #if wxUSE_UNICODE
 
 // these overloads are the ones typically used by debugging macros: we have to
-// provide wxChar* msg version because it's common to use _T() in the macros
+// provide wxChar* msg version because it's common to use wxT() in the macros
 // and finally, we can't use const wx(char)* msg = NULL, because that would
 // be ambiguous
 //
 // also notice that these functions can't be inline as wxString is not defined
 // yet (and can't be as wxString code itself may use assertions)
-extern void WXDLLIMPEXP_BASE wxOnAssert(const char *file,
+extern WXDLLIMPEXP_BASE void wxOnAssert(const char *file,
                                         int line,
                                         const char *func,
                                         const char *cond);
 
-extern void WXDLLIMPEXP_BASE wxOnAssert(const char *file,
+extern WXDLLIMPEXP_BASE void wxOnAssert(const char *file,
                                         int line,
                                         const char *func,
                                         const char *cond,
                                         const char *msg);
 
-extern void WXDLLIMPEXP_BASE wxOnAssert(const char *file,
+extern WXDLLIMPEXP_BASE void wxOnAssert(const char *file,
                                         int line,
                                         const char *func,
                                         const char *cond,
-                                        const wxChar *msg);
+                                        const wxChar *msg) ;
 #endif /* wxUSE_UNICODE */
 
 // this version is for compatibility with wx 2.8 Unicode build only, we don't
 // use it ourselves any more except in ANSI-only build in which case it is all
 // we need
-extern void WXDLLIMPEXP_BASE wxOnAssert(const wxChar *file,
+extern WXDLLIMPEXP_BASE void wxOnAssert(const wxChar *file,
                                         int line,
                                         const char *func,
                                         const wxChar *cond,
@@ -208,24 +208,24 @@ extern void WXDLLIMPEXP_BASE wxOnAssert(const wxChar *file,
 // these overloads work when msg passed to debug macro is a string and 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& file,
+extern WXDLLIMPEXP_BASE void wxOnAssert(const wxString& file,
                                         int line,
                                         const wxString& func,
                                         const wxString& cond,
                                         const wxString& msg);
 
-extern void WXDLLIMPEXP_BASE wxOnAssert(const wxString& file,
+extern WXDLLIMPEXP_BASE void wxOnAssert(const wxString& file,
                                         int line,
                                         const wxString& func,
                                         const wxString& cond);
 
-extern void WXDLLIMPEXP_BASE wxOnAssert(const char *file,
+extern WXDLLIMPEXP_BASE void wxOnAssert(const char *file,
                                         int line,
                                         const char *func,
                                         const char *cond,
                                         const wxCStrData& msg);
 
-extern void WXDLLIMPEXP_BASE wxOnAssert(const char *file,
+extern WXDLLIMPEXP_BASE void wxOnAssert(const char *file,
                                         int line,
                                         const char *func,
                                         const char *cond,
@@ -299,6 +299,13 @@ extern void WXDLLIMPEXP_BASE wxOnAssert(const char *file,
     #define wxASSERT_LEVEL_2(cond)
 #endif
 
+// This is simply a wrapper for the standard abort() which is not available
+// under all platforms.
+//
+// It isn't really debug-related but there doesn't seem to be any better place
+// for it, so declare it here and define it in appbase.cpp, together with
+// wxTrap().
+extern void WXDLLIMPEXP_BASE wxAbort();
 
 /*
     wxCHECK macros always check their conditions, setting debug level to 0 only
@@ -312,7 +319,7 @@ extern void WXDLLIMPEXP_BASE wxOnAssert(const char *file,
         wxCHECK_RET( p != NULL, "pointer can't be NULL" )
 */
 
-// the generic macro: takes the condition to check, the statement to be execute
+// the generic macro: takes the condition to check, the statement to be executed
 // in case the condition is false and the message to pass to the assert handler
 #define wxCHECK2_MSG(cond, op, msg)                                       \
     if ( cond )                                                           \
@@ -380,6 +387,24 @@ extern void WXDLLIMPEXP_BASE wxOnAssert(const char *file,
           unsigned int msg: expr; \
           wxMAKE_UNIQUE_ASSERT_NAME() { wxUnusedVar(msg); } \
         }
+#elif defined( __VMS )
+namespace wxdebug{
+
+// HP aCC cannot deal with missing names for template value parameters
+template <bool x> struct STATIC_ASSERTION_FAILURE;
+
+template <> struct STATIC_ASSERTION_FAILURE<true> { enum { value = 1 }; };
+
+// HP aCC cannot deal with missing names for template value parameters
+template<int x> struct static_assert_test{};
+
+}
+    #define WX_JOIN( X, Y ) X##Y
+    #define WX_STATIC_ASSERT_BOOL_CAST(x) (bool)(x)
+    #define wxCOMPILE_TIME_ASSERT(expr, msg) \
+       typedef ::wxdebug::static_assert_test<\
+          sizeof(::wxdebug::STATIC_ASSERTION_FAILURE< WX_STATIC_ASSERT_BOOL_CAST( expr ) >)>\
+            WX_JOIN(wx_static_assert_typedef_, __LINE__)
 #else
     #define wxCOMPILE_TIME_ASSERT(expr, msg) \
         struct wxMAKE_UNIQUE_ASSERT_NAME { unsigned int msg: expr; }
@@ -412,10 +437,9 @@ extern void WXDLLIMPEXP_BASE wxOnAssert(const char *file,
 /*
     Return true if we're running under debugger.
 
-    Currently this only really works under Win32 and Mac in CodeWarrior builds,
-    it always returns false in other cases.
+    Currently only really works under Win32 and just returns false elsewhere.
  */
-#if defined(__WXMAC__) || defined(__WIN32__)
+#if defined(__WIN32__)
     extern bool WXDLLIMPEXP_BASE wxIsDebuggerRunning();
 #else // !Mac
     inline bool wxIsDebuggerRunning() { return false; }