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 { _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits