[Lldb-commits] [lldb] e29cc52 - [lldb][NFCI] Remove use of ConstString from IOHandler
Alex Langford via lldb-commits
lldb-commits at lists.llvm.org
Thu Jun 15 15:00:30 PDT 2023
Author: Alex Langford
Date: 2023-06-15T14:57:20-07:00
New Revision: e29cc5216a8608b026e390b69022878b2ec3071a
URL: https://github.com/llvm/llvm-project/commit/e29cc5216a8608b026e390b69022878b2ec3071a
DIFF: https://github.com/llvm/llvm-project/commit/e29cc5216a8608b026e390b69022878b2ec3071a.diff
LOG: [lldb][NFCI] Remove use of ConstString from IOHandler
None of these need to be in the ConstString StringPool. For the most
part they are constant strings and do not require fast comparisons.
I did change IOHandlerDelegateMultiline slightly -- specifically, the
`m_end_line` member always has a `\n` at the end of it now. This was so
that `IOHandlerGetControlSequence` can always return a StringRef. This
did require a slight change to `IOHandlerIsInputComplete` where we must
drop the newline before comparing it against the input parameter.
Differential Revision: https://reviews.llvm.org/D151597
Added:
Modified:
lldb/include/lldb/Core/Debugger.h
lldb/include/lldb/Core/IOHandler.h
lldb/include/lldb/Expression/REPL.h
lldb/include/lldb/Interpreter/CommandInterpreter.h
lldb/source/API/SBCommandInterpreter.cpp
lldb/source/Core/Debugger.cpp
lldb/source/Expression/REPL.cpp
lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPythonImpl.h
Removed:
################################################################################
diff --git a/lldb/include/lldb/Core/Debugger.h b/lldb/include/lldb/Core/Debugger.h
index 64d9fad8de20d..4e3c177d33e59 100644
--- a/lldb/include/lldb/Core/Debugger.h
+++ b/lldb/include/lldb/Core/Debugger.h
@@ -232,7 +232,7 @@ class Debugger : public std::enable_shared_from_this<Debugger>,
void PrintAsync(const char *s, size_t len, bool is_stdout);
- ConstString GetTopIOHandlerControlSequence(char ch);
+ llvm::StringRef GetTopIOHandlerControlSequence(char ch);
const char *GetIOHandlerCommandPrefix();
diff --git a/lldb/include/lldb/Core/IOHandler.h b/lldb/include/lldb/Core/IOHandler.h
index 18d87acbd8722..0eef77e81ccb8 100644
--- a/lldb/include/lldb/Core/IOHandler.h
+++ b/lldb/include/lldb/Core/IOHandler.h
@@ -12,7 +12,6 @@
#include "lldb/Core/ValueObjectList.h"
#include "lldb/Host/Config.h"
#include "lldb/Utility/CompletionRequest.h"
-#include "lldb/Utility/ConstString.h"
#include "lldb/Utility/Flags.h"
#include "lldb/Utility/Predicate.h"
#include "lldb/Utility/Stream.h"
@@ -107,7 +106,7 @@ class IOHandler {
}
bool SetPrompt(const char *) = delete;
- virtual ConstString GetControlSequence(char ch) { return ConstString(); }
+ virtual llvm::StringRef GetControlSequence(char ch) { return {}; }
virtual const char *GetCommandPrefix() { return nullptr; }
@@ -271,9 +270,7 @@ class IOHandlerDelegate {
return true;
}
- virtual ConstString IOHandlerGetControlSequence(char ch) {
- return ConstString();
- }
+ virtual llvm::StringRef IOHandlerGetControlSequence(char ch) { return {}; }
virtual const char *IOHandlerGetCommandPrefix() { return nullptr; }
@@ -295,24 +292,25 @@ class IOHandlerDelegate {
// the last line is equal to "end_line" which is specified in the constructor.
class IOHandlerDelegateMultiline : public IOHandlerDelegate {
public:
- IOHandlerDelegateMultiline(const char *end_line,
+ IOHandlerDelegateMultiline(llvm::StringRef end_line,
Completion completion = Completion::None)
- : IOHandlerDelegate(completion),
- m_end_line((end_line && end_line[0]) ? end_line : "") {}
+ : IOHandlerDelegate(completion), m_end_line(end_line.str() + "\n") {}
~IOHandlerDelegateMultiline() override = default;
- ConstString IOHandlerGetControlSequence(char ch) override {
+ llvm::StringRef IOHandlerGetControlSequence(char ch) override {
if (ch == 'd')
- return ConstString(m_end_line + "\n");
- return ConstString();
+ return m_end_line;
+ return {};
}
bool IOHandlerIsInputComplete(IOHandler &io_handler,
StringList &lines) override {
// Determine whether the end of input signal has been entered
const size_t num_lines = lines.GetSize();
- if (num_lines > 0 && lines[num_lines - 1] == m_end_line) {
+ const llvm::StringRef end_line =
+ llvm::StringRef(m_end_line).drop_back(1); // Drop '\n'
+ if (num_lines > 0 && llvm::StringRef(lines[num_lines - 1]) == end_line) {
// Remove the terminal line from "lines" so it doesn't appear in the
// resulting input and return true to indicate we are done getting lines
lines.PopBack();
@@ -373,7 +371,7 @@ class IOHandlerEditline : public IOHandler {
void TerminalSizeChanged() override;
- ConstString GetControlSequence(char ch) override {
+ llvm::StringRef GetControlSequence(char ch) override {
return m_delegate.IOHandlerGetControlSequence(ch);
}
@@ -522,8 +520,9 @@ class IOHandlerStack {
m_stack[num_io_handlers - 2]->GetType() == second_top_type);
}
- ConstString GetTopIOHandlerControlSequence(char ch) {
- return ((m_top != nullptr) ? m_top->GetControlSequence(ch) : ConstString());
+ llvm::StringRef GetTopIOHandlerControlSequence(char ch) {
+ return ((m_top != nullptr) ? m_top->GetControlSequence(ch)
+ : llvm::StringRef());
}
const char *GetTopIOHandlerCommandPrefix() {
diff --git a/lldb/include/lldb/Expression/REPL.h b/lldb/include/lldb/Expression/REPL.h
index 95a3a6ebae57e..b1dc830ec8bf8 100644
--- a/lldb/include/lldb/Expression/REPL.h
+++ b/lldb/include/lldb/Expression/REPL.h
@@ -88,7 +88,7 @@ class REPL : public IOHandlerDelegate,
const char *IOHandlerGetFixIndentationCharacters() override;
- ConstString IOHandlerGetControlSequence(char ch) override;
+ llvm::StringRef IOHandlerGetControlSequence(char ch) override;
const char *IOHandlerGetCommandPrefix() override;
diff --git a/lldb/include/lldb/Interpreter/CommandInterpreter.h b/lldb/include/lldb/Interpreter/CommandInterpreter.h
index f6a9a4d90bc1d..747188a15312f 100644
--- a/lldb/include/lldb/Interpreter/CommandInterpreter.h
+++ b/lldb/include/lldb/Interpreter/CommandInterpreter.h
@@ -652,10 +652,11 @@ class CommandInterpreter : public Broadcaster,
void IOHandlerInputComplete(IOHandler &io_handler,
std::string &line) override;
- ConstString IOHandlerGetControlSequence(char ch) override {
+ llvm::StringRef IOHandlerGetControlSequence(char ch) override {
+ static constexpr llvm::StringLiteral control_sequence("quit\n");
if (ch == 'd')
- return ConstString("quit\n");
- return ConstString();
+ return control_sequence;
+ return {};
}
void GetProcessOutput();
diff --git a/lldb/source/API/SBCommandInterpreter.cpp b/lldb/source/API/SBCommandInterpreter.cpp
index 9ea72007c71bd..396c0eef0603d 100644
--- a/lldb/source/API/SBCommandInterpreter.cpp
+++ b/lldb/source/API/SBCommandInterpreter.cpp
@@ -155,11 +155,12 @@ bool SBCommandInterpreter::InterruptCommand() {
const char *SBCommandInterpreter::GetIOHandlerControlSequence(char ch) {
LLDB_INSTRUMENT_VA(this, ch);
- return (IsValid()
- ? m_opaque_ptr->GetDebugger()
- .GetTopIOHandlerControlSequence(ch)
- .GetCString()
- : nullptr);
+ if (!IsValid())
+ return nullptr;
+
+ return ConstString(
+ m_opaque_ptr->GetDebugger().GetTopIOHandlerControlSequence(ch))
+ .GetCString();
}
lldb::ReturnStatus
diff --git a/lldb/source/Core/Debugger.cpp b/lldb/source/Core/Debugger.cpp
index 2487304dfc199..535b276cd8c75 100644
--- a/lldb/source/Core/Debugger.cpp
+++ b/lldb/source/Core/Debugger.cpp
@@ -1129,7 +1129,7 @@ void Debugger::PrintAsync(const char *s, size_t len, bool is_stdout) {
}
}
-ConstString Debugger::GetTopIOHandlerControlSequence(char ch) {
+llvm::StringRef Debugger::GetTopIOHandlerControlSequence(char ch) {
return m_io_handler_stack.GetTopIOHandlerControlSequence(ch);
}
diff --git a/lldb/source/Expression/REPL.cpp b/lldb/source/Expression/REPL.cpp
index 9bb7461e9ad79..052714f0a6700 100644
--- a/lldb/source/Expression/REPL.cpp
+++ b/lldb/source/Expression/REPL.cpp
@@ -117,10 +117,11 @@ const char *REPL::IOHandlerGetFixIndentationCharacters() {
return (m_enable_auto_indent ? GetAutoIndentCharacters() : nullptr);
}
-ConstString REPL::IOHandlerGetControlSequence(char ch) {
+llvm::StringRef REPL::IOHandlerGetControlSequence(char ch) {
+ static constexpr llvm::StringLiteral control_sequence(":quit\n");
if (ch == 'd')
- return ConstString(":quit\n");
- return ConstString();
+ return control_sequence;
+ return {};
}
const char *REPL::IOHandlerGetCommandPrefix() { return ":"; }
diff --git a/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPythonImpl.h b/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPythonImpl.h
index b810bdbd9a0c7..fe75f69fa2a03 100644
--- a/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPythonImpl.h
+++ b/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPythonImpl.h
@@ -434,10 +434,11 @@ class IOHandlerPythonInterpreter : public IOHandler {
~IOHandlerPythonInterpreter() override = default;
- ConstString GetControlSequence(char ch) override {
+ llvm::StringRef GetControlSequence(char ch) override {
+ static constexpr llvm::StringLiteral control_sequence("quit()\n");
if (ch == 'd')
- return ConstString("quit()\n");
- return ConstString();
+ return control_sequence;
+ return {};
}
void Run() override {
More information about the lldb-commits
mailing list