OLD | NEW |
(Empty) | |
| 1 /* |
| 2 * General object operations and protocol implementations, |
| 3 * including their specialisations for certain builtins. |
| 4 * |
| 5 * Optional optimisations for builtins are in Optimize.c. |
| 6 * |
| 7 * Required replacements of builtins are in Builtins.c. |
| 8 */ |
| 9 |
| 10 /////////////// RaiseNoneIterError.proto /////////////// |
| 11 |
| 12 static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void); |
| 13 |
| 14 /////////////// RaiseNoneIterError /////////////// |
| 15 |
| 16 static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) { |
| 17 PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); |
| 18 } |
| 19 |
| 20 /////////////// RaiseTooManyValuesToUnpack.proto /////////////// |
| 21 |
| 22 static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); |
| 23 |
| 24 /////////////// RaiseTooManyValuesToUnpack /////////////// |
| 25 |
| 26 static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { |
| 27 PyErr_Format(PyExc_ValueError, |
| 28 "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "
d)", expected); |
| 29 } |
| 30 |
| 31 /////////////// RaiseNeedMoreValuesToUnpack.proto /////////////// |
| 32 |
| 33 static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); |
| 34 |
| 35 /////////////// RaiseNeedMoreValuesToUnpack /////////////// |
| 36 |
| 37 static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { |
| 38 PyErr_Format(PyExc_ValueError, |
| 39 "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack
", |
| 40 index, (index == 1) ? "" : "s"); |
| 41 } |
| 42 |
| 43 /////////////// UnpackTupleError.proto /////////////// |
| 44 |
| 45 static void __Pyx_UnpackTupleError(PyObject *, Py_ssize_t index); /*proto*/ |
| 46 |
| 47 /////////////// UnpackTupleError /////////////// |
| 48 //@requires: RaiseNoneIterError |
| 49 //@requires: RaiseNeedMoreValuesToUnpack |
| 50 //@requires: RaiseTooManyValuesToUnpack |
| 51 |
| 52 static void __Pyx_UnpackTupleError(PyObject *t, Py_ssize_t index) { |
| 53 if (t == Py_None) { |
| 54 __Pyx_RaiseNoneNotIterableError(); |
| 55 } else if (PyTuple_GET_SIZE(t) < index) { |
| 56 __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(t)); |
| 57 } else { |
| 58 __Pyx_RaiseTooManyValuesError(index); |
| 59 } |
| 60 } |
| 61 |
| 62 /////////////// UnpackItemEndCheck.proto /////////////// |
| 63 |
| 64 static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected);
/*proto*/ |
| 65 |
| 66 /////////////// UnpackItemEndCheck /////////////// |
| 67 //@requires: RaiseTooManyValuesToUnpack |
| 68 //@requires: IterFinish |
| 69 |
| 70 static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) { |
| 71 if (unlikely(retval)) { |
| 72 Py_DECREF(retval); |
| 73 __Pyx_RaiseTooManyValuesError(expected); |
| 74 return -1; |
| 75 } else { |
| 76 return __Pyx_IterFinish(); |
| 77 } |
| 78 return 0; |
| 79 } |
| 80 |
| 81 /////////////// UnpackTuple2.proto /////////////// |
| 82 |
| 83 static CYTHON_INLINE int __Pyx_unpack_tuple2(PyObject* tuple, PyObject** value1,
PyObject** value2, |
| 84 int is_tuple, int has_known_size, i
nt decref_tuple); |
| 85 |
| 86 /////////////// UnpackTuple2 /////////////// |
| 87 //@requires: UnpackItemEndCheck |
| 88 //@requires: UnpackTupleError |
| 89 //@requires: RaiseNeedMoreValuesToUnpack |
| 90 |
| 91 static CYTHON_INLINE int __Pyx_unpack_tuple2(PyObject* tuple, PyObject** pvalue1
, PyObject** pvalue2, |
| 92 int is_tuple, int has_known_size, i
nt decref_tuple) { |
| 93 Py_ssize_t index; |
| 94 PyObject *value1 = NULL, *value2 = NULL, *iter = NULL; |
| 95 if (!is_tuple && unlikely(!PyTuple_Check(tuple))) { |
| 96 iternextfunc iternext; |
| 97 iter = PyObject_GetIter(tuple); |
| 98 if (unlikely(!iter)) goto bad; |
| 99 if (decref_tuple) { Py_DECREF(tuple); tuple = NULL; } |
| 100 iternext = Py_TYPE(iter)->tp_iternext; |
| 101 value1 = iternext(iter); if (unlikely(!value1)) { index = 0; goto unpack
ing_failed; } |
| 102 value2 = iternext(iter); if (unlikely(!value2)) { index = 1; goto unpack
ing_failed; } |
| 103 if (!has_known_size && unlikely(__Pyx_IternextUnpackEndCheck(iternext(it
er), 2))) goto bad; |
| 104 Py_DECREF(iter); |
| 105 } else { |
| 106 if (!has_known_size && unlikely(PyTuple_GET_SIZE(tuple) != 2)) { |
| 107 __Pyx_UnpackTupleError(tuple, 2); |
| 108 goto bad; |
| 109 } |
| 110 #if CYTHON_COMPILING_IN_PYPY |
| 111 value1 = PySequence_ITEM(tuple, 0); |
| 112 if (unlikely(!value1)) goto bad; |
| 113 value2 = PySequence_ITEM(tuple, 1); |
| 114 if (unlikely(!value2)) goto bad; |
| 115 #else |
| 116 value1 = PyTuple_GET_ITEM(tuple, 0); |
| 117 value2 = PyTuple_GET_ITEM(tuple, 1); |
| 118 Py_INCREF(value1); |
| 119 Py_INCREF(value2); |
| 120 #endif |
| 121 if (decref_tuple) { Py_DECREF(tuple); } |
| 122 } |
| 123 *pvalue1 = value1; |
| 124 *pvalue2 = value2; |
| 125 return 0; |
| 126 unpacking_failed: |
| 127 if (!has_known_size && __Pyx_IterFinish() == 0) |
| 128 __Pyx_RaiseNeedMoreValuesError(index); |
| 129 bad: |
| 130 Py_XDECREF(iter); |
| 131 Py_XDECREF(value1); |
| 132 Py_XDECREF(value2); |
| 133 if (decref_tuple) { Py_XDECREF(tuple); } |
| 134 return -1; |
| 135 } |
| 136 |
| 137 /////////////// IterNext.proto /////////////// |
| 138 |
| 139 #define __Pyx_PyIter_Next(obj) __Pyx_PyIter_Next2(obj, NULL) |
| 140 static CYTHON_INLINE PyObject *__Pyx_PyIter_Next2(PyObject *, PyObject *); /*pro
to*/ |
| 141 |
| 142 /////////////// IterNext /////////////// |
| 143 |
| 144 // originally copied from Py3's builtin_next() |
| 145 static CYTHON_INLINE PyObject *__Pyx_PyIter_Next2(PyObject* iterator, PyObject*
defval) { |
| 146 PyObject* next; |
| 147 iternextfunc iternext = Py_TYPE(iterator)->tp_iternext; |
| 148 #if CYTHON_COMPILING_IN_CPYTHON |
| 149 if (unlikely(!iternext)) { |
| 150 #else |
| 151 if (unlikely(!iternext) || unlikely(!PyIter_Check(iterator))) { |
| 152 #endif |
| 153 PyErr_Format(PyExc_TypeError, |
| 154 "%.200s object is not an iterator", Py_TYPE(iterator)->tp_name); |
| 155 return NULL; |
| 156 } |
| 157 next = iternext(iterator); |
| 158 if (likely(next)) |
| 159 return next; |
| 160 #if CYTHON_COMPILING_IN_CPYTHON |
| 161 #if PY_VERSION_HEX >= 0x03010000 || (PY_MAJOR_VERSION < 3 && PY_VERSION_HEX >= 0
x02070000) |
| 162 if (unlikely(iternext == &_PyObject_NextNotImplemented)) |
| 163 return NULL; |
| 164 #endif |
| 165 #endif |
| 166 if (defval) { |
| 167 PyObject* exc_type = PyErr_Occurred(); |
| 168 if (exc_type) { |
| 169 if (unlikely(exc_type != PyExc_StopIteration) && |
| 170 !PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)) |
| 171 return NULL; |
| 172 PyErr_Clear(); |
| 173 } |
| 174 Py_INCREF(defval); |
| 175 return defval; |
| 176 } |
| 177 if (!PyErr_Occurred()) |
| 178 PyErr_SetNone(PyExc_StopIteration); |
| 179 return NULL; |
| 180 } |
| 181 |
| 182 /////////////// IterFinish.proto /////////////// |
| 183 |
| 184 static CYTHON_INLINE int __Pyx_IterFinish(void); /*proto*/ |
| 185 |
| 186 /////////////// IterFinish /////////////// |
| 187 |
| 188 // When PyIter_Next(iter) has returned NULL in order to signal termination, |
| 189 // this function does the right cleanup and returns 0 on success. If it |
| 190 // detects an error that occurred in the iterator, it returns -1. |
| 191 |
| 192 static CYTHON_INLINE int __Pyx_IterFinish(void) { |
| 193 #if CYTHON_COMPILING_IN_CPYTHON |
| 194 PyThreadState *tstate = PyThreadState_GET(); |
| 195 PyObject* exc_type = tstate->curexc_type; |
| 196 if (unlikely(exc_type)) { |
| 197 if (likely(exc_type == PyExc_StopIteration) || PyErr_GivenExceptionMatch
es(exc_type, PyExc_StopIteration)) { |
| 198 PyObject *exc_value, *exc_tb; |
| 199 exc_value = tstate->curexc_value; |
| 200 exc_tb = tstate->curexc_traceback; |
| 201 tstate->curexc_type = 0; |
| 202 tstate->curexc_value = 0; |
| 203 tstate->curexc_traceback = 0; |
| 204 Py_DECREF(exc_type); |
| 205 Py_XDECREF(exc_value); |
| 206 Py_XDECREF(exc_tb); |
| 207 return 0; |
| 208 } else { |
| 209 return -1; |
| 210 } |
| 211 } |
| 212 return 0; |
| 213 #else |
| 214 if (unlikely(PyErr_Occurred())) { |
| 215 if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) { |
| 216 PyErr_Clear(); |
| 217 return 0; |
| 218 } else { |
| 219 return -1; |
| 220 } |
| 221 } |
| 222 return 0; |
| 223 #endif |
| 224 } |
| 225 |
| 226 /////////////// DictGetItem.proto /////////////// |
| 227 |
| 228 #if PY_MAJOR_VERSION >= 3 |
| 229 static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) { |
| 230 PyObject *value; |
| 231 value = PyDict_GetItemWithError(d, key); |
| 232 if (unlikely(!value)) { |
| 233 if (!PyErr_Occurred()) { |
| 234 PyObject* args = PyTuple_Pack(1, key); |
| 235 if (likely(args)) |
| 236 PyErr_SetObject(PyExc_KeyError, args); |
| 237 Py_XDECREF(args); |
| 238 } |
| 239 return NULL; |
| 240 } |
| 241 Py_INCREF(value); |
| 242 return value; |
| 243 } |
| 244 #else |
| 245 #define __Pyx_PyDict_GetItem(d, key) PyObject_GetItem(d, key) |
| 246 #endif |
| 247 |
| 248 /////////////// GetItemInt.proto /////////////// |
| 249 |
| 250 #define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound,
boundscheck) \ |
| 251 (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \ |
| 252 __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :
\ |
| 253 (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (P
yObject*)NULL) : \ |
| 254 __Pyx_GetItemInt_Generic(o, to_py_func(i)))) |
| 255 |
| 256 {{for type in ['List', 'Tuple']}} |
| 257 #define __Pyx_GetItemInt_{{type}}(o, i, type, is_signed, to_py_func, is_list, wr
aparound, boundscheck) \ |
| 258 (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \ |
| 259 __Pyx_GetItemInt_{{type}}_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :
\ |
| 260 (PyErr_SetString(PyExc_IndexError, "{{ type.lower() }} index out of range"),
(PyObject*)NULL)) |
| 261 |
| 262 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_{{type}}_Fast(PyObject *o, Py_ss
ize_t i, |
| 263 int wraparound, in
t boundscheck); |
| 264 {{endfor}} |
| 265 |
| 266 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j
); |
| 267 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, |
| 268 int is_list, int wraparound
, int boundscheck); |
| 269 |
| 270 /////////////// GetItemInt /////////////// |
| 271 |
| 272 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j
) { |
| 273 PyObject *r; |
| 274 if (!j) return NULL; |
| 275 r = PyObject_GetItem(o, j); |
| 276 Py_DECREF(j); |
| 277 return r; |
| 278 } |
| 279 |
| 280 {{for type in ['List', 'Tuple']}} |
| 281 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_{{type}}_Fast(PyObject *o, Py_ss
ize_t i, |
| 282 int wraparound, in
t boundscheck) { |
| 283 #if CYTHON_COMPILING_IN_CPYTHON |
| 284 if (wraparound & unlikely(i < 0)) i += Py{{type}}_GET_SIZE(o); |
| 285 if ((!boundscheck) || likely((0 <= i) & (i < Py{{type}}_GET_SIZE(o)))) { |
| 286 PyObject *r = Py{{type}}_GET_ITEM(o, i); |
| 287 Py_INCREF(r); |
| 288 return r; |
| 289 } |
| 290 return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); |
| 291 #else |
| 292 return PySequence_GetItem(o, i); |
| 293 #endif |
| 294 } |
| 295 {{endfor}} |
| 296 |
| 297 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, |
| 298 int is_list, int wraparound
, int boundscheck) { |
| 299 #if CYTHON_COMPILING_IN_CPYTHON |
| 300 if (is_list || PyList_CheckExact(o)) { |
| 301 Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZ
E(o); |
| 302 if ((!boundscheck) || (likely((n >= 0) & (n < PyList_GET_SIZE(o))))) { |
| 303 PyObject *r = PyList_GET_ITEM(o, n); |
| 304 Py_INCREF(r); |
| 305 return r; |
| 306 } |
| 307 } |
| 308 else if (PyTuple_CheckExact(o)) { |
| 309 Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SI
ZE(o); |
| 310 if ((!boundscheck) || likely((n >= 0) & (n < PyTuple_GET_SIZE(o)))) { |
| 311 PyObject *r = PyTuple_GET_ITEM(o, n); |
| 312 Py_INCREF(r); |
| 313 return r; |
| 314 } |
| 315 } else { |
| 316 // inlined PySequence_GetItem() + special cased length overflow |
| 317 PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; |
| 318 if (likely(m && m->sq_item)) { |
| 319 if (wraparound && unlikely(i < 0) && likely(m->sq_length)) { |
| 320 Py_ssize_t l = m->sq_length(o); |
| 321 if (likely(l >= 0)) { |
| 322 i += l; |
| 323 } else { |
| 324 // if length > max(Py_ssize_t), maybe the object can wrap ar
ound itself? |
| 325 if (PyErr_ExceptionMatches(PyExc_OverflowError)) |
| 326 PyErr_Clear(); |
| 327 else |
| 328 return NULL; |
| 329 } |
| 330 } |
| 331 return m->sq_item(o, i); |
| 332 } |
| 333 } |
| 334 #else |
| 335 if (is_list || PySequence_Check(o)) { |
| 336 return PySequence_GetItem(o, i); |
| 337 } |
| 338 #endif |
| 339 return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); |
| 340 } |
| 341 |
| 342 /////////////// SetItemInt.proto /////////////// |
| 343 |
| 344 #define __Pyx_SetItemInt(o, i, v, type, is_signed, to_py_func, is_list, wraparou
nd, boundscheck) \ |
| 345 (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \ |
| 346 __Pyx_SetItemInt_Fast(o, (Py_ssize_t)i, v, is_list, wraparound, boundscheck)
: \ |
| 347 (is_list ? (PyErr_SetString(PyExc_IndexError, "list assignment index out of
range"), -1) : \ |
| 348 __Pyx_SetItemInt_Generic(o, to_py_func(i), v))) |
| 349 |
| 350 static CYTHON_INLINE int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyOb
ject *v); |
| 351 static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObje
ct *v, |
| 352 int is_list, int wraparound, int
boundscheck); |
| 353 |
| 354 /////////////// SetItemInt /////////////// |
| 355 |
| 356 static CYTHON_INLINE int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyOb
ject *v) { |
| 357 int r; |
| 358 if (!j) return -1; |
| 359 r = PyObject_SetItem(o, j, v); |
| 360 Py_DECREF(j); |
| 361 return r; |
| 362 } |
| 363 |
| 364 static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObje
ct *v, |
| 365 int is_list, int wraparound, int
boundscheck) { |
| 366 #if CYTHON_COMPILING_IN_CPYTHON |
| 367 if (is_list || PyList_CheckExact(o)) { |
| 368 Py_ssize_t n = (!wraparound) ? i : ((likely(i >= 0)) ? i : i + PyList_GE
T_SIZE(o)); |
| 369 if ((!boundscheck) || likely((n >= 0) & (n < PyList_GET_SIZE(o)))) { |
| 370 PyObject* old = PyList_GET_ITEM(o, n); |
| 371 Py_INCREF(v); |
| 372 PyList_SET_ITEM(o, n, v); |
| 373 Py_DECREF(old); |
| 374 return 1; |
| 375 } |
| 376 } else { |
| 377 // inlined PySequence_SetItem() + special cased length overflow |
| 378 PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; |
| 379 if (likely(m && m->sq_ass_item)) { |
| 380 if (wraparound && unlikely(i < 0) && likely(m->sq_length)) { |
| 381 Py_ssize_t l = m->sq_length(o); |
| 382 if (likely(l >= 0)) { |
| 383 i += l; |
| 384 } else { |
| 385 // if length > max(Py_ssize_t), maybe the object can wrap ar
ound itself? |
| 386 if (PyErr_ExceptionMatches(PyExc_OverflowError)) |
| 387 PyErr_Clear(); |
| 388 else |
| 389 return -1; |
| 390 } |
| 391 } |
| 392 return m->sq_ass_item(o, i, v); |
| 393 } |
| 394 } |
| 395 #else |
| 396 #if CYTHON_COMPILING_IN_PYPY |
| 397 if (is_list || (PySequence_Check(o) && !PyDict_Check(o))) { |
| 398 #else |
| 399 if (is_list || PySequence_Check(o)) { |
| 400 #endif |
| 401 return PySequence_SetItem(o, i, v); |
| 402 } |
| 403 #endif |
| 404 return __Pyx_SetItemInt_Generic(o, PyInt_FromSsize_t(i), v); |
| 405 } |
| 406 |
| 407 |
| 408 /////////////// DelItemInt.proto /////////////// |
| 409 |
| 410 #define __Pyx_DelItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound,
boundscheck) \ |
| 411 (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \ |
| 412 __Pyx_DelItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound) : \ |
| 413 (is_list ? (PyErr_SetString(PyExc_IndexError, "list assignment index out of
range"), -1) : \ |
| 414 __Pyx_DelItem_Generic(o, to_py_func(i)))) |
| 415 |
| 416 static CYTHON_INLINE int __Pyx_DelItem_Generic(PyObject *o, PyObject *j); |
| 417 static CYTHON_INLINE int __Pyx_DelItemInt_Fast(PyObject *o, Py_ssize_t i, |
| 418 CYTHON_UNUSED int is_list, int wr
aparound); |
| 419 |
| 420 /////////////// DelItemInt /////////////// |
| 421 |
| 422 static CYTHON_INLINE int __Pyx_DelItem_Generic(PyObject *o, PyObject *j) { |
| 423 int r; |
| 424 if (!j) return -1; |
| 425 r = PyObject_DelItem(o, j); |
| 426 Py_DECREF(j); |
| 427 return r; |
| 428 } |
| 429 |
| 430 static CYTHON_INLINE int __Pyx_DelItemInt_Fast(PyObject *o, Py_ssize_t i, |
| 431 CYTHON_UNUSED int is_list, int wr
aparound) { |
| 432 #if CYTHON_COMPILING_IN_PYPY |
| 433 if (is_list || PySequence_Check(o)) { |
| 434 return PySequence_DelItem(o, i); |
| 435 } |
| 436 #else |
| 437 // inlined PySequence_DelItem() + special cased length overflow |
| 438 PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; |
| 439 if (likely(m && m->sq_ass_item)) { |
| 440 if (wraparound && unlikely(i < 0) && likely(m->sq_length)) { |
| 441 Py_ssize_t l = m->sq_length(o); |
| 442 if (likely(l >= 0)) { |
| 443 i += l; |
| 444 } else { |
| 445 // if length > max(Py_ssize_t), maybe the object can wrap around
itself? |
| 446 if (PyErr_ExceptionMatches(PyExc_OverflowError)) |
| 447 PyErr_Clear(); |
| 448 else |
| 449 return -1; |
| 450 } |
| 451 } |
| 452 return m->sq_ass_item(o, i, (PyObject *)NULL); |
| 453 } |
| 454 #endif |
| 455 return __Pyx_DelItem_Generic(o, PyInt_FromSsize_t(i)); |
| 456 } |
| 457 |
| 458 |
| 459 /////////////// SliceObject.proto /////////////// |
| 460 |
| 461 // we pass pointer addresses to show the C compiler what is NULL and what isn't |
| 462 {{if access == 'Get'}} |
| 463 static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice( |
| 464 PyObject* obj, Py_ssize_t cstart, Py_ssize_t cstop, |
| 465 PyObject** py_start, PyObject** py_stop, PyObject** py_slice, |
| 466 int has_cstart, int has_cstop, int wraparound); |
| 467 {{else}} |
| 468 #define __Pyx_PyObject_DelSlice(obj, cstart, cstop, py_start, py_stop, py_slice,
has_cstart, has_cstop, wraparound) \ |
| 469 __Pyx_PyObject_SetSlice(obj, (PyObject*)NULL, cstart, cstop, py_start, py_st
op, py_slice, has_cstart, has_cstop, wraparound) |
| 470 |
| 471 // we pass pointer addresses to show the C compiler what is NULL and what isn't |
| 472 static CYTHON_INLINE int __Pyx_PyObject_SetSlice( |
| 473 PyObject* obj, PyObject* value, Py_ssize_t cstart, Py_ssize_t cstop, |
| 474 PyObject** py_start, PyObject** py_stop, PyObject** py_slice, |
| 475 int has_cstart, int has_cstop, int wraparound); |
| 476 {{endif}} |
| 477 |
| 478 /////////////// SliceObject /////////////// |
| 479 |
| 480 {{if access == 'Get'}} |
| 481 static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice( |
| 482 PyObject* obj, Py_ssize_t cstart, Py_ssize_t cstop, |
| 483 {{else}} |
| 484 static CYTHON_INLINE int __Pyx_PyObject_SetSlice( |
| 485 PyObject* obj, PyObject* value, Py_ssize_t cstart, Py_ssize_t cstop, |
| 486 {{endif}} |
| 487 PyObject** _py_start, PyObject** _py_stop, PyObject** _py_slice, |
| 488 int has_cstart, int has_cstop, CYTHON_UNUSED int wraparound) { |
| 489 #if CYTHON_COMPILING_IN_CPYTHON |
| 490 PyMappingMethods* mp; |
| 491 #if PY_MAJOR_VERSION < 3 |
| 492 PySequenceMethods* ms = Py_TYPE(obj)->tp_as_sequence; |
| 493 if (likely(ms && ms->sq_{{if access == 'Set'}}ass_{{endif}}slice)) { |
| 494 if (!has_cstart) { |
| 495 if (_py_start && (*_py_start != Py_None)) { |
| 496 cstart = __Pyx_PyIndex_AsSsize_t(*_py_start); |
| 497 if ((cstart == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; |
| 498 } else |
| 499 cstart = 0; |
| 500 } |
| 501 if (!has_cstop) { |
| 502 if (_py_stop && (*_py_stop != Py_None)) { |
| 503 cstop = __Pyx_PyIndex_AsSsize_t(*_py_stop); |
| 504 if ((cstop == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; |
| 505 } else |
| 506 cstop = PY_SSIZE_T_MAX; |
| 507 } |
| 508 if (wraparound && unlikely((cstart < 0) | (cstop < 0)) && likely(ms->sq_
length)) { |
| 509 Py_ssize_t l = ms->sq_length(obj); |
| 510 if (likely(l >= 0)) { |
| 511 if (cstop < 0) { |
| 512 cstop += l; |
| 513 if (cstop < 0) cstop = 0; |
| 514 } |
| 515 if (cstart < 0) { |
| 516 cstart += l; |
| 517 if (cstart < 0) cstart = 0; |
| 518 } |
| 519 } else { |
| 520 // if length > max(Py_ssize_t), maybe the object can wrap around
itself? |
| 521 if (PyErr_ExceptionMatches(PyExc_OverflowError)) |
| 522 PyErr_Clear(); |
| 523 else |
| 524 goto bad; |
| 525 } |
| 526 } |
| 527 {{if access == 'Get'}} |
| 528 return ms->sq_slice(obj, cstart, cstop); |
| 529 {{else}} |
| 530 return ms->sq_ass_slice(obj, cstart, cstop, value); |
| 531 {{endif}} |
| 532 } |
| 533 #endif |
| 534 |
| 535 mp = Py_TYPE(obj)->tp_as_mapping; |
| 536 {{if access == 'Get'}} |
| 537 if (likely(mp && mp->mp_subscript)) |
| 538 {{else}} |
| 539 if (likely(mp && mp->mp_ass_subscript)) |
| 540 {{endif}} |
| 541 #endif |
| 542 { |
| 543 {{if access == 'Get'}}PyObject*{{else}}int{{endif}} result; |
| 544 PyObject *py_slice, *py_start, *py_stop; |
| 545 if (_py_slice) { |
| 546 py_slice = *_py_slice; |
| 547 } else { |
| 548 PyObject* owned_start = NULL; |
| 549 PyObject* owned_stop = NULL; |
| 550 if (_py_start) { |
| 551 py_start = *_py_start; |
| 552 } else { |
| 553 if (has_cstart) { |
| 554 owned_start = py_start = PyInt_FromSsize_t(cstart); |
| 555 if (unlikely(!py_start)) goto bad; |
| 556 } else |
| 557 py_start = Py_None; |
| 558 } |
| 559 if (_py_stop) { |
| 560 py_stop = *_py_stop; |
| 561 } else { |
| 562 if (has_cstop) { |
| 563 owned_stop = py_stop = PyInt_FromSsize_t(cstop); |
| 564 if (unlikely(!py_stop)) { |
| 565 Py_XDECREF(owned_start); |
| 566 goto bad; |
| 567 } |
| 568 } else |
| 569 py_stop = Py_None; |
| 570 } |
| 571 py_slice = PySlice_New(py_start, py_stop, Py_None); |
| 572 Py_XDECREF(owned_start); |
| 573 Py_XDECREF(owned_stop); |
| 574 if (unlikely(!py_slice)) goto bad; |
| 575 } |
| 576 #if CYTHON_COMPILING_IN_CPYTHON |
| 577 {{if access == 'Get'}} |
| 578 result = mp->mp_subscript(obj, py_slice); |
| 579 #else |
| 580 result = PyObject_GetItem(obj, py_slice); |
| 581 {{else}} |
| 582 result = mp->mp_ass_subscript(obj, py_slice, value); |
| 583 #else |
| 584 result = value ? PyObject_SetItem(obj, py_slice, value) : PyObject_DelIt
em(obj, py_slice); |
| 585 {{endif}} |
| 586 #endif |
| 587 if (!_py_slice) { |
| 588 Py_DECREF(py_slice); |
| 589 } |
| 590 return result; |
| 591 } |
| 592 PyErr_Format(PyExc_TypeError, |
| 593 {{if access == 'Get'}} |
| 594 "'%.200s' object is unsliceable", Py_TYPE(obj)->tp_name); |
| 595 {{else}} |
| 596 "'%.200s' object does not support slice %.10s", |
| 597 Py_TYPE(obj)->tp_name, value ? "assignment" : "deletion"); |
| 598 {{endif}} |
| 599 |
| 600 bad: |
| 601 return {{if access == 'Get'}}NULL{{else}}-1{{endif}}; |
| 602 } |
| 603 |
| 604 |
| 605 /////////////// SliceTupleAndList.proto /////////////// |
| 606 |
| 607 #if CYTHON_COMPILING_IN_CPYTHON |
| 608 static CYTHON_INLINE PyObject* __Pyx_PyList_GetSlice(PyObject* src, Py_ssize_t s
tart, Py_ssize_t stop); |
| 609 static CYTHON_INLINE PyObject* __Pyx_PyTuple_GetSlice(PyObject* src, Py_ssize_t
start, Py_ssize_t stop); |
| 610 #else |
| 611 #define __Pyx_PyList_GetSlice(seq, start, stop) PySequence_GetSlice(seq, start
, stop) |
| 612 #define __Pyx_PyTuple_GetSlice(seq, start, stop) PySequence_GetSlice(seq, start
, stop) |
| 613 #endif |
| 614 |
| 615 /////////////// SliceTupleAndList /////////////// |
| 616 |
| 617 #if CYTHON_COMPILING_IN_CPYTHON |
| 618 static CYTHON_INLINE void __Pyx_crop_slice(Py_ssize_t* _start, Py_ssize_t* _stop
, Py_ssize_t* _length) { |
| 619 Py_ssize_t start = *_start, stop = *_stop, length = *_length; |
| 620 if (start < 0) { |
| 621 start += length; |
| 622 if (start < 0) |
| 623 start = 0; |
| 624 } |
| 625 |
| 626 if (stop < 0) |
| 627 stop += length; |
| 628 else if (stop > length) |
| 629 stop = length; |
| 630 |
| 631 *_length = stop - start; |
| 632 *_start = start; |
| 633 *_stop = stop; |
| 634 } |
| 635 |
| 636 static CYTHON_INLINE void __Pyx_copy_object_array(PyObject** CYTHON_RESTRICT src
, PyObject** CYTHON_RESTRICT dest, Py_ssize_t length) { |
| 637 PyObject *v; |
| 638 Py_ssize_t i; |
| 639 for (i = 0; i < length; i++) { |
| 640 v = dest[i] = src[i]; |
| 641 Py_INCREF(v); |
| 642 } |
| 643 } |
| 644 |
| 645 {{for type in ['List', 'Tuple']}} |
| 646 static CYTHON_INLINE PyObject* __Pyx_Py{{type}}_GetSlice( |
| 647 PyObject* src, Py_ssize_t start, Py_ssize_t stop) { |
| 648 PyObject* dest; |
| 649 Py_ssize_t length = Py{{type}}_GET_SIZE(src); |
| 650 __Pyx_crop_slice(&start, &stop, &length); |
| 651 if (unlikely(length <= 0)) |
| 652 return Py{{type}}_New(0); |
| 653 |
| 654 dest = Py{{type}}_New(length); |
| 655 if (unlikely(!dest)) |
| 656 return NULL; |
| 657 __Pyx_copy_object_array( |
| 658 ((Py{{type}}Object*)src)->ob_item + start, |
| 659 ((Py{{type}}Object*)dest)->ob_item, |
| 660 length); |
| 661 return dest; |
| 662 } |
| 663 {{endfor}} |
| 664 #endif |
| 665 |
| 666 |
| 667 /////////////// CalculateMetaclass.proto /////////////// |
| 668 |
| 669 static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bas
es); |
| 670 |
| 671 /////////////// CalculateMetaclass /////////////// |
| 672 |
| 673 static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bas
es) { |
| 674 Py_ssize_t i, nbases = PyTuple_GET_SIZE(bases); |
| 675 for (i=0; i < nbases; i++) { |
| 676 PyTypeObject *tmptype; |
| 677 PyObject *tmp = PyTuple_GET_ITEM(bases, i); |
| 678 tmptype = Py_TYPE(tmp); |
| 679 #if PY_MAJOR_VERSION < 3 |
| 680 if (tmptype == &PyClass_Type) |
| 681 continue; |
| 682 #endif |
| 683 if (!metaclass) { |
| 684 metaclass = tmptype; |
| 685 continue; |
| 686 } |
| 687 if (PyType_IsSubtype(metaclass, tmptype)) |
| 688 continue; |
| 689 if (PyType_IsSubtype(tmptype, metaclass)) { |
| 690 metaclass = tmptype; |
| 691 continue; |
| 692 } |
| 693 // else: |
| 694 PyErr_SetString(PyExc_TypeError, |
| 695 "metaclass conflict: " |
| 696 "the metaclass of a derived class " |
| 697 "must be a (non-strict) subclass " |
| 698 "of the metaclasses of all its bases"); |
| 699 return NULL; |
| 700 } |
| 701 if (!metaclass) { |
| 702 #if PY_MAJOR_VERSION < 3 |
| 703 metaclass = &PyClass_Type; |
| 704 #else |
| 705 metaclass = &PyType_Type; |
| 706 #endif |
| 707 } |
| 708 // make owned reference |
| 709 Py_INCREF((PyObject*) metaclass); |
| 710 return (PyObject*) metaclass; |
| 711 } |
| 712 |
| 713 |
| 714 /////////////// FindInheritedMetaclass.proto /////////////// |
| 715 |
| 716 static PyObject *__Pyx_FindInheritedMetaclass(PyObject *bases); /*proto*/ |
| 717 |
| 718 /////////////// FindInheritedMetaclass /////////////// |
| 719 //@requires: PyObjectGetAttrStr |
| 720 //@requires: CalculateMetaclass |
| 721 |
| 722 static PyObject *__Pyx_FindInheritedMetaclass(PyObject *bases) { |
| 723 PyObject *metaclass; |
| 724 if (PyTuple_Check(bases) && PyTuple_GET_SIZE(bases) > 0) { |
| 725 PyTypeObject *metatype; |
| 726 PyObject *base = PyTuple_GET_ITEM(bases, 0); |
| 727 #if PY_MAJOR_VERSION < 3 |
| 728 PyObject* basetype = __Pyx_PyObject_GetAttrStr(base, PYIDENT("__class__"
)); |
| 729 if (basetype) { |
| 730 metatype = (PyType_Check(basetype)) ? ((PyTypeObject*) basetype) : N
ULL; |
| 731 } else { |
| 732 PyErr_Clear(); |
| 733 metatype = Py_TYPE(base); |
| 734 basetype = (PyObject*) metatype; |
| 735 Py_INCREF(basetype); |
| 736 } |
| 737 #else |
| 738 metatype = Py_TYPE(base); |
| 739 #endif |
| 740 metaclass = __Pyx_CalculateMetaclass(metatype, bases); |
| 741 #if PY_MAJOR_VERSION < 3 |
| 742 Py_DECREF(basetype); |
| 743 #endif |
| 744 } else { |
| 745 // no bases => use default metaclass |
| 746 #if PY_MAJOR_VERSION < 3 |
| 747 metaclass = (PyObject *) &PyClass_Type; |
| 748 #else |
| 749 metaclass = (PyObject *) &PyType_Type; |
| 750 #endif |
| 751 Py_INCREF(metaclass); |
| 752 } |
| 753 return metaclass; |
| 754 } |
| 755 |
| 756 /////////////// Py3MetaclassGet.proto /////////////// |
| 757 |
| 758 static PyObject *__Pyx_Py3MetaclassGet(PyObject *bases, PyObject *mkw); /*proto*
/ |
| 759 |
| 760 /////////////// Py3MetaclassGet /////////////// |
| 761 //@requires: FindInheritedMetaclass |
| 762 //@requires: CalculateMetaclass |
| 763 |
| 764 static PyObject *__Pyx_Py3MetaclassGet(PyObject *bases, PyObject *mkw) { |
| 765 PyObject *metaclass = PyDict_GetItem(mkw, PYIDENT("metaclass")); |
| 766 if (metaclass) { |
| 767 Py_INCREF(metaclass); |
| 768 if (PyDict_DelItem(mkw, PYIDENT("metaclass")) < 0) { |
| 769 Py_DECREF(metaclass); |
| 770 return NULL; |
| 771 } |
| 772 if (PyType_Check(metaclass)) { |
| 773 PyObject* orig = metaclass; |
| 774 metaclass = __Pyx_CalculateMetaclass((PyTypeObject*) metaclass, base
s); |
| 775 Py_DECREF(orig); |
| 776 } |
| 777 return metaclass; |
| 778 } |
| 779 return __Pyx_FindInheritedMetaclass(bases); |
| 780 } |
| 781 |
| 782 /////////////// CreateClass.proto /////////////// |
| 783 |
| 784 static PyObject *__Pyx_CreateClass(PyObject *bases, PyObject *dict, PyObject *na
me, |
| 785 PyObject *qualname, PyObject *modname); /*pro
to*/ |
| 786 |
| 787 /////////////// CreateClass /////////////// |
| 788 //@requires: FindInheritedMetaclass |
| 789 //@requires: CalculateMetaclass |
| 790 |
| 791 static PyObject *__Pyx_CreateClass(PyObject *bases, PyObject *dict, PyObject *na
me, |
| 792 PyObject *qualname, PyObject *modname) { |
| 793 PyObject *result; |
| 794 PyObject *metaclass; |
| 795 |
| 796 if (PyDict_SetItem(dict, PYIDENT("__module__"), modname) < 0) |
| 797 return NULL; |
| 798 if (PyDict_SetItem(dict, PYIDENT("__qualname__"), qualname) < 0) |
| 799 return NULL; |
| 800 |
| 801 /* Python2 __metaclass__ */ |
| 802 metaclass = PyDict_GetItem(dict, PYIDENT("__metaclass__")); |
| 803 if (metaclass) { |
| 804 Py_INCREF(metaclass); |
| 805 if (PyType_Check(metaclass)) { |
| 806 PyObject* orig = metaclass; |
| 807 metaclass = __Pyx_CalculateMetaclass((PyTypeObject*) metaclass, base
s); |
| 808 Py_DECREF(orig); |
| 809 } |
| 810 } else { |
| 811 metaclass = __Pyx_FindInheritedMetaclass(bases); |
| 812 } |
| 813 if (unlikely(!metaclass)) |
| 814 return NULL; |
| 815 result = PyObject_CallFunctionObjArgs(metaclass, name, bases, dict, NULL); |
| 816 Py_DECREF(metaclass); |
| 817 return result; |
| 818 } |
| 819 |
| 820 /////////////// Py3ClassCreate.proto /////////////// |
| 821 |
| 822 static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases,
PyObject *name, PyObject *qualname, |
| 823 PyObject *mkw, PyObject *modname, PyO
bject *doc); /*proto*/ |
| 824 static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObj
ect *bases, PyObject *dict, |
| 825 PyObject *mkw, int calculate_metaclass, in
t allow_py2_metaclass); /*proto*/ |
| 826 |
| 827 /////////////// Py3ClassCreate /////////////// |
| 828 //@requires: PyObjectGetAttrStr |
| 829 //@requires: CalculateMetaclass |
| 830 |
| 831 static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases,
PyObject *name, |
| 832 PyObject *qualname, PyObject *mkw, Py
Object *modname, PyObject *doc) { |
| 833 PyObject *ns; |
| 834 if (metaclass) { |
| 835 PyObject *prep = __Pyx_PyObject_GetAttrStr(metaclass, PYIDENT("__prepare
__")); |
| 836 if (prep) { |
| 837 PyObject *pargs = PyTuple_Pack(2, name, bases); |
| 838 if (unlikely(!pargs)) { |
| 839 Py_DECREF(prep); |
| 840 return NULL; |
| 841 } |
| 842 ns = PyObject_Call(prep, pargs, mkw); |
| 843 Py_DECREF(prep); |
| 844 Py_DECREF(pargs); |
| 845 } else { |
| 846 if (unlikely(!PyErr_ExceptionMatches(PyExc_AttributeError))) |
| 847 return NULL; |
| 848 PyErr_Clear(); |
| 849 ns = PyDict_New(); |
| 850 } |
| 851 } else { |
| 852 ns = PyDict_New(); |
| 853 } |
| 854 |
| 855 if (unlikely(!ns)) |
| 856 return NULL; |
| 857 |
| 858 /* Required here to emulate assignment order */ |
| 859 if (unlikely(PyObject_SetItem(ns, PYIDENT("__module__"), modname) < 0)) goto
bad; |
| 860 if (unlikely(PyObject_SetItem(ns, PYIDENT("__qualname__"), qualname) < 0)) g
oto bad; |
| 861 if (unlikely(doc && PyObject_SetItem(ns, PYIDENT("__doc__"), doc) < 0)) goto
bad; |
| 862 return ns; |
| 863 bad: |
| 864 Py_DECREF(ns); |
| 865 return NULL; |
| 866 } |
| 867 |
| 868 static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObj
ect *bases, |
| 869 PyObject *dict, PyObject *mkw, |
| 870 int calculate_metaclass, int allow_py2_met
aclass) { |
| 871 PyObject *result, *margs; |
| 872 PyObject *owned_metaclass = NULL; |
| 873 if (allow_py2_metaclass) { |
| 874 /* honour Python2 __metaclass__ for backward compatibility */ |
| 875 owned_metaclass = PyObject_GetItem(dict, PYIDENT("__metaclass__")); |
| 876 if (owned_metaclass) { |
| 877 metaclass = owned_metaclass; |
| 878 } else if (likely(PyErr_ExceptionMatches(PyExc_KeyError))) { |
| 879 PyErr_Clear(); |
| 880 } else { |
| 881 return NULL; |
| 882 } |
| 883 } |
| 884 if (calculate_metaclass && (!metaclass || PyType_Check(metaclass))) { |
| 885 metaclass = __Pyx_CalculateMetaclass((PyTypeObject*) metaclass, bases); |
| 886 Py_XDECREF(owned_metaclass); |
| 887 if (unlikely(!metaclass)) |
| 888 return NULL; |
| 889 owned_metaclass = metaclass; |
| 890 } |
| 891 margs = PyTuple_Pack(3, name, bases, dict); |
| 892 if (unlikely(!margs)) { |
| 893 result = NULL; |
| 894 } else { |
| 895 result = PyObject_Call(metaclass, margs, mkw); |
| 896 Py_DECREF(margs); |
| 897 } |
| 898 Py_XDECREF(owned_metaclass); |
| 899 return result; |
| 900 } |
| 901 |
| 902 /////////////// ExtTypeTest.proto /////////////// |
| 903 |
| 904 static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*pr
oto*/ |
| 905 |
| 906 /////////////// ExtTypeTest /////////////// |
| 907 |
| 908 static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { |
| 909 if (unlikely(!type)) { |
| 910 PyErr_SetString(PyExc_SystemError, "Missing type object"); |
| 911 return 0; |
| 912 } |
| 913 if (likely(PyObject_TypeCheck(obj, type))) |
| 914 return 1; |
| 915 PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s", |
| 916 Py_TYPE(obj)->tp_name, type->tp_name); |
| 917 return 0; |
| 918 } |
| 919 |
| 920 /////////////// CallableCheck.proto /////////////// |
| 921 |
| 922 #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 |
| 923 #define __Pyx_PyCallable_Check(obj) ((obj)->ob_type->tp_call != NULL) |
| 924 #else |
| 925 #define __Pyx_PyCallable_Check(obj) PyCallable_Check(obj) |
| 926 #endif |
| 927 |
| 928 /////////////// PyDictContains.proto /////////////// |
| 929 |
| 930 static CYTHON_INLINE int __Pyx_PyDict_Contains(PyObject* item, PyObject* dict, i
nt eq) { |
| 931 int result = PyDict_Contains(dict, item); |
| 932 return unlikely(result < 0) ? result : (result == (eq == Py_EQ)); |
| 933 } |
| 934 |
| 935 /////////////// PySequenceContains.proto /////////////// |
| 936 |
| 937 static CYTHON_INLINE int __Pyx_PySequence_Contains(PyObject* item, PyObject* seq
, int eq) { |
| 938 int result = PySequence_Contains(seq, item); |
| 939 return unlikely(result < 0) ? result : (result == (eq == Py_EQ)); |
| 940 } |
| 941 |
| 942 /////////////// PyBoolOrNullFromLong.proto /////////////// |
| 943 |
| 944 static CYTHON_INLINE PyObject* __Pyx_PyBoolOrNull_FromLong(long b) { |
| 945 return unlikely(b < 0) ? NULL : __Pyx_PyBool_FromLong(b); |
| 946 } |
| 947 |
| 948 /////////////// GetBuiltinName.proto /////////////// |
| 949 |
| 950 static PyObject *__Pyx_GetBuiltinName(PyObject *name); /*proto*/ |
| 951 |
| 952 /////////////// GetBuiltinName /////////////// |
| 953 //@requires: PyObjectGetAttrStr |
| 954 //@substitute: naming |
| 955 |
| 956 static PyObject *__Pyx_GetBuiltinName(PyObject *name) { |
| 957 PyObject* result = __Pyx_PyObject_GetAttrStr($builtins_cname, name); |
| 958 if (unlikely(!result)) { |
| 959 PyErr_Format(PyExc_NameError, |
| 960 #if PY_MAJOR_VERSION >= 3 |
| 961 "name '%U' is not defined", name); |
| 962 #else |
| 963 "name '%.200s' is not defined", PyString_AS_STRING(name)); |
| 964 #endif |
| 965 } |
| 966 return result; |
| 967 } |
| 968 |
| 969 /////////////// GetNameInClass.proto /////////////// |
| 970 |
| 971 static PyObject *__Pyx_GetNameInClass(PyObject *nmspace, PyObject *name); /*prot
o*/ |
| 972 |
| 973 /////////////// GetNameInClass /////////////// |
| 974 //@requires: PyObjectGetAttrStr |
| 975 //@requires: GetModuleGlobalName |
| 976 |
| 977 static PyObject *__Pyx_GetNameInClass(PyObject *nmspace, PyObject *name) { |
| 978 PyObject *result; |
| 979 result = __Pyx_PyObject_GetAttrStr(nmspace, name); |
| 980 if (!result) |
| 981 result = __Pyx_GetModuleGlobalName(name); |
| 982 return result; |
| 983 } |
| 984 |
| 985 /////////////// GetModuleGlobalName.proto /////////////// |
| 986 |
| 987 static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name); /*prot
o*/ |
| 988 |
| 989 /////////////// GetModuleGlobalName /////////////// |
| 990 //@requires: GetBuiltinName |
| 991 //@substitute: naming |
| 992 |
| 993 static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) { |
| 994 PyObject *result; |
| 995 #if CYTHON_COMPILING_IN_CPYTHON |
| 996 result = PyDict_GetItem($moddict_cname, name); |
| 997 if (result) { |
| 998 Py_INCREF(result); |
| 999 } else { |
| 1000 #else |
| 1001 result = PyObject_GetItem($moddict_cname, name); |
| 1002 if (!result) { |
| 1003 PyErr_Clear(); |
| 1004 #endif |
| 1005 result = __Pyx_GetBuiltinName(name); |
| 1006 } |
| 1007 return result; |
| 1008 } |
| 1009 |
| 1010 //////////////////// GetAttr.proto //////////////////// |
| 1011 |
| 1012 static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *); /*proto*/ |
| 1013 |
| 1014 //////////////////// GetAttr //////////////////// |
| 1015 //@requires: PyObjectGetAttrStr |
| 1016 |
| 1017 static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) { |
| 1018 #if CYTHON_COMPILING_IN_CPYTHON |
| 1019 #if PY_MAJOR_VERSION >= 3 |
| 1020 if (likely(PyUnicode_Check(n))) |
| 1021 #else |
| 1022 if (likely(PyString_Check(n))) |
| 1023 #endif |
| 1024 return __Pyx_PyObject_GetAttrStr(o, n); |
| 1025 #endif |
| 1026 return PyObject_GetAttr(o, n); |
| 1027 } |
| 1028 |
| 1029 /////////////// PyObjectLookupSpecial.proto /////////////// |
| 1030 //@requires: PyObjectGetAttrStr |
| 1031 |
| 1032 #if CYTHON_COMPILING_IN_CPYTHON && (PY_VERSION_HEX >= 0x03020000 || PY_MAJOR_VER
SION < 3 && PY_VERSION_HEX >= 0x02070000) |
| 1033 // looks like calling _PyType_Lookup() isn't safe in Py<=2.6/3.1 |
| 1034 static CYTHON_INLINE PyObject* __Pyx_PyObject_LookupSpecial(PyObject* obj, PyObj
ect* attr_name) { |
| 1035 PyObject *res; |
| 1036 PyTypeObject *tp = Py_TYPE(obj); |
| 1037 #if PY_MAJOR_VERSION < 3 |
| 1038 if (unlikely(PyInstance_Check(obj))) |
| 1039 return __Pyx_PyObject_GetAttrStr(obj, attr_name); |
| 1040 #endif |
| 1041 // adapted from CPython's special_lookup() in ceval.c |
| 1042 res = _PyType_Lookup(tp, attr_name); |
| 1043 if (likely(res)) { |
| 1044 descrgetfunc f = Py_TYPE(res)->tp_descr_get; |
| 1045 if (!f) { |
| 1046 Py_INCREF(res); |
| 1047 } else { |
| 1048 res = f(res, obj, (PyObject *)tp); |
| 1049 } |
| 1050 } else { |
| 1051 PyErr_SetObject(PyExc_AttributeError, attr_name); |
| 1052 } |
| 1053 return res; |
| 1054 } |
| 1055 #else |
| 1056 #define __Pyx_PyObject_LookupSpecial(o,n) __Pyx_PyObject_GetAttrStr(o,n) |
| 1057 #endif |
| 1058 |
| 1059 /////////////// PyObjectGetAttrStr.proto /////////////// |
| 1060 |
| 1061 #if CYTHON_COMPILING_IN_CPYTHON |
| 1062 static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject
* attr_name) { |
| 1063 PyTypeObject* tp = Py_TYPE(obj); |
| 1064 if (likely(tp->tp_getattro)) |
| 1065 return tp->tp_getattro(obj, attr_name); |
| 1066 #if PY_MAJOR_VERSION < 3 |
| 1067 if (likely(tp->tp_getattr)) |
| 1068 return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); |
| 1069 #endif |
| 1070 return PyObject_GetAttr(obj, attr_name); |
| 1071 } |
| 1072 #else |
| 1073 #define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) |
| 1074 #endif |
| 1075 |
| 1076 /////////////// PyObjectSetAttrStr.proto /////////////// |
| 1077 |
| 1078 #if CYTHON_COMPILING_IN_CPYTHON |
| 1079 #define __Pyx_PyObject_DelAttrStr(o,n) __Pyx_PyObject_SetAttrStr(o,n,NULL) |
| 1080 static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr
_name, PyObject* value) { |
| 1081 PyTypeObject* tp = Py_TYPE(obj); |
| 1082 if (likely(tp->tp_setattro)) |
| 1083 return tp->tp_setattro(obj, attr_name, value); |
| 1084 #if PY_MAJOR_VERSION < 3 |
| 1085 if (likely(tp->tp_setattr)) |
| 1086 return tp->tp_setattr(obj, PyString_AS_STRING(attr_name), value); |
| 1087 #endif |
| 1088 return PyObject_SetAttr(obj, attr_name, value); |
| 1089 } |
| 1090 #else |
| 1091 #define __Pyx_PyObject_DelAttrStr(o,n) PyObject_DelAttr(o,n) |
| 1092 #define __Pyx_PyObject_SetAttrStr(o,n,v) PyObject_SetAttr(o,n,v) |
| 1093 #endif |
| 1094 |
| 1095 /////////////// PyObjectCallMethod.proto /////////////// |
| 1096 //@requires: PyObjectGetAttrStr |
| 1097 //@requires: PyObjectCall |
| 1098 //@substitute: naming |
| 1099 |
| 1100 static PyObject* __Pyx_PyObject_CallMethodTuple(PyObject* obj, PyObject* method_
name, PyObject* args) { |
| 1101 PyObject *method, *result = NULL; |
| 1102 if (unlikely(!args)) return NULL; |
| 1103 method = __Pyx_PyObject_GetAttrStr(obj, method_name); |
| 1104 if (unlikely(!method)) goto bad; |
| 1105 result = __Pyx_PyObject_Call(method, args, NULL); |
| 1106 Py_DECREF(method); |
| 1107 bad: |
| 1108 Py_DECREF(args); |
| 1109 return result; |
| 1110 } |
| 1111 |
| 1112 #define __Pyx_PyObject_CallMethod3(obj, name, arg1, arg2, arg3) \ |
| 1113 __Pyx_PyObject_CallMethodTuple(obj, name, PyTuple_Pack(3, arg1, arg2, arg3)) |
| 1114 #define __Pyx_PyObject_CallMethod2(obj, name, arg1, arg2) \ |
| 1115 __Pyx_PyObject_CallMethodTuple(obj, name, PyTuple_Pack(2, arg1, arg2)) |
| 1116 #define __Pyx_PyObject_CallMethod1(obj, name, arg1) \ |
| 1117 __Pyx_PyObject_CallMethodTuple(obj, name, PyTuple_Pack(1, arg1)) |
| 1118 #define __Pyx_PyObject_CallMethod0(obj, name) \ |
| 1119 __Pyx_PyObject_CallMethodTuple(obj, name, (Py_INCREF($empty_tuple), $empty_t
uple)) |
| 1120 |
| 1121 |
| 1122 /////////////// tp_new.proto /////////////// |
| 1123 |
| 1124 #define __Pyx_tp_new(type_obj, args) __Pyx_tp_new_kwargs(type_obj, args, NULL) |
| 1125 static CYTHON_INLINE PyObject* __Pyx_tp_new_kwargs(PyObject* type_obj, PyObject*
args, PyObject* kwargs) { |
| 1126 return (PyObject*) (((PyTypeObject*)type_obj)->tp_new((PyTypeObject*)type_ob
j, args, kwargs)); |
| 1127 } |
| 1128 |
| 1129 |
| 1130 /////////////// PyObjectCall.proto /////////////// |
| 1131 |
| 1132 #if CYTHON_COMPILING_IN_CPYTHON |
| 1133 static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg
, PyObject *kw); /*proto*/ |
| 1134 #else |
| 1135 #define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) |
| 1136 #endif |
| 1137 |
| 1138 /////////////// PyObjectCall /////////////// |
| 1139 |
| 1140 #if CYTHON_COMPILING_IN_CPYTHON |
| 1141 static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg
, PyObject *kw) { |
| 1142 PyObject *result; |
| 1143 ternaryfunc call = func->ob_type->tp_call; |
| 1144 |
| 1145 if (unlikely(!call)) |
| 1146 return PyObject_Call(func, arg, kw); |
| 1147 #if PY_VERSION_HEX >= 0x02060000 |
| 1148 if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))
) |
| 1149 return NULL; |
| 1150 #endif |
| 1151 result = (*call)(func, arg, kw); |
| 1152 #if PY_VERSION_HEX >= 0x02060000 |
| 1153 Py_LeaveRecursiveCall(); |
| 1154 #endif |
| 1155 if (unlikely(!result) && unlikely(!PyErr_Occurred())) { |
| 1156 PyErr_SetString( |
| 1157 PyExc_SystemError, |
| 1158 "NULL result without error in PyObject_Call"); |
| 1159 } |
| 1160 return result; |
| 1161 } |
| 1162 #endif |
OLD | NEW |