[Lldb-commits] [PATCH] D82396: [lldb/ScriptInterpreter] Extract IO redirection logic and move it out of ScriptInterpreterPython (NFC)
Pavel Labath via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Thu Jun 25 01:35:49 PDT 2020
labath accepted this revision.
labath added a comment.
This revision is now accepted and ready to land.
I think this looks good, though it looks like you have uploaded an partial patch...
================
Comment at: lldb/include/lldb/Interpreter/ScriptInterpreter.h:57-58
private:
+ friend std::unique_ptr<ScriptInterpreterIORedirect>
+ std::make_unique<ScriptInterpreterIORedirect>();
+
----------------
If that works, I suppose it's fine. But I wouldn't be surprised if this trick backfires on some STL implementations.
I think that making an exception for make_unique on classes with private constructors is fine (we already have a bunch of classes like that)...
================
Comment at: lldb/source/Interpreter/ScriptInterpreter.cpp:128-168
if (result) {
- m_input_file_sp = debugger.GetInputFileSP();
+ redirect->m_input_file_sp = debugger.GetInputFileSP();
Pipe pipe;
Status pipe_result = pipe.CreateNew(false);
#if defined(_WIN32)
lldb::file_t read_file = pipe.GetReadNativeHandle();
----------------
Given that none of this fails (though maybe it should), I think it would be cleaner to keep it in the constructor. You can still keep the static factory thing as a wrapper if you want symmetry.
================
Comment at: lldb/source/Interpreter/ScriptInterpreter.cpp:184-190
+ std::unique_ptr<ScriptInterpreterIORedirect> redirect =
+ std::make_unique<ScriptInterpreterIORedirect>();
+ redirect->m_input_file_sp = std::move(nullin.get());
+ redirect->m_error_file_sp = redirect->m_output_file_sp =
std::make_shared<StreamFile>(std::move(nullout.get()));
+
+ return redirect;
----------------
Similarly, I would find this better as `return std::make_unique<ScriptInterpreterIORedirect>(std::move(nullin.get()), std::move(nullout.get()))` (with an appropriate constructor. Mainly because then I don't need to worry about what will the destructor of ScriptInterpreterIORedirect do if we return with the object in an partially initialized state.
Repository:
rLLDB LLDB
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D82396/new/
https://reviews.llvm.org/D82396
More information about the lldb-commits
mailing list