15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/* 25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * General object operations and protocol implementations, 35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * including their specialisations for certain builtins. 45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * 55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * Optional optimisations for builtins are in Optimize.c. 65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * Required replacements of builtins are in Builtins.c. 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) */ 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// RaiseNoneIterError.proto /////////////// 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void); 135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// RaiseNoneIterError /////////////// 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) { 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// RaiseTooManyValuesToUnpack.proto /////////////// 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); 235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// RaiseTooManyValuesToUnpack /////////////// 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyErr_Format(PyExc_ValueError, 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected); 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// RaiseNeedMoreValuesToUnpack.proto /////////////// 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// RaiseNeedMoreValuesToUnpack /////////////// 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyErr_Format(PyExc_ValueError, 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack", 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) index, (index == 1) ? "" : "s"); 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// UnpackTupleError.proto /////////////// 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static void __Pyx_UnpackTupleError(PyObject *, Py_ssize_t index); /*proto*/ 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// UnpackTupleError /////////////// 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: RaiseNoneIterError 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: RaiseNeedMoreValuesToUnpack 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: RaiseTooManyValuesToUnpack 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static void __Pyx_UnpackTupleError(PyObject *t, Py_ssize_t index) { 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (t == Py_None) { 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) __Pyx_RaiseNoneNotIterableError(); 555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else if (PyTuple_GET_SIZE(t) < index) { 565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(t)); 575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) __Pyx_RaiseTooManyValuesError(index); 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// UnpackItemEndCheck.proto /////////////// 635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); /*proto*/ 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// UnpackItemEndCheck /////////////// 675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: RaiseTooManyValuesToUnpack 685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: IterFinish 695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) { 715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(retval)) { 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_DECREF(retval); 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) __Pyx_RaiseTooManyValuesError(expected); 745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return -1; 755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return __Pyx_IterFinish(); 775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return 0; 795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// UnpackTuple2.proto /////////////// 825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_unpack_tuple2(PyObject* tuple, PyObject** value1, PyObject** value2, 845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int is_tuple, int has_known_size, int decref_tuple); 855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// UnpackTuple2 /////////////// 875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: UnpackItemEndCheck 885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: UnpackTupleError 895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: RaiseNeedMoreValuesToUnpack 905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_unpack_tuple2(PyObject* tuple, PyObject** pvalue1, PyObject** pvalue2, 925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int is_tuple, int has_known_size, int decref_tuple) { 935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_ssize_t index; 945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject *value1 = NULL, *value2 = NULL, *iter = NULL; 955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!is_tuple && unlikely(!PyTuple_Check(tuple))) { 965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) iternextfunc iternext; 975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) iter = PyObject_GetIter(tuple); 985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(!iter)) goto bad; 995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (decref_tuple) { Py_DECREF(tuple); tuple = NULL; } 1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) iternext = Py_TYPE(iter)->tp_iternext; 1015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) value1 = iternext(iter); if (unlikely(!value1)) { index = 0; goto unpacking_failed; } 1025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) value2 = iternext(iter); if (unlikely(!value2)) { index = 1; goto unpacking_failed; } 1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!has_known_size && unlikely(__Pyx_IternextUnpackEndCheck(iternext(iter), 2))) goto bad; 1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_DECREF(iter); 1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!has_known_size && unlikely(PyTuple_GET_SIZE(tuple) != 2)) { 1075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) __Pyx_UnpackTupleError(tuple, 2); 1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) goto bad; 1095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_COMPILING_IN_PYPY 1115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) value1 = PySequence_ITEM(tuple, 0); 1125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(!value1)) goto bad; 1135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) value2 = PySequence_ITEM(tuple, 1); 1145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(!value2)) goto bad; 1155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else 1165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) value1 = PyTuple_GET_ITEM(tuple, 0); 1175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) value2 = PyTuple_GET_ITEM(tuple, 1); 1185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_INCREF(value1); 1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_INCREF(value2); 1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 1215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (decref_tuple) { Py_DECREF(tuple); } 1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) *pvalue1 = value1; 1245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) *pvalue2 = value2; 1255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return 0; 1265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)unpacking_failed: 1275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!has_known_size && __Pyx_IterFinish() == 0) 1285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) __Pyx_RaiseNeedMoreValuesError(index); 1295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bad: 1305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_XDECREF(iter); 1315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_XDECREF(value1); 1325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_XDECREF(value2); 1335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (decref_tuple) { Py_XDECREF(tuple); } 1345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return -1; 1355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// IterNext.proto /////////////// 1385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_PyIter_Next(obj) __Pyx_PyIter_Next2(obj, NULL) 1405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject *__Pyx_PyIter_Next2(PyObject *, PyObject *); /*proto*/ 1415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// IterNext /////////////// 1435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// originally copied from Py3's builtin_next() 1455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject *__Pyx_PyIter_Next2(PyObject* iterator, PyObject* defval) { 1465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject* next; 1475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) iternextfunc iternext = Py_TYPE(iterator)->tp_iternext; 1485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_COMPILING_IN_CPYTHON 1495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(!iternext)) { 1505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else 1515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(!iternext) || unlikely(!PyIter_Check(iterator))) { 1525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 1535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyErr_Format(PyExc_TypeError, 1545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "%.200s object is not an iterator", Py_TYPE(iterator)->tp_name); 1555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return NULL; 1565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) next = iternext(iterator); 1585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (likely(next)) 1595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return next; 1605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_COMPILING_IN_CPYTHON 1615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_VERSION_HEX >= 0x03010000 || (PY_MAJOR_VERSION < 3 && PY_VERSION_HEX >= 0x02070000) 1625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(iternext == &_PyObject_NextNotImplemented)) 1635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return NULL; 1645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 1655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 1665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (defval) { 1675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject* exc_type = PyErr_Occurred(); 1685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (exc_type) { 1695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(exc_type != PyExc_StopIteration) && 1705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) !PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)) 1715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return NULL; 1725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyErr_Clear(); 1735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_INCREF(defval); 1755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return defval; 1765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!PyErr_Occurred()) 1785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyErr_SetNone(PyExc_StopIteration); 1795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return NULL; 1805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// IterFinish.proto /////////////// 1835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_IterFinish(void); /*proto*/ 1855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// IterFinish /////////////// 1875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// When PyIter_Next(iter) has returned NULL in order to signal termination, 1895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// this function does the right cleanup and returns 0 on success. If it 1905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// detects an error that occurred in the iterator, it returns -1. 1915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_IterFinish(void) { 1935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_COMPILING_IN_CPYTHON 1945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyThreadState *tstate = PyThreadState_GET(); 1955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject* exc_type = tstate->curexc_type; 1965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(exc_type)) { 1975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (likely(exc_type == PyExc_StopIteration) || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)) { 1985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject *exc_value, *exc_tb; 1995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) exc_value = tstate->curexc_value; 2005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) exc_tb = tstate->curexc_traceback; 2015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) tstate->curexc_type = 0; 2025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) tstate->curexc_value = 0; 2035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) tstate->curexc_traceback = 0; 2045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_DECREF(exc_type); 2055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_XDECREF(exc_value); 2065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_XDECREF(exc_tb); 2075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return 0; 2085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 2095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return -1; 2105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 2115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 2125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return 0; 2135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else 2145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(PyErr_Occurred())) { 2155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) { 2165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyErr_Clear(); 2175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return 0; 2185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 2195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return -1; 2205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 2215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 2225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return 0; 2235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 2245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 2255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// DictGetItem.proto /////////////// 2275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_MAJOR_VERSION >= 3 2295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) { 2305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject *value; 2315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) value = PyDict_GetItemWithError(d, key); 2325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(!value)) { 2335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!PyErr_Occurred()) { 2345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject* args = PyTuple_Pack(1, key); 2355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (likely(args)) 2365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyErr_SetObject(PyExc_KeyError, args); 2375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_XDECREF(args); 2385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 2395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return NULL; 2405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 2415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_INCREF(value); 2425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return value; 2435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 2445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else 2455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #define __Pyx_PyDict_GetItem(d, key) PyObject_GetItem(d, key) 2465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 2475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// GetItemInt.proto /////////////// 2495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \ 2515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \ 2525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) : \ 2535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) : \ 2545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) __Pyx_GetItemInt_Generic(o, to_py_func(i)))) 2555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){{for type in ['List', 'Tuple']}} 2575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_GetItemInt_{{type}}(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \ 2585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \ 2595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) __Pyx_GetItemInt_{{type}}_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) : \ 2605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) (PyErr_SetString(PyExc_IndexError, "{{ type.lower() }} index out of range"), (PyObject*)NULL)) 2615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject *__Pyx_GetItemInt_{{type}}_Fast(PyObject *o, Py_ssize_t i, 2635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int wraparound, int boundscheck); 2645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){{endfor}} 2655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); 2675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, 2685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int is_list, int wraparound, int boundscheck); 2695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// GetItemInt /////////////// 2715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { 2735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject *r; 2745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!j) return NULL; 2755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) r = PyObject_GetItem(o, j); 2765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_DECREF(j); 2775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return r; 2785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 2795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){{for type in ['List', 'Tuple']}} 2815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject *__Pyx_GetItemInt_{{type}}_Fast(PyObject *o, Py_ssize_t i, 2825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int wraparound, int boundscheck) { 2835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_COMPILING_IN_CPYTHON 2845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (wraparound & unlikely(i < 0)) i += Py{{type}}_GET_SIZE(o); 2855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if ((!boundscheck) || likely((0 <= i) & (i < Py{{type}}_GET_SIZE(o)))) { 2865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject *r = Py{{type}}_GET_ITEM(o, i); 2875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_INCREF(r); 2885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return r; 2895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 2905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); 2915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else 2925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return PySequence_GetItem(o, i); 2935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 2945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 2955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){{endfor}} 2965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, 2985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int is_list, int wraparound, int boundscheck) { 2995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_COMPILING_IN_CPYTHON 3005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (is_list || PyList_CheckExact(o)) { 3015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); 3025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if ((!boundscheck) || (likely((n >= 0) & (n < PyList_GET_SIZE(o))))) { 3035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject *r = PyList_GET_ITEM(o, n); 3045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_INCREF(r); 3055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return r; 3065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 3075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 3085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) else if (PyTuple_CheckExact(o)) { 3095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); 3105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if ((!boundscheck) || likely((n >= 0) & (n < PyTuple_GET_SIZE(o)))) { 3115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject *r = PyTuple_GET_ITEM(o, n); 3125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_INCREF(r); 3135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return r; 3145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 3155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 3165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // inlined PySequence_GetItem() + special cased length overflow 3175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; 3185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (likely(m && m->sq_item)) { 3195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (wraparound && unlikely(i < 0) && likely(m->sq_length)) { 3205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_ssize_t l = m->sq_length(o); 3215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (likely(l >= 0)) { 3225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) i += l; 3235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 3245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // if length > max(Py_ssize_t), maybe the object can wrap around itself? 3255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (PyErr_ExceptionMatches(PyExc_OverflowError)) 3265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyErr_Clear(); 3275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) else 3285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return NULL; 3295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 3305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 3315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return m->sq_item(o, i); 3325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 3335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 3345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else 3355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (is_list || PySequence_Check(o)) { 3365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return PySequence_GetItem(o, i); 3375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 3385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 3395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); 3405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 3415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// SetItemInt.proto /////////////// 3435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_SetItemInt(o, i, v, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \ 3455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \ 3465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) __Pyx_SetItemInt_Fast(o, (Py_ssize_t)i, v, is_list, wraparound, boundscheck) : \ 3475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) (is_list ? (PyErr_SetString(PyExc_IndexError, "list assignment index out of range"), -1) : \ 3485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) __Pyx_SetItemInt_Generic(o, to_py_func(i), v))) 3495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v); 3515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v, 3525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int is_list, int wraparound, int boundscheck); 3535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// SetItemInt /////////////// 3555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v) { 3575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int r; 3585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!j) return -1; 3595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) r = PyObject_SetItem(o, j, v); 3605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_DECREF(j); 3615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return r; 3625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 3635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v, 3655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int is_list, int wraparound, int boundscheck) { 3665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_COMPILING_IN_CPYTHON 3675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (is_list || PyList_CheckExact(o)) { 3685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_ssize_t n = (!wraparound) ? i : ((likely(i >= 0)) ? i : i + PyList_GET_SIZE(o)); 3695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if ((!boundscheck) || likely((n >= 0) & (n < PyList_GET_SIZE(o)))) { 3705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject* old = PyList_GET_ITEM(o, n); 3715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_INCREF(v); 3725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyList_SET_ITEM(o, n, v); 3735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_DECREF(old); 3745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return 1; 3755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 3765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 3775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // inlined PySequence_SetItem() + special cased length overflow 3785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; 3795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (likely(m && m->sq_ass_item)) { 3805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (wraparound && unlikely(i < 0) && likely(m->sq_length)) { 3815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_ssize_t l = m->sq_length(o); 3825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (likely(l >= 0)) { 3835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) i += l; 3845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 3855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // if length > max(Py_ssize_t), maybe the object can wrap around itself? 3865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (PyErr_ExceptionMatches(PyExc_OverflowError)) 3875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyErr_Clear(); 3885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) else 3895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return -1; 3905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 3915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 3925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return m->sq_ass_item(o, i, v); 3935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 3945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 3955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else 3965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_COMPILING_IN_PYPY 3975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (is_list || (PySequence_Check(o) && !PyDict_Check(o))) { 3985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else 3995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (is_list || PySequence_Check(o)) { 4005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 4015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return PySequence_SetItem(o, i, v); 4025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 4035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 4045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return __Pyx_SetItemInt_Generic(o, PyInt_FromSsize_t(i), v); 4055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 4065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// DelItemInt.proto /////////////// 4095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_DelItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \ 4115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \ 4125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) __Pyx_DelItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound) : \ 4135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) (is_list ? (PyErr_SetString(PyExc_IndexError, "list assignment index out of range"), -1) : \ 4145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) __Pyx_DelItem_Generic(o, to_py_func(i)))) 4155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_DelItem_Generic(PyObject *o, PyObject *j); 4175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_DelItemInt_Fast(PyObject *o, Py_ssize_t i, 4185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) CYTHON_UNUSED int is_list, int wraparound); 4195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// DelItemInt /////////////// 4215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_DelItem_Generic(PyObject *o, PyObject *j) { 4235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int r; 4245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!j) return -1; 4255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) r = PyObject_DelItem(o, j); 4265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_DECREF(j); 4275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return r; 4285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 4295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_DelItemInt_Fast(PyObject *o, Py_ssize_t i, 4315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) CYTHON_UNUSED int is_list, int wraparound) { 4325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_COMPILING_IN_PYPY 4335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (is_list || PySequence_Check(o)) { 4345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return PySequence_DelItem(o, i); 4355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 4365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else 4375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // inlined PySequence_DelItem() + special cased length overflow 4385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; 4395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (likely(m && m->sq_ass_item)) { 4405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (wraparound && unlikely(i < 0) && likely(m->sq_length)) { 4415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_ssize_t l = m->sq_length(o); 4425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (likely(l >= 0)) { 4435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) i += l; 4445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 4455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // if length > max(Py_ssize_t), maybe the object can wrap around itself? 4465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (PyErr_ExceptionMatches(PyExc_OverflowError)) 4475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyErr_Clear(); 4485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) else 4495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return -1; 4505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 4515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 4525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return m->sq_ass_item(o, i, (PyObject *)NULL); 4535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 4545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 4555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return __Pyx_DelItem_Generic(o, PyInt_FromSsize_t(i)); 4565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 4575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// SliceObject.proto /////////////// 4605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// we pass pointer addresses to show the C compiler what is NULL and what isn't 4625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){{if access == 'Get'}} 4635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice( 4645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject* obj, Py_ssize_t cstart, Py_ssize_t cstop, 4655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject** py_start, PyObject** py_stop, PyObject** py_slice, 4665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int has_cstart, int has_cstop, int wraparound); 4675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){{else}} 4685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_PyObject_DelSlice(obj, cstart, cstop, py_start, py_stop, py_slice, has_cstart, has_cstop, wraparound) \ 4695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) __Pyx_PyObject_SetSlice(obj, (PyObject*)NULL, cstart, cstop, py_start, py_stop, py_slice, has_cstart, has_cstop, wraparound) 4705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// we pass pointer addresses to show the C compiler what is NULL and what isn't 4725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_PyObject_SetSlice( 4735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject* obj, PyObject* value, Py_ssize_t cstart, Py_ssize_t cstop, 4745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject** py_start, PyObject** py_stop, PyObject** py_slice, 4755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int has_cstart, int has_cstop, int wraparound); 4765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){{endif}} 4775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// SliceObject /////////////// 4795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){{if access == 'Get'}} 4815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice( 4825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject* obj, Py_ssize_t cstart, Py_ssize_t cstop, 4835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){{else}} 4845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_PyObject_SetSlice( 4855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject* obj, PyObject* value, Py_ssize_t cstart, Py_ssize_t cstop, 4865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){{endif}} 4875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject** _py_start, PyObject** _py_stop, PyObject** _py_slice, 4885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int has_cstart, int has_cstop, CYTHON_UNUSED int wraparound) { 4895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_COMPILING_IN_CPYTHON 4905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyMappingMethods* mp; 4915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_MAJOR_VERSION < 3 4925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PySequenceMethods* ms = Py_TYPE(obj)->tp_as_sequence; 4935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (likely(ms && ms->sq_{{if access == 'Set'}}ass_{{endif}}slice)) { 4945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!has_cstart) { 4955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (_py_start && (*_py_start != Py_None)) { 4965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) cstart = __Pyx_PyIndex_AsSsize_t(*_py_start); 4975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if ((cstart == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; 4985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else 4995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) cstart = 0; 5005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 5015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!has_cstop) { 5025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (_py_stop && (*_py_stop != Py_None)) { 5035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) cstop = __Pyx_PyIndex_AsSsize_t(*_py_stop); 5045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if ((cstop == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; 5055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else 5065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) cstop = PY_SSIZE_T_MAX; 5075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 5085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (wraparound && unlikely((cstart < 0) | (cstop < 0)) && likely(ms->sq_length)) { 5095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_ssize_t l = ms->sq_length(obj); 5105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (likely(l >= 0)) { 5115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (cstop < 0) { 5125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) cstop += l; 5135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (cstop < 0) cstop = 0; 5145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 5155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (cstart < 0) { 5165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) cstart += l; 5175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (cstart < 0) cstart = 0; 5185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 5195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 5205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // if length > max(Py_ssize_t), maybe the object can wrap around itself? 5215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (PyErr_ExceptionMatches(PyExc_OverflowError)) 5225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyErr_Clear(); 5235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) else 5245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) goto bad; 5255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 5265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 5275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){{if access == 'Get'}} 5285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return ms->sq_slice(obj, cstart, cstop); 5295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){{else}} 5305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return ms->sq_ass_slice(obj, cstart, cstop, value); 5315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){{endif}} 5325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 5335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 5345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) mp = Py_TYPE(obj)->tp_as_mapping; 5365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){{if access == 'Get'}} 5375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (likely(mp && mp->mp_subscript)) 5385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){{else}} 5395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (likely(mp && mp->mp_ass_subscript)) 5405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){{endif}} 5415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 5425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) { 5435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {{if access == 'Get'}}PyObject*{{else}}int{{endif}} result; 5445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject *py_slice, *py_start, *py_stop; 5455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (_py_slice) { 5465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) py_slice = *_py_slice; 5475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 5485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject* owned_start = NULL; 5495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject* owned_stop = NULL; 5505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (_py_start) { 5515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) py_start = *_py_start; 5525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 5535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (has_cstart) { 5545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) owned_start = py_start = PyInt_FromSsize_t(cstart); 5555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(!py_start)) goto bad; 5565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else 5575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) py_start = Py_None; 5585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 5595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (_py_stop) { 5605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) py_stop = *_py_stop; 5615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 5625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (has_cstop) { 5635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) owned_stop = py_stop = PyInt_FromSsize_t(cstop); 5645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(!py_stop)) { 5655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_XDECREF(owned_start); 5665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) goto bad; 5675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 5685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else 5695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) py_stop = Py_None; 5705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 5715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) py_slice = PySlice_New(py_start, py_stop, Py_None); 5725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_XDECREF(owned_start); 5735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_XDECREF(owned_stop); 5745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(!py_slice)) goto bad; 5755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 5765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_COMPILING_IN_CPYTHON 5775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){{if access == 'Get'}} 5785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) result = mp->mp_subscript(obj, py_slice); 5795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else 5805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) result = PyObject_GetItem(obj, py_slice); 5815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){{else}} 5825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) result = mp->mp_ass_subscript(obj, py_slice, value); 5835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else 5845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) result = value ? PyObject_SetItem(obj, py_slice, value) : PyObject_DelItem(obj, py_slice); 5855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){{endif}} 5865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 5875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!_py_slice) { 5885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_DECREF(py_slice); 5895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 5905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return result; 5915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 5925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyErr_Format(PyExc_TypeError, 5935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){{if access == 'Get'}} 5945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "'%.200s' object is unsliceable", Py_TYPE(obj)->tp_name); 5955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){{else}} 5965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "'%.200s' object does not support slice %.10s", 5975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_TYPE(obj)->tp_name, value ? "assignment" : "deletion"); 5985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){{endif}} 5995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bad: 6015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return {{if access == 'Get'}}NULL{{else}}-1{{endif}}; 6025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 6035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// SliceTupleAndList.proto /////////////// 6065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_COMPILING_IN_CPYTHON 6085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject* __Pyx_PyList_GetSlice(PyObject* src, Py_ssize_t start, Py_ssize_t stop); 6095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject* __Pyx_PyTuple_GetSlice(PyObject* src, Py_ssize_t start, Py_ssize_t stop); 6105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else 6115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_PyList_GetSlice(seq, start, stop) PySequence_GetSlice(seq, start, stop) 6125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_PyTuple_GetSlice(seq, start, stop) PySequence_GetSlice(seq, start, stop) 6135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 6145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// SliceTupleAndList /////////////// 6165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_COMPILING_IN_CPYTHON 6185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE void __Pyx_crop_slice(Py_ssize_t* _start, Py_ssize_t* _stop, Py_ssize_t* _length) { 6195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_ssize_t start = *_start, stop = *_stop, length = *_length; 6205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (start < 0) { 6215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) start += length; 6225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (start < 0) 6235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) start = 0; 6245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 6255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (stop < 0) 6275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) stop += length; 6285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) else if (stop > length) 6295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) stop = length; 6305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) *_length = stop - start; 6325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) *_start = start; 6335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) *_stop = stop; 6345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 6355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE void __Pyx_copy_object_array(PyObject** CYTHON_RESTRICT src, PyObject** CYTHON_RESTRICT dest, Py_ssize_t length) { 6375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject *v; 6385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_ssize_t i; 6395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (i = 0; i < length; i++) { 6405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) v = dest[i] = src[i]; 6415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_INCREF(v); 6425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 6435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 6445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){{for type in ['List', 'Tuple']}} 6465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject* __Pyx_Py{{type}}_GetSlice( 6475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject* src, Py_ssize_t start, Py_ssize_t stop) { 6485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject* dest; 6495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_ssize_t length = Py{{type}}_GET_SIZE(src); 6505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) __Pyx_crop_slice(&start, &stop, &length); 6515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(length <= 0)) 6525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return Py{{type}}_New(0); 6535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) dest = Py{{type}}_New(length); 6555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(!dest)) 6565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return NULL; 6575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) __Pyx_copy_object_array( 6585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ((Py{{type}}Object*)src)->ob_item + start, 6595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ((Py{{type}}Object*)dest)->ob_item, 6605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) length); 6615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return dest; 6625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 6635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){{endfor}} 6645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 6655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// CalculateMetaclass.proto /////////////// 6685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases); 6705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// CalculateMetaclass /////////////// 6725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases) { 6745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_ssize_t i, nbases = PyTuple_GET_SIZE(bases); 6755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (i=0; i < nbases; i++) { 6765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyTypeObject *tmptype; 6775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject *tmp = PyTuple_GET_ITEM(bases, i); 6785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) tmptype = Py_TYPE(tmp); 6795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_MAJOR_VERSION < 3 6805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (tmptype == &PyClass_Type) 6815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) continue; 6825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 6835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!metaclass) { 6845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) metaclass = tmptype; 6855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) continue; 6865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 6875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (PyType_IsSubtype(metaclass, tmptype)) 6885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) continue; 6895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (PyType_IsSubtype(tmptype, metaclass)) { 6905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) metaclass = tmptype; 6915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) continue; 6925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 6935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // else: 6945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyErr_SetString(PyExc_TypeError, 6955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "metaclass conflict: " 6965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "the metaclass of a derived class " 6975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "must be a (non-strict) subclass " 6985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "of the metaclasses of all its bases"); 6995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return NULL; 7005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 7015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!metaclass) { 7025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_MAJOR_VERSION < 3 7035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) metaclass = &PyClass_Type; 7045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else 7055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) metaclass = &PyType_Type; 7065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 7075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 7085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // make owned reference 7095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_INCREF((PyObject*) metaclass); 7105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return (PyObject*) metaclass; 7115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 7125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// FindInheritedMetaclass.proto /////////////// 7155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *__Pyx_FindInheritedMetaclass(PyObject *bases); /*proto*/ 7175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// FindInheritedMetaclass /////////////// 7195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: PyObjectGetAttrStr 7205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: CalculateMetaclass 7215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *__Pyx_FindInheritedMetaclass(PyObject *bases) { 7235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject *metaclass; 7245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (PyTuple_Check(bases) && PyTuple_GET_SIZE(bases) > 0) { 7255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyTypeObject *metatype; 7265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject *base = PyTuple_GET_ITEM(bases, 0); 7275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_MAJOR_VERSION < 3 7285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject* basetype = __Pyx_PyObject_GetAttrStr(base, PYIDENT("__class__")); 7295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (basetype) { 7305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) metatype = (PyType_Check(basetype)) ? ((PyTypeObject*) basetype) : NULL; 7315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 7325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyErr_Clear(); 7335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) metatype = Py_TYPE(base); 7345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) basetype = (PyObject*) metatype; 7355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_INCREF(basetype); 7365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 7375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else 7385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) metatype = Py_TYPE(base); 7395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 7405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) metaclass = __Pyx_CalculateMetaclass(metatype, bases); 7415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_MAJOR_VERSION < 3 7425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_DECREF(basetype); 7435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 7445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 7455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // no bases => use default metaclass 7465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_MAJOR_VERSION < 3 7475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) metaclass = (PyObject *) &PyClass_Type; 7485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else 7495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) metaclass = (PyObject *) &PyType_Type; 7505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 7515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_INCREF(metaclass); 7525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 7535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return metaclass; 7545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 7555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// Py3MetaclassGet.proto /////////////// 7575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *__Pyx_Py3MetaclassGet(PyObject *bases, PyObject *mkw); /*proto*/ 7595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// Py3MetaclassGet /////////////// 7615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: FindInheritedMetaclass 7625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: CalculateMetaclass 7635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *__Pyx_Py3MetaclassGet(PyObject *bases, PyObject *mkw) { 7655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject *metaclass = PyDict_GetItem(mkw, PYIDENT("metaclass")); 7665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (metaclass) { 7675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_INCREF(metaclass); 7685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (PyDict_DelItem(mkw, PYIDENT("metaclass")) < 0) { 7695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_DECREF(metaclass); 7705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return NULL; 7715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 7725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (PyType_Check(metaclass)) { 7735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject* orig = metaclass; 7745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) metaclass = __Pyx_CalculateMetaclass((PyTypeObject*) metaclass, bases); 7755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_DECREF(orig); 7765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 7775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return metaclass; 7785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 7795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return __Pyx_FindInheritedMetaclass(bases); 7805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 7815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// CreateClass.proto /////////////// 7835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *__Pyx_CreateClass(PyObject *bases, PyObject *dict, PyObject *name, 7855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject *qualname, PyObject *modname); /*proto*/ 7865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// CreateClass /////////////// 7885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: FindInheritedMetaclass 7895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: CalculateMetaclass 7905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *__Pyx_CreateClass(PyObject *bases, PyObject *dict, PyObject *name, 7925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject *qualname, PyObject *modname) { 7935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject *result; 7945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject *metaclass; 7955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (PyDict_SetItem(dict, PYIDENT("__module__"), modname) < 0) 7975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return NULL; 7985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (PyDict_SetItem(dict, PYIDENT("__qualname__"), qualname) < 0) 7995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return NULL; 8005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 8015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) /* Python2 __metaclass__ */ 8025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) metaclass = PyDict_GetItem(dict, PYIDENT("__metaclass__")); 8035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (metaclass) { 8045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_INCREF(metaclass); 8055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (PyType_Check(metaclass)) { 8065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject* orig = metaclass; 8075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) metaclass = __Pyx_CalculateMetaclass((PyTypeObject*) metaclass, bases); 8085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_DECREF(orig); 8095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 8105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 8115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) metaclass = __Pyx_FindInheritedMetaclass(bases); 8125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 8135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(!metaclass)) 8145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return NULL; 8155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) result = PyObject_CallFunctionObjArgs(metaclass, name, bases, dict, NULL); 8165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_DECREF(metaclass); 8175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return result; 8185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 8195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 8205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// Py3ClassCreate.proto /////////////// 8215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 8225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, PyObject *qualname, 8235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject *mkw, PyObject *modname, PyObject *doc); /*proto*/ 8245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, PyObject *dict, 8255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject *mkw, int calculate_metaclass, int allow_py2_metaclass); /*proto*/ 8265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 8275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// Py3ClassCreate /////////////// 8285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: PyObjectGetAttrStr 8295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: CalculateMetaclass 8305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 8315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, 8325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject *qualname, PyObject *mkw, PyObject *modname, PyObject *doc) { 8335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject *ns; 8345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (metaclass) { 8355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject *prep = __Pyx_PyObject_GetAttrStr(metaclass, PYIDENT("__prepare__")); 8365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (prep) { 8375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject *pargs = PyTuple_Pack(2, name, bases); 8385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(!pargs)) { 8395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_DECREF(prep); 8405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return NULL; 8415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 8425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ns = PyObject_Call(prep, pargs, mkw); 8435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_DECREF(prep); 8445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_DECREF(pargs); 8455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 8465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(!PyErr_ExceptionMatches(PyExc_AttributeError))) 8475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return NULL; 8485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyErr_Clear(); 8495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ns = PyDict_New(); 8505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 8515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 8525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ns = PyDict_New(); 8535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 8545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 8555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(!ns)) 8565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return NULL; 8575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 8585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) /* Required here to emulate assignment order */ 8595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(PyObject_SetItem(ns, PYIDENT("__module__"), modname) < 0)) goto bad; 8605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(PyObject_SetItem(ns, PYIDENT("__qualname__"), qualname) < 0)) goto bad; 8615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(doc && PyObject_SetItem(ns, PYIDENT("__doc__"), doc) < 0)) goto bad; 8625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return ns; 8635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bad: 8645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_DECREF(ns); 8655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return NULL; 8665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 8675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 8685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, 8695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject *dict, PyObject *mkw, 8705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int calculate_metaclass, int allow_py2_metaclass) { 8715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject *result, *margs; 8725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject *owned_metaclass = NULL; 8735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (allow_py2_metaclass) { 8745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) /* honour Python2 __metaclass__ for backward compatibility */ 8755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) owned_metaclass = PyObject_GetItem(dict, PYIDENT("__metaclass__")); 8765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (owned_metaclass) { 8775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) metaclass = owned_metaclass; 8785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else if (likely(PyErr_ExceptionMatches(PyExc_KeyError))) { 8795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyErr_Clear(); 8805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 8815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return NULL; 8825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 8835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 8845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (calculate_metaclass && (!metaclass || PyType_Check(metaclass))) { 8855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) metaclass = __Pyx_CalculateMetaclass((PyTypeObject*) metaclass, bases); 8865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_XDECREF(owned_metaclass); 8875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(!metaclass)) 8885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return NULL; 8895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) owned_metaclass = metaclass; 8905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 8915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) margs = PyTuple_Pack(3, name, bases, dict); 8925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(!margs)) { 8935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) result = NULL; 8945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 8955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) result = PyObject_Call(metaclass, margs, mkw); 8965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_DECREF(margs); 8975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 8985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_XDECREF(owned_metaclass); 8995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return result; 9005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 9015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 9025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// ExtTypeTest.proto /////////////// 9035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 9045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/ 9055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 9065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// ExtTypeTest /////////////// 9075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 9085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { 9095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(!type)) { 9105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyErr_SetString(PyExc_SystemError, "Missing type object"); 9115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return 0; 9125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 9135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (likely(PyObject_TypeCheck(obj, type))) 9145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return 1; 9155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s", 9165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_TYPE(obj)->tp_name, type->tp_name); 9175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return 0; 9185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 9195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 9205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// CallableCheck.proto /////////////// 9215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 9225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 9235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_PyCallable_Check(obj) ((obj)->ob_type->tp_call != NULL) 9245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else 9255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_PyCallable_Check(obj) PyCallable_Check(obj) 9265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 9275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 9285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// PyDictContains.proto /////////////// 9295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 9305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_PyDict_Contains(PyObject* item, PyObject* dict, int eq) { 9315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int result = PyDict_Contains(dict, item); 9325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return unlikely(result < 0) ? result : (result == (eq == Py_EQ)); 9335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 9345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 9355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// PySequenceContains.proto /////////////// 9365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 9375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_PySequence_Contains(PyObject* item, PyObject* seq, int eq) { 9385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int result = PySequence_Contains(seq, item); 9395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return unlikely(result < 0) ? result : (result == (eq == Py_EQ)); 9405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 9415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 9425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// PyBoolOrNullFromLong.proto /////////////// 9435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 9445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject* __Pyx_PyBoolOrNull_FromLong(long b) { 9455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return unlikely(b < 0) ? NULL : __Pyx_PyBool_FromLong(b); 9465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 9475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 9485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// GetBuiltinName.proto /////////////// 9495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 9505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *__Pyx_GetBuiltinName(PyObject *name); /*proto*/ 9515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 9525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// GetBuiltinName /////////////// 9535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: PyObjectGetAttrStr 9545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@substitute: naming 9555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 9565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *__Pyx_GetBuiltinName(PyObject *name) { 9575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject* result = __Pyx_PyObject_GetAttrStr($builtins_cname, name); 9585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(!result)) { 9595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyErr_Format(PyExc_NameError, 9605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_MAJOR_VERSION >= 3 9615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "name '%U' is not defined", name); 9625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else 9635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "name '%.200s' is not defined", PyString_AS_STRING(name)); 9645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 9655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 9665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return result; 9675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 9685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 9695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// GetNameInClass.proto /////////////// 9705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 9715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *__Pyx_GetNameInClass(PyObject *nmspace, PyObject *name); /*proto*/ 9725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 9735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// GetNameInClass /////////////// 9745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: PyObjectGetAttrStr 9755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: GetModuleGlobalName 9765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 9775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *__Pyx_GetNameInClass(PyObject *nmspace, PyObject *name) { 9785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject *result; 9795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) result = __Pyx_PyObject_GetAttrStr(nmspace, name); 9805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!result) 9815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) result = __Pyx_GetModuleGlobalName(name); 9825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return result; 9835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 9845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 9855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// GetModuleGlobalName.proto /////////////// 9865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 9875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name); /*proto*/ 9885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 9895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// GetModuleGlobalName /////////////// 9905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: GetBuiltinName 9915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@substitute: naming 9925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 9935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) { 9945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject *result; 9955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_COMPILING_IN_CPYTHON 9965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) result = PyDict_GetItem($moddict_cname, name); 9975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (result) { 9985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_INCREF(result); 9995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 10005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else 10015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) result = PyObject_GetItem($moddict_cname, name); 10025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!result) { 10035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyErr_Clear(); 10045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 10055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) result = __Pyx_GetBuiltinName(name); 10065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 10075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return result; 10085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 10095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 10105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// GetAttr.proto //////////////////// 10115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 10125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *); /*proto*/ 10135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 10145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// GetAttr //////////////////// 10155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: PyObjectGetAttrStr 10165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 10175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) { 10185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_COMPILING_IN_CPYTHON 10195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_MAJOR_VERSION >= 3 10205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (likely(PyUnicode_Check(n))) 10215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else 10225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (likely(PyString_Check(n))) 10235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 10245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return __Pyx_PyObject_GetAttrStr(o, n); 10255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 10265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return PyObject_GetAttr(o, n); 10275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 10285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 10295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// PyObjectLookupSpecial.proto /////////////// 10305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: PyObjectGetAttrStr 10315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 10325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_COMPILING_IN_CPYTHON && (PY_VERSION_HEX >= 0x03020000 || PY_MAJOR_VERSION < 3 && PY_VERSION_HEX >= 0x02070000) 10335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// looks like calling _PyType_Lookup() isn't safe in Py<=2.6/3.1 10345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject* __Pyx_PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name) { 10355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject *res; 10365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyTypeObject *tp = Py_TYPE(obj); 10375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_MAJOR_VERSION < 3 10385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(PyInstance_Check(obj))) 10395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return __Pyx_PyObject_GetAttrStr(obj, attr_name); 10405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 10415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // adapted from CPython's special_lookup() in ceval.c 10425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) res = _PyType_Lookup(tp, attr_name); 10435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (likely(res)) { 10445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) descrgetfunc f = Py_TYPE(res)->tp_descr_get; 10455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!f) { 10465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_INCREF(res); 10475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 10485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) res = f(res, obj, (PyObject *)tp); 10495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 10505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 10515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyErr_SetObject(PyExc_AttributeError, attr_name); 10525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 10535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return res; 10545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 10555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else 10565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_PyObject_LookupSpecial(o,n) __Pyx_PyObject_GetAttrStr(o,n) 10575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 10585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 10595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// PyObjectGetAttrStr.proto /////////////// 10605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 10615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_COMPILING_IN_CPYTHON 10625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { 10635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyTypeObject* tp = Py_TYPE(obj); 10645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (likely(tp->tp_getattro)) 10655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return tp->tp_getattro(obj, attr_name); 10665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_MAJOR_VERSION < 3 10675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (likely(tp->tp_getattr)) 10685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); 10695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 10705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return PyObject_GetAttr(obj, attr_name); 10715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 10725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else 10735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) 10745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 10755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 10765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// PyObjectSetAttrStr.proto /////////////// 10775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 10785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_COMPILING_IN_CPYTHON 10795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_PyObject_DelAttrStr(o,n) __Pyx_PyObject_SetAttrStr(o,n,NULL) 10805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value) { 10815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyTypeObject* tp = Py_TYPE(obj); 10825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (likely(tp->tp_setattro)) 10835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return tp->tp_setattro(obj, attr_name, value); 10845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_MAJOR_VERSION < 3 10855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (likely(tp->tp_setattr)) 10865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return tp->tp_setattr(obj, PyString_AS_STRING(attr_name), value); 10875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 10885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return PyObject_SetAttr(obj, attr_name, value); 10895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 10905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else 10915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_PyObject_DelAttrStr(o,n) PyObject_DelAttr(o,n) 10925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_PyObject_SetAttrStr(o,n,v) PyObject_SetAttr(o,n,v) 10935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 10945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 10955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// PyObjectCallMethod.proto /////////////// 10965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: PyObjectGetAttrStr 10975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: PyObjectCall 10985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@substitute: naming 10995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 11005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject* __Pyx_PyObject_CallMethodTuple(PyObject* obj, PyObject* method_name, PyObject* args) { 11015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject *method, *result = NULL; 11025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(!args)) return NULL; 11035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) method = __Pyx_PyObject_GetAttrStr(obj, method_name); 11045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(!method)) goto bad; 11055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) result = __Pyx_PyObject_Call(method, args, NULL); 11065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_DECREF(method); 11075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bad: 11085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_DECREF(args); 11095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return result; 11105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 11115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 11125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_PyObject_CallMethod3(obj, name, arg1, arg2, arg3) \ 11135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) __Pyx_PyObject_CallMethodTuple(obj, name, PyTuple_Pack(3, arg1, arg2, arg3)) 11145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_PyObject_CallMethod2(obj, name, arg1, arg2) \ 11155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) __Pyx_PyObject_CallMethodTuple(obj, name, PyTuple_Pack(2, arg1, arg2)) 11165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_PyObject_CallMethod1(obj, name, arg1) \ 11175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) __Pyx_PyObject_CallMethodTuple(obj, name, PyTuple_Pack(1, arg1)) 11185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_PyObject_CallMethod0(obj, name) \ 11195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) __Pyx_PyObject_CallMethodTuple(obj, name, (Py_INCREF($empty_tuple), $empty_tuple)) 11205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 11215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 11225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// tp_new.proto /////////////// 11235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 11245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_tp_new(type_obj, args) __Pyx_tp_new_kwargs(type_obj, args, NULL) 11255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject* __Pyx_tp_new_kwargs(PyObject* type_obj, PyObject* args, PyObject* kwargs) { 11265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return (PyObject*) (((PyTypeObject*)type_obj)->tp_new((PyTypeObject*)type_obj, args, kwargs)); 11275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 11285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 11295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 11305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// PyObjectCall.proto /////////////// 11315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 11325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_COMPILING_IN_CPYTHON 11335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); /*proto*/ 11345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else 11355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) 11365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 11375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 11385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// PyObjectCall /////////////// 11395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 11405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_COMPILING_IN_CPYTHON 11415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { 11425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject *result; 11435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ternaryfunc call = func->ob_type->tp_call; 11445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 11455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(!call)) 11465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return PyObject_Call(func, arg, kw); 11475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_VERSION_HEX >= 0x02060000 11485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) 11495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return NULL; 11505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 11515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) result = (*call)(func, arg, kw); 11525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_VERSION_HEX >= 0x02060000 11535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_LeaveRecursiveCall(); 11545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 11555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (unlikely(!result) && unlikely(!PyErr_Occurred())) { 11565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyErr_SetString( 11575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyExc_SystemError, 11585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "NULL result without error in PyObject_Call"); 11595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 11605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return result; 11615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 11625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 1163