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