Author: vitek Date: Mon Jun 16 17:03:39 2008 New Revision: 668350 URL: http://svn.apache.org/viewvc?rev=668350&view=rev Log: 2008-06-16 Travis Vitek <[EMAIL PROTECTED]>
STDCXX-947 * include/rw/_defs.h [_RWSTD_UWCHAR_INT_T,_RWSTD_SWCHAR_INT_T]: Revert changes from r667365. * include/rw/_meta_sign.h: Define make_signed and make_unsigned to properly handle char and wchar_t according to current standard. * tests/utilities/20.meta.trans.sign.cpp: Use size_t as appropriate. Update test to correctly reflect behaviors required by the standard. Modified: stdcxx/branches/4.3.x/include/rw/_defs.h stdcxx/branches/4.3.x/include/rw/_meta_sign.h stdcxx/branches/4.3.x/tests/utilities/20.meta.trans.sign.cpp Modified: stdcxx/branches/4.3.x/include/rw/_defs.h URL: http://svn.apache.org/viewvc/stdcxx/branches/4.3.x/include/rw/_defs.h?rev=668350&r1=668349&r2=668350&view=diff ============================================================================== --- stdcxx/branches/4.3.x/include/rw/_defs.h (original) +++ stdcxx/branches/4.3.x/include/rw/_defs.h Mon Jun 16 17:03:39 2008 @@ -1274,21 +1274,6 @@ # endif #endif // _RWSTD_SSIZE_T -// _RWSTD_SWCHAR_INT_T is "signed wchar_t" -#ifndef _RWSTD_SWCHAR_INT_T -# if _RWSTD_CHAR_SIZE == _RWSTD_WCHAR_SIZE -# define _RWSTD_SWCHAR_INT_T signed char -# elif _RWSTD_SHRT_SIZE == _RWSTD_WCHAR_SIZE -# define _RWSTD_SWCHAR_INT_T signed short -# elif _RWSTD_INT_SIZE == _RWSTD_WCHAR_SIZE -# define _RWSTD_SWCHAR_INT_T signed int -# elif _RWSTD_LONG_SIZE == _RWSTD_WCHAR_SIZE -# define _RWSTD_SWCHAR_INT_T signed long -# else -# define _RWSTD_SWCHAR_INT_T signed long long -# endif -#endif // _RWSTD_SWCHAR_INT_T - // _RWSTD_UWCHAR_INT_T is "unsigned wchar_t" #ifndef _RWSTD_UWCHAR_INT_T # if _RWSTD_CHAR_SIZE == _RWSTD_WCHAR_SIZE @@ -1297,10 +1282,8 @@ # define _RWSTD_UWCHAR_INT_T unsigned short # elif _RWSTD_INT_SIZE == _RWSTD_WCHAR_SIZE # define _RWSTD_UWCHAR_INT_T unsigned int -# elif _RWSTD_LONG_SIZE == _RWSTD_WCHAR_SIZE -# define _RWSTD_UWCHAR_INT_T unsigned long # else -# define _RWSTD_UWCHAR_INT_T unsigned long long +# define _RWSTD_UWCHAR_INT_T _RWSTD_SIZE_T # endif #endif // _RWSTD_UWCHAR_INT_T Modified: stdcxx/branches/4.3.x/include/rw/_meta_sign.h URL: http://svn.apache.org/viewvc/stdcxx/branches/4.3.x/include/rw/_meta_sign.h?rev=668350&r1=668349&r2=668350&view=diff ============================================================================== --- stdcxx/branches/4.3.x/include/rw/_meta_sign.h (original) +++ stdcxx/branches/4.3.x/include/rw/_meta_sign.h Mon Jun 16 17:03:39 2008 @@ -52,17 +52,55 @@ template <> struct __rw_sign_helper<char> { - typedef signed char _C_Sint; +#if (_RWSTD_CHAR_MIN < 0) + typedef char _C_Sint; typedef unsigned char _C_Uint; +#else + typedef signed char _C_Sint; + typedef char _C_Uint; +#endif }; +#ifndef _RWSTD_NO_NATIVE_WCHAR_T + template <> struct __rw_sign_helper<wchar_t> { - typedef _RWSTD_SWCHAR_INT_T _C_Sint; - typedef _RWSTD_UWCHAR_INT_T _C_Uint; +#if (_RWSTD_WCHAR_MIN < 0) + typedef wchar_t _C_Sint; + +# if (_RWSTD_WCHAR_SIZE == _RWSTD_CHAR_SIZE) + typedef unsigned char _C_Uint; +# elif (_RWSTD_WCHAR_SIZE == _RWSTD_SHORT_SIZE) + typedef unsigned short _C_Uint; +# elif (_RWSTD_WCHAR_SIZE == _RWSTD_INT_SIZE) + typedef unsigned int _C_Uint; +# elif (_RWSTD_WCHAR_SIZE == _RWSTD_LONG_SIZE) + typedef unsigned long _C_Uint; +# elif (_RWSTD_WCHAR_SIZE == _RWSTD_LLONG_SIZE) + typedef unsigned long long _C_Uint; +# endif + +# else // 0 <= _RWSTD_WCHAR_MIN + +# if (_RWSTD_WCHAR_SIZE == _RWSTD_CHAR_SIZE) + typedef signed char _C_Sint; +# elif (_RWSTD_WCHAR_SIZE == _RWSTD_SHORT_SIZE) + typedef signed short _C_Sint; +# elif (_RWSTD_WCHAR_SIZE == _RWSTD_INT_SIZE) + typedef signed int _C_Sint; +# elif (_RWSTD_WCHAR_SIZE == _RWSTD_LONG_SIZE) + typedef signed long _C_Sint; +# elif (_RWSTD_WCHAR_SIZE == _RWSTD_LLONG_SIZE) + typedef signed long long _C_Sint; +# endif + + typedef wchar_t _C_Uint; +# endif // 0 <= _RWSTD_WCHAR_MIN }; +#endif // _RWSTD_NO_NATIVE_WCHAR_T + template <> struct __rw_sign_helper<signed char> { @@ -186,7 +224,7 @@ # if (_RWSTD_LONG_SIZE != _RWSTD_LLONG_SIZE) template <> -struct __rw_enum_helper<sizeof (long long)> //_RWSTD_LLONG_SIZE> +struct __rw_enum_helper<_RWSTD_LLONG_SIZE> { typedef signed long long _C_Sint; typedef unsigned long long _C_Uint; Modified: stdcxx/branches/4.3.x/tests/utilities/20.meta.trans.sign.cpp URL: http://svn.apache.org/viewvc/stdcxx/branches/4.3.x/tests/utilities/20.meta.trans.sign.cpp?rev=668350&r1=668349&r2=668350&view=diff ============================================================================== --- stdcxx/branches/4.3.x/tests/utilities/20.meta.trans.sign.cpp (original) +++ stdcxx/branches/4.3.x/tests/utilities/20.meta.trans.sign.cpp Mon Jun 16 17:03:39 2008 @@ -27,6 +27,8 @@ * **************************************************************************/ +#include <stddef.h> + #include <rw_driver.h> // compile out all test code if extensions disabled @@ -143,7 +145,7 @@ void test_sign_and_cv (int line, const char* trait_name, const char* type_name, - _RWSTD_SIZE_T got_size, _RWSTD_SIZE_T exp_size, + size_t got_size, size_t exp_size, bool got_sign, bool exp_sign, bool got_c, bool exp_c, bool got_v, bool exp_v) @@ -194,8 +196,14 @@ static void test_make_signed () { +#if (_RWSTD_CHAR_MIN < 0) + TEST (std::make_signed, char, char); +#else + TEST (std::make_signed, char, signed char); +#endif + TEST (std::make_signed, signed char, signed char); - TEST (std::make_signed, unsigned char, signed char); + TEST (std::make_signed, unsigned char, signed char); // unsure TEST (std::make_signed, signed short, signed short); TEST (std::make_signed, unsigned short, signed short); @@ -227,7 +235,13 @@ static void test_make_unsigned () { - TEST (std::make_unsigned, signed char, unsigned char); +#if (_RWSTD_CHAR_MIN < 0) + TEST (std::make_unsigned, char, unsigned char); +#else + TEST (std::make_unsigned, char, char); +#endif + + TEST (std::make_unsigned, signed char, unsigned char); // unsure TEST (std::make_unsigned, unsigned char, unsigned char); TEST (std::make_unsigned, signed short, unsigned short);