Merge 4273d05ae57637c975ae81b8699acc4a46352a43 into 2eb3279c391854c7a005b82ad121802e88b7c171

This commit is contained in:
Bernd Amend 2025-08-01 10:26:05 +00:00 committed by GitHub
commit 4f344c53c3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 25 additions and 2 deletions

View File

@ -384,6 +384,7 @@ namespace chaiscript::bootstrap {
m.add(fun(&Type_Info::is_arithmetic), "is_type_arithmetic");
m.add(fun(&Type_Info::name), "cpp_name");
m.add(fun(&Type_Info::bare_name), "cpp_bare_name");
m.add(fun(&Type_Info::demangled_name), "cpp_demangled_name");
m.add(fun(&Type_Info::bare_equal), "bare_equal");
basic_constructors<bool>("bool", m);

View File

@ -588,7 +588,7 @@ namespace chaiscript {
}
}
return ti.bare_name();
return ti.demangled_name();
}
/// Return all registered types
@ -932,7 +932,7 @@ namespace chaiscript {
void dump_system() const {
std::cout << "Registered Types: \n";
for (const auto &[type_name, type] : get_types()) {
std::cout << type_name << ": " << type.bare_name() << '\n';
std::cout << type_name << ": " << type.demangled_name() << '\n';
}
std::cout << '\n';

View File

@ -15,6 +15,10 @@
#include <type_traits>
#include <typeinfo>
#if __has_include(<cxxabi.h>)
#include <cxxabi.h>
#endif
namespace chaiscript {
namespace detail {
template<typename T>
@ -83,6 +87,24 @@ namespace chaiscript {
}
}
std::string demangled_name() const noexcept {
#if __has_include(<cxxabi.h>)
if (is_undef())
return "";
int status{};
char *ret = abi::__cxa_demangle(m_bare_type_info->name(), nullptr, nullptr, &status);
if (ret) {
std::string value{ret};
free(ret);
return value;
}
return m_bare_type_info->name();
#else
return bare_name();
#endif
}
constexpr const std::type_info *bare_type_info() const noexcept { return m_bare_type_info; }
private: