[lldb] Convert script native types to StructuredData counterpart
This patch adds the ability to pass native types from the script
interpreter to methods that use a {SB,}StructuredData argument.
To do so, this patch changes the `ScriptedObject` struture that holds
the pointer to the script object as well as the originating script
interpreter language. It also exposes that to the SB API via a new class
called `SBScriptObject`.
This structure allows the debugger to parse the script object and
convert it to a StructuredData object. If the type is not compatible
with the StructuredData types, we will store its pointer in a
`StructuredData::Generic` object.
This patch also adds some SWIG typemaps that checks the input argument to
ensure it's either an SBStructuredData object, in which case it just
passes it throught, or a python object that is NOT another SB type, to
provide some guardrails for the user.
rdar://111467140
Differential Revision: https://reviews.llvm.org/D155161
Signed-off-by: Med Ismail Bennani <ismail@bennani.ma>
This commit is contained in:
@@ -1519,6 +1519,17 @@ ScriptInterpreterPythonImpl::CreateScriptedProcessInterface() {
|
||||
return std::make_unique<ScriptedProcessPythonInterface>(*this);
|
||||
}
|
||||
|
||||
StructuredData::ObjectSP
|
||||
ScriptInterpreterPythonImpl::CreateStructuredDataFromScriptObject(
|
||||
ScriptObject obj) {
|
||||
void *ptr = const_cast<void *>(obj.GetPointer());
|
||||
PythonObject py_obj(PyRefType::Borrowed, static_cast<PyObject *>(ptr));
|
||||
if (!py_obj.IsValid() || py_obj.IsNone())
|
||||
return {};
|
||||
Locker py_lock(this, Locker::AcquireLock | Locker::NoSTDIN, Locker::FreeLock);
|
||||
return py_obj.CreateStructuredObject();
|
||||
}
|
||||
|
||||
StructuredData::GenericSP
|
||||
ScriptInterpreterPythonImpl::OSPlugin_CreatePluginObject(
|
||||
const char *class_name, lldb::ProcessSP process_sp) {
|
||||
|
||||
Reference in New Issue
Block a user