From cdd8d745c4cf757286f6457dfc7217c0daf06517 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sat, 30 Sep 2006 14:55:06 +0000 Subject: [PATCH] move wxSTRINGIZE and other preprocessor helpers to wx/cpp.h to fix version.rc compilation git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41531 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- build/bakefiles/files.bkl | 1 + include/wx/cpp.h | 48 ++++++++++++++++++++++++++++++++++++ include/wx/defs.h | 51 ++++++++------------------------------- include/wx/version.h | 22 ++++++++--------- 4 files changed, 70 insertions(+), 52 deletions(-) create mode 100644 include/wx/cpp.h diff --git a/build/bakefiles/files.bkl b/build/bakefiles/files.bkl index d26559bd96..090d0628b9 100644 --- a/build/bakefiles/files.bkl +++ b/build/bakefiles/files.bkl @@ -370,6 +370,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! wx/config.h wx/convauto.h wx/containr.h + wx/cpp.h wx/datetime.h wx/datstrm.h wx/dde.h diff --git a/include/wx/cpp.h b/include/wx/cpp.h new file mode 100644 index 0000000000..37c58706f8 --- /dev/null +++ b/include/wx/cpp.h @@ -0,0 +1,48 @@ +/* + * Name: wx/cpp.h + * Purpose: Various preprocessor helpers + * Author: Vadim Zeitlin + * Created: 2006-09-30 + * RCS-ID: $Id$ + * Copyright: (c) 2006 Vadim Zeitlin + * Licence: wxWindows licence + */ + +/* THIS IS A C FILE, DON'T USE C++ FEATURES (IN PARTICULAR COMMENTS) IN IT */ + +#ifndef _WX_CPP_H_ +#define _WX_CPP_H_ + +/* 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) + +/* wxSTRINGIZE works as the preprocessor # operator but also works with macros */ +#define wxSTRINGIZE_HELPER(x) #x +#define wxSTRINGIZE(x) wxSTRINGIZE_HELPER(x) + +/* + 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 + conflict (it may still happen if this is used in the headers, hence you + should avoid doing it or provide unique prefixes then) but we have to do it + differently for VC++ + */ +#if defined(__VISUALC__) && (__VISUALC__ >= 1300) + /* + __LINE__ handling is completely broken in VC++ when using "Edit and + Continue" (/ZI option) and results in preprocessor errors if we use it + inside the macros. Luckily VC7 has another standard macro which can be + used like this and is even better than __LINE__ because it is globally + unique. + */ +# define wxCONCAT_LINE(text) wxCONCAT(text, __COUNTER__) +#else /* normal compilers */ +# define wxCONCAT_LINE(text) wxCONCAT(text, __LINE__) +#endif + +/* Create a "unique" name with the given prefix */ +#define wxMAKE_UNIQUE_NAME(text) wxCONCAT_LINE(text) + +#endif // _WX_CPP_H_ + diff --git a/include/wx/defs.h b/include/wx/defs.h index 3ee686863d..1eb944cab7 100644 --- a/include/wx/defs.h +++ b/include/wx/defs.h @@ -1,13 +1,13 @@ -/** -* Name: wx/defs.h -* Purpose: Declarations/definitions common to all wx source files -* Author: Julian Smart and others -* Modified by: Ryan Norton (Converted to C) -* Created: 01/02/97 -* RCS-ID: $Id$ -* Copyright: (c) Julian Smart -* Licence: wxWindows licence -*/ +/* + * Name: wx/defs.h + * Purpose: Declarations/definitions common to all wx source files + * Author: Julian Smart and others + * Modified by: Ryan Norton (Converted to C) + * Created: 01/02/97 + * RCS-ID: $Id$ + * Copyright: (c) Julian Smart + * Licence: wxWindows licence + */ /* THIS IS A C FILE, DON'T USE C++ FEATURES (IN PARTICULAR COMMENTS) IN IT */ @@ -127,19 +127,6 @@ # define wxSUPPRESS_GCC_PRIVATE_DTOR_WARNING(name) #endif -/* ---------------------------------------------------------------------------- */ -/* string manipulation helpers */ -/* ---------------------------------------------------------------------------- */ - -/* helper macros to concatenate two tokens together */ -#define wxCONCAT_HELPER(text, line) text ## line -#define wxCONCAT(text, line) wxCONCAT_HELPER(text, line) - -/* helper macros to convert a token into string literal */ -#define wxSTRINGIZE_HELPER(x) #x -#define wxSTRINGIZE(x) wxSTRINGIZE_HELPER(x) - - /* ---------------------------------------------------------------------------- */ /* wxWidgets version and compatibility defines */ /* ---------------------------------------------------------------------------- */ @@ -559,24 +546,6 @@ typedef int wxWindowID; /* size of statically declared array */ #define WXSIZEOF(array) (sizeof(array)/sizeof(array[0])) -/* helper macros to be able to define unique/anonymous objects: this works by */ -/* appending the current line number to the given identifier to reduce the */ -/* probability of the conflict (it may still happen if this is used in the */ -/* headers, hence you should avoid doing it or provide unique prefixes then) */ -#if defined(__VISUALC__) && (__VISUALC__ >= 1300) - /* - __LINE__ handling is completely broken in VC++ when using "Edit and - Continue" (/ZI option) and results in preprocessor errors if we use it - inside the macros. Luckily VC7 has another standard macro which can be - used like this and is even better than __LINE__ because it is globally - unique. - */ -# define wxCONCAT_LINE(text) wxCONCAT(text, __COUNTER__) -#else /* normal compilers */ -# define wxCONCAT_LINE(text) wxCONCAT(text, __LINE__) -#endif -#define wxMAKE_UNIQUE_NAME(text) wxCONCAT_LINE(text) - /* symbolic constant used by all Find()-like functions returning positive */ /* integer on success as failure indicator */ #define wxNOT_FOUND (-1) diff --git a/include/wx/version.h b/include/wx/version.h index 62887e2f33..b706b90ea7 100644 --- a/include/wx/version.h +++ b/include/wx/version.h @@ -1,20 +1,20 @@ -/** -* Name: wx/version.h -* Purpose: wxWidgets version numbers -* Author: Julian Smart -* Modified by: Ryan Norton (Converted to C) -* Created: 29/01/98 -* RCS-ID: $Id$ -* Copyright: (c) 1998 Julian Smart -* Licence: wxWindows licence -*/ +/* + * Name: wx/version.h + * Purpose: wxWidgets version numbers + * Author: Julian Smart + * Modified by: Ryan Norton (Converted to C) + * Created: 29/01/98 + * RCS-ID: $Id$ + * Copyright: (c) 1998 Julian Smart + * Licence: wxWindows licence + */ /* THIS IS A C FILE, DON'T USE C++ FEATURES (IN PARTICULAR COMMENTS) IN IT */ #ifndef _WX_VERSION_H_ #define _WX_VERSION_H_ -#include "wx/defs.h" /* for wxSTRINGIZE */ +#include "wx/cpp.h" /* for wxSTRINGIZE */ /* the constants below must be changed with each new version */ /* ---------------------------------------------------------------------------- */ -- 2.47.2