[Lldb-commits] [PATCH] D159031: [LLDB] Fix IOHandlerEditline::GetCurrentLines()
walter erquinigo via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Mon Aug 28 15:48:49 PDT 2023
wallace created this revision.
wallace added reviewers: bulbazord, aprantl, JDevlieghere.
Herald added a project: All.
wallace requested review of this revision.
Herald added a project: LLDB.
Herald added a subscriber: lldb-commits.
This method was working as expected if `LLDB_ENABLE_LIBEDIT` is false, however, if it was true, then the variable `m_current_lines_ptr` was always pointing to an empty list, because Editline only updates its contents once the full input has been completed (see https://github.com/llvm/llvm-project/blob/main/lldb/source/Host/common/Editline.cpp#L1576).
A simple fix is to invoke `Editline::GetInputAsStringList()` from `GetCurrentLines()`, which is already used in many places as the common way to get the full input list.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D159031
Files:
lldb/include/lldb/Core/IOHandler.h
lldb/include/lldb/Host/Editline.h
lldb/source/Core/IOHandler.cpp
lldb/source/Expression/REPL.cpp
Index: lldb/source/Expression/REPL.cpp
===================================================================
--- lldb/source/Expression/REPL.cpp
+++ lldb/source/Expression/REPL.cpp
@@ -528,17 +528,15 @@
current_code.append(m_code.CopyList());
IOHandlerEditline &editline = static_cast<IOHandlerEditline &>(io_handler);
- const StringList *current_lines = editline.GetCurrentLines();
- if (current_lines) {
- const uint32_t current_line_idx = editline.GetCurrentLineIndex();
-
- if (current_line_idx < current_lines->GetSize()) {
- for (uint32_t i = 0; i < current_line_idx; ++i) {
- const char *line_cstr = current_lines->GetStringAtIndex(i);
- if (line_cstr) {
- current_code.append("\n");
- current_code.append(line_cstr);
- }
+ StringList current_lines = editline.GetCurrentLines();
+ const uint32_t current_line_idx = editline.GetCurrentLineIndex();
+
+ if (current_line_idx < current_lines.GetSize()) {
+ for (uint32_t i = 0; i < current_line_idx; ++i) {
+ const char *line_cstr = current_lines.GetStringAtIndex(i);
+ if (line_cstr) {
+ current_code.append("\n");
+ current_code.append(line_cstr);
}
}
}
Index: lldb/source/Core/IOHandler.cpp
===================================================================
--- lldb/source/Core/IOHandler.cpp
+++ lldb/source/Core/IOHandler.cpp
@@ -508,6 +508,16 @@
return m_curr_line_idx;
}
+StringList IOHandlerEditline::GetCurrentLines() const {
+#if LLDB_ENABLE_LIBEDIT
+ if (m_editline_up)
+ return m_editline_up->GetInputAsStringList();
+#endif
+ if (m_current_lines_ptr)
+ return *m_current_lines_ptr;
+ return StringList();
+}
+
bool IOHandlerEditline::GetLines(StringList &lines, bool &interrupted) {
m_current_lines_ptr = &lines;
Index: lldb/include/lldb/Host/Editline.h
===================================================================
--- lldb/include/lldb/Host/Editline.h
+++ lldb/include/lldb/Host/Editline.h
@@ -227,6 +227,9 @@
void PrintAsync(Stream *stream, const char *s, size_t len);
+ /// Convert the current input lines into a UTF8 StringList
+ StringList GetInputAsStringList(int line_count = UINT32_MAX);
+
private:
/// Sets the lowest line number for multi-line editing sessions. A value of
/// zero suppresses
@@ -282,9 +285,6 @@
/// Save the line currently being edited
void SaveEditedLine();
- /// Convert the current input lines into a UTF8 StringList
- StringList GetInputAsStringList(int line_count = UINT32_MAX);
-
/// Replaces the current multi-line session with the next entry from history.
unsigned char RecallHistory(HistoryOperation op);
Index: lldb/include/lldb/Core/IOHandler.h
===================================================================
--- lldb/include/lldb/Core/IOHandler.h
+++ lldb/include/lldb/Core/IOHandler.h
@@ -403,7 +403,7 @@
void SetInterruptExits(bool b) { m_interrupt_exits = b; }
- const StringList *GetCurrentLines() const { return m_current_lines_ptr; }
+ StringList GetCurrentLines() const;
uint32_t GetCurrentLineIndex() const;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D159031.554081.patch
Type: text/x-patch
Size: 3109 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20230828/dfec864b/attachment.bin>
More information about the lldb-commits
mailing list