diff options
author | Pavel Labath <pavel@labath.sk> | 2022-01-17 11:29:35 +0100 |
---|---|---|
committer | Pavel Labath <pavel@labath.sk> | 2022-01-18 10:28:58 +0100 |
commit | c154f397eeb86ea1a5b8fa46405104ace962cec3 (patch) | |
tree | df2a6b975c72e1933494dab0a909e1253035e6e8 /lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp | |
parent | cc0d208805c3d1dac3ec5a44f971b1b5c8ab3a2a (diff) | |
download | llvm-c154f397eeb86ea1a5b8fa46405104ace962cec3.zip llvm-c154f397eeb86ea1a5b8fa46405104ace962cec3.tar.gz llvm-c154f397eeb86ea1a5b8fa46405104ace962cec3.tar.bz2 |
[lldb/python] Use PythonObject in LLDBSwigPython functions
Return our PythonObject wrappers instead of raw PyObjects (obfuscated as
void *). This ensures that ownership (reference counts) of python
objects is automatically tracked.
Differential Revision: https://reviews.llvm.org/D117462
Diffstat (limited to 'lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp')
-rw-r--r-- | lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp | 41 |
1 files changed, 25 insertions, 16 deletions
diff --git a/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp b/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp index 96725af..0e01dc5 100644 --- a/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp +++ b/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp @@ -1439,10 +1439,11 @@ ScriptInterpreterPythonImpl::CreateFrameRecognizer(const char *class_name) { return StructuredData::GenericSP(); Locker py_lock(this, Locker::AcquireLock | Locker::NoSTDIN, Locker::FreeLock); - void *ret_val = LLDBSWIGPython_CreateFrameRecognizer( + PythonObject ret_val = LLDBSWIGPython_CreateFrameRecognizer( class_name, m_dictionary_name.c_str()); - return StructuredData::GenericSP(new StructuredPythonObject(ret_val)); + return StructuredData::GenericSP( + new StructuredPythonObject(std::move(ret_val))); } lldb::ValueObjectListSP ScriptInterpreterPythonImpl::GetRecognizedArguments( @@ -1498,10 +1499,11 @@ ScriptInterpreterPythonImpl::OSPlugin_CreatePluginObject( return StructuredData::GenericSP(); Locker py_lock(this, Locker::AcquireLock | Locker::NoSTDIN, Locker::FreeLock); - void *ret_val = LLDBSWIGPythonCreateOSPlugin( + PythonObject ret_val = LLDBSWIGPythonCreateOSPlugin( class_name, m_dictionary_name.c_str(), process_sp); - return StructuredData::GenericSP(new StructuredPythonObject(ret_val)); + return StructuredData::GenericSP( + new StructuredPythonObject(std::move(ret_val))); } StructuredData::DictionarySP ScriptInterpreterPythonImpl::OSPlugin_RegisterInfo( @@ -1749,13 +1751,14 @@ StructuredData::ObjectSP ScriptInterpreterPythonImpl::CreateScriptedThreadPlan( Locker py_lock(this, Locker::AcquireLock | Locker::InitSession | Locker::NoSTDIN); - void *ret_val = LLDBSwigPythonCreateScriptedThreadPlan( + PythonObject ret_val = LLDBSwigPythonCreateScriptedThreadPlan( class_name, python_interpreter->m_dictionary_name.c_str(), args_data, error_str, thread_plan_sp); if (!ret_val) return {}; - return StructuredData::ObjectSP(new StructuredPythonObject(ret_val)); + return StructuredData::ObjectSP( + new StructuredPythonObject(std::move(ret_val))); } bool ScriptInterpreterPythonImpl::ScriptedThreadPlanExplainsStop( @@ -1849,11 +1852,12 @@ ScriptInterpreterPythonImpl::CreateScriptedBreakpointResolver( Locker py_lock(this, Locker::AcquireLock | Locker::InitSession | Locker::NoSTDIN); - void *ret_val = LLDBSwigPythonCreateScriptedBreakpointResolver( + PythonObject ret_val = LLDBSwigPythonCreateScriptedBreakpointResolver( class_name, python_interpreter->m_dictionary_name.c_str(), args_data, bkpt_sp); - return StructuredData::GenericSP(new StructuredPythonObject(ret_val)); + return StructuredData::GenericSP( + new StructuredPythonObject(std::move(ret_val))); } bool ScriptInterpreterPythonImpl::ScriptedBreakpointResolverSearchCallback( @@ -1920,11 +1924,12 @@ StructuredData::GenericSP ScriptInterpreterPythonImpl::CreateScriptedStopHook( Locker py_lock(this, Locker::AcquireLock | Locker::InitSession | Locker::NoSTDIN); - void *ret_val = LLDBSwigPythonCreateScriptedStopHook( + PythonObject ret_val = LLDBSwigPythonCreateScriptedStopHook( target_sp, class_name, python_interpreter->m_dictionary_name.c_str(), args_data, error); - return StructuredData::GenericSP(new StructuredPythonObject(ret_val)); + return StructuredData::GenericSP( + new StructuredPythonObject(std::move(ret_val))); } bool ScriptInterpreterPythonImpl::ScriptedStopHookHandleStop( @@ -2015,10 +2020,11 @@ ScriptInterpreterPythonImpl::CreateSyntheticScriptedProvider( Locker py_lock(this, Locker::AcquireLock | Locker::InitSession | Locker::NoSTDIN); - void *ret_val = LLDBSwigPythonCreateSyntheticProvider( + PythonObject ret_val = LLDBSwigPythonCreateSyntheticProvider( class_name, python_interpreter->m_dictionary_name.c_str(), valobj); - return StructuredData::ObjectSP(new StructuredPythonObject(ret_val)); + return StructuredData::ObjectSP( + new StructuredPythonObject(std::move(ret_val))); } StructuredData::GenericSP @@ -2033,10 +2039,11 @@ ScriptInterpreterPythonImpl::CreateScriptCommandObject(const char *class_name) { Locker py_lock(this, Locker::AcquireLock | Locker::InitSession | Locker::NoSTDIN); - void *ret_val = LLDBSwigPythonCreateCommandObject( + PythonObject ret_val = LLDBSwigPythonCreateCommandObject( class_name, m_dictionary_name.c_str(), debugger_sp); - return StructuredData::GenericSP(new StructuredPythonObject(ret_val)); + return StructuredData::GenericSP( + new StructuredPythonObject(std::move(ret_val))); } bool ScriptInterpreterPythonImpl::GenerateTypeScriptFunction( @@ -2149,7 +2156,8 @@ bool ScriptInterpreterPythonImpl::GetScriptedSummary( if (new_callee && old_callee != new_callee) { Locker py_lock(this, Locker::AcquireLock | Locker::InitSession | Locker::NoSTDIN); - callee_wrapper_sp = std::make_shared<StructuredPythonObject>(new_callee); + callee_wrapper_sp = std::make_shared<StructuredPythonObject>( + PythonObject(PyRefType::Borrowed, static_cast<PyObject *>(new_callee))); } return ret_val; @@ -2802,7 +2810,8 @@ bool ScriptInterpreterPythonImpl::LoadScriptingModule( ScriptInterpreter::eScriptReturnTypeOpaqueObject, &module_pyobj, exc_options) && module_pyobj) - *module_sp = std::make_shared<StructuredPythonObject>(module_pyobj); + *module_sp = std::make_shared<StructuredPythonObject>(PythonObject( + PyRefType::Owned, static_cast<PyObject *>(module_pyobj))); } return true; |