diff --git a/lldb/bindings/python/python-typemaps.h b/lldb/bindings/python/python-typemaps.h new file mode 100644 --- /dev/null +++ b/lldb/bindings/python/python-typemaps.h @@ -0,0 +1,17 @@ +#ifndef LLDB_BINDINGS_PYTHON_PYTHON_TYPEMAPS_H +#define LLDB_BINDINGS_PYTHON_PYTHON_TYPEMAPS_H + +// Defined here instead of a .swig file because SWIG 2 doesn't support +// explicit deleted functions. +struct Py_buffer_RAII { + Py_buffer buffer = {}; + Py_buffer_RAII(){}; + Py_buffer &operator=(const Py_buffer_RAII &) = delete; + Py_buffer_RAII(const Py_buffer_RAII &) = delete; + ~Py_buffer_RAII() { + if (buffer.obj) + PyBuffer_Release(&buffer); + } +}; + +#endif // LLDB_BINDINGS_PYTHON_PYTHON_TYPEMAPS_H diff --git a/lldb/bindings/python/python-typemaps.swig b/lldb/bindings/python/python-typemaps.swig --- a/lldb/bindings/python/python-typemaps.swig +++ b/lldb/bindings/python/python-typemaps.swig @@ -1,5 +1,11 @@ /* Typemap definitions, to allow SWIG to properly handle 'char**' data types. */ +%inline %{ + +#include "../bindings/python/python-typemaps.h" + +%} + %typemap(in) char ** { /* Check if is a list */ if (PythonList::Check($input)) { @@ -61,7 +67,7 @@ %typemap(in) lldb::tid_t { PythonObject obj = Retain($input); - lldb::tid_t value = unwrapOrSetPythonException(As(obj)); + lldb::tid_t value = unwrapOrSetPythonException(As(obj)); if (PyErr_Occurred()) return nullptr; $1 = value; @@ -476,21 +482,6 @@ } } -%inline %{ - -struct Py_buffer_RAII { - Py_buffer buffer = {}; - Py_buffer_RAII() {}; - Py_buffer &operator=(const Py_buffer_RAII &) = delete; - Py_buffer_RAII(const Py_buffer_RAII &) = delete; - ~Py_buffer_RAII() { - if (buffer.obj) - PyBuffer_Release(&buffer); - } -}; - -%} - // 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