[lldb/ScriptInterpreter] Let the IORedirect factory handle IO being disabled.

Have one factory method that decides how to initialize the
ScriptInterpreterIORedirect object based on whether IO is enabled or
disabled.
This commit is contained in:
Jonas Devlieghere
2020-06-25 09:51:55 -07:00
parent 79d7e9c7d0
commit 842283652e
3 changed files with 12 additions and 18 deletions

View File

@@ -36,13 +36,11 @@ private:
class ScriptInterpreterIORedirect {
public:
/// Create an IO redirect with /dev/null as input, output and error file.
static llvm::Expected<std::unique_ptr<ScriptInterpreterIORedirect>> Create();
/// Create an IO redirect that redirects the output to the command return
/// object if set or to the debugger otherwise.
/// Create an IO redirect. If IO is enabled, this will redirects the output
/// to the command return object if set or to the debugger otherwise. If IO
/// is disabled, it will redirect all IO to /dev/null.
static llvm::Expected<std::unique_ptr<ScriptInterpreterIORedirect>>
Create(Debugger &debugger, CommandReturnObject *result);
Create(bool enable_io, Debugger &debugger, CommandReturnObject *result);
~ScriptInterpreterIORedirect();

View File

@@ -119,7 +119,12 @@ static void ReadThreadBytesReceived(void *baton, const void *src,
}
llvm::Expected<std::unique_ptr<ScriptInterpreterIORedirect>>
ScriptInterpreterIORedirect::Create() {
ScriptInterpreterIORedirect::Create(bool enable_io, Debugger &debugger,
CommandReturnObject *result) {
if (enable_io)
return std::unique_ptr<ScriptInterpreterIORedirect>(
new ScriptInterpreterIORedirect(debugger, result));
auto nullin = FileSystem::Instance().Open(FileSpec(FileSystem::DEV_NULL),
File::eOpenOptionRead);
if (!nullin)
@@ -134,13 +139,6 @@ ScriptInterpreterIORedirect::Create() {
new ScriptInterpreterIORedirect(std::move(*nullin), std::move(*nullout)));
}
llvm::Expected<std::unique_ptr<ScriptInterpreterIORedirect>>
ScriptInterpreterIORedirect::Create(Debugger &debugger,
CommandReturnObject *result) {
return std::unique_ptr<ScriptInterpreterIORedirect>(
new ScriptInterpreterIORedirect(debugger, result));
}
ScriptInterpreterIORedirect::ScriptInterpreterIORedirect(
std::unique_ptr<File> input, std::unique_ptr<File> output)
: m_input_file_sp(std::move(input)),

View File

@@ -912,10 +912,8 @@ bool ScriptInterpreterPythonImpl::ExecuteOneLine(
// we use the following more complicated method to pass the command string
// directly down to Python.
llvm::Expected<std::unique_ptr<ScriptInterpreterIORedirect>>
io_redirect_or_error =
options.GetEnableIO()
? ScriptInterpreterIORedirect::Create(m_debugger, result)
: ScriptInterpreterIORedirect::Create();
io_redirect_or_error = ScriptInterpreterIORedirect::Create(
options.GetEnableIO(), m_debugger, result);
if (!io_redirect_or_error) {
if (result)
result->AppendErrorWithFormatv(