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