[Lldb-commits] [lldb] 7ee633a - [lldb][NFCI] Remove unneeded temporary std::string allocations in SBAPI

Alex Langford via lldb-commits lldb-commits at lists.llvm.org
Fri Jul 14 10:47:17 PDT 2023


Author: Alex Langford
Date: 2023-07-14T10:46:42-07:00
New Revision: 7ee633a24b8ce87b3a9b2f0f4bd1aace634cd2a1

URL: https://github.com/llvm/llvm-project/commit/7ee633a24b8ce87b3a9b2f0f4bd1aace634cd2a1
DIFF: https://github.com/llvm/llvm-project/commit/7ee633a24b8ce87b3a9b2f0f4bd1aace634cd2a1.diff

LOG: [lldb][NFCI] Remove unneeded temporary std::string allocations in SBAPI

This uses some friend class trickery to avoid some unneeded temporary
std::string allocations.

Differential Revision: https://reviews.llvm.org/D155035

Added: 
    

Modified: 
    lldb/include/lldb/API/SBStringList.h
    lldb/source/API/SBDebugger.cpp
    lldb/source/API/SBStringList.cpp
    lldb/source/API/SBStructuredData.cpp
    lldb/source/API/SBThread.cpp

Removed: 
    


################################################################################
diff  --git a/lldb/include/lldb/API/SBStringList.h b/lldb/include/lldb/API/SBStringList.h
index 4842c162bd6efd..5d4f4db63f8418 100644
--- a/lldb/include/lldb/API/SBStringList.h
+++ b/lldb/include/lldb/API/SBStringList.h
@@ -47,11 +47,14 @@ class LLDB_API SBStringList {
   friend class SBBreakpoint;
   friend class SBBreakpointLocation;
   friend class SBBreakpointName;
+  friend class SBStructuredData;
 
   SBStringList(const lldb_private::StringList *lldb_strings);
 
   void AppendList(const lldb_private::StringList &strings);
 
+  lldb_private::StringList *operator->();
+
   const lldb_private::StringList *operator->() const;
 
   const lldb_private::StringList &operator*() const;

diff  --git a/lldb/source/API/SBDebugger.cpp b/lldb/source/API/SBDebugger.cpp
index 9641e2f9c8a089..9cf46466064847 100644
--- a/lldb/source/API/SBDebugger.cpp
+++ b/lldb/source/API/SBDebugger.cpp
@@ -1399,9 +1399,9 @@ const char *SBDebugger::GetPrompt() const {
 
   Log *log = GetLog(LLDBLog::API);
 
-  LLDB_LOGF(log, "SBDebugger(%p)::GetPrompt () => \"%s\"",
-            static_cast<void *>(m_opaque_sp.get()),
-            (m_opaque_sp ? m_opaque_sp->GetPrompt().str().c_str() : ""));
+  LLDB_LOG(log, "SBDebugger({0:x})::GetPrompt () => \"{1}\"",
+           static_cast<void *>(m_opaque_sp.get()),
+           (m_opaque_sp ? m_opaque_sp->GetPrompt() : ""));
 
   return (m_opaque_sp ? ConstString(m_opaque_sp->GetPrompt()).GetCString()
                       : nullptr);

diff  --git a/lldb/source/API/SBStringList.cpp b/lldb/source/API/SBStringList.cpp
index 27799c744184c7..350c58b61634c3 100644
--- a/lldb/source/API/SBStringList.cpp
+++ b/lldb/source/API/SBStringList.cpp
@@ -37,6 +37,13 @@ const SBStringList &SBStringList::operator=(const SBStringList &rhs) {
 
 SBStringList::~SBStringList() = default;
 
+lldb_private::StringList *SBStringList::operator->() {
+  if (!IsValid())
+    m_opaque_up = std::make_unique<lldb_private::StringList>();
+
+  return m_opaque_up.get();
+}
+
 const lldb_private::StringList *SBStringList::operator->() const {
   return m_opaque_up.get();
 }

diff  --git a/lldb/source/API/SBStructuredData.cpp b/lldb/source/API/SBStructuredData.cpp
index 439921fa0f19f0..acc7c35eeef96c 100644
--- a/lldb/source/API/SBStructuredData.cpp
+++ b/lldb/source/API/SBStructuredData.cpp
@@ -16,6 +16,7 @@
 #include "lldb/Utility/Event.h"
 #include "lldb/Utility/Status.h"
 #include "lldb/Utility/Stream.h"
+#include "lldb/Utility/StringList.h"
 #include "lldb/Utility/StructuredData.h"
 
 using namespace lldb;
@@ -138,9 +139,9 @@ bool SBStructuredData::GetKeys(lldb::SBStringList &keys) const {
   StructuredData::Array *key_arr = array_sp->GetAsArray();
   assert(key_arr);
 
-  key_arr->ForEach([&keys] (StructuredData::Object *object) -> bool {
+  key_arr->ForEach([&keys](StructuredData::Object *object) -> bool {
     llvm::StringRef key = object->GetStringValue("");
-    keys.AppendString(key.str().c_str());
+    keys->AppendString(key);
     return true;
   });
   return true;

diff  --git a/lldb/source/API/SBThread.cpp b/lldb/source/API/SBThread.cpp
index a1f8a39dbbbe5a..bd316ddf54a92e 100644
--- a/lldb/source/API/SBThread.cpp
+++ b/lldb/source/API/SBThread.cpp
@@ -457,7 +457,7 @@ bool SBThread::GetInfoItemByPathAsString(const char *path, SBStream &strm) {
             info_root_sp->GetObjectForDotSeparatedPath(path);
         if (node) {
           if (node->GetType() == eStructuredDataTypeString) {
-            strm.Printf("%s", node->GetAsString()->GetValue().str().c_str());
+            strm.ref() << node->GetAsString()->GetValue();
             success = true;
           }
           if (node->GetType() == eStructuredDataTypeInteger) {


        


More information about the lldb-commits mailing list