mirror of
https://github.com/intel/llvm.git
synced 2026-01-13 11:02:04 +08:00
Revert "[lldb] Limit Py_buffer_RAII to SWIG < 4.1" (#167934)
Reverts llvm/llvm-project#167808
This commit is contained in:
committed by
GitHub
parent
833ffa54f2
commit
1b723f2ddb
19
lldb/bindings/python/python-typemaps.h
Normal file
19
lldb/bindings/python/python-typemaps.h
Normal file
@@ -0,0 +1,19 @@
|
||||
#ifndef LLDB_BINDINGS_PYTHON_PYTHON_TYPEMAPS_H
|
||||
#define LLDB_BINDINGS_PYTHON_PYTHON_TYPEMAPS_H
|
||||
|
||||
#include <Python.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
|
||||
@@ -6,6 +6,12 @@ AND call SWIG_fail at the same time, because it will result in a double free.
|
||||
|
||||
*/
|
||||
|
||||
%inline %{
|
||||
|
||||
#include "../bindings/python/python-typemaps.h"
|
||||
|
||||
%}
|
||||
|
||||
%typemap(in) char ** {
|
||||
/* Check if is a list */
|
||||
if (PythonList::Check($input)) {
|
||||
@@ -628,21 +634,12 @@ template <> bool SetNumberFromPyObject<double>(double &number, PyObject *obj) {
|
||||
}
|
||||
}
|
||||
|
||||
#if SWIG_VERSION < 0x040100
|
||||
// The two pybuffer macros below are copied out of swig/Lib/python/pybuffer.i,
|
||||
// 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
|
||||
|
||||
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);
|
||||
}
|
||||
};
|
||||
//
|
||||
// I've also moved the call to PyBuffer_Release to the end of the SWIG wrapper,
|
||||
// doing it right away is not legal according to the python buffer protocol.
|
||||
|
||||
%define %pybuffer_mutable_binary(TYPEMAP, SIZE)
|
||||
%typemap(in) (TYPEMAP, SIZE) (Py_buffer_RAII view) {
|
||||
@@ -677,9 +674,6 @@ struct Py_buffer_RAII {
|
||||
$2 = ($2_ltype)(size / sizeof($*1_type));
|
||||
}
|
||||
%enddef
|
||||
#else
|
||||
%include <pybuffer.i>
|
||||
#endif
|
||||
|
||||
%pybuffer_binary(const uint8_t *buf, size_t num_bytes);
|
||||
%pybuffer_mutable_binary(uint8_t *buf, size_t num_bytes);
|
||||
|
||||
Reference in New Issue
Block a user