9#ifndef LLDB_PLUGINS_SCRIPTINTERPRETER_PYTHON_SWIGPYTHONBRIDGE_H
10#define LLDB_PLUGINS_SCRIPTINTERPRETER_PYTHON_SWIGPYTHONBRIDGE_H
15#include "lldb/Host/Config.h"
25#include "llvm/Support/Error.h"
41typedef struct swig_type_info swig_type_info;
43python::PythonObject ToSWIGHelper(
void *obj, swig_type_info *info);
47template <
typename T>
class ScopedPythonObject : PythonObject {
49 ScopedPythonObject(T *sb, swig_type_info *info)
50 : PythonObject(ToSWIGHelper(sb, info)), m_sb(sb) {}
51 ~ScopedPythonObject() {
55 ScopedPythonObject(ScopedPythonObject &&rhs)
56 : PythonObject(std::move(rhs)), m_sb(std::exchange(rhs.m_sb, nullptr)) {}
57 ScopedPythonObject(
const ScopedPythonObject &) =
delete;
58 ScopedPythonObject &operator=(
const ScopedPythonObject &) =
delete;
59 ScopedPythonObject &operator=(ScopedPythonObject &&) =
delete;
61 const PythonObject &obj()
const {
return *
this; }
83 static PythonObject ToSWIGWrapper(std::unique_ptr<lldb::SBValue> value_sb);
85 ToSWIGWrapper(std::unique_ptr<lldb::SBCommandReturnObject> result_up);
92 static PythonObject ToSWIGWrapper(Status &&status);
93 static PythonObject ToSWIGWrapper(
const StructuredDataImpl &data_impl);
102 static PythonObject ToSWIGWrapper(
const TypeSummaryOptions &summary_options);
103 static PythonObject ToSWIGWrapper(
const SymbolContext &sym_ctx);
104 static PythonObject ToSWIGWrapper(
const Stream *stream);
105 static PythonObject ToSWIGWrapper(std::shared_ptr<lldb::SBStream> stream_sb);
106 static PythonObject ToSWIGWrapper(Event *event);
114 ToSWIGWrapper(std::unique_ptr<lldb::SBStructuredData> data_sb);
116 ToSWIGWrapper(std::unique_ptr<lldb::SBFileSpec> file_spec_sb);
118 ToSWIGWrapper(std::unique_ptr<lldb::SBModuleSpec> module_spec_sb);
120 static python::ScopedPythonObject<lldb::SBCommandReturnObject>
121 ToSWIGWrapper(CommandReturnObject &cmd_retobj);
126 static llvm::Expected<bool> LLDBSwigPythonBreakpointCallbackFunction(
127 const char *python_function_name,
const char *session_dictionary_name,
130 const lldb_private::StructuredDataImpl &args_impl);
132 static bool LLDBSwigPythonWatchpointCallbackFunction(
133 const char *python_function_name,
const char *session_dictionary_name,
137 LLDBSwigPythonFormatterCallbackFunction(
const char *python_function_name,
138 const char *session_dictionary_name,
141 static bool LLDBSwigPythonCallTypeScript(
142 const char *python_function_name,
const void *session_dictionary,
146 static python::PythonObject
147 LLDBSwigPythonCreateSyntheticProvider(
const char *python_class_name,
148 const char *session_dictionary_name,
151 static python::PythonObject
152 LLDBSwigPythonCreateCommandObject(
const char *python_class_name,
153 const char *session_dictionary_name,
156 static size_t LLDBSwigPython_CalculateNumChildren(PyObject *implementor,
159 static PyObject *LLDBSwigPython_GetChildAtIndex(PyObject *implementor,
163 LLDBSwigPython_GetIndexOfChildWithName(PyObject *implementor,
164 const char *child_name);
167 LLDBSWIGPython_GetValueObjectSPFromSBValue(
void *data);
169 static bool LLDBSwigPython_UpdateSynthProviderInstance(PyObject *implementor);
172 LLDBSwigPython_MightHaveChildrenSynthProviderInstance(PyObject *implementor);
175 LLDBSwigPython_GetValueSynthProviderInstance(PyObject *implementor);
178 LLDBSwigPythonCallCommand(
const char *python_function_name,
179 const char *session_dictionary_name,
181 lldb_private::CommandReturnObject &cmd_retobj,
185 LLDBSwigPythonCallCommandObject(PyObject *implementor,
187 lldb_private::CommandReturnObject &cmd_retobj,
189 static bool LLDBSwigPythonCallParsedCommandObject(
191 StructuredDataImpl &args_impl,
192 lldb_private::CommandReturnObject &cmd_retobj,
195 static std::optional<std::string>
196 LLDBSwigPythonGetRepeatCommandForScriptedCommand(PyObject *implementor,
197 std::string &command);
199 static StructuredData::DictionarySP
200 LLDBSwigPythonHandleArgumentCompletionForScriptedCommand(
201 PyObject *implementor, std::vector<llvm::StringRef> &args_impl,
202 size_t args_pos,
size_t pos_in_arg);
204 static StructuredData::DictionarySP
205 LLDBSwigPythonHandleOptionArgumentCompletionForScriptedCommand(
206 PyObject *implementor, llvm::StringRef &long_option,
size_t pos_in_arg);
208 static bool LLDBSwigPythonCallModuleInit(
const char *python_module_name,
209 const char *session_dictionary_name,
213 LLDBSwigPythonCallModuleNewTarget(
const char *python_module_name,
214 const char *session_dictionary_name,
217 static python::PythonObject
218 LLDBSWIGPythonCreateOSPlugin(
const char *python_class_name,
219 const char *session_dictionary_name,
222 static python::PythonObject
223 LLDBSWIGPython_CreateFrameRecognizer(
const char *python_class_name,
224 const char *session_dictionary_name);
227 LLDBSwigPython_GetRecognizedArguments(PyObject *implementor,
230 static bool LLDBSwigPython_ShouldHide(PyObject *implementor,
233 static bool LLDBSWIGPythonRunScriptKeywordProcess(
234 const char *python_function_name,
const char *session_dictionary_name,
237 static std::optional<std::string>
238 LLDBSWIGPythonRunScriptKeywordThread(
const char *python_function_name,
239 const char *session_dictionary_name,
242 static bool LLDBSWIGPythonRunScriptKeywordTarget(
243 const char *python_function_name,
const char *session_dictionary_name,
246 static std::optional<std::string>
247 LLDBSWIGPythonRunScriptKeywordFrame(
const char *python_function_name,
248 const char *session_dictionary_name,
251 static bool LLDBSWIGPythonRunScriptKeywordValue(
252 const char *python_function_name,
const char *session_dictionary_name,
256 LLDBSWIGPython_GetDynamicSetting(
void *module,
const char *setting,
260void *LLDBSWIGPython_CastPyObjectToSBData(PyObject *data);
261void *LLDBSWIGPython_CastPyObjectToSBBreakpoint(PyObject *data);
262void *LLDBSWIGPython_CastPyObjectToSBBreakpointLocation(PyObject *data);
263void *LLDBSWIGPython_CastPyObjectToSBAttachInfo(PyObject *data);
264void *LLDBSWIGPython_CastPyObjectToSBLaunchInfo(PyObject *data);
265void *LLDBSWIGPython_CastPyObjectToSBError(PyObject *data);
266void *LLDBSWIGPython_CastPyObjectToSBEvent(PyObject *data);
267void *LLDBSWIGPython_CastPyObjectToSBStream(PyObject *data);
268void *LLDBSWIGPython_CastPyObjectToSBThread(PyObject *data);
269void *LLDBSWIGPython_CastPyObjectToSBFrame(PyObject *data);
270void *LLDBSWIGPython_CastPyObjectToSBSymbolContext(PyObject *data);
271void *LLDBSWIGPython_CastPyObjectToSBValue(PyObject *data);
272void *LLDBSWIGPython_CastPyObjectToSBMemoryRegionInfo(PyObject *data);
273void *LLDBSWIGPython_CastPyObjectToSBExecutionContext(PyObject *data);
274void *LLDBSWIGPython_CastPyObjectToSBFrameList(PyObject *data);
A class that represents a running process on the host machine.
std::shared_ptr< lldb_private::ThreadPlan > ThreadPlanSP
std::shared_ptr< lldb_private::StackFrame > StackFrameSP
std::shared_ptr< lldb_private::BreakpointLocation > BreakpointLocationSP
DescriptionLevel
Description levels for "void GetDescription(Stream *, DescriptionLevel)" calls.
std::shared_ptr< lldb_private::Thread > ThreadSP
std::shared_ptr< lldb_private::ValueObject > ValueObjectSP
std::shared_ptr< lldb_private::ProcessAttachInfo > ProcessAttachInfoSP
std::shared_ptr< lldb_private::TypeSummaryOptions > TypeSummaryOptionsSP
std::shared_ptr< lldb_private::Breakpoint > BreakpointSP
std::shared_ptr< lldb_private::Process > ProcessSP
std::shared_ptr< lldb_private::Debugger > DebuggerSP
std::shared_ptr< lldb_private::Watchpoint > WatchpointSP
std::shared_ptr< lldb_private::TypeImpl > TypeImplSP
std::shared_ptr< lldb_private::Target > TargetSP
std::shared_ptr< lldb_private::DataExtractor > DataExtractorSP
std::shared_ptr< lldb_private::ProcessLaunchInfo > ProcessLaunchInfoSP
std::shared_ptr< lldb_private::Module > ModuleSP
std::shared_ptr< lldb_private::StackFrameList > StackFrameListSP
std::shared_ptr< lldb_private::ExecutionContextRef > ExecutionContextRefSP