diff options
author | Howard Hinnant <hhinnant@apple.com> | 2011-09-28 23:39:33 +0000 |
---|---|---|
committer | Howard Hinnant <hhinnant@apple.com> | 2011-09-28 23:39:33 +0000 |
commit | 9978e3709f9a9d16e77480fd60fce29beda728ff (patch) | |
tree | 0399e4f47083c97f729e1cef450e854ad8030495 /libcxx/include | |
parent | 8156376aa9d750f3db534b82ab15a4b3f02ef16c (diff) | |
download | bcm5719-llvm-9978e3709f9a9d16e77480fd60fce29beda728ff.tar.gz bcm5719-llvm-9978e3709f9a9d16e77480fd60fce29beda728ff.zip |
Attempted locale refactoring. _LIBCPP_LOCALE__L_EXTENSIONS now should be defined if one has all of the xxx_l() functions. I've defined this for apple, freebsd and win32. _LIBCPP_HAS_DEFAULTRUNELOCALE should be defined if there is a _DefaultRuneLocale. I've defined this for apple and freebsd. The block of code we're trying to migrate away from is now under #ifdef __linux__. I've tested only on OS X. I hope I haven't broken things too badly elsewhere. Please let me know.
llvm-svn: 140734
Diffstat (limited to 'libcxx/include')
-rw-r--r-- | libcxx/include/__config | 4 | ||||
-rw-r--r-- | libcxx/include/__locale | 2 | ||||
-rw-r--r-- | libcxx/include/locale | 46 |
3 files changed, 25 insertions, 27 deletions
diff --git a/libcxx/include/__config b/libcxx/include/__config index 315cec9dff8..a6f81dbc243 100644 --- a/libcxx/include/__config +++ b/libcxx/include/__config @@ -309,8 +309,8 @@ template <unsigned> struct __static_assert_check {}; #define _LIBCPP_LOCALE__L_EXTENSIONS 1 #endif -#if __APPLE__ || _WIN32 -#define _LIBCPP_STABLE_APPLE_ABI +#if __APPLE__ || __FreeBSD__ +#define _LIBCPP_HAS_DEFAULTRUNELOCALE #endif #if __APPLE__ || __FreeBSD__ diff --git a/libcxx/include/__locale b/libcxx/include/__locale index 42c9c5ae7f1..fb0eb8fdeb1 100644 --- a/libcxx/include/__locale +++ b/libcxx/include/__locale @@ -557,7 +557,7 @@ public: #endif _LIBCPP_ALWAYS_INLINE const mask* table() const _NOEXCEPT {return __tab_;} static const mask* classic_table() _NOEXCEPT; -#ifndef _LIBCPP_STABLE_APPLE_ABI +#ifndef _LIBCPP_HAS_DEFAULTRUNELOCALE static const int* __classic_upper_table() _NOEXCEPT; static const int* __classic_lower_table() _NOEXCEPT; #endif diff --git a/libcxx/include/locale b/libcxx/include/locale index c0724a50333..c0b5f9e7db5 100644 --- a/libcxx/include/locale +++ b/libcxx/include/locale @@ -197,15 +197,13 @@ template <class charT> class messages_byname; _LIBCPP_BEGIN_NAMESPACE_STD -#ifndef _LIBCPP_STABLE_APPLE_ABI -// Get the C locale object -locale_t __cloc(); -#endif - -#if __APPLE__ +#if __APPLE__ || __FreeBSD__ # define _LIBCPP_GET_C_LOCALE 0 #else # define _LIBCPP_GET_C_LOCALE __cloc() + // Get the C locale object + locale_t __cloc(); +#define __cloc_defined #endif typedef _VSTD::remove_pointer<locale_t>::type __locale_struct; @@ -215,7 +213,7 @@ typedef _VSTD::unique_ptr<__locale_struct, decltype(&uselocale)> __locale_raii; // 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 // that's possible and otherwise do the wrong thing. FIXME. -#ifndef _LIBCPP_STABLE_APPLE_ABI +#ifdef __linux__ #ifdef _LIBCPP_LOCALE__L_EXTENSIONS decltype(MB_CUR_MAX_L(_VSTD::declval<locale_t>())) @@ -236,7 +234,7 @@ decltype(MB_CUR_MAX) __mb_cur_max_l(locale_t __l) _LIBCPP_ALWAYS_INLINE inline wint_t __btowc_l(int __c, locale_t __l) { -#ifdef _LIBCPP_STABLE_APPLE_ABI +#ifdef _LIBCPP_LOCALE__L_EXTENSIONS return btowc_l(__c, __l); #else __locale_raii __current(uselocale(__l), uselocale); @@ -403,7 +401,7 @@ int __sscanf_l(const char *__s, locale_t __l, const char *__format, ...) { return __res; } -#endif // _LIBCPP_STABLE_APPLE_ABI +#endif // __linux__ // __scan_keyword // Scans [__b, __e) until a match is found in the basic_strings range @@ -1290,7 +1288,7 @@ num_get<_CharT, _InputIterator>::do_get(iter_type __b, iter_type __e, break; // Stage 3 __a[sizeof(__a)-1] = 0; -#ifdef _LIBCPP_STABLE_APPLE_ABI +#ifdef _LIBCPP_LOCALE__L_EXTENSIONS if (sscanf_l(__a, _LIBCPP_GET_C_LOCALE, "%p", &__v) != 1) #else if (__sscanf_l(__a, __cloc(), "%p", &__v) != 1) @@ -1603,7 +1601,7 @@ num_put<_CharT, _OutputIterator>::do_put(iter_type __s, ios_base& __iob, + ((numeric_limits<long>::digits % 3) != 0) + 1; char __nar[__nbuf]; -#ifdef _LIBCPP_STABLE_APPLE_ABI +#ifdef _LIBCPP_LOCALE__L_EXTENSIONS int __nc = sprintf_l(__nar, _LIBCPP_GET_C_LOCALE, __fmt, __v); #else int __nc = __sprintf_l(__nar, __cloc(), __fmt, __v); @@ -1633,7 +1631,7 @@ num_put<_CharT, _OutputIterator>::do_put(iter_type __s, ios_base& __iob, + ((numeric_limits<long long>::digits % 3) != 0) + 1; char __nar[__nbuf]; -#ifdef _LIBCPP_STABLE_APPLE_ABI +#ifdef _LIBCPP_LOCALE__L_EXTENSIONS int __nc = sprintf_l(__nar, _LIBCPP_GET_C_LOCALE, __fmt, __v); #else int __nc = __sprintf_l(__nar, __cloc(), __fmt, __v); @@ -1663,7 +1661,7 @@ num_put<_CharT, _OutputIterator>::do_put(iter_type __s, ios_base& __iob, + ((numeric_limits<unsigned long>::digits % 3) != 0) + 1; char __nar[__nbuf]; -#ifdef _LIBCPP_STABLE_APPLE_ABI +#ifdef _LIBCPP_LOCALE__L_EXTENSIONS int __nc = sprintf_l(__nar, _LIBCPP_GET_C_LOCALE, __fmt, __v); #else int __nc = __sprintf_l(__nar, __cloc(), __fmt, __v); @@ -1693,7 +1691,7 @@ num_put<_CharT, _OutputIterator>::do_put(iter_type __s, ios_base& __iob, + ((numeric_limits<unsigned long long>::digits % 3) != 0) + 1; char __nar[__nbuf]; -#ifdef _LIBCPP_STABLE_APPLE_ABI +#ifdef _LIBCPP_LOCALE__L_EXTENSIONS int __nc = sprintf_l(__nar, _LIBCPP_GET_C_LOCALE, __fmt, __v); #else int __nc = __sprintf_l(__nar, __cloc(), __fmt, __v); @@ -1724,7 +1722,7 @@ num_put<_CharT, _OutputIterator>::do_put(iter_type __s, ios_base& __iob, char* __nb = __nar; int __nc; if (__specify_precision) -#ifdef _LIBCPP_STABLE_APPLE_ABI +#ifdef _LIBCPP_LOCALE__L_EXTENSIONS __nc = snprintf_l(__nb, __nbuf, _LIBCPP_GET_C_LOCALE, __fmt, (int)__iob.precision(), __v); #else @@ -1732,7 +1730,7 @@ num_put<_CharT, _OutputIterator>::do_put(iter_type __s, ios_base& __iob, (int)__iob.precision(), __v); #endif else -#ifdef _LIBCPP_STABLE_APPLE_ABI +#ifdef _LIBCPP_LOCALE__L_EXTENSIONS __nc = snprintf_l(__nb, __nbuf, _LIBCPP_GET_C_LOCALE, __fmt, __v); #else __nc = __snprintf_l(__nb, __nbuf, __cloc(), __fmt, __v); @@ -1741,14 +1739,14 @@ num_put<_CharT, _OutputIterator>::do_put(iter_type __s, ios_base& __iob, if (__nc > static_cast<int>(__nbuf-1)) { if (__specify_precision) -#ifdef _LIBCPP_STABLE_APPLE_ABI +#ifdef _LIBCPP_LOCALE__L_EXTENSIONS __nc = asprintf_l(&__nb, _LIBCPP_GET_C_LOCALE, __fmt, (int)__iob.precision(), __v); #else __nc = __asprintf_l(&__nb, __cloc(), __fmt, (int)__iob.precision(), __v); #endif else -#ifdef _LIBCPP_STABLE_APPLE_ABI +#ifdef _LIBCPP_LOCALE__L_EXTENSIONS __nc = asprintf_l(&__nb, _LIBCPP_GET_C_LOCALE, __fmt, __v); #else __nc = __asprintf_l(&__nb, __cloc(), __fmt, (int)__iob.precision(), __v); @@ -1793,7 +1791,7 @@ num_put<_CharT, _OutputIterator>::do_put(iter_type __s, ios_base& __iob, char* __nb = __nar; int __nc; if (__specify_precision) -#ifdef _LIBCPP_STABLE_APPLE_ABI +#ifdef _LIBCPP_LOCALE__L_EXTENSIONS __nc = snprintf_l(__nb, __nbuf, _LIBCPP_GET_C_LOCALE, __fmt, (int)__iob.precision(), __v); #else @@ -1801,7 +1799,7 @@ num_put<_CharT, _OutputIterator>::do_put(iter_type __s, ios_base& __iob, (int)__iob.precision(), __v); #endif else -#ifdef _LIBCPP_STABLE_APPLE_ABI +#ifdef _LIBCPP_LOCALE__L_EXTENSIONS __nc = snprintf_l(__nb, __nbuf, _LIBCPP_GET_C_LOCALE, __fmt, __v); #else __nc = __snprintf_l(__nb, __nbuf, __cloc(), __fmt, __v); @@ -1810,14 +1808,14 @@ num_put<_CharT, _OutputIterator>::do_put(iter_type __s, ios_base& __iob, if (__nc > static_cast<int>(__nbuf-1)) { if (__specify_precision) -#ifdef _LIBCPP_STABLE_APPLE_ABI +#ifdef _LIBCPP_LOCALE__L_EXTENSIONS __nc = asprintf_l(&__nb, _LIBCPP_GET_C_LOCALE, __fmt, (int)__iob.precision(), __v); #else __nc = __asprintf_l(&__nb, __cloc(), __fmt, (int)__iob.precision(), __v); #endif else -#ifdef _LIBCPP_STABLE_APPLE_ABI +#ifdef _LIBCPP_LOCALE__L_EXTENSIONS __nc = asprintf_l(&__nb, _LIBCPP_GET_C_LOCALE, __fmt, __v); #else __nc = __asprintf_l(&__nb, __cloc(), __fmt, __v); @@ -1857,7 +1855,7 @@ num_put<_CharT, _OutputIterator>::do_put(iter_type __s, ios_base& __iob, char __fmt[6] = "%p"; const unsigned __nbuf = 20; char __nar[__nbuf]; -#ifdef _LIBCPP_STABLE_APPLE_ABI +#ifdef _LIBCPP_LOCALE__L_EXTENSIONS int __nc = sprintf_l(__nar, _LIBCPP_GET_C_LOCALE, __fmt, __v); #else int __nc = __sprintf_l(__nar, __cloc(), __fmt, __v); @@ -3541,7 +3539,7 @@ money_put<_CharT, _OutputIterator>::do_put(iter_type __s, bool __intl, // secure memory for digit storage if (__n > __bs-1) { -#ifdef _LIBCPP_STABLE_APPLE_ABI +#ifdef _LIBCPP_LOCALE__L_EXTENSIONS __n = asprintf_l(&__bb, _LIBCPP_GET_C_LOCALE, "%.0Lf", __units); #else __n = __asprintf_l(&__bb, __cloc(), "%.0Lf", __units); |