From 5dea76a30133f6111331b7f76ff6bae713d63c82 Mon Sep 17 00:00:00 2001 From: Andrey Semashev Date: Wed, 11 Jun 2014 22:02:59 +0400 Subject: [PATCH] Port to Boost.Core demangle() and typeinfo. --- .../boost/exception/detail/exception_ptr.hpp | 4 +- include/boost/exception/detail/type_info.hpp | 45 +++---------------- .../exception/diagnostic_information.hpp | 4 +- 3 files changed, 11 insertions(+), 42 deletions(-) diff --git a/include/boost/exception/detail/exception_ptr.hpp b/include/boost/exception/detail/exception_ptr.hpp index 5605ca0..cac64e6 100644 --- a/include/boost/exception/detail/exception_ptr.hpp +++ b/include/boost/exception/detail/exception_ptr.hpp @@ -22,7 +22,7 @@ #include #include #ifndef BOOST_NO_RTTI -#include // exception_detail::demangle() +#include #endif #include #include @@ -92,7 +92,7 @@ boost std::string to_string( original_exception_type const & x ) { - return exception_detail::demangle(x.value()->name()); + return core::demangle(x.value()->name()); } #endif diff --git a/include/boost/exception/detail/type_info.hpp b/include/boost/exception/detail/type_info.hpp index d82e22f..b8c7d48 100644 --- a/include/boost/exception/detail/type_info.hpp +++ b/include/boost/exception/detail/type_info.hpp @@ -12,46 +12,15 @@ #pragma warning(push,1) #endif -#include +#include +#include #include #include #include -#if defined(__GLIBCXX__) || defined(__GLIBCPP__) -#include -#include -#include -#define BOOST_EXCEPTION_HAS_CXXABI_H -#endif namespace boost { - namespace - exception_detail - { - inline - std::string - demangle(const char* name) - { -#ifdef BOOST_EXCEPTION_HAS_CXXABI_H - struct auto_free - { - explicit auto_free(char* ptr) : p(ptr) {} - ~auto_free() { free(p); } - char* p; - }; - - int status = 0; - size_t size = 0; - auto_free demangled(abi::__cxa_demangle(name, NULL, &size, &status)); - - if (demangled.p) - return demangled.p; -#endif - return name; - } - } - template inline std::string @@ -60,7 +29,7 @@ boost #ifdef BOOST_NO_TYPEID return BOOST_CURRENT_FUNCTION; #else - return exception_detail::demangle(typeid(T*).name()); + return core::demangle(typeid(T*).name()); #endif } @@ -72,7 +41,7 @@ boost #ifdef BOOST_NO_TYPEID return BOOST_CURRENT_FUNCTION; #else - return exception_detail::demangle(typeid(T).name()); + return core::demangle(typeid(T).name()); #endif } @@ -82,10 +51,10 @@ boost struct type_info_ { - detail::sp_typeinfo const * type_; + core::typeinfo const * type_; explicit - type_info_( detail::sp_typeinfo const & type ): + type_info_( core::typeinfo const & type ): type_(&type) { } @@ -100,7 +69,7 @@ boost } } -#define BOOST_EXCEPTION_STATIC_TYPEID(T) ::boost::exception_detail::type_info_(BOOST_SP_TYPEID(T)) +#define BOOST_EXCEPTION_STATIC_TYPEID(T) ::boost::exception_detail::type_info_(BOOST_CORE_TYPEID(T)) #ifndef BOOST_NO_RTTI #define BOOST_EXCEPTION_DYNAMIC_TYPEID(x) ::boost::exception_detail::type_info_(typeid(x)) diff --git a/include/boost/exception/diagnostic_information.hpp b/include/boost/exception/diagnostic_information.hpp index 0d2cfc2..305e8ed 100644 --- a/include/boost/exception/diagnostic_information.hpp +++ b/include/boost/exception/diagnostic_information.hpp @@ -17,7 +17,7 @@ #include #include #ifndef BOOST_NO_RTTI -#include // exception_detail::demangle() +#include #endif #include #include @@ -151,7 +151,7 @@ boost #ifndef BOOST_NO_RTTI if ( verbose ) tmp << std::string("Dynamic exception type: ") << - exception_detail::demangle((be?(BOOST_EXCEPTION_DYNAMIC_TYPEID(*be)):(BOOST_EXCEPTION_DYNAMIC_TYPEID(*se))).type_->name()) << '\n'; + core::demangle((be?(BOOST_EXCEPTION_DYNAMIC_TYPEID(*be)):(BOOST_EXCEPTION_DYNAMIC_TYPEID(*se))).type_->name()) << '\n'; #endif if( with_what && se && verbose ) tmp << "std::exception::what: " << wh << '\n';