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