| Index: third_party/cython/src/Cython/Utility/ObjectHandling.c
|
| diff --git a/third_party/cython/src/Cython/Utility/ObjectHandling.c b/third_party/cython/src/Cython/Utility/ObjectHandling.c
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..e20fc9ba5c56b586abe3df81bda3327c9e1bd03f
|
| --- /dev/null
|
| +++ b/third_party/cython/src/Cython/Utility/ObjectHandling.c
|
| @@ -0,0 +1,1162 @@
|
| +/*
|
| + * General object operations and protocol implementations,
|
| + * including their specialisations for certain builtins.
|
| + *
|
| + * Optional optimisations for builtins are in Optimize.c.
|
| + *
|
| + * Required replacements of builtins are in Builtins.c.
|
| + */
|
| +
|
| +/////////////// RaiseNoneIterError.proto ///////////////
|
| +
|
| +static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void);
|
| +
|
| +/////////////// RaiseNoneIterError ///////////////
|
| +
|
| +static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) {
|
| + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
|
| +}
|
| +
|
| +/////////////// RaiseTooManyValuesToUnpack.proto ///////////////
|
| +
|
| +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected);
|
| +
|
| +/////////////// RaiseTooManyValuesToUnpack ///////////////
|
| +
|
| +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) {
|
| + PyErr_Format(PyExc_ValueError,
|
| + "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected);
|
| +}
|
| +
|
| +/////////////// RaiseNeedMoreValuesToUnpack.proto ///////////////
|
| +
|
| +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index);
|
| +
|
| +/////////////// RaiseNeedMoreValuesToUnpack ///////////////
|
| +
|
| +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) {
|
| + PyErr_Format(PyExc_ValueError,
|
| + "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack",
|
| + index, (index == 1) ? "" : "s");
|
| +}
|
| +
|
| +/////////////// UnpackTupleError.proto ///////////////
|
| +
|
| +static void __Pyx_UnpackTupleError(PyObject *, Py_ssize_t index); /*proto*/
|
| +
|
| +/////////////// UnpackTupleError ///////////////
|
| +//@requires: RaiseNoneIterError
|
| +//@requires: RaiseNeedMoreValuesToUnpack
|
| +//@requires: RaiseTooManyValuesToUnpack
|
| +
|
| +static void __Pyx_UnpackTupleError(PyObject *t, Py_ssize_t index) {
|
| + if (t == Py_None) {
|
| + __Pyx_RaiseNoneNotIterableError();
|
| + } else if (PyTuple_GET_SIZE(t) < index) {
|
| + __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(t));
|
| + } else {
|
| + __Pyx_RaiseTooManyValuesError(index);
|
| + }
|
| +}
|
| +
|
| +/////////////// UnpackItemEndCheck.proto ///////////////
|
| +
|
| +static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); /*proto*/
|
| +
|
| +/////////////// UnpackItemEndCheck ///////////////
|
| +//@requires: RaiseTooManyValuesToUnpack
|
| +//@requires: IterFinish
|
| +
|
| +static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) {
|
| + if (unlikely(retval)) {
|
| + Py_DECREF(retval);
|
| + __Pyx_RaiseTooManyValuesError(expected);
|
| + return -1;
|
| + } else {
|
| + return __Pyx_IterFinish();
|
| + }
|
| + return 0;
|
| +}
|
| +
|
| +/////////////// UnpackTuple2.proto ///////////////
|
| +
|
| +static CYTHON_INLINE int __Pyx_unpack_tuple2(PyObject* tuple, PyObject** value1, PyObject** value2,
|
| + int is_tuple, int has_known_size, int decref_tuple);
|
| +
|
| +/////////////// UnpackTuple2 ///////////////
|
| +//@requires: UnpackItemEndCheck
|
| +//@requires: UnpackTupleError
|
| +//@requires: RaiseNeedMoreValuesToUnpack
|
| +
|
| +static CYTHON_INLINE int __Pyx_unpack_tuple2(PyObject* tuple, PyObject** pvalue1, PyObject** pvalue2,
|
| + int is_tuple, int has_known_size, int decref_tuple) {
|
| + Py_ssize_t index;
|
| + PyObject *value1 = NULL, *value2 = NULL, *iter = NULL;
|
| + if (!is_tuple && unlikely(!PyTuple_Check(tuple))) {
|
| + iternextfunc iternext;
|
| + iter = PyObject_GetIter(tuple);
|
| + if (unlikely(!iter)) goto bad;
|
| + if (decref_tuple) { Py_DECREF(tuple); tuple = NULL; }
|
| + iternext = Py_TYPE(iter)->tp_iternext;
|
| + value1 = iternext(iter); if (unlikely(!value1)) { index = 0; goto unpacking_failed; }
|
| + value2 = iternext(iter); if (unlikely(!value2)) { index = 1; goto unpacking_failed; }
|
| + if (!has_known_size && unlikely(__Pyx_IternextUnpackEndCheck(iternext(iter), 2))) goto bad;
|
| + Py_DECREF(iter);
|
| + } else {
|
| + if (!has_known_size && unlikely(PyTuple_GET_SIZE(tuple) != 2)) {
|
| + __Pyx_UnpackTupleError(tuple, 2);
|
| + goto bad;
|
| + }
|
| +#if CYTHON_COMPILING_IN_PYPY
|
| + value1 = PySequence_ITEM(tuple, 0);
|
| + if (unlikely(!value1)) goto bad;
|
| + value2 = PySequence_ITEM(tuple, 1);
|
| + if (unlikely(!value2)) goto bad;
|
| +#else
|
| + value1 = PyTuple_GET_ITEM(tuple, 0);
|
| + value2 = PyTuple_GET_ITEM(tuple, 1);
|
| + Py_INCREF(value1);
|
| + Py_INCREF(value2);
|
| +#endif
|
| + if (decref_tuple) { Py_DECREF(tuple); }
|
| + }
|
| + *pvalue1 = value1;
|
| + *pvalue2 = value2;
|
| + return 0;
|
| +unpacking_failed:
|
| + if (!has_known_size && __Pyx_IterFinish() == 0)
|
| + __Pyx_RaiseNeedMoreValuesError(index);
|
| +bad:
|
| + Py_XDECREF(iter);
|
| + Py_XDECREF(value1);
|
| + Py_XDECREF(value2);
|
| + if (decref_tuple) { Py_XDECREF(tuple); }
|
| + return -1;
|
| +}
|
| +
|
| +/////////////// IterNext.proto ///////////////
|
| +
|
| +#define __Pyx_PyIter_Next(obj) __Pyx_PyIter_Next2(obj, NULL)
|
| +static CYTHON_INLINE PyObject *__Pyx_PyIter_Next2(PyObject *, PyObject *); /*proto*/
|
| +
|
| +/////////////// IterNext ///////////////
|
| +
|
| +// originally copied from Py3's builtin_next()
|
| +static CYTHON_INLINE PyObject *__Pyx_PyIter_Next2(PyObject* iterator, PyObject* defval) {
|
| + PyObject* next;
|
| + iternextfunc iternext = Py_TYPE(iterator)->tp_iternext;
|
| +#if CYTHON_COMPILING_IN_CPYTHON
|
| + if (unlikely(!iternext)) {
|
| +#else
|
| + if (unlikely(!iternext) || unlikely(!PyIter_Check(iterator))) {
|
| +#endif
|
| + PyErr_Format(PyExc_TypeError,
|
| + "%.200s object is not an iterator", Py_TYPE(iterator)->tp_name);
|
| + return NULL;
|
| + }
|
| + next = iternext(iterator);
|
| + if (likely(next))
|
| + return next;
|
| +#if CYTHON_COMPILING_IN_CPYTHON
|
| +#if PY_VERSION_HEX >= 0x03010000 || (PY_MAJOR_VERSION < 3 && PY_VERSION_HEX >= 0x02070000)
|
| + if (unlikely(iternext == &_PyObject_NextNotImplemented))
|
| + return NULL;
|
| +#endif
|
| +#endif
|
| + if (defval) {
|
| + PyObject* exc_type = PyErr_Occurred();
|
| + if (exc_type) {
|
| + if (unlikely(exc_type != PyExc_StopIteration) &&
|
| + !PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))
|
| + return NULL;
|
| + PyErr_Clear();
|
| + }
|
| + Py_INCREF(defval);
|
| + return defval;
|
| + }
|
| + if (!PyErr_Occurred())
|
| + PyErr_SetNone(PyExc_StopIteration);
|
| + return NULL;
|
| +}
|
| +
|
| +/////////////// IterFinish.proto ///////////////
|
| +
|
| +static CYTHON_INLINE int __Pyx_IterFinish(void); /*proto*/
|
| +
|
| +/////////////// IterFinish ///////////////
|
| +
|
| +// When PyIter_Next(iter) has returned NULL in order to signal termination,
|
| +// this function does the right cleanup and returns 0 on success. If it
|
| +// detects an error that occurred in the iterator, it returns -1.
|
| +
|
| +static CYTHON_INLINE int __Pyx_IterFinish(void) {
|
| +#if CYTHON_COMPILING_IN_CPYTHON
|
| + PyThreadState *tstate = PyThreadState_GET();
|
| + PyObject* exc_type = tstate->curexc_type;
|
| + if (unlikely(exc_type)) {
|
| + if (likely(exc_type == PyExc_StopIteration) || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)) {
|
| + PyObject *exc_value, *exc_tb;
|
| + exc_value = tstate->curexc_value;
|
| + exc_tb = tstate->curexc_traceback;
|
| + tstate->curexc_type = 0;
|
| + tstate->curexc_value = 0;
|
| + tstate->curexc_traceback = 0;
|
| + Py_DECREF(exc_type);
|
| + Py_XDECREF(exc_value);
|
| + Py_XDECREF(exc_tb);
|
| + return 0;
|
| + } else {
|
| + return -1;
|
| + }
|
| + }
|
| + return 0;
|
| +#else
|
| + if (unlikely(PyErr_Occurred())) {
|
| + if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) {
|
| + PyErr_Clear();
|
| + return 0;
|
| + } else {
|
| + return -1;
|
| + }
|
| + }
|
| + return 0;
|
| +#endif
|
| +}
|
| +
|
| +/////////////// DictGetItem.proto ///////////////
|
| +
|
| +#if PY_MAJOR_VERSION >= 3
|
| +static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) {
|
| + PyObject *value;
|
| + value = PyDict_GetItemWithError(d, key);
|
| + if (unlikely(!value)) {
|
| + if (!PyErr_Occurred()) {
|
| + PyObject* args = PyTuple_Pack(1, key);
|
| + if (likely(args))
|
| + PyErr_SetObject(PyExc_KeyError, args);
|
| + Py_XDECREF(args);
|
| + }
|
| + return NULL;
|
| + }
|
| + Py_INCREF(value);
|
| + return value;
|
| +}
|
| +#else
|
| + #define __Pyx_PyDict_GetItem(d, key) PyObject_GetItem(d, key)
|
| +#endif
|
| +
|
| +/////////////// GetItemInt.proto ///////////////
|
| +
|
| +#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \
|
| + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \
|
| + __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) : \
|
| + (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) : \
|
| + __Pyx_GetItemInt_Generic(o, to_py_func(i))))
|
| +
|
| +{{for type in ['List', 'Tuple']}}
|
| +#define __Pyx_GetItemInt_{{type}}(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \
|
| + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \
|
| + __Pyx_GetItemInt_{{type}}_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) : \
|
| + (PyErr_SetString(PyExc_IndexError, "{{ type.lower() }} index out of range"), (PyObject*)NULL))
|
| +
|
| +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_{{type}}_Fast(PyObject *o, Py_ssize_t i,
|
| + int wraparound, int boundscheck);
|
| +{{endfor}}
|
| +
|
| +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j);
|
| +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
|
| + int is_list, int wraparound, int boundscheck);
|
| +
|
| +/////////////// GetItemInt ///////////////
|
| +
|
| +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) {
|
| + PyObject *r;
|
| + if (!j) return NULL;
|
| + r = PyObject_GetItem(o, j);
|
| + Py_DECREF(j);
|
| + return r;
|
| +}
|
| +
|
| +{{for type in ['List', 'Tuple']}}
|
| +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_{{type}}_Fast(PyObject *o, Py_ssize_t i,
|
| + int wraparound, int boundscheck) {
|
| +#if CYTHON_COMPILING_IN_CPYTHON
|
| + if (wraparound & unlikely(i < 0)) i += Py{{type}}_GET_SIZE(o);
|
| + if ((!boundscheck) || likely((0 <= i) & (i < Py{{type}}_GET_SIZE(o)))) {
|
| + PyObject *r = Py{{type}}_GET_ITEM(o, i);
|
| + Py_INCREF(r);
|
| + return r;
|
| + }
|
| + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
|
| +#else
|
| + return PySequence_GetItem(o, i);
|
| +#endif
|
| +}
|
| +{{endfor}}
|
| +
|
| +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
|
| + int is_list, int wraparound, int boundscheck) {
|
| +#if CYTHON_COMPILING_IN_CPYTHON
|
| + if (is_list || PyList_CheckExact(o)) {
|
| + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o);
|
| + if ((!boundscheck) || (likely((n >= 0) & (n < PyList_GET_SIZE(o))))) {
|
| + PyObject *r = PyList_GET_ITEM(o, n);
|
| + Py_INCREF(r);
|
| + return r;
|
| + }
|
| + }
|
| + else if (PyTuple_CheckExact(o)) {
|
| + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o);
|
| + if ((!boundscheck) || likely((n >= 0) & (n < PyTuple_GET_SIZE(o)))) {
|
| + PyObject *r = PyTuple_GET_ITEM(o, n);
|
| + Py_INCREF(r);
|
| + return r;
|
| + }
|
| + } else {
|
| + // inlined PySequence_GetItem() + special cased length overflow
|
| + PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
|
| + if (likely(m && m->sq_item)) {
|
| + if (wraparound && unlikely(i < 0) && likely(m->sq_length)) {
|
| + Py_ssize_t l = m->sq_length(o);
|
| + if (likely(l >= 0)) {
|
| + i += l;
|
| + } else {
|
| + // if length > max(Py_ssize_t), maybe the object can wrap around itself?
|
| + if (PyErr_ExceptionMatches(PyExc_OverflowError))
|
| + PyErr_Clear();
|
| + else
|
| + return NULL;
|
| + }
|
| + }
|
| + return m->sq_item(o, i);
|
| + }
|
| + }
|
| +#else
|
| + if (is_list || PySequence_Check(o)) {
|
| + return PySequence_GetItem(o, i);
|
| + }
|
| +#endif
|
| + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
|
| +}
|
| +
|
| +/////////////// SetItemInt.proto ///////////////
|
| +
|
| +#define __Pyx_SetItemInt(o, i, v, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \
|
| + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \
|
| + __Pyx_SetItemInt_Fast(o, (Py_ssize_t)i, v, is_list, wraparound, boundscheck) : \
|
| + (is_list ? (PyErr_SetString(PyExc_IndexError, "list assignment index out of range"), -1) : \
|
| + __Pyx_SetItemInt_Generic(o, to_py_func(i), v)))
|
| +
|
| +static CYTHON_INLINE int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v);
|
| +static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v,
|
| + int is_list, int wraparound, int boundscheck);
|
| +
|
| +/////////////// SetItemInt ///////////////
|
| +
|
| +static CYTHON_INLINE int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v) {
|
| + int r;
|
| + if (!j) return -1;
|
| + r = PyObject_SetItem(o, j, v);
|
| + Py_DECREF(j);
|
| + return r;
|
| +}
|
| +
|
| +static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v,
|
| + int is_list, int wraparound, int boundscheck) {
|
| +#if CYTHON_COMPILING_IN_CPYTHON
|
| + if (is_list || PyList_CheckExact(o)) {
|
| + Py_ssize_t n = (!wraparound) ? i : ((likely(i >= 0)) ? i : i + PyList_GET_SIZE(o));
|
| + if ((!boundscheck) || likely((n >= 0) & (n < PyList_GET_SIZE(o)))) {
|
| + PyObject* old = PyList_GET_ITEM(o, n);
|
| + Py_INCREF(v);
|
| + PyList_SET_ITEM(o, n, v);
|
| + Py_DECREF(old);
|
| + return 1;
|
| + }
|
| + } else {
|
| + // inlined PySequence_SetItem() + special cased length overflow
|
| + PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
|
| + if (likely(m && m->sq_ass_item)) {
|
| + if (wraparound && unlikely(i < 0) && likely(m->sq_length)) {
|
| + Py_ssize_t l = m->sq_length(o);
|
| + if (likely(l >= 0)) {
|
| + i += l;
|
| + } else {
|
| + // if length > max(Py_ssize_t), maybe the object can wrap around itself?
|
| + if (PyErr_ExceptionMatches(PyExc_OverflowError))
|
| + PyErr_Clear();
|
| + else
|
| + return -1;
|
| + }
|
| + }
|
| + return m->sq_ass_item(o, i, v);
|
| + }
|
| + }
|
| +#else
|
| +#if CYTHON_COMPILING_IN_PYPY
|
| + if (is_list || (PySequence_Check(o) && !PyDict_Check(o))) {
|
| +#else
|
| + if (is_list || PySequence_Check(o)) {
|
| +#endif
|
| + return PySequence_SetItem(o, i, v);
|
| + }
|
| +#endif
|
| + return __Pyx_SetItemInt_Generic(o, PyInt_FromSsize_t(i), v);
|
| +}
|
| +
|
| +
|
| +/////////////// DelItemInt.proto ///////////////
|
| +
|
| +#define __Pyx_DelItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \
|
| + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \
|
| + __Pyx_DelItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound) : \
|
| + (is_list ? (PyErr_SetString(PyExc_IndexError, "list assignment index out of range"), -1) : \
|
| + __Pyx_DelItem_Generic(o, to_py_func(i))))
|
| +
|
| +static CYTHON_INLINE int __Pyx_DelItem_Generic(PyObject *o, PyObject *j);
|
| +static CYTHON_INLINE int __Pyx_DelItemInt_Fast(PyObject *o, Py_ssize_t i,
|
| + CYTHON_UNUSED int is_list, int wraparound);
|
| +
|
| +/////////////// DelItemInt ///////////////
|
| +
|
| +static CYTHON_INLINE int __Pyx_DelItem_Generic(PyObject *o, PyObject *j) {
|
| + int r;
|
| + if (!j) return -1;
|
| + r = PyObject_DelItem(o, j);
|
| + Py_DECREF(j);
|
| + return r;
|
| +}
|
| +
|
| +static CYTHON_INLINE int __Pyx_DelItemInt_Fast(PyObject *o, Py_ssize_t i,
|
| + CYTHON_UNUSED int is_list, int wraparound) {
|
| +#if CYTHON_COMPILING_IN_PYPY
|
| + if (is_list || PySequence_Check(o)) {
|
| + return PySequence_DelItem(o, i);
|
| + }
|
| +#else
|
| + // inlined PySequence_DelItem() + special cased length overflow
|
| + PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
|
| + if (likely(m && m->sq_ass_item)) {
|
| + if (wraparound && unlikely(i < 0) && likely(m->sq_length)) {
|
| + Py_ssize_t l = m->sq_length(o);
|
| + if (likely(l >= 0)) {
|
| + i += l;
|
| + } else {
|
| + // if length > max(Py_ssize_t), maybe the object can wrap around itself?
|
| + if (PyErr_ExceptionMatches(PyExc_OverflowError))
|
| + PyErr_Clear();
|
| + else
|
| + return -1;
|
| + }
|
| + }
|
| + return m->sq_ass_item(o, i, (PyObject *)NULL);
|
| + }
|
| +#endif
|
| + return __Pyx_DelItem_Generic(o, PyInt_FromSsize_t(i));
|
| +}
|
| +
|
| +
|
| +/////////////// SliceObject.proto ///////////////
|
| +
|
| +// we pass pointer addresses to show the C compiler what is NULL and what isn't
|
| +{{if access == 'Get'}}
|
| +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice(
|
| + PyObject* obj, Py_ssize_t cstart, Py_ssize_t cstop,
|
| + PyObject** py_start, PyObject** py_stop, PyObject** py_slice,
|
| + int has_cstart, int has_cstop, int wraparound);
|
| +{{else}}
|
| +#define __Pyx_PyObject_DelSlice(obj, cstart, cstop, py_start, py_stop, py_slice, has_cstart, has_cstop, wraparound) \
|
| + __Pyx_PyObject_SetSlice(obj, (PyObject*)NULL, cstart, cstop, py_start, py_stop, py_slice, has_cstart, has_cstop, wraparound)
|
| +
|
| +// we pass pointer addresses to show the C compiler what is NULL and what isn't
|
| +static CYTHON_INLINE int __Pyx_PyObject_SetSlice(
|
| + PyObject* obj, PyObject* value, Py_ssize_t cstart, Py_ssize_t cstop,
|
| + PyObject** py_start, PyObject** py_stop, PyObject** py_slice,
|
| + int has_cstart, int has_cstop, int wraparound);
|
| +{{endif}}
|
| +
|
| +/////////////// SliceObject ///////////////
|
| +
|
| +{{if access == 'Get'}}
|
| +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice(
|
| + PyObject* obj, Py_ssize_t cstart, Py_ssize_t cstop,
|
| +{{else}}
|
| +static CYTHON_INLINE int __Pyx_PyObject_SetSlice(
|
| + PyObject* obj, PyObject* value, Py_ssize_t cstart, Py_ssize_t cstop,
|
| +{{endif}}
|
| + PyObject** _py_start, PyObject** _py_stop, PyObject** _py_slice,
|
| + int has_cstart, int has_cstop, CYTHON_UNUSED int wraparound) {
|
| +#if CYTHON_COMPILING_IN_CPYTHON
|
| + PyMappingMethods* mp;
|
| +#if PY_MAJOR_VERSION < 3
|
| + PySequenceMethods* ms = Py_TYPE(obj)->tp_as_sequence;
|
| + if (likely(ms && ms->sq_{{if access == 'Set'}}ass_{{endif}}slice)) {
|
| + if (!has_cstart) {
|
| + if (_py_start && (*_py_start != Py_None)) {
|
| + cstart = __Pyx_PyIndex_AsSsize_t(*_py_start);
|
| + if ((cstart == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad;
|
| + } else
|
| + cstart = 0;
|
| + }
|
| + if (!has_cstop) {
|
| + if (_py_stop && (*_py_stop != Py_None)) {
|
| + cstop = __Pyx_PyIndex_AsSsize_t(*_py_stop);
|
| + if ((cstop == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad;
|
| + } else
|
| + cstop = PY_SSIZE_T_MAX;
|
| + }
|
| + if (wraparound && unlikely((cstart < 0) | (cstop < 0)) && likely(ms->sq_length)) {
|
| + Py_ssize_t l = ms->sq_length(obj);
|
| + if (likely(l >= 0)) {
|
| + if (cstop < 0) {
|
| + cstop += l;
|
| + if (cstop < 0) cstop = 0;
|
| + }
|
| + if (cstart < 0) {
|
| + cstart += l;
|
| + if (cstart < 0) cstart = 0;
|
| + }
|
| + } else {
|
| + // if length > max(Py_ssize_t), maybe the object can wrap around itself?
|
| + if (PyErr_ExceptionMatches(PyExc_OverflowError))
|
| + PyErr_Clear();
|
| + else
|
| + goto bad;
|
| + }
|
| + }
|
| +{{if access == 'Get'}}
|
| + return ms->sq_slice(obj, cstart, cstop);
|
| +{{else}}
|
| + return ms->sq_ass_slice(obj, cstart, cstop, value);
|
| +{{endif}}
|
| + }
|
| +#endif
|
| +
|
| + mp = Py_TYPE(obj)->tp_as_mapping;
|
| +{{if access == 'Get'}}
|
| + if (likely(mp && mp->mp_subscript))
|
| +{{else}}
|
| + if (likely(mp && mp->mp_ass_subscript))
|
| +{{endif}}
|
| +#endif
|
| + {
|
| + {{if access == 'Get'}}PyObject*{{else}}int{{endif}} result;
|
| + PyObject *py_slice, *py_start, *py_stop;
|
| + if (_py_slice) {
|
| + py_slice = *_py_slice;
|
| + } else {
|
| + PyObject* owned_start = NULL;
|
| + PyObject* owned_stop = NULL;
|
| + if (_py_start) {
|
| + py_start = *_py_start;
|
| + } else {
|
| + if (has_cstart) {
|
| + owned_start = py_start = PyInt_FromSsize_t(cstart);
|
| + if (unlikely(!py_start)) goto bad;
|
| + } else
|
| + py_start = Py_None;
|
| + }
|
| + if (_py_stop) {
|
| + py_stop = *_py_stop;
|
| + } else {
|
| + if (has_cstop) {
|
| + owned_stop = py_stop = PyInt_FromSsize_t(cstop);
|
| + if (unlikely(!py_stop)) {
|
| + Py_XDECREF(owned_start);
|
| + goto bad;
|
| + }
|
| + } else
|
| + py_stop = Py_None;
|
| + }
|
| + py_slice = PySlice_New(py_start, py_stop, Py_None);
|
| + Py_XDECREF(owned_start);
|
| + Py_XDECREF(owned_stop);
|
| + if (unlikely(!py_slice)) goto bad;
|
| + }
|
| +#if CYTHON_COMPILING_IN_CPYTHON
|
| +{{if access == 'Get'}}
|
| + result = mp->mp_subscript(obj, py_slice);
|
| +#else
|
| + result = PyObject_GetItem(obj, py_slice);
|
| +{{else}}
|
| + result = mp->mp_ass_subscript(obj, py_slice, value);
|
| +#else
|
| + result = value ? PyObject_SetItem(obj, py_slice, value) : PyObject_DelItem(obj, py_slice);
|
| +{{endif}}
|
| +#endif
|
| + if (!_py_slice) {
|
| + Py_DECREF(py_slice);
|
| + }
|
| + return result;
|
| + }
|
| + PyErr_Format(PyExc_TypeError,
|
| +{{if access == 'Get'}}
|
| + "'%.200s' object is unsliceable", Py_TYPE(obj)->tp_name);
|
| +{{else}}
|
| + "'%.200s' object does not support slice %.10s",
|
| + Py_TYPE(obj)->tp_name, value ? "assignment" : "deletion");
|
| +{{endif}}
|
| +
|
| +bad:
|
| + return {{if access == 'Get'}}NULL{{else}}-1{{endif}};
|
| +}
|
| +
|
| +
|
| +/////////////// SliceTupleAndList.proto ///////////////
|
| +
|
| +#if CYTHON_COMPILING_IN_CPYTHON
|
| +static CYTHON_INLINE PyObject* __Pyx_PyList_GetSlice(PyObject* src, Py_ssize_t start, Py_ssize_t stop);
|
| +static CYTHON_INLINE PyObject* __Pyx_PyTuple_GetSlice(PyObject* src, Py_ssize_t start, Py_ssize_t stop);
|
| +#else
|
| +#define __Pyx_PyList_GetSlice(seq, start, stop) PySequence_GetSlice(seq, start, stop)
|
| +#define __Pyx_PyTuple_GetSlice(seq, start, stop) PySequence_GetSlice(seq, start, stop)
|
| +#endif
|
| +
|
| +/////////////// SliceTupleAndList ///////////////
|
| +
|
| +#if CYTHON_COMPILING_IN_CPYTHON
|
| +static CYTHON_INLINE void __Pyx_crop_slice(Py_ssize_t* _start, Py_ssize_t* _stop, Py_ssize_t* _length) {
|
| + Py_ssize_t start = *_start, stop = *_stop, length = *_length;
|
| + if (start < 0) {
|
| + start += length;
|
| + if (start < 0)
|
| + start = 0;
|
| + }
|
| +
|
| + if (stop < 0)
|
| + stop += length;
|
| + else if (stop > length)
|
| + stop = length;
|
| +
|
| + *_length = stop - start;
|
| + *_start = start;
|
| + *_stop = stop;
|
| +}
|
| +
|
| +static CYTHON_INLINE void __Pyx_copy_object_array(PyObject** CYTHON_RESTRICT src, PyObject** CYTHON_RESTRICT dest, Py_ssize_t length) {
|
| + PyObject *v;
|
| + Py_ssize_t i;
|
| + for (i = 0; i < length; i++) {
|
| + v = dest[i] = src[i];
|
| + Py_INCREF(v);
|
| + }
|
| +}
|
| +
|
| +{{for type in ['List', 'Tuple']}}
|
| +static CYTHON_INLINE PyObject* __Pyx_Py{{type}}_GetSlice(
|
| + PyObject* src, Py_ssize_t start, Py_ssize_t stop) {
|
| + PyObject* dest;
|
| + Py_ssize_t length = Py{{type}}_GET_SIZE(src);
|
| + __Pyx_crop_slice(&start, &stop, &length);
|
| + if (unlikely(length <= 0))
|
| + return Py{{type}}_New(0);
|
| +
|
| + dest = Py{{type}}_New(length);
|
| + if (unlikely(!dest))
|
| + return NULL;
|
| + __Pyx_copy_object_array(
|
| + ((Py{{type}}Object*)src)->ob_item + start,
|
| + ((Py{{type}}Object*)dest)->ob_item,
|
| + length);
|
| + return dest;
|
| +}
|
| +{{endfor}}
|
| +#endif
|
| +
|
| +
|
| +/////////////// CalculateMetaclass.proto ///////////////
|
| +
|
| +static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases);
|
| +
|
| +/////////////// CalculateMetaclass ///////////////
|
| +
|
| +static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases) {
|
| + Py_ssize_t i, nbases = PyTuple_GET_SIZE(bases);
|
| + for (i=0; i < nbases; i++) {
|
| + PyTypeObject *tmptype;
|
| + PyObject *tmp = PyTuple_GET_ITEM(bases, i);
|
| + tmptype = Py_TYPE(tmp);
|
| +#if PY_MAJOR_VERSION < 3
|
| + if (tmptype == &PyClass_Type)
|
| + continue;
|
| +#endif
|
| + if (!metaclass) {
|
| + metaclass = tmptype;
|
| + continue;
|
| + }
|
| + if (PyType_IsSubtype(metaclass, tmptype))
|
| + continue;
|
| + if (PyType_IsSubtype(tmptype, metaclass)) {
|
| + metaclass = tmptype;
|
| + continue;
|
| + }
|
| + // else:
|
| + PyErr_SetString(PyExc_TypeError,
|
| + "metaclass conflict: "
|
| + "the metaclass of a derived class "
|
| + "must be a (non-strict) subclass "
|
| + "of the metaclasses of all its bases");
|
| + return NULL;
|
| + }
|
| + if (!metaclass) {
|
| +#if PY_MAJOR_VERSION < 3
|
| + metaclass = &PyClass_Type;
|
| +#else
|
| + metaclass = &PyType_Type;
|
| +#endif
|
| + }
|
| + // make owned reference
|
| + Py_INCREF((PyObject*) metaclass);
|
| + return (PyObject*) metaclass;
|
| +}
|
| +
|
| +
|
| +/////////////// FindInheritedMetaclass.proto ///////////////
|
| +
|
| +static PyObject *__Pyx_FindInheritedMetaclass(PyObject *bases); /*proto*/
|
| +
|
| +/////////////// FindInheritedMetaclass ///////////////
|
| +//@requires: PyObjectGetAttrStr
|
| +//@requires: CalculateMetaclass
|
| +
|
| +static PyObject *__Pyx_FindInheritedMetaclass(PyObject *bases) {
|
| + PyObject *metaclass;
|
| + if (PyTuple_Check(bases) && PyTuple_GET_SIZE(bases) > 0) {
|
| + PyTypeObject *metatype;
|
| + PyObject *base = PyTuple_GET_ITEM(bases, 0);
|
| +#if PY_MAJOR_VERSION < 3
|
| + PyObject* basetype = __Pyx_PyObject_GetAttrStr(base, PYIDENT("__class__"));
|
| + if (basetype) {
|
| + metatype = (PyType_Check(basetype)) ? ((PyTypeObject*) basetype) : NULL;
|
| + } else {
|
| + PyErr_Clear();
|
| + metatype = Py_TYPE(base);
|
| + basetype = (PyObject*) metatype;
|
| + Py_INCREF(basetype);
|
| + }
|
| +#else
|
| + metatype = Py_TYPE(base);
|
| +#endif
|
| + metaclass = __Pyx_CalculateMetaclass(metatype, bases);
|
| +#if PY_MAJOR_VERSION < 3
|
| + Py_DECREF(basetype);
|
| +#endif
|
| + } else {
|
| + // no bases => use default metaclass
|
| +#if PY_MAJOR_VERSION < 3
|
| + metaclass = (PyObject *) &PyClass_Type;
|
| +#else
|
| + metaclass = (PyObject *) &PyType_Type;
|
| +#endif
|
| + Py_INCREF(metaclass);
|
| + }
|
| + return metaclass;
|
| +}
|
| +
|
| +/////////////// Py3MetaclassGet.proto ///////////////
|
| +
|
| +static PyObject *__Pyx_Py3MetaclassGet(PyObject *bases, PyObject *mkw); /*proto*/
|
| +
|
| +/////////////// Py3MetaclassGet ///////////////
|
| +//@requires: FindInheritedMetaclass
|
| +//@requires: CalculateMetaclass
|
| +
|
| +static PyObject *__Pyx_Py3MetaclassGet(PyObject *bases, PyObject *mkw) {
|
| + PyObject *metaclass = PyDict_GetItem(mkw, PYIDENT("metaclass"));
|
| + if (metaclass) {
|
| + Py_INCREF(metaclass);
|
| + if (PyDict_DelItem(mkw, PYIDENT("metaclass")) < 0) {
|
| + Py_DECREF(metaclass);
|
| + return NULL;
|
| + }
|
| + if (PyType_Check(metaclass)) {
|
| + PyObject* orig = metaclass;
|
| + metaclass = __Pyx_CalculateMetaclass((PyTypeObject*) metaclass, bases);
|
| + Py_DECREF(orig);
|
| + }
|
| + return metaclass;
|
| + }
|
| + return __Pyx_FindInheritedMetaclass(bases);
|
| +}
|
| +
|
| +/////////////// CreateClass.proto ///////////////
|
| +
|
| +static PyObject *__Pyx_CreateClass(PyObject *bases, PyObject *dict, PyObject *name,
|
| + PyObject *qualname, PyObject *modname); /*proto*/
|
| +
|
| +/////////////// CreateClass ///////////////
|
| +//@requires: FindInheritedMetaclass
|
| +//@requires: CalculateMetaclass
|
| +
|
| +static PyObject *__Pyx_CreateClass(PyObject *bases, PyObject *dict, PyObject *name,
|
| + PyObject *qualname, PyObject *modname) {
|
| + PyObject *result;
|
| + PyObject *metaclass;
|
| +
|
| + if (PyDict_SetItem(dict, PYIDENT("__module__"), modname) < 0)
|
| + return NULL;
|
| + if (PyDict_SetItem(dict, PYIDENT("__qualname__"), qualname) < 0)
|
| + return NULL;
|
| +
|
| + /* Python2 __metaclass__ */
|
| + metaclass = PyDict_GetItem(dict, PYIDENT("__metaclass__"));
|
| + if (metaclass) {
|
| + Py_INCREF(metaclass);
|
| + if (PyType_Check(metaclass)) {
|
| + PyObject* orig = metaclass;
|
| + metaclass = __Pyx_CalculateMetaclass((PyTypeObject*) metaclass, bases);
|
| + Py_DECREF(orig);
|
| + }
|
| + } else {
|
| + metaclass = __Pyx_FindInheritedMetaclass(bases);
|
| + }
|
| + if (unlikely(!metaclass))
|
| + return NULL;
|
| + result = PyObject_CallFunctionObjArgs(metaclass, name, bases, dict, NULL);
|
| + Py_DECREF(metaclass);
|
| + return result;
|
| +}
|
| +
|
| +/////////////// Py3ClassCreate.proto ///////////////
|
| +
|
| +static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, PyObject *qualname,
|
| + PyObject *mkw, PyObject *modname, PyObject *doc); /*proto*/
|
| +static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, PyObject *dict,
|
| + PyObject *mkw, int calculate_metaclass, int allow_py2_metaclass); /*proto*/
|
| +
|
| +/////////////// Py3ClassCreate ///////////////
|
| +//@requires: PyObjectGetAttrStr
|
| +//@requires: CalculateMetaclass
|
| +
|
| +static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name,
|
| + PyObject *qualname, PyObject *mkw, PyObject *modname, PyObject *doc) {
|
| + PyObject *ns;
|
| + if (metaclass) {
|
| + PyObject *prep = __Pyx_PyObject_GetAttrStr(metaclass, PYIDENT("__prepare__"));
|
| + if (prep) {
|
| + PyObject *pargs = PyTuple_Pack(2, name, bases);
|
| + if (unlikely(!pargs)) {
|
| + Py_DECREF(prep);
|
| + return NULL;
|
| + }
|
| + ns = PyObject_Call(prep, pargs, mkw);
|
| + Py_DECREF(prep);
|
| + Py_DECREF(pargs);
|
| + } else {
|
| + if (unlikely(!PyErr_ExceptionMatches(PyExc_AttributeError)))
|
| + return NULL;
|
| + PyErr_Clear();
|
| + ns = PyDict_New();
|
| + }
|
| + } else {
|
| + ns = PyDict_New();
|
| + }
|
| +
|
| + if (unlikely(!ns))
|
| + return NULL;
|
| +
|
| + /* Required here to emulate assignment order */
|
| + if (unlikely(PyObject_SetItem(ns, PYIDENT("__module__"), modname) < 0)) goto bad;
|
| + if (unlikely(PyObject_SetItem(ns, PYIDENT("__qualname__"), qualname) < 0)) goto bad;
|
| + if (unlikely(doc && PyObject_SetItem(ns, PYIDENT("__doc__"), doc) < 0)) goto bad;
|
| + return ns;
|
| +bad:
|
| + Py_DECREF(ns);
|
| + return NULL;
|
| +}
|
| +
|
| +static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases,
|
| + PyObject *dict, PyObject *mkw,
|
| + int calculate_metaclass, int allow_py2_metaclass) {
|
| + PyObject *result, *margs;
|
| + PyObject *owned_metaclass = NULL;
|
| + if (allow_py2_metaclass) {
|
| + /* honour Python2 __metaclass__ for backward compatibility */
|
| + owned_metaclass = PyObject_GetItem(dict, PYIDENT("__metaclass__"));
|
| + if (owned_metaclass) {
|
| + metaclass = owned_metaclass;
|
| + } else if (likely(PyErr_ExceptionMatches(PyExc_KeyError))) {
|
| + PyErr_Clear();
|
| + } else {
|
| + return NULL;
|
| + }
|
| + }
|
| + if (calculate_metaclass && (!metaclass || PyType_Check(metaclass))) {
|
| + metaclass = __Pyx_CalculateMetaclass((PyTypeObject*) metaclass, bases);
|
| + Py_XDECREF(owned_metaclass);
|
| + if (unlikely(!metaclass))
|
| + return NULL;
|
| + owned_metaclass = metaclass;
|
| + }
|
| + margs = PyTuple_Pack(3, name, bases, dict);
|
| + if (unlikely(!margs)) {
|
| + result = NULL;
|
| + } else {
|
| + result = PyObject_Call(metaclass, margs, mkw);
|
| + Py_DECREF(margs);
|
| + }
|
| + Py_XDECREF(owned_metaclass);
|
| + return result;
|
| +}
|
| +
|
| +/////////////// ExtTypeTest.proto ///////////////
|
| +
|
| +static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/
|
| +
|
| +/////////////// ExtTypeTest ///////////////
|
| +
|
| +static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
|
| + if (unlikely(!type)) {
|
| + PyErr_SetString(PyExc_SystemError, "Missing type object");
|
| + return 0;
|
| + }
|
| + if (likely(PyObject_TypeCheck(obj, type)))
|
| + return 1;
|
| + PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s",
|
| + Py_TYPE(obj)->tp_name, type->tp_name);
|
| + return 0;
|
| +}
|
| +
|
| +/////////////// CallableCheck.proto ///////////////
|
| +
|
| +#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
|
| +#define __Pyx_PyCallable_Check(obj) ((obj)->ob_type->tp_call != NULL)
|
| +#else
|
| +#define __Pyx_PyCallable_Check(obj) PyCallable_Check(obj)
|
| +#endif
|
| +
|
| +/////////////// PyDictContains.proto ///////////////
|
| +
|
| +static CYTHON_INLINE int __Pyx_PyDict_Contains(PyObject* item, PyObject* dict, int eq) {
|
| + int result = PyDict_Contains(dict, item);
|
| + return unlikely(result < 0) ? result : (result == (eq == Py_EQ));
|
| +}
|
| +
|
| +/////////////// PySequenceContains.proto ///////////////
|
| +
|
| +static CYTHON_INLINE int __Pyx_PySequence_Contains(PyObject* item, PyObject* seq, int eq) {
|
| + int result = PySequence_Contains(seq, item);
|
| + return unlikely(result < 0) ? result : (result == (eq == Py_EQ));
|
| +}
|
| +
|
| +/////////////// PyBoolOrNullFromLong.proto ///////////////
|
| +
|
| +static CYTHON_INLINE PyObject* __Pyx_PyBoolOrNull_FromLong(long b) {
|
| + return unlikely(b < 0) ? NULL : __Pyx_PyBool_FromLong(b);
|
| +}
|
| +
|
| +/////////////// GetBuiltinName.proto ///////////////
|
| +
|
| +static PyObject *__Pyx_GetBuiltinName(PyObject *name); /*proto*/
|
| +
|
| +/////////////// GetBuiltinName ///////////////
|
| +//@requires: PyObjectGetAttrStr
|
| +//@substitute: naming
|
| +
|
| +static PyObject *__Pyx_GetBuiltinName(PyObject *name) {
|
| + PyObject* result = __Pyx_PyObject_GetAttrStr($builtins_cname, name);
|
| + if (unlikely(!result)) {
|
| + PyErr_Format(PyExc_NameError,
|
| +#if PY_MAJOR_VERSION >= 3
|
| + "name '%U' is not defined", name);
|
| +#else
|
| + "name '%.200s' is not defined", PyString_AS_STRING(name));
|
| +#endif
|
| + }
|
| + return result;
|
| +}
|
| +
|
| +/////////////// GetNameInClass.proto ///////////////
|
| +
|
| +static PyObject *__Pyx_GetNameInClass(PyObject *nmspace, PyObject *name); /*proto*/
|
| +
|
| +/////////////// GetNameInClass ///////////////
|
| +//@requires: PyObjectGetAttrStr
|
| +//@requires: GetModuleGlobalName
|
| +
|
| +static PyObject *__Pyx_GetNameInClass(PyObject *nmspace, PyObject *name) {
|
| + PyObject *result;
|
| + result = __Pyx_PyObject_GetAttrStr(nmspace, name);
|
| + if (!result)
|
| + result = __Pyx_GetModuleGlobalName(name);
|
| + return result;
|
| +}
|
| +
|
| +/////////////// GetModuleGlobalName.proto ///////////////
|
| +
|
| +static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name); /*proto*/
|
| +
|
| +/////////////// GetModuleGlobalName ///////////////
|
| +//@requires: GetBuiltinName
|
| +//@substitute: naming
|
| +
|
| +static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) {
|
| + PyObject *result;
|
| +#if CYTHON_COMPILING_IN_CPYTHON
|
| + result = PyDict_GetItem($moddict_cname, name);
|
| + if (result) {
|
| + Py_INCREF(result);
|
| + } else {
|
| +#else
|
| + result = PyObject_GetItem($moddict_cname, name);
|
| + if (!result) {
|
| + PyErr_Clear();
|
| +#endif
|
| + result = __Pyx_GetBuiltinName(name);
|
| + }
|
| + return result;
|
| +}
|
| +
|
| +//////////////////// GetAttr.proto ////////////////////
|
| +
|
| +static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *); /*proto*/
|
| +
|
| +//////////////////// GetAttr ////////////////////
|
| +//@requires: PyObjectGetAttrStr
|
| +
|
| +static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) {
|
| +#if CYTHON_COMPILING_IN_CPYTHON
|
| +#if PY_MAJOR_VERSION >= 3
|
| + if (likely(PyUnicode_Check(n)))
|
| +#else
|
| + if (likely(PyString_Check(n)))
|
| +#endif
|
| + return __Pyx_PyObject_GetAttrStr(o, n);
|
| +#endif
|
| + return PyObject_GetAttr(o, n);
|
| +}
|
| +
|
| +/////////////// PyObjectLookupSpecial.proto ///////////////
|
| +//@requires: PyObjectGetAttrStr
|
| +
|
| +#if CYTHON_COMPILING_IN_CPYTHON && (PY_VERSION_HEX >= 0x03020000 || PY_MAJOR_VERSION < 3 && PY_VERSION_HEX >= 0x02070000)
|
| +// looks like calling _PyType_Lookup() isn't safe in Py<=2.6/3.1
|
| +static CYTHON_INLINE PyObject* __Pyx_PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name) {
|
| + PyObject *res;
|
| + PyTypeObject *tp = Py_TYPE(obj);
|
| +#if PY_MAJOR_VERSION < 3
|
| + if (unlikely(PyInstance_Check(obj)))
|
| + return __Pyx_PyObject_GetAttrStr(obj, attr_name);
|
| +#endif
|
| + // adapted from CPython's special_lookup() in ceval.c
|
| + res = _PyType_Lookup(tp, attr_name);
|
| + if (likely(res)) {
|
| + descrgetfunc f = Py_TYPE(res)->tp_descr_get;
|
| + if (!f) {
|
| + Py_INCREF(res);
|
| + } else {
|
| + res = f(res, obj, (PyObject *)tp);
|
| + }
|
| + } else {
|
| + PyErr_SetObject(PyExc_AttributeError, attr_name);
|
| + }
|
| + return res;
|
| +}
|
| +#else
|
| +#define __Pyx_PyObject_LookupSpecial(o,n) __Pyx_PyObject_GetAttrStr(o,n)
|
| +#endif
|
| +
|
| +/////////////// PyObjectGetAttrStr.proto ///////////////
|
| +
|
| +#if CYTHON_COMPILING_IN_CPYTHON
|
| +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) {
|
| + PyTypeObject* tp = Py_TYPE(obj);
|
| + if (likely(tp->tp_getattro))
|
| + return tp->tp_getattro(obj, attr_name);
|
| +#if PY_MAJOR_VERSION < 3
|
| + if (likely(tp->tp_getattr))
|
| + return tp->tp_getattr(obj, PyString_AS_STRING(attr_name));
|
| +#endif
|
| + return PyObject_GetAttr(obj, attr_name);
|
| +}
|
| +#else
|
| +#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n)
|
| +#endif
|
| +
|
| +/////////////// PyObjectSetAttrStr.proto ///////////////
|
| +
|
| +#if CYTHON_COMPILING_IN_CPYTHON
|
| +#define __Pyx_PyObject_DelAttrStr(o,n) __Pyx_PyObject_SetAttrStr(o,n,NULL)
|
| +static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value) {
|
| + PyTypeObject* tp = Py_TYPE(obj);
|
| + if (likely(tp->tp_setattro))
|
| + return tp->tp_setattro(obj, attr_name, value);
|
| +#if PY_MAJOR_VERSION < 3
|
| + if (likely(tp->tp_setattr))
|
| + return tp->tp_setattr(obj, PyString_AS_STRING(attr_name), value);
|
| +#endif
|
| + return PyObject_SetAttr(obj, attr_name, value);
|
| +}
|
| +#else
|
| +#define __Pyx_PyObject_DelAttrStr(o,n) PyObject_DelAttr(o,n)
|
| +#define __Pyx_PyObject_SetAttrStr(o,n,v) PyObject_SetAttr(o,n,v)
|
| +#endif
|
| +
|
| +/////////////// PyObjectCallMethod.proto ///////////////
|
| +//@requires: PyObjectGetAttrStr
|
| +//@requires: PyObjectCall
|
| +//@substitute: naming
|
| +
|
| +static PyObject* __Pyx_PyObject_CallMethodTuple(PyObject* obj, PyObject* method_name, PyObject* args) {
|
| + PyObject *method, *result = NULL;
|
| + if (unlikely(!args)) return NULL;
|
| + method = __Pyx_PyObject_GetAttrStr(obj, method_name);
|
| + if (unlikely(!method)) goto bad;
|
| + result = __Pyx_PyObject_Call(method, args, NULL);
|
| + Py_DECREF(method);
|
| +bad:
|
| + Py_DECREF(args);
|
| + return result;
|
| +}
|
| +
|
| +#define __Pyx_PyObject_CallMethod3(obj, name, arg1, arg2, arg3) \
|
| + __Pyx_PyObject_CallMethodTuple(obj, name, PyTuple_Pack(3, arg1, arg2, arg3))
|
| +#define __Pyx_PyObject_CallMethod2(obj, name, arg1, arg2) \
|
| + __Pyx_PyObject_CallMethodTuple(obj, name, PyTuple_Pack(2, arg1, arg2))
|
| +#define __Pyx_PyObject_CallMethod1(obj, name, arg1) \
|
| + __Pyx_PyObject_CallMethodTuple(obj, name, PyTuple_Pack(1, arg1))
|
| +#define __Pyx_PyObject_CallMethod0(obj, name) \
|
| + __Pyx_PyObject_CallMethodTuple(obj, name, (Py_INCREF($empty_tuple), $empty_tuple))
|
| +
|
| +
|
| +/////////////// tp_new.proto ///////////////
|
| +
|
| +#define __Pyx_tp_new(type_obj, args) __Pyx_tp_new_kwargs(type_obj, args, NULL)
|
| +static CYTHON_INLINE PyObject* __Pyx_tp_new_kwargs(PyObject* type_obj, PyObject* args, PyObject* kwargs) {
|
| + return (PyObject*) (((PyTypeObject*)type_obj)->tp_new((PyTypeObject*)type_obj, args, kwargs));
|
| +}
|
| +
|
| +
|
| +/////////////// PyObjectCall.proto ///////////////
|
| +
|
| +#if CYTHON_COMPILING_IN_CPYTHON
|
| +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); /*proto*/
|
| +#else
|
| +#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw)
|
| +#endif
|
| +
|
| +/////////////// PyObjectCall ///////////////
|
| +
|
| +#if CYTHON_COMPILING_IN_CPYTHON
|
| +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) {
|
| + PyObject *result;
|
| + ternaryfunc call = func->ob_type->tp_call;
|
| +
|
| + if (unlikely(!call))
|
| + return PyObject_Call(func, arg, kw);
|
| +#if PY_VERSION_HEX >= 0x02060000
|
| + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object")))
|
| + return NULL;
|
| +#endif
|
| + result = (*call)(func, arg, kw);
|
| +#if PY_VERSION_HEX >= 0x02060000
|
| + Py_LeaveRecursiveCall();
|
| +#endif
|
| + if (unlikely(!result) && unlikely(!PyErr_Occurred())) {
|
| + PyErr_SetString(
|
| + PyExc_SystemError,
|
| + "NULL result without error in PyObject_Call");
|
| + }
|
| + return result;
|
| +}
|
| +#endif
|
|
|