X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e1204086baee7eb2a8ab8083992d5a789959c235..25466131acbbca2186d01fb852d61f50ba968fb4:/include/wx/debug.h diff --git a/include/wx/debug.h b/include/wx/debug.h index 54573e37a2..a8d452a38e 100644 --- a/include/wx/debug.h +++ b/include/wx/debug.h @@ -47,13 +47,23 @@ #endif /* !WXDEBUG */ #endif /* __WXDEBUG__ */ -/* TODO: add more compilers supporting __FUNCTION__ */ -#if !defined(__GNUC__) && \ - !(defined(_MSC_VER) && _MSC_VER >= 1300) && \ - !defined(__FUNCTION__) - /* no __FUNCTION__ support, still define it to avoid #ifdefs elsewhere */ - #define __FUNCTION__ (NULL) -#endif +#ifndef __WXFUNCTION__ + /* TODO: add more compilers supporting __FUNCTION__ */ + #if defined(__DMC__) + /* + __FUNCTION__ happens to be not defined within class members + http://www.digitalmars.com/drn-bin/wwwnews?c%2B%2B.beta/485 + */ + #define __WXFUNCTION__ (NULL) + #elif defined(__GNUC__) || \ + (defined(_MSC_VER) && _MSC_VER >= 1300) || \ + defined(__FUNCTION__) + #define __WXFUNCTION__ __FUNCTION__ + #else + /* still define __WXFUNCTION__ to avoid #ifdefs elsewhere */ + #define __WXFUNCTION__ (NULL) + #endif +#endif /* __WXFUNCTION__ already defined */ /* ---------------------------------------------------------------------------- */ /* Debugging macros */ @@ -103,12 +113,24 @@ /* generic assert macro */ #define wxASSERT(cond) wxASSERT_MSG(cond, NULL) - /* assert with additional message explaining it's cause */ - #define wxASSERT_MSG(cond, msg) \ - if ( cond ) \ - ; \ - else \ - wxOnAssert(__TFILE__, __LINE__, __FUNCTION__, _T(#cond), msg) + + /* 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(__TFILE__, __LINE__, __WXFUNCTION__, _T(#cond), msg) + #else + #define wxASSERT_MSG(cond, msg) \ + if ( cond ) \ + ; \ + else \ + wxOnAssert(__TFILE__, __LINE__, __WXFUNCTION__, _T(#cond), msg) + #endif /* special form of assert: always triggers it (in debug mode) */ #define wxFAIL wxFAIL_MSG(NULL) @@ -118,7 +140,7 @@ /* FAIL with some message and a condition */ #define wxFAIL_COND_MSG(cond, msg) \ - wxOnAssert(__TFILE__, __LINE__, __FUNCTION__, _T(cond), msg) + wxOnAssert(__TFILE__, __LINE__, __WXFUNCTION__, _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 */ @@ -167,15 +189,29 @@ #define wxCHECK2(cond, op) wxCHECK2_MSG(cond, op, NULL) /* as wxCHECK2 but with a message explaining why we fail */ -#define wxCHECK2_MSG(cond, op, msg) \ - if ( cond ) \ - ; \ - else \ - do \ + +/* see comment near the definition of wxASSERT_MSG for the # if/else reason */ +#if defined(__MWERKS__) + #define wxCHECK2_MSG(cond, op, msg) \ + if ( cond ) \ + {} \ + else \ + { \ + wxFAIL_COND_MSG(#cond, msg); \ + op; \ + } \ + struct wxDummyCheckStruct /* just to force a semicolon */ +#else + #define wxCHECK2_MSG(cond, op, msg) \ + if ( cond ) \ + ; \ + else \ { \ wxFAIL_COND_MSG(#cond, msg); \ op; \ - } while ( 0 ) + } \ + struct wxDummyCheckStruct /* just to force a semicolon */ +#endif /* special form of wxCHECK2: as wxCHECK, but for use in void functions */ /* */