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