xref: /freebsd/contrib/llvm-project/lldb/include/lldb/API/SBCommandReturnObject.h (revision 700637cbb5e582861067a11aaca4d053546871d2)
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