Index: libcxx/include/string =================================================================== --- libcxx/include/string +++ libcxx/include/string @@ -4537,15 +4537,78 @@ _LIBCPP_FUNC_VIS double stod (const string& __str, size_t* __idx = nullptr); _LIBCPP_FUNC_VIS long double stold(const string& __str, size_t* __idx = nullptr); -_LIBCPP_FUNC_VIS string to_string(int __val); -_LIBCPP_FUNC_VIS string to_string(unsigned __val); -_LIBCPP_FUNC_VIS string to_string(long __val); -_LIBCPP_FUNC_VIS string to_string(unsigned long __val); -_LIBCPP_FUNC_VIS string to_string(long long __val); -_LIBCPP_FUNC_VIS string to_string(unsigned long long __val); -_LIBCPP_FUNC_VIS string to_string(float __val); -_LIBCPP_FUNC_VIS string to_string(double __val); -_LIBCPP_FUNC_VIS string to_string(long double __val); +_LIBCPP_FUNC_VIS string __to_string(int __val); +_LIBCPP_FUNC_VIS string __to_string(unsigned __val); +_LIBCPP_FUNC_VIS string __to_string(long __val); +_LIBCPP_FUNC_VIS string __to_string(unsigned long __val); +_LIBCPP_FUNC_VIS string __to_string(long long __val); +_LIBCPP_FUNC_VIS string __to_string(unsigned long long __val); +_LIBCPP_FUNC_VIS string __to_string(float __val); +_LIBCPP_FUNC_VIS string __to_string(double __val); +_LIBCPP_FUNC_VIS string __to_string(long double __val); + +inline _LIBCPP_HIDE_FROM_ABI string to_string(int __val) +{ + string __s = __to_string(__val); + std::__debug_db_insert_c(&__s); + return __s; +} + +inline _LIBCPP_HIDE_FROM_ABI string to_string(unsigned __val) +{ + string __s = __to_string(__val); + std::__debug_db_insert_c(&__s); + return __s; +} + +inline _LIBCPP_HIDE_FROM_ABI string to_string(long __val) +{ + string __s = __to_string(__val); + std::__debug_db_insert_c(&__s); + return __s; +} + +inline _LIBCPP_HIDE_FROM_ABI string to_string(unsigned long __val) +{ + string __s = __to_string(__val); + std::__debug_db_insert_c(&__s); + return __s; +} + +inline _LIBCPP_HIDE_FROM_ABI string to_string(long long __val) +{ + string __s = __to_string(__val); + std::__debug_db_insert_c(&__s); + return __s; +} + +inline _LIBCPP_HIDE_FROM_ABI string to_string(unsigned long long __val) +{ + string __s = __to_string(__val); + std::__debug_db_insert_c(&__s); + return __s; +} + +inline _LIBCPP_HIDE_FROM_ABI string to_string(float __val) +{ + string __s = __to_string(__val); + std::__debug_db_insert_c(&__s); + return __s; +} + +inline _LIBCPP_HIDE_FROM_ABI string to_string(double __val) +{ + string __s = __to_string(__val); + std::__debug_db_insert_c(&__s); + return __s; +} + +inline _LIBCPP_HIDE_FROM_ABI string to_string(long double __val) +{ + string __s = __to_string(__val); + std::__debug_db_insert_c(&__s); + return __s; +} #ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS _LIBCPP_FUNC_VIS int stoi (const wstring& __str, size_t* __idx = nullptr, int __base = 10); @@ -4558,15 +4621,88 @@ _LIBCPP_FUNC_VIS double stod (const wstring& __str, size_t* __idx = nullptr); _LIBCPP_FUNC_VIS long double stold(const wstring& __str, size_t* __idx = nullptr); -_LIBCPP_FUNC_VIS wstring to_wstring(int __val); -_LIBCPP_FUNC_VIS wstring to_wstring(unsigned __val); -_LIBCPP_FUNC_VIS wstring to_wstring(long __val); -_LIBCPP_FUNC_VIS wstring to_wstring(unsigned long __val); -_LIBCPP_FUNC_VIS wstring to_wstring(long long __val); -_LIBCPP_FUNC_VIS wstring to_wstring(unsigned long long __val); -_LIBCPP_FUNC_VIS wstring to_wstring(float __val); -_LIBCPP_FUNC_VIS wstring to_wstring(double __val); -_LIBCPP_FUNC_VIS wstring to_wstring(long double __val); +_LIBCPP_FUNC_VIS wstring __to_wstring(int __val); +_LIBCPP_FUNC_VIS wstring __to_wstring(unsigned __val); +_LIBCPP_FUNC_VIS wstring __to_wstring(long __val); +_LIBCPP_FUNC_VIS wstring __to_wstring(unsigned long __val); +_LIBCPP_FUNC_VIS wstring __to_wstring(long long __val); +_LIBCPP_FUNC_VIS wstring __to_wstring(unsigned long long __val); +_LIBCPP_FUNC_VIS wstring __to_wstring(float __val); +_LIBCPP_FUNC_VIS wstring __to_wstring(double __val); +_LIBCPP_FUNC_VIS wstring __to_wstring(long double __val); + +inline _LIBCPP_HIDE_FROM_ABI wstring to_wstring(int __val) +{ + wstring __s = __to_wstring(__val); + std::__debug_db_insert_c(&__s); + return __s; +} + +inline _LIBCPP_HIDE_FROM_ABI wstring to_wstring(unsigned __val) +{ + wstring __s = __to_wstring(__val); + std::__debug_db_insert_c(&__s); + return __s; +} + +inline _LIBCPP_HIDE_FROM_ABI wstring to_wstring(long __val) +{ + wstring __s = __to_wstring(__val); + std::__debug_db_insert_c(&__s); + return __s; +} + +inline _LIBCPP_HIDE_FROM_ABI wstring to_wstring(unsigned long __val) +{ + wstring __s = __to_wstring(__val); + std::__debug_db_insert_c(&__s); + return __s; +} + +inline _LIBCPP_HIDE_FROM_ABI wstring to_wstring(long long __val) +{ + wstring __s = __to_wstring(__val); + std::__debug_db_insert_c(&__s); + return __s; +} + +inline _LIBCPP_HIDE_FROM_ABI wstring to_wstring(unsigned long long __val) +{ + wstring __s = __to_wstring(__val); + std::__debug_db_insert_c(&__s); + return __s; +} + +inline _LIBCPP_HIDE_FROM_ABI wstring to_wstring(float __val) +{ + wstring __s = __to_wstring(__val); + std::__debug_db_insert_c(&__s); + return __s; +} + +inline _LIBCPP_HIDE_FROM_ABI wstring to_wstring(double __val) +{ + wstring __s = __to_wstring(__val); + std::__debug_db_insert_c(&__s); + return __s; +} + +inline _LIBCPP_HIDE_FROM_ABI wstring to_wstring(long double __val) +{ + wstring __s = __to_wstring(__val); + std::__debug_db_insert_c(&__s); + return __s; +} + +inline _LIBCPP_HIDE_FROM_ABI wstring to_wstring(int __val); +inline _LIBCPP_HIDE_FROM_ABI wstring to_wstring(unsigned __val); +inline _LIBCPP_HIDE_FROM_ABI wstring to_wstring(long __val); +inline _LIBCPP_HIDE_FROM_ABI wstring to_wstring(unsigned long __val); +inline _LIBCPP_HIDE_FROM_ABI wstring to_wstring(long long __val); +inline _LIBCPP_HIDE_FROM_ABI wstring to_wstring(unsigned long long __val); +inline _LIBCPP_HIDE_FROM_ABI wstring to_wstring(float __val); +inline _LIBCPP_HIDE_FROM_ABI wstring to_wstring(double __val); +inline _LIBCPP_HIDE_FROM_ABI wstring to_wstring(long double __val); #endif // _LIBCPP_HAS_NO_WIDE_CHARACTERS template Index: libcxx/src/string.cpp =================================================================== --- libcxx/src/string.cpp +++ libcxx/src/string.cpp @@ -19,6 +19,13 @@ # include #endif +// This code is shared between debug and non-debug code, so it must be compiled +// without debug support. Debug support for all string instances in this file +// must be handled by wrappers in the header file. +#if _LIBCPP_DEBUG_LEVEL != 0 +#error File must be compiled without _LIBCPP_DEBUG. +#endif + _LIBCPP_BEGIN_NAMESPACE_STD #ifndef _LIBCPP_ABI_DO_NOT_EXPORT_BASIC_STRING_COMMON @@ -485,30 +492,30 @@ } // unnamed namespace -string to_string (int val) { return i_to_string< string>(val); } -string to_string (long val) { return i_to_string< string>(val); } -string to_string (long long val) { return i_to_string< string>(val); } -string to_string (unsigned val) { return i_to_string< string>(val); } -string to_string (unsigned long val) { return i_to_string< string>(val); } -string to_string (unsigned long long val) { return i_to_string< string>(val); } +string __to_string (int val) { return i_to_string< string>(val); } +string __to_string (long val) { return i_to_string< string>(val); } +string __to_string (long long val) { return i_to_string< string>(val); } +string __to_string (unsigned val) { return i_to_string< string>(val); } +string __to_string (unsigned long val) { return i_to_string< string>(val); } +string __to_string (unsigned long long val) { return i_to_string< string>(val); } #ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS -wstring to_wstring(int val) { return i_to_string(val); } -wstring to_wstring(long val) { return i_to_string(val); } -wstring to_wstring(long long val) { return i_to_string(val); } -wstring to_wstring(unsigned val) { return i_to_string(val); } -wstring to_wstring(unsigned long val) { return i_to_string(val); } -wstring to_wstring(unsigned long long val) { return i_to_string(val); } +wstring __to_wstring(int val) { return i_to_string(val); } +wstring __to_wstring(long val) { return i_to_string(val); } +wstring __to_wstring(long long val) { return i_to_string(val); } +wstring __to_wstring(unsigned val) { return i_to_string(val); } +wstring __to_wstring(unsigned long val) { return i_to_string(val); } +wstring __to_wstring(unsigned long long val) { return i_to_string(val); } #endif -string to_string (float val) { return as_string(snprintf, initial_string< string>()(), "%f", val); } -string to_string (double val) { return as_string(snprintf, initial_string< string>()(), "%f", val); } -string to_string (long double val) { return as_string(snprintf, initial_string< string>()(), "%Lf", val); } +string __to_string (float val) { return as_string(snprintf, initial_string< string>()(), "%f", val); } +string __to_string (double val) { return as_string(snprintf, initial_string< string>()(), "%f", val); } +string __to_string (long double val) { return as_string(snprintf, initial_string< string>()(), "%Lf", val); } #ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS -wstring to_wstring(float val) { return as_string(get_swprintf(), initial_string()(), L"%f", val); } -wstring to_wstring(double val) { return as_string(get_swprintf(), initial_string()(), L"%f", val); } -wstring to_wstring(long double val) { return as_string(get_swprintf(), initial_string()(), L"%Lf", val); } +wstring __to_wstring(float val) { return as_string(get_swprintf(), initial_string()(), L"%f", val); } +wstring __to_wstring(double val) { return as_string(get_swprintf(), initial_string()(), L"%f", val); } +wstring __to_wstring(long double val) { return as_string(get_swprintf(), initial_string()(), L"%Lf", val); } #endif _LIBCPP_END_NAMESPACE_STD