diff --git a/Cython/Compiler/ExprNodes.py b/Cython/Compiler/ExprNodes.py index de82ff03fe09384feaf86f427438b9d0194ec342..75f21c4ad3210a2ff59587f054f854bc10208c24 100755 --- a/Cython/Compiler/ExprNodes.py +++ b/Cython/Compiler/ExprNodes.py @@ -10004,13 +10004,15 @@ static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObje Py_DECREF(old); return 1; } - } else -#endif - if (likely(i >= 0)) { + } else if (likely(i >= 0)) { PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; if (likely(m && m->sq_ass_item)) { return m->sq_ass_item(o, i, v); } + } else +#endif + if (PySequence_Check(o)) { + return PySequence_SetItem(o, i, v); } return __Pyx_SetItemInt_Generic(o, PyInt_FromSsize_t(i), v); } @@ -10035,12 +10037,17 @@ static CYTHON_INLINE int __Pyx_DelItem_Generic(PyObject *o, PyObject *j) { } static CYTHON_INLINE int __Pyx_DelItemInt_Fast(PyObject *o, Py_ssize_t i) { +#if CYTHON_COMPILING_IN_PYPY + if (PySequence_Check(o)) + return PySequence_DelItem(o, i); +#else if (likely(i >= 0)) { PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; if (likely(m && m->sq_ass_item)) { return m->sq_ass_item(o, i, (PyObject *)NULL); } } +#endif return __Pyx_DelItem_Generic(o, PyInt_FromSsize_t(i)); } """,