1 //===-- SBCommandReturnObject.h ---------------------------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef LLDB_API_SBCOMMANDRETURNOBJECT_H 10 #define LLDB_API_SBCOMMANDRETURNOBJECT_H 11 12 #include <cstdio> 13 14 #include <memory> 15 16 #include "lldb/API/SBDefines.h" 17 18 namespace lldb_private { 19 class CommandPluginInterfaceImplementation; 20 class SBCommandReturnObjectImpl; 21 namespace python { 22 class SWIGBridge; 23 } 24 } // namespace lldb_private 25 26 namespace lldb { 27 28 class LLDB_API SBCommandReturnObject { 29 public: 30 SBCommandReturnObject(); 31 32 // rvalue ctor+assignment are incompatible with Reproducers. 33 34 SBCommandReturnObject(const lldb::SBCommandReturnObject &rhs); 35 36 ~SBCommandReturnObject(); 37 38 lldb::SBCommandReturnObject & 39 operator=(const lldb::SBCommandReturnObject &rhs); 40 41 explicit operator bool() const; 42 43 bool IsValid() const; 44 45 const char *GetOutput(); 46 47 const char *GetError(); 48 49 #ifndef SWIG 50 LLDB_DEPRECATED_FIXME("Use PutOutput(SBFile) or PutOutput(FileSP)", 51 "PutOutput(SBFile)") 52 size_t PutOutput(FILE *fh); 53 #endif 54 55 size_t PutOutput(SBFile file); 56 57 size_t PutOutput(FileSP BORROWED); 58 59 size_t GetOutputSize(); 60 61 size_t GetErrorSize(); 62 63 #ifndef SWIG 64 LLDB_DEPRECATED_FIXME("Use PutError(SBFile) or PutError(FileSP)", 65 "PutError(SBFile)") 66 size_t PutError(FILE *fh); 67 #endif 68 69 size_t PutError(SBFile file); 70 71 size_t PutError(FileSP BORROWED); 72 73 void Clear(); 74 75 lldb::ReturnStatus GetStatus(); 76 77 void SetStatus(lldb::ReturnStatus status); 78 79 bool Succeeded(); 80 81 bool HasResult(); 82 83 void AppendMessage(const char *message); 84 85 void AppendWarning(const char *message); 86 87 bool GetDescription(lldb::SBStream &description); 88 89 #ifndef SWIG 90 LLDB_DEPRECATED_FIXME( 91 "Use SetImmediateOutputFile(SBFile) or SetImmediateOutputFile(FileSP)", 92 "SetImmediateOutputFile(SBFile)") 93 void SetImmediateOutputFile(FILE *fh); 94 95 LLDB_DEPRECATED_FIXME( 96 "Use SetImmediateErrorFile(SBFile) or SetImmediateErrorFile(FileSP)", 97 "SetImmediateErrorFile(SBFile)") 98 void SetImmediateErrorFile(FILE *fh); 99 100 LLDB_DEPRECATED_FIXME( 101 "Use SetImmediateOutputFile(SBFile) or SetImmediateOutputFile(FileSP)", 102 "SetImmediateOutputFile(SBFile)") 103 void SetImmediateOutputFile(FILE *fh, bool transfer_ownership); 104 105 LLDB_DEPRECATED_FIXME( 106 "Use SetImmediateErrorFile(SBFile) or SetImmediateErrorFile(FileSP)", 107 "SetImmediateErrorFile(SBFile)") 108 void SetImmediateErrorFile(FILE *fh, bool transfer_ownership); 109 #endif 110 111 void SetImmediateOutputFile(SBFile file); 112 113 void SetImmediateErrorFile(SBFile file); 114 115 void SetImmediateOutputFile(FileSP BORROWED); 116 117 void SetImmediateErrorFile(FileSP BORROWED); 118 119 void PutCString(const char *string, int len = -1); 120 121 #ifndef SWIG 122 __attribute__((format(printf, 2, 3))) size_t Printf(const char *format, ...); 123 #endif 124 125 const char *GetOutput(bool only_if_no_immediate); 126 127 const char *GetError(bool only_if_no_immediate); 128 129 void SetError(lldb::SBError &error, 130 const char *fallback_error_cstr = nullptr); 131 132 void SetError(const char *error_cstr); 133 134 protected: 135 friend class SBCommandInterpreter; 136 friend class SBOptions; 137 138 friend class lldb_private::CommandPluginInterfaceImplementation; 139 friend class lldb_private::python::SWIGBridge; 140 141 SBCommandReturnObject(lldb_private::CommandReturnObject &ref); 142 143 lldb_private::CommandReturnObject *operator->() const; 144 145 lldb_private::CommandReturnObject *get() const; 146 147 lldb_private::CommandReturnObject &operator*() const; 148 149 private: 150 lldb_private::CommandReturnObject &ref() const; 151 152 std::unique_ptr<lldb_private::SBCommandReturnObjectImpl> m_opaque_up; 153 }; 154 155 } // namespace lldb 156 157 #endif // LLDB_API_SBCOMMANDRETURNOBJECT_H 158