Change ConstString::SetCStringWithMangledCounterpart to use StringRef
This should simplify the upcoming demangling patch (D50071). While I was in there, I also added a quick test for the function. llvm-svn: 338995
This commit is contained in:
parent
3271f379a9
commit
19a357adf8
|
@ -373,15 +373,14 @@ public:
|
|||
/// them.
|
||||
///
|
||||
/// @param[in] demangled
|
||||
/// The demangled C string to correlate with the \a mangled
|
||||
/// name.
|
||||
/// The demangled string to correlate with the \a mangled name.
|
||||
///
|
||||
/// @param[in] mangled
|
||||
/// The already uniqued mangled ConstString to correlate the
|
||||
/// soon to be uniqued version of \a demangled.
|
||||
//------------------------------------------------------------------
|
||||
void SetCStringWithMangledCounterpart(const char *demangled,
|
||||
const ConstString &mangled);
|
||||
void SetStringWithMangledCounterpart(llvm::StringRef demangled,
|
||||
const ConstString &mangled);
|
||||
|
||||
//------------------------------------------------------------------
|
||||
/// Retrieve the mangled or demangled counterpart for a mangled or demangled
|
||||
|
|
|
@ -308,7 +308,7 @@ Mangled::GetDemangledName(lldb::LanguageType language) const {
|
|||
break;
|
||||
}
|
||||
if (demangled_name) {
|
||||
m_demangled.SetCStringWithMangledCounterpart(demangled_name, m_mangled);
|
||||
m_demangled.SetStringWithMangledCounterpart(demangled_name, m_mangled);
|
||||
free(demangled_name);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -111,38 +111,34 @@ public:
|
|||
}
|
||||
|
||||
const char *
|
||||
GetConstCStringAndSetMangledCounterPart(const char *demangled_cstr,
|
||||
GetConstCStringAndSetMangledCounterPart(llvm::StringRef demangled,
|
||||
const char *mangled_ccstr) {
|
||||
if (demangled_cstr != nullptr) {
|
||||
const char *demangled_ccstr = nullptr;
|
||||
const char *demangled_ccstr = nullptr;
|
||||
|
||||
{
|
||||
llvm::StringRef string_ref(demangled_cstr);
|
||||
const uint8_t h = hash(string_ref);
|
||||
llvm::sys::SmartScopedWriter<false> wlock(m_string_pools[h].m_mutex);
|
||||
{
|
||||
const uint8_t h = hash(demangled);
|
||||
llvm::sys::SmartScopedWriter<false> wlock(m_string_pools[h].m_mutex);
|
||||
|
||||
// Make string pool entry with the mangled counterpart already set
|
||||
StringPoolEntryType &entry =
|
||||
*m_string_pools[h]
|
||||
.m_string_map.insert(std::make_pair(string_ref, mangled_ccstr))
|
||||
.first;
|
||||
// Make string pool entry with the mangled counterpart already set
|
||||
StringPoolEntryType &entry =
|
||||
*m_string_pools[h]
|
||||
.m_string_map.insert(std::make_pair(demangled, mangled_ccstr))
|
||||
.first;
|
||||
|
||||
// Extract the const version of the demangled_cstr
|
||||
demangled_ccstr = entry.getKeyData();
|
||||
}
|
||||
|
||||
{
|
||||
// Now assign the demangled const string as the counterpart of the
|
||||
// mangled const string...
|
||||
const uint8_t h = hash(llvm::StringRef(mangled_ccstr));
|
||||
llvm::sys::SmartScopedWriter<false> wlock(m_string_pools[h].m_mutex);
|
||||
GetStringMapEntryFromKeyData(mangled_ccstr).setValue(demangled_ccstr);
|
||||
}
|
||||
|
||||
// Return the constant demangled C string
|
||||
return demangled_ccstr;
|
||||
// Extract the const version of the demangled_cstr
|
||||
demangled_ccstr = entry.getKeyData();
|
||||
}
|
||||
return nullptr;
|
||||
|
||||
{
|
||||
// Now assign the demangled const string as the counterpart of the
|
||||
// mangled const string...
|
||||
const uint8_t h = hash(llvm::StringRef(mangled_ccstr));
|
||||
llvm::sys::SmartScopedWriter<false> wlock(m_string_pools[h].m_mutex);
|
||||
GetStringMapEntryFromKeyData(mangled_ccstr).setValue(demangled_ccstr);
|
||||
}
|
||||
|
||||
// Return the constant demangled C string
|
||||
return demangled_ccstr;
|
||||
}
|
||||
|
||||
const char *GetConstTrimmedCStringWithLength(const char *cstr,
|
||||
|
@ -306,7 +302,7 @@ void ConstString::SetString(const llvm::StringRef &s) {
|
|||
m_string = StringPool().GetConstCStringWithLength(s.data(), s.size());
|
||||
}
|
||||
|
||||
void ConstString::SetCStringWithMangledCounterpart(const char *demangled,
|
||||
void ConstString::SetStringWithMangledCounterpart(llvm::StringRef demangled,
|
||||
const ConstString &mangled) {
|
||||
m_string = StringPool().GetConstCStringAndSetMangledCounterPart(
|
||||
demangled, mangled.m_string);
|
||||
|
|
|
@ -16,3 +16,20 @@ using namespace lldb_private;
|
|||
TEST(ConstStringTest, format_provider) {
|
||||
EXPECT_EQ("foo", llvm::formatv("{0}", ConstString("foo")).str());
|
||||
}
|
||||
|
||||
TEST(ConstStringTest, MangledCounterpart) {
|
||||
ConstString foo("foo");
|
||||
ConstString counterpart;
|
||||
EXPECT_FALSE(foo.GetMangledCounterpart(counterpart));
|
||||
EXPECT_EQ("", counterpart.GetStringRef());
|
||||
|
||||
ConstString bar;
|
||||
bar.SetStringWithMangledCounterpart("bar", foo);
|
||||
EXPECT_EQ("bar", bar.GetStringRef());
|
||||
|
||||
EXPECT_TRUE(bar.GetMangledCounterpart(counterpart));
|
||||
EXPECT_EQ("foo", counterpart.GetStringRef());
|
||||
|
||||
EXPECT_TRUE(foo.GetMangledCounterpart(counterpart));
|
||||
EXPECT_EQ("bar", counterpart.GetStringRef());
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue