/* wxCONCAT works like preprocessor ## operator but also works with macros */
#define wxCONCAT_HELPER(text, line) text ## line
-#define wxCONCAT(text, line) wxCONCAT_HELPER(text, line)
-#define wxCONCAT3(x1, x2, x3) wxCONCAT(wxCONCAT(x1, x2), x3)
-#define wxCONCAT4(x1, x2, x3, x4) wxCONCAT(wxCONCAT3(x1, x2, x3), x4)
-#define wxCONCAT5(x1, x2, x3, x4, x5) wxCONCAT(wxCONCAT4(x1, x2, x3, x4), x5)
+#define wxCONCAT(x1, x2) \
+ wxCONCAT_HELPER(x1, x2)
+#define wxCONCAT3(x1, x2, x3) \
+ wxCONCAT(wxCONCAT(x1, x2), x3)
+#define wxCONCAT4(x1, x2, x3, x4) \
+ wxCONCAT(wxCONCAT3(x1, x2, x3), x4)
+#define wxCONCAT5(x1, x2, x3, x4, x5) \
+ wxCONCAT(wxCONCAT4(x1, x2, x3, x4), x5)
+#define wxCONCAT6(x1, x2, x3, x4, x5, x6) \
+ wxCONCAT(wxCONCAT5(x1, x2, x3, x4, x5), x6)
+#define wxCONCAT7(x1, x2, x3, x4, x5, x6, x7) \
+ wxCONCAT(wxCONCAT6(x1, x2, x3, x4, x5, x6), x7)
+#define wxCONCAT8(x1, x2, x3, x4, x5, x6, x7, x8) \
+ wxCONCAT(wxCONCAT7(x1, x2, x3, x4, x5, x6, x7), x8)
+#define wxCONCAT9(x1, x2, x3, x4, x5, x6, x7, x8, x9) \
+ wxCONCAT(wxCONCAT8(x1, x2, x3, x4, x5, x6, x7, x8), x9)
/* wxSTRINGIZE works as the preprocessor # operator but also works with macros */
#define wxSTRINGIZE_HELPER(x) #x
/* a Unicode-friendly version of wxSTRINGIZE_T */
#define wxSTRINGIZE_T(x) wxAPPLY_T(wxSTRINGIZE(x))
+/*
+ Special workarounds for compilers with broken "##" operator. For all the
+ other ones we can just use it directly.
+ */
+#ifdef wxCOMPILER_BROKEN_CONCAT_OPER
+ #define wxPREPEND_L(x) L ## x
+ #define wxAPPEND_i64(x) x ## i64
+ #define wxAPPEND_ui64(x) x ## ui64
+#endif /* wxCOMPILER_BROKEN_CONCAT_OPER */
+
/*
Helper macros for wxMAKE_UNIQUE_NAME: normally this works by appending the
current line number to the given identifier to reduce the probability of the
*/
#define wxEMPTY_PARAMETER_VALUE /* Fake macro parameter value */
+/*
+ Define __WXFUNCTION__ which is like standard __FUNCTION__ but defined as
+ NULL for the compilers which don't support the latter.
+ */
+#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 */
+
#endif /* _WX_CPP_H_ */