JDevlieghere created this revision.
JDevlieghere added reviewers: labath, clayborg.
Herald added a project: All.
JDevlieghere requested review of this revision.
I was looking into PrintAsync because Pavel brought it up in D121500
<https://reviews.llvm.org/D121500>. The whole point seems to be to let the
IOHandler deal with printing the output. In that context it didn't make much
sense (to me) that this is using the debugger's output and error stream rather
than the one from the IOHandler.
https://reviews.llvm.org/D121536
Files:
lldb/include/lldb/Core/IOHandler.h
lldb/source/Core/Debugger.cpp
lldb/source/Core/IOHandler.cpp
Index: lldb/source/Core/IOHandler.cpp
===================================================================
--- lldb/source/Core/IOHandler.cpp
+++ lldb/source/Core/IOHandler.cpp
@@ -122,14 +122,18 @@
void IOHandler::WaitForPop() { m_popped.WaitForValueEqualTo(true); }
-void IOHandlerStack::PrintAsync(Stream *stream, const char *s, size_t len) {
- if (stream) {
- std::lock_guard<std::recursive_mutex> guard(m_mutex);
- if (m_top)
- m_top->PrintAsync(stream, s, len);
- else
- stream->Write(s, len);
- }
+void IOHandler::PrintAsync(const char *s, size_t len, bool is_stdout) {
+ lldb::StreamFileSP stream = is_stdout ? m_output_sp : m_error_sp;
+ stream->Write(s, len);
+ stream->Flush();
+}
+
+bool IOHandlerStack::PrintAsync(const char *s, size_t len, bool is_stdout) {
+ std::lock_guard<std::recursive_mutex> guard(m_mutex);
+ if (!m_top)
+ return false;
+ m_top->PrintAsync(s, len, is_stdout);
+ return true;
}
IOHandlerConfirm::IOHandlerConfirm(Debugger &debugger, llvm::StringRef prompt,
@@ -612,11 +616,12 @@
#endif
}
-void IOHandlerEditline::PrintAsync(Stream *stream, const char *s, size_t len) {
+void IOHandlerEditline::PrintAsync(const char *s, size_t len, bool is_stdout) {
#if LLDB_ENABLE_LIBEDIT
- if (m_editline_up)
- m_editline_up->PrintAsync(stream, s, len);
- else
+ if (m_editline_up) {
+ lldb::StreamFileSP stream = is_stdout ? m_output_sp : m_error_sp;
+ m_editline_up->PrintAsync(stream.get(), s, len);
+ } else
#endif
{
#ifdef _WIN32
@@ -633,7 +638,7 @@
SetConsoleCursorPosition(console_handle, coord);
}
#endif
- IOHandler::PrintAsync(stream, s, len);
+ IOHandler::PrintAsync(s, len, is_stdout);
#ifdef _WIN32
if (prompt)
IOHandler::PrintAsync(GetOutputStreamFileSP().get(), prompt,
Index: lldb/source/Core/Debugger.cpp
===================================================================
--- lldb/source/Core/Debugger.cpp
+++ lldb/source/Core/Debugger.cpp
@@ -1068,9 +1068,12 @@
}
void Debugger::PrintAsync(const char *s, size_t len, bool is_stdout) {
- lldb_private::StreamFile &stream =
- is_stdout ? GetOutputStream() : GetErrorStream();
- m_io_handler_stack.PrintAsync(&stream, s, len);
+ bool printed = m_io_handler_stack.PrintAsync(s, len, is_stdout);
+ if (!printed) {
+ lldb::StreamFileSP stream =
+ is_stdout ? m_output_stream_sp : m_error_stream_sp;
+ stream->Write(s, len);
+ }
}
ConstString Debugger::GetTopIOHandlerControlSequence(char ch) {
Index: lldb/include/lldb/Core/IOHandler.h
===================================================================
--- lldb/include/lldb/Core/IOHandler.h
+++ lldb/include/lldb/Core/IOHandler.h
@@ -163,10 +163,7 @@
void WaitForPop();
- virtual void PrintAsync(Stream *stream, const char *s, size_t len) {
- stream->Write(s, len);
- stream->Flush();
- }
+ virtual void PrintAsync(const char *s, size_t len, bool is_stdout);
protected:
Debugger &m_debugger;
@@ -415,7 +412,7 @@
uint32_t GetCurrentLineIndex() const;
- void PrintAsync(Stream *stream, const char *s, size_t len) override;
+ void PrintAsync(const char *s, size_t len, bool is_stdout) override;
private:
#if LLDB_ENABLE_LIBEDIT
@@ -540,7 +537,7 @@
return ((m_top != nullptr) ? m_top->GetHelpPrologue() : nullptr);
}
- void PrintAsync(Stream *stream, const char *s, size_t len);
+ bool PrintAsync(const char *s, size_t len, bool is_stdout);
protected:
typedef std::vector<lldb::IOHandlerSP> collection;
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits