1254721Semaste//===-- SBCommandReturnObject.cpp -------------------------------*- C++ -*-===//
2254721Semaste//
3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4353358Sdim// See https://llvm.org/LICENSE.txt for license information.
5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6254721Semaste//
7254721Semaste//===----------------------------------------------------------------------===//
8254721Semaste
9254721Semaste#include "lldb/API/SBCommandReturnObject.h"
10353358Sdim#include "SBReproducerPrivate.h"
11353358Sdim#include "Utils.h"
12254721Semaste#include "lldb/API/SBError.h"
13360784Sdim#include "lldb/API/SBFile.h"
14254721Semaste#include "lldb/API/SBStream.h"
15254721Semaste#include "lldb/Interpreter/CommandReturnObject.h"
16321369Sdim#include "lldb/Utility/ConstString.h"
17321369Sdim#include "lldb/Utility/Status.h"
18254721Semaste
19254721Semasteusing namespace lldb;
20254721Semasteusing namespace lldb_private;
21254721Semaste
22360784Sdimclass lldb_private::SBCommandReturnObjectImpl {
23360784Sdimpublic:
24360784Sdim  SBCommandReturnObjectImpl()
25360784Sdim      : m_ptr(new CommandReturnObject()), m_owned(true) {}
26360784Sdim  SBCommandReturnObjectImpl(CommandReturnObject &ref)
27360784Sdim      : m_ptr(&ref), m_owned(false) {}
28360784Sdim  SBCommandReturnObjectImpl(const SBCommandReturnObjectImpl &rhs)
29360784Sdim      : m_ptr(new CommandReturnObject(*rhs.m_ptr)), m_owned(rhs.m_owned) {}
30360784Sdim  SBCommandReturnObjectImpl &operator=(const SBCommandReturnObjectImpl &rhs) {
31360784Sdim    SBCommandReturnObjectImpl copy(rhs);
32360784Sdim    std::swap(*this, copy);
33360784Sdim    return *this;
34360784Sdim  }
35360784Sdim  // rvalue ctor+assignment are not used by SBCommandReturnObject.
36360784Sdim  ~SBCommandReturnObjectImpl() {
37360784Sdim    if (m_owned)
38360784Sdim      delete m_ptr;
39360784Sdim  }
40360784Sdim
41360784Sdim  CommandReturnObject &operator*() const { return *m_ptr; }
42360784Sdim
43360784Sdimprivate:
44360784Sdim  CommandReturnObject *m_ptr;
45360784Sdim  bool m_owned;
46360784Sdim};
47360784Sdim
48314564SdimSBCommandReturnObject::SBCommandReturnObject()
49360784Sdim    : m_opaque_up(new SBCommandReturnObjectImpl()) {
50353358Sdim  LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBCommandReturnObject);
51353358Sdim}
52254721Semaste
53360784SdimSBCommandReturnObject::SBCommandReturnObject(CommandReturnObject &ref)
54360784Sdim    : m_opaque_up(new SBCommandReturnObjectImpl(ref)) {
55360784Sdim  LLDB_RECORD_CONSTRUCTOR(SBCommandReturnObject,
56360784Sdim                          (lldb_private::CommandReturnObject &), ref);
57360784Sdim}
58360784Sdim
59314564SdimSBCommandReturnObject::SBCommandReturnObject(const SBCommandReturnObject &rhs)
60353358Sdim    : m_opaque_up() {
61353358Sdim  LLDB_RECORD_CONSTRUCTOR(SBCommandReturnObject,
62353358Sdim                          (const lldb::SBCommandReturnObject &), rhs);
63353358Sdim
64353358Sdim  m_opaque_up = clone(rhs.m_opaque_up);
65254721Semaste}
66254721Semaste
67360784SdimSBCommandReturnObject &SBCommandReturnObject::
68314564Sdimoperator=(const SBCommandReturnObject &rhs) {
69353358Sdim  LLDB_RECORD_METHOD(
70360784Sdim      lldb::SBCommandReturnObject &,
71353358Sdim      SBCommandReturnObject, operator=,(const lldb::SBCommandReturnObject &),
72353358Sdim      rhs);
73353358Sdim
74353358Sdim  if (this != &rhs)
75353358Sdim    m_opaque_up = clone(rhs.m_opaque_up);
76353358Sdim  return LLDB_RECORD_RESULT(*this);
77254721Semaste}
78254721Semaste
79360784SdimSBCommandReturnObject::~SBCommandReturnObject() = default;
80360784Sdim
81353358Sdimbool SBCommandReturnObject::IsValid() const {
82353358Sdim  LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBCommandReturnObject, IsValid);
83353358Sdim  return this->operator bool();
84353358Sdim}
85353358SdimSBCommandReturnObject::operator bool() const {
86353358Sdim  LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBCommandReturnObject, operator bool);
87254721Semaste
88360784Sdim  // This method is not useful but it needs to stay to keep SB API stable.
89360784Sdim  return true;
90353358Sdim}
91353358Sdim
92314564Sdimconst char *SBCommandReturnObject::GetOutput() {
93353358Sdim  LLDB_RECORD_METHOD_NO_ARGS(const char *, SBCommandReturnObject, GetOutput);
94254721Semaste
95360784Sdim  ConstString output(ref().GetOutputData());
96360784Sdim  return output.AsCString(/*value_if_empty*/ "");
97314564Sdim}
98254721Semaste
99314564Sdimconst char *SBCommandReturnObject::GetError() {
100353358Sdim  LLDB_RECORD_METHOD_NO_ARGS(const char *, SBCommandReturnObject, GetError);
101276479Sdim
102360784Sdim  ConstString output(ref().GetErrorData());
103360784Sdim  return output.AsCString(/*value_if_empty*/ "");
104254721Semaste}
105254721Semaste
106314564Sdimsize_t SBCommandReturnObject::GetOutputSize() {
107353358Sdim  LLDB_RECORD_METHOD_NO_ARGS(size_t, SBCommandReturnObject, GetOutputSize);
108353358Sdim
109360784Sdim  return ref().GetOutputData().size();
110254721Semaste}
111254721Semaste
112314564Sdimsize_t SBCommandReturnObject::GetErrorSize() {
113353358Sdim  LLDB_RECORD_METHOD_NO_ARGS(size_t, SBCommandReturnObject, GetErrorSize);
114353358Sdim
115360784Sdim  return ref().GetErrorData().size();
116254721Semaste}
117254721Semaste
118314564Sdimsize_t SBCommandReturnObject::PutOutput(FILE *fh) {
119360784Sdim  LLDB_RECORD_DUMMY(size_t, SBCommandReturnObject, PutOutput, (FILE *), fh);
120314564Sdim  if (fh) {
121314564Sdim    size_t num_bytes = GetOutputSize();
122314564Sdim    if (num_bytes)
123314564Sdim      return ::fprintf(fh, "%s", GetOutput());
124314564Sdim  }
125314564Sdim  return 0;
126254721Semaste}
127254721Semaste
128360784Sdimsize_t SBCommandReturnObject::PutOutput(FileSP file_sp) {
129360784Sdim  LLDB_RECORD_METHOD(size_t, SBCommandReturnObject, PutOutput, (FileSP),
130360784Sdim                     file_sp);
131360784Sdim  if (!file_sp)
132360784Sdim    return 0;
133360784Sdim  return file_sp->Printf("%s", GetOutput());
134360784Sdim}
135360784Sdim
136360784Sdimsize_t SBCommandReturnObject::PutOutput(SBFile file) {
137360784Sdim  LLDB_RECORD_METHOD(size_t, SBCommandReturnObject, PutOutput, (SBFile), file);
138360784Sdim  if (!file.m_opaque_sp)
139360784Sdim    return 0;
140360784Sdim  return file.m_opaque_sp->Printf("%s", GetOutput());
141360784Sdim}
142360784Sdim
143314564Sdimsize_t SBCommandReturnObject::PutError(FILE *fh) {
144360784Sdim  LLDB_RECORD_DUMMY(size_t, SBCommandReturnObject, PutError, (FILE *), fh);
145314564Sdim  if (fh) {
146314564Sdim    size_t num_bytes = GetErrorSize();
147314564Sdim    if (num_bytes)
148314564Sdim      return ::fprintf(fh, "%s", GetError());
149314564Sdim  }
150314564Sdim  return 0;
151254721Semaste}
152254721Semaste
153360784Sdimsize_t SBCommandReturnObject::PutError(FileSP file_sp) {
154360784Sdim  LLDB_RECORD_METHOD(size_t, SBCommandReturnObject, PutError, (FileSP),
155360784Sdim                     file_sp);
156360784Sdim  if (!file_sp)
157360784Sdim    return 0;
158360784Sdim  return file_sp->Printf("%s", GetError());
159360784Sdim}
160360784Sdim
161360784Sdimsize_t SBCommandReturnObject::PutError(SBFile file) {
162360784Sdim  LLDB_RECORD_METHOD(size_t, SBCommandReturnObject, PutError, (SBFile), file);
163360784Sdim  if (!file.m_opaque_sp)
164360784Sdim    return 0;
165360784Sdim  return file.m_opaque_sp->Printf("%s", GetError());
166360784Sdim}
167360784Sdim
168314564Sdimvoid SBCommandReturnObject::Clear() {
169353358Sdim  LLDB_RECORD_METHOD_NO_ARGS(void, SBCommandReturnObject, Clear);
170353358Sdim
171360784Sdim  ref().Clear();
172254721Semaste}
173254721Semaste
174314564Sdimlldb::ReturnStatus SBCommandReturnObject::GetStatus() {
175353358Sdim  LLDB_RECORD_METHOD_NO_ARGS(lldb::ReturnStatus, SBCommandReturnObject,
176353358Sdim                             GetStatus);
177353358Sdim
178360784Sdim  return ref().GetStatus();
179254721Semaste}
180254721Semaste
181314564Sdimvoid SBCommandReturnObject::SetStatus(lldb::ReturnStatus status) {
182353358Sdim  LLDB_RECORD_METHOD(void, SBCommandReturnObject, SetStatus,
183353358Sdim                     (lldb::ReturnStatus), status);
184353358Sdim
185360784Sdim  ref().SetStatus(status);
186254721Semaste}
187254721Semaste
188314564Sdimbool SBCommandReturnObject::Succeeded() {
189353358Sdim  LLDB_RECORD_METHOD_NO_ARGS(bool, SBCommandReturnObject, Succeeded);
190353358Sdim
191360784Sdim  return ref().Succeeded();
192254721Semaste}
193254721Semaste
194314564Sdimbool SBCommandReturnObject::HasResult() {
195353358Sdim  LLDB_RECORD_METHOD_NO_ARGS(bool, SBCommandReturnObject, HasResult);
196353358Sdim
197360784Sdim  return ref().HasResult();
198254721Semaste}
199254721Semaste
200314564Sdimvoid SBCommandReturnObject::AppendMessage(const char *message) {
201353358Sdim  LLDB_RECORD_METHOD(void, SBCommandReturnObject, AppendMessage, (const char *),
202353358Sdim                     message);
203353358Sdim
204360784Sdim  ref().AppendMessage(message);
205254721Semaste}
206254721Semaste
207314564Sdimvoid SBCommandReturnObject::AppendWarning(const char *message) {
208353358Sdim  LLDB_RECORD_METHOD(void, SBCommandReturnObject, AppendWarning, (const char *),
209353358Sdim                     message);
210353358Sdim
211360784Sdim  ref().AppendWarning(message);
212254721Semaste}
213254721Semaste
214314564SdimCommandReturnObject *SBCommandReturnObject::operator->() const {
215360784Sdim  return &**m_opaque_up;
216254721Semaste}
217254721Semaste
218314564SdimCommandReturnObject *SBCommandReturnObject::get() const {
219360784Sdim  return &**m_opaque_up;
220254721Semaste}
221254721Semaste
222314564SdimCommandReturnObject &SBCommandReturnObject::operator*() const {
223360784Sdim  return **m_opaque_up;
224254721Semaste}
225254721Semaste
226314564SdimCommandReturnObject &SBCommandReturnObject::ref() const {
227360784Sdim  return **m_opaque_up;
228254721Semaste}
229254721Semaste
230314564Sdimbool SBCommandReturnObject::GetDescription(SBStream &description) {
231353358Sdim  LLDB_RECORD_METHOD(bool, SBCommandReturnObject, GetDescription,
232353358Sdim                     (lldb::SBStream &), description);
233353358Sdim
234314564Sdim  Stream &strm = description.ref();
235254721Semaste
236360784Sdim  description.Printf("Error:  ");
237360784Sdim  lldb::ReturnStatus status = ref().GetStatus();
238360784Sdim  if (status == lldb::eReturnStatusStarted)
239360784Sdim    strm.PutCString("Started");
240360784Sdim  else if (status == lldb::eReturnStatusInvalid)
241360784Sdim    strm.PutCString("Invalid");
242360784Sdim  else if (ref().Succeeded())
243360784Sdim    strm.PutCString("Success");
244360784Sdim  else
245360784Sdim    strm.PutCString("Fail");
246254721Semaste
247360784Sdim  if (GetOutputSize() > 0)
248360784Sdim    strm.Printf("\nOutput Message:\n%s", GetOutput());
249254721Semaste
250360784Sdim  if (GetErrorSize() > 0)
251360784Sdim    strm.Printf("\nError Message:\n%s", GetError());
252254721Semaste
253314564Sdim  return true;
254254721Semaste}
255254721Semaste
256314564Sdimvoid SBCommandReturnObject::SetImmediateOutputFile(FILE *fh) {
257360784Sdim  LLDB_RECORD_DUMMY(void, SBCommandReturnObject, SetImmediateOutputFile,
258360784Sdim                    (FILE *), fh);
259353358Sdim
260314564Sdim  SetImmediateOutputFile(fh, false);
261254721Semaste}
262254721Semaste
263314564Sdimvoid SBCommandReturnObject::SetImmediateErrorFile(FILE *fh) {
264360784Sdim  LLDB_RECORD_DUMMY(void, SBCommandReturnObject, SetImmediateErrorFile,
265360784Sdim                    (FILE *), fh);
266353358Sdim
267314564Sdim  SetImmediateErrorFile(fh, false);
268309124Sdim}
269309124Sdim
270314564Sdimvoid SBCommandReturnObject::SetImmediateOutputFile(FILE *fh,
271314564Sdim                                                   bool transfer_ownership) {
272360784Sdim  LLDB_RECORD_DUMMY(void, SBCommandReturnObject, SetImmediateOutputFile,
273360784Sdim                    (FILE *, bool), fh, transfer_ownership);
274360784Sdim  FileSP file = std::make_shared<NativeFile>(fh, transfer_ownership);
275360784Sdim  ref().SetImmediateOutputFile(file);
276254721Semaste}
277254721Semaste
278314564Sdimvoid SBCommandReturnObject::SetImmediateErrorFile(FILE *fh,
279314564Sdim                                                  bool transfer_ownership) {
280360784Sdim  LLDB_RECORD_DUMMY(void, SBCommandReturnObject, SetImmediateErrorFile,
281360784Sdim                    (FILE *, bool), fh, transfer_ownership);
282360784Sdim  FileSP file = std::make_shared<NativeFile>(fh, transfer_ownership);
283360784Sdim  ref().SetImmediateErrorFile(file);
284360784Sdim}
285360784Sdim
286360784Sdimvoid SBCommandReturnObject::SetImmediateOutputFile(SBFile file) {
287360784Sdim  LLDB_RECORD_METHOD(void, SBCommandReturnObject, SetImmediateOutputFile,
288360784Sdim                     (SBFile), file);
289360784Sdim  ref().SetImmediateOutputFile(file.m_opaque_sp);
290360784Sdim}
291360784Sdim
292360784Sdimvoid SBCommandReturnObject::SetImmediateErrorFile(SBFile file) {
293353358Sdim  LLDB_RECORD_METHOD(void, SBCommandReturnObject, SetImmediateErrorFile,
294360784Sdim                     (SBFile), file);
295360784Sdim  ref().SetImmediateErrorFile(file.m_opaque_sp);
296360784Sdim}
297353358Sdim
298360784Sdimvoid SBCommandReturnObject::SetImmediateOutputFile(FileSP file_sp) {
299360784Sdim  LLDB_RECORD_METHOD(void, SBCommandReturnObject, SetImmediateOutputFile,
300360784Sdim                     (FileSP), file_sp);
301360784Sdim  SetImmediateOutputFile(SBFile(file_sp));
302309124Sdim}
303309124Sdim
304360784Sdimvoid SBCommandReturnObject::SetImmediateErrorFile(FileSP file_sp) {
305360784Sdim  LLDB_RECORD_METHOD(void, SBCommandReturnObject, SetImmediateErrorFile,
306360784Sdim                     (FileSP), file_sp);
307360784Sdim  SetImmediateErrorFile(SBFile(file_sp));
308360784Sdim}
309360784Sdim
310314564Sdimvoid SBCommandReturnObject::PutCString(const char *string, int len) {
311353358Sdim  LLDB_RECORD_METHOD(void, SBCommandReturnObject, PutCString,
312353358Sdim                     (const char *, int), string, len);
313353358Sdim
314360784Sdim  if (len == 0 || string == nullptr || *string == 0) {
315360784Sdim    return;
316360784Sdim  } else if (len > 0) {
317360784Sdim    std::string buffer(string, len);
318360784Sdim    ref().AppendMessage(buffer.c_str());
319360784Sdim  } else
320360784Sdim    ref().AppendMessage(string);
321254721Semaste}
322254721Semaste
323314564Sdimconst char *SBCommandReturnObject::GetOutput(bool only_if_no_immediate) {
324353358Sdim  LLDB_RECORD_METHOD(const char *, SBCommandReturnObject, GetOutput, (bool),
325353358Sdim                     only_if_no_immediate);
326353358Sdim
327314564Sdim  if (!only_if_no_immediate ||
328360784Sdim      ref().GetImmediateOutputStream().get() == nullptr)
329314564Sdim    return GetOutput();
330314564Sdim  return nullptr;
331254721Semaste}
332254721Semaste
333314564Sdimconst char *SBCommandReturnObject::GetError(bool only_if_no_immediate) {
334353358Sdim  LLDB_RECORD_METHOD(const char *, SBCommandReturnObject, GetError, (bool),
335353358Sdim                     only_if_no_immediate);
336353358Sdim
337360784Sdim  if (!only_if_no_immediate || ref().GetImmediateErrorStream().get() == nullptr)
338314564Sdim    return GetError();
339314564Sdim  return nullptr;
340254721Semaste}
341254721Semaste
342314564Sdimsize_t SBCommandReturnObject::Printf(const char *format, ...) {
343360784Sdim  va_list args;
344360784Sdim  va_start(args, format);
345360784Sdim  size_t result = ref().GetOutputStream().PrintfVarArg(format, args);
346360784Sdim  va_end(args);
347360784Sdim  return result;
348254721Semaste}
349254721Semaste
350314564Sdimvoid SBCommandReturnObject::SetError(lldb::SBError &error,
351314564Sdim                                     const char *fallback_error_cstr) {
352353358Sdim  LLDB_RECORD_METHOD(void, SBCommandReturnObject, SetError,
353353358Sdim                     (lldb::SBError &, const char *), error,
354353358Sdim                     fallback_error_cstr);
355353358Sdim
356360784Sdim  if (error.IsValid())
357360784Sdim    ref().SetError(error.ref(), fallback_error_cstr);
358360784Sdim  else if (fallback_error_cstr)
359360784Sdim    ref().SetError(Status(), fallback_error_cstr);
360254721Semaste}
361254721Semaste
362314564Sdimvoid SBCommandReturnObject::SetError(const char *error_cstr) {
363353358Sdim  LLDB_RECORD_METHOD(void, SBCommandReturnObject, SetError, (const char *),
364353358Sdim                     error_cstr);
365353358Sdim
366360784Sdim  if (error_cstr)
367360784Sdim    ref().SetError(error_cstr);
368254721Semaste}
369353358Sdim
370353358Sdimnamespace lldb_private {
371353358Sdimnamespace repro {
372353358Sdim
373353358Sdimtemplate <>
374353358Sdimvoid RegisterMethods<SBCommandReturnObject>(Registry &R) {
375353358Sdim  LLDB_REGISTER_CONSTRUCTOR(SBCommandReturnObject, ());
376353358Sdim  LLDB_REGISTER_CONSTRUCTOR(SBCommandReturnObject,
377360784Sdim                            (lldb_private::CommandReturnObject &));
378360784Sdim  LLDB_REGISTER_CONSTRUCTOR(SBCommandReturnObject,
379353358Sdim                            (const lldb::SBCommandReturnObject &));
380353358Sdim  LLDB_REGISTER_METHOD(
381360784Sdim      lldb::SBCommandReturnObject &,
382353358Sdim      SBCommandReturnObject, operator=,(const lldb::SBCommandReturnObject &));
383353358Sdim  LLDB_REGISTER_METHOD_CONST(bool, SBCommandReturnObject, IsValid, ());
384353358Sdim  LLDB_REGISTER_METHOD_CONST(bool, SBCommandReturnObject, operator bool, ());
385353358Sdim  LLDB_REGISTER_METHOD(const char *, SBCommandReturnObject, GetOutput, ());
386353358Sdim  LLDB_REGISTER_METHOD(const char *, SBCommandReturnObject, GetError, ());
387353358Sdim  LLDB_REGISTER_METHOD(size_t, SBCommandReturnObject, GetOutputSize, ());
388353358Sdim  LLDB_REGISTER_METHOD(size_t, SBCommandReturnObject, GetErrorSize, ());
389353358Sdim  LLDB_REGISTER_METHOD(size_t, SBCommandReturnObject, PutOutput, (FILE *));
390353358Sdim  LLDB_REGISTER_METHOD(size_t, SBCommandReturnObject, PutError, (FILE *));
391360784Sdim  LLDB_REGISTER_METHOD(size_t, SBCommandReturnObject, PutOutput, (SBFile));
392360784Sdim  LLDB_REGISTER_METHOD(size_t, SBCommandReturnObject, PutError, (SBFile));
393360784Sdim  LLDB_REGISTER_METHOD(size_t, SBCommandReturnObject, PutOutput, (FileSP));
394360784Sdim  LLDB_REGISTER_METHOD(size_t, SBCommandReturnObject, PutError, (FileSP));
395353358Sdim  LLDB_REGISTER_METHOD(void, SBCommandReturnObject, Clear, ());
396353358Sdim  LLDB_REGISTER_METHOD(lldb::ReturnStatus, SBCommandReturnObject, GetStatus,
397353358Sdim                       ());
398353358Sdim  LLDB_REGISTER_METHOD(void, SBCommandReturnObject, SetStatus,
399353358Sdim                       (lldb::ReturnStatus));
400353358Sdim  LLDB_REGISTER_METHOD(bool, SBCommandReturnObject, Succeeded, ());
401353358Sdim  LLDB_REGISTER_METHOD(bool, SBCommandReturnObject, HasResult, ());
402353358Sdim  LLDB_REGISTER_METHOD(void, SBCommandReturnObject, AppendMessage,
403353358Sdim                       (const char *));
404353358Sdim  LLDB_REGISTER_METHOD(void, SBCommandReturnObject, AppendWarning,
405353358Sdim                       (const char *));
406353358Sdim  LLDB_REGISTER_METHOD(bool, SBCommandReturnObject, GetDescription,
407353358Sdim                       (lldb::SBStream &));
408353358Sdim  LLDB_REGISTER_METHOD(void, SBCommandReturnObject, SetImmediateOutputFile,
409353358Sdim                       (FILE *));
410353358Sdim  LLDB_REGISTER_METHOD(void, SBCommandReturnObject, SetImmediateErrorFile,
411353358Sdim                       (FILE *));
412353358Sdim  LLDB_REGISTER_METHOD(void, SBCommandReturnObject, SetImmediateOutputFile,
413360784Sdim                       (SBFile));
414360784Sdim  LLDB_REGISTER_METHOD(void, SBCommandReturnObject, SetImmediateErrorFile,
415360784Sdim                       (SBFile));
416360784Sdim  LLDB_REGISTER_METHOD(void, SBCommandReturnObject, SetImmediateOutputFile,
417360784Sdim                       (FileSP));
418360784Sdim  LLDB_REGISTER_METHOD(void, SBCommandReturnObject, SetImmediateErrorFile,
419360784Sdim                       (FileSP));
420360784Sdim  LLDB_REGISTER_METHOD(void, SBCommandReturnObject, SetImmediateOutputFile,
421353358Sdim                       (FILE *, bool));
422353358Sdim  LLDB_REGISTER_METHOD(void, SBCommandReturnObject, SetImmediateErrorFile,
423353358Sdim                       (FILE *, bool));
424353358Sdim  LLDB_REGISTER_METHOD(void, SBCommandReturnObject, PutCString,
425353358Sdim                       (const char *, int));
426353358Sdim  LLDB_REGISTER_METHOD(const char *, SBCommandReturnObject, GetOutput,
427353358Sdim                       (bool));
428353358Sdim  LLDB_REGISTER_METHOD(const char *, SBCommandReturnObject, GetError, (bool));
429353358Sdim  LLDB_REGISTER_METHOD(void, SBCommandReturnObject, SetError,
430353358Sdim                       (lldb::SBError &, const char *));
431353358Sdim  LLDB_REGISTER_METHOD(void, SBCommandReturnObject, SetError, (const char *));
432353358Sdim}
433353358Sdim
434353358Sdim}
435353358Sdim}
436