[lldb] Convert script native types to StructuredData counterpart
authorMed Ismail Bennani <ismail@bennani.ma>
Fri, 21 Jul 2023 23:43:24 +0000 (16:43 -0700)
committerMed Ismail Bennani <ismail@bennani.ma>
Sat, 22 Jul 2023 01:47:46 +0000 (18:47 -0700)
commit57bd882343f8e4cca598b6ad47da93476cffb987
treed95844a2c7104133e153a9b8ecb9663aea706e58
parentaa34b34e93d444efec6cd894e5e55927d0e413e6
[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>
21 files changed:
lldb/bindings/headers.swig
lldb/bindings/interface/SBScriptObjectExtensions.i [new file with mode: 0644]
lldb/bindings/interfaces.swig
lldb/bindings/python/python-typemaps.swig
lldb/include/lldb/API/SBDebugger.h
lldb/include/lldb/API/SBDefines.h
lldb/include/lldb/API/SBProcess.h
lldb/include/lldb/API/SBScriptObject.h [new file with mode: 0644]
lldb/include/lldb/API/SBStructuredData.h
lldb/include/lldb/Core/StructuredDataImpl.h
lldb/include/lldb/Interpreter/ScriptInterpreter.h
lldb/include/lldb/Interpreter/ScriptObject.h [new file with mode: 0644]
lldb/include/lldb/lldb-types.h
lldb/source/API/CMakeLists.txt
lldb/source/API/SBProcess.cpp
lldb/source/API/SBScriptObject.cpp [new file with mode: 0644]
lldb/source/API/SBStructuredData.cpp
lldb/source/Plugins/ScriptInterpreter/Python/PythonDataObjects.h
lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp
lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPythonImpl.h
lldb/test/API/python_api/sbstructureddata/TestStructuredDataAPI.py