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