Merge pull request #2344 from clintonstimpson/py3-slice-object

Use PyObject instead of PySliceObject throughout with Python 3.2+
This commit is contained in:
William S Fulton 2022-09-08 20:14:12 +01:00 • committed by GitHub
commit db432300a9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -15,9 +15,9 @@
#include <iostream> #include <iostream>
#if PY_VERSION_HEX >= 0x03020000 #if PY_VERSION_HEX >= 0x03020000
# define SWIGPY_SLICE_ARG(obj) ((PyObject*) (obj)) # define SWIGPY_SLICEOBJECT PyObject
#else #else
# define SWIGPY_SLICE_ARG(obj) ((PySliceObject*) (obj)) # define SWIGPY_SLICEOBJECT PySliceObject
#endif #endif
%} %}
@ -781,7 +781,7 @@ namespace swig
#if 1 #if 1
%newobject __getslice__; %newobject __getslice__;
#endif #endif
%newobject __getitem__(PySliceObject *slice); %newobject __getitem__(SWIGPY_SLICEOBJECT *slice);
#if defined(SWIGPYTHON_BUILTIN) #if defined(SWIGPYTHON_BUILTIN)
%feature("python:slot", "nb_nonzero", functype="inquiry") __nonzero__; %feature("python:slot", "nb_nonzero", functype="inquiry") __nonzero__;
@ -829,13 +829,13 @@ namespace swig
%extend { %extend {
/* typemap for slice object support */ /* typemap for slice object support */
%typemap(in) PySliceObject* { %typemap(in) SWIGPY_SLICEOBJECT* {
if (!PySlice_Check($input)) { if (!PySlice_Check($input)) {
%argument_fail(SWIG_TypeError, "$type", $symname, $argnum); %argument_fail(SWIG_TypeError, "$type", $symname, $argnum);
} }
$1 = (PySliceObject *) $input; $1 = (SWIGPY_SLICEOBJECT *) $input;
} }
%typemap(typecheck,precedence=SWIG_TYPECHECK_POINTER) PySliceObject* { %typemap(typecheck,precedence=SWIG_TYPECHECK_POINTER) SWIGPY_SLICEOBJECT* {
$1 = PySlice_Check($input); $1 = PySlice_Check($input);
} }
@ -865,49 +865,49 @@ namespace swig
/* Overloaded methods for Python 3 compatibility /* Overloaded methods for Python 3 compatibility
* (Also useful in Python 2.x) * (Also useful in Python 2.x)
*/ */
Sequence* __getitem__(PySliceObject *slice) throw (std::out_of_range, std::invalid_argument) { Sequence* __getitem__(SWIGPY_SLICEOBJECT *slice) throw (std::out_of_range, std::invalid_argument) {
Py_ssize_t i, j, step; Py_ssize_t i, j, step;
if( !PySlice_Check(slice) ) { if( !PySlice_Check(slice) ) {
SWIG_Error(SWIG_TypeError, "Slice object expected."); SWIG_Error(SWIG_TypeError, "Slice object expected.");
return NULL; return NULL;
} }
PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); PySlice_GetIndices(slice, (Py_ssize_t)self->size(), &i, &j, &step);
Sequence::difference_type id = i; Sequence::difference_type id = i;
Sequence::difference_type jd = j; Sequence::difference_type jd = j;
return swig::getslice(self, id, jd, step); return swig::getslice(self, id, jd, step);
} }
void __setitem__(PySliceObject *slice, const Sequence& v) throw (std::out_of_range, std::invalid_argument) { void __setitem__(SWIGPY_SLICEOBJECT *slice, const Sequence& v) throw (std::out_of_range, std::invalid_argument) {
Py_ssize_t i, j, step; Py_ssize_t i, j, step;
if( !PySlice_Check(slice) ) { if( !PySlice_Check(slice) ) {
SWIG_Error(SWIG_TypeError, "Slice object expected."); SWIG_Error(SWIG_TypeError, "Slice object expected.");
return; return;
} }
PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); PySlice_GetIndices(slice, (Py_ssize_t)self->size(), &i, &j, &step);
Sequence::difference_type id = i; Sequence::difference_type id = i;
Sequence::difference_type jd = j; Sequence::difference_type jd = j;
swig::setslice(self, id, jd, step, v); swig::setslice(self, id, jd, step, v);
} }
void __setitem__(PySliceObject *slice) throw (std::out_of_range, std::invalid_argument) { void __setitem__(SWIGPY_SLICEOBJECT *slice) throw (std::out_of_range, std::invalid_argument) {
Py_ssize_t i, j, step; Py_ssize_t i, j, step;
if( !PySlice_Check(slice) ) { if( !PySlice_Check(slice) ) {
SWIG_Error(SWIG_TypeError, "Slice object expected."); SWIG_Error(SWIG_TypeError, "Slice object expected.");
return; return;
} }
PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); PySlice_GetIndices(slice, (Py_ssize_t)self->size(), &i, &j, &step);
Sequence::difference_type id = i; Sequence::difference_type id = i;
Sequence::difference_type jd = j; Sequence::difference_type jd = j;
swig::delslice(self, id, jd, step); swig::delslice(self, id, jd, step);
} }
void __delitem__(PySliceObject *slice) throw (std::out_of_range, std::invalid_argument) { void __delitem__(SWIGPY_SLICEOBJECT *slice) throw (std::out_of_range, std::invalid_argument) {
Py_ssize_t i, j, step; Py_ssize_t i, j, step;
if( !PySlice_Check(slice) ) { if( !PySlice_Check(slice) ) {
SWIG_Error(SWIG_TypeError, "Slice object expected."); SWIG_Error(SWIG_TypeError, "Slice object expected.");
return; return;
} }
PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); PySlice_GetIndices(slice, (Py_ssize_t)self->size(), &i, &j, &step);
Sequence::difference_type id = i; Sequence::difference_type id = i;
Sequence::difference_type jd = j; Sequence::difference_type jd = j;
swig::delslice(self, id, jd, step); swig::delslice(self, id, jd, step);