1 //===-- CommandReturnObject.cpp ---------------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #include "lldb/Interpreter/CommandReturnObject.h"
11 
12 // C Includes
13 // C++ Includes
14 // Other libraries and framework includes
15 // Project includes
16 #include "lldb/Core/StreamString.h"
17 
18 using namespace lldb;
19 using namespace lldb_private;
20 
21 CommandReturnObject::CommandReturnObject () :
22     m_out_stream (),
23     m_err_stream (),
24     m_status (eReturnStatusStarted),
25     m_did_change_process_state (false)
26 {
27 }
28 
29 CommandReturnObject::~CommandReturnObject ()
30 {
31 }
32 
33 void
34 CommandReturnObject::AppendErrorWithFormat (const char *format, ...)
35 {
36     va_list args;
37     va_start (args, format);
38     StreamString sstrm;
39     sstrm.PrintfVarArg(format, args);
40     va_end (args);
41 
42     GetErrorStream().Printf("error: %s", sstrm.GetData());
43 }
44 
45 void
46 CommandReturnObject::AppendMessageWithFormat (const char *format, ...)
47 {
48     va_list args;
49     va_start (args, format);
50     StreamString sstrm;
51     sstrm.PrintfVarArg(format, args);
52     va_end (args);
53 
54     GetOutputStream().Printf("%s", sstrm.GetData());
55 }
56 
57 void
58 CommandReturnObject::AppendWarningWithFormat (const char *format, ...)
59 {
60     va_list args;
61     va_start (args, format);
62     StreamString sstrm;
63     sstrm.PrintfVarArg(format, args);
64     va_end (args);
65 
66     GetErrorStream().Printf("warning: %s", sstrm.GetData());
67 }
68 
69 void
70 CommandReturnObject::AppendMessage (const char *in_string, int len)
71 {
72     if (len < 0)
73         len = ::strlen (in_string);
74     GetOutputStream().Printf("%*.*s\n", len, len, in_string);
75 }
76 
77 void
78 CommandReturnObject::AppendWarning (const char *in_string, int len)
79 {
80     if (len < 0)
81         len = ::strlen (in_string);
82     GetErrorStream().Printf("warning: %*.*s\n", len, len, in_string);
83 }
84 
85 // Similar to AppendWarning, but do not prepend 'warning: ' to message, and
86 // don't append "\n" to the end of it.
87 
88 void
89 CommandReturnObject::AppendRawWarning (const char *in_string, int len)
90 {
91     if (len < 0)
92         len = ::strlen (in_string);
93     GetErrorStream().Printf("%*.*s", len, len, in_string);
94 }
95 
96 void
97 CommandReturnObject::AppendError (const char *in_string, int len)
98 {
99     if (!in_string)
100         return;
101 
102     if (len < 0)
103         len = ::strlen (in_string);
104     GetErrorStream().Printf ("error: %*.*s\n", len, len, in_string);
105 }
106 
107 // Similar to AppendError, but do not prepend 'Error: ' to message, and
108 // don't append "\n" to the end of it.
109 
110 void
111 CommandReturnObject::AppendRawError (const char *in_string, int len)
112 {
113     if (len < 0)
114         len = ::strlen (in_string);
115     GetErrorStream().Printf ("%*.*s", len, len, in_string);
116 }
117 
118 void
119 CommandReturnObject::SetStatus (ReturnStatus status)
120 {
121     m_status = status;
122 }
123 
124 ReturnStatus
125 CommandReturnObject::GetStatus ()
126 {
127     return m_status;
128 }
129 
130 bool
131 CommandReturnObject::Succeeded ()
132 {
133     return m_status <= eReturnStatusSuccessContinuingResult;
134 }
135 
136 bool
137 CommandReturnObject::HasResult ()
138 {
139     return (m_status == eReturnStatusSuccessFinishResult ||
140             m_status == eReturnStatusSuccessContinuingResult);
141 }
142 
143 void
144 CommandReturnObject::Clear()
145 {
146     lldb::StreamSP stream_sp;
147     stream_sp = m_out_stream.GetStreamAtIndex (eStreamStringIndex);
148     if (stream_sp)
149         static_cast<StreamString *>(stream_sp.get())->Clear();
150     stream_sp = m_err_stream.GetStreamAtIndex (eStreamStringIndex);
151     if (stream_sp)
152         static_cast<StreamString *>(stream_sp.get())->Clear();
153     m_status = eReturnStatusStarted;
154     m_did_change_process_state = false;
155 }
156 
157 bool
158 CommandReturnObject::GetDidChangeProcessState ()
159 {
160     return m_did_change_process_state;
161 }
162 
163 void
164 CommandReturnObject::SetDidChangeProcessState (bool b)
165 {
166     m_did_change_process_state = b;
167 }
168 
169