1 //===-- CommandReturnObject.cpp ---------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #include "lldb/Interpreter/CommandReturnObject.h"
14 // Other libraries and framework includes
16 #include "lldb/Core/Error.h"
17 #include "lldb/Core/StreamString.h"
20 using namespace lldb_private;
23 DumpStringToStreamWithNewline (Stream &strm, const std::string &s, bool add_newline_if_empty)
25 bool add_newline = false;
28 add_newline = add_newline_if_empty;
32 // We already checked for empty above, now make sure there is a newline
33 // in the error, and if there isn't one, add one.
34 strm.Write(s.c_str(), s.size());
36 const char last_char = *s.rbegin();
37 add_newline = last_char != '\n' && last_char != '\r';
45 CommandReturnObject::CommandReturnObject () :
48 m_status (eReturnStatusStarted),
49 m_did_change_process_state (false),
54 CommandReturnObject::~CommandReturnObject ()
59 CommandReturnObject::AppendErrorWithFormat (const char *format, ...)
64 va_start (args, format);
66 sstrm.PrintfVarArg(format, args);
70 const std::string &s = sstrm.GetString();
73 Stream &error_strm = GetErrorStream();
74 error_strm.PutCString ("error: ");
75 DumpStringToStreamWithNewline (error_strm, s, false);
80 CommandReturnObject::AppendMessageWithFormat (const char *format, ...)
85 va_start (args, format);
87 sstrm.PrintfVarArg(format, args);
90 GetOutputStream().Printf("%s", sstrm.GetData());
94 CommandReturnObject::AppendWarningWithFormat (const char *format, ...)
99 va_start (args, format);
101 sstrm.PrintfVarArg(format, args);
104 GetErrorStream().Printf("warning: %s", sstrm.GetData());
108 CommandReturnObject::AppendMessage (const char *in_string)
112 GetOutputStream().Printf("%s\n", in_string);
116 CommandReturnObject::AppendWarning (const char *in_string)
118 if (!in_string || *in_string == '\0')
120 GetErrorStream().Printf("warning: %s\n", in_string);
123 // Similar to AppendWarning, but do not prepend 'warning: ' to message, and
124 // don't append "\n" to the end of it.
127 CommandReturnObject::AppendRawWarning (const char *in_string)
129 if (in_string && in_string[0])
130 GetErrorStream().PutCString(in_string);
134 CommandReturnObject::AppendError (const char *in_string)
136 if (!in_string || *in_string == '\0')
138 GetErrorStream().Printf ("error: %s\n", in_string);
142 CommandReturnObject::SetError (const Error &error, const char *fallback_error_cstr)
144 const char *error_cstr = error.AsCString();
145 if (error_cstr == nullptr)
146 error_cstr = fallback_error_cstr;
147 SetError(error_cstr);
151 CommandReturnObject::SetError (const char *error_cstr)
155 AppendError (error_cstr);
156 SetStatus (eReturnStatusFailed);
160 // Similar to AppendError, but do not prepend 'Error: ' to message, and
161 // don't append "\n" to the end of it.
164 CommandReturnObject::AppendRawError (const char *in_string)
166 if (in_string && in_string[0])
167 GetErrorStream().PutCString(in_string);
171 CommandReturnObject::SetStatus (ReturnStatus status)
177 CommandReturnObject::GetStatus ()
183 CommandReturnObject::Succeeded ()
185 return m_status <= eReturnStatusSuccessContinuingResult;
189 CommandReturnObject::HasResult ()
191 return (m_status == eReturnStatusSuccessFinishResult ||
192 m_status == eReturnStatusSuccessContinuingResult);
196 CommandReturnObject::Clear()
198 lldb::StreamSP stream_sp;
199 stream_sp = m_out_stream.GetStreamAtIndex (eStreamStringIndex);
201 static_cast<StreamString *>(stream_sp.get())->Clear();
202 stream_sp = m_err_stream.GetStreamAtIndex (eStreamStringIndex);
204 static_cast<StreamString *>(stream_sp.get())->Clear();
205 m_status = eReturnStatusStarted;
206 m_did_change_process_state = false;
207 m_interactive = true;
211 CommandReturnObject::GetDidChangeProcessState ()
213 return m_did_change_process_state;
217 CommandReturnObject::SetDidChangeProcessState (bool b)
219 m_did_change_process_state = b;
224 CommandReturnObject::GetInteractive () const
226 return m_interactive;
230 CommandReturnObject::SetInteractive (bool b)