summaryrefslogtreecommitdiff
path: root/lldb/scripts/Python/python-wrapper.swig
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/scripts/Python/python-wrapper.swig')
-rw-r--r--lldb/scripts/Python/python-wrapper.swig748
1 files changed, 0 insertions, 748 deletions
diff --git a/lldb/scripts/Python/python-wrapper.swig b/lldb/scripts/Python/python-wrapper.swig
deleted file mode 100644
index 1442608d6bb4..000000000000
--- a/lldb/scripts/Python/python-wrapper.swig
+++ /dev/null
@@ -1,748 +0,0 @@
-%wrapper %{
-
-class PyErr_Cleaner
-{
-public:
- PyErr_Cleaner(bool print=false) :
- m_print(print)
- {
- }
-
- ~PyErr_Cleaner()
- {
- if (PyErr_Occurred())
- {
- if(m_print)
- PyErr_Print();
- PyErr_Clear();
- }
- }
-
-private:
- bool m_print;
-};
-
-// 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
-
-static PyObject*
-ResolvePythonName(const char* name,
- PyObject* pmodule = NULL)
-{
- if (!name)
- return pmodule;
-
- PyErr_Cleaner pyerr_cleanup(true); // show Python errors
-
- PyObject* main_dict;
-
- if (!pmodule)
- {
- pmodule = PyImport_AddModule ("__main__");
- if (!pmodule)
- return NULL;
- }
-
- if (!PyDict_Check(pmodule))
- {
- main_dict = PyModule_GetDict (pmodule);
- if (!main_dict)
- return NULL;
- }
- else
- main_dict = pmodule;
-
- const char* dot_pos = ::strchr(name, '.');
-
- PyObject *dest_object;
- PyObject *key, *value;
- Py_ssize_t pos = 0;
-
- if (!dot_pos)
- {
- dest_object = NULL;
- while (PyDict_Next (main_dict, &pos, &key, &value))
- {
- // We have stolen references to the key and value objects in the dictionary; we need to increment
- // them now so that Python's garbage collector doesn't collect them out from under us.
- Py_INCREF (key);
- Py_INCREF (value);
- if (strcmp (PyString_AsString (key), name) == 0)
- {
- dest_object = value;
- break;
- }
- }
- if (!dest_object || dest_object == Py_None)
- return NULL;
- return dest_object;
- }
- else
- {
- size_t len = dot_pos - name;
- std::string piece(name,len);
- pmodule = ResolvePythonName(piece.c_str(), main_dict);
- if (!pmodule)
- return NULL;
- name = dot_pos+1;
- return ResolvePythonName(dot_pos+1,pmodule); // tail recursion.. should be optimized by the compiler
- }
-}
-
-static PyObject*
-FindSessionDictionary(const char *session_dictionary_name)
-{
- return ResolvePythonName(session_dictionary_name, NULL);
-}
-
-// This function is called by lldb_private::ScriptInterpreterPython::BreakpointCallbackFunction(...)
-// and is used when a script command is attached to a breakpoint for execution.
-
-SWIGEXPORT bool
-LLDBSwigPythonBreakpointCallbackFunction
-(
- const char *python_function_name,
- const char *session_dictionary_name,
- const lldb::StackFrameSP& frame_sp,
- const lldb::BreakpointLocationSP& bp_loc_sp
-)
-{
- lldb::SBFrame sb_frame (frame_sp);
- lldb::SBBreakpointLocation sb_bp_loc(bp_loc_sp);
-
- bool stop_at_breakpoint = true;
- PyObject *Frame_PyObj = SWIG_NewPointerObj((void *) &sb_frame, SWIGTYPE_p_lldb__SBFrame, 0);
- PyObject *Bp_Loc_PyObj = SWIG_NewPointerObj ((void *) &sb_bp_loc, SWIGTYPE_p_lldb__SBBreakpointLocation, 0);
-
- if (Frame_PyObj == NULL || Bp_Loc_PyObj == NULL)
- return stop_at_breakpoint;
-
- if (!python_function_name || !session_dictionary_name)
- return stop_at_breakpoint;
-
- PyObject *session_dict, *pfunc;
- PyObject *pargs, *pvalue;
-
- session_dict = FindSessionDictionary (session_dictionary_name);
- if (session_dict != NULL)
- {
- pfunc = ResolvePythonName (python_function_name, session_dict);
- if (pfunc != NULL)
- {
- // Set up the arguments and call the function.
-
- if (PyCallable_Check (pfunc))
- {
- pargs = PyTuple_New (3);
- if (pargs == NULL)
- {
- if (PyErr_Occurred())
- PyErr_Clear();
- return stop_at_breakpoint;
- }
-
- PyTuple_SetItem (pargs, 0, Frame_PyObj); // This "steals" a reference to Frame_PyObj
- PyTuple_SetItem (pargs, 1, Bp_Loc_PyObj); // This "steals" a reference to Bp_Loc_PyObj
- PyTuple_SetItem (pargs, 2, session_dict); // This "steals" a reference to session_dict
- pvalue = PyObject_CallObject (pfunc, pargs);
- Py_DECREF (pargs);
-
- if (pvalue != NULL)
- {
- Py_DECREF (pvalue);
- }
- else if (PyErr_Occurred ())
- {
- PyErr_Clear();
- }
- Py_INCREF (session_dict);
- }
- else if (PyErr_Occurred())
- {
- PyErr_Clear();
- }
- }
- else if (PyErr_Occurred())
- {
- PyErr_Clear();
- }
- }
- else if (PyErr_Occurred ())
- {
- PyErr_Clear ();
- }
- return stop_at_breakpoint;
-}
-
-SWIGEXPORT bool
-LLDBSwigPythonCallTypeScript
-(
- const char *python_function_name,
- const void *session_dictionary,
- const lldb::ValueObjectSP& valobj_sp,
- void** pyfunct_wrapper,
- std::string& retval
-)
-{
- lldb::SBValue sb_value (valobj_sp);
-
- PyObject *ValObj_PyObj = SWIG_NewPointerObj((void *) &sb_value, SWIGTYPE_p_lldb__SBValue, 0);
-
- if (ValObj_PyObj == NULL)
- return false;
-
- if (!python_function_name || !session_dictionary)
- return false;
-
- PyObject *session_dict = (PyObject*)session_dictionary, *pfunc = NULL, *pargs = NULL, *pvalue = NULL;
-
- if (pyfunct_wrapper && *pyfunct_wrapper && PyFunction_Check (*pyfunct_wrapper))
- {
- pfunc = (PyObject*)(*pyfunct_wrapper);
- if (pfunc->ob_refcnt == 1)
- {
- Py_XDECREF(pfunc);
- pfunc = NULL;
- }
- }
-
- if (PyDict_Check(session_dict))
- {
- PyErr_Cleaner pyerr_cleanup(true); // show Python errors
-
- if (!pfunc)
- {
- pfunc = ResolvePythonName (python_function_name, session_dict);
- if (!pfunc || !PyFunction_Check (pfunc))
- return false;
- else
- {
- if (pyfunct_wrapper)
- *pyfunct_wrapper = pfunc;
- }
- }
- /*else
- printf("caching works!!!!\n");*/
-
- pargs = PyTuple_Pack(2, ValObj_PyObj, session_dict);
- if (pargs == NULL)
- return false;
-
- pvalue = PyObject_CallObject (pfunc, pargs);
- Py_DECREF (pargs);
-
- if (pvalue != NULL && pvalue != Py_None && PyString_Check(pvalue))
- retval.assign(PyString_AsString(pvalue));
- Py_XDECREF (pvalue);
- Py_INCREF (session_dict);
- }
- return true;
-}
-
-SWIGEXPORT void*
-LLDBSwigPythonCreateSyntheticProvider
-(
- const std::string python_class_name,
- const char *session_dictionary_name,
- const lldb::ValueObjectSP& valobj_sp
-)
-{
- PyObject* retval = NULL;
-
- if (python_class_name.empty() || !session_dictionary_name)
- 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 *valobj_sb = new lldb::SBValue(valobj_sp);
-
- PyObject *ValObj_PyObj = SWIG_NewPointerObj((void *)valobj_sb, SWIGTYPE_p_lldb__SBValue, 0);
-
- if (ValObj_PyObj == NULL)
- Py_RETURN_NONE;
-
- const char* python_function_name = python_class_name.c_str();
-
- PyObject *session_dict, *pfunc;
- PyObject *pvalue;
-
- session_dict = FindSessionDictionary (session_dictionary_name);
- if (session_dict != NULL)
- {
- pfunc = ResolvePythonName (python_function_name, session_dict);
- if (pfunc != NULL)
- {
- // Set up the arguments and call the function.
-
- if (PyCallable_Check (pfunc))
- {
- PyObject *argList = Py_BuildValue("SS", ValObj_PyObj, session_dict);
-
- if (PyErr_Occurred ())
- {
- PyErr_Print();
- PyErr_Clear();
- return retval;
- }
-
- if (argList == NULL)
- {
- return retval;
- }
-
- Py_INCREF(ValObj_PyObj);
-
- pvalue = PyObject_CallObject(pfunc, argList);
-
- Py_DECREF(argList);
-
- if (pvalue != NULL)
- {
- if (pvalue != Py_None)
- retval = pvalue;
- else
- {
- retval = Py_None;
- Py_INCREF(retval);
- }
- }
- else if (PyErr_Occurred ())
- {
- PyErr_Print();
- PyErr_Clear();
- }
- Py_INCREF (session_dict);
- }
- else if (PyErr_Occurred())
- {
- PyErr_Print();
- PyErr_Clear();
- }
- }
- else if (PyErr_Occurred())
- {
- PyErr_Print();
- PyErr_Clear();
- }
- }
- else if (PyErr_Occurred ())
- {
- PyErr_Print();
- PyErr_Clear ();
- }
- if (retval)
- return retval;
- else
- Py_RETURN_NONE;
-}
-
-/*
-these four calls below are meant to support
-Python-based synthetic children providers
-they essentially mimic the four pure virtual
-method calls provided by the frontend class
-*/
-
-SWIGEXPORT uint32_t
-LLDBSwigPython_CalculateNumChildren
-(
- PyObject *implementor
-)
-{
-
- static char callee_name[] = "num_children";
-
- if (implementor == NULL || implementor == Py_None)
- return 0;
- PyObject* py_return = PyObject_CallMethod(implementor, callee_name, NULL);
- if (PyErr_Occurred())
- {
- PyErr_Print();
- PyErr_Clear();
- }
-
- if (py_return == NULL || py_return == Py_None)
- {
- Py_XDECREF(py_return);
- return UINT32_MAX;
- }
- long retval = PyInt_AsLong(py_return);
- Py_DECREF(py_return);
- if (retval >= 0)
- return (uint32_t)retval;
- if (PyErr_Occurred())
- {
- PyErr_Print();
- PyErr_Clear();
- }
- return 0;
-}
-
-SWIGEXPORT PyObject*
-LLDBSwigPython_GetChildAtIndex
-(
- PyObject *implementor,
- uint32_t idx
-)
-{
-
- static char callee_name[] = "get_child_at_index";
- static char param_format[] = "i";
-
- if (implementor == NULL || implementor == Py_None)
- return NULL;
- PyObject* py_return = PyObject_CallMethod(implementor, callee_name, param_format, idx);
- if (PyErr_Occurred())
- {
- PyErr_Print();
- PyErr_Clear();
- }
-
- if (py_return == NULL || py_return == Py_None)
- {
- Py_XDECREF(py_return);
- return NULL;
- }
-
- lldb::SBValue* sbvalue_ptr = NULL;
-
- if (SWIG_ConvertPtr(py_return, (void**)&sbvalue_ptr, SWIGTYPE_p_lldb__SBValue, 0) == -1)
- {
- Py_DECREF(py_return);
- return NULL;
- }
-
- if (sbvalue_ptr == NULL)
- return NULL;
-
- return py_return;
-}
-
-SWIGEXPORT int
-LLDBSwigPython_GetIndexOfChildWithName
-(
- PyObject *implementor,
- const char* child_name
-)
-{
- static char callee_name[] = "get_child_index";
- static char param_format[] = "s";
-
- if (implementor == NULL || implementor == Py_None)
- return 0;
- PyObject* py_return = PyObject_CallMethod(implementor, callee_name, param_format, child_name);
- if (PyErr_Occurred())
- {
- PyErr_Print();
- PyErr_Clear();
- }
-
- if (py_return == NULL || py_return == Py_None)
- {
- Py_XDECREF(py_return);
- return UINT32_MAX;
- }
- long retval = PyInt_AsLong(py_return);
- Py_DECREF(py_return);
- if (retval >= 0)
- return (uint32_t)retval;
- if (PyErr_Occurred())
- {
- PyErr_Print();
- PyErr_Clear();
- }
- return 0;
-}
-
-SWIGEXPORT bool
-LLDBSwigPython_UpdateSynthProviderInstance
-(
- PyObject *implementor
-)
-{
-
- bool ret_val = false;
-
- static char callee_name[] = "update";
-
- if (implementor == NULL || implementor == Py_None)
- return ret_val;
-
- // all this code is here because update is optional, so we don't want to bother trying to call it unless it's been def:ined for us
- // other synth provider calls are mandatory, so we want to fail in a very obvious way if they are missing!
- PyObject* pmeth = PyObject_GetAttrString(implementor, callee_name);
-
- if (PyErr_Occurred())
- {
- PyErr_Clear();
- }
-
- if (pmeth == NULL || pmeth == Py_None)
- {
- Py_XDECREF(pmeth);
- return ret_val;
- }
-
- if (PyCallable_Check(pmeth) == 0)
- {
- if (PyErr_Occurred())
- {
- PyErr_Clear();
- }
-
- Py_XDECREF(pmeth);
- return ret_val;
- }
-
- if (PyErr_Occurred())
- {
- PyErr_Clear();
- }
-
- Py_XDECREF(pmeth);
-
- // right now we know this function exists and is callable..
- PyObject* py_return = PyObject_CallMethod(implementor, callee_name, NULL);
-
- // if it fails, print the error but otherwise go on
- if (PyErr_Occurred())
- {
- PyErr_Print();
- PyErr_Clear();
- }
-
- if (py_return == Py_True)
- ret_val = true;
-
- 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;
-}
-
-// Currently, SBCommandReturnObjectReleaser wraps an std::auto_ptr to an
-// lldb_private::CommandReturnObject. This means that the destructor for the
-// SB object will deallocate its contained CommandReturnObject. Because that
-// object is used as the real return object for Python-based commands, we want
-// it to stay around. Thus, we release the auto_ptr before returning from
-// LLDBSwigPythonCallCommand, and to guarantee that the release will occur no
-// matter how we exit from the function, we have a releaser object whose
-// destructor does the right thing for us
-class SBCommandReturnObjectReleaser
-{
-public:
- SBCommandReturnObjectReleaser (lldb::SBCommandReturnObject &obj) :
- m_command_return_object_ref (obj)
- {
- }
-
- ~SBCommandReturnObjectReleaser ()
- {
- m_command_return_object_ref.Release();
- }
-private:
- lldb::SBCommandReturnObject &m_command_return_object_ref;
-};
-
-SWIGEXPORT bool
-LLDBSwigPythonCallCommand
-(
- const char *python_function_name,
- const char *session_dictionary_name,
- lldb::DebuggerSP& debugger,
- const char* args,
- std::string& err_msg,
- lldb_private::CommandReturnObject& cmd_retobj
-)
-{
-
- lldb::SBCommandReturnObject cmd_retobj_sb(&cmd_retobj);
- SBCommandReturnObjectReleaser cmd_retobj_sb_releaser(cmd_retobj_sb);
- lldb::SBDebugger debugger_sb(debugger);
-
- bool retval = false;
-
- PyObject *DebuggerObj_PyObj = SWIG_NewPointerObj((void *) &debugger_sb, SWIGTYPE_p_lldb__SBDebugger, 0);
- PyObject *CmdRetObj_PyObj = SWIG_NewPointerObj((void *) &cmd_retobj_sb, SWIGTYPE_p_lldb__SBCommandReturnObject, 0);
-
- if (DebuggerObj_PyObj == NULL)
- return retval;
-
- if (CmdRetObj_PyObj == NULL)
- return retval;
-
- if (!python_function_name || !session_dictionary_name)
- return retval;
-
- PyObject *session_dict, *pfunc;
- PyObject *pargs, *pvalue;
-
- session_dict = FindSessionDictionary (session_dictionary_name);
- if (session_dict != NULL)
- {
- pfunc = ResolvePythonName (python_function_name, session_dict);
- if (pfunc != NULL)
- {
- // Set up the arguments and call the function.
-
- if (PyCallable_Check (pfunc))
- {
- pargs = PyTuple_New (4);
- if (pargs == NULL)
- {
- if (PyErr_Occurred())
- PyErr_Clear();
- return retval;
- }
-
- PyTuple_SetItem (pargs, 0, DebuggerObj_PyObj); // This "steals" a reference to DebuggerObj_PyObj
- PyTuple_SetItem (pargs, 1, PyString_FromString(args));
- PyTuple_SetItem (pargs, 2, CmdRetObj_PyObj); // This "steals" a reference to CmdRetObj_PyObj
- PyTuple_SetItem (pargs, 3, session_dict); // This "steals" a reference to session_dict
- pvalue = PyObject_CallObject (pfunc, pargs);
- Py_DECREF (pargs);
-
- if (pvalue != NULL)
- {
- if (pvalue == Py_None) // no error
- {
- err_msg.clear();
- retval = true;
- }
- else
- {
- // return value is an error string
- if (PyString_CheckExact(pvalue))
- err_msg.assign(PyString_AsString(pvalue));
- retval = false;
- }
- Py_DECREF (pvalue);
- }
- else if (PyErr_Occurred ())
- {
- PyErr_Print();
- PyErr_Clear();
- }
- Py_INCREF (session_dict);
- }
- else if (PyErr_Occurred())
- {
- PyErr_Print();
- PyErr_Clear();
- }
- }
- else if (PyErr_Occurred())
- {
- PyErr_Print();
- PyErr_Clear();
- }
- }
- else if (PyErr_Occurred ())
- {
- PyErr_Print();
- PyErr_Clear ();
- }
- return retval;
-}
-
-SWIGEXPORT bool
-LLDBSwigPythonCallModuleInit
-(
- const std::string python_module_name,
- const char *session_dictionary_name,
- lldb::DebuggerSP& debugger
-)
-{
-
- lldb::SBDebugger debugger_sb(debugger);
-
- bool retval = false;
-
- PyObject *DebuggerObj_PyObj = SWIG_NewPointerObj((void *) &debugger_sb, SWIGTYPE_p_lldb__SBDebugger, 0);
-
- if (DebuggerObj_PyObj == NULL)
- return retval;
-
- if (!(python_module_name.length()) || !session_dictionary_name)
- return retval;
-
- PyObject *session_dict, *pfunc;
- PyObject *pargs, *pvalue;
-
- session_dict = FindSessionDictionary (session_dictionary_name);
-
- std::string python_function_name_string = python_module_name + (".__lldb_init_module");
- const char* python_function_name = python_function_name_string.c_str();
-
- if (session_dict != NULL)
- {
- pfunc = ResolvePythonName (python_function_name, session_dict);
-
- if (PyErr_Occurred()) // this might not exist.. let's make sure we handle that
- {
- PyErr_Clear();
- return true;
- }
-
- if (pfunc == NULL)
- return true;
- else
- {
- // Set up the arguments and call the function.
-
- if (PyCallable_Check (pfunc))
- {
- pargs = PyTuple_New (2);
- if (pargs == NULL)
- {
- if (PyErr_Occurred())
- PyErr_Clear();
- return retval;
- }
-
- PyTuple_SetItem (pargs, 0, DebuggerObj_PyObj); // This "steals" a reference to DebuggerObj_PyObj
- PyTuple_SetItem (pargs, 1, session_dict); // This "steals" a reference to session_dict
- pvalue = PyObject_CallObject (pfunc, pargs);
- Py_DECREF (pargs);
-
- if (PyErr_Occurred ())
- {
- PyErr_Print();
- PyErr_Clear();
- }
- else
- {
- retval = true;
- Py_XDECREF (pvalue);
- }
- Py_INCREF (session_dict);
- }
- else if (PyErr_Occurred())
- {
- PyErr_Print();
- PyErr_Clear();
- }
- }
- }
- return retval;
-}
-
-%}