summaryrefslogtreecommitdiffstats
path: root/lldb/scripts/Python
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/scripts/Python')
-rw-r--r--lldb/scripts/Python/createPythonInit.py17
-rw-r--r--lldb/scripts/Python/python-extensions.swig592
-rw-r--r--lldb/scripts/Python/python-swigsafecast.swig154
-rw-r--r--lldb/scripts/Python/python-typemaps.swig510
-rw-r--r--lldb/scripts/Python/python-wrapper.swig1074
5 files changed, 0 insertions, 2347 deletions
diff --git a/lldb/scripts/Python/createPythonInit.py b/lldb/scripts/Python/createPythonInit.py
deleted file mode 100644
index 3deb9159b70..00000000000
--- a/lldb/scripts/Python/createPythonInit.py
+++ /dev/null
@@ -1,17 +0,0 @@
-import os
-import sys
-
-pkgRelDir = sys.argv[1]
-pkgFiles = sys.argv[2:]
-
-getFileName = lambda f: os.path.splitext(os.path.basename(f))[0]
-importNames = ', '.join('"{}"'.format(getFileName(f)) for f in pkgFiles)
-
-script = """__all__ = [{import_names}]
-for x in __all__:
- __import__('lldb.{pkg_name}.' + x)
-""".format(import_names=importNames, pkg_name=pkgRelDir.replace("/", "."))
-
-pkgIniFile = os.path.normpath(os.path.join(pkgRelDir, "__init__.py"))
-with open(pkgIniFile, "w") as f:
- f.write(script)
diff --git a/lldb/scripts/Python/python-extensions.swig b/lldb/scripts/Python/python-extensions.swig
deleted file mode 100644
index 0b23fdd4000..00000000000
--- a/lldb/scripts/Python/python-extensions.swig
+++ /dev/null
@@ -1,592 +0,0 @@
-%extend lldb::SBBreakpoint {
- %pythoncode %{
- def __eq__(self, rhs):
- if not isinstance(rhs, type(self)):
- return False
-
- return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
-
- def __ne__(self, rhs):
- if not isinstance(rhs, type(self)):
- return True
-
- return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
- %}
-}
-
-%extend lldb::SBBroadcaster {
- %pythoncode %{
- def __eq__(self, rhs):
- if not isinstance(rhs, type(self)):
- return False
-
- return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
-
- def __ne__(self, rhs):
- if not isinstance(rhs, type(self)):
- return True
-
- return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
- %}
-}
-
-%extend lldb::SBCommandReturnObject {
- /* the write() and flush() calls are not part of the SB API proper, and are solely for Python usage
- they are meant to make an SBCommandReturnObject into a file-like object so that instructions of the sort
- print >>sb_command_return_object, "something"
- will work correctly */
-
- void lldb::SBCommandReturnObject::write (const char* str)
- {
- if (str)
- $self->Printf("%s",str);
- }
- void lldb::SBCommandReturnObject::flush ()
- {}
-}
-
-%extend lldb::SBCompileUnit {
- %pythoncode %{
- def __eq__(self, rhs):
- if not isinstance(rhs, type(self)):
- return False
-
- return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
-
- def __ne__(self, rhs):
- if not isinstance(rhs, type(self)):
- return True
-
- return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
- %}
-}
-
-%extend lldb::SBDeclaration {
- %pythoncode %{
- def __eq__(self, rhs):
- if not isinstance(rhs, type(self)):
- return False
-
- return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
-
- def __ne__(self, rhs):
- if not isinstance(rhs, type(self)):
- return True
-
- return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
- %}
-}
-
-%extend lldb::SBFunction {
- %pythoncode %{
- def __eq__(self, rhs):
- if not isinstance(rhs, type(self)):
- return False
-
- return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
-
- def __ne__(self, rhs):
- if not isinstance(rhs, type(self)):
- return True
-
- return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
- %}
-}
-
-%extend lldb::SBLineEntry {
- %pythoncode %{
- def __eq__(self, rhs):
- if not isinstance(rhs, type(self)):
- return False
-
- return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
-
- def __ne__(self, rhs):
- if not isinstance(rhs, type(self)):
- return True
-
- return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
- %}
-}
-
-%extend lldb::SBModule {
- %pythoncode %{
- def __eq__(self, rhs):
- if not isinstance(rhs, type(self)):
- return False
-
- return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
-
- def __ne__(self, rhs):
- if not isinstance(rhs, type(self)):
- return True
-
- return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
- %}
-}
-
-%extend lldb::SBSection {
- %pythoncode %{
- def __eq__(self, rhs):
- if not isinstance(rhs, type(self)):
- return False
-
- return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
-
- def __ne__(self, rhs):
- if not isinstance(rhs, type(self)):
- return True
-
- return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
- %}
-}
-%extend lldb::SBStream {
- /* the write() and flush() calls are not part of the SB API proper, and are solely for Python usage
- they are meant to make an SBStream into a file-like object so that instructions of the sort
- print >>sb_stream, "something"
- will work correctly */
-
- void lldb::SBStream::write (const char* str)
- {
- if (str)
- $self->Printf("%s",str);
- }
- void lldb::SBStream::flush ()
- {}
-}
-%extend lldb::SBSymbol {
- %pythoncode %{
- def __eq__(self, rhs):
- if not isinstance(rhs, type(self)):
- return False
-
- return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
-
- def __ne__(self, rhs):
- if not isinstance(rhs, type(self)):
- return True
-
- return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
- %}
-}
-
-%extend lldb::SBTarget {
- %pythoncode %{
- def __eq__(self, rhs):
- if not isinstance(rhs, type(self)):
- return False
-
- return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
-
- def __ne__(self, rhs):
- if not isinstance(rhs, type(self)):
- return True
-
- return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
- %}
-}
-
-%extend lldb::SBTypeFilter {
- %pythoncode %{
- def __eq__(self, rhs):
- if not isinstance(rhs, type(self)):
- return False
-
- return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
-
- def __ne__(self, rhs):
- if not isinstance(rhs, type(self)):
- return True
-
- return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
- %}
-}
-
-%extend lldb::SBTypeNameSpecifier {
- %pythoncode %{
- def __eq__(self, rhs):
- if not isinstance(rhs, type(self)):
- return False
-
- return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
-
- def __ne__(self, rhs):
- if not isinstance(rhs, type(self)):
- return True
-
- return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
- %}
-}
-
-%extend lldb::SBTypeSummary {
- %pythoncode %{
- def __eq__(self, rhs):
- if not isinstance(rhs, type(self)):
- return False
-
- return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
-
- def __ne__(self, rhs):
- if not isinstance(rhs, type(self)):
- return True
-
- return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
- %}
-}
-
-%extend lldb::SBTypeSynthetic {
- %pythoncode %{
- def __eq__(self, rhs):
- if not isinstance(rhs, type(self)):
- return False
-
- return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
-
- def __ne__(self, rhs):
- if not isinstance(rhs, type(self)):
- return True
-
- return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
- %}
-}
-
-%extend lldb::SBThread {
- %pythoncode %{
- def __eq__(self, rhs):
- if not isinstance(rhs, type(self)):
- return False
-
- return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
-
- def __ne__(self, rhs):
- if not isinstance(rhs, type(self)):
- return True
-
- return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
- %}
-}
-
-%pythoncode %{
-
-def command(command_name=None, doc=None):
- import lldb
- """A decorator function that registers an LLDB command line
- command that is bound to the function it is attached to."""
- def callable(function):
- """Registers an lldb command for the decorated function."""
- command = "command script add -f %s.%s %s" % (function.__module__, function.__name__, command_name or function.__name__)
- lldb.debugger.HandleCommand(command)
- if doc:
- function.__doc__ = doc
- return function
-
- return callable
-
-class declaration(object):
- '''A class that represents a source declaration location with file, line and column.'''
- def __init__(self, file, line, col):
- self.file = file
- self.line = line
- self.col = col
-
-class value_iter(object):
- def __iter__(self):
- return self
-
- def __next__(self):
- if self.index >= self.length:
- raise StopIteration()
- child_sbvalue = self.sbvalue.GetChildAtIndex(self.index)
- self.index += 1
- return value(child_sbvalue)
-
- def next(self):
- return self.__next__()
-
- def __init__(self,value):
- self.index = 0
- self.sbvalue = value
- if type(self.sbvalue) is value:
- self.sbvalue = self.sbvalue.sbvalue
- self.length = self.sbvalue.GetNumChildren()
-
-class value(object):
- '''A class designed to wrap lldb.SBValue() objects so the resulting object
- can be used as a variable would be in code. So if you have a Point structure
- variable in your code in the current frame named "pt", you can initialize an instance
- of this class with it:
-
- pt = lldb.value(lldb.frame.FindVariable("pt"))
- print pt
- print pt.x
- print pt.y
-
- pt = lldb.value(lldb.frame.FindVariable("rectangle_array"))
- print rectangle_array[12]
- print rectangle_array[5].origin.x'''
- def __init__(self, sbvalue):
- self.sbvalue = sbvalue
-
- def __nonzero__(self):
- return self.sbvalue.__nonzero__()
-
- def __bool__(self):
- return self.sbvalue.__bool__()
-
- def __str__(self):
- return self.sbvalue.__str__()
-
- def __getitem__(self, key):
- # Allow array access if this value has children...
- if type(key) is value:
- key = int(key)
- if type(key) is int:
- child_sbvalue = (self.sbvalue.GetValueForExpressionPath("[%i]" % key))
- if child_sbvalue and child_sbvalue.IsValid():
- return value(child_sbvalue)
- raise IndexError("Index '%d' is out of range" % key)
- raise TypeError("No array item of type %s" % str(type(key)))
-
- def __iter__(self):
- return value_iter(self.sbvalue)
-
- def __getattr__(self, name):
- child_sbvalue = self.sbvalue.GetChildMemberWithName (name)
- if child_sbvalue and child_sbvalue.IsValid():
- return value(child_sbvalue)
- raise AttributeError("Attribute '%s' is not defined" % name)
-
- def __add__(self, other):
- return int(self) + int(other)
-
- def __sub__(self, other):
- return int(self) - int(other)
-
- def __mul__(self, other):
- return int(self) * int(other)
-
- def __floordiv__(self, other):
- return int(self) // int(other)
-
- def __mod__(self, other):
- return int(self) % int(other)
-
- def __divmod__(self, other):
- return int(self) % int(other)
-
- def __pow__(self, other):
- return int(self) ** int(other)
-
- def __lshift__(self, other):
- return int(self) << int(other)
-
- def __rshift__(self, other):
- return int(self) >> int(other)
-
- def __and__(self, other):
- return int(self) & int(other)
-
- def __xor__(self, other):
- return int(self) ^ int(other)
-
- def __or__(self, other):
- return int(self) | int(other)
-
- def __div__(self, other):
- return int(self) / int(other)
-
- def __truediv__(self, other):
- return int(self) / int(other)
-
- def __iadd__(self, other):
- result = self.__add__(other)
- self.sbvalue.SetValueFromCString (str(result))
- return result
-
- def __isub__(self, other):
- result = self.__sub__(other)
- self.sbvalue.SetValueFromCString (str(result))
- return result
-
- def __imul__(self, other):
- result = self.__mul__(other)
- self.sbvalue.SetValueFromCString (str(result))
- return result
-
- def __idiv__(self, other):
- result = self.__div__(other)
- self.sbvalue.SetValueFromCString (str(result))
- return result
-
- def __itruediv__(self, other):
- result = self.__truediv__(other)
- self.sbvalue.SetValueFromCString (str(result))
- return result
-
- def __ifloordiv__(self, other):
- result = self.__floordiv__(self, other)
- self.sbvalue.SetValueFromCString (str(result))
- return result
-
- def __imod__(self, other):
- result = self.__and__(self, other)
- self.sbvalue.SetValueFromCString (str(result))
- return result
-
- def __ipow__(self, other):
- result = self.__pow__(self, other)
- self.sbvalue.SetValueFromCString (str(result))
- return result
-
- def __ipow__(self, other, modulo):
- result = self.__pow__(self, other, modulo)
- self.sbvalue.SetValueFromCString (str(result))
- return result
-
- def __ilshift__(self, other):
- result = self.__lshift__(other)
- self.sbvalue.SetValueFromCString (str(result))
- return result
-
- def __irshift__(self, other):
- result = self.__rshift__(other)
- self.sbvalue.SetValueFromCString (str(result))
- return result
-
- def __iand__(self, other):
- result = self.__and__(self, other)
- self.sbvalue.SetValueFromCString (str(result))
- return result
-
- def __ixor__(self, other):
- result = self.__xor__(self, other)
- self.sbvalue.SetValueFromCString (str(result))
- return result
-
- def __ior__(self, other):
- result = self.__ior__(self, other)
- self.sbvalue.SetValueFromCString (str(result))
- return result
-
- def __neg__(self):
- return -int(self)
-
- def __pos__(self):
- return +int(self)
-
- def __abs__(self):
- return abs(int(self))
-
- def __invert__(self):
- return ~int(self)
-
- def __complex__(self):
- return complex (int(self))
-
- def __int__(self):
- is_num,is_sign = is_numeric_type(self.sbvalue.GetType().GetCanonicalType().GetBasicType())
- if is_num and not is_sign: return self.sbvalue.GetValueAsUnsigned()
- return self.sbvalue.GetValueAsSigned()
-
- def __long__(self):
- return self.__int__()
-
- def __float__(self):
- return float (self.sbvalue.GetValueAsSigned())
-
- def __oct__(self):
- return '0%o' % self.sbvalue.GetValueAsUnsigned()
-
- def __hex__(self):
- return '0x%x' % self.sbvalue.GetValueAsUnsigned()
-
- def __len__(self):
- return self.sbvalue.GetNumChildren()
-
- def __eq__(self, other):
- if type(other) is int:
- return int(self) == other
- elif type(other) is str:
- return str(self) == other
- elif type(other) is value:
- self_err = SBError()
- other_err = SBError()
- self_val = self.sbvalue.GetValueAsUnsigned(self_err)
- if self_err.fail:
- raise ValueError("unable to extract value of self")
- other_val = other.sbvalue.GetValueAsUnsigned(other_err)
- if other_err.fail:
- raise ValueError("unable to extract value of other")
- return self_val == other_val
- raise TypeError("Unknown type %s, No equality operation defined." % str(type(other)))
-
- def __ne__(self, other):
- return not self.__eq__(other)
-%}
-
-%pythoncode %{
-
-class SBSyntheticValueProvider(object):
- def __init__(self,valobj):
- pass
-
- def num_children(self):
- return 0
-
- def get_child_index(self,name):
- return None
-
- def get_child_at_index(self,idx):
- return None
-
- def update(self):
- pass
-
- def has_children(self):
- return False
-
-
-%}
-
-%pythoncode %{
-
-# given an lldb.SBBasicType it returns a tuple
-# (is_numeric, is_signed)
-# the value of is_signed is undefined if is_numeric == false
-def is_numeric_type(basic_type):
- if basic_type == eBasicTypeInvalid: return (False,False)
- if basic_type == eBasicTypeVoid: return (False,False)
- if basic_type == eBasicTypeChar: return (True,False)
- if basic_type == eBasicTypeSignedChar: return (True,True)
- if basic_type == eBasicTypeUnsignedChar: return (True,False)
- if basic_type == eBasicTypeWChar: return (True,False)
- if basic_type == eBasicTypeSignedWChar: return (True,True)
- if basic_type == eBasicTypeUnsignedWChar: return (True,False)
- if basic_type == eBasicTypeChar16: return (True,False)
- if basic_type == eBasicTypeChar32: return (True,False)
- if basic_type == eBasicTypeShort: return (True,True)
- if basic_type == eBasicTypeUnsignedShort: return (True,False)
- if basic_type == eBasicTypeInt: return (True,True)
- if basic_type == eBasicTypeUnsignedInt: return (True,False)
- if basic_type == eBasicTypeLong: return (True,True)
- if basic_type == eBasicTypeUnsignedLong: return (True,False)
- if basic_type == eBasicTypeLongLong: return (True,True)
- if basic_type == eBasicTypeUnsignedLongLong: return (True,False)
- if basic_type == eBasicTypeInt128: return (True,True)
- if basic_type == eBasicTypeUnsignedInt128: return (True,False)
- if basic_type == eBasicTypeBool: return (False,False)
- if basic_type == eBasicTypeHalf: return (True,True)
- if basic_type == eBasicTypeFloat: return (True,True)
- if basic_type == eBasicTypeDouble: return (True,True)
- if basic_type == eBasicTypeLongDouble: return (True,True)
- if basic_type == eBasicTypeFloatComplex: return (True,True)
- if basic_type == eBasicTypeDoubleComplex: return (True,True)
- if basic_type == eBasicTypeLongDoubleComplex: return (True,True)
- if basic_type == eBasicTypeObjCID: return (False,False)
- if basic_type == eBasicTypeObjCClass: return (False,False)
- if basic_type == eBasicTypeObjCSel: return (False,False)
- if basic_type == eBasicTypeNullPtr: return (False,False)
- #if basic_type == eBasicTypeOther:
- return (False,False)
-
-%}
diff --git a/lldb/scripts/Python/python-swigsafecast.swig b/lldb/scripts/Python/python-swigsafecast.swig
deleted file mode 100644
index d5cafbfa67c..00000000000
--- a/lldb/scripts/Python/python-swigsafecast.swig
+++ /dev/null
@@ -1,154 +0,0 @@
-// leaving this undefined ensures we will get a linker error if we try to use SBTypeToSWIGWrapper()
-// for a type for which we did not specialze this function
-template <typename SBClass>
-PyObject*
-SBTypeToSWIGWrapper (SBClass* sb_object);
-
-template <typename SBClass>
-PyObject*
-SBTypeToSWIGWrapper (SBClass& sb_object)
-{
- return SBTypeToSWIGWrapper(&sb_object);
-}
-
-template <typename SBClass>
-PyObject*
-SBTypeToSWIGWrapper (const SBClass& sb_object)
-{
- return SBTypeToSWIGWrapper(&sb_object);
-}
-
-template <>
-PyObject*
-SBTypeToSWIGWrapper (PyObject* py_object)
-{
- return py_object;
-}
-
-template <>
-PyObject*
-SBTypeToSWIGWrapper (unsigned int* c_int)
-{
- if (!c_int)
- return NULL;
- return PyInt_FromLong(*c_int);
-}
-
-template <>
-PyObject*
-SBTypeToSWIGWrapper (lldb::SBEvent* event_sb)
-{
- return SWIG_NewPointerObj((void *) event_sb, SWIGTYPE_p_lldb__SBEvent, 0);
-}
-
-template <>
-PyObject*
-SBTypeToSWIGWrapper (lldb::SBProcess* process_sb)
-{
- return SWIG_NewPointerObj((void *) process_sb, SWIGTYPE_p_lldb__SBProcess, 0);
-}
-
-template <>
-PyObject*
-SBTypeToSWIGWrapper (lldb::SBThread* thread_sb)
-{
- return SWIG_NewPointerObj((void *) thread_sb, SWIGTYPE_p_lldb__SBThread, 0);
-}
-
-template <>
-PyObject*
-SBTypeToSWIGWrapper (lldb::SBThreadPlan* thread_plan_sb)
-{
- return SWIG_NewPointerObj((void *) thread_plan_sb, SWIGTYPE_p_lldb__SBThreadPlan, 0);
-}
-
-template <>
-PyObject*
-SBTypeToSWIGWrapper (lldb::SBTarget* target_sb)
-{
- return SWIG_NewPointerObj((void *) target_sb, SWIGTYPE_p_lldb__SBTarget, 0);
-}
-
-template <>
-PyObject*
-SBTypeToSWIGWrapper (lldb::SBFrame* frame_sb)
-{
- return SWIG_NewPointerObj((void *) frame_sb, SWIGTYPE_p_lldb__SBFrame, 0);
-}
-
-template <>
-PyObject*
-SBTypeToSWIGWrapper (lldb::SBDebugger* debugger_sb)
-{
- return SWIG_NewPointerObj((void *) debugger_sb, SWIGTYPE_p_lldb__SBDebugger, 0);
-}
-
-template <>
-PyObject*
-SBTypeToSWIGWrapper (lldb::SBBreakpoint* breakpoint_sb)
-{
- return SWIG_NewPointerObj((void *) breakpoint_sb, SWIGTYPE_p_lldb__SBBreakpoint, 0);
-}
-
-template <>
-PyObject*
-SBTypeToSWIGWrapper (lldb::SBWatchpoint* watchpoint_sb)
-{
- return SWIG_NewPointerObj((void *) watchpoint_sb, SWIGTYPE_p_lldb__SBWatchpoint, 0);
-}
-
-template <>
-PyObject*
-SBTypeToSWIGWrapper (lldb::SBBreakpointLocation* breakpoint_location_sb)
-{
- return SWIG_NewPointerObj((void *) breakpoint_location_sb, SWIGTYPE_p_lldb__SBBreakpointLocation, 0);
-}
-
-template <>
-PyObject*
-SBTypeToSWIGWrapper (lldb::SBBreakpointName* breakpoint_name_sb)
-{
- return SWIG_NewPointerObj((void *) breakpoint_name_sb, SWIGTYPE_p_lldb__SBBreakpointName, 0);
-}
-
-template <>
-PyObject*
-SBTypeToSWIGWrapper (lldb::SBValue* value_sb)
-{
- return SWIG_NewPointerObj((void *) value_sb, SWIGTYPE_p_lldb__SBValue, 0);
-}
-
-template <>
-PyObject*
-SBTypeToSWIGWrapper (lldb::SBCommandReturnObject* cmd_ret_obj_sb)
-{
- return SWIG_NewPointerObj((void *) cmd_ret_obj_sb, SWIGTYPE_p_lldb__SBCommandReturnObject, 0);
-}
-
-template <>
-PyObject*
-SBTypeToSWIGWrapper (lldb::SBExecutionContext* ctx_sb)
-{
- return SWIG_NewPointerObj((void *) ctx_sb, SWIGTYPE_p_lldb__SBExecutionContext, 0);
-}
-
-template <>
-PyObject*
-SBTypeToSWIGWrapper (lldb::SBTypeSummaryOptions* summary_options_sb)
-{
- return SWIG_NewPointerObj((void *) summary_options_sb, SWIGTYPE_p_lldb__SBTypeSummaryOptions, 0);
-}
-
-template <>
-PyObject*
-SBTypeToSWIGWrapper (lldb::SBStructuredData* structured_data_sb)
-{
- return SWIG_NewPointerObj((void *) structured_data_sb, SWIGTYPE_p_lldb__SBStructuredData, 0);
-}
-
-template <>
-PyObject*
-SBTypeToSWIGWrapper (lldb::SBSymbolContext* sym_ctx_sb)
-{
- return SWIG_NewPointerObj((void *) sym_ctx_sb, SWIGTYPE_p_lldb__SBSymbolContext, 0);
-}
diff --git a/lldb/scripts/Python/python-typemaps.swig b/lldb/scripts/Python/python-typemaps.swig
deleted file mode 100644
index 2ba380bdf0d..00000000000
--- a/lldb/scripts/Python/python-typemaps.swig
+++ /dev/null
@@ -1,510 +0,0 @@
-/* Typemap definitions, to allow SWIG to properly handle 'char**' data types. */
-
-%typemap(in) char ** {
- /* Check if is a list */
- if (PythonList::Check($input)) {
- PythonList list(PyRefType::Borrowed, $input);
- int size = list.GetSize();
- int i = 0;
- $1 = (char**)malloc((size+1)*sizeof(char*));
- for (i = 0; i < size; i++) {
- PythonString py_str = list.GetItemAtIndex(i).AsType<PythonString>();
- if (!py_str.IsAllocated()) {
- PyErr_SetString(PyExc_TypeError,"list must contain strings");
- free($1);
- return nullptr;
- }
-
- $1[i] = const_cast<char*>(py_str.GetString().data());
- }
- $1[i] = 0;
- } else if ($input == Py_None) {
- $1 = NULL;
- } else {
- PyErr_SetString(PyExc_TypeError,"not a list");
- return NULL;
- }
-}
-
-%typemap(typecheck) char ** {
- /* Check if is a list */
- $1 = 1;
- if (PythonList::Check($input)) {
- PythonList list(PyRefType::Borrowed, $input);
- int size = list.GetSize();
- int i = 0;
- for (i = 0; i < size; i++) {
- PythonString s = list.GetItemAtIndex(i).AsType<PythonString>();
- if (!s.IsAllocated()) { $1 = 0; }
- }
- }
- else
- {
- $1 = ( ($input == Py_None) ? 1 : 0);
- }
-}
-
-%typemap(freearg) char** {
- free((char *) $1);
-}
-
-%typemap(out) char** {
- int len;
- int i;
- len = 0;
- while ($1[len]) len++;
- PythonList list(len);
- for (i = 0; i < len; i++)
- list.SetItemAtIndex(i, PythonString($1[i]));
- $result = list.release();
-}
-
-
-%typemap(in) lldb::tid_t {
- if (PythonInteger::Check($input))
- {
- PythonInteger py_int(PyRefType::Borrowed, $input);
- $1 = static_cast<lldb::tid_t>(py_int.GetInteger());
- }
- else
- {
- PyErr_SetString(PyExc_ValueError, "Expecting an integer");
- return nullptr;
- }
-}
-
-%typemap(in) lldb::StateType {
- if (PythonInteger::Check($input))
- {
- PythonInteger py_int(PyRefType::Borrowed, $input);
- int64_t state_type_value = py_int.GetInteger() ;
-
- if (state_type_value > lldb::StateType::kLastStateType) {
- PyErr_SetString(PyExc_ValueError, "Not a valid StateType value");
- return nullptr;
- }
- $1 = static_cast<lldb::StateType>(state_type_value);
- }
- else
- {
- PyErr_SetString(PyExc_ValueError, "Expecting an integer");
- return nullptr;
- }
-}
-
-/* Typemap definitions to allow SWIG to properly handle char buffer. */
-
-// typemap for a char buffer
-// See also SBThread::GetStopDescription.
-%typemap(in) (char *dst, size_t dst_len) {
- if (!PyInt_Check($input)) {
- PyErr_SetString(PyExc_ValueError, "Expecting an integer");
- return NULL;
- }
- $2 = PyInt_AsLong($input);
- if ($2 <= 0) {
- PyErr_SetString(PyExc_ValueError, "Positive integer expected");
- return NULL;
- }
- $1 = (char *) malloc($2);
-}
-// SBProcess::ReadCStringFromMemory() uses a void*, but needs to be treated
-// as char data instead of byte data.
-%typemap(in) (void *char_buf, size_t size) = (char *dst, size_t dst_len);
-
-// Return the char buffer. Discarding any previous return result
-// See also SBThread::GetStopDescription.
-%typemap(argout) (char *dst, size_t dst_len) {
- Py_XDECREF($result); /* Blow away any previous result */
- if (result == 0) {
- PythonString string("");
- $result = string.release();
- Py_INCREF($result);
- } else {
- llvm::StringRef ref(static_cast<const char*>($1), result);
- PythonString string(ref);
- $result = string.release();
- }
- free($1);
-}
-// SBProcess::ReadCStringFromMemory() uses a void*, but needs to be treated
-// as char data instead of byte data.
-%typemap(argout) (void *char_buf, size_t size) = (char *dst, size_t dst_len);
-
-
-// typemap for an outgoing buffer
-// See also SBEvent::SBEvent(uint32_t event, const char *cstr, uint32_t cstr_len).
-// Ditto for SBProcess::PutSTDIN(const char *src, size_t src_len).
-%typemap(in) (const char *cstr, uint32_t cstr_len),
- (const char *src, size_t src_len) {
- if (PythonString::Check($input)) {
- PythonString str(PyRefType::Borrowed, $input);
- $1 = (char*)str.GetString().data();
- $2 = str.GetSize();
- }
- else if(PythonByteArray::Check($input)) {
- PythonByteArray bytearray(PyRefType::Borrowed, $input);
- $1 = (char*)bytearray.GetBytes().data();
- $2 = bytearray.GetSize();
- }
- else if (PythonBytes::Check($input)) {
- PythonBytes bytes(PyRefType::Borrowed, $input);
- $1 = (char*)bytes.GetBytes().data();
- $2 = bytes.GetSize();
- }
- else {
- PyErr_SetString(PyExc_ValueError, "Expecting a string");
- return NULL;
- }
-}
-// For SBProcess::WriteMemory, SBTarget::GetInstructions and SBDebugger::DispatchInput.
-%typemap(in) (const void *buf, size_t size),
- (const void *data, size_t data_len) {
- if (PythonString::Check($input)) {
- PythonString str(PyRefType::Borrowed, $input);
- $1 = (void*)str.GetString().data();
- $2 = str.GetSize();
- }
- else if(PythonByteArray::Check($input)) {
- PythonByteArray bytearray(PyRefType::Borrowed, $input);
- $1 = (void*)bytearray.GetBytes().data();
- $2 = bytearray.GetSize();
- }
- else if (PythonBytes::Check($input)) {
- PythonBytes bytes(PyRefType::Borrowed, $input);
- $1 = (void*)bytes.GetBytes().data();
- $2 = bytes.GetSize();
- }
- else {
- PyErr_SetString(PyExc_ValueError, "Expecting a buffer");
- return NULL;
- }
-}
-
-// typemap for an incoming buffer
-// See also SBProcess::ReadMemory.
-%typemap(in) (void *buf, size_t size) {
- if (PyInt_Check($input)) {
- $2 = PyInt_AsLong($input);
- } else if (PyLong_Check($input)) {
- $2 = PyLong_AsLong($input);
- } else {
- PyErr_SetString(PyExc_ValueError, "Expecting an integer or long object");
- return NULL;
- }
- if ($2 <= 0) {
- PyErr_SetString(PyExc_ValueError, "Positive integer expected");
- return NULL;
- }
- $1 = (void *) malloc($2);
-}
-
-// Return the buffer. Discarding any previous return result
-// See also SBProcess::ReadMemory.
-%typemap(argout) (void *buf, size_t size) {
- Py_XDECREF($result); /* Blow away any previous result */
- if (result == 0) {
- $result = Py_None;
- Py_INCREF($result);
- } else {
- PythonBytes bytes(static_cast<const uint8_t*>($1), result);
- $result = bytes.release();
- }
- free($1);
-}
-
-%{
-namespace {
-template <class T>
-T PyLongAsT(PyObject *obj) {
- static_assert(true, "unsupported type");
-}
-
-template <> uint64_t PyLongAsT<uint64_t>(PyObject *obj) {
- return static_cast<uint64_t>(PyLong_AsUnsignedLongLong(obj));
-}
-
-template <> uint32_t PyLongAsT<uint32_t>(PyObject *obj) {
- return static_cast<uint32_t>(PyLong_AsUnsignedLong(obj));
-}
-
-template <> int64_t PyLongAsT<int64_t>(PyObject *obj) {
- return static_cast<int64_t>(PyLong_AsLongLong(obj));
-}
-
-template <> int32_t PyLongAsT<int32_t>(PyObject *obj) {
- return static_cast<int32_t>(PyLong_AsLong(obj));
-}
-
-template <class T>
-bool SetNumberFromPyObject(T &number, PyObject *obj) {
- if (PyInt_Check(obj))
- number = static_cast<T>(PyInt_AsLong(obj));
- else if (PyLong_Check(obj))
- number = PyLongAsT<T>(obj);
- else return false;
-
- return true;
-}
-
-template <>
-bool SetNumberFromPyObject<double>(double &number, PyObject *obj) {
- if (PyFloat_Check(obj)) {
- number = PyFloat_AsDouble(obj);
- return true;
- }
-
- return false;
-}
-
-} // namespace
-%}
-
-// these typemaps allow Python users to pass list objects
-// and have them turn into C++ arrays (this is useful, for instance
-// when creating SBData objects from lists of numbers)
-%typemap(in) (uint64_t* array, size_t array_len),
- (uint32_t* array, size_t array_len),
- (int64_t* array, size_t array_len),
- (int32_t* array, size_t array_len),
- (double* array, size_t array_len) {
- /* Check if is a list */
- if (PyList_Check($input)) {
- int size = PyList_Size($input);
- int i = 0;
- $2 = size;
- $1 = ($1_type) malloc(size * sizeof($*1_type));
- for (i = 0; i < size; i++) {
- PyObject *o = PyList_GetItem($input,i);
- if (!SetNumberFromPyObject($1[i], o)) {
- PyErr_SetString(PyExc_TypeError,"list must contain numbers");
- free($1);
- return NULL;
- }
-
- if (PyErr_Occurred()) {
- free($1);
- return NULL;
- }
- }
- } else if ($input == Py_None) {
- $1 = NULL;
- $2 = 0;
- } else {
- PyErr_SetString(PyExc_TypeError,"not a list");
- return NULL;
- }
-}
-
-%typemap(freearg) (uint64_t* array, size_t array_len),
- (uint32_t* array, size_t array_len),
- (int64_t* array, size_t array_len),
- (int32_t* array, size_t array_len),
- (double* array, size_t array_len) {
- free($1);
-}
-
-// these typemaps wrap SBModule::GetVersion() from requiring a memory buffer
-// to the more Pythonic style where a list is returned and no previous allocation
-// is necessary - this will break if more than 50 versions are ever returned
-%typemap(typecheck) (uint32_t *versions, uint32_t num_versions) {
- $1 = ($input == Py_None ? 1 : 0);
-}
-
-%typemap(in, numinputs=0) (uint32_t *versions) {
- $1 = (uint32_t*)malloc(sizeof(uint32_t) * 50);
-}
-
-%typemap(in, numinputs=0) (uint32_t num_versions) {
- $1 = 50;
-}
-
-%typemap(argout) (uint32_t *versions, uint32_t num_versions) {
- uint32_t count = result;
- if (count >= $2)
- count = $2;
- PyObject* list = PyList_New(count);
- for (uint32_t j = 0; j < count; j++)
- {
- PyObject* item = PyInt_FromLong($1[j]);
- int ok = PyList_SetItem(list,j,item);
- if (ok != 0)
- {
- $result = Py_None;
- break;
- }
- }
- $result = list;
-}
-
-%typemap(freearg) (uint32_t *versions) {
- free($1);
-}
-
-
-// For Log::LogOutputCallback
-%typemap(in) (lldb::LogOutputCallback log_callback, void *baton) {
- if (!($input == Py_None || PyCallable_Check(reinterpret_cast<PyObject*>($input)))) {
- PyErr_SetString(PyExc_TypeError, "Need a callable object or None!");
- return NULL;
- }
-
- // FIXME (filcab): We can't currently check if our callback is already
- // LLDBSwigPythonCallPythonLogOutputCallback (to DECREF the previous
- // baton) nor can we just remove all traces of a callback, if we want to
- // revert to a file logging mechanism.
-
- // Don't lose the callback reference
- Py_INCREF($input);
- $1 = LLDBSwigPythonCallPythonLogOutputCallback;
- $2 = $input;
-}
-
-%typemap(typecheck) (lldb::LogOutputCallback log_callback, void *baton) {
- $1 = $input == Py_None;
- $1 = $1 || PyCallable_Check(reinterpret_cast<PyObject*>($input));
-}
-
-
-%typemap(in) lldb::FileSP {
- PythonFile py_file(PyRefType::Borrowed, $input);
- if (!py_file) {
- PyErr_SetString(PyExc_TypeError, "not a file");
- return nullptr;
- }
- auto sp = unwrapOrSetPythonException(py_file.ConvertToFile());
- if (!sp)
- return nullptr;
- $1 = sp;
-}
-
-%typemap(in) lldb::FileSP FORCE_IO_METHODS {
- PythonFile py_file(PyRefType::Borrowed, $input);
- if (!py_file) {
- PyErr_SetString(PyExc_TypeError, "not a file");
- return nullptr;
- }
- auto sp = unwrapOrSetPythonException(py_file.ConvertToFileForcingUseOfScriptingIOMethods());
- if (!sp)
- return nullptr;
- $1 = sp;
-}
-
-%typemap(in) lldb::FileSP BORROWED {
- PythonFile py_file(PyRefType::Borrowed, $input);
- if (!py_file) {
- PyErr_SetString(PyExc_TypeError, "not a file");
- return nullptr;
- }
- auto sp = unwrapOrSetPythonException(py_file.ConvertToFile(/*borrowed=*/true));
- if (!sp)
- return nullptr;
- $1 = sp;
-}
-
-%typemap(in) lldb::FileSP BORROWED_FORCE_IO_METHODS {
- PythonFile py_file(PyRefType::Borrowed, $input);
- if (!py_file) {
- PyErr_SetString(PyExc_TypeError, "not a file");
- return nullptr;
- }
- auto sp = unwrapOrSetPythonException(py_file.ConvertToFileForcingUseOfScriptingIOMethods(/*borrowed=*/true));
- if (!sp)
- return nullptr;
- $1 = sp;
-}
-
-%typecheck(SWIG_TYPECHECK_POINTER) lldb::FileSP {
- if (PythonFile::Check($input)) {
- $1 = 1;
- } else {
- PyErr_Clear();
- $1 = 0;
- }
-}
-
-%typemap(out) lldb::FileSP {
- $result = nullptr;
- lldb::FileSP &sp = $1;
- if (sp) {
- PythonFile pyfile = unwrapOrSetPythonException(PythonFile::FromFile(*sp));
- if (!pyfile.IsValid())
- return nullptr;
- $result = pyfile.release();
- }
- if (!$result)
- {
- $result = Py_None;
- Py_INCREF(Py_None);
- }
-}
-
-%typemap(in) (const char* string, int len) {
- if ($input == Py_None)
- {
- $1 = NULL;
- $2 = 0;
- }
- else if (PythonString::Check($input))
- {
- PythonString py_str(PyRefType::Borrowed, $input);
- llvm::StringRef str = py_str.GetString();
- $1 = const_cast<char*>(str.data());
- $2 = str.size();
- // In Python 2, if $input is a PyUnicode object then this
- // will trigger a Unicode -> String conversion, in which
- // case the `PythonString` will now own the PyString. Thus
- // if it goes out of scope, the data will be deleted. The
- // only way to avoid this is to leak the Python object in
- // that case. Note that if there was no conversion, then
- // releasing the string will not leak anything, since we
- // created this as a borrowed reference.
- py_str.release();
- }
- else
- {
- PyErr_SetString(PyExc_TypeError,"not a string-like object");
- return NULL;
- }
-}
-
-// These two pybuffer macros are copied out of swig/Lib/python/pybuffer.i,
-// and fixed so they will not crash if PyObject_GetBuffer fails.
-// https://github.com/swig/swig/issues/1640
-
-%define %pybuffer_mutable_binary(TYPEMAP, SIZE)
-%typemap(in) (TYPEMAP, SIZE) {
- int res; Py_ssize_t size = 0; void *buf = 0;
- Py_buffer view;
- res = PyObject_GetBuffer($input, &view, PyBUF_WRITABLE);
- if (res < 0) {
- PyErr_Clear();
- %argument_fail(res, "(TYPEMAP, SIZE)", $symname, $argnum);
- }
- size = view.len;
- buf = view.buf;
- PyBuffer_Release(&view);
- $1 = ($1_ltype) buf;
- $2 = ($2_ltype) (size/sizeof($*1_type));
-}
-%enddef
-
-%define %pybuffer_binary(TYPEMAP, SIZE)
-%typemap(in) (TYPEMAP, SIZE) {
- int res; Py_ssize_t size = 0; const void *buf = 0;
- Py_buffer view;
- res = PyObject_GetBuffer($input, &view, PyBUF_CONTIG_RO);
- if (res < 0) {
- PyErr_Clear();
- %argument_fail(res, "(TYPEMAP, SIZE)", $symname, $argnum);
- }
- size = view.len;
- buf = view.buf;
- PyBuffer_Release(&view);
- $1 = ($1_ltype) buf;
- $2 = ($2_ltype) (size / sizeof($*1_type));
-}
-%enddef
-
-%pybuffer_binary(const uint8_t *buf, size_t num_bytes);
-%pybuffer_mutable_binary(uint8_t *buf, size_t num_bytes);
diff --git a/lldb/scripts/Python/python-wrapper.swig b/lldb/scripts/Python/python-wrapper.swig
deleted file mode 100644
index 3a63165cf58..00000000000
--- a/lldb/scripts/Python/python-wrapper.swig
+++ /dev/null
@@ -1,1074 +0,0 @@
-%header %{
-
-template <typename T>
-PyObject *
-SBTypeToSWIGWrapper (T* item);
-
-class PyErr_Cleaner
-{
-public:
- PyErr_Cleaner(bool print=false) :
- m_print(print)
- {
- }
-
- ~PyErr_Cleaner()
- {
- if (PyErr_Occurred())
- {
- if(m_print && !PyErr_ExceptionMatches(PyExc_SystemExit))
- PyErr_Print();
- PyErr_Clear();
- }
- }
-
-private:
- bool m_print;
-};
-
-%}
-
-%wrapper %{
-
-// resolve a dotted Python name in the form
-// foo.bar.baz.Foobar to an actual Python object
-// if pmodule is NULL, the __main__ module will be used
-// as the starting point for the search
-
-
-// This function is called by lldb_private::ScriptInterpreterPython::BreakpointCallbackFunction(...)
-// and is used when a script command is attached to a breakpoint for execution.
-
-SWIGEXPORT llvm::Expected<bool>
-LLDBSwigPythonBreakpointCallbackFunction
-(
- const char *python_function_name,
- const char *session_dictionary_name,
- const lldb::StackFrameSP& frame_sp,
- const lldb::BreakpointLocationSP& bp_loc_sp,
- lldb_private::StructuredDataImpl *args_impl
-)
-{
- using namespace llvm;
-
- lldb::SBFrame sb_frame (frame_sp);
- lldb::SBBreakpointLocation sb_bp_loc(bp_loc_sp);
-
- PyErr_Cleaner py_err_cleaner(true);
- auto dict = PythonModule::MainModule().ResolveName<PythonDictionary>(session_dictionary_name);
- auto pfunc = PythonObject::ResolveNameWithDictionary<PythonCallable>(python_function_name, dict);
-
- unsigned max_positional_args;
- if (auto arg_info = pfunc.GetArgInfo())
- max_positional_args = arg_info.get().max_positional_args;
- else
- return arg_info.takeError();
-
- PythonObject frame_arg(PyRefType::Owned, SBTypeToSWIGWrapper(sb_frame));
- PythonObject bp_loc_arg(PyRefType::Owned, SBTypeToSWIGWrapper(sb_bp_loc));
-
- auto result = [&] () -> Expected<PythonObject> {
- // If the called function doesn't take extra_args, drop them here:
- if (max_positional_args < 4) {
- return pfunc.Call(frame_arg, bp_loc_arg, dict);
- } else {
- lldb::SBStructuredData *args_value = new lldb::SBStructuredData(args_impl);
- PythonObject args_arg(PyRefType::Owned, SBTypeToSWIGWrapper(args_value));
- return pfunc.Call(frame_arg, bp_loc_arg, args_arg, dict);
- }
- } ();
-
- if (!result)
- return result.takeError();
-
- // Only False counts as false!
- return result.get().get() != Py_False;
-}
-
-// This function is called by lldb_private::ScriptInterpreterPython::WatchpointCallbackFunction(...)
-// and is used when a script command is attached to a watchpoint for execution.
-
-SWIGEXPORT bool
-LLDBSwigPythonWatchpointCallbackFunction
-(
- const char *python_function_name,
- const char *session_dictionary_name,
- const lldb::StackFrameSP& frame_sp,
- const lldb::WatchpointSP& wp_sp
-)
-{
- lldb::SBFrame sb_frame (frame_sp);
- lldb::SBWatchpoint sb_wp(wp_sp);
-
- bool stop_at_watchpoint = true;
-
- PyErr_Cleaner py_err_cleaner(true);
-
- auto dict = PythonModule::MainModule().ResolveName<PythonDictionary>(session_dictionary_name);
- auto pfunc = PythonObject::ResolveNameWithDictionary<PythonCallable>(python_function_name, dict);
-
- if (!pfunc.IsAllocated())
- return stop_at_watchpoint;
-
- PythonObject frame_arg(PyRefType::Owned, SBTypeToSWIGWrapper(sb_frame));
- PythonObject wp_arg(PyRefType::Owned, SBTypeToSWIGWrapper(sb_wp));
- PythonObject result = pfunc(frame_arg, wp_arg, dict);
-
- if (result.get() == Py_False)
- stop_at_watchpoint = false;
-
- return stop_at_watchpoint;
-}
-
-SWIGEXPORT bool
-LLDBSwigPythonCallTypeScript
-(
- const char *python_function_name,
- const void *session_dictionary,
- const lldb::ValueObjectSP& valobj_sp,
- void** pyfunct_wrapper,
- const lldb::TypeSummaryOptionsSP& options_sp,
- std::string& retval
-)
-{
- lldb::SBValue sb_value (valobj_sp);
- lldb::SBTypeSummaryOptions sb_options(options_sp.get());
-
- retval.clear();
-
- if (!python_function_name || !session_dictionary)
- return false;
-
- PyObject *pfunc_impl = nullptr;
-
- if (pyfunct_wrapper && *pyfunct_wrapper && PyFunction_Check (*pyfunct_wrapper))
- {
- pfunc_impl = (PyObject*)(*pyfunct_wrapper);
- if (pfunc_impl->ob_refcnt == 1)
- {
- Py_XDECREF(pfunc_impl);
- pfunc_impl = NULL;
- }
- }
-
- PyObject *py_dict = (PyObject*)session_dictionary;
- if (!PythonDictionary::Check(py_dict))
- return true;
-
- PythonDictionary dict(PyRefType::Borrowed, py_dict);
-
- PyErr_Cleaner pyerr_cleanup(true); // show Python errors
-
- PythonCallable pfunc(PyRefType::Borrowed, pfunc_impl);
-
- if (!pfunc.IsAllocated())
- {
- pfunc = PythonObject::ResolveNameWithDictionary<PythonCallable>(python_function_name, dict);
- if (!pfunc.IsAllocated())
- return false;
-
- if (pyfunct_wrapper)
- {
- *pyfunct_wrapper = pfunc.get();
- Py_XINCREF(pfunc.get());
- }
- }
-
- PythonObject result;
- auto argc = pfunc.GetArgInfo();
- if (!argc) {
- llvm::consumeError(argc.takeError());
- return false;
- }
-
- PythonObject value_arg(PyRefType::Owned, SBTypeToSWIGWrapper(sb_value));
- PythonObject options_arg(PyRefType::Owned, SBTypeToSWIGWrapper(sb_options));
-
- if (argc.get().max_positional_args < 3)
- result = pfunc(value_arg,dict);
- else
- result = pfunc(value_arg,dict,options_arg);
-
- retval = result.Str().GetString().str();
-
- return true;
-}
-
-SWIGEXPORT void*
-LLDBSwigPythonCreateSyntheticProvider
-(
- const char *python_class_name,
- const char *session_dictionary_name,
- const lldb::ValueObjectSP& valobj_sp
-)
-{
- if (python_class_name == NULL || python_class_name[0] == '\0' || !session_dictionary_name)
- Py_RETURN_NONE;
-
- PyErr_Cleaner py_err_cleaner(true);
-
- auto dict = PythonModule::MainModule().ResolveName<PythonDictionary>(session_dictionary_name);
- auto pfunc = PythonObject::ResolveNameWithDictionary<PythonCallable>(python_class_name,dict);
-
- if (!pfunc.IsAllocated())
- Py_RETURN_NONE;
-
- // I do not want the SBValue to be deallocated when going out of scope because python
- // has ownership of it and will manage memory for this object by itself
- lldb::SBValue *sb_value = new lldb::SBValue(valobj_sp);
- sb_value->SetPreferSyntheticValue(false);
-
- PythonObject val_arg(PyRefType::Owned, SBTypeToSWIGWrapper(sb_value));
- if (!val_arg.IsAllocated())
- Py_RETURN_NONE;
-
- PythonObject result = pfunc(val_arg, dict);
-
- if (result.IsAllocated())
- return result.release();
-
- Py_RETURN_NONE;
-}
-
-SWIGEXPORT void*
-LLDBSwigPythonCreateCommandObject
-(
- const char *python_class_name,
- const char *session_dictionary_name,
- const lldb::DebuggerSP debugger_sp
-)
-{
- if (python_class_name == NULL || python_class_name[0] == '\0' || !session_dictionary_name)
- Py_RETURN_NONE;
-
- PyErr_Cleaner py_err_cleaner(true);
- auto dict = PythonModule::MainModule().ResolveName<PythonDictionary>(session_dictionary_name);
- auto pfunc = PythonObject::ResolveNameWithDictionary<PythonCallable>(python_class_name, dict);
-
- if (!pfunc.IsAllocated())
- return nullptr;
-
- lldb::SBDebugger debugger_sb(debugger_sp);
- PythonObject debugger_arg(PyRefType::Owned, SBTypeToSWIGWrapper(debugger_sb));
- PythonObject result = pfunc(debugger_arg, dict);
-
- if (result.IsAllocated())
- return result.release();
-
- Py_RETURN_NONE;
-}
-
-SWIGEXPORT void*
-LLDBSwigPythonCreateScriptedThreadPlan
-(
- const char *python_class_name,
- const char *session_dictionary_name,
- lldb_private::StructuredDataImpl *args_impl,
- std::string &error_string,
- const lldb::ThreadPlanSP& thread_plan_sp
-)
-{
- if (python_class_name == NULL || python_class_name[0] == '\0' || !session_dictionary_name)
- Py_RETURN_NONE;
-
- // I do not want the SBThreadPlan to be deallocated when going out of scope because python
- // has ownership of it and will manage memory for this object by itself
- lldb::SBThreadPlan *tp_value = new lldb::SBThreadPlan(thread_plan_sp);
-
- PyErr_Cleaner py_err_cleaner(true);
-
- auto dict = PythonModule::MainModule().ResolveName<PythonDictionary>(session_dictionary_name);
- auto pfunc = PythonObject::ResolveNameWithDictionary<PythonCallable>(python_class_name, dict);
-
- if (!pfunc.IsAllocated()) {
- error_string.append("could not find script class: ");
- error_string.append(python_class_name);
- return nullptr;
- }
-
- PythonObject tp_arg(PyRefType::Owned, SBTypeToSWIGWrapper(tp_value));
-
- if (!tp_arg.IsAllocated())
- Py_RETURN_NONE;
-
- llvm::Expected<PythonCallable::ArgInfo> arg_info = pfunc.GetArgInfo();
- if (!arg_info) {
- llvm::handleAllErrors(
- arg_info.takeError(),
- [&](PythonException &E) {
- error_string.append(E.ReadBacktrace());
- },
- [&](const llvm::ErrorInfoBase &E) {
- error_string.append(E.message());
- });
- Py_RETURN_NONE;
- }
-
- PythonObject result = {};
- if (arg_info.get().max_positional_args == 2) {
- if (args_impl != nullptr) {
- error_string.assign("args passed, but __init__ does not take an args dictionary");
- Py_RETURN_NONE;
- }
- result = pfunc(tp_arg, dict);
- } else if (arg_info.get().max_positional_args >= 3) {
- lldb::SBStructuredData *args_value = new lldb::SBStructuredData(args_impl);
- PythonObject args_arg(PyRefType::Owned, SBTypeToSWIGWrapper(args_value));
- result = pfunc(tp_arg, args_arg, dict);
- } else {
- error_string.assign("wrong number of arguments in __init__, should be 2 or 3 (not including self)");
- Py_RETURN_NONE;
- }
-
- // FIXME: At this point we should check that the class we found supports all the methods
- // that we need.
-
- if (result.IsAllocated())
- return result.release();
- Py_RETURN_NONE;
-}
-
-SWIGEXPORT bool
-LLDBSWIGPythonCallThreadPlan
-(
- void *implementor,
- const char *method_name,
- lldb_private::Event *event,
- bool &got_error
-)
-{
- got_error = false;
-
- PyErr_Cleaner py_err_cleaner(false);
- PythonObject self(PyRefType::Borrowed, static_cast<PyObject*>(implementor));
- auto pfunc = self.ResolveName<PythonCallable>(method_name);
-
- if (!pfunc.IsAllocated())
- return false;
-
- PythonObject result;
- if (event != nullptr)
- {
- lldb::SBEvent sb_event(event);
- PythonObject event_arg(PyRefType::Owned, SBTypeToSWIGWrapper(sb_event));
- result = pfunc(event_arg);
- }
- else
- result = pfunc();
-
- if (PyErr_Occurred())
- {
- got_error = true;
- printf ("Return value was neither false nor true for call to %s.\n", method_name);
- PyErr_Print();
- return false;
- }
-
- if (result.get() == Py_True)
- return true;
- else if (result.get() == Py_False)
- return false;
-
- // Somebody returned the wrong thing...
- got_error = true;
- printf ("Wrong return value type for call to %s.\n", method_name);
- return false;
-}
-
-SWIGEXPORT void *
-LLDBSwigPythonCreateScriptedBreakpointResolver
-(
- const char *python_class_name,
- const char *session_dictionary_name,
- lldb_private::StructuredDataImpl *args_impl,
- lldb::BreakpointSP &breakpoint_sp
-)
-{
- if (python_class_name == NULL || python_class_name[0] == '\0' || !session_dictionary_name)
- Py_RETURN_NONE;
-
- PyErr_Cleaner py_err_cleaner(true);
-
- auto dict = PythonModule::MainModule().ResolveName<PythonDictionary>(session_dictionary_name);
- auto pfunc = PythonObject::ResolveNameWithDictionary<PythonCallable>(python_class_name, dict);
-
- if (!pfunc.IsAllocated())
- return nullptr;
-
- lldb::SBBreakpoint *bkpt_value = new lldb::SBBreakpoint(breakpoint_sp);
-
- PythonObject bkpt_arg(PyRefType::Owned, SBTypeToSWIGWrapper(bkpt_value));
-
- lldb::SBStructuredData *args_value = new lldb::SBStructuredData(args_impl);
- PythonObject args_arg(PyRefType::Owned, SBTypeToSWIGWrapper(args_value));
-
- PythonObject result = pfunc(bkpt_arg, args_arg, dict);
- // FIXME: At this point we should check that the class we found supports all the methods
- // that we need.
-
- if (result.IsAllocated())
- {
- // Check that __callback__ is defined:
- auto callback_func = result.ResolveName<PythonCallable>("__callback__");
- if (callback_func.IsAllocated())
- return result.release();
- else
- result.release();
- }
- Py_RETURN_NONE;
-}
-
-SWIGEXPORT unsigned int
-LLDBSwigPythonCallBreakpointResolver
-(
- void *implementor,
- const char *method_name,
- lldb_private::SymbolContext *sym_ctx
-)
-{
- PyErr_Cleaner py_err_cleaner(false);
- PythonObject self(PyRefType::Borrowed, static_cast<PyObject*>(implementor));
- auto pfunc = self.ResolveName<PythonCallable>(method_name);
-
- if (!pfunc.IsAllocated())
- return 0;
-
- PythonObject result;
- if (sym_ctx != nullptr) {
- lldb::SBSymbolContext sb_sym_ctx(sym_ctx);
- PythonObject sym_ctx_arg(PyRefType::Owned, SBTypeToSWIGWrapper(sb_sym_ctx));
- result = pfunc(sym_ctx_arg);
- } else
- result = pfunc();
-
- if (PyErr_Occurred())
- {
- PyErr_Print();
- return 0;
- }
-
- // The callback will return a bool, but we're need to also return ints
- // so we're squirrelling the bool through as an int... And if you return
- // nothing, we'll continue.
- if (strcmp(method_name, "__callback__") == 0) {
- if (result.get() == Py_False)
- return 0;
- else
- return 1;
- }
-
- PythonInteger int_result = result.AsType<PythonInteger>();
- if (!int_result.IsAllocated())
- return 0;
-
- unsigned int ret_val = int_result.GetInteger();
-
- return ret_val;
-}
-
-// wrapper that calls an optional instance member of an object taking no arguments
-static PyObject*
-LLDBSwigPython_CallOptionalMember
-(
- PyObject* implementor,
- char* callee_name,
- PyObject* ret_if_not_found = Py_None,
- bool* was_found = NULL
-)
-{
- PyErr_Cleaner py_err_cleaner(false);
-
- PythonObject self(PyRefType::Borrowed, static_cast<PyObject*>(implementor));
- auto pfunc = self.ResolveName<PythonCallable>(callee_name);
-
- if (!pfunc.IsAllocated())
- {
- if (was_found)
- *was_found = false;
- Py_XINCREF(ret_if_not_found);
- return ret_if_not_found;
- }
-
- if (was_found)
- *was_found = true;
-
- PythonObject result = pfunc();
- return result.release();
-}
-
-SWIGEXPORT size_t
-LLDBSwigPython_CalculateNumChildren
-(
- PyObject *implementor,
- uint32_t max
-)
-{
- PythonObject self(PyRefType::Borrowed, implementor);
- auto pfunc = self.ResolveName<PythonCallable>("num_children");
-
- if (!pfunc.IsAllocated())
- return 0;
-
- auto arg_info = pfunc.GetArgInfo();
- if (!arg_info) {
- llvm::consumeError(arg_info.takeError());
- return 0;
- }
-
- PythonObject result;
-
- if (arg_info.get().max_positional_args < 1)
- result = pfunc();
- else
- result = pfunc(PythonInteger(max));
-
- if (!result.IsAllocated())
- return 0;
-
- PythonInteger int_result = result.AsType<PythonInteger>();
- if (!int_result.IsAllocated())
- return 0;
-
- size_t ret_val = int_result.GetInteger();
-
- if (PyErr_Occurred()) //FIXME use Expected to catch python exceptions
- {
- PyErr_Print();
- PyErr_Clear();
- }
-
- if (arg_info.get().max_positional_args < 1)
- ret_val = std::min(ret_val, static_cast<size_t>(max));
-
- return ret_val;
-}
-
-SWIGEXPORT PyObject*
-LLDBSwigPython_GetChildAtIndex
-(
- PyObject *implementor,
- uint32_t idx
-)
-{
- PyErr_Cleaner py_err_cleaner(true);
-
- PythonObject self(PyRefType::Borrowed, implementor);
- auto pfunc = self.ResolveName<PythonCallable>("get_child_at_index");
-
- if (!pfunc.IsAllocated())
- return nullptr;
-
- PythonObject result = pfunc(PythonInteger(idx));
-
- if (!result.IsAllocated())
- return nullptr;
-
- lldb::SBValue* sbvalue_ptr = nullptr;
- if (SWIG_ConvertPtr(result.get(), (void**)&sbvalue_ptr, SWIGTYPE_p_lldb__SBValue, 0) == -1)
- return nullptr;
-
- if (sbvalue_ptr == nullptr)
- return nullptr;
-
- return result.release();
-}
-
-SWIGEXPORT int
-LLDBSwigPython_GetIndexOfChildWithName
-(
- PyObject *implementor,
- const char* child_name
-)
-{
- PyErr_Cleaner py_err_cleaner(true);
-
- PythonObject self(PyRefType::Borrowed, implementor);
- auto pfunc = self.ResolveName<PythonCallable>("get_child_index");
-
- if (!pfunc.IsAllocated())
- return UINT32_MAX;
-
- PythonObject result = pfunc(PythonString(child_name));
-
- if (!result.IsAllocated())
- return UINT32_MAX;
-
- PythonInteger int_result = result.AsType<PythonInteger>();
- if (!int_result.IsAllocated())
- return UINT32_MAX;
-
- int64_t retval = int_result.GetInteger();
- if (retval >= 0)
- return (uint32_t)retval;
-
- return UINT32_MAX;
-}
-
-SWIGEXPORT bool
-LLDBSwigPython_UpdateSynthProviderInstance
-(
- PyObject *implementor
-)
-{
- bool ret_val = false;
-
- static char callee_name[] = "update";
-
- PyObject* py_return = LLDBSwigPython_CallOptionalMember(implementor,callee_name);
-
- if (py_return == Py_True)
- ret_val = true;
-
- Py_XDECREF(py_return);
-
- return ret_val;
-}
-
-SWIGEXPORT bool
-LLDBSwigPython_MightHaveChildrenSynthProviderInstance
-(
- PyObject *implementor
-)
-{
- bool ret_val = false;
-
- static char callee_name[] = "has_children";
-
- PyObject* py_return = LLDBSwigPython_CallOptionalMember(implementor,callee_name, Py_True);
-
- if (py_return == Py_True)
- ret_val = true;
-
- Py_XDECREF(py_return);
-
- return ret_val;
-}
-
-SWIGEXPORT PyObject*
-LLDBSwigPython_GetValueSynthProviderInstance
-(
- PyObject *implementor
-)
-{
- PyObject* ret_val = nullptr;
-
- static char callee_name[] = "get_value";
-
- PyObject* py_return = LLDBSwigPython_CallOptionalMember(implementor,callee_name, Py_None);
-
- if (py_return == Py_None || py_return == nullptr)
- ret_val = nullptr;
-
- lldb::SBValue* sbvalue_ptr = NULL;
-
- if (SWIG_ConvertPtr(py_return, (void**)&sbvalue_ptr, SWIGTYPE_p_lldb__SBValue, 0) == -1)
- ret_val = nullptr;
- else if (sbvalue_ptr == NULL)
- ret_val = nullptr;
- else
- ret_val = py_return;
-
- Py_XDECREF(py_return);
- return ret_val;
-}
-
-SWIGEXPORT void*
-LLDBSWIGPython_CastPyObjectToSBValue
-(
- PyObject* data
-)
-{
- lldb::SBValue* sb_ptr = NULL;
-
- int valid_cast = SWIG_ConvertPtr(data, (void**)&sb_ptr, SWIGTYPE_p_lldb__SBValue, 0);
-
- if (valid_cast == -1)
- return NULL;
-
- return sb_ptr;
-}
-
-SWIGEXPORT bool
-LLDBSwigPythonCallCommand
-(
- const char *python_function_name,
- const char *session_dictionary_name,
- lldb::DebuggerSP& debugger,
- const char* args,
- lldb_private::CommandReturnObject& cmd_retobj,
- lldb::ExecutionContextRefSP exe_ctx_ref_sp
-)
-{
- lldb::SBCommandReturnObject cmd_retobj_sb(cmd_retobj);
- lldb::SBDebugger debugger_sb(debugger);
- lldb::SBExecutionContext exe_ctx_sb(exe_ctx_ref_sp);
-
- PyErr_Cleaner py_err_cleaner(true);
- auto dict = PythonModule::MainModule().ResolveName<PythonDictionary>(session_dictionary_name);
- auto pfunc = PythonObject::ResolveNameWithDictionary<PythonCallable>(python_function_name, dict);
-
- if (!pfunc.IsAllocated())
- return false;
-
- // pass the pointer-to cmd_retobj_sb or watch the underlying object disappear from under you
- // see comment above for SBCommandReturnObjectReleaser for further details
- auto argc = pfunc.GetArgInfo();
- if (!argc) {
- llvm::consumeError(argc.takeError());
- return false;
- }
- PythonObject debugger_arg(PyRefType::Owned, SBTypeToSWIGWrapper(debugger_sb));
- PythonObject exe_ctx_arg(PyRefType::Owned, SBTypeToSWIGWrapper(exe_ctx_sb));
- PythonObject cmd_retobj_arg(PyRefType::Owned, SBTypeToSWIGWrapper(&cmd_retobj_sb));
-
- if (argc.get().max_positional_args < 5u)
- pfunc(debugger_arg, PythonString(args), cmd_retobj_arg, dict);
- else
- pfunc(debugger_arg, PythonString(args), exe_ctx_arg, cmd_retobj_arg, dict);
-
- return true;
-}
-
-SWIGEXPORT bool
-LLDBSwigPythonCallCommandObject
-(
- PyObject *implementor,
- lldb::DebuggerSP& debugger,
- const char* args,
- lldb_private::CommandReturnObject& cmd_retobj,
- lldb::ExecutionContextRefSP exe_ctx_ref_sp
-)
-{
- lldb::SBCommandReturnObject cmd_retobj_sb(cmd_retobj);
- lldb::SBDebugger debugger_sb(debugger);
- lldb::SBExecutionContext exe_ctx_sb(exe_ctx_ref_sp);
-
- PyErr_Cleaner py_err_cleaner(true);
-
- PythonObject self(PyRefType::Borrowed, implementor);
- auto pfunc = self.ResolveName<PythonCallable>("__call__");
-
- if (!pfunc.IsAllocated())
- return false;
-
- // pass the pointer-to cmd_retobj_sb or watch the underlying object disappear from under you
- // see comment above for SBCommandReturnObjectReleaser for further details
- PythonObject debugger_arg(PyRefType::Owned, SBTypeToSWIGWrapper(debugger_sb));
- PythonObject exe_ctx_arg(PyRefType::Owned, SBTypeToSWIGWrapper(exe_ctx_sb));
- PythonObject cmd_retobj_arg(PyRefType::Owned, SBTypeToSWIGWrapper(&cmd_retobj_sb));
-
- pfunc(debugger_arg, PythonString(args), exe_ctx_arg, cmd_retobj_arg);
-
- return true;
-}
-
-SWIGEXPORT void*
-LLDBSWIGPythonCreateOSPlugin
-(
- const char *python_class_name,
- const char *session_dictionary_name,
- const lldb::ProcessSP& process_sp
-)
-{
- if (python_class_name == NULL || python_class_name[0] == '\0' || !session_dictionary_name)
- Py_RETURN_NONE;
-
- PyErr_Cleaner py_err_cleaner(true);
-
- auto dict = PythonModule::MainModule().ResolveName<PythonDictionary>(session_dictionary_name);
- auto pfunc = PythonObject::ResolveNameWithDictionary<PythonCallable>(python_class_name, dict);
-
- if (!pfunc.IsAllocated())
- Py_RETURN_NONE;
-
- // I do not want the SBProcess to be deallocated when going out of scope because python
- // has ownership of it and will manage memory for this object by itself
- lldb::SBProcess *process_sb = new lldb::SBProcess(process_sp);
- PythonObject process_arg(PyRefType::Owned, SBTypeToSWIGWrapper(process_sb));
- if (!process_arg.IsAllocated())
- Py_RETURN_NONE;
-
- auto result = pfunc(process_arg);
-
- if (result.IsAllocated())
- return result.release();
-
- Py_RETURN_NONE;
-}
-
-SWIGEXPORT void*
-LLDBSWIGPython_CreateFrameRecognizer
-(
- const char *python_class_name,
- const char *session_dictionary_name
-)
-{
- if (python_class_name == NULL || python_class_name[0] == '\0' || !session_dictionary_name)
- Py_RETURN_NONE;
-
- PyErr_Cleaner py_err_cleaner(true);
-
- auto dict = PythonModule::MainModule().ResolveName<PythonDictionary>(session_dictionary_name);
- auto pfunc = PythonObject::ResolveNameWithDictionary<PythonCallable>(python_class_name, dict);
-
- if (!pfunc.IsAllocated())
- Py_RETURN_NONE;
-
- auto result = pfunc();
-
- if (result.IsAllocated())
- return result.release();
-
- Py_RETURN_NONE;
-}
-
-SWIGEXPORT PyObject*
-LLDBSwigPython_GetRecognizedArguments
-(
- PyObject *implementor,
- const lldb::StackFrameSP& frame_sp
-)
-{
- static char callee_name[] = "get_recognized_arguments";
-
- lldb::SBFrame frame_sb(frame_sp);
- PyObject *arg = SBTypeToSWIGWrapper(frame_sb);
-
- PythonString str(callee_name);
- PyObject* result = PyObject_CallMethodObjArgs(implementor, str.get(), arg,
- NULL);
- return result;
-}
-
-SWIGEXPORT void*
-LLDBSWIGPython_GetDynamicSetting (void* module, const char* setting, const lldb::TargetSP& target_sp)
-{
- if (!module || !setting)
- Py_RETURN_NONE;
-
- PyErr_Cleaner py_err_cleaner(true);
- PythonObject py_module(PyRefType::Borrowed, (PyObject *)module);
- auto pfunc = py_module.ResolveName<PythonCallable>("get_dynamic_setting");
-
- if (!pfunc.IsAllocated())
- Py_RETURN_NONE;
-
- lldb::SBTarget target_sb(target_sp);
- PythonObject target_arg(PyRefType::Owned, SBTypeToSWIGWrapper(target_sb));
- auto result = pfunc(target_arg, PythonString(setting));
-
- return result.release();
-}
-
-SWIGEXPORT bool
-LLDBSWIGPythonRunScriptKeywordProcess
-(const char* python_function_name,
-const char* session_dictionary_name,
-lldb::ProcessSP& process,
-std::string& output)
-
-{
- if (python_function_name == NULL || python_function_name[0] == '\0' || !session_dictionary_name)
- return false;
-
- PyErr_Cleaner py_err_cleaner(true);
-
- auto dict = PythonModule::MainModule().ResolveName<PythonDictionary>(session_dictionary_name);
- auto pfunc = PythonObject::ResolveNameWithDictionary<PythonCallable>(python_function_name, dict);
-
- if (!pfunc.IsAllocated())
- return false;
-
- lldb::SBProcess process_sb(process);
- PythonObject process_arg(PyRefType::Owned, SBTypeToSWIGWrapper(process_sb));
- auto result = pfunc(process_arg, dict);
-
- output = result.Str().GetString().str();
-
- return true;
-}
-
-SWIGEXPORT bool
-LLDBSWIGPythonRunScriptKeywordThread
-(const char* python_function_name,
-const char* session_dictionary_name,
-lldb::ThreadSP& thread,
-std::string& output)
-
-{
- if (python_function_name == NULL || python_function_name[0] == '\0' || !session_dictionary_name)
- return false;
-
- PyErr_Cleaner py_err_cleaner(true);
-
- auto dict = PythonModule::MainModule().ResolveName<PythonDictionary>(session_dictionary_name);
- auto pfunc = PythonObject::ResolveNameWithDictionary<PythonCallable>(python_function_name, dict);
-
- if (!pfunc.IsAllocated())
- return false;
-
- lldb::SBThread thread_sb(thread);
- PythonObject thread_arg(PyRefType::Owned, SBTypeToSWIGWrapper(thread_sb));
- auto result = pfunc(thread_arg, dict);
-
- output = result.Str().GetString().str();
-
- return true;
-}
-
-SWIGEXPORT bool
-LLDBSWIGPythonRunScriptKeywordTarget
-(const char* python_function_name,
-const char* session_dictionary_name,
-lldb::TargetSP& target,
-std::string& output)
-
-{
- if (python_function_name == NULL || python_function_name[0] == '\0' || !session_dictionary_name)
- return false;
-
- PyErr_Cleaner py_err_cleaner(true);
-
- auto dict = PythonModule::MainModule().ResolveName<PythonDictionary>(session_dictionary_name);
- auto pfunc = PythonObject::ResolveNameWithDictionary<PythonCallable>(python_function_name,dict);
-
- if (!pfunc.IsAllocated())
- return false;
-
- lldb::SBTarget target_sb(target);
- PythonObject target_arg(PyRefType::Owned, SBTypeToSWIGWrapper(target_sb));
- auto result = pfunc(target_arg, dict);
-
- output = result.Str().GetString().str();
-
- return true;
-}
-
-SWIGEXPORT bool
-LLDBSWIGPythonRunScriptKeywordFrame
-(const char* python_function_name,
-const char* session_dictionary_name,
-lldb::StackFrameSP& frame,
-std::string& output)
-
-{
- if (python_function_name == NULL || python_function_name[0] == '\0' || !session_dictionary_name)
- return false;
-
- PyErr_Cleaner py_err_cleaner(true);
-
- auto dict = PythonModule::MainModule().ResolveName<PythonDictionary>(session_dictionary_name);
- auto pfunc = PythonObject::ResolveNameWithDictionary<PythonCallable>(python_function_name,dict);
-
- if (!pfunc.IsAllocated())
- return false;
-
- lldb::SBFrame frame_sb(frame);
- PythonObject frame_arg(PyRefType::Owned, SBTypeToSWIGWrapper(frame_sb));
- auto result = pfunc(frame_arg, dict);
-
- output = result.Str().GetString().str();
-
- return true;
-}
-
-SWIGEXPORT bool
-LLDBSWIGPythonRunScriptKeywordValue
-(const char* python_function_name,
-const char* session_dictionary_name,
-lldb::ValueObjectSP& value,
-std::string& output)
-
-{
- if (python_function_name == NULL || python_function_name[0] == '\0' || !session_dictionary_name)
- return false;
-
- PyErr_Cleaner py_err_cleaner(true);
-
- auto dict = PythonModule::MainModule().ResolveName<PythonDictionary>(session_dictionary_name);
- auto pfunc = PythonObject::ResolveNameWithDictionary<PythonCallable>(python_function_name, dict);
-
- if (!pfunc.IsAllocated())
- return false;
-
- lldb::SBValue value_sb(value);
- PythonObject value_arg(PyRefType::Owned, SBTypeToSWIGWrapper(value_sb));
- auto result = pfunc(value_arg, dict);
-
- output = result.Str().GetString().str();
-
- return true;
-}
-
-SWIGEXPORT bool
-LLDBSwigPythonCallModuleInit
-(
- const char *python_module_name,
- const char *session_dictionary_name,
- lldb::DebuggerSP& debugger
-)
-{
- std::string python_function_name_string = python_module_name;
- python_function_name_string += ".__lldb_init_module";
- const char* python_function_name = python_function_name_string.c_str();
-
- PyErr_Cleaner py_err_cleaner(true);
-
- auto dict = PythonModule::MainModule().ResolveName<PythonDictionary>(session_dictionary_name);
- auto pfunc = PythonObject::ResolveNameWithDictionary<PythonCallable>(python_function_name, dict);
-
- // This method is optional and need not exist. So if we don't find it,
- // it's actually a success, not a failure.
- if (!pfunc.IsAllocated())
- return true;
-
- lldb::SBDebugger debugger_sb(debugger);
- PythonObject debugger_arg(PyRefType::Owned, SBTypeToSWIGWrapper(debugger_sb));
- pfunc(debugger_arg, dict);
-
- return true;
-}
-%}
-
-
-%runtime %{
-// Forward declaration to be inserted at the start of LLDBWrapPython.h
-#include "lldb/API/SBDebugger.h"
-#include "lldb/API/SBValue.h"
-
-SWIGEXPORT lldb::ValueObjectSP
-LLDBSWIGPython_GetValueObjectSPFromSBValue (void* data)
-{
- lldb::ValueObjectSP valobj_sp;
- if (data)
- {
- lldb::SBValue* sb_ptr = (lldb::SBValue *)data;
- valobj_sp = sb_ptr->GetSP();
- }
- return valobj_sp;
-}
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void LLDBSwigPythonCallPythonLogOutputCallback(const char *str, void *baton);
-
-#ifdef __cplusplus
-}
-#endif
-%}
-
-%wrapper %{
-
-
-// For the LogOutputCallback functions
-void LLDBSwigPythonCallPythonLogOutputCallback(const char *str, void *baton) {
- if (baton != Py_None) {
- SWIG_PYTHON_THREAD_BEGIN_BLOCK;
- PyObject *result = PyObject_CallFunction(reinterpret_cast<PyObject*>(baton), const_cast<char*>("s"), str);
- Py_XDECREF(result);
- SWIG_PYTHON_THREAD_END_BLOCK;
- }
-}
-%}
OpenPOWER on IntegriCloud