Conditionally wrap the changes from r134781.

llvm-svn: 134783
This commit is contained in:
Alexis Hunt 2011-07-09 01:09:31 +00:00
parent 780db902f7
commit f023519770
4 changed files with 44 additions and 0 deletions

View File

@ -285,4 +285,8 @@ template <unsigned> struct __static_assert_check {};
#define __has_feature(__x) 0
#endif
#ifdef __APPLE__
#define _LIBCPP_STABLE_APPLE_ABI
#endif
#endif // _LIBCPP_CONFIG

View File

@ -541,8 +541,10 @@ public:
#endif
_LIBCPP_ALWAYS_INLINE const mask* table() const _NOEXCEPT {return __tab_;}
static const mask* classic_table() _NOEXCEPT;
#ifndef _LIBCPP_STABLE_APPLE_ABI
static const int* __classic_upper_table() _NOEXCEPT;
static const int* __classic_lower_table() _NOEXCEPT;
#endif
protected:
~ctype();

View File

@ -192,8 +192,10 @@ template <class charT> class messages_byname;
_LIBCPP_BEGIN_NAMESPACE_STD
#ifndef _LIBCPP_STABLE_APPLE_ABI
// Get the C locale object
locale_t __cloc();
#endif
// OSX has nice foo_l() functions that let you turn off use of the global
// locale. Linux, not so much. The following functions avoid the locale when

View File

@ -116,6 +116,7 @@ namespace with_locale { namespace {
_LIBCPP_BEGIN_NAMESPACE_STD
#ifndef _LIBCPP_APPLE_STABLE_ABI
locale_t __cloc() {
// In theory this could create a race condition. In practice
// the race condition is non-fatal since it will just create
@ -127,6 +128,7 @@ locale_t __cloc() {
return result;
#endif
}
#endif // _LIBCPP_APPLE_STABLE_ABI
namespace {
@ -812,30 +814,46 @@ ctype<wchar_t>::do_scan_not(mask m, const char_type* low, const char_type* high)
wchar_t
ctype<wchar_t>::do_toupper(char_type c) const
{
#ifndef _LIBCPP_STABLE_APPLE_ABI
return isascii(c) ? ctype<char>::__classic_upper_table()[c] : c;
#else
return isascii(c) ? _DefaultRuneLocale.__mapupper[c] : c;
#endif
}
const wchar_t*
ctype<wchar_t>::do_toupper(char_type* low, const char_type* high) const
{
for (; low != high; ++low)
#ifndef _LIBCPP_STABLE_APPLE_ABI
*low = isascii(*low) ? ctype<char>::__classic_upper_table()[*low]
: *low;
#else
*low = isascii(*low) ? _DefaultRuneLocale.__mapupper[*low] : *low;
#endif
return low;
}
wchar_t
ctype<wchar_t>::do_tolower(char_type c) const
{
#ifndef _LIBCPP_STABLE_APPLE_ABI
return isascii(c) ? ctype<char>::__classic_lower_table()[c] : c;
#else
return isascii(c) ? _DefaultRuneLocale.__maplower[c] : c;
#endif
}
const wchar_t*
ctype<wchar_t>::do_tolower(char_type* low, const char_type* high) const
{
for (; low != high; ++low)
#ifndef _LIBCPP_STABLE_APPLE_ABI
*low = isascii(*low) ? ctype<char>::__classic_lower_table()[*low]
: *low;
#else
*low = isascii(*low) ? _DefaultRuneLocale.__maplower[*low] : *low;
#endif
return low;
}
@ -894,28 +912,44 @@ ctype<char>::~ctype()
char
ctype<char>::do_toupper(char_type c) const
{
#ifndef _LIBCPP_STABLE_APPLE_ABI
return isascii(c) ? __classic_upper_table()[c] : c;
#else
return isascii(c) ? _DefaultRuneLocale.__mapupper[c] : c;
#endif
}
const char*
ctype<char>::do_toupper(char_type* low, const char_type* high) const
{
for (; low != high; ++low)
#ifndef _LIBCPP_STABLE_APPLE_ABI
*low = isascii(*low) ? __classic_upper_table()[*low] : *low;
#else
*low = isascii(*low) ? _DefaultRuneLocale.__mapupper[c] : c;
#endif
return low;
}
char
ctype<char>::do_tolower(char_type c) const
{
#ifndef _LIBCPP_STABLE_APPLE_ABI
return isascii(c) ? __classic_lower_table()[c] : c;
#else
return isascii(c) ? _DefaultRuneLocale.__maplower[c] : c;
#endif
}
const char*
ctype<char>::do_tolower(char_type* low, const char_type* high) const
{
for (; low != high; ++low)
#ifndef _LIBCPP_STABLE_APPLE_ABI
*low = isascii(*low) ? __classic_lower_table()[*low] : *low;
#else
*low = isascii(*low) ? _DefaultRuneLocale.__maplower[c] : c;
#endif
return low;
}
@ -965,6 +999,7 @@ ctype<char>::classic_table() _NOEXCEPT
#endif
}
#ifndef _LIBCPP_APPLE_STABLE_ABI
const int*
ctype<char>::__classic_lower_table() _NOEXCEPT
{
@ -988,6 +1023,7 @@ ctype<char>::__classic_upper_table() _NOEXCEPT
return NULL;
#endif
}
#endif // _LIBCPP_APPLE_STABLE_ABI
// template <> class ctype_byname<char>