180814287SRaphael Isemann //===-- SBCommandReturnObject.cpp -----------------------------------------===//
230fdc8d8SChris Lattner //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
630fdc8d8SChris Lattner //
730fdc8d8SChris Lattner //===----------------------------------------------------------------------===//
830fdc8d8SChris Lattner 
9ca93cc1dSEli Friedman #include "lldb/API/SBCommandReturnObject.h"
10bd4bf82aSJonas Devlieghere #include "Utils.h"
11eff81a47SEnrico Granata #include "lldb/API/SBError.h"
129eb13719SLawrence D'Anna #include "lldb/API/SBFile.h"
13dde9cff3SCaroline Tice #include "lldb/API/SBStream.h"
14dde9cff3SCaroline Tice #include "lldb/Interpreter/CommandReturnObject.h"
153474ebc4SPavel Labath #include "lldb/Utility/ConstString.h"
16*1755f5b1SJonas Devlieghere #include "lldb/Utility/Instrumentation.h"
1797206d57SZachary Turner #include "lldb/Utility/Status.h"
1830fdc8d8SChris Lattner 
1930fdc8d8SChris Lattner using namespace lldb;
206611103cSGreg Clayton using namespace lldb_private;
2130fdc8d8SChris Lattner 
224112b473SJan Kratochvil class lldb_private::SBCommandReturnObjectImpl {
234112b473SJan Kratochvil public:
SBCommandReturnObjectImpl()249494c510SJonas Devlieghere   SBCommandReturnObjectImpl() : m_ptr(new CommandReturnObject(false)) {}
SBCommandReturnObjectImpl(CommandReturnObject & ref)254112b473SJan Kratochvil   SBCommandReturnObjectImpl(CommandReturnObject &ref)
264112b473SJan Kratochvil       : m_ptr(&ref), m_owned(false) {}
SBCommandReturnObjectImpl(const SBCommandReturnObjectImpl & rhs)274112b473SJan Kratochvil   SBCommandReturnObjectImpl(const SBCommandReturnObjectImpl &rhs)
284112b473SJan Kratochvil       : m_ptr(new CommandReturnObject(*rhs.m_ptr)), m_owned(rhs.m_owned) {}
operator =(const SBCommandReturnObjectImpl & rhs)294112b473SJan Kratochvil   SBCommandReturnObjectImpl &operator=(const SBCommandReturnObjectImpl &rhs) {
304112b473SJan Kratochvil     SBCommandReturnObjectImpl copy(rhs);
314112b473SJan Kratochvil     std::swap(*this, copy);
324112b473SJan Kratochvil     return *this;
334112b473SJan Kratochvil   }
344112b473SJan Kratochvil   // rvalue ctor+assignment are not used by SBCommandReturnObject.
~SBCommandReturnObjectImpl()354112b473SJan Kratochvil   ~SBCommandReturnObjectImpl() {
364112b473SJan Kratochvil     if (m_owned)
374112b473SJan Kratochvil       delete m_ptr;
384112b473SJan Kratochvil   }
394112b473SJan Kratochvil 
operator *() const404112b473SJan Kratochvil   CommandReturnObject &operator*() const { return *m_ptr; }
414112b473SJan Kratochvil 
424112b473SJan Kratochvil private:
434112b473SJan Kratochvil   CommandReturnObject *m_ptr;
449494c510SJonas Devlieghere   bool m_owned = true;
454112b473SJan Kratochvil };
464112b473SJan Kratochvil 
SBCommandReturnObject()47b9c1b51eSKate Stone SBCommandReturnObject::SBCommandReturnObject()
484112b473SJan Kratochvil     : m_opaque_up(new SBCommandReturnObjectImpl()) {
49*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this);
50baf5664fSJonas Devlieghere }
5130fdc8d8SChris Lattner 
SBCommandReturnObject(CommandReturnObject & ref)524112b473SJan Kratochvil SBCommandReturnObject::SBCommandReturnObject(CommandReturnObject &ref)
534112b473SJan Kratochvil     : m_opaque_up(new SBCommandReturnObjectImpl(ref)) {
54*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, ref);
554112b473SJan Kratochvil }
564112b473SJan Kratochvil 
SBCommandReturnObject(const SBCommandReturnObject & rhs)57a3436f73SKazu Hirata SBCommandReturnObject::SBCommandReturnObject(const SBCommandReturnObject &rhs) {
58*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, rhs);
59baf5664fSJonas Devlieghere 
60bd4bf82aSJonas Devlieghere   m_opaque_up = clone(rhs.m_opaque_up);
61efabb123SGreg Clayton }
62efabb123SGreg Clayton 
634112b473SJan Kratochvil SBCommandReturnObject &SBCommandReturnObject::
operator =(const SBCommandReturnObject & rhs)64b9c1b51eSKate Stone operator=(const SBCommandReturnObject &rhs) {
65*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, rhs);
66baf5664fSJonas Devlieghere 
67bd4bf82aSJonas Devlieghere   if (this != &rhs)
68bd4bf82aSJonas Devlieghere     m_opaque_up = clone(rhs.m_opaque_up);
69d232abc3SJonas Devlieghere   return *this;
70efabb123SGreg Clayton }
71efabb123SGreg Clayton 
724112b473SJan Kratochvil SBCommandReturnObject::~SBCommandReturnObject() = default;
734112b473SJan Kratochvil 
IsValid() const74baf5664fSJonas Devlieghere bool SBCommandReturnObject::IsValid() const {
75*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this);
767f5237bcSPavel Labath   return this->operator bool();
777f5237bcSPavel Labath }
operator bool() const787f5237bcSPavel Labath SBCommandReturnObject::operator bool() const {
79*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this);
80baf5664fSJonas Devlieghere 
81e7bef0f1SJan Kratochvil   // This method is not useful but it needs to stay to keep SB API stable.
82e7bef0f1SJan Kratochvil   return true;
83baf5664fSJonas Devlieghere }
8430fdc8d8SChris Lattner 
GetOutput()85b9c1b51eSKate Stone const char *SBCommandReturnObject::GetOutput() {
86*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this);
87baf5664fSJonas Devlieghere 
884112b473SJan Kratochvil   ConstString output(ref().GetOutputData());
8972ef113dSPavel Labath   return output.AsCString(/*value_if_empty*/ "");
90ceb6b139SCaroline Tice }
91ceb6b139SCaroline Tice 
GetError()92b9c1b51eSKate Stone const char *SBCommandReturnObject::GetError() {
93*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this);
94baf5664fSJonas Devlieghere 
954112b473SJan Kratochvil   ConstString output(ref().GetErrorData());
9672ef113dSPavel Labath   return output.AsCString(/*value_if_empty*/ "");
97ceb6b139SCaroline Tice }
98ceb6b139SCaroline Tice 
GetOutputSize()99b9c1b51eSKate Stone size_t SBCommandReturnObject::GetOutputSize() {
100*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this);
101baf5664fSJonas Devlieghere 
1024112b473SJan Kratochvil   return ref().GetOutputData().size();
10330fdc8d8SChris Lattner }
10430fdc8d8SChris Lattner 
GetErrorSize()105b9c1b51eSKate Stone size_t SBCommandReturnObject::GetErrorSize() {
106*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this);
107baf5664fSJonas Devlieghere 
1084112b473SJan Kratochvil   return ref().GetErrorData().size();
10930fdc8d8SChris Lattner }
11030fdc8d8SChris Lattner 
PutOutput(FILE * fh)111b9c1b51eSKate Stone size_t SBCommandReturnObject::PutOutput(FILE *fh) {
112*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, fh);
113b9c1b51eSKate Stone   if (fh) {
11430fdc8d8SChris Lattner     size_t num_bytes = GetOutputSize();
11530fdc8d8SChris Lattner     if (num_bytes)
11630fdc8d8SChris Lattner       return ::fprintf(fh, "%s", GetOutput());
11730fdc8d8SChris Lattner   }
11830fdc8d8SChris Lattner   return 0;
11930fdc8d8SChris Lattner }
12030fdc8d8SChris Lattner 
PutOutput(FileSP file_sp)1219eb13719SLawrence D'Anna size_t SBCommandReturnObject::PutOutput(FileSP file_sp) {
122*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, file_sp);
1239eb13719SLawrence D'Anna   if (!file_sp)
1249eb13719SLawrence D'Anna     return 0;
1259eb13719SLawrence D'Anna   return file_sp->Printf("%s", GetOutput());
1269eb13719SLawrence D'Anna }
1279eb13719SLawrence D'Anna 
PutOutput(SBFile file)1289eb13719SLawrence D'Anna size_t SBCommandReturnObject::PutOutput(SBFile file) {
129*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, file);
1309eb13719SLawrence D'Anna   if (!file.m_opaque_sp)
1319eb13719SLawrence D'Anna     return 0;
1329eb13719SLawrence D'Anna   return file.m_opaque_sp->Printf("%s", GetOutput());
1339eb13719SLawrence D'Anna }
1349eb13719SLawrence D'Anna 
PutError(FILE * fh)135b9c1b51eSKate Stone size_t SBCommandReturnObject::PutError(FILE *fh) {
136*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, fh);
137b9c1b51eSKate Stone   if (fh) {
13830fdc8d8SChris Lattner     size_t num_bytes = GetErrorSize();
13930fdc8d8SChris Lattner     if (num_bytes)
14030fdc8d8SChris Lattner       return ::fprintf(fh, "%s", GetError());
14130fdc8d8SChris Lattner   }
14230fdc8d8SChris Lattner   return 0;
14330fdc8d8SChris Lattner }
14430fdc8d8SChris Lattner 
PutError(FileSP file_sp)1459eb13719SLawrence D'Anna size_t SBCommandReturnObject::PutError(FileSP file_sp) {
146*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, file_sp);
1479eb13719SLawrence D'Anna   if (!file_sp)
1489eb13719SLawrence D'Anna     return 0;
1499eb13719SLawrence D'Anna   return file_sp->Printf("%s", GetError());
1509eb13719SLawrence D'Anna }
1519eb13719SLawrence D'Anna 
PutError(SBFile file)1529eb13719SLawrence D'Anna size_t SBCommandReturnObject::PutError(SBFile file) {
153*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, file);
1549eb13719SLawrence D'Anna   if (!file.m_opaque_sp)
1559eb13719SLawrence D'Anna     return 0;
1569eb13719SLawrence D'Anna   return file.m_opaque_sp->Printf("%s", GetError());
1579eb13719SLawrence D'Anna }
1589eb13719SLawrence D'Anna 
Clear()159b9c1b51eSKate Stone void SBCommandReturnObject::Clear() {
160*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this);
161baf5664fSJonas Devlieghere 
1624112b473SJan Kratochvil   ref().Clear();
16330fdc8d8SChris Lattner }
16430fdc8d8SChris Lattner 
GetStatus()165b9c1b51eSKate Stone lldb::ReturnStatus SBCommandReturnObject::GetStatus() {
166*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this);
167baf5664fSJonas Devlieghere 
1684112b473SJan Kratochvil   return ref().GetStatus();
16930fdc8d8SChris Lattner }
17030fdc8d8SChris Lattner 
SetStatus(lldb::ReturnStatus status)171b9c1b51eSKate Stone void SBCommandReturnObject::SetStatus(lldb::ReturnStatus status) {
172*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, status);
173baf5664fSJonas Devlieghere 
1744112b473SJan Kratochvil   ref().SetStatus(status);
17570f11f88SJim Ingham }
17670f11f88SJim Ingham 
Succeeded()177b9c1b51eSKate Stone bool SBCommandReturnObject::Succeeded() {
178*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this);
179baf5664fSJonas Devlieghere 
1804112b473SJan Kratochvil   return ref().Succeeded();
18130fdc8d8SChris Lattner }
18230fdc8d8SChris Lattner 
HasResult()183b9c1b51eSKate Stone bool SBCommandReturnObject::HasResult() {
184*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this);
185baf5664fSJonas Devlieghere 
1864112b473SJan Kratochvil   return ref().HasResult();
18730fdc8d8SChris Lattner }
18830fdc8d8SChris Lattner 
AppendMessage(const char * message)189b9c1b51eSKate Stone void SBCommandReturnObject::AppendMessage(const char *message) {
190*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, message);
191baf5664fSJonas Devlieghere 
1924112b473SJan Kratochvil   ref().AppendMessage(message);
19330fdc8d8SChris Lattner }
19430fdc8d8SChris Lattner 
AppendWarning(const char * message)195b9c1b51eSKate Stone void SBCommandReturnObject::AppendWarning(const char *message) {
196*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, message);
197baf5664fSJonas Devlieghere 
1984112b473SJan Kratochvil   ref().AppendWarning(message);
19921dfcd9dSEnrico Granata }
20021dfcd9dSEnrico Granata 
operator ->() const201b9c1b51eSKate Stone CommandReturnObject *SBCommandReturnObject::operator->() const {
2024112b473SJan Kratochvil   return &**m_opaque_up;
2036611103cSGreg Clayton }
2046611103cSGreg Clayton 
get() const205b9c1b51eSKate Stone CommandReturnObject *SBCommandReturnObject::get() const {
2064112b473SJan Kratochvil   return &**m_opaque_up;
2076611103cSGreg Clayton }
2086611103cSGreg Clayton 
operator *() const209b9c1b51eSKate Stone CommandReturnObject &SBCommandReturnObject::operator*() const {
2104112b473SJan Kratochvil   return **m_opaque_up;
21130fdc8d8SChris Lattner }
21230fdc8d8SChris Lattner 
ref() const213b9c1b51eSKate Stone CommandReturnObject &SBCommandReturnObject::ref() const {
2144112b473SJan Kratochvil   return **m_opaque_up;
21530fdc8d8SChris Lattner }
21630fdc8d8SChris Lattner 
GetDescription(SBStream & description)217b9c1b51eSKate Stone bool SBCommandReturnObject::GetDescription(SBStream &description) {
218*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, description);
219baf5664fSJonas Devlieghere 
220da7bc7d0SGreg Clayton   Stream &strm = description.ref();
221da7bc7d0SGreg Clayton 
22297206d57SZachary Turner   description.Printf("Error:  ");
2234112b473SJan Kratochvil   lldb::ReturnStatus status = ref().GetStatus();
224dde9cff3SCaroline Tice   if (status == lldb::eReturnStatusStarted)
225da7bc7d0SGreg Clayton     strm.PutCString("Started");
226dde9cff3SCaroline Tice   else if (status == lldb::eReturnStatusInvalid)
227da7bc7d0SGreg Clayton     strm.PutCString("Invalid");
2284112b473SJan Kratochvil   else if (ref().Succeeded())
229da7bc7d0SGreg Clayton     strm.PutCString("Success");
230dde9cff3SCaroline Tice   else
231da7bc7d0SGreg Clayton     strm.PutCString("Fail");
232dde9cff3SCaroline Tice 
233dde9cff3SCaroline Tice   if (GetOutputSize() > 0)
234da7bc7d0SGreg Clayton     strm.Printf("\nOutput Message:\n%s", GetOutput());
235dde9cff3SCaroline Tice 
236dde9cff3SCaroline Tice   if (GetErrorSize() > 0)
237da7bc7d0SGreg Clayton     strm.Printf("\nError Message:\n%s", GetError());
238dde9cff3SCaroline Tice 
239dde9cff3SCaroline Tice   return true;
240dde9cff3SCaroline Tice }
24185e8b814SJim Ingham 
SetImmediateOutputFile(FILE * fh)242b9c1b51eSKate Stone void SBCommandReturnObject::SetImmediateOutputFile(FILE *fh) {
243*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, fh);
244baf5664fSJonas Devlieghere 
24565fd8f43SStephane Sezer   SetImmediateOutputFile(fh, false);
24685e8b814SJim Ingham }
24785e8b814SJim Ingham 
SetImmediateErrorFile(FILE * fh)248b9c1b51eSKate Stone void SBCommandReturnObject::SetImmediateErrorFile(FILE *fh) {
249*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, fh);
250baf5664fSJonas Devlieghere 
25165fd8f43SStephane Sezer   SetImmediateErrorFile(fh, false);
25265fd8f43SStephane Sezer }
25365fd8f43SStephane Sezer 
SetImmediateOutputFile(FILE * fh,bool transfer_ownership)254b9c1b51eSKate Stone void SBCommandReturnObject::SetImmediateOutputFile(FILE *fh,
255b9c1b51eSKate Stone                                                    bool transfer_ownership) {
256*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, fh, transfer_ownership);
2579eb13719SLawrence D'Anna   FileSP file = std::make_shared<NativeFile>(fh, transfer_ownership);
2589eb13719SLawrence D'Anna   ref().SetImmediateOutputFile(file);
25965fd8f43SStephane Sezer }
26065fd8f43SStephane Sezer 
SetImmediateErrorFile(FILE * fh,bool transfer_ownership)261b9c1b51eSKate Stone void SBCommandReturnObject::SetImmediateErrorFile(FILE *fh,
262b9c1b51eSKate Stone                                                   bool transfer_ownership) {
263*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, fh, transfer_ownership);
2649eb13719SLawrence D'Anna   FileSP file = std::make_shared<NativeFile>(fh, transfer_ownership);
2659eb13719SLawrence D'Anna   ref().SetImmediateErrorFile(file);
2669eb13719SLawrence D'Anna }
267baf5664fSJonas Devlieghere 
SetImmediateOutputFile(SBFile file)2689eb13719SLawrence D'Anna void SBCommandReturnObject::SetImmediateOutputFile(SBFile file) {
269*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, file);
2709eb13719SLawrence D'Anna   ref().SetImmediateOutputFile(file.m_opaque_sp);
2719eb13719SLawrence D'Anna }
2729eb13719SLawrence D'Anna 
SetImmediateErrorFile(SBFile file)2739eb13719SLawrence D'Anna void SBCommandReturnObject::SetImmediateErrorFile(SBFile file) {
274*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, file);
2759eb13719SLawrence D'Anna   ref().SetImmediateErrorFile(file.m_opaque_sp);
2769eb13719SLawrence D'Anna }
2779eb13719SLawrence D'Anna 
SetImmediateOutputFile(FileSP file_sp)2789eb13719SLawrence D'Anna void SBCommandReturnObject::SetImmediateOutputFile(FileSP file_sp) {
279*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, file_sp);
2809eb13719SLawrence D'Anna   SetImmediateOutputFile(SBFile(file_sp));
2819eb13719SLawrence D'Anna }
2829eb13719SLawrence D'Anna 
SetImmediateErrorFile(FileSP file_sp)2839eb13719SLawrence D'Anna void SBCommandReturnObject::SetImmediateErrorFile(FileSP file_sp) {
284*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, file_sp);
2859eb13719SLawrence D'Anna   SetImmediateErrorFile(SBFile(file_sp));
28685e8b814SJim Ingham }
287223383edSEnrico Granata 
PutCString(const char * string,int len)288b9c1b51eSKate Stone void SBCommandReturnObject::PutCString(const char *string, int len) {
289*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, string, len);
290baf5664fSJonas Devlieghere 
291b9c1b51eSKate Stone   if (len == 0 || string == nullptr || *string == 0) {
29217fafa15SJim Ingham     return;
293b9c1b51eSKate Stone   } else if (len > 0) {
29417fafa15SJim Ingham     std::string buffer(string, len);
2954112b473SJan Kratochvil     ref().AppendMessage(buffer.c_str());
296b9c1b51eSKate Stone   } else
2974112b473SJan Kratochvil     ref().AppendMessage(string);
298223383edSEnrico Granata }
299cd4d24d5SEnrico Granata 
GetOutput(bool only_if_no_immediate)300b9c1b51eSKate Stone const char *SBCommandReturnObject::GetOutput(bool only_if_no_immediate) {
301*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, only_if_no_immediate);
302baf5664fSJonas Devlieghere 
303b9c1b51eSKate Stone   if (!only_if_no_immediate ||
3044112b473SJan Kratochvil       ref().GetImmediateOutputStream().get() == nullptr)
305cd4d24d5SEnrico Granata     return GetOutput();
306dbb0abbfSEugene Zelenko   return nullptr;
307cd4d24d5SEnrico Granata }
308cd4d24d5SEnrico Granata 
GetError(bool only_if_no_immediate)309b9c1b51eSKate Stone const char *SBCommandReturnObject::GetError(bool only_if_no_immediate) {
310*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, only_if_no_immediate);
311baf5664fSJonas Devlieghere 
3124112b473SJan Kratochvil   if (!only_if_no_immediate || ref().GetImmediateErrorStream().get() == nullptr)
313cd4d24d5SEnrico Granata     return GetError();
314dbb0abbfSEugene Zelenko   return nullptr;
315cd4d24d5SEnrico Granata }
316cd4d24d5SEnrico Granata 
Printf(const char * format,...)317b9c1b51eSKate Stone size_t SBCommandReturnObject::Printf(const char *format, ...) {
318223383edSEnrico Granata   va_list args;
319223383edSEnrico Granata   va_start(args, format);
3204112b473SJan Kratochvil   size_t result = ref().GetOutputStream().PrintfVarArg(format, args);
321223383edSEnrico Granata   va_end(args);
322223383edSEnrico Granata   return result;
323223383edSEnrico Granata }
324223383edSEnrico Granata 
SetError(lldb::SBError & error,const char * fallback_error_cstr)325b9c1b51eSKate Stone void SBCommandReturnObject::SetError(lldb::SBError &error,
326b9c1b51eSKate Stone                                      const char *fallback_error_cstr) {
327*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, error, fallback_error_cstr);
328baf5664fSJonas Devlieghere 
329eff81a47SEnrico Granata   if (error.IsValid())
3304112b473SJan Kratochvil     ref().SetError(error.ref(), fallback_error_cstr);
331eff81a47SEnrico Granata   else if (fallback_error_cstr)
3324112b473SJan Kratochvil     ref().SetError(Status(), fallback_error_cstr);
333eff81a47SEnrico Granata }
334eff81a47SEnrico Granata 
SetError(const char * error_cstr)335b9c1b51eSKate Stone void SBCommandReturnObject::SetError(const char *error_cstr) {
336*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, error_cstr);
337baf5664fSJonas Devlieghere 
338e7bef0f1SJan Kratochvil   if (error_cstr)
3391b1c8e4aSDavid Spickett     ref().AppendError(error_cstr);
340eff81a47SEnrico Granata }
341