Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / cython / src / Cython / Utility / ObjectHandling.c
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, int 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, int 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 unpacking_failed; }
102         value2 = iternext(iter); if (unlikely(!value2)) { index = 1; goto unpacking_failed; }
103         if (!has_known_size && unlikely(__Pyx_IternextUnpackEndCheck(iternext(iter), 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 *); /*proto*/
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 >= 0x02070000)
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_GivenExceptionMatches(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"), (PyObject*)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, wraparound, 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_ssize_t i,
263                                                               int wraparound, int 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_ssize_t i,
282                                                               int wraparound, int 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_SIZE(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_SIZE(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 around 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, wraparound, 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, PyObject *v);
351 static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *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, PyObject *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, PyObject *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_GET_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 around 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 wraparound);
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 wraparound) {
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_stop, 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_DelItem(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 start, 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 *bases);
670
671 /////////////// CalculateMetaclass ///////////////
672
673 static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases) {
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) : NULL;
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, bases);
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 *name,
785                                    PyObject *qualname, PyObject *modname); /*proto*/
786
787 /////////////// CreateClass ///////////////
788 //@requires: FindInheritedMetaclass
789 //@requires: CalculateMetaclass
790
791 static PyObject *__Pyx_CreateClass(PyObject *bases, PyObject *dict, PyObject *name,
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, bases);
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, PyObject *doc); /*proto*/
824 static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, PyObject *dict,
825                                       PyObject *mkw, int calculate_metaclass, int 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, PyObject *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)) goto 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, PyObject *bases,
869                                       PyObject *dict, PyObject *mkw,
870                                       int calculate_metaclass, int allow_py2_metaclass) {
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); /*proto*/
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, int 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); /*proto*/
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); /*proto*/
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_VERSION < 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, PyObject* 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_tuple))
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_obj, 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