mirror of
https://github.com/ThePhD/sol2.git
synced 2024-03-22 13:10:44 +08:00
Renamed demangling function
This commit is contained in:
parent
03f047ed05
commit
08c94e1a67
@ -32,12 +32,12 @@
|
||||
namespace sol {
|
||||
namespace detail {
|
||||
#ifdef _MSC_VER
|
||||
std::string demangle(const std::type_info& id) {
|
||||
std::string get_type_name(const std::type_info& id) {
|
||||
return id.name();
|
||||
}
|
||||
|
||||
#elif defined(__GNUC__) || defined(__clang__)
|
||||
std::string demangle(const std::type_info& id) {
|
||||
std::string get_type_name(const std::type_info& id) {
|
||||
int status;
|
||||
char* unmangled = abi::__cxa_demangle(id.name(), 0, 0, &status);
|
||||
std::string realname = unmangled;
|
||||
@ -49,24 +49,26 @@ std::string demangle(const std::type_info& id) {
|
||||
#error Compiler not supported for demangling
|
||||
#endif // compilers
|
||||
|
||||
std::string lua_demangle(const std::type_info& id) {
|
||||
std::string realname = demangle(id);
|
||||
const static std::array<std::string, 2> removals = { "struct ", "class " };
|
||||
const static std::array<std::string, 2> replacements = { "::", "_" };
|
||||
std::string demangle(const std::type_info& id) {
|
||||
std::string realname = get_type_name(id);
|
||||
const static std::array<std::string, 2> removals = {{ "struct ", "class " }};
|
||||
const static std::array<std::string, 2> replacements = {{ "::", "_" }};
|
||||
for(std::size_t r = 0; r < removals.size(); ++r) {
|
||||
auto found = realname.find(removals[r]);
|
||||
while (found != std::string::npos) {
|
||||
while(found != std::string::npos) {
|
||||
realname.erase(found, removals[r].size());
|
||||
found = realname.find(removals[r]);
|
||||
}
|
||||
}
|
||||
|
||||
for(std::size_t r = 0; r < replacements.size(); r+=2) {
|
||||
auto found = realname.find(replacements[r]);
|
||||
while (found != std::string::npos) {
|
||||
realname.replace(found, replacements[r].size(), replacements[r+1]);
|
||||
while(found != std::string::npos) {
|
||||
realname.replace(found, replacements[r].size(), replacements[r + 1]);
|
||||
found = realname.find(replacements[r], found);
|
||||
}
|
||||
}
|
||||
|
||||
return realname;
|
||||
}
|
||||
} // detail
|
||||
|
@ -42,7 +42,7 @@ struct userdata_traits {
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
const std::string userdata_traits<T>::name = detail::lua_demangle(typeid(T));
|
||||
const std::string userdata_traits<T>::name = detail::demangle(typeid(T));
|
||||
|
||||
template<typename T>
|
||||
const std::string userdata_traits<T>::metatable = std::string("sol.stateful.").append(name);
|
||||
|
Loading…
x
Reference in New Issue
Block a user