[Lldb-commits] [lldb] r338995 - Change ConstString::SetCStringWithMangledCounterpart to use StringRef

Pavel Labath via lldb-commits lldb-commits at lists.llvm.org
Mon Aug 6 01:28:00 PDT 2018


Author: labath
Date: Mon Aug  6 01:27:59 2018
New Revision: 338995

URL: http://llvm.org/viewvc/llvm-project?rev=338995&view=rev
Log:
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.

Modified:
    lldb/trunk/include/lldb/Utility/ConstString.h
    lldb/trunk/source/Core/Mangled.cpp
    lldb/trunk/source/Utility/ConstString.cpp
    lldb/trunk/unittests/Utility/ConstStringTest.cpp

Modified: lldb/trunk/include/lldb/Utility/ConstString.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Utility/ConstString.h?rev=338995&r1=338994&r2=338995&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Utility/ConstString.h (original)
+++ lldb/trunk/include/lldb/Utility/ConstString.h Mon Aug  6 01:27:59 2018
@@ -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

Modified: lldb/trunk/source/Core/Mangled.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/Mangled.cpp?rev=338995&r1=338994&r2=338995&view=diff
==============================================================================
--- lldb/trunk/source/Core/Mangled.cpp (original)
+++ lldb/trunk/source/Core/Mangled.cpp Mon Aug  6 01:27:59 2018
@@ -308,7 +308,7 @@ Mangled::GetDemangledName(lldb::Language
         break;
       }
       if (demangled_name) {
-        m_demangled.SetCStringWithMangledCounterpart(demangled_name, m_mangled);
+        m_demangled.SetStringWithMangledCounterpart(demangled_name, m_mangled);
         free(demangled_name);
       }
     }

Modified: lldb/trunk/source/Utility/ConstString.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Utility/ConstString.cpp?rev=338995&r1=338994&r2=338995&view=diff
==============================================================================
--- lldb/trunk/source/Utility/ConstString.cpp (original)
+++ lldb/trunk/source/Utility/ConstString.cpp Mon Aug  6 01:27:59 2018
@@ -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);
-
-        // 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;
-
-        // 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);
-      }
+    {
+      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(demangled, mangled_ccstr))
+               .first;
 
-      // 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::
   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);

Modified: lldb/trunk/unittests/Utility/ConstStringTest.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/unittests/Utility/ConstStringTest.cpp?rev=338995&r1=338994&r2=338995&view=diff
==============================================================================
--- lldb/trunk/unittests/Utility/ConstStringTest.cpp (original)
+++ lldb/trunk/unittests/Utility/ConstStringTest.cpp Mon Aug  6 01:27:59 2018
@@ -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());
+}




More information about the lldb-commits mailing list