Home | History | Annotate | Download | only in Objects
      1 
      2 /* Integer object implementation */
      3 
      4 #include "Python.h"
      5 #include <ctype.h>
      6 #include <float.h>
      7 
      8 static PyObject *int_int(PyIntObject *v);
      9 
     10 long
     11 PyInt_GetMax(void)
     12 {
     13     return LONG_MAX;            /* To initialize sys.maxint */
     14 }
     15 
     16 /* Integers are quite normal objects, to make object handling uniform.
     17    (Using odd pointers to represent integers would save much space
     18    but require extra checks for this special case throughout the code.)
     19    Since a typical Python program spends much of its time allocating
     20    and deallocating integers, these operations should be very fast.
     21    Therefore we use a dedicated allocation scheme with a much lower
     22    overhead (in space and time) than straight malloc(): a simple
     23    dedicated free list, filled when necessary with memory from malloc().
     24 
     25    block_list is a singly-linked list of all PyIntBlocks ever allocated,
     26    linked via their next members.  PyIntBlocks are never returned to the
     27    system before shutdown (PyInt_Fini).
     28 
     29    free_list is a singly-linked list of available PyIntObjects, linked
     30    via abuse of their ob_type members.
     31 */
     32 
     33 #define BLOCK_SIZE      1000    /* 1K less typical malloc overhead */
     34 #define BHEAD_SIZE      8       /* Enough for a 64-bit pointer */
     35 #define N_INTOBJECTS    ((BLOCK_SIZE - BHEAD_SIZE) / sizeof(PyIntObject))
     36 
     37 struct _intblock {
     38     struct _intblock *next;
     39     PyIntObject objects[N_INTOBJECTS];
     40 };
     41 
     42 typedef struct _intblock PyIntBlock;
     43 
     44 static PyIntBlock *block_list = NULL;
     45 static PyIntObject *free_list = NULL;
     46 
     47 static PyIntObject *
     48 fill_free_list(void)
     49 {
     50     PyIntObject *p, *q;
     51     /* Python's object allocator isn't appropriate for large blocks. */
     52     p = (PyIntObject *) PyMem_MALLOC(sizeof(PyIntBlock));
     53     if (p == NULL)
     54         return (PyIntObject *) PyErr_NoMemory();
     55     ((PyIntBlock *)p)->next = block_list;
     56     block_list = (PyIntBlock *)p;
     57     /* Link the int objects together, from rear to front, then return
     58        the address of the last int object in the block. */
     59     p = &((PyIntBlock *)p)->objects[0];
     60     q = p + N_INTOBJECTS;
     61     while (--q > p)
     62         Py_TYPE(q) = (struct _typeobject *)(q-1);
     63     Py_TYPE(q) = NULL;
     64     return p + N_INTOBJECTS - 1;
     65 }
     66 
     67 #ifndef NSMALLPOSINTS
     68 #define NSMALLPOSINTS           257
     69 #endif
     70 #ifndef NSMALLNEGINTS
     71 #define NSMALLNEGINTS           5
     72 #endif
     73 #if NSMALLNEGINTS + NSMALLPOSINTS > 0
     74 /* References to small integers are saved in this array so that they
     75    can be shared.
     76    The integers that are saved are those in the range
     77    -NSMALLNEGINTS (inclusive) to NSMALLPOSINTS (not inclusive).
     78 */
     79 static PyIntObject *small_ints[NSMALLNEGINTS + NSMALLPOSINTS];
     80 #endif
     81 #ifdef COUNT_ALLOCS
     82 Py_ssize_t quick_int_allocs;
     83 Py_ssize_t quick_neg_int_allocs;
     84 #endif
     85 
     86 PyObject *
     87 PyInt_FromLong(long ival)
     88 {
     89     register PyIntObject *v;
     90 #if NSMALLNEGINTS + NSMALLPOSINTS > 0
     91     if (-NSMALLNEGINTS <= ival && ival < NSMALLPOSINTS) {
     92         v = small_ints[ival + NSMALLNEGINTS];
     93         Py_INCREF(v);
     94 #ifdef COUNT_ALLOCS
     95         if (ival >= 0)
     96             quick_int_allocs++;
     97         else
     98             quick_neg_int_allocs++;
     99 #endif
    100         return (PyObject *) v;
    101     }
    102 #endif
    103     if (free_list == NULL) {
    104         if ((free_list = fill_free_list()) == NULL)
    105             return NULL;
    106     }
    107     /* Inline PyObject_New */
    108     v = free_list;
    109     free_list = (PyIntObject *)Py_TYPE(v);
    110     (void)PyObject_INIT(v, &PyInt_Type);
    111     v->ob_ival = ival;
    112     return (PyObject *) v;
    113 }
    114 
    115 PyObject *
    116 PyInt_FromSize_t(size_t ival)
    117 {
    118     if (ival <= LONG_MAX)
    119         return PyInt_FromLong((long)ival);
    120     return _PyLong_FromSize_t(ival);
    121 }
    122 
    123 PyObject *
    124 PyInt_FromSsize_t(Py_ssize_t ival)
    125 {
    126     if (ival >= LONG_MIN && ival <= LONG_MAX)
    127         return PyInt_FromLong((long)ival);
    128     return _PyLong_FromSsize_t(ival);
    129 }
    130 
    131 static void
    132 int_dealloc(PyIntObject *v)
    133 {
    134     if (PyInt_CheckExact(v)) {
    135         Py_TYPE(v) = (struct _typeobject *)free_list;
    136         free_list = v;
    137     }
    138     else
    139         Py_TYPE(v)->tp_free((PyObject *)v);
    140 }
    141 
    142 long
    143 PyInt_AsLong(register PyObject *op)
    144 {
    145     PyNumberMethods *nb;
    146     PyIntObject *io;
    147     long val;
    148 
    149     if (op && PyInt_Check(op))
    150         return PyInt_AS_LONG((PyIntObject*) op);
    151 
    152     if (op == NULL || (nb = Py_TYPE(op)->tp_as_number) == NULL ||
    153         nb->nb_int == NULL) {
    154         PyErr_SetString(PyExc_TypeError, "an integer is required");
    155         return -1;
    156     }
    157 
    158     io = (PyIntObject*) (*nb->nb_int) (op);
    159     if (io == NULL)
    160         return -1;
    161     if (!PyInt_Check(io)) {
    162         if (PyLong_Check(io)) {
    163             /* got a long? => retry int conversion */
    164             val = PyLong_AsLong((PyObject *)io);
    165             Py_DECREF(io);
    166             if ((val == -1) && PyErr_Occurred())
    167                 return -1;
    168             return val;
    169         }
    170         else
    171         {
    172             Py_DECREF(io);
    173             PyErr_SetString(PyExc_TypeError,
    174                         "__int__ method should return an integer");
    175             return -1;
    176         }
    177     }
    178 
    179     val = PyInt_AS_LONG(io);
    180     Py_DECREF(io);
    181 
    182     return val;
    183 }
    184 
    185 int
    186 _PyInt_AsInt(PyObject *obj)
    187 {
    188     long result = PyInt_AsLong(obj);
    189     if (result == -1 && PyErr_Occurred())
    190         return -1;
    191     if (result > INT_MAX || result < INT_MIN) {
    192         PyErr_SetString(PyExc_OverflowError,
    193                         "Python int too large to convert to C int");
    194         return -1;
    195     }
    196     return (int)result;
    197 }
    198 
    199 Py_ssize_t
    200 PyInt_AsSsize_t(register PyObject *op)
    201 {
    202 #if SIZEOF_SIZE_T != SIZEOF_LONG
    203     PyNumberMethods *nb;
    204     PyObject *io;
    205     Py_ssize_t val;
    206 #endif
    207 
    208     if (op == NULL) {
    209         PyErr_SetString(PyExc_TypeError, "an integer is required");
    210         return -1;
    211     }
    212 
    213     if (PyInt_Check(op))
    214         return PyInt_AS_LONG((PyIntObject*) op);
    215     if (PyLong_Check(op))
    216         return _PyLong_AsSsize_t(op);
    217 #if SIZEOF_SIZE_T == SIZEOF_LONG
    218     return PyInt_AsLong(op);
    219 #else
    220 
    221     if ((nb = Py_TYPE(op)->tp_as_number) == NULL ||
    222         (nb->nb_int == NULL && nb->nb_long == 0)) {
    223         PyErr_SetString(PyExc_TypeError, "an integer is required");
    224         return -1;
    225     }
    226 
    227     if (nb->nb_long != 0)
    228         io = (*nb->nb_long)(op);
    229     else
    230         io = (*nb->nb_int)(op);
    231     if (io == NULL)
    232         return -1;
    233     if (!PyInt_Check(io)) {
    234         if (PyLong_Check(io)) {
    235             /* got a long? => retry int conversion */
    236             val = _PyLong_AsSsize_t(io);
    237             Py_DECREF(io);
    238             if ((val == -1) && PyErr_Occurred())
    239                 return -1;
    240             return val;
    241         }
    242         else
    243         {
    244             Py_DECREF(io);
    245             PyErr_SetString(PyExc_TypeError,
    246                         "__int__ method should return an integer");
    247             return -1;
    248         }
    249     }
    250 
    251     val = PyInt_AS_LONG(io);
    252     Py_DECREF(io);
    253 
    254     return val;
    255 #endif
    256 }
    257 
    258 unsigned long
    259 PyInt_AsUnsignedLongMask(register PyObject *op)
    260 {
    261     PyNumberMethods *nb;
    262     PyIntObject *io;
    263     unsigned long val;
    264 
    265     if (op && PyInt_Check(op))
    266         return PyInt_AS_LONG((PyIntObject*) op);
    267     if (op && PyLong_Check(op))
    268         return PyLong_AsUnsignedLongMask(op);
    269 
    270     if (op == NULL || (nb = Py_TYPE(op)->tp_as_number) == NULL ||
    271         nb->nb_int == NULL) {
    272         PyErr_SetString(PyExc_TypeError, "an integer is required");
    273         return (unsigned long)-1;
    274     }
    275 
    276     io = (PyIntObject*) (*nb->nb_int) (op);
    277     if (io == NULL)
    278         return (unsigned long)-1;
    279     if (!PyInt_Check(io)) {
    280         if (PyLong_Check(io)) {
    281             val = PyLong_AsUnsignedLongMask((PyObject *)io);
    282             Py_DECREF(io);
    283             if (PyErr_Occurred())
    284                 return (unsigned long)-1;
    285             return val;
    286         }
    287         else
    288         {
    289             Py_DECREF(io);
    290             PyErr_SetString(PyExc_TypeError,
    291                         "__int__ method should return an integer");
    292             return (unsigned long)-1;
    293         }
    294     }
    295 
    296     val = PyInt_AS_LONG(io);
    297     Py_DECREF(io);
    298 
    299     return val;
    300 }
    301 
    302 #ifdef HAVE_LONG_LONG
    303 unsigned PY_LONG_LONG
    304 PyInt_AsUnsignedLongLongMask(register PyObject *op)
    305 {
    306     PyNumberMethods *nb;
    307     PyIntObject *io;
    308     unsigned PY_LONG_LONG val;
    309 
    310     if (op && PyInt_Check(op))
    311         return PyInt_AS_LONG((PyIntObject*) op);
    312     if (op && PyLong_Check(op))
    313         return PyLong_AsUnsignedLongLongMask(op);
    314 
    315     if (op == NULL || (nb = Py_TYPE(op)->tp_as_number) == NULL ||
    316         nb->nb_int == NULL) {
    317         PyErr_SetString(PyExc_TypeError, "an integer is required");
    318         return (unsigned PY_LONG_LONG)-1;
    319     }
    320 
    321     io = (PyIntObject*) (*nb->nb_int) (op);
    322     if (io == NULL)
    323         return (unsigned PY_LONG_LONG)-1;
    324     if (!PyInt_Check(io)) {
    325         if (PyLong_Check(io)) {
    326             val = PyLong_AsUnsignedLongLongMask((PyObject *)io);
    327             Py_DECREF(io);
    328             if (PyErr_Occurred())
    329                 return (unsigned PY_LONG_LONG)-1;
    330             return val;
    331         }
    332         else
    333         {
    334             Py_DECREF(io);
    335             PyErr_SetString(PyExc_TypeError,
    336                         "__int__ method should return an integer");
    337             return (unsigned PY_LONG_LONG)-1;
    338         }
    339     }
    340 
    341     val = PyInt_AS_LONG(io);
    342     Py_DECREF(io);
    343 
    344     return val;
    345 }
    346 #endif
    347 
    348 PyObject *
    349 PyInt_FromString(char *s, char **pend, int base)
    350 {
    351     char *end;
    352     long x;
    353     Py_ssize_t slen;
    354     PyObject *sobj, *srepr;
    355 
    356     if ((base != 0 && base < 2) || base > 36) {
    357         PyErr_SetString(PyExc_ValueError,
    358                         "int() base must be >= 2 and <= 36");
    359         return NULL;
    360     }
    361 
    362     while (*s && isspace(Py_CHARMASK(*s)))
    363         s++;
    364     errno = 0;
    365     if (base == 0 && s[0] == '0') {
    366         x = (long) PyOS_strtoul(s, &end, base);
    367         if (x < 0)
    368             return PyLong_FromString(s, pend, base);
    369     }
    370     else
    371         x = PyOS_strtol(s, &end, base);
    372     if (end == s || !isalnum(Py_CHARMASK(end[-1])))
    373         goto bad;
    374     while (*end && isspace(Py_CHARMASK(*end)))
    375         end++;
    376     if (*end != '\0') {
    377   bad:
    378         slen = strlen(s) < 200 ? strlen(s) : 200;
    379         sobj = PyString_FromStringAndSize(s, slen);
    380         if (sobj == NULL)
    381             return NULL;
    382         srepr = PyObject_Repr(sobj);
    383         Py_DECREF(sobj);
    384         if (srepr == NULL)
    385             return NULL;
    386         PyErr_Format(PyExc_ValueError,
    387                      "invalid literal for int() with base %d: %s",
    388                      base, PyString_AS_STRING(srepr));
    389         Py_DECREF(srepr);
    390         return NULL;
    391     }
    392     else if (errno != 0)
    393         return PyLong_FromString(s, pend, base);
    394     if (pend)
    395         *pend = end;
    396     return PyInt_FromLong(x);
    397 }
    398 
    399 #ifdef Py_USING_UNICODE
    400 PyObject *
    401 PyInt_FromUnicode(Py_UNICODE *s, Py_ssize_t length, int base)
    402 {
    403     PyObject *result;
    404     char *buffer = (char *)PyMem_MALLOC(length+1);
    405 
    406     if (buffer == NULL)
    407         return PyErr_NoMemory();
    408 
    409     if (PyUnicode_EncodeDecimal(s, length, buffer, NULL)) {
    410         PyMem_FREE(buffer);
    411         return NULL;
    412     }
    413     result = PyInt_FromString(buffer, NULL, base);
    414     PyMem_FREE(buffer);
    415     return result;
    416 }
    417 #endif
    418 
    419 /* Methods */
    420 
    421 /* Integers are seen as the "smallest" of all numeric types and thus
    422    don't have any knowledge about conversion of other types to
    423    integers. */
    424 
    425 #define CONVERT_TO_LONG(obj, lng)               \
    426     if (PyInt_Check(obj)) {                     \
    427         lng = PyInt_AS_LONG(obj);               \
    428     }                                           \
    429     else {                                      \
    430         Py_INCREF(Py_NotImplemented);           \
    431         return Py_NotImplemented;               \
    432     }
    433 
    434 /* ARGSUSED */
    435 static int
    436 int_print(PyIntObject *v, FILE *fp, int flags)
    437      /* flags -- not used but required by interface */
    438 {
    439     long int_val = v->ob_ival;
    440     Py_BEGIN_ALLOW_THREADS
    441     fprintf(fp, "%ld", int_val);
    442     Py_END_ALLOW_THREADS
    443     return 0;
    444 }
    445 
    446 static int
    447 int_compare(PyIntObject *v, PyIntObject *w)
    448 {
    449     register long i = v->ob_ival;
    450     register long j = w->ob_ival;
    451     return (i < j) ? -1 : (i > j) ? 1 : 0;
    452 }
    453 
    454 static long
    455 int_hash(PyIntObject *v)
    456 {
    457     /* XXX If this is changed, you also need to change the way
    458        Python's long, float and complex types are hashed. */
    459     long x = v -> ob_ival;
    460     if (x == -1)
    461         x = -2;
    462     return x;
    463 }
    464 
    465 static PyObject *
    466 int_add(PyIntObject *v, PyIntObject *w)
    467 {
    468     register long a, b, x;
    469     CONVERT_TO_LONG(v, a);
    470     CONVERT_TO_LONG(w, b);
    471     /* casts in the line below avoid undefined behaviour on overflow */
    472     x = (long)((unsigned long)a + b);
    473     if ((x^a) >= 0 || (x^b) >= 0)
    474         return PyInt_FromLong(x);
    475     return PyLong_Type.tp_as_number->nb_add((PyObject *)v, (PyObject *)w);
    476 }
    477 
    478 static PyObject *
    479 int_sub(PyIntObject *v, PyIntObject *w)
    480 {
    481     register long a, b, x;
    482     CONVERT_TO_LONG(v, a);
    483     CONVERT_TO_LONG(w, b);
    484     /* casts in the line below avoid undefined behaviour on overflow */
    485     x = (long)((unsigned long)a - b);
    486     if ((x^a) >= 0 || (x^~b) >= 0)
    487         return PyInt_FromLong(x);
    488     return PyLong_Type.tp_as_number->nb_subtract((PyObject *)v,
    489                                                  (PyObject *)w);
    490 }
    491 
    492 /*
    493 Integer overflow checking for * is painful:  Python tried a couple ways, but
    494 they didn't work on all platforms, or failed in endcases (a product of
    495 -sys.maxint-1 has been a particular pain).
    496 
    497 Here's another way:
    498 
    499 The native long product x*y is either exactly right or *way* off, being
    500 just the last n bits of the true product, where n is the number of bits
    501 in a long (the delivered product is the true product plus i*2**n for
    502 some integer i).
    503 
    504 The native double product (double)x * (double)y is subject to three
    505 rounding errors:  on a sizeof(long)==8 box, each cast to double can lose
    506 info, and even on a sizeof(long)==4 box, the multiplication can lose info.
    507 But, unlike the native long product, it's not in *range* trouble:  even
    508 if sizeof(long)==32 (256-bit longs), the product easily fits in the
    509 dynamic range of a double.  So the leading 50 (or so) bits of the double
    510 product are correct.
    511 
    512 We check these two ways against each other, and declare victory if they're
    513 approximately the same.  Else, because the native long product is the only
    514 one that can lose catastrophic amounts of information, it's the native long
    515 product that must have overflowed.
    516 */
    517 
    518 static PyObject *
    519 int_mul(PyObject *v, PyObject *w)
    520 {
    521     long a, b;
    522     long longprod;                      /* a*b in native long arithmetic */
    523     double doubled_longprod;            /* (double)longprod */
    524     double doubleprod;                  /* (double)a * (double)b */
    525 
    526     CONVERT_TO_LONG(v, a);
    527     CONVERT_TO_LONG(w, b);
    528     /* casts in the next line avoid undefined behaviour on overflow */
    529     longprod = (long)((unsigned long)a * b);
    530     doubleprod = (double)a * (double)b;
    531     doubled_longprod = (double)longprod;
    532 
    533     /* Fast path for normal case:  small multiplicands, and no info
    534        is lost in either method. */
    535     if (doubled_longprod == doubleprod)
    536         return PyInt_FromLong(longprod);
    537 
    538     /* Somebody somewhere lost info.  Close enough, or way off?  Note
    539        that a != 0 and b != 0 (else doubled_longprod == doubleprod == 0).
    540        The difference either is or isn't significant compared to the
    541        true value (of which doubleprod is a good approximation).
    542     */
    543     {
    544         const double diff = doubled_longprod - doubleprod;
    545         const double absdiff = diff >= 0.0 ? diff : -diff;
    546         const double absprod = doubleprod >= 0.0 ? doubleprod :
    547                               -doubleprod;
    548         /* absdiff/absprod <= 1/32 iff
    549            32 * absdiff <= absprod -- 5 good bits is "close enough" */
    550         if (32.0 * absdiff <= absprod)
    551             return PyInt_FromLong(longprod);
    552         else
    553             return PyLong_Type.tp_as_number->nb_multiply(v, w);
    554     }
    555 }
    556 
    557 /* Integer overflow checking for unary negation: on a 2's-complement
    558  * box, -x overflows iff x is the most negative long.  In this case we
    559  * get -x == x.  However, -x is undefined (by C) if x /is/ the most
    560  * negative long (it's a signed overflow case), and some compilers care.
    561  * So we cast x to unsigned long first.  However, then other compilers
    562  * warn about applying unary minus to an unsigned operand.  Hence the
    563  * weird "0-".
    564  */
    565 #define UNARY_NEG_WOULD_OVERFLOW(x)     \
    566     ((x) < 0 && (unsigned long)(x) == 0-(unsigned long)(x))
    567 
    568 /* Return type of i_divmod */
    569 enum divmod_result {
    570     DIVMOD_OK,                  /* Correct result */
    571     DIVMOD_OVERFLOW,            /* Overflow, try again using longs */
    572     DIVMOD_ERROR                /* Exception raised */
    573 };
    574 
    575 static enum divmod_result
    576 i_divmod(register long x, register long y,
    577          long *p_xdivy, long *p_xmody)
    578 {
    579     long xdivy, xmody;
    580 
    581     if (y == 0) {
    582         PyErr_SetString(PyExc_ZeroDivisionError,
    583                         "integer division or modulo by zero");
    584         return DIVMOD_ERROR;
    585     }
    586     /* (-sys.maxint-1)/-1 is the only overflow case. */
    587     if (y == -1 && UNARY_NEG_WOULD_OVERFLOW(x))
    588         return DIVMOD_OVERFLOW;
    589     xdivy = x / y;
    590     /* xdiv*y can overflow on platforms where x/y gives floor(x/y)
    591      * for x and y with differing signs. (This is unusual
    592      * behaviour, and C99 prohibits it, but it's allowed by C89;
    593      * for an example of overflow, take x = LONG_MIN, y = 5 or x =
    594      * LONG_MAX, y = -5.)  However, x - xdivy*y is always
    595      * representable as a long, since it lies strictly between
    596      * -abs(y) and abs(y).  We add casts to avoid intermediate
    597      * overflow.
    598      */
    599     xmody = (long)(x - (unsigned long)xdivy * y);
    600     /* If the signs of x and y differ, and the remainder is non-0,
    601      * C89 doesn't define whether xdivy is now the floor or the
    602      * ceiling of the infinitely precise quotient.  We want the floor,
    603      * and we have it iff the remainder's sign matches y's.
    604      */
    605     if (xmody && ((y ^ xmody) < 0) /* i.e. and signs differ */) {
    606         xmody += y;
    607         --xdivy;
    608         assert(xmody && ((y ^ xmody) >= 0));
    609     }
    610     *p_xdivy = xdivy;
    611     *p_xmody = xmody;
    612     return DIVMOD_OK;
    613 }
    614 
    615 static PyObject *
    616 int_div(PyIntObject *x, PyIntObject *y)
    617 {
    618     long xi, yi;
    619     long d, m;
    620     CONVERT_TO_LONG(x, xi);
    621     CONVERT_TO_LONG(y, yi);
    622     switch (i_divmod(xi, yi, &d, &m)) {
    623     case DIVMOD_OK:
    624         return PyInt_FromLong(d);
    625     case DIVMOD_OVERFLOW:
    626         return PyLong_Type.tp_as_number->nb_divide((PyObject *)x,
    627                                                    (PyObject *)y);
    628     default:
    629         return NULL;
    630     }
    631 }
    632 
    633 static PyObject *
    634 int_classic_div(PyIntObject *x, PyIntObject *y)
    635 {
    636     long xi, yi;
    637     long d, m;
    638     CONVERT_TO_LONG(x, xi);
    639     CONVERT_TO_LONG(y, yi);
    640     if (Py_DivisionWarningFlag &&
    641         PyErr_Warn(PyExc_DeprecationWarning, "classic int division") < 0)
    642         return NULL;
    643     switch (i_divmod(xi, yi, &d, &m)) {
    644     case DIVMOD_OK:
    645         return PyInt_FromLong(d);
    646     case DIVMOD_OVERFLOW:
    647         return PyLong_Type.tp_as_number->nb_divide((PyObject *)x,
    648                                                    (PyObject *)y);
    649     default:
    650         return NULL;
    651     }
    652 }
    653 
    654 static PyObject *
    655 int_true_divide(PyIntObject *x, PyIntObject *y)
    656 {
    657     long xi, yi;
    658     /* If they aren't both ints, give someone else a chance.  In
    659        particular, this lets int/long get handled by longs, which
    660        underflows to 0 gracefully if the long is too big to convert
    661        to float. */
    662     CONVERT_TO_LONG(x, xi);
    663     CONVERT_TO_LONG(y, yi);
    664     if (yi == 0) {
    665         PyErr_SetString(PyExc_ZeroDivisionError,
    666                         "division by zero");
    667         return NULL;
    668     }
    669     if (xi == 0)
    670         return PyFloat_FromDouble(yi < 0 ? -0.0 : 0.0);
    671 
    672 #define WIDTH_OF_ULONG (CHAR_BIT*SIZEOF_LONG)
    673 #if DBL_MANT_DIG < WIDTH_OF_ULONG
    674     if ((xi >= 0 ? 0UL + xi : 0UL - xi) >> DBL_MANT_DIG ||
    675         (yi >= 0 ? 0UL + yi : 0UL - yi) >> DBL_MANT_DIG)
    676         /* Large x or y.  Use long integer arithmetic. */
    677         return PyLong_Type.tp_as_number->nb_true_divide(
    678             (PyObject *)x, (PyObject *)y);
    679     else
    680 #endif
    681         /* Both ints can be exactly represented as doubles.  Do a
    682            floating-point division. */
    683         return PyFloat_FromDouble((double)xi / (double)yi);
    684 }
    685 
    686 static PyObject *
    687 int_mod(PyIntObject *x, PyIntObject *y)
    688 {
    689     long xi, yi;
    690     long d, m;
    691     CONVERT_TO_LONG(x, xi);
    692     CONVERT_TO_LONG(y, yi);
    693     switch (i_divmod(xi, yi, &d, &m)) {
    694     case DIVMOD_OK:
    695         return PyInt_FromLong(m);
    696     case DIVMOD_OVERFLOW:
    697         return PyLong_Type.tp_as_number->nb_remainder((PyObject *)x,
    698                                                       (PyObject *)y);
    699     default:
    700         return NULL;
    701     }
    702 }
    703 
    704 static PyObject *
    705 int_divmod(PyIntObject *x, PyIntObject *y)
    706 {
    707     long xi, yi;
    708     long d, m;
    709     CONVERT_TO_LONG(x, xi);
    710     CONVERT_TO_LONG(y, yi);
    711     switch (i_divmod(xi, yi, &d, &m)) {
    712     case DIVMOD_OK:
    713         return Py_BuildValue("(ll)", d, m);
    714     case DIVMOD_OVERFLOW:
    715         return PyLong_Type.tp_as_number->nb_divmod((PyObject *)x,
    716                                                    (PyObject *)y);
    717     default:
    718         return NULL;
    719     }
    720 }
    721 
    722 static PyObject *
    723 int_pow(PyIntObject *v, PyIntObject *w, PyIntObject *z)
    724 {
    725     register long iv, iw, iz=0, ix, temp, prev;
    726     CONVERT_TO_LONG(v, iv);
    727     CONVERT_TO_LONG(w, iw);
    728     if (iw < 0) {
    729         if ((PyObject *)z != Py_None) {
    730             PyErr_SetString(PyExc_TypeError, "pow() 2nd argument "
    731                  "cannot be negative when 3rd argument specified");
    732             return NULL;
    733         }
    734         /* Return a float.  This works because we know that
    735            this calls float_pow() which converts its
    736            arguments to double. */
    737         return PyFloat_Type.tp_as_number->nb_power(
    738             (PyObject *)v, (PyObject *)w, (PyObject *)z);
    739     }
    740     if ((PyObject *)z != Py_None) {
    741         CONVERT_TO_LONG(z, iz);
    742         if (iz == 0) {
    743             PyErr_SetString(PyExc_ValueError,
    744                             "pow() 3rd argument cannot be 0");
    745             return NULL;
    746         }
    747     }
    748     /*
    749      * XXX: The original exponentiation code stopped looping
    750      * when temp hit zero; this code will continue onwards
    751      * unnecessarily, but at least it won't cause any errors.
    752      * Hopefully the speed improvement from the fast exponentiation
    753      * will compensate for the slight inefficiency.
    754      * XXX: Better handling of overflows is desperately needed.
    755      */
    756     temp = iv;
    757     ix = 1;
    758     while (iw > 0) {
    759         prev = ix;              /* Save value for overflow check */
    760         if (iw & 1) {
    761             /*
    762              * The (unsigned long) cast below ensures that the multiplication
    763              * is interpreted as an unsigned operation rather than a signed one
    764              * (C99 6.3.1.8p1), thus avoiding the perils of undefined behaviour
    765              * from signed arithmetic overflow (C99 6.5p5).  See issue #12973.
    766              */
    767             ix = (unsigned long)ix * temp;
    768             if (temp == 0)
    769                 break; /* Avoid ix / 0 */
    770             if (ix / temp != prev) {
    771                 return PyLong_Type.tp_as_number->nb_power(
    772                     (PyObject *)v,
    773                     (PyObject *)w,
    774                     (PyObject *)z);
    775             }
    776         }
    777         iw >>= 1;               /* Shift exponent down by 1 bit */
    778         if (iw==0) break;
    779         prev = temp;
    780         temp = (unsigned long)temp * temp;  /* Square the value of temp */
    781         if (prev != 0 && temp / prev != prev) {
    782             return PyLong_Type.tp_as_number->nb_power(
    783                 (PyObject *)v, (PyObject *)w, (PyObject *)z);
    784         }
    785         if (iz) {
    786             /* If we did a multiplication, perform a modulo */
    787             ix = ix % iz;
    788             temp = temp % iz;
    789         }
    790     }
    791     if (iz) {
    792         long div, mod;
    793         switch (i_divmod(ix, iz, &div, &mod)) {
    794         case DIVMOD_OK:
    795             ix = mod;
    796             break;
    797         case DIVMOD_OVERFLOW:
    798             return PyLong_Type.tp_as_number->nb_power(
    799                 (PyObject *)v, (PyObject *)w, (PyObject *)z);
    800         default:
    801             return NULL;
    802         }
    803     }
    804     return PyInt_FromLong(ix);
    805 }
    806 
    807 static PyObject *
    808 int_neg(PyIntObject *v)
    809 {
    810     register long a;
    811     a = v->ob_ival;
    812     /* check for overflow */
    813     if (UNARY_NEG_WOULD_OVERFLOW(a)) {
    814         PyObject *o = PyLong_FromLong(a);
    815         if (o != NULL) {
    816             PyObject *result = PyNumber_Negative(o);
    817             Py_DECREF(o);
    818             return result;
    819         }
    820         return NULL;
    821     }
    822     return PyInt_FromLong(-a);
    823 }
    824 
    825 static PyObject *
    826 int_abs(PyIntObject *v)
    827 {
    828     if (v->ob_ival >= 0)
    829         return int_int(v);
    830     else
    831         return int_neg(v);
    832 }
    833 
    834 static int
    835 int_nonzero(PyIntObject *v)
    836 {
    837     return v->ob_ival != 0;
    838 }
    839 
    840 static PyObject *
    841 int_invert(PyIntObject *v)
    842 {
    843     return PyInt_FromLong(~v->ob_ival);
    844 }
    845 
    846 static PyObject *
    847 int_lshift(PyIntObject *v, PyIntObject *w)
    848 {
    849     long a, b, c;
    850     PyObject *vv, *ww, *result;
    851 
    852     CONVERT_TO_LONG(v, a);
    853     CONVERT_TO_LONG(w, b);
    854     if (b < 0) {
    855         PyErr_SetString(PyExc_ValueError, "negative shift count");
    856         return NULL;
    857     }
    858     if (a == 0 || b == 0)
    859         return int_int(v);
    860     if (b >= LONG_BIT) {
    861         vv = PyLong_FromLong(PyInt_AS_LONG(v));
    862         if (vv == NULL)
    863             return NULL;
    864         ww = PyLong_FromLong(PyInt_AS_LONG(w));
    865         if (ww == NULL) {
    866             Py_DECREF(vv);
    867             return NULL;
    868         }
    869         result = PyNumber_Lshift(vv, ww);
    870         Py_DECREF(vv);
    871         Py_DECREF(ww);
    872         return result;
    873     }
    874     c = a << b;
    875     if (a != Py_ARITHMETIC_RIGHT_SHIFT(long, c, b)) {
    876         vv = PyLong_FromLong(PyInt_AS_LONG(v));
    877         if (vv == NULL)
    878             return NULL;
    879         ww = PyLong_FromLong(PyInt_AS_LONG(w));
    880         if (ww == NULL) {
    881             Py_DECREF(vv);
    882             return NULL;
    883         }
    884         result = PyNumber_Lshift(vv, ww);
    885         Py_DECREF(vv);
    886         Py_DECREF(ww);
    887         return result;
    888     }
    889     return PyInt_FromLong(c);
    890 }
    891 
    892 static PyObject *
    893 int_rshift(PyIntObject *v, PyIntObject *w)
    894 {
    895     register long a, b;
    896     CONVERT_TO_LONG(v, a);
    897     CONVERT_TO_LONG(w, b);
    898     if (b < 0) {
    899         PyErr_SetString(PyExc_ValueError, "negative shift count");
    900         return NULL;
    901     }
    902     if (a == 0 || b == 0)
    903         return int_int(v);
    904     if (b >= LONG_BIT) {
    905         if (a < 0)
    906             a = -1;
    907         else
    908             a = 0;
    909     }
    910     else {
    911         a = Py_ARITHMETIC_RIGHT_SHIFT(long, a, b);
    912     }
    913     return PyInt_FromLong(a);
    914 }
    915 
    916 static PyObject *
    917 int_and(PyIntObject *v, PyIntObject *w)
    918 {
    919     register long a, b;
    920     CONVERT_TO_LONG(v, a);
    921     CONVERT_TO_LONG(w, b);
    922     return PyInt_FromLong(a & b);
    923 }
    924 
    925 static PyObject *
    926 int_xor(PyIntObject *v, PyIntObject *w)
    927 {
    928     register long a, b;
    929     CONVERT_TO_LONG(v, a);
    930     CONVERT_TO_LONG(w, b);
    931     return PyInt_FromLong(a ^ b);
    932 }
    933 
    934 static PyObject *
    935 int_or(PyIntObject *v, PyIntObject *w)
    936 {
    937     register long a, b;
    938     CONVERT_TO_LONG(v, a);
    939     CONVERT_TO_LONG(w, b);
    940     return PyInt_FromLong(a | b);
    941 }
    942 
    943 static int
    944 int_coerce(PyObject **pv, PyObject **pw)
    945 {
    946     if (PyInt_Check(*pw)) {
    947         Py_INCREF(*pv);
    948         Py_INCREF(*pw);
    949         return 0;
    950     }
    951     return 1; /* Can't do it */
    952 }
    953 
    954 static PyObject *
    955 int_int(PyIntObject *v)
    956 {
    957     if (PyInt_CheckExact(v))
    958         Py_INCREF(v);
    959     else
    960         v = (PyIntObject *)PyInt_FromLong(v->ob_ival);
    961     return (PyObject *)v;
    962 }
    963 
    964 static PyObject *
    965 int_long(PyIntObject *v)
    966 {
    967     return PyLong_FromLong((v -> ob_ival));
    968 }
    969 
    970 static const unsigned char BitLengthTable[32] = {
    971     0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
    972     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
    973 };
    974 
    975 static int
    976 bits_in_ulong(unsigned long d)
    977 {
    978     int d_bits = 0;
    979     while (d >= 32) {
    980         d_bits += 6;
    981         d >>= 6;
    982     }
    983     d_bits += (int)BitLengthTable[d];
    984     return d_bits;
    985 }
    986 
    987 #if 8*SIZEOF_LONG-1 <= DBL_MANT_DIG
    988 /* Every Python int can be exactly represented as a float. */
    989 
    990 static PyObject *
    991 int_float(PyIntObject *v)
    992 {
    993     return PyFloat_FromDouble((double)(v -> ob_ival));
    994 }
    995 
    996 #else
    997 /* Here not all Python ints are exactly representable as floats, so we may
    998    have to round.  We do this manually, since the C standards don't specify
    999    whether converting an integer to a float rounds up or down */
   1000 
   1001 static PyObject *
   1002 int_float(PyIntObject *v)
   1003 {
   1004     unsigned long abs_ival, lsb;
   1005     int round_up;
   1006 
   1007     if (v->ob_ival < 0)
   1008         abs_ival = 0U-(unsigned long)v->ob_ival;
   1009     else
   1010         abs_ival = (unsigned long)v->ob_ival;
   1011     if (abs_ival < (1L << DBL_MANT_DIG))
   1012         /* small integer;  no need to round */
   1013         return PyFloat_FromDouble((double)v->ob_ival);
   1014 
   1015     /* Round abs_ival to MANT_DIG significant bits, using the
   1016        round-half-to-even rule.  abs_ival & lsb picks out the 'rounding'
   1017        bit: the first bit after the most significant MANT_DIG bits of
   1018        abs_ival.  We round up if this bit is set, provided that either:
   1019 
   1020          (1) abs_ival isn't exactly halfway between two floats, in which
   1021          case at least one of the bits following the rounding bit must be
   1022          set; i.e., abs_ival & lsb-1 != 0, or:
   1023 
   1024          (2) the resulting rounded value has least significant bit 0; or
   1025          in other words the bit above the rounding bit is set (this is the
   1026          'to-even' bit of round-half-to-even); i.e., abs_ival & 2*lsb != 0
   1027 
   1028        The condition "(1) or (2)" equates to abs_ival & 3*lsb-1 != 0. */
   1029 
   1030     lsb = 1L << (bits_in_ulong(abs_ival)-DBL_MANT_DIG-1);
   1031     round_up = (abs_ival & lsb) && (abs_ival & (3*lsb-1));
   1032     abs_ival &= -2*lsb;
   1033     if (round_up)
   1034         abs_ival += 2*lsb;
   1035     return PyFloat_FromDouble(v->ob_ival < 0 ?
   1036                               -(double)abs_ival :
   1037                   (double)abs_ival);
   1038 }
   1039 
   1040 #endif
   1041 
   1042 static PyObject *
   1043 int_oct(PyIntObject *v)
   1044 {
   1045     return _PyInt_Format(v, 8, 0);
   1046 }
   1047 
   1048 static PyObject *
   1049 int_hex(PyIntObject *v)
   1050 {
   1051     return _PyInt_Format(v, 16, 0);
   1052 }
   1053 
   1054 static PyObject *
   1055 int_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
   1056 
   1057 static PyObject *
   1058 int_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
   1059 {
   1060     PyObject *x = NULL;
   1061     int base = -909;
   1062     static char *kwlist[] = {"x", "base", 0};
   1063 
   1064     if (type != &PyInt_Type)
   1065         return int_subtype_new(type, args, kwds); /* Wimp out */
   1066     if (!PyArg_ParseTupleAndKeywords(args, kwds, "|Oi:int", kwlist,
   1067                                      &x, &base))
   1068         return NULL;
   1069     if (x == NULL) {
   1070         if (base != -909) {
   1071             PyErr_SetString(PyExc_TypeError,
   1072                             "int() missing string argument");
   1073             return NULL;
   1074         }
   1075         return PyInt_FromLong(0L);
   1076     }
   1077     if (base == -909)
   1078         return PyNumber_Int(x);
   1079     if (PyString_Check(x)) {
   1080         /* Since PyInt_FromString doesn't have a length parameter,
   1081          * check here for possible NULs in the string. */
   1082         char *string = PyString_AS_STRING(x);
   1083         if (strlen(string) != PyString_Size(x)) {
   1084             /* create a repr() of the input string,
   1085              * just like PyInt_FromString does */
   1086             PyObject *srepr;
   1087             srepr = PyObject_Repr(x);
   1088             if (srepr == NULL)
   1089                 return NULL;
   1090             PyErr_Format(PyExc_ValueError,
   1091                  "invalid literal for int() with base %d: %s",
   1092                  base, PyString_AS_STRING(srepr));
   1093             Py_DECREF(srepr);
   1094             return NULL;
   1095         }
   1096         return PyInt_FromString(string, NULL, base);
   1097     }
   1098 #ifdef Py_USING_UNICODE
   1099     if (PyUnicode_Check(x))
   1100         return PyInt_FromUnicode(PyUnicode_AS_UNICODE(x),
   1101                                  PyUnicode_GET_SIZE(x),
   1102                                  base);
   1103 #endif
   1104     PyErr_SetString(PyExc_TypeError,
   1105                     "int() can't convert non-string with explicit base");
   1106     return NULL;
   1107 }
   1108 
   1109 /* Wimpy, slow approach to tp_new calls for subtypes of int:
   1110    first create a regular int from whatever arguments we got,
   1111    then allocate a subtype instance and initialize its ob_ival
   1112    from the regular int.  The regular int is then thrown away.
   1113 */
   1114 static PyObject *
   1115 int_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
   1116 {
   1117     PyObject *tmp, *newobj;
   1118     long ival;
   1119 
   1120     assert(PyType_IsSubtype(type, &PyInt_Type));
   1121     tmp = int_new(&PyInt_Type, args, kwds);
   1122     if (tmp == NULL)
   1123         return NULL;
   1124     if (!PyInt_Check(tmp)) {
   1125         ival = PyLong_AsLong(tmp);
   1126         if (ival == -1 && PyErr_Occurred()) {
   1127             Py_DECREF(tmp);
   1128             return NULL;
   1129         }
   1130     } else {
   1131         ival = ((PyIntObject *)tmp)->ob_ival;
   1132     }
   1133 
   1134     newobj = type->tp_alloc(type, 0);
   1135     if (newobj == NULL) {
   1136         Py_DECREF(tmp);
   1137         return NULL;
   1138     }
   1139     ((PyIntObject *)newobj)->ob_ival = ival;
   1140     Py_DECREF(tmp);
   1141     return newobj;
   1142 }
   1143 
   1144 static PyObject *
   1145 int_getnewargs(PyIntObject *v)
   1146 {
   1147     return Py_BuildValue("(l)", v->ob_ival);
   1148 }
   1149 
   1150 static PyObject *
   1151 int_get0(PyIntObject *v, void *context) {
   1152     return PyInt_FromLong(0L);
   1153 }
   1154 
   1155 static PyObject *
   1156 int_get1(PyIntObject *v, void *context) {
   1157     return PyInt_FromLong(1L);
   1158 }
   1159 
   1160 /* Convert an integer to a decimal string.  On many platforms, this
   1161    will be significantly faster than the general arbitrary-base
   1162    conversion machinery in _PyInt_Format, thanks to optimization
   1163    opportunities offered by division by a compile-time constant. */
   1164 static PyObject *
   1165 int_to_decimal_string(PyIntObject *v) {
   1166     char buf[sizeof(long)*CHAR_BIT/3+6], *p, *bufend;
   1167     long n = v->ob_ival;
   1168     unsigned long absn;
   1169     p = bufend = buf + sizeof(buf);
   1170     absn = n < 0 ? 0UL - n : n;
   1171     do {
   1172         *--p = '0' + (char)(absn % 10);
   1173         absn /= 10;
   1174     } while (absn);
   1175     if (n < 0)
   1176         *--p = '-';
   1177     return PyString_FromStringAndSize(p, bufend - p);
   1178 }
   1179 
   1180 /* Convert an integer to the given base.  Returns a string.
   1181    If base is 2, 8 or 16, add the proper prefix '0b', '0o' or '0x'.
   1182    If newstyle is zero, then use the pre-2.6 behavior of octal having
   1183    a leading "0" */
   1184 PyAPI_FUNC(PyObject*)
   1185 _PyInt_Format(PyIntObject *v, int base, int newstyle)
   1186 {
   1187     /* There are no doubt many, many ways to optimize this, using code
   1188        similar to _PyLong_Format */
   1189     long n = v->ob_ival;
   1190     int  negative = n < 0;
   1191     int is_zero = n == 0;
   1192 
   1193     /* For the reasoning behind this size, see
   1194        http://c-faq.com/misc/hexio.html. Then, add a few bytes for
   1195        the possible sign and prefix "0[box]" */
   1196     char buf[sizeof(n)*CHAR_BIT+6];
   1197 
   1198     /* Start by pointing to the end of the buffer.  We fill in from
   1199        the back forward. */
   1200     char* p = &buf[sizeof(buf)];
   1201 
   1202     assert(base >= 2 && base <= 36);
   1203 
   1204     /* Special case base 10, for speed */
   1205     if (base == 10)
   1206         return int_to_decimal_string(v);
   1207 
   1208     do {
   1209         /* I'd use i_divmod, except it doesn't produce the results
   1210            I want when n is negative.  So just duplicate the salient
   1211            part here. */
   1212         long div = n / base;
   1213         long mod = n - div * base;
   1214 
   1215         /* convert abs(mod) to the right character in [0-9, a-z] */
   1216         char cdigit = (char)(mod < 0 ? -mod : mod);
   1217         cdigit += (cdigit < 10) ? '0' : 'a'-10;
   1218         *--p = cdigit;
   1219 
   1220         n = div;
   1221     } while(n);
   1222 
   1223     if (base == 2) {
   1224         *--p = 'b';
   1225         *--p = '0';
   1226     }
   1227     else if (base == 8) {
   1228         if (newstyle) {
   1229             *--p = 'o';
   1230             *--p = '0';
   1231         }
   1232         else
   1233             if (!is_zero)
   1234                 *--p = '0';
   1235     }
   1236     else if (base == 16) {
   1237         *--p = 'x';
   1238         *--p = '0';
   1239     }
   1240     else {
   1241         *--p = '#';
   1242         *--p = '0' + base%10;
   1243         if (base > 10)
   1244             *--p = '0' + base/10;
   1245     }
   1246     if (negative)
   1247         *--p = '-';
   1248 
   1249     return PyString_FromStringAndSize(p, &buf[sizeof(buf)] - p);
   1250 }
   1251 
   1252 static PyObject *
   1253 int__format__(PyObject *self, PyObject *args)
   1254 {
   1255     PyObject *format_spec;
   1256 
   1257     if (!PyArg_ParseTuple(args, "O:__format__", &format_spec))
   1258         return NULL;
   1259     if (PyBytes_Check(format_spec))
   1260         return _PyInt_FormatAdvanced(self,
   1261                                      PyBytes_AS_STRING(format_spec),
   1262                                      PyBytes_GET_SIZE(format_spec));
   1263     if (PyUnicode_Check(format_spec)) {
   1264         /* Convert format_spec to a str */
   1265         PyObject *result;
   1266         PyObject *str_spec = PyObject_Str(format_spec);
   1267 
   1268         if (str_spec == NULL)
   1269             return NULL;
   1270 
   1271         result = _PyInt_FormatAdvanced(self,
   1272                                        PyBytes_AS_STRING(str_spec),
   1273                                        PyBytes_GET_SIZE(str_spec));
   1274 
   1275         Py_DECREF(str_spec);
   1276         return result;
   1277     }
   1278     PyErr_SetString(PyExc_TypeError, "__format__ requires str or unicode");
   1279     return NULL;
   1280 }
   1281 
   1282 static PyObject *
   1283 int_bit_length(PyIntObject *v)
   1284 {
   1285     unsigned long n;
   1286 
   1287     if (v->ob_ival < 0)
   1288         /* avoid undefined behaviour when v->ob_ival == -LONG_MAX-1 */
   1289         n = 0U-(unsigned long)v->ob_ival;
   1290     else
   1291         n = (unsigned long)v->ob_ival;
   1292 
   1293     return PyInt_FromLong(bits_in_ulong(n));
   1294 }
   1295 
   1296 PyDoc_STRVAR(int_bit_length_doc,
   1297 "int.bit_length() -> int\n\
   1298 \n\
   1299 Number of bits necessary to represent self in binary.\n\
   1300 >>> bin(37)\n\
   1301 '0b100101'\n\
   1302 >>> (37).bit_length()\n\
   1303 6");
   1304 
   1305 #if 0
   1306 static PyObject *
   1307 int_is_finite(PyObject *v)
   1308 {
   1309     Py_RETURN_TRUE;
   1310 }
   1311 #endif
   1312 
   1313 static PyMethodDef int_methods[] = {
   1314     {"conjugate",       (PyCFunction)int_int,   METH_NOARGS,
   1315      "Returns self, the complex conjugate of any int."},
   1316     {"bit_length", (PyCFunction)int_bit_length, METH_NOARGS,
   1317      int_bit_length_doc},
   1318 #if 0
   1319     {"is_finite",       (PyCFunction)int_is_finite,     METH_NOARGS,
   1320      "Returns always True."},
   1321 #endif
   1322     {"__trunc__",       (PyCFunction)int_int,   METH_NOARGS,
   1323      "Truncating an Integral returns itself."},
   1324     {"__getnewargs__",          (PyCFunction)int_getnewargs,    METH_NOARGS},
   1325     {"__format__", (PyCFunction)int__format__, METH_VARARGS},
   1326     {NULL,              NULL}           /* sentinel */
   1327 };
   1328 
   1329 static PyGetSetDef int_getset[] = {
   1330     {"real",
   1331      (getter)int_int, (setter)NULL,
   1332      "the real part of a complex number",
   1333      NULL},
   1334     {"imag",
   1335      (getter)int_get0, (setter)NULL,
   1336      "the imaginary part of a complex number",
   1337      NULL},
   1338     {"numerator",
   1339      (getter)int_int, (setter)NULL,
   1340      "the numerator of a rational number in lowest terms",
   1341      NULL},
   1342     {"denominator",
   1343      (getter)int_get1, (setter)NULL,
   1344      "the denominator of a rational number in lowest terms",
   1345      NULL},
   1346     {NULL}  /* Sentinel */
   1347 };
   1348 
   1349 PyDoc_STRVAR(int_doc,
   1350 "int(x=0) -> int or long\n\
   1351 int(x, base=10) -> int or long\n\
   1352 \n\
   1353 Convert a number or string to an integer, or return 0 if no arguments\n\
   1354 are given.  If x is floating point, the conversion truncates towards zero.\n\
   1355 If x is outside the integer range, the function returns a long instead.\n\
   1356 \n\
   1357 If x is not a number or if base is given, then x must be a string or\n\
   1358 Unicode object representing an integer literal in the given base.  The\n\
   1359 literal can be preceded by '+' or '-' and be surrounded by whitespace.\n\
   1360 The base defaults to 10.  Valid bases are 0 and 2-36.  Base 0 means to\n\
   1361 interpret the base from the string as an integer literal.\n\
   1362 >>> int('0b100', base=0)\n\
   1363 4");
   1364 
   1365 static PyNumberMethods int_as_number = {
   1366     (binaryfunc)int_add,        /*nb_add*/
   1367     (binaryfunc)int_sub,        /*nb_subtract*/
   1368     (binaryfunc)int_mul,        /*nb_multiply*/
   1369     (binaryfunc)int_classic_div, /*nb_divide*/
   1370     (binaryfunc)int_mod,        /*nb_remainder*/
   1371     (binaryfunc)int_divmod,     /*nb_divmod*/
   1372     (ternaryfunc)int_pow,       /*nb_power*/
   1373     (unaryfunc)int_neg,         /*nb_negative*/
   1374     (unaryfunc)int_int,         /*nb_positive*/
   1375     (unaryfunc)int_abs,         /*nb_absolute*/
   1376     (inquiry)int_nonzero,       /*nb_nonzero*/
   1377     (unaryfunc)int_invert,      /*nb_invert*/
   1378     (binaryfunc)int_lshift,     /*nb_lshift*/
   1379     (binaryfunc)int_rshift,     /*nb_rshift*/
   1380     (binaryfunc)int_and,        /*nb_and*/
   1381     (binaryfunc)int_xor,        /*nb_xor*/
   1382     (binaryfunc)int_or,         /*nb_or*/
   1383     int_coerce,                 /*nb_coerce*/
   1384     (unaryfunc)int_int,         /*nb_int*/
   1385     (unaryfunc)int_long,        /*nb_long*/
   1386     (unaryfunc)int_float,       /*nb_float*/
   1387     (unaryfunc)int_oct,         /*nb_oct*/
   1388     (unaryfunc)int_hex,         /*nb_hex*/
   1389     0,                          /*nb_inplace_add*/
   1390     0,                          /*nb_inplace_subtract*/
   1391     0,                          /*nb_inplace_multiply*/
   1392     0,                          /*nb_inplace_divide*/
   1393     0,                          /*nb_inplace_remainder*/
   1394     0,                          /*nb_inplace_power*/
   1395     0,                          /*nb_inplace_lshift*/
   1396     0,                          /*nb_inplace_rshift*/
   1397     0,                          /*nb_inplace_and*/
   1398     0,                          /*nb_inplace_xor*/
   1399     0,                          /*nb_inplace_or*/
   1400     (binaryfunc)int_div,        /* nb_floor_divide */
   1401     (binaryfunc)int_true_divide, /* nb_true_divide */
   1402     0,                          /* nb_inplace_floor_divide */
   1403     0,                          /* nb_inplace_true_divide */
   1404     (unaryfunc)int_int,         /* nb_index */
   1405 };
   1406 
   1407 PyTypeObject PyInt_Type = {
   1408     PyVarObject_HEAD_INIT(&PyType_Type, 0)
   1409     "int",
   1410     sizeof(PyIntObject),
   1411     0,
   1412     (destructor)int_dealloc,                    /* tp_dealloc */
   1413     (printfunc)int_print,                       /* tp_print */
   1414     0,                                          /* tp_getattr */
   1415     0,                                          /* tp_setattr */
   1416     (cmpfunc)int_compare,                       /* tp_compare */
   1417     (reprfunc)int_to_decimal_string,            /* tp_repr */
   1418     &int_as_number,                             /* tp_as_number */
   1419     0,                                          /* tp_as_sequence */
   1420     0,                                          /* tp_as_mapping */
   1421     (hashfunc)int_hash,                         /* tp_hash */
   1422     0,                                          /* tp_call */
   1423     (reprfunc)int_to_decimal_string,            /* tp_str */
   1424     PyObject_GenericGetAttr,                    /* tp_getattro */
   1425     0,                                          /* tp_setattro */
   1426     0,                                          /* tp_as_buffer */
   1427     Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES |
   1428         Py_TPFLAGS_BASETYPE | Py_TPFLAGS_INT_SUBCLASS,          /* tp_flags */
   1429     int_doc,                                    /* tp_doc */
   1430     0,                                          /* tp_traverse */
   1431     0,                                          /* tp_clear */
   1432     0,                                          /* tp_richcompare */
   1433     0,                                          /* tp_weaklistoffset */
   1434     0,                                          /* tp_iter */
   1435     0,                                          /* tp_iternext */
   1436     int_methods,                                /* tp_methods */
   1437     0,                                          /* tp_members */
   1438     int_getset,                                 /* tp_getset */
   1439     0,                                          /* tp_base */
   1440     0,                                          /* tp_dict */
   1441     0,                                          /* tp_descr_get */
   1442     0,                                          /* tp_descr_set */
   1443     0,                                          /* tp_dictoffset */
   1444     0,                                          /* tp_init */
   1445     0,                                          /* tp_alloc */
   1446     int_new,                                    /* tp_new */
   1447 };
   1448 
   1449 int
   1450 _PyInt_Init(void)
   1451 {
   1452     PyIntObject *v;
   1453     int ival;
   1454 #if NSMALLNEGINTS + NSMALLPOSINTS > 0
   1455     for (ival = -NSMALLNEGINTS; ival < NSMALLPOSINTS; ival++) {
   1456         if (!free_list && (free_list = fill_free_list()) == NULL)
   1457             return 0;
   1458         /* PyObject_New is inlined */
   1459         v = free_list;
   1460         free_list = (PyIntObject *)Py_TYPE(v);
   1461         (void)PyObject_INIT(v, &PyInt_Type);
   1462         v->ob_ival = ival;
   1463         small_ints[ival + NSMALLNEGINTS] = v;
   1464     }
   1465 #endif
   1466     return 1;
   1467 }
   1468 
   1469 int
   1470 PyInt_ClearFreeList(void)
   1471 {
   1472     PyIntObject *p;
   1473     PyIntBlock *list, *next;
   1474     int i;
   1475     int u;                      /* remaining unfreed ints per block */
   1476     int freelist_size = 0;
   1477 
   1478     list = block_list;
   1479     block_list = NULL;
   1480     free_list = NULL;
   1481     while (list != NULL) {
   1482         u = 0;
   1483         for (i = 0, p = &list->objects[0];
   1484              i < N_INTOBJECTS;
   1485              i++, p++) {
   1486             if (PyInt_CheckExact(p) && p->ob_refcnt != 0)
   1487                 u++;
   1488         }
   1489         next = list->next;
   1490         if (u) {
   1491             list->next = block_list;
   1492             block_list = list;
   1493             for (i = 0, p = &list->objects[0];
   1494                  i < N_INTOBJECTS;
   1495                  i++, p++) {
   1496                 if (!PyInt_CheckExact(p) ||
   1497                     p->ob_refcnt == 0) {
   1498                     Py_TYPE(p) = (struct _typeobject *)
   1499                         free_list;
   1500                     free_list = p;
   1501                 }
   1502 #if NSMALLNEGINTS + NSMALLPOSINTS > 0
   1503                 else if (-NSMALLNEGINTS <= p->ob_ival &&
   1504                          p->ob_ival < NSMALLPOSINTS &&
   1505                          small_ints[p->ob_ival +
   1506                                     NSMALLNEGINTS] == NULL) {
   1507                     Py_INCREF(p);
   1508                     small_ints[p->ob_ival +
   1509                                NSMALLNEGINTS] = p;
   1510                 }
   1511 #endif
   1512             }
   1513         }
   1514         else {
   1515             PyMem_FREE(list);
   1516         }
   1517         freelist_size += u;
   1518         list = next;
   1519     }
   1520 
   1521     return freelist_size;
   1522 }
   1523 
   1524 void
   1525 PyInt_Fini(void)
   1526 {
   1527     PyIntObject *p;
   1528     PyIntBlock *list;
   1529     int i;
   1530     int u;                      /* total unfreed ints per block */
   1531 
   1532 #if NSMALLNEGINTS + NSMALLPOSINTS > 0
   1533     PyIntObject **q;
   1534 
   1535     i = NSMALLNEGINTS + NSMALLPOSINTS;
   1536     q = small_ints;
   1537     while (--i >= 0) {
   1538         Py_XDECREF(*q);
   1539         *q++ = NULL;
   1540     }
   1541 #endif
   1542     u = PyInt_ClearFreeList();
   1543     if (!Py_VerboseFlag)
   1544         return;
   1545     fprintf(stderr, "# cleanup ints");
   1546     if (!u) {
   1547         fprintf(stderr, "\n");
   1548     }
   1549     else {
   1550         fprintf(stderr,
   1551             ": %d unfreed int%s\n",
   1552             u, u == 1 ? "" : "s");
   1553     }
   1554     if (Py_VerboseFlag > 1) {
   1555         list = block_list;
   1556         while (list != NULL) {
   1557             for (i = 0, p = &list->objects[0];
   1558                  i < N_INTOBJECTS;
   1559                  i++, p++) {
   1560                 if (PyInt_CheckExact(p) && p->ob_refcnt != 0)
   1561                     /* XXX(twouters) cast refcount to
   1562                        long until %zd is universally
   1563                        available
   1564                      */
   1565                     fprintf(stderr,
   1566                 "#   <int at %p, refcnt=%ld, val=%ld>\n",
   1567                                 p, (long)p->ob_refcnt,
   1568                                 p->ob_ival);
   1569             }
   1570             list = list->next;
   1571         }
   1572     }
   1573 }
   1574