Home | History | Annotate | Download | only in Objects
      1 /* Abstract Object Interface (many thanks to Jim Fulton) */
      2 
      3 #include "Python.h"
      4 #include <ctype.h>
      5 #include "structmember.h" /* we need the offsetof() macro from there */
      6 #include "longintrepr.h"
      7 
      8 #define NEW_STYLE_NUMBER(o) PyType_HasFeature((o)->ob_type, \
      9                 Py_TPFLAGS_CHECKTYPES)
     10 
     11 
     12 /* Shorthands to return certain errors */
     13 
     14 static PyObject *
     15 type_error(const char *msg, PyObject *obj)
     16 {
     17     PyErr_Format(PyExc_TypeError, msg, obj->ob_type->tp_name);
     18     return NULL;
     19 }
     20 
     21 static PyObject *
     22 null_error(void)
     23 {
     24     if (!PyErr_Occurred())
     25         PyErr_SetString(PyExc_SystemError,
     26                         "null argument to internal routine");
     27     return NULL;
     28 }
     29 
     30 /* Operations on any object */
     31 
     32 int
     33 PyObject_Cmp(PyObject *o1, PyObject *o2, int *result)
     34 {
     35     int r;
     36 
     37     if (o1 == NULL || o2 == NULL) {
     38         null_error();
     39         return -1;
     40     }
     41     r = PyObject_Compare(o1, o2);
     42     if (PyErr_Occurred())
     43         return -1;
     44     *result = r;
     45     return 0;
     46 }
     47 
     48 PyObject *
     49 PyObject_Type(PyObject *o)
     50 {
     51     PyObject *v;
     52 
     53     if (o == NULL)
     54         return null_error();
     55     v = (PyObject *)o->ob_type;
     56     Py_INCREF(v);
     57     return v;
     58 }
     59 
     60 Py_ssize_t
     61 PyObject_Size(PyObject *o)
     62 {
     63     PySequenceMethods *m;
     64 
     65     if (o == NULL) {
     66         null_error();
     67         return -1;
     68     }
     69 
     70     m = o->ob_type->tp_as_sequence;
     71     if (m && m->sq_length)
     72         return m->sq_length(o);
     73 
     74     return PyMapping_Size(o);
     75 }
     76 
     77 #undef PyObject_Length
     78 Py_ssize_t
     79 PyObject_Length(PyObject *o)
     80 {
     81     return PyObject_Size(o);
     82 }
     83 #define PyObject_Length PyObject_Size
     84 
     85 
     86 /* The length hint function returns a non-negative value from o.__len__()
     87    or o.__length_hint__().  If those methods aren't found or return a negative
     88    value, then the defaultvalue is returned.  If one of the calls fails,
     89    this function returns -1.
     90 */
     91 
     92 Py_ssize_t
     93 _PyObject_LengthHint(PyObject *o, Py_ssize_t defaultvalue)
     94 {
     95     static PyObject *hintstrobj = NULL;
     96     PyObject *ro, *hintmeth;
     97     Py_ssize_t rv;
     98 
     99     /* try o.__len__() */
    100     rv = PyObject_Size(o);
    101     if (rv >= 0)
    102         return rv;
    103     if (PyErr_Occurred()) {
    104         if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
    105             !PyErr_ExceptionMatches(PyExc_AttributeError))
    106                 return -1;
    107         PyErr_Clear();
    108     }
    109 
    110     if (PyInstance_Check(o))
    111         return defaultvalue;
    112     /* try o.__length_hint__() */
    113     hintmeth = _PyObject_LookupSpecial(o, "__length_hint__", &hintstrobj);
    114     if (hintmeth == NULL) {
    115         if (PyErr_Occurred())
    116             return -1;
    117         else
    118             return defaultvalue;
    119     }
    120     ro = PyObject_CallFunctionObjArgs(hintmeth, NULL);
    121     Py_DECREF(hintmeth);
    122     if (ro == NULL) {
    123         if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
    124             !PyErr_ExceptionMatches(PyExc_AttributeError))
    125             return -1;
    126         PyErr_Clear();
    127         return defaultvalue;
    128     }
    129     rv = PyNumber_Check(ro) ? PyInt_AsSsize_t(ro) : defaultvalue;
    130     Py_DECREF(ro);
    131     return rv;
    132 }
    133 
    134 PyObject *
    135 PyObject_GetItem(PyObject *o, PyObject *key)
    136 {
    137     PyMappingMethods *m;
    138 
    139     if (o == NULL || key == NULL)
    140         return null_error();
    141 
    142     m = o->ob_type->tp_as_mapping;
    143     if (m && m->mp_subscript)
    144         return m->mp_subscript(o, key);
    145 
    146     if (o->ob_type->tp_as_sequence) {
    147         if (PyIndex_Check(key)) {
    148             Py_ssize_t key_value;
    149             key_value = PyNumber_AsSsize_t(key, PyExc_IndexError);
    150             if (key_value == -1 && PyErr_Occurred())
    151                 return NULL;
    152             return PySequence_GetItem(o, key_value);
    153         }
    154         else if (o->ob_type->tp_as_sequence->sq_item)
    155             return type_error("sequence index must "
    156                               "be integer, not '%.200s'", key);
    157     }
    158 
    159     return type_error("'%.200s' object has no attribute '__getitem__'", o);
    160 }
    161 
    162 int
    163 PyObject_SetItem(PyObject *o, PyObject *key, PyObject *value)
    164 {
    165     PyMappingMethods *m;
    166 
    167     if (o == NULL || key == NULL || value == NULL) {
    168         null_error();
    169         return -1;
    170     }
    171     m = o->ob_type->tp_as_mapping;
    172     if (m && m->mp_ass_subscript)
    173         return m->mp_ass_subscript(o, key, value);
    174 
    175     if (o->ob_type->tp_as_sequence) {
    176         if (PyIndex_Check(key)) {
    177             Py_ssize_t key_value;
    178             key_value = PyNumber_AsSsize_t(key, PyExc_IndexError);
    179             if (key_value == -1 && PyErr_Occurred())
    180                 return -1;
    181             return PySequence_SetItem(o, key_value, value);
    182         }
    183         else if (o->ob_type->tp_as_sequence->sq_ass_item) {
    184             type_error("sequence index must be "
    185                        "integer, not '%.200s'", key);
    186             return -1;
    187         }
    188     }
    189 
    190     type_error("'%.200s' object does not support item assignment", o);
    191     return -1;
    192 }
    193 
    194 int
    195 PyObject_DelItem(PyObject *o, PyObject *key)
    196 {
    197     PyMappingMethods *m;
    198 
    199     if (o == NULL || key == NULL) {
    200         null_error();
    201         return -1;
    202     }
    203     m = o->ob_type->tp_as_mapping;
    204     if (m && m->mp_ass_subscript)
    205         return m->mp_ass_subscript(o, key, (PyObject*)NULL);
    206 
    207     if (o->ob_type->tp_as_sequence) {
    208         if (PyIndex_Check(key)) {
    209             Py_ssize_t key_value;
    210             key_value = PyNumber_AsSsize_t(key, PyExc_IndexError);
    211             if (key_value == -1 && PyErr_Occurred())
    212                 return -1;
    213             return PySequence_DelItem(o, key_value);
    214         }
    215         else if (o->ob_type->tp_as_sequence->sq_ass_item) {
    216             type_error("sequence index must be "
    217                        "integer, not '%.200s'", key);
    218             return -1;
    219         }
    220     }
    221 
    222     type_error("'%.200s' object does not support item deletion", o);
    223     return -1;
    224 }
    225 
    226 int
    227 PyObject_DelItemString(PyObject *o, char *key)
    228 {
    229     PyObject *okey;
    230     int ret;
    231 
    232     if (o == NULL || key == NULL) {
    233         null_error();
    234         return -1;
    235     }
    236     okey = PyString_FromString(key);
    237     if (okey == NULL)
    238         return -1;
    239     ret = PyObject_DelItem(o, okey);
    240     Py_DECREF(okey);
    241     return ret;
    242 }
    243 
    244 int
    245 PyObject_AsCharBuffer(PyObject *obj,
    246                           const char **buffer,
    247                           Py_ssize_t *buffer_len)
    248 {
    249     PyBufferProcs *pb;
    250     char *pp;
    251     Py_ssize_t len;
    252 
    253     if (obj == NULL || buffer == NULL || buffer_len == NULL) {
    254         null_error();
    255         return -1;
    256     }
    257     pb = obj->ob_type->tp_as_buffer;
    258     if (pb == NULL ||
    259          pb->bf_getcharbuffer == NULL ||
    260          pb->bf_getsegcount == NULL) {
    261         PyErr_SetString(PyExc_TypeError,
    262                         "expected a string or other character buffer object");
    263         return -1;
    264     }
    265     if ((*pb->bf_getsegcount)(obj,NULL) != 1) {
    266         PyErr_SetString(PyExc_TypeError,
    267                         "expected a single-segment buffer object");
    268         return -1;
    269     }
    270     len = (*pb->bf_getcharbuffer)(obj, 0, &pp);
    271     if (len < 0)
    272         return -1;
    273     *buffer = pp;
    274     *buffer_len = len;
    275     return 0;
    276 }
    277 
    278 int
    279 PyObject_CheckReadBuffer(PyObject *obj)
    280 {
    281     PyBufferProcs *pb = obj->ob_type->tp_as_buffer;
    282 
    283     if (pb == NULL ||
    284         pb->bf_getreadbuffer == NULL ||
    285         pb->bf_getsegcount == NULL ||
    286         (*pb->bf_getsegcount)(obj, NULL) != 1)
    287         return 0;
    288     return 1;
    289 }
    290 
    291 int PyObject_AsReadBuffer(PyObject *obj,
    292                           const void **buffer,
    293                           Py_ssize_t *buffer_len)
    294 {
    295     PyBufferProcs *pb;
    296     void *pp;
    297     Py_ssize_t len;
    298 
    299     if (obj == NULL || buffer == NULL || buffer_len == NULL) {
    300         null_error();
    301         return -1;
    302     }
    303     pb = obj->ob_type->tp_as_buffer;
    304     if (pb == NULL ||
    305          pb->bf_getreadbuffer == NULL ||
    306          pb->bf_getsegcount == NULL) {
    307         PyErr_SetString(PyExc_TypeError,
    308                         "expected a readable buffer object");
    309         return -1;
    310     }
    311     if ((*pb->bf_getsegcount)(obj, NULL) != 1) {
    312         PyErr_SetString(PyExc_TypeError,
    313                         "expected a single-segment buffer object");
    314         return -1;
    315     }
    316     len = (*pb->bf_getreadbuffer)(obj, 0, &pp);
    317     if (len < 0)
    318         return -1;
    319     *buffer = pp;
    320     *buffer_len = len;
    321     return 0;
    322 }
    323 
    324 int PyObject_AsWriteBuffer(PyObject *obj,
    325                            void **buffer,
    326                            Py_ssize_t *buffer_len)
    327 {
    328     PyBufferProcs *pb;
    329     void*pp;
    330     Py_ssize_t len;
    331 
    332     if (obj == NULL || buffer == NULL || buffer_len == NULL) {
    333         null_error();
    334         return -1;
    335     }
    336     pb = obj->ob_type->tp_as_buffer;
    337     if (pb == NULL ||
    338          pb->bf_getwritebuffer == NULL ||
    339          pb->bf_getsegcount == NULL) {
    340         PyErr_SetString(PyExc_TypeError,
    341                         "expected a writeable buffer object");
    342         return -1;
    343     }
    344     if ((*pb->bf_getsegcount)(obj, NULL) != 1) {
    345         PyErr_SetString(PyExc_TypeError,
    346                         "expected a single-segment buffer object");
    347         return -1;
    348     }
    349     len = (*pb->bf_getwritebuffer)(obj,0,&pp);
    350     if (len < 0)
    351         return -1;
    352     *buffer = pp;
    353     *buffer_len = len;
    354     return 0;
    355 }
    356 
    357 /* Buffer C-API for Python 3.0 */
    358 
    359 int
    360 PyObject_GetBuffer(PyObject *obj, Py_buffer *view, int flags)
    361 {
    362     if (!PyObject_CheckBuffer(obj)) {
    363         PyErr_Format(PyExc_TypeError,
    364                      "'%100s' does not have the buffer interface",
    365                      Py_TYPE(obj)->tp_name);
    366         return -1;
    367     }
    368     return (*(obj->ob_type->tp_as_buffer->bf_getbuffer))(obj, view, flags);
    369 }
    370 
    371 static int
    372 _IsFortranContiguous(Py_buffer *view)
    373 {
    374     Py_ssize_t sd, dim;
    375     int i;
    376 
    377     if (view->ndim == 0) return 1;
    378     if (view->strides == NULL) return (view->ndim == 1);
    379 
    380     sd = view->itemsize;
    381     if (view->ndim == 1) return (view->shape[0] == 1 ||
    382                                sd == view->strides[0]);
    383     for (i=0; i<view->ndim; i++) {
    384         dim = view->shape[i];
    385         if (dim == 0) return 1;
    386         if (view->strides[i] != sd) return 0;
    387         sd *= dim;
    388     }
    389     return 1;
    390 }
    391 
    392 static int
    393 _IsCContiguous(Py_buffer *view)
    394 {
    395     Py_ssize_t sd, dim;
    396     int i;
    397 
    398     if (view->ndim == 0) return 1;
    399     if (view->strides == NULL) return 1;
    400 
    401     sd = view->itemsize;
    402     if (view->ndim == 1) return (view->shape[0] == 1 ||
    403                                sd == view->strides[0]);
    404     for (i=view->ndim-1; i>=0; i--) {
    405         dim = view->shape[i];
    406         if (dim == 0) return 1;
    407         if (view->strides[i] != sd) return 0;
    408         sd *= dim;
    409     }
    410     return 1;
    411 }
    412 
    413 int
    414 PyBuffer_IsContiguous(Py_buffer *view, char fort)
    415 {
    416 
    417     if (view->suboffsets != NULL) return 0;
    418 
    419     if (fort == 'C')
    420         return _IsCContiguous(view);
    421     else if (fort == 'F')
    422         return _IsFortranContiguous(view);
    423     else if (fort == 'A')
    424         return (_IsCContiguous(view) || _IsFortranContiguous(view));
    425     return 0;
    426 }
    427 
    428 
    429 void*
    430 PyBuffer_GetPointer(Py_buffer *view, Py_ssize_t *indices)
    431 {
    432     char* pointer;
    433     int i;
    434     pointer = (char *)view->buf;
    435     for (i = 0; i < view->ndim; i++) {
    436         pointer += view->strides[i]*indices[i];
    437         if ((view->suboffsets != NULL) && (view->suboffsets[i] >= 0)) {
    438             pointer = *((char**)pointer) + view->suboffsets[i];
    439         }
    440     }
    441     return (void*)pointer;
    442 }
    443 
    444 
    445 void
    446 _Py_add_one_to_index_F(int nd, Py_ssize_t *index, const Py_ssize_t *shape)
    447 {
    448     int k;
    449 
    450     for (k=0; k<nd; k++) {
    451         if (index[k] < shape[k]-1) {
    452             index[k]++;
    453             break;
    454         }
    455         else {
    456             index[k] = 0;
    457         }
    458     }
    459 }
    460 
    461 void
    462 _Py_add_one_to_index_C(int nd, Py_ssize_t *index, const Py_ssize_t *shape)
    463 {
    464     int k;
    465 
    466     for (k=nd-1; k>=0; k--) {
    467         if (index[k] < shape[k]-1) {
    468             index[k]++;
    469             break;
    470         }
    471         else {
    472             index[k] = 0;
    473         }
    474     }
    475 }
    476 
    477   /* view is not checked for consistency in either of these.  It is
    478      assumed that the size of the buffer is view->len in
    479      view->len / view->itemsize elements.
    480   */
    481 
    482 int
    483 PyBuffer_ToContiguous(void *buf, Py_buffer *view, Py_ssize_t len, char fort)
    484 {
    485     int k;
    486     void (*addone)(int, Py_ssize_t *, const Py_ssize_t *);
    487     Py_ssize_t *indices, elements;
    488     char *dest, *ptr;
    489 
    490     if (len > view->len) {
    491         len = view->len;
    492     }
    493 
    494     if (PyBuffer_IsContiguous(view, fort)) {
    495         /* simplest copy is all that is needed */
    496         memcpy(buf, view->buf, len);
    497         return 0;
    498     }
    499 
    500     /* Otherwise a more elaborate scheme is needed */
    501 
    502     /* view->ndim <= 64 */
    503     indices = (Py_ssize_t *)PyMem_Malloc(sizeof(Py_ssize_t)*(view->ndim));
    504     if (indices == NULL) {
    505         PyErr_NoMemory();
    506         return -1;
    507     }
    508     for (k=0; k<view->ndim;k++) {
    509         indices[k] = 0;
    510     }
    511 
    512     if (fort == 'F') {
    513         addone = _Py_add_one_to_index_F;
    514     }
    515     else {
    516         addone = _Py_add_one_to_index_C;
    517     }
    518     dest = buf;
    519     /* XXX : This is not going to be the fastest code in the world
    520              several optimizations are possible.
    521      */
    522     elements = len / view->itemsize;
    523     while (elements--) {
    524         ptr = PyBuffer_GetPointer(view, indices);
    525         memcpy(dest, ptr, view->itemsize);
    526         dest += view->itemsize;
    527         addone(view->ndim, indices, view->shape);
    528     }
    529     PyMem_Free(indices);
    530     return 0;
    531 }
    532 
    533 int
    534 PyBuffer_FromContiguous(Py_buffer *view, void *buf, Py_ssize_t len, char fort)
    535 {
    536     int k;
    537     void (*addone)(int, Py_ssize_t *, const Py_ssize_t *);
    538     Py_ssize_t *indices, elements;
    539     char *src, *ptr;
    540 
    541     if (len > view->len) {
    542         len = view->len;
    543     }
    544 
    545     if (PyBuffer_IsContiguous(view, fort)) {
    546         /* simplest copy is all that is needed */
    547         memcpy(view->buf, buf, len);
    548         return 0;
    549     }
    550 
    551     /* Otherwise a more elaborate scheme is needed */
    552 
    553     /* view->ndim <= 64 */
    554     indices = (Py_ssize_t *)PyMem_Malloc(sizeof(Py_ssize_t)*(view->ndim));
    555     if (indices == NULL) {
    556         PyErr_NoMemory();
    557         return -1;
    558     }
    559     for (k=0; k<view->ndim;k++) {
    560         indices[k] = 0;
    561     }
    562 
    563     if (fort == 'F') {
    564         addone = _Py_add_one_to_index_F;
    565     }
    566     else {
    567         addone = _Py_add_one_to_index_C;
    568     }
    569     src = buf;
    570     /* XXX : This is not going to be the fastest code in the world
    571              several optimizations are possible.
    572      */
    573     elements = len / view->itemsize;
    574     while (elements--) {
    575         ptr = PyBuffer_GetPointer(view, indices);
    576         memcpy(ptr, src, view->itemsize);
    577         src += view->itemsize;
    578         addone(view->ndim, indices, view->shape);
    579     }
    580 
    581     PyMem_Free(indices);
    582     return 0;
    583 }
    584 
    585 int PyObject_CopyData(PyObject *dest, PyObject *src)
    586 {
    587     Py_buffer view_dest, view_src;
    588     int k;
    589     Py_ssize_t *indices, elements;
    590     char *dptr, *sptr;
    591 
    592     if (!PyObject_CheckBuffer(dest) ||
    593         !PyObject_CheckBuffer(src)) {
    594         PyErr_SetString(PyExc_TypeError,
    595                         "both destination and source must have the "\
    596                         "buffer interface");
    597         return -1;
    598     }
    599 
    600     if (PyObject_GetBuffer(dest, &view_dest, PyBUF_FULL) != 0) return -1;
    601     if (PyObject_GetBuffer(src, &view_src, PyBUF_FULL_RO) != 0) {
    602         PyBuffer_Release(&view_dest);
    603         return -1;
    604     }
    605 
    606     if (view_dest.len < view_src.len) {
    607         PyErr_SetString(PyExc_BufferError,
    608                         "destination is too small to receive data from source");
    609         PyBuffer_Release(&view_dest);
    610         PyBuffer_Release(&view_src);
    611         return -1;
    612     }
    613 
    614     if ((PyBuffer_IsContiguous(&view_dest, 'C') &&
    615          PyBuffer_IsContiguous(&view_src, 'C')) ||
    616         (PyBuffer_IsContiguous(&view_dest, 'F') &&
    617          PyBuffer_IsContiguous(&view_src, 'F'))) {
    618         /* simplest copy is all that is needed */
    619         memcpy(view_dest.buf, view_src.buf, view_src.len);
    620         PyBuffer_Release(&view_dest);
    621         PyBuffer_Release(&view_src);
    622         return 0;
    623     }
    624 
    625     /* Otherwise a more elaborate copy scheme is needed */
    626 
    627     /* XXX(nnorwitz): need to check for overflow! */
    628     indices = (Py_ssize_t *)PyMem_Malloc(sizeof(Py_ssize_t)*view_src.ndim);
    629     if (indices == NULL) {
    630         PyErr_NoMemory();
    631         PyBuffer_Release(&view_dest);
    632         PyBuffer_Release(&view_src);
    633         return -1;
    634     }
    635     for (k=0; k<view_src.ndim;k++) {
    636         indices[k] = 0;
    637     }
    638     elements = 1;
    639     for (k=0; k<view_src.ndim; k++) {
    640         /* XXX(nnorwitz): can this overflow? */
    641         elements *= view_src.shape[k];
    642     }
    643     while (elements--) {
    644         _Py_add_one_to_index_C(view_src.ndim, indices, view_src.shape);
    645         dptr = PyBuffer_GetPointer(&view_dest, indices);
    646         sptr = PyBuffer_GetPointer(&view_src, indices);
    647         memcpy(dptr, sptr, view_src.itemsize);
    648     }
    649     PyMem_Free(indices);
    650     PyBuffer_Release(&view_dest);
    651     PyBuffer_Release(&view_src);
    652     return 0;
    653 }
    654 
    655 void
    656 PyBuffer_FillContiguousStrides(int nd, Py_ssize_t *shape,
    657                                Py_ssize_t *strides, int itemsize,
    658                                char fort)
    659 {
    660     int k;
    661     Py_ssize_t sd;
    662 
    663     sd = itemsize;
    664     if (fort == 'F') {
    665         for (k=0; k<nd; k++) {
    666             strides[k] = sd;
    667             sd *= shape[k];
    668         }
    669     }
    670     else {
    671         for (k=nd-1; k>=0; k--) {
    672             strides[k] = sd;
    673             sd *= shape[k];
    674         }
    675     }
    676     return;
    677 }
    678 
    679 int
    680 PyBuffer_FillInfo(Py_buffer *view, PyObject *obj, void *buf, Py_ssize_t len,
    681               int readonly, int flags)
    682 {
    683     if (view == NULL) return 0;
    684     if (((flags & PyBUF_WRITABLE) == PyBUF_WRITABLE) &&
    685         (readonly == 1)) {
    686         PyErr_SetString(PyExc_BufferError,
    687                         "Object is not writable.");
    688         return -1;
    689     }
    690 
    691     view->obj = obj;
    692     if (obj)
    693         Py_INCREF(obj);
    694     view->buf = buf;
    695     view->len = len;
    696     view->readonly = readonly;
    697     view->itemsize = 1;
    698     view->format = NULL;
    699     if ((flags & PyBUF_FORMAT) == PyBUF_FORMAT)
    700         view->format = "B";
    701     view->ndim = 1;
    702     view->shape = NULL;
    703     if ((flags & PyBUF_ND) == PyBUF_ND)
    704         view->shape = &(view->len);
    705     view->strides = NULL;
    706     if ((flags & PyBUF_STRIDES) == PyBUF_STRIDES)
    707         view->strides = &(view->itemsize);
    708     view->suboffsets = NULL;
    709     view->internal = NULL;
    710     return 0;
    711 }
    712 
    713 void
    714 PyBuffer_Release(Py_buffer *view)
    715 {
    716     PyObject *obj = view->obj;
    717     if (obj && Py_TYPE(obj)->tp_as_buffer && Py_TYPE(obj)->tp_as_buffer->bf_releasebuffer)
    718         Py_TYPE(obj)->tp_as_buffer->bf_releasebuffer(obj, view);
    719     Py_XDECREF(obj);
    720     view->obj = NULL;
    721 }
    722 
    723 PyObject *
    724 PyObject_Format(PyObject* obj, PyObject *format_spec)
    725 {
    726     PyObject *empty = NULL;
    727     PyObject *result = NULL;
    728 #ifdef Py_USING_UNICODE
    729     int spec_is_unicode;
    730     int result_is_unicode;
    731 #endif
    732 
    733     /* If no format_spec is provided, use an empty string */
    734     if (format_spec == NULL) {
    735         empty = PyString_FromStringAndSize(NULL, 0);
    736         format_spec = empty;
    737     }
    738 
    739     /* Check the format_spec type, and make sure it's str or unicode */
    740 #ifdef Py_USING_UNICODE
    741     if (PyUnicode_Check(format_spec))
    742         spec_is_unicode = 1;
    743     else if (PyString_Check(format_spec))
    744         spec_is_unicode = 0;
    745     else {
    746 #else
    747     if (!PyString_Check(format_spec)) {
    748 #endif
    749         PyErr_Format(PyExc_TypeError,
    750                      "format expects arg 2 to be string "
    751                      "or unicode, not %.100s", Py_TYPE(format_spec)->tp_name);
    752         goto done;
    753     }
    754 
    755     /* Check for a __format__ method and call it. */
    756     if (PyInstance_Check(obj)) {
    757         /* We're an instance of a classic class */
    758         PyObject *bound_method = PyObject_GetAttrString(obj, "__format__");
    759         if (bound_method != NULL) {
    760             result = PyObject_CallFunctionObjArgs(bound_method,
    761                                                   format_spec,
    762                                                   NULL);
    763             Py_DECREF(bound_method);
    764         } else {
    765             PyObject *self_as_str = NULL;
    766             PyObject *format_method = NULL;
    767             Py_ssize_t format_len;
    768 
    769             PyErr_Clear();
    770             /* Per the PEP, convert to str (or unicode,
    771                depending on the type of the format
    772                specifier).  For new-style classes, this
    773                logic is done by object.__format__(). */
    774 #ifdef Py_USING_UNICODE
    775             if (spec_is_unicode) {
    776                 format_len = PyUnicode_GET_SIZE(format_spec);
    777                 self_as_str = PyObject_Unicode(obj);
    778             } else
    779 #endif
    780             {
    781                 format_len = PyString_GET_SIZE(format_spec);
    782                 self_as_str = PyObject_Str(obj);
    783             }
    784             if (self_as_str == NULL)
    785                 goto done1;
    786 
    787             if (format_len > 0) {
    788                 /* See the almost identical code in
    789                    typeobject.c for new-style
    790                    classes. */
    791                 if (PyErr_WarnEx(
    792                     PyExc_PendingDeprecationWarning,
    793                     "object.__format__ with a non-empty "
    794                     "format string is deprecated", 1)
    795                      < 0) {
    796                     goto done1;
    797                 }
    798                 /* Eventually this will become an
    799                    error:
    800                 PyErr_Format(PyExc_TypeError,
    801                    "non-empty format string passed to "
    802                    "object.__format__");
    803                 goto done1;
    804                 */
    805             }
    806 
    807             /* Then call str.__format__ on that result */
    808             format_method = PyObject_GetAttrString(self_as_str, "__format__");
    809             if (format_method == NULL) {
    810                 goto done1;
    811             }
    812             result = PyObject_CallFunctionObjArgs(format_method,
    813                                                   format_spec,
    814                                                   NULL);
    815 done1:
    816             Py_XDECREF(self_as_str);
    817             Py_XDECREF(format_method);
    818             if (result == NULL)
    819                 goto done;
    820         }
    821     } else {
    822         /* Not an instance of a classic class, use the code
    823            from py3k */
    824         static PyObject *format_cache = NULL;
    825 
    826         /* Find the (unbound!) __format__ method (a borrowed
    827            reference) */
    828         PyObject *method = _PyObject_LookupSpecial(obj, "__format__",
    829                                                    &format_cache);
    830         if (method == NULL) {
    831             if (!PyErr_Occurred())
    832                 PyErr_Format(PyExc_TypeError,
    833                              "Type %.100s doesn't define __format__",
    834                              Py_TYPE(obj)->tp_name);
    835             goto done;
    836         }
    837         /* And call it. */
    838         result = PyObject_CallFunctionObjArgs(method, format_spec, NULL);
    839         Py_DECREF(method);
    840     }
    841 
    842     if (result == NULL)
    843         goto done;
    844 
    845     /* Check the result type, and make sure it's str or unicode */
    846 #ifdef Py_USING_UNICODE
    847     if (PyUnicode_Check(result))
    848         result_is_unicode = 1;
    849     else if (PyString_Check(result))
    850         result_is_unicode = 0;
    851     else {
    852 #else
    853     if (!PyString_Check(result)) {
    854 #endif
    855         PyErr_Format(PyExc_TypeError,
    856                      "%.100s.__format__ must return string or "
    857                      "unicode, not %.100s", Py_TYPE(obj)->tp_name,
    858                      Py_TYPE(result)->tp_name);
    859         Py_DECREF(result);
    860         result = NULL;
    861         goto done;
    862     }
    863 
    864     /* Convert to unicode, if needed.  Required if spec is unicode
    865        and result is str */
    866 #ifdef Py_USING_UNICODE
    867     if (spec_is_unicode && !result_is_unicode) {
    868         PyObject *tmp = PyObject_Unicode(result);
    869         /* This logic works whether or not tmp is NULL */
    870         Py_DECREF(result);
    871         result = tmp;
    872     }
    873 #endif
    874 
    875 done:
    876     Py_XDECREF(empty);
    877     return result;
    878 }
    879 
    880 /* Operations on numbers */
    881 
    882 int
    883 PyNumber_Check(PyObject *o)
    884 {
    885     return o && o->ob_type->tp_as_number &&
    886            (o->ob_type->tp_as_number->nb_int ||
    887         o->ob_type->tp_as_number->nb_float);
    888 }
    889 
    890 /* Binary operators */
    891 
    892 /* New style number protocol support */
    893 
    894 #define NB_SLOT(x) offsetof(PyNumberMethods, x)
    895 #define NB_BINOP(nb_methods, slot) \
    896         (*(binaryfunc*)(& ((char*)nb_methods)[slot]))
    897 #define NB_TERNOP(nb_methods, slot) \
    898         (*(ternaryfunc*)(& ((char*)nb_methods)[slot]))
    899 
    900 /*
    901   Calling scheme used for binary operations:
    902 
    903   v     w       Action
    904   -------------------------------------------------------------------
    905   new   new     w.op(v,w)[*], v.op(v,w), w.op(v,w)
    906   new   old     v.op(v,w), coerce(v,w), v.op(v,w)
    907   old   new     w.op(v,w), coerce(v,w), v.op(v,w)
    908   old   old     coerce(v,w), v.op(v,w)
    909 
    910   [*] only when v->ob_type != w->ob_type && w->ob_type is a subclass of
    911       v->ob_type
    912 
    913   Legend:
    914   -------
    915   * new == new style number
    916   * old == old style number
    917   * Action indicates the order in which operations are tried until either
    918     a valid result is produced or an error occurs.
    919 
    920  */
    921 
    922 static PyObject *
    923 binary_op1(PyObject *v, PyObject *w, const int op_slot)
    924 {
    925     PyObject *x;
    926     binaryfunc slotv = NULL;
    927     binaryfunc slotw = NULL;
    928 
    929     if (v->ob_type->tp_as_number != NULL && NEW_STYLE_NUMBER(v))
    930         slotv = NB_BINOP(v->ob_type->tp_as_number, op_slot);
    931     if (w->ob_type != v->ob_type &&
    932         w->ob_type->tp_as_number != NULL && NEW_STYLE_NUMBER(w)) {
    933         slotw = NB_BINOP(w->ob_type->tp_as_number, op_slot);
    934         if (slotw == slotv)
    935             slotw = NULL;
    936     }
    937     if (slotv) {
    938         if (slotw && PyType_IsSubtype(w->ob_type, v->ob_type)) {
    939             x = slotw(v, w);
    940             if (x != Py_NotImplemented)
    941                 return x;
    942             Py_DECREF(x); /* can't do it */
    943             slotw = NULL;
    944         }
    945         x = slotv(v, w);
    946         if (x != Py_NotImplemented)
    947             return x;
    948         Py_DECREF(x); /* can't do it */
    949     }
    950     if (slotw) {
    951         x = slotw(v, w);
    952         if (x != Py_NotImplemented)
    953             return x;
    954         Py_DECREF(x); /* can't do it */
    955     }
    956     if (!NEW_STYLE_NUMBER(v) || !NEW_STYLE_NUMBER(w)) {
    957         int err = PyNumber_CoerceEx(&v, &w);
    958         if (err < 0) {
    959             return NULL;
    960         }
    961         if (err == 0) {
    962             PyNumberMethods *mv = v->ob_type->tp_as_number;
    963             if (mv) {
    964                 binaryfunc slot;
    965                 slot = NB_BINOP(mv, op_slot);
    966                 if (slot) {
    967                     x = slot(v, w);
    968                     Py_DECREF(v);
    969                     Py_DECREF(w);
    970                     return x;
    971                 }
    972             }
    973             /* CoerceEx incremented the reference counts */
    974             Py_DECREF(v);
    975             Py_DECREF(w);
    976         }
    977     }
    978     Py_INCREF(Py_NotImplemented);
    979     return Py_NotImplemented;
    980 }
    981 
    982 static PyObject *
    983 binop_type_error(PyObject *v, PyObject *w, const char *op_name)
    984 {
    985     PyErr_Format(PyExc_TypeError,
    986                  "unsupported operand type(s) for %.100s: "
    987                  "'%.100s' and '%.100s'",
    988                  op_name,
    989                  v->ob_type->tp_name,
    990                  w->ob_type->tp_name);
    991     return NULL;
    992 }
    993 
    994 static PyObject *
    995 binary_op(PyObject *v, PyObject *w, const int op_slot, const char *op_name)
    996 {
    997     PyObject *result = binary_op1(v, w, op_slot);
    998     if (result == Py_NotImplemented) {
    999         Py_DECREF(result);
   1000         return binop_type_error(v, w, op_name);
   1001     }
   1002     return result;
   1003 }
   1004 
   1005 
   1006 /*
   1007   Calling scheme used for ternary operations:
   1008 
   1009   *** In some cases, w.op is called before v.op; see binary_op1. ***
   1010 
   1011   v     w       z       Action
   1012   -------------------------------------------------------------------
   1013   new   new     new     v.op(v,w,z), w.op(v,w,z), z.op(v,w,z)
   1014   new   old     new     v.op(v,w,z), z.op(v,w,z), coerce(v,w,z), v.op(v,w,z)
   1015   old   new     new     w.op(v,w,z), z.op(v,w,z), coerce(v,w,z), v.op(v,w,z)
   1016   old   old     new     z.op(v,w,z), coerce(v,w,z), v.op(v,w,z)
   1017   new   new     old     v.op(v,w,z), w.op(v,w,z), coerce(v,w,z), v.op(v,w,z)
   1018   new   old     old     v.op(v,w,z), coerce(v,w,z), v.op(v,w,z)
   1019   old   new     old     w.op(v,w,z), coerce(v,w,z), v.op(v,w,z)
   1020   old   old     old     coerce(v,w,z), v.op(v,w,z)
   1021 
   1022   Legend:
   1023   -------
   1024   * new == new style number
   1025   * old == old style number
   1026   * Action indicates the order in which operations are tried until either
   1027     a valid result is produced or an error occurs.
   1028   * coerce(v,w,z) actually does: coerce(v,w), coerce(v,z), coerce(w,z) and
   1029     only if z != Py_None; if z == Py_None, then it is treated as absent
   1030     variable and only coerce(v,w) is tried.
   1031 
   1032  */
   1033 
   1034 static PyObject *
   1035 ternary_op(PyObject *v,
   1036            PyObject *w,
   1037            PyObject *z,
   1038            const int op_slot,
   1039            const char *op_name)
   1040 {
   1041     PyNumberMethods *mv, *mw, *mz;
   1042     PyObject *x = NULL;
   1043     ternaryfunc slotv = NULL;
   1044     ternaryfunc slotw = NULL;
   1045     ternaryfunc slotz = NULL;
   1046 
   1047     mv = v->ob_type->tp_as_number;
   1048     mw = w->ob_type->tp_as_number;
   1049     if (mv != NULL && NEW_STYLE_NUMBER(v))
   1050         slotv = NB_TERNOP(mv, op_slot);
   1051     if (w->ob_type != v->ob_type &&
   1052         mw != NULL && NEW_STYLE_NUMBER(w)) {
   1053         slotw = NB_TERNOP(mw, op_slot);
   1054         if (slotw == slotv)
   1055             slotw = NULL;
   1056     }
   1057     if (slotv) {
   1058         if (slotw && PyType_IsSubtype(w->ob_type, v->ob_type)) {
   1059             x = slotw(v, w, z);
   1060             if (x != Py_NotImplemented)
   1061                 return x;
   1062             Py_DECREF(x); /* can't do it */
   1063             slotw = NULL;
   1064         }
   1065         x = slotv(v, w, z);
   1066         if (x != Py_NotImplemented)
   1067             return x;
   1068         Py_DECREF(x); /* can't do it */
   1069     }
   1070     if (slotw) {
   1071         x = slotw(v, w, z);
   1072         if (x != Py_NotImplemented)
   1073             return x;
   1074         Py_DECREF(x); /* can't do it */
   1075     }
   1076     mz = z->ob_type->tp_as_number;
   1077     if (mz != NULL && NEW_STYLE_NUMBER(z)) {
   1078         slotz = NB_TERNOP(mz, op_slot);
   1079         if (slotz == slotv || slotz == slotw)
   1080             slotz = NULL;
   1081         if (slotz) {
   1082             x = slotz(v, w, z);
   1083             if (x != Py_NotImplemented)
   1084                 return x;
   1085             Py_DECREF(x); /* can't do it */
   1086         }
   1087     }
   1088 
   1089     if (!NEW_STYLE_NUMBER(v) || !NEW_STYLE_NUMBER(w) ||
   1090                     (z != Py_None && !NEW_STYLE_NUMBER(z))) {
   1091         /* we have an old style operand, coerce */
   1092         PyObject *v1, *z1, *w2, *z2;
   1093         int c;
   1094 
   1095         c = PyNumber_Coerce(&v, &w);
   1096         if (c != 0)
   1097             goto error3;
   1098 
   1099         /* Special case: if the third argument is None, it is
   1100            treated as absent argument and not coerced. */
   1101         if (z == Py_None) {
   1102             if (v->ob_type->tp_as_number) {
   1103                 slotz = NB_TERNOP(v->ob_type->tp_as_number,
   1104                                   op_slot);
   1105                 if (slotz)
   1106                     x = slotz(v, w, z);
   1107                 else
   1108                     c = -1;
   1109             }
   1110             else
   1111                 c = -1;
   1112             goto error2;
   1113         }
   1114         v1 = v;
   1115         z1 = z;
   1116         c = PyNumber_Coerce(&v1, &z1);
   1117         if (c != 0)
   1118             goto error2;
   1119         w2 = w;
   1120         z2 = z1;
   1121         c = PyNumber_Coerce(&w2, &z2);
   1122         if (c != 0)
   1123             goto error1;
   1124 
   1125         if (v1->ob_type->tp_as_number != NULL) {
   1126             slotv = NB_TERNOP(v1->ob_type->tp_as_number,
   1127                               op_slot);
   1128             if (slotv)
   1129                 x = slotv(v1, w2, z2);
   1130             else
   1131                 c = -1;
   1132         }
   1133         else
   1134             c = -1;
   1135 
   1136         Py_DECREF(w2);
   1137         Py_DECREF(z2);
   1138     error1:
   1139         Py_DECREF(v1);
   1140         Py_DECREF(z1);
   1141     error2:
   1142         Py_DECREF(v);
   1143         Py_DECREF(w);
   1144     error3:
   1145         if (c >= 0)
   1146             return x;
   1147     }
   1148 
   1149     if (z == Py_None)
   1150         PyErr_Format(
   1151             PyExc_TypeError,
   1152             "unsupported operand type(s) for ** or pow(): "
   1153             "'%.100s' and '%.100s'",
   1154             v->ob_type->tp_name,
   1155             w->ob_type->tp_name);
   1156     else
   1157         PyErr_Format(
   1158             PyExc_TypeError,
   1159             "unsupported operand type(s) for pow(): "
   1160             "'%.100s', '%.100s', '%.100s'",
   1161             v->ob_type->tp_name,
   1162             w->ob_type->tp_name,
   1163             z->ob_type->tp_name);
   1164     return NULL;
   1165 }
   1166 
   1167 #define BINARY_FUNC(func, op, op_name) \
   1168     PyObject * \
   1169     func(PyObject *v, PyObject *w) { \
   1170         return binary_op(v, w, NB_SLOT(op), op_name); \
   1171     }
   1172 
   1173 BINARY_FUNC(PyNumber_Or, nb_or, "|")
   1174 BINARY_FUNC(PyNumber_Xor, nb_xor, "^")
   1175 BINARY_FUNC(PyNumber_And, nb_and, "&")
   1176 BINARY_FUNC(PyNumber_Lshift, nb_lshift, "<<")
   1177 BINARY_FUNC(PyNumber_Rshift, nb_rshift, ">>")
   1178 BINARY_FUNC(PyNumber_Subtract, nb_subtract, "-")
   1179 BINARY_FUNC(PyNumber_Divide, nb_divide, "/")
   1180 BINARY_FUNC(PyNumber_Divmod, nb_divmod, "divmod()")
   1181 
   1182 PyObject *
   1183 PyNumber_Add(PyObject *v, PyObject *w)
   1184 {
   1185     PyObject *result = binary_op1(v, w, NB_SLOT(nb_add));
   1186     if (result == Py_NotImplemented) {
   1187         PySequenceMethods *m = v->ob_type->tp_as_sequence;
   1188         Py_DECREF(result);
   1189         if (m && m->sq_concat) {
   1190             return (*m->sq_concat)(v, w);
   1191         }
   1192         result = binop_type_error(v, w, "+");
   1193     }
   1194     return result;
   1195 }
   1196 
   1197 static PyObject *
   1198 sequence_repeat(ssizeargfunc repeatfunc, PyObject *seq, PyObject *n)
   1199 {
   1200     Py_ssize_t count;
   1201     if (PyIndex_Check(n)) {
   1202         count = PyNumber_AsSsize_t(n, PyExc_OverflowError);
   1203         if (count == -1 && PyErr_Occurred())
   1204             return NULL;
   1205     }
   1206     else {
   1207         return type_error("can't multiply sequence by "
   1208                           "non-int of type '%.200s'", n);
   1209     }
   1210     return (*repeatfunc)(seq, count);
   1211 }
   1212 
   1213 PyObject *
   1214 PyNumber_Multiply(PyObject *v, PyObject *w)
   1215 {
   1216     PyObject *result = binary_op1(v, w, NB_SLOT(nb_multiply));
   1217     if (result == Py_NotImplemented) {
   1218         PySequenceMethods *mv = v->ob_type->tp_as_sequence;
   1219         PySequenceMethods *mw = w->ob_type->tp_as_sequence;
   1220         Py_DECREF(result);
   1221         if  (mv && mv->sq_repeat) {
   1222             return sequence_repeat(mv->sq_repeat, v, w);
   1223         }
   1224         else if (mw && mw->sq_repeat) {
   1225             return sequence_repeat(mw->sq_repeat, w, v);
   1226         }
   1227         result = binop_type_error(v, w, "*");
   1228     }
   1229     return result;
   1230 }
   1231 
   1232 PyObject *
   1233 PyNumber_FloorDivide(PyObject *v, PyObject *w)
   1234 {
   1235     /* XXX tp_flags test */
   1236     return binary_op(v, w, NB_SLOT(nb_floor_divide), "//");
   1237 }
   1238 
   1239 PyObject *
   1240 PyNumber_TrueDivide(PyObject *v, PyObject *w)
   1241 {
   1242     /* XXX tp_flags test */
   1243     return binary_op(v, w, NB_SLOT(nb_true_divide), "/");
   1244 }
   1245 
   1246 PyObject *
   1247 PyNumber_Remainder(PyObject *v, PyObject *w)
   1248 {
   1249     return binary_op(v, w, NB_SLOT(nb_remainder), "%");
   1250 }
   1251 
   1252 PyObject *
   1253 PyNumber_Power(PyObject *v, PyObject *w, PyObject *z)
   1254 {
   1255     return ternary_op(v, w, z, NB_SLOT(nb_power), "** or pow()");
   1256 }
   1257 
   1258 /* Binary in-place operators */
   1259 
   1260 /* The in-place operators are defined to fall back to the 'normal',
   1261    non in-place operations, if the in-place methods are not in place.
   1262 
   1263    - If the left hand object has the appropriate struct members, and
   1264      they are filled, call the appropriate function and return the
   1265      result.  No coercion is done on the arguments; the left-hand object
   1266      is the one the operation is performed on, and it's up to the
   1267      function to deal with the right-hand object.
   1268 
   1269    - Otherwise, in-place modification is not supported. Handle it exactly as
   1270      a non in-place operation of the same kind.
   1271 
   1272    */
   1273 
   1274 #define HASINPLACE(t) \
   1275     PyType_HasFeature((t)->ob_type, Py_TPFLAGS_HAVE_INPLACEOPS)
   1276 
   1277 static PyObject *
   1278 binary_iop1(PyObject *v, PyObject *w, const int iop_slot, const int op_slot)
   1279 {
   1280     PyNumberMethods *mv = v->ob_type->tp_as_number;
   1281     if (mv != NULL && HASINPLACE(v)) {
   1282         binaryfunc slot = NB_BINOP(mv, iop_slot);
   1283         if (slot) {
   1284             PyObject *x = (slot)(v, w);
   1285             if (x != Py_NotImplemented) {
   1286                 return x;
   1287             }
   1288             Py_DECREF(x);
   1289         }
   1290     }
   1291     return binary_op1(v, w, op_slot);
   1292 }
   1293 
   1294 static PyObject *
   1295 binary_iop(PyObject *v, PyObject *w, const int iop_slot, const int op_slot,
   1296                 const char *op_name)
   1297 {
   1298     PyObject *result = binary_iop1(v, w, iop_slot, op_slot);
   1299     if (result == Py_NotImplemented) {
   1300         Py_DECREF(result);
   1301         return binop_type_error(v, w, op_name);
   1302     }
   1303     return result;
   1304 }
   1305 
   1306 #define INPLACE_BINOP(func, iop, op, op_name) \
   1307     PyObject * \
   1308     func(PyObject *v, PyObject *w) { \
   1309         return binary_iop(v, w, NB_SLOT(iop), NB_SLOT(op), op_name); \
   1310     }
   1311 
   1312 INPLACE_BINOP(PyNumber_InPlaceOr, nb_inplace_or, nb_or, "|=")
   1313 INPLACE_BINOP(PyNumber_InPlaceXor, nb_inplace_xor, nb_xor, "^=")
   1314 INPLACE_BINOP(PyNumber_InPlaceAnd, nb_inplace_and, nb_and, "&=")
   1315 INPLACE_BINOP(PyNumber_InPlaceLshift, nb_inplace_lshift, nb_lshift, "<<=")
   1316 INPLACE_BINOP(PyNumber_InPlaceRshift, nb_inplace_rshift, nb_rshift, ">>=")
   1317 INPLACE_BINOP(PyNumber_InPlaceSubtract, nb_inplace_subtract, nb_subtract, "-=")
   1318 INPLACE_BINOP(PyNumber_InPlaceDivide, nb_inplace_divide, nb_divide, "/=")
   1319 
   1320 PyObject *
   1321 PyNumber_InPlaceFloorDivide(PyObject *v, PyObject *w)
   1322 {
   1323     /* XXX tp_flags test */
   1324     return binary_iop(v, w, NB_SLOT(nb_inplace_floor_divide),
   1325                       NB_SLOT(nb_floor_divide), "//=");
   1326 }
   1327 
   1328 PyObject *
   1329 PyNumber_InPlaceTrueDivide(PyObject *v, PyObject *w)
   1330 {
   1331     /* XXX tp_flags test */
   1332     return binary_iop(v, w, NB_SLOT(nb_inplace_true_divide),
   1333                       NB_SLOT(nb_true_divide), "/=");
   1334 }
   1335 
   1336 PyObject *
   1337 PyNumber_InPlaceAdd(PyObject *v, PyObject *w)
   1338 {
   1339     PyObject *result = binary_iop1(v, w, NB_SLOT(nb_inplace_add),
   1340                                    NB_SLOT(nb_add));
   1341     if (result == Py_NotImplemented) {
   1342         PySequenceMethods *m = v->ob_type->tp_as_sequence;
   1343         Py_DECREF(result);
   1344         if (m != NULL) {
   1345             binaryfunc f = NULL;
   1346             if (HASINPLACE(v))
   1347                 f = m->sq_inplace_concat;
   1348             if (f == NULL)
   1349                 f = m->sq_concat;
   1350             if (f != NULL)
   1351                 return (*f)(v, w);
   1352         }
   1353         result = binop_type_error(v, w, "+=");
   1354     }
   1355     return result;
   1356 }
   1357 
   1358 PyObject *
   1359 PyNumber_InPlaceMultiply(PyObject *v, PyObject *w)
   1360 {
   1361     PyObject *result = binary_iop1(v, w, NB_SLOT(nb_inplace_multiply),
   1362                                    NB_SLOT(nb_multiply));
   1363     if (result == Py_NotImplemented) {
   1364         ssizeargfunc f = NULL;
   1365         PySequenceMethods *mv = v->ob_type->tp_as_sequence;
   1366         PySequenceMethods *mw = w->ob_type->tp_as_sequence;
   1367         Py_DECREF(result);
   1368         if (mv != NULL) {
   1369             if (HASINPLACE(v))
   1370                 f = mv->sq_inplace_repeat;
   1371             if (f == NULL)
   1372                 f = mv->sq_repeat;
   1373             if (f != NULL)
   1374                 return sequence_repeat(f, v, w);
   1375         }
   1376         else if (mw != NULL) {
   1377             /* Note that the right hand operand should not be
   1378              * mutated in this case so sq_inplace_repeat is not
   1379              * used. */
   1380             if (mw->sq_repeat)
   1381                 return sequence_repeat(mw->sq_repeat, w, v);
   1382         }
   1383         result = binop_type_error(v, w, "*=");
   1384     }
   1385     return result;
   1386 }
   1387 
   1388 PyObject *
   1389 PyNumber_InPlaceRemainder(PyObject *v, PyObject *w)
   1390 {
   1391     return binary_iop(v, w, NB_SLOT(nb_inplace_remainder),
   1392                             NB_SLOT(nb_remainder), "%=");
   1393 }
   1394 
   1395 PyObject *
   1396 PyNumber_InPlacePower(PyObject *v, PyObject *w, PyObject *z)
   1397 {
   1398     if (HASINPLACE(v) && v->ob_type->tp_as_number &&
   1399         v->ob_type->tp_as_number->nb_inplace_power != NULL) {
   1400         return ternary_op(v, w, z, NB_SLOT(nb_inplace_power), "**=");
   1401     }
   1402     else {
   1403         return ternary_op(v, w, z, NB_SLOT(nb_power), "**=");
   1404     }
   1405 }
   1406 
   1407 
   1408 /* Unary operators and functions */
   1409 
   1410 PyObject *
   1411 PyNumber_Negative(PyObject *o)
   1412 {
   1413     PyNumberMethods *m;
   1414 
   1415     if (o == NULL)
   1416         return null_error();
   1417     m = o->ob_type->tp_as_number;
   1418     if (m && m->nb_negative)
   1419         return (*m->nb_negative)(o);
   1420 
   1421     return type_error("bad operand type for unary -: '%.200s'", o);
   1422 }
   1423 
   1424 PyObject *
   1425 PyNumber_Positive(PyObject *o)
   1426 {
   1427     PyNumberMethods *m;
   1428 
   1429     if (o == NULL)
   1430         return null_error();
   1431     m = o->ob_type->tp_as_number;
   1432     if (m && m->nb_positive)
   1433         return (*m->nb_positive)(o);
   1434 
   1435     return type_error("bad operand type for unary +: '%.200s'", o);
   1436 }
   1437 
   1438 PyObject *
   1439 PyNumber_Invert(PyObject *o)
   1440 {
   1441     PyNumberMethods *m;
   1442 
   1443     if (o == NULL)
   1444         return null_error();
   1445     m = o->ob_type->tp_as_number;
   1446     if (m && m->nb_invert)
   1447         return (*m->nb_invert)(o);
   1448 
   1449     return type_error("bad operand type for unary ~: '%.200s'", o);
   1450 }
   1451 
   1452 PyObject *
   1453 PyNumber_Absolute(PyObject *o)
   1454 {
   1455     PyNumberMethods *m;
   1456 
   1457     if (o == NULL)
   1458         return null_error();
   1459     m = o->ob_type->tp_as_number;
   1460     if (m && m->nb_absolute)
   1461         return m->nb_absolute(o);
   1462 
   1463     return type_error("bad operand type for abs(): '%.200s'", o);
   1464 }
   1465 
   1466 /* Add a check for embedded NULL-bytes in the argument. */
   1467 static PyObject *
   1468 int_from_string(const char *s, Py_ssize_t len)
   1469 {
   1470     char *end;
   1471     PyObject *x;
   1472 
   1473     x = PyInt_FromString((char*)s, &end, 10);
   1474     if (x == NULL)
   1475         return NULL;
   1476     if (end != s + len) {
   1477         PyErr_SetString(PyExc_ValueError,
   1478                         "null byte in argument for int()");
   1479         Py_DECREF(x);
   1480         return NULL;
   1481     }
   1482     return x;
   1483 }
   1484 
   1485 /* Return a Python Int or Long from the object item
   1486    Raise TypeError if the result is not an int-or-long
   1487    or if the object cannot be interpreted as an index.
   1488 */
   1489 PyObject *
   1490 PyNumber_Index(PyObject *item)
   1491 {
   1492     PyObject *result = NULL;
   1493     if (item == NULL)
   1494         return null_error();
   1495     if (_PyAnyInt_Check(item)) {
   1496         Py_INCREF(item);
   1497         return item;
   1498     }
   1499     if (PyIndex_Check(item)) {
   1500         result = item->ob_type->tp_as_number->nb_index(item);
   1501         if (result && !_PyAnyInt_Check(result)) {
   1502             PyErr_Format(PyExc_TypeError,
   1503                          "__index__ returned non-(int,long) " \
   1504                          "(type %.200s)",
   1505                          result->ob_type->tp_name);
   1506             Py_DECREF(result);
   1507             return NULL;
   1508         }
   1509     }
   1510     else {
   1511         PyErr_Format(PyExc_TypeError,
   1512                      "'%.200s' object cannot be interpreted "
   1513                      "as an index", item->ob_type->tp_name);
   1514     }
   1515     return result;
   1516 }
   1517 
   1518 /* Return an error on Overflow only if err is not NULL*/
   1519 
   1520 Py_ssize_t
   1521 PyNumber_AsSsize_t(PyObject *item, PyObject *err)
   1522 {
   1523     Py_ssize_t result;
   1524     PyObject *runerr;
   1525     PyObject *value = PyNumber_Index(item);
   1526     if (value == NULL)
   1527         return -1;
   1528 
   1529     /* We're done if PyInt_AsSsize_t() returns without error. */
   1530     result = PyInt_AsSsize_t(value);
   1531     if (result != -1 || !(runerr = PyErr_Occurred()))
   1532         goto finish;
   1533 
   1534     /* Error handling code -- only manage OverflowError differently */
   1535     if (!PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError))
   1536         goto finish;
   1537 
   1538     PyErr_Clear();
   1539     /* If no error-handling desired then the default clipping
   1540        is sufficient.
   1541      */
   1542     if (!err) {
   1543         assert(PyLong_Check(value));
   1544         /* Whether or not it is less than or equal to
   1545            zero is determined by the sign of ob_size
   1546         */
   1547         if (_PyLong_Sign(value) < 0)
   1548             result = PY_SSIZE_T_MIN;
   1549         else
   1550             result = PY_SSIZE_T_MAX;
   1551     }
   1552     else {
   1553         /* Otherwise replace the error with caller's error object. */
   1554         PyErr_Format(err,
   1555                      "cannot fit '%.200s' into an index-sized integer",
   1556                      item->ob_type->tp_name);
   1557     }
   1558 
   1559  finish:
   1560     Py_DECREF(value);
   1561     return result;
   1562 }
   1563 
   1564 
   1565 PyObject *
   1566 _PyNumber_ConvertIntegralToInt(PyObject *integral, const char* error_format)
   1567 {
   1568     const char *type_name;
   1569     static PyObject *int_name = NULL;
   1570     if (int_name == NULL) {
   1571         int_name = PyString_InternFromString("__int__");
   1572         if (int_name == NULL)
   1573             return NULL;
   1574     }
   1575 
   1576     if (integral && !_PyAnyInt_Check(integral)) {
   1577         /* Don't go through tp_as_number->nb_int to avoid
   1578            hitting the classic class fallback to __trunc__. */
   1579         PyObject *int_func = PyObject_GetAttr(integral, int_name);
   1580         if (int_func == NULL) {
   1581             PyErr_Clear(); /* Raise a different error. */
   1582             goto non_integral_error;
   1583         }
   1584         Py_DECREF(integral);
   1585         integral = PyEval_CallObject(int_func, NULL);
   1586         Py_DECREF(int_func);
   1587         if (integral && !_PyAnyInt_Check(integral)) {
   1588             goto non_integral_error;
   1589         }
   1590     }
   1591     return integral;
   1592 
   1593 non_integral_error:
   1594     if (PyInstance_Check(integral)) {
   1595         type_name = PyString_AS_STRING(((PyInstanceObject *)integral)
   1596                                        ->in_class->cl_name);
   1597     }
   1598     else {
   1599         type_name = integral->ob_type->tp_name;
   1600     }
   1601     PyErr_Format(PyExc_TypeError, error_format, type_name);
   1602     Py_DECREF(integral);
   1603     return NULL;
   1604 }
   1605 
   1606 
   1607 PyObject *
   1608 PyNumber_Int(PyObject *o)
   1609 {
   1610     PyNumberMethods *m;
   1611     static PyObject *trunc_name = NULL;
   1612     PyObject *trunc_func;
   1613     const char *buffer;
   1614     Py_ssize_t buffer_len;
   1615 
   1616     if (trunc_name == NULL) {
   1617         trunc_name = PyString_InternFromString("__trunc__");
   1618         if (trunc_name == NULL)
   1619             return NULL;
   1620     }
   1621 
   1622     if (o == NULL)
   1623         return null_error();
   1624     if (PyInt_CheckExact(o)) {
   1625         Py_INCREF(o);
   1626         return o;
   1627     }
   1628     m = o->ob_type->tp_as_number;
   1629     if (m && m->nb_int) { /* This should include subclasses of int */
   1630         /* Classic classes always take this branch. */
   1631         PyObject *res = m->nb_int(o);
   1632         if (res && !_PyAnyInt_Check(res)) {
   1633             PyErr_Format(PyExc_TypeError,
   1634                          "__int__ returned non-int (type %.200s)",
   1635                          res->ob_type->tp_name);
   1636             Py_DECREF(res);
   1637             return NULL;
   1638         }
   1639         return res;
   1640     }
   1641     if (PyInt_Check(o)) { /* An int subclass without nb_int */
   1642         PyIntObject *io = (PyIntObject*)o;
   1643         return PyInt_FromLong(io->ob_ival);
   1644     }
   1645     trunc_func = PyObject_GetAttr(o, trunc_name);
   1646     if (trunc_func) {
   1647         PyObject *truncated = PyEval_CallObject(trunc_func, NULL);
   1648         Py_DECREF(trunc_func);
   1649         /* __trunc__ is specified to return an Integral type, but
   1650            int() needs to return an int. */
   1651         return _PyNumber_ConvertIntegralToInt(
   1652             truncated,
   1653             "__trunc__ returned non-Integral (type %.200s)");
   1654     }
   1655     PyErr_Clear();  /* It's not an error if  o.__trunc__ doesn't exist. */
   1656 
   1657     if (PyString_Check(o))
   1658         return int_from_string(PyString_AS_STRING(o),
   1659                                PyString_GET_SIZE(o));
   1660 #ifdef Py_USING_UNICODE
   1661     if (PyUnicode_Check(o))
   1662         return PyInt_FromUnicode(PyUnicode_AS_UNICODE(o),
   1663                                  PyUnicode_GET_SIZE(o),
   1664                                  10);
   1665 #endif
   1666     if (!PyObject_AsCharBuffer(o, &buffer, &buffer_len)) {
   1667         PyObject *result, *str;
   1668 
   1669         /* Copy to NUL-terminated buffer. */
   1670         str = PyString_FromStringAndSize((const char *)buffer, buffer_len);
   1671         if (str == NULL)
   1672             return NULL;
   1673         result = int_from_string(PyString_AS_STRING(str), buffer_len);
   1674         Py_DECREF(str);
   1675         return result;
   1676     }
   1677 
   1678     return type_error("int() argument must be a string or a "
   1679                       "number, not '%.200s'", o);
   1680 }
   1681 
   1682 /* Add a check for embedded NULL-bytes in the argument. */
   1683 static PyObject *
   1684 long_from_string(const char *s, Py_ssize_t len)
   1685 {
   1686     char *end;
   1687     PyObject *x;
   1688 
   1689     x = PyLong_FromString((char*)s, &end, 10);
   1690     if (x == NULL)
   1691         return NULL;
   1692     if (end != s + len) {
   1693         PyErr_SetString(PyExc_ValueError,
   1694                         "null byte in argument for long()");
   1695         Py_DECREF(x);
   1696         return NULL;
   1697     }
   1698     return x;
   1699 }
   1700 
   1701 PyObject *
   1702 PyNumber_Long(PyObject *o)
   1703 {
   1704     PyNumberMethods *m;
   1705     static PyObject *trunc_name = NULL;
   1706     PyObject *trunc_func;
   1707     const char *buffer;
   1708     Py_ssize_t buffer_len;
   1709 
   1710     if (trunc_name == NULL) {
   1711         trunc_name = PyString_InternFromString("__trunc__");
   1712         if (trunc_name == NULL)
   1713             return NULL;
   1714     }
   1715 
   1716     if (o == NULL)
   1717         return null_error();
   1718     m = o->ob_type->tp_as_number;
   1719     if (m && m->nb_long) { /* This should include subclasses of long */
   1720         /* Classic classes always take this branch. */
   1721         PyObject *res = m->nb_long(o);
   1722         if (res == NULL)
   1723             return NULL;
   1724         if (PyInt_Check(res)) {
   1725             long value = PyInt_AS_LONG(res);
   1726             Py_DECREF(res);
   1727             return PyLong_FromLong(value);
   1728         }
   1729         else if (!PyLong_Check(res)) {
   1730             PyErr_Format(PyExc_TypeError,
   1731                          "__long__ returned non-long (type %.200s)",
   1732                          res->ob_type->tp_name);
   1733             Py_DECREF(res);
   1734             return NULL;
   1735         }
   1736         return res;
   1737     }
   1738     if (PyLong_Check(o)) /* A long subclass without nb_long */
   1739         return _PyLong_Copy((PyLongObject *)o);
   1740     trunc_func = PyObject_GetAttr(o, trunc_name);
   1741     if (trunc_func) {
   1742         PyObject *truncated = PyEval_CallObject(trunc_func, NULL);
   1743         PyObject *int_instance;
   1744         Py_DECREF(trunc_func);
   1745         /* __trunc__ is specified to return an Integral type,
   1746            but long() needs to return a long. */
   1747         int_instance = _PyNumber_ConvertIntegralToInt(
   1748             truncated,
   1749             "__trunc__ returned non-Integral (type %.200s)");
   1750         if (int_instance && PyInt_Check(int_instance)) {
   1751             /* Make sure that long() returns a long instance. */
   1752             long value = PyInt_AS_LONG(int_instance);
   1753             Py_DECREF(int_instance);
   1754             return PyLong_FromLong(value);
   1755         }
   1756         return int_instance;
   1757     }
   1758     PyErr_Clear();  /* It's not an error if  o.__trunc__ doesn't exist. */
   1759 
   1760     if (PyString_Check(o))
   1761         /* need to do extra error checking that PyLong_FromString()
   1762          * doesn't do.  In particular long('9.5') must raise an
   1763          * exception, not truncate the float.
   1764          */
   1765         return long_from_string(PyString_AS_STRING(o),
   1766                                 PyString_GET_SIZE(o));
   1767 #ifdef Py_USING_UNICODE
   1768     if (PyUnicode_Check(o))
   1769         /* The above check is done in PyLong_FromUnicode(). */
   1770         return PyLong_FromUnicode(PyUnicode_AS_UNICODE(o),
   1771                                   PyUnicode_GET_SIZE(o),
   1772                                   10);
   1773 #endif
   1774     if (!PyObject_AsCharBuffer(o, &buffer, &buffer_len)) {
   1775         PyObject *result, *str;
   1776 
   1777         /* Copy to NUL-terminated buffer. */
   1778         str = PyString_FromStringAndSize((const char *)buffer, buffer_len);
   1779         if (str == NULL)
   1780             return NULL;
   1781         result = long_from_string(PyString_AS_STRING(str), buffer_len);
   1782         Py_DECREF(str);
   1783         return result;
   1784     }
   1785     return type_error("long() argument must be a string or a "
   1786                       "number, not '%.200s'", o);
   1787 }
   1788 
   1789 PyObject *
   1790 PyNumber_Float(PyObject *o)
   1791 {
   1792     PyNumberMethods *m;
   1793 
   1794     if (o == NULL)
   1795         return null_error();
   1796     m = o->ob_type->tp_as_number;
   1797     if (m && m->nb_float) { /* This should include subclasses of float */
   1798         PyObject *res = m->nb_float(o);
   1799         if (res && !PyFloat_Check(res)) {
   1800             PyErr_Format(PyExc_TypeError,
   1801               "__float__ returned non-float (type %.200s)",
   1802               res->ob_type->tp_name);
   1803             Py_DECREF(res);
   1804             return NULL;
   1805         }
   1806         return res;
   1807     }
   1808     if (PyFloat_Check(o)) { /* A float subclass with nb_float == NULL */
   1809         PyFloatObject *po = (PyFloatObject *)o;
   1810         return PyFloat_FromDouble(po->ob_fval);
   1811     }
   1812     return PyFloat_FromString(o, NULL);
   1813 }
   1814 
   1815 PyObject *
   1816 PyNumber_ToBase(PyObject *n, int base)
   1817 {
   1818     PyObject *res = NULL;
   1819     PyObject *index = PyNumber_Index(n);
   1820 
   1821     if (!index)
   1822         return NULL;
   1823     if (PyLong_Check(index))
   1824         res = _PyLong_Format(index, base, 0, 1);
   1825     else if (PyInt_Check(index))
   1826         res = _PyInt_Format((PyIntObject*)index, base, 1);
   1827     else
   1828         /* It should not be possible to get here, as
   1829            PyNumber_Index already has a check for the same
   1830            condition */
   1831         PyErr_SetString(PyExc_ValueError, "PyNumber_ToBase: index not "
   1832                         "int or long");
   1833     Py_DECREF(index);
   1834     return res;
   1835 }
   1836 
   1837 
   1838 /* Operations on sequences */
   1839 
   1840 int
   1841 PySequence_Check(PyObject *s)
   1842 {
   1843     if (s == NULL)
   1844         return 0;
   1845     if (PyInstance_Check(s))
   1846         return PyObject_HasAttrString(s, "__getitem__");
   1847     if (PyDict_Check(s))
   1848         return 0;
   1849     return  s->ob_type->tp_as_sequence &&
   1850         s->ob_type->tp_as_sequence->sq_item != NULL;
   1851 }
   1852 
   1853 Py_ssize_t
   1854 PySequence_Size(PyObject *s)
   1855 {
   1856     PySequenceMethods *m;
   1857 
   1858     if (s == NULL) {
   1859         null_error();
   1860         return -1;
   1861     }
   1862 
   1863     m = s->ob_type->tp_as_sequence;
   1864     if (m && m->sq_length)
   1865         return m->sq_length(s);
   1866 
   1867     type_error("object of type '%.200s' has no len()", s);
   1868     return -1;
   1869 }
   1870 
   1871 #undef PySequence_Length
   1872 Py_ssize_t
   1873 PySequence_Length(PyObject *s)
   1874 {
   1875     return PySequence_Size(s);
   1876 }
   1877 #define PySequence_Length PySequence_Size
   1878 
   1879 PyObject *
   1880 PySequence_Concat(PyObject *s, PyObject *o)
   1881 {
   1882     PySequenceMethods *m;
   1883 
   1884     if (s == NULL || o == NULL)
   1885         return null_error();
   1886 
   1887     m = s->ob_type->tp_as_sequence;
   1888     if (m && m->sq_concat)
   1889         return m->sq_concat(s, o);
   1890 
   1891     /* Instances of user classes defining an __add__() method only
   1892        have an nb_add slot, not an sq_concat slot.  So we fall back
   1893        to nb_add if both arguments appear to be sequences. */
   1894     if (PySequence_Check(s) && PySequence_Check(o)) {
   1895         PyObject *result = binary_op1(s, o, NB_SLOT(nb_add));
   1896         if (result != Py_NotImplemented)
   1897             return result;
   1898         Py_DECREF(result);
   1899     }
   1900     return type_error("'%.200s' object can't be concatenated", s);
   1901 }
   1902 
   1903 PyObject *
   1904 PySequence_Repeat(PyObject *o, Py_ssize_t count)
   1905 {
   1906     PySequenceMethods *m;
   1907 
   1908     if (o == NULL)
   1909         return null_error();
   1910 
   1911     m = o->ob_type->tp_as_sequence;
   1912     if (m && m->sq_repeat)
   1913         return m->sq_repeat(o, count);
   1914 
   1915     /* Instances of user classes defining a __mul__() method only
   1916        have an nb_multiply slot, not an sq_repeat slot. so we fall back
   1917        to nb_multiply if o appears to be a sequence. */
   1918     if (PySequence_Check(o)) {
   1919         PyObject *n, *result;
   1920         n = PyInt_FromSsize_t(count);
   1921         if (n == NULL)
   1922             return NULL;
   1923         result = binary_op1(o, n, NB_SLOT(nb_multiply));
   1924         Py_DECREF(n);
   1925         if (result != Py_NotImplemented)
   1926             return result;
   1927         Py_DECREF(result);
   1928     }
   1929     return type_error("'%.200s' object can't be repeated", o);
   1930 }
   1931 
   1932 PyObject *
   1933 PySequence_InPlaceConcat(PyObject *s, PyObject *o)
   1934 {
   1935     PySequenceMethods *m;
   1936 
   1937     if (s == NULL || o == NULL)
   1938         return null_error();
   1939 
   1940     m = s->ob_type->tp_as_sequence;
   1941     if (m && HASINPLACE(s) && m->sq_inplace_concat)
   1942         return m->sq_inplace_concat(s, o);
   1943     if (m && m->sq_concat)
   1944         return m->sq_concat(s, o);
   1945 
   1946     if (PySequence_Check(s) && PySequence_Check(o)) {
   1947         PyObject *result = binary_iop1(s, o, NB_SLOT(nb_inplace_add),
   1948                                        NB_SLOT(nb_add));
   1949         if (result != Py_NotImplemented)
   1950             return result;
   1951         Py_DECREF(result);
   1952     }
   1953     return type_error("'%.200s' object can't be concatenated", s);
   1954 }
   1955 
   1956 PyObject *
   1957 PySequence_InPlaceRepeat(PyObject *o, Py_ssize_t count)
   1958 {
   1959     PySequenceMethods *m;
   1960 
   1961     if (o == NULL)
   1962         return null_error();
   1963 
   1964     m = o->ob_type->tp_as_sequence;
   1965     if (m && HASINPLACE(o) && m->sq_inplace_repeat)
   1966         return m->sq_inplace_repeat(o, count);
   1967     if (m && m->sq_repeat)
   1968         return m->sq_repeat(o, count);
   1969 
   1970     if (PySequence_Check(o)) {
   1971         PyObject *n, *result;
   1972         n = PyInt_FromSsize_t(count);
   1973         if (n == NULL)
   1974             return NULL;
   1975         result = binary_iop1(o, n, NB_SLOT(nb_inplace_multiply),
   1976                              NB_SLOT(nb_multiply));
   1977         Py_DECREF(n);
   1978         if (result != Py_NotImplemented)
   1979             return result;
   1980         Py_DECREF(result);
   1981     }
   1982     return type_error("'%.200s' object can't be repeated", o);
   1983 }
   1984 
   1985 PyObject *
   1986 PySequence_GetItem(PyObject *s, Py_ssize_t i)
   1987 {
   1988     PySequenceMethods *m;
   1989 
   1990     if (s == NULL)
   1991         return null_error();
   1992 
   1993     m = s->ob_type->tp_as_sequence;
   1994     if (m && m->sq_item) {
   1995         if (i < 0) {
   1996             if (m->sq_length) {
   1997                 Py_ssize_t l = (*m->sq_length)(s);
   1998                 if (l < 0)
   1999                     return NULL;
   2000                 i += l;
   2001             }
   2002         }
   2003         return m->sq_item(s, i);
   2004     }
   2005 
   2006     return type_error("'%.200s' object does not support indexing", s);
   2007 }
   2008 
   2009 PyObject *
   2010 PySequence_GetSlice(PyObject *s, Py_ssize_t i1, Py_ssize_t i2)
   2011 {
   2012     PySequenceMethods *m;
   2013     PyMappingMethods *mp;
   2014 
   2015     if (!s) return null_error();
   2016 
   2017     m = s->ob_type->tp_as_sequence;
   2018     if (m && m->sq_slice) {
   2019         if (i1 < 0 || i2 < 0) {
   2020             if (m->sq_length) {
   2021                 Py_ssize_t l = (*m->sq_length)(s);
   2022                 if (l < 0)
   2023                     return NULL;
   2024                 if (i1 < 0)
   2025                     i1 += l;
   2026                 if (i2 < 0)
   2027                     i2 += l;
   2028             }
   2029         }
   2030         return m->sq_slice(s, i1, i2);
   2031     } else if ((mp = s->ob_type->tp_as_mapping) && mp->mp_subscript) {
   2032         PyObject *res;
   2033         PyObject *slice = _PySlice_FromIndices(i1, i2);
   2034         if (!slice)
   2035             return NULL;
   2036         res = mp->mp_subscript(s, slice);
   2037         Py_DECREF(slice);
   2038         return res;
   2039     }
   2040 
   2041     return type_error("'%.200s' object is unsliceable", s);
   2042 }
   2043 
   2044 int
   2045 PySequence_SetItem(PyObject *s, Py_ssize_t i, PyObject *o)
   2046 {
   2047     PySequenceMethods *m;
   2048 
   2049     if (s == NULL) {
   2050         null_error();
   2051         return -1;
   2052     }
   2053 
   2054     m = s->ob_type->tp_as_sequence;
   2055     if (m && m->sq_ass_item) {
   2056         if (i < 0) {
   2057             if (m->sq_length) {
   2058                 Py_ssize_t l = (*m->sq_length)(s);
   2059                 if (l < 0)
   2060                     return -1;
   2061                 i += l;
   2062             }
   2063         }
   2064         return m->sq_ass_item(s, i, o);
   2065     }
   2066 
   2067     type_error("'%.200s' object does not support item assignment", s);
   2068     return -1;
   2069 }
   2070 
   2071 int
   2072 PySequence_DelItem(PyObject *s, Py_ssize_t i)
   2073 {
   2074     PySequenceMethods *m;
   2075 
   2076     if (s == NULL) {
   2077         null_error();
   2078         return -1;
   2079     }
   2080 
   2081     m = s->ob_type->tp_as_sequence;
   2082     if (m && m->sq_ass_item) {
   2083         if (i < 0) {
   2084             if (m->sq_length) {
   2085                 Py_ssize_t l = (*m->sq_length)(s);
   2086                 if (l < 0)
   2087                     return -1;
   2088                 i += l;
   2089             }
   2090         }
   2091         return m->sq_ass_item(s, i, (PyObject *)NULL);
   2092     }
   2093 
   2094     type_error("'%.200s' object doesn't support item deletion", s);
   2095     return -1;
   2096 }
   2097 
   2098 int
   2099 PySequence_SetSlice(PyObject *s, Py_ssize_t i1, Py_ssize_t i2, PyObject *o)
   2100 {
   2101     PySequenceMethods *m;
   2102     PyMappingMethods *mp;
   2103 
   2104     if (s == NULL) {
   2105         null_error();
   2106         return -1;
   2107     }
   2108 
   2109     m = s->ob_type->tp_as_sequence;
   2110     if (m && m->sq_ass_slice) {
   2111         if (i1 < 0 || i2 < 0) {
   2112             if (m->sq_length) {
   2113                 Py_ssize_t l = (*m->sq_length)(s);
   2114                 if (l < 0)
   2115                     return -1;
   2116                 if (i1 < 0)
   2117                     i1 += l;
   2118                 if (i2 < 0)
   2119                     i2 += l;
   2120             }
   2121         }
   2122         return m->sq_ass_slice(s, i1, i2, o);
   2123     } else if ((mp = s->ob_type->tp_as_mapping) && mp->mp_ass_subscript) {
   2124         int res;
   2125         PyObject *slice = _PySlice_FromIndices(i1, i2);
   2126         if (!slice)
   2127             return -1;
   2128         res = mp->mp_ass_subscript(s, slice, o);
   2129         Py_DECREF(slice);
   2130         return res;
   2131     }
   2132 
   2133     type_error("'%.200s' object doesn't support slice assignment", s);
   2134     return -1;
   2135 }
   2136 
   2137 int
   2138 PySequence_DelSlice(PyObject *s, Py_ssize_t i1, Py_ssize_t i2)
   2139 {
   2140     PySequenceMethods *m;
   2141 
   2142     if (s == NULL) {
   2143         null_error();
   2144         return -1;
   2145     }
   2146 
   2147     m = s->ob_type->tp_as_sequence;
   2148     if (m && m->sq_ass_slice) {
   2149         if (i1 < 0 || i2 < 0) {
   2150             if (m->sq_length) {
   2151                 Py_ssize_t l = (*m->sq_length)(s);
   2152                 if (l < 0)
   2153                     return -1;
   2154                 if (i1 < 0)
   2155                     i1 += l;
   2156                 if (i2 < 0)
   2157                     i2 += l;
   2158             }
   2159         }
   2160         return m->sq_ass_slice(s, i1, i2, (PyObject *)NULL);
   2161     }
   2162     type_error("'%.200s' object doesn't support slice deletion", s);
   2163     return -1;
   2164 }
   2165 
   2166 PyObject *
   2167 PySequence_Tuple(PyObject *v)
   2168 {
   2169     PyObject *it;  /* iter(v) */
   2170     Py_ssize_t n;         /* guess for result tuple size */
   2171     PyObject *result = NULL;
   2172     Py_ssize_t j;
   2173 
   2174     if (v == NULL)
   2175         return null_error();
   2176 
   2177     /* Special-case the common tuple and list cases, for efficiency. */
   2178     if (PyTuple_CheckExact(v)) {
   2179         /* Note that we can't know whether it's safe to return
   2180            a tuple *subclass* instance as-is, hence the restriction
   2181            to exact tuples here.  In contrast, lists always make
   2182            a copy, so there's no need for exactness below. */
   2183         Py_INCREF(v);
   2184         return v;
   2185     }
   2186     if (PyList_CheckExact(v))
   2187         return PyList_AsTuple(v);
   2188 
   2189     /* Get iterator. */
   2190     it = PyObject_GetIter(v);
   2191     if (it == NULL)
   2192         return NULL;
   2193 
   2194     /* Guess result size and allocate space. */
   2195     n = _PyObject_LengthHint(v, 10);
   2196     if (n == -1)
   2197         goto Fail;
   2198     result = PyTuple_New(n);
   2199     if (result == NULL)
   2200         goto Fail;
   2201 
   2202     /* Fill the tuple. */
   2203     for (j = 0; ; ++j) {
   2204         PyObject *item = PyIter_Next(it);
   2205         if (item == NULL) {
   2206             if (PyErr_Occurred())
   2207                 goto Fail;
   2208             break;
   2209         }
   2210         if (j >= n) {
   2211             size_t newn = (size_t)n;
   2212             /* The over-allocation strategy can grow a bit faster
   2213                than for lists because unlike lists the
   2214                over-allocation isn't permanent -- we reclaim
   2215                the excess before the end of this routine.
   2216                So, grow by ten and then add 25%.
   2217             */
   2218             newn += 10u;
   2219             newn += newn >> 2;
   2220             if (newn > PY_SSIZE_T_MAX) {
   2221                 /* Check for overflow */
   2222                 PyErr_NoMemory();
   2223                 Py_DECREF(item);
   2224                 goto Fail;
   2225             }
   2226             n = (Py_ssize_t)newn;
   2227             if (_PyTuple_Resize(&result, n) != 0) {
   2228                 Py_DECREF(item);
   2229                 goto Fail;
   2230             }
   2231         }
   2232         PyTuple_SET_ITEM(result, j, item);
   2233     }
   2234 
   2235     /* Cut tuple back if guess was too large. */
   2236     if (j < n &&
   2237         _PyTuple_Resize(&result, j) != 0)
   2238         goto Fail;
   2239 
   2240     Py_DECREF(it);
   2241     return result;
   2242 
   2243 Fail:
   2244     Py_XDECREF(result);
   2245     Py_DECREF(it);
   2246     return NULL;
   2247 }
   2248 
   2249 PyObject *
   2250 PySequence_List(PyObject *v)
   2251 {
   2252     PyObject *result;  /* result list */
   2253     PyObject *rv;      /* return value from PyList_Extend */
   2254 
   2255     if (v == NULL)
   2256         return null_error();
   2257 
   2258     result = PyList_New(0);
   2259     if (result == NULL)
   2260         return NULL;
   2261 
   2262     rv = _PyList_Extend((PyListObject *)result, v);
   2263     if (rv == NULL) {
   2264         Py_DECREF(result);
   2265         return NULL;
   2266     }
   2267     Py_DECREF(rv);
   2268     return result;
   2269 }
   2270 
   2271 PyObject *
   2272 PySequence_Fast(PyObject *v, const char *m)
   2273 {
   2274     PyObject *it;
   2275 
   2276     if (v == NULL)
   2277         return null_error();
   2278 
   2279     if (PyList_CheckExact(v) || PyTuple_CheckExact(v)) {
   2280         Py_INCREF(v);
   2281         return v;
   2282     }
   2283 
   2284     it = PyObject_GetIter(v);
   2285     if (it == NULL) {
   2286         if (PyErr_ExceptionMatches(PyExc_TypeError))
   2287             PyErr_SetString(PyExc_TypeError, m);
   2288         return NULL;
   2289     }
   2290 
   2291     v = PySequence_List(it);
   2292     Py_DECREF(it);
   2293 
   2294     return v;
   2295 }
   2296 
   2297 /* Iterate over seq.  Result depends on the operation:
   2298    PY_ITERSEARCH_COUNT:  -1 if error, else # of times obj appears in seq.
   2299    PY_ITERSEARCH_INDEX:  0-based index of first occurrence of obj in seq;
   2300     set ValueError and return -1 if none found; also return -1 on error.
   2301    Py_ITERSEARCH_CONTAINS:  return 1 if obj in seq, else 0; -1 on error.
   2302 */
   2303 Py_ssize_t
   2304 _PySequence_IterSearch(PyObject *seq, PyObject *obj, int operation)
   2305 {
   2306     Py_ssize_t n;
   2307     int wrapped;  /* for PY_ITERSEARCH_INDEX, true iff n wrapped around */
   2308     PyObject *it;  /* iter(seq) */
   2309 
   2310     if (seq == NULL || obj == NULL) {
   2311         null_error();
   2312         return -1;
   2313     }
   2314 
   2315     it = PyObject_GetIter(seq);
   2316     if (it == NULL) {
   2317         type_error("argument of type '%.200s' is not iterable", seq);
   2318         return -1;
   2319     }
   2320 
   2321     n = wrapped = 0;
   2322     for (;;) {
   2323         int cmp;
   2324         PyObject *item = PyIter_Next(it);
   2325         if (item == NULL) {
   2326             if (PyErr_Occurred())
   2327                 goto Fail;
   2328             break;
   2329         }
   2330 
   2331         cmp = PyObject_RichCompareBool(obj, item, Py_EQ);
   2332         Py_DECREF(item);
   2333         if (cmp < 0)
   2334             goto Fail;
   2335         if (cmp > 0) {
   2336             switch (operation) {
   2337             case PY_ITERSEARCH_COUNT:
   2338                 if (n == PY_SSIZE_T_MAX) {
   2339                     PyErr_SetString(PyExc_OverflowError,
   2340                            "count exceeds C integer size");
   2341                     goto Fail;
   2342                 }
   2343                 ++n;
   2344                 break;
   2345 
   2346             case PY_ITERSEARCH_INDEX:
   2347                 if (wrapped) {
   2348                     PyErr_SetString(PyExc_OverflowError,
   2349                            "index exceeds C integer size");
   2350                     goto Fail;
   2351                 }
   2352                 goto Done;
   2353 
   2354             case PY_ITERSEARCH_CONTAINS:
   2355                 n = 1;
   2356                 goto Done;
   2357 
   2358             default:
   2359                 assert(!"unknown operation");
   2360             }
   2361         }
   2362 
   2363         if (operation == PY_ITERSEARCH_INDEX) {
   2364             if (n == PY_SSIZE_T_MAX)
   2365                 wrapped = 1;
   2366             ++n;
   2367         }
   2368     }
   2369 
   2370     if (operation != PY_ITERSEARCH_INDEX)
   2371         goto Done;
   2372 
   2373     PyErr_SetString(PyExc_ValueError,
   2374                     "sequence.index(x): x not in sequence");
   2375     /* fall into failure code */
   2376 Fail:
   2377     n = -1;
   2378     /* fall through */
   2379 Done:
   2380     Py_DECREF(it);
   2381     return n;
   2382 
   2383 }
   2384 
   2385 /* Return # of times o appears in s. */
   2386 Py_ssize_t
   2387 PySequence_Count(PyObject *s, PyObject *o)
   2388 {
   2389     return _PySequence_IterSearch(s, o, PY_ITERSEARCH_COUNT);
   2390 }
   2391 
   2392 /* Return -1 if error; 1 if ob in seq; 0 if ob not in seq.
   2393  * Use sq_contains if possible, else defer to _PySequence_IterSearch().
   2394  */
   2395 int
   2396 PySequence_Contains(PyObject *seq, PyObject *ob)
   2397 {
   2398     Py_ssize_t result;
   2399     if (PyType_HasFeature(seq->ob_type, Py_TPFLAGS_HAVE_SEQUENCE_IN)) {
   2400         PySequenceMethods *sqm = seq->ob_type->tp_as_sequence;
   2401         if (sqm != NULL && sqm->sq_contains != NULL)
   2402             return (*sqm->sq_contains)(seq, ob);
   2403     }
   2404     result = _PySequence_IterSearch(seq, ob, PY_ITERSEARCH_CONTAINS);
   2405     return Py_SAFE_DOWNCAST(result, Py_ssize_t, int);
   2406 }
   2407 
   2408 /* Backwards compatibility */
   2409 #undef PySequence_In
   2410 int
   2411 PySequence_In(PyObject *w, PyObject *v)
   2412 {
   2413     return PySequence_Contains(w, v);
   2414 }
   2415 
   2416 Py_ssize_t
   2417 PySequence_Index(PyObject *s, PyObject *o)
   2418 {
   2419     return _PySequence_IterSearch(s, o, PY_ITERSEARCH_INDEX);
   2420 }
   2421 
   2422 /* Operations on mappings */
   2423 
   2424 int
   2425 PyMapping_Check(PyObject *o)
   2426 {
   2427     if (o && PyInstance_Check(o))
   2428         return PyObject_HasAttrString(o, "__getitem__");
   2429 
   2430     return  o && o->ob_type->tp_as_mapping &&
   2431         o->ob_type->tp_as_mapping->mp_subscript &&
   2432         !(o->ob_type->tp_as_sequence &&
   2433           o->ob_type->tp_as_sequence->sq_slice);
   2434 }
   2435 
   2436 Py_ssize_t
   2437 PyMapping_Size(PyObject *o)
   2438 {
   2439     PyMappingMethods *m;
   2440 
   2441     if (o == NULL) {
   2442         null_error();
   2443         return -1;
   2444     }
   2445 
   2446     m = o->ob_type->tp_as_mapping;
   2447     if (m && m->mp_length)
   2448         return m->mp_length(o);
   2449 
   2450     type_error("object of type '%.200s' has no len()", o);
   2451     return -1;
   2452 }
   2453 
   2454 #undef PyMapping_Length
   2455 Py_ssize_t
   2456 PyMapping_Length(PyObject *o)
   2457 {
   2458     return PyMapping_Size(o);
   2459 }
   2460 #define PyMapping_Length PyMapping_Size
   2461 
   2462 PyObject *
   2463 PyMapping_GetItemString(PyObject *o, char *key)
   2464 {
   2465     PyObject *okey, *r;
   2466 
   2467     if (key == NULL)
   2468         return null_error();
   2469 
   2470     okey = PyString_FromString(key);
   2471     if (okey == NULL)
   2472         return NULL;
   2473     r = PyObject_GetItem(o, okey);
   2474     Py_DECREF(okey);
   2475     return r;
   2476 }
   2477 
   2478 int
   2479 PyMapping_SetItemString(PyObject *o, char *key, PyObject *value)
   2480 {
   2481     PyObject *okey;
   2482     int r;
   2483 
   2484     if (key == NULL) {
   2485         null_error();
   2486         return -1;
   2487     }
   2488 
   2489     okey = PyString_FromString(key);
   2490     if (okey == NULL)
   2491         return -1;
   2492     r = PyObject_SetItem(o, okey, value);
   2493     Py_DECREF(okey);
   2494     return r;
   2495 }
   2496 
   2497 int
   2498 PyMapping_HasKeyString(PyObject *o, char *key)
   2499 {
   2500     PyObject *v;
   2501 
   2502     v = PyMapping_GetItemString(o, key);
   2503     if (v) {
   2504         Py_DECREF(v);
   2505         return 1;
   2506     }
   2507     PyErr_Clear();
   2508     return 0;
   2509 }
   2510 
   2511 int
   2512 PyMapping_HasKey(PyObject *o, PyObject *key)
   2513 {
   2514     PyObject *v;
   2515 
   2516     v = PyObject_GetItem(o, key);
   2517     if (v) {
   2518         Py_DECREF(v);
   2519         return 1;
   2520     }
   2521     PyErr_Clear();
   2522     return 0;
   2523 }
   2524 
   2525 /* Operations on callable objects */
   2526 
   2527 /* XXX PyCallable_Check() is in object.c */
   2528 
   2529 PyObject *
   2530 PyObject_CallObject(PyObject *o, PyObject *a)
   2531 {
   2532     return PyEval_CallObjectWithKeywords(o, a, NULL);
   2533 }
   2534 
   2535 PyObject *
   2536 PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw)
   2537 {
   2538     ternaryfunc call;
   2539 
   2540     if ((call = func->ob_type->tp_call) != NULL) {
   2541         PyObject *result;
   2542         if (Py_EnterRecursiveCall(" while calling a Python object"))
   2543             return NULL;
   2544         result = (*call)(func, arg, kw);
   2545         Py_LeaveRecursiveCall();
   2546         if (result == NULL && !PyErr_Occurred())
   2547             PyErr_SetString(
   2548                 PyExc_SystemError,
   2549                 "NULL result without error in PyObject_Call");
   2550         return result;
   2551     }
   2552     PyErr_Format(PyExc_TypeError, "'%.200s' object is not callable",
   2553                  func->ob_type->tp_name);
   2554     return NULL;
   2555 }
   2556 
   2557 static PyObject*
   2558 call_function_tail(PyObject *callable, PyObject *args)
   2559 {
   2560     PyObject *retval;
   2561 
   2562     if (args == NULL)
   2563         return NULL;
   2564 
   2565     if (!PyTuple_Check(args)) {
   2566         PyObject *a;
   2567 
   2568         a = PyTuple_New(1);
   2569         if (a == NULL) {
   2570             Py_DECREF(args);
   2571             return NULL;
   2572         }
   2573         PyTuple_SET_ITEM(a, 0, args);
   2574         args = a;
   2575     }
   2576     retval = PyObject_Call(callable, args, NULL);
   2577 
   2578     Py_DECREF(args);
   2579 
   2580     return retval;
   2581 }
   2582 
   2583 PyObject *
   2584 PyObject_CallFunction(PyObject *callable, char *format, ...)
   2585 {
   2586     va_list va;
   2587     PyObject *args;
   2588 
   2589     if (callable == NULL)
   2590         return null_error();
   2591 
   2592     if (format && *format) {
   2593         va_start(va, format);
   2594         args = Py_VaBuildValue(format, va);
   2595         va_end(va);
   2596     }
   2597     else
   2598         args = PyTuple_New(0);
   2599 
   2600     return call_function_tail(callable, args);
   2601 }
   2602 
   2603 PyObject *
   2604 _PyObject_CallFunction_SizeT(PyObject *callable, char *format, ...)
   2605 {
   2606     va_list va;
   2607     PyObject *args;
   2608 
   2609     if (callable == NULL)
   2610         return null_error();
   2611 
   2612     if (format && *format) {
   2613         va_start(va, format);
   2614         args = _Py_VaBuildValue_SizeT(format, va);
   2615         va_end(va);
   2616     }
   2617     else
   2618         args = PyTuple_New(0);
   2619 
   2620     return call_function_tail(callable, args);
   2621 }
   2622 
   2623 PyObject *
   2624 PyObject_CallMethod(PyObject *o, char *name, char *format, ...)
   2625 {
   2626     va_list va;
   2627     PyObject *args;
   2628     PyObject *func = NULL;
   2629     PyObject *retval = NULL;
   2630 
   2631     if (o == NULL || name == NULL)
   2632         return null_error();
   2633 
   2634     func = PyObject_GetAttrString(o, name);
   2635     if (func == NULL)
   2636         return NULL;
   2637 
   2638     if (!PyCallable_Check(func)) {
   2639         type_error("attribute of type '%.200s' is not callable", func);
   2640         goto exit;
   2641     }
   2642 
   2643     if (format && *format) {
   2644         va_start(va, format);
   2645         args = Py_VaBuildValue(format, va);
   2646         va_end(va);
   2647     }
   2648     else
   2649         args = PyTuple_New(0);
   2650 
   2651     retval = call_function_tail(func, args);
   2652 
   2653   exit:
   2654     /* args gets consumed in call_function_tail */
   2655     Py_XDECREF(func);
   2656 
   2657     return retval;
   2658 }
   2659 
   2660 PyObject *
   2661 _PyObject_CallMethod_SizeT(PyObject *o, char *name, char *format, ...)
   2662 {
   2663     va_list va;
   2664     PyObject *args;
   2665     PyObject *func = NULL;
   2666     PyObject *retval = NULL;
   2667 
   2668     if (o == NULL || name == NULL)
   2669         return null_error();
   2670 
   2671     func = PyObject_GetAttrString(o, name);
   2672     if (func == NULL)
   2673         return NULL;
   2674 
   2675     if (!PyCallable_Check(func)) {
   2676         type_error("attribute of type '%.200s' is not callable", func);
   2677         goto exit;
   2678     }
   2679 
   2680     if (format && *format) {
   2681         va_start(va, format);
   2682         args = _Py_VaBuildValue_SizeT(format, va);
   2683         va_end(va);
   2684     }
   2685     else
   2686         args = PyTuple_New(0);
   2687 
   2688     retval = call_function_tail(func, args);
   2689 
   2690   exit:
   2691     /* args gets consumed in call_function_tail */
   2692     Py_XDECREF(func);
   2693 
   2694     return retval;
   2695 }
   2696 
   2697 
   2698 static PyObject *
   2699 objargs_mktuple(va_list va)
   2700 {
   2701     int i, n = 0;
   2702     va_list countva;
   2703     PyObject *result, *tmp;
   2704 
   2705 #ifdef VA_LIST_IS_ARRAY
   2706     memcpy(countva, va, sizeof(va_list));
   2707 #else
   2708 #ifdef __va_copy
   2709     __va_copy(countva, va);
   2710 #else
   2711     countva = va;
   2712 #endif
   2713 #endif
   2714 
   2715     while (((PyObject *)va_arg(countva, PyObject *)) != NULL)
   2716         ++n;
   2717     result = PyTuple_New(n);
   2718     if (result != NULL && n > 0) {
   2719         for (i = 0; i < n; ++i) {
   2720             tmp = (PyObject *)va_arg(va, PyObject *);
   2721             PyTuple_SET_ITEM(result, i, tmp);
   2722             Py_INCREF(tmp);
   2723         }
   2724     }
   2725     return result;
   2726 }
   2727 
   2728 PyObject *
   2729 PyObject_CallMethodObjArgs(PyObject *callable, PyObject *name, ...)
   2730 {
   2731     PyObject *args, *tmp;
   2732     va_list vargs;
   2733 
   2734     if (callable == NULL || name == NULL)
   2735         return null_error();
   2736 
   2737     callable = PyObject_GetAttr(callable, name);
   2738     if (callable == NULL)
   2739         return NULL;
   2740 
   2741     /* count the args */
   2742     va_start(vargs, name);
   2743     args = objargs_mktuple(vargs);
   2744     va_end(vargs);
   2745     if (args == NULL) {
   2746         Py_DECREF(callable);
   2747         return NULL;
   2748     }
   2749     tmp = PyObject_Call(callable, args, NULL);
   2750     Py_DECREF(args);
   2751     Py_DECREF(callable);
   2752 
   2753     return tmp;
   2754 }
   2755 
   2756 PyObject *
   2757 PyObject_CallFunctionObjArgs(PyObject *callable, ...)
   2758 {
   2759     PyObject *args, *tmp;
   2760     va_list vargs;
   2761 
   2762     if (callable == NULL)
   2763         return null_error();
   2764 
   2765     /* count the args */
   2766     va_start(vargs, callable);
   2767     args = objargs_mktuple(vargs);
   2768     va_end(vargs);
   2769     if (args == NULL)
   2770         return NULL;
   2771     tmp = PyObject_Call(callable, args, NULL);
   2772     Py_DECREF(args);
   2773 
   2774     return tmp;
   2775 }
   2776 
   2777 
   2778 /* isinstance(), issubclass() */
   2779 
   2780 /* abstract_get_bases() has logically 4 return states, with a sort of 0th
   2781  * state that will almost never happen.
   2782  *
   2783  * 0. creating the __bases__ static string could get a MemoryError
   2784  * 1. getattr(cls, '__bases__') could raise an AttributeError
   2785  * 2. getattr(cls, '__bases__') could raise some other exception
   2786  * 3. getattr(cls, '__bases__') could return a tuple
   2787  * 4. getattr(cls, '__bases__') could return something other than a tuple
   2788  *
   2789  * Only state #3 is a non-error state and only it returns a non-NULL object
   2790  * (it returns the retrieved tuple).
   2791  *
   2792  * Any raised AttributeErrors are masked by clearing the exception and
   2793  * returning NULL.  If an object other than a tuple comes out of __bases__,
   2794  * then again, the return value is NULL.  So yes, these two situations
   2795  * produce exactly the same results: NULL is returned and no error is set.
   2796  *
   2797  * If some exception other than AttributeError is raised, then NULL is also
   2798  * returned, but the exception is not cleared.  That's because we want the
   2799  * exception to be propagated along.
   2800  *
   2801  * Callers are expected to test for PyErr_Occurred() when the return value
   2802  * is NULL to decide whether a valid exception should be propagated or not.
   2803  * When there's no exception to propagate, it's customary for the caller to
   2804  * set a TypeError.
   2805  */
   2806 static PyObject *
   2807 abstract_get_bases(PyObject *cls)
   2808 {
   2809     static PyObject *__bases__ = NULL;
   2810     PyObject *bases;
   2811 
   2812     if (__bases__ == NULL) {
   2813         __bases__ = PyString_InternFromString("__bases__");
   2814         if (__bases__ == NULL)
   2815             return NULL;
   2816     }
   2817     bases = PyObject_GetAttr(cls, __bases__);
   2818     if (bases == NULL) {
   2819         if (PyErr_ExceptionMatches(PyExc_AttributeError))
   2820             PyErr_Clear();
   2821         return NULL;
   2822     }
   2823     if (!PyTuple_Check(bases)) {
   2824         Py_DECREF(bases);
   2825         return NULL;
   2826     }
   2827     return bases;
   2828 }
   2829 
   2830 
   2831 static int
   2832 abstract_issubclass(PyObject *derived, PyObject *cls)
   2833 {
   2834     PyObject *bases = NULL;
   2835     Py_ssize_t i, n;
   2836     int r = 0;
   2837 
   2838     while (1) {
   2839         if (derived == cls)
   2840             return 1;
   2841         bases = abstract_get_bases(derived);
   2842         if (bases == NULL) {
   2843             if (PyErr_Occurred())
   2844                 return -1;
   2845             return 0;
   2846         }
   2847         n = PyTuple_GET_SIZE(bases);
   2848         if (n == 0) {
   2849             Py_DECREF(bases);
   2850             return 0;
   2851         }
   2852         /* Avoid recursivity in the single inheritance case */
   2853         if (n == 1) {
   2854             derived = PyTuple_GET_ITEM(bases, 0);
   2855             Py_DECREF(bases);
   2856             continue;
   2857         }
   2858         for (i = 0; i < n; i++) {
   2859             r = abstract_issubclass(PyTuple_GET_ITEM(bases, i), cls);
   2860             if (r != 0)
   2861                 break;
   2862         }
   2863         Py_DECREF(bases);
   2864         return r;
   2865     }
   2866 }
   2867 
   2868 static int
   2869 check_class(PyObject *cls, const char *error)
   2870 {
   2871     PyObject *bases = abstract_get_bases(cls);
   2872     if (bases == NULL) {
   2873         /* Do not mask errors. */
   2874         if (!PyErr_Occurred())
   2875             PyErr_SetString(PyExc_TypeError, error);
   2876         return 0;
   2877     }
   2878     Py_DECREF(bases);
   2879     return -1;
   2880 }
   2881 
   2882 static int
   2883 recursive_isinstance(PyObject *inst, PyObject *cls)
   2884 {
   2885     PyObject *icls;
   2886     static PyObject *__class__ = NULL;
   2887     int retval = 0;
   2888 
   2889     if (__class__ == NULL) {
   2890         __class__ = PyString_InternFromString("__class__");
   2891         if (__class__ == NULL)
   2892             return -1;
   2893     }
   2894 
   2895     if (PyClass_Check(cls) && PyInstance_Check(inst)) {
   2896         PyObject *inclass =
   2897             (PyObject*)((PyInstanceObject*)inst)->in_class;
   2898         retval = PyClass_IsSubclass(inclass, cls);
   2899     }
   2900     else if (PyType_Check(cls)) {
   2901         retval = PyObject_TypeCheck(inst, (PyTypeObject *)cls);
   2902         if (retval == 0) {
   2903             PyObject *c = PyObject_GetAttr(inst, __class__);
   2904             if (c == NULL) {
   2905                 PyErr_Clear();
   2906             }
   2907             else {
   2908                 if (c != (PyObject *)(inst->ob_type) &&
   2909                     PyType_Check(c))
   2910                     retval = PyType_IsSubtype(
   2911                         (PyTypeObject *)c,
   2912                         (PyTypeObject *)cls);
   2913                 Py_DECREF(c);
   2914             }
   2915         }
   2916     }
   2917     else {
   2918         if (!check_class(cls,
   2919             "isinstance() arg 2 must be a class, type,"
   2920             " or tuple of classes and types"))
   2921             return -1;
   2922         icls = PyObject_GetAttr(inst, __class__);
   2923         if (icls == NULL) {
   2924             PyErr_Clear();
   2925             retval = 0;
   2926         }
   2927         else {
   2928             retval = abstract_issubclass(icls, cls);
   2929             Py_DECREF(icls);
   2930         }
   2931     }
   2932 
   2933     return retval;
   2934 }
   2935 
   2936 int
   2937 PyObject_IsInstance(PyObject *inst, PyObject *cls)
   2938 {
   2939     static PyObject *name = NULL;
   2940 
   2941     /* Quick test for an exact match */
   2942     if (Py_TYPE(inst) == (PyTypeObject *)cls)
   2943         return 1;
   2944 
   2945     if (PyTuple_Check(cls)) {
   2946         Py_ssize_t i;
   2947         Py_ssize_t n;
   2948         int r = 0;
   2949 
   2950         if (Py_EnterRecursiveCall(" in __instancecheck__"))
   2951             return -1;
   2952         n = PyTuple_GET_SIZE(cls);
   2953         for (i = 0; i < n; ++i) {
   2954             PyObject *item = PyTuple_GET_ITEM(cls, i);
   2955             r = PyObject_IsInstance(inst, item);
   2956             if (r != 0)
   2957                 /* either found it, or got an error */
   2958                 break;
   2959         }
   2960         Py_LeaveRecursiveCall();
   2961         return r;
   2962     }
   2963 
   2964     if (!(PyClass_Check(cls) || PyInstance_Check(cls))) {
   2965         PyObject *checker;
   2966         checker = _PyObject_LookupSpecial(cls, "__instancecheck__", &name);
   2967         if (checker != NULL) {
   2968             PyObject *res;
   2969             int ok = -1;
   2970             if (Py_EnterRecursiveCall(" in __instancecheck__")) {
   2971                 Py_DECREF(checker);
   2972                 return ok;
   2973             }
   2974             res = PyObject_CallFunctionObjArgs(checker, inst, NULL);
   2975             Py_LeaveRecursiveCall();
   2976             Py_DECREF(checker);
   2977             if (res != NULL) {
   2978                 ok = PyObject_IsTrue(res);
   2979                 Py_DECREF(res);
   2980             }
   2981             return ok;
   2982         }
   2983         else if (PyErr_Occurred())
   2984             return -1;
   2985     }
   2986     return recursive_isinstance(inst, cls);
   2987 }
   2988 
   2989 static  int
   2990 recursive_issubclass(PyObject *derived, PyObject *cls)
   2991 {
   2992     int retval;
   2993 
   2994     if (PyType_Check(cls) && PyType_Check(derived)) {
   2995         /* Fast path (non-recursive) */
   2996         return PyType_IsSubtype(
   2997             (PyTypeObject *)derived, (PyTypeObject *)cls);
   2998     }
   2999     if (!PyClass_Check(derived) || !PyClass_Check(cls)) {
   3000         if (!check_class(derived,
   3001                          "issubclass() arg 1 must be a class"))
   3002             return -1;
   3003 
   3004         if (!check_class(cls,
   3005                         "issubclass() arg 2 must be a class"
   3006                         " or tuple of classes"))
   3007             return -1;
   3008         retval = abstract_issubclass(derived, cls);
   3009     }
   3010     else {
   3011         /* shortcut */
   3012         if (!(retval = (derived == cls)))
   3013             retval = PyClass_IsSubclass(derived, cls);
   3014     }
   3015 
   3016     return retval;
   3017 }
   3018 
   3019 int
   3020 PyObject_IsSubclass(PyObject *derived, PyObject *cls)
   3021 {
   3022     static PyObject *name = NULL;
   3023 
   3024     if (PyTuple_Check(cls)) {
   3025         Py_ssize_t i;
   3026         Py_ssize_t n;
   3027         int r = 0;
   3028 
   3029         if (Py_EnterRecursiveCall(" in __subclasscheck__"))
   3030             return -1;
   3031         n = PyTuple_GET_SIZE(cls);
   3032         for (i = 0; i < n; ++i) {
   3033             PyObject *item = PyTuple_GET_ITEM(cls, i);
   3034             r = PyObject_IsSubclass(derived, item);
   3035             if (r != 0)
   3036                 /* either found it, or got an error */
   3037                 break;
   3038         }
   3039         Py_LeaveRecursiveCall();
   3040         return r;
   3041     }
   3042     if (!(PyClass_Check(cls) || PyInstance_Check(cls))) {
   3043         PyObject *checker;
   3044         checker = _PyObject_LookupSpecial(cls, "__subclasscheck__", &name);
   3045         if (checker != NULL) {
   3046             PyObject *res;
   3047             int ok = -1;
   3048             if (Py_EnterRecursiveCall(" in __subclasscheck__")) {
   3049                 Py_DECREF(checker);
   3050                 return ok;
   3051             }
   3052             res = PyObject_CallFunctionObjArgs(checker, derived, NULL);
   3053             Py_LeaveRecursiveCall();
   3054             Py_DECREF(checker);
   3055             if (res != NULL) {
   3056                 ok = PyObject_IsTrue(res);
   3057                 Py_DECREF(res);
   3058             }
   3059             return ok;
   3060         }
   3061         else if (PyErr_Occurred()) {
   3062             return -1;
   3063         }
   3064     }
   3065     return recursive_issubclass(derived, cls);
   3066 }
   3067 
   3068 int
   3069 _PyObject_RealIsInstance(PyObject *inst, PyObject *cls)
   3070 {
   3071     return recursive_isinstance(inst, cls);
   3072 }
   3073 
   3074 int
   3075 _PyObject_RealIsSubclass(PyObject *derived, PyObject *cls)
   3076 {
   3077     return recursive_issubclass(derived, cls);
   3078 }
   3079 
   3080 
   3081 PyObject *
   3082 PyObject_GetIter(PyObject *o)
   3083 {
   3084     PyTypeObject *t = o->ob_type;
   3085     getiterfunc f = NULL;
   3086     if (PyType_HasFeature(t, Py_TPFLAGS_HAVE_ITER))
   3087         f = t->tp_iter;
   3088     if (f == NULL) {
   3089         if (PySequence_Check(o))
   3090             return PySeqIter_New(o);
   3091         return type_error("'%.200s' object is not iterable", o);
   3092     }
   3093     else {
   3094         PyObject *res = (*f)(o);
   3095         if (res != NULL && !PyIter_Check(res)) {
   3096             PyErr_Format(PyExc_TypeError,
   3097                          "iter() returned non-iterator "
   3098                          "of type '%.100s'",
   3099                          res->ob_type->tp_name);
   3100             Py_DECREF(res);
   3101             res = NULL;
   3102         }
   3103         return res;
   3104     }
   3105 }
   3106 
   3107 /* Return next item.
   3108  * If an error occurs, return NULL.  PyErr_Occurred() will be true.
   3109  * If the iteration terminates normally, return NULL and clear the
   3110  * PyExc_StopIteration exception (if it was set).  PyErr_Occurred()
   3111  * will be false.
   3112  * Else return the next object.  PyErr_Occurred() will be false.
   3113  */
   3114 PyObject *
   3115 PyIter_Next(PyObject *iter)
   3116 {
   3117     PyObject *result;
   3118     result = (*iter->ob_type->tp_iternext)(iter);
   3119     if (result == NULL &&
   3120         PyErr_Occurred() &&
   3121         PyErr_ExceptionMatches(PyExc_StopIteration))
   3122         PyErr_Clear();
   3123     return result;
   3124 }
   3125