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 SBStructuredData GetErrorData(); 49 50 #ifndef SWIG 51 LLDB_DEPRECATED_FIXME("Use PutOutput(SBFile) or PutOutput(FileSP)", 52 "PutOutput(SBFile)") 53 size_t PutOutput(FILE *fh); 54 #endif 55 56 size_t PutOutput(SBFile file); 57 58 size_t PutOutput(FileSP BORROWED); 59 60 size_t GetOutputSize(); 61 62 size_t GetErrorSize(); 63 64 #ifndef SWIG 65 LLDB_DEPRECATED_FIXME("Use PutError(SBFile) or PutError(FileSP)", 66 "PutError(SBFile)") 67 size_t PutError(FILE *fh); 68 #endif 69 70 size_t PutError(SBFile file); 71 72 size_t PutError(FileSP BORROWED); 73 74 void Clear(); 75 76 lldb::ReturnStatus GetStatus(); 77 78 void SetStatus(lldb::ReturnStatus status); 79 80 bool Succeeded(); 81 82 bool HasResult(); 83 84 void AppendMessage(const char *message); 85 86 void AppendWarning(const char *message); 87 88 bool GetDescription(lldb::SBStream &description); 89 90 #ifndef SWIG 91 LLDB_DEPRECATED_FIXME( 92 "Use SetImmediateOutputFile(SBFile) or SetImmediateOutputFile(FileSP)", 93 "SetImmediateOutputFile(SBFile)") 94 void SetImmediateOutputFile(FILE *fh); 95 96 LLDB_DEPRECATED_FIXME( 97 "Use SetImmediateErrorFile(SBFile) or SetImmediateErrorFile(FileSP)", 98 "SetImmediateErrorFile(SBFile)") 99 void SetImmediateErrorFile(FILE *fh); 100 101 LLDB_DEPRECATED_FIXME( 102 "Use SetImmediateOutputFile(SBFile) or SetImmediateOutputFile(FileSP)", 103 "SetImmediateOutputFile(SBFile)") 104 void SetImmediateOutputFile(FILE *fh, bool transfer_ownership); 105 106 LLDB_DEPRECATED_FIXME( 107 "Use SetImmediateErrorFile(SBFile) or SetImmediateErrorFile(FileSP)", 108 "SetImmediateErrorFile(SBFile)") 109 void SetImmediateErrorFile(FILE *fh, bool transfer_ownership); 110 #endif 111 112 void SetImmediateOutputFile(SBFile file); 113 114 void SetImmediateErrorFile(SBFile file); 115 116 void SetImmediateOutputFile(FileSP BORROWED); 117 118 void SetImmediateErrorFile(FileSP BORROWED); 119 120 void PutCString(const char *string, int len = -1); 121 122 #ifndef SWIG 123 __attribute__((format(printf, 2, 3))) size_t Printf(const char *format, ...); 124 #endif 125 126 const char *GetOutput(bool only_if_no_immediate); 127 128 const char *GetError(bool only_if_no_immediate); 129 130 void SetError(lldb::SBError &error, 131 const char *fallback_error_cstr = nullptr); 132 133 void SetError(const char *error_cstr); 134 135 protected: 136 friend class SBCommandInterpreter; 137 friend class SBOptions; 138 139 friend class lldb_private::CommandPluginInterfaceImplementation; 140 friend class lldb_private::python::SWIGBridge; 141 142 SBCommandReturnObject(lldb_private::CommandReturnObject &ref); 143 144 lldb_private::CommandReturnObject *operator->() const; 145 146 lldb_private::CommandReturnObject *get() const; 147 148 lldb_private::CommandReturnObject &operator*() const; 149 150 private: 151 lldb_private::CommandReturnObject &ref() const; 152 153 std::unique_ptr<lldb_private::SBCommandReturnObjectImpl> m_opaque_up; 154 }; 155 156 } // namespace lldb 157 158 #endif // LLDB_API_SBCOMMANDRETURNOBJECT_H 159