/// Construct with name.
///
- /// Constructor with an optional string and a boolean indicating if it is
- /// the mangled version.
- ///
- /// \param[in] name
- /// The already const name to copy into this object.
- ///
- /// \param[in] is_mangled
- /// If \b true then \a name is a mangled name, if \b false then
- /// \a name is demangled.
- Mangled(ConstString name, bool is_mangled);
- Mangled(llvm::StringRef name, bool is_mangled);
-
- /// Construct with name.
- ///
/// Constructor with an optional string and auto-detect if \a name is
/// mangled or not.
///
explicit Mangled(llvm::StringRef name);
- /// Destructor
- ///
- /// Releases its ref counts on the mangled and demangled strings that live
- /// in the global string pool.
- ~Mangled();
-
/// Convert to pointer operator.
///
/// This allows code to check a Mangled object to see if it contains a valid
/// \param[in] call_decl_ptr
/// Optional calling location declaration information that
/// describes from where this inlined function was called.
- InlineFunctionInfo(const char *name, const char *mangled,
+ InlineFunctionInfo(const char *name, llvm::StringRef mangled,
const Declaration *decl_ptr,
const Declaration *call_decl_ptr);
// drastically different meanings and sorting requirements.
Symbol();
- Symbol(uint32_t symID, const char *name, bool name_is_mangled,
- lldb::SymbolType type, bool external, bool is_debug,
- bool is_trampoline, bool is_artificial,
+ Symbol(uint32_t symID, llvm::StringRef name, lldb::SymbolType type,
+ bool external, bool is_debug, bool is_trampoline, bool is_artificial,
const lldb::SectionSP §ion_sp, lldb::addr_t value,
lldb::addr_t size, bool size_is_valid,
bool contains_linker_annotations, uint32_t flags);
if (m_opaque_sp) {
ConstString mangled_str = m_opaque_sp->GetMangledName();
if (mangled_str) {
- Mangled mangled(mangled_str, true);
+ Mangled mangled(mangled_str);
return mangled.GetDemangledName(mangled.GuessLanguage()).GetCString();
}
}
#pragma mark Mangled
-// Constructor with an optional string and a boolean indicating if it is the
-// mangled version.
-Mangled::Mangled(ConstString s, bool mangled)
- : m_mangled(), m_demangled() {
- if (s)
- SetValue(s, mangled);
-}
-
-Mangled::Mangled(llvm::StringRef name, bool is_mangled) {
- if (!name.empty())
- SetValue(ConstString(name), is_mangled);
-}
-
Mangled::Mangled(ConstString s) : m_mangled(), m_demangled() {
if (s)
SetValue(s);
SetValue(ConstString(name));
}
-// Destructor
-Mangled::~Mangled() {}
-
// Convert to pointer operator. This allows code to check any Mangled objects
// to see if they contain anything valid using code such as:
//
std::vector<ConstString> param_matches;
for (size_t i = 0; i < alternates.size(); i++) {
ConstString alternate_mangled_name = alternates[i];
- Mangled mangled(alternate_mangled_name, true);
+ Mangled mangled(alternate_mangled_name);
ConstString demangled = mangled.GetDemangledName(lang_type);
CPlusPlusLanguage::MethodName alternate_cpp_name(demangled);
ConstString name = C_spec.name;
if (CPlusPlusLanguage::IsCPPMangledName(name.GetCString())) {
- Mangled mangled(name, true);
+ Mangled mangled(name);
ConstString demangled =
mangled.GetDemangledName(lldb::eLanguageTypeC_plus_plus);
if (name.startswith("__Z"))
name = name.drop_front();
- Mangled mangled(name, true);
+ Mangled mangled(name);
if (mangled.GuessLanguage() == lldb::eLanguageTypeC_plus_plus) {
ConstString demangled(
mangled.GetDisplayDemangledName(lldb::eLanguageTypeC_plus_plus));
bool is_global = symbol.getBinding() == STB_GLOBAL;
uint32_t flags = symbol.st_other << 8 | symbol.st_info | additional_flags;
- bool is_mangled = (symbol_name[0] == '_' && symbol_name[1] == 'Z');
-
llvm::StringRef symbol_ref(symbol_name);
// Symbol names may contain @VERSION suffixes. Find those and strip them
size_t version_pos = symbol_ref.find('@');
bool has_suffix = version_pos != llvm::StringRef::npos;
llvm::StringRef symbol_bare = symbol_ref.substr(0, version_pos);
- Mangled mangled(ConstString(symbol_bare), is_mangled);
+ Mangled mangled(symbol_bare);
// Now append the suffix back to mangled and unmangled names. Only do it if
// the demangling was successful (string is not empty).
break;
const char *symbol_name = strtab_data.PeekCStr(symbol.st_name);
- bool is_mangled =
- symbol_name ? (symbol_name[0] == '_' && symbol_name[1] == 'Z') : false;
uint64_t plt_index = plt_offset + i * plt_entsize;
Symbol jump_symbol(
i + start_id, // Symbol table index
symbol_name, // symbol name.
- is_mangled, // is the symbol name mangled?
eSymbolTypeTrampoline, // Type of this symbol
false, // Is this globally visible?
false, // Is this symbol debug info?
Symbol eh_symbol(
symbol_id, // Symbol table index.
symbol_name, // Symbol name.
- false, // Is the symbol name mangled?
eSymbolTypeCode, // Type of this symbol.
true, // Is this globally visible?
false, // Is this symbol debug info?
return;
}
symbols.try_emplace(
- address, /*symID*/ 0, Mangled(name, /*is_mangled*/ false),
- eSymbolTypeCode, /*is_global*/ true, /*is_debug*/ false,
+ address, /*symID*/ 0, Mangled(name), eSymbolTypeCode,
+ /*is_global*/ true, /*is_debug*/ false,
/*is_trampoline*/ false, /*is_artificial*/ false,
AddressRange(section_sp, address - section_sp->GetFileAddress(),
size.getValueOr(0)),
symtab.AddSymbol(
Symbol(pub_symbol->getSymIndexId(), // symID
pub_symbol->getName().c_str(), // name
- true, // name_is_mangled
pub_symbol->isCode() ? eSymbolTypeCode : eSymbolTypeData, // type
true, // external
false, // is_debug
return m_name.MemorySize() + m_declaration.MemorySize();
}
-InlineFunctionInfo::InlineFunctionInfo(const char *name, const char *mangled,
+InlineFunctionInfo::InlineFunctionInfo(const char *name,
+ llvm::StringRef mangled,
const Declaration *decl_ptr,
const Declaration *call_decl_ptr)
- : FunctionInfo(name, decl_ptr), m_mangled(ConstString(mangled), true),
+ : FunctionInfo(name, decl_ptr), m_mangled(mangled),
m_call_decl(call_decl_ptr) {}
InlineFunctionInfo::InlineFunctionInfo(ConstString name,
m_is_weak(false), m_type(eSymbolTypeInvalid), m_mangled(), m_addr_range(),
m_flags() {}
-Symbol::Symbol(uint32_t symID, const char *name, bool name_is_mangled,
- SymbolType type, bool external, bool is_debug,
- bool is_trampoline, bool is_artificial,
+Symbol::Symbol(uint32_t symID, llvm::StringRef name, SymbolType type, bool external,
+ bool is_debug, bool is_trampoline, bool is_artificial,
const lldb::SectionSP §ion_sp, addr_t offset, addr_t size,
bool size_is_valid, bool contains_linker_annotations,
uint32_t flags)
m_is_debug(is_debug), m_is_external(external), m_size_is_sibling(false),
m_size_is_synthesized(false), m_size_is_valid(size_is_valid || size > 0),
m_demangled_is_synthesized(false),
- m_contains_linker_annotations(contains_linker_annotations),
+ m_contains_linker_annotations(contains_linker_annotations),
m_is_weak(false), m_type(type),
- m_mangled(ConstString(name), name_is_mangled),
+ m_mangled(name),
m_addr_range(section_sp, offset, size), m_flags(flags) {}
Symbol::Symbol(uint32_t symID, const Mangled &mangled, SymbolType type,
TEST(MangledTest, ResultForValidName) {
ConstString MangledName("_ZN1a1b1cIiiiEEvm");
- bool IsMangled = true;
-
- Mangled TheMangled(MangledName, IsMangled);
+ Mangled TheMangled(MangledName);
ConstString TheDemangled =
TheMangled.GetDemangledName(eLanguageTypeC_plus_plus);
TEST(MangledTest, EmptyForInvalidName) {
ConstString MangledName("_ZN1a1b1cmxktpEEvm");
- bool IsMangled = true;
-
- Mangled TheMangled(MangledName, IsMangled);
+ Mangled TheMangled(MangledName);
ConstString TheDemangled =
TheMangled.GetDemangledName(eLanguageTypeC_plus_plus);