1 /* Long (arbitrary precision) integer object implementation */
2 
3 /* XXX The functional organization of this file is terrible */
4 
5 #include "Python.h"
6 #include "pycore_bitutils.h"      // _Py_popcount32()
7 #include "pycore_initconfig.h"    // _PyStatus_OK()
8 #include "pycore_long.h"          // _Py_SmallInts
9 #include "pycore_object.h"        // _PyObject_InitVar()
10 #include "pycore_pystate.h"       // _Py_IsMainInterpreter()
11 #include "pycore_runtime.h"       // _PY_NSMALLPOSINTS
12 #include "pycore_structseq.h"     // _PyStructSequence_FiniType()
13 
14 #include <ctype.h>
15 #include <float.h>
16 #include <stddef.h>
17 #include <stdlib.h>               // abs()
18 
19 #include "clinic/longobject.c.h"
20 /*[clinic input]
21 class int "PyObject *" "&PyLong_Type"
22 [clinic start generated code]*/
23 /*[clinic end generated code: output=da39a3ee5e6b4b0d input=ec0275e3422a36e3]*/
24 
25 /* Is this PyLong of size 1, 0 or -1? */
26 #define IS_MEDIUM_VALUE(x) (((size_t)Py_SIZE(x)) + 1U < 3U)
27 
28 /* convert a PyLong of size 1, 0 or -1 to a C integer */
29 static inline stwodigits
medium_value(PyLongObject * x)30 medium_value(PyLongObject *x)
31 {
32     assert(IS_MEDIUM_VALUE(x));
33     return ((stwodigits)Py_SIZE(x)) * x->ob_digit[0];
34 }
35 
36 #define IS_SMALL_INT(ival) (-_PY_NSMALLNEGINTS <= (ival) && (ival) < _PY_NSMALLPOSINTS)
37 #define IS_SMALL_UINT(ival) ((ival) < _PY_NSMALLPOSINTS)
38 
39 #define _MAX_STR_DIGITS_ERROR_FMT_TO_INT "Exceeds the limit (%d digits) for integer string conversion: value has %zd digits; use sys.set_int_max_str_digits() to increase the limit"
40 #define _MAX_STR_DIGITS_ERROR_FMT_TO_STR "Exceeds the limit (%d digits) for integer string conversion; use sys.set_int_max_str_digits() to increase the limit"
41 
42 static inline void
_Py_DECREF_INT(PyLongObject * op)43 _Py_DECREF_INT(PyLongObject *op)
44 {
45     assert(PyLong_CheckExact(op));
46     _Py_DECREF_SPECIALIZED((PyObject *)op, (destructor)PyObject_Free);
47 }
48 
49 static inline int
is_medium_int(stwodigits x)50 is_medium_int(stwodigits x)
51 {
52     /* Take care that we are comparing unsigned values. */
53     twodigits x_plus_mask = ((twodigits)x) + PyLong_MASK;
54     return x_plus_mask < ((twodigits)PyLong_MASK) + PyLong_BASE;
55 }
56 
57 static PyObject *
get_small_int(sdigit ival)58 get_small_int(sdigit ival)
59 {
60     assert(IS_SMALL_INT(ival));
61     PyObject *v = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + ival];
62     Py_INCREF(v);
63     return v;
64 }
65 
66 static PyLongObject *
maybe_small_long(PyLongObject * v)67 maybe_small_long(PyLongObject *v)
68 {
69     if (v && IS_MEDIUM_VALUE(v)) {
70         stwodigits ival = medium_value(v);
71         if (IS_SMALL_INT(ival)) {
72             _Py_DECREF_INT(v);
73             return (PyLongObject *)get_small_int((sdigit)ival);
74         }
75     }
76     return v;
77 }
78 
79 /* For int multiplication, use the O(N**2) school algorithm unless
80  * both operands contain more than KARATSUBA_CUTOFF digits (this
81  * being an internal Python int digit, in base BASE).
82  */
83 #define KARATSUBA_CUTOFF 70
84 #define KARATSUBA_SQUARE_CUTOFF (2 * KARATSUBA_CUTOFF)
85 
86 /* For exponentiation, use the binary left-to-right algorithm unless the
87  ^ exponent contains more than HUGE_EXP_CUTOFF bits.  In that case, do
88  * (no more than) EXP_WINDOW_SIZE bits at a time.  The potential drawback is
89  * that a table of 2**(EXP_WINDOW_SIZE - 1) intermediate results is
90  * precomputed.
91  */
92 #define EXP_WINDOW_SIZE 5
93 #define EXP_TABLE_LEN (1 << (EXP_WINDOW_SIZE - 1))
94 /* Suppose the exponent has bit length e. All ways of doing this
95  * need e squarings. The binary method also needs a multiply for
96  * each bit set. In a k-ary method with window width w, a multiply
97  * for each non-zero window, so at worst (and likely!)
98  * ceiling(e/w). The k-ary sliding window method has the same
99  * worst case, but the window slides so it can sometimes skip
100  * over an all-zero window that the fixed-window method can't
101  * exploit. In addition, the windowing methods need multiplies
102  * to precompute a table of small powers.
103  *
104  * For the sliding window method with width 5, 16 precomputation
105  * multiplies are needed. Assuming about half the exponent bits
106  * are set, then, the binary method needs about e/2 extra mults
107  * and the window method about 16 + e/5.
108  *
109  * The latter is smaller for e > 53 1/3. We don't have direct
110  * access to the bit length, though, so call it 60, which is a
111  * multiple of a long digit's max bit length (15 or 30 so far).
112  */
113 #define HUGE_EXP_CUTOFF 60
114 
115 #define SIGCHECK(PyTryBlock)                    \
116     do {                                        \
117         if (PyErr_CheckSignals()) PyTryBlock    \
118     } while(0)
119 
120 /* Normalize (remove leading zeros from) an int object.
121    Doesn't attempt to free the storage--in most cases, due to the nature
122    of the algorithms used, this could save at most be one word anyway. */
123 
124 static PyLongObject *
long_normalize(PyLongObject * v)125 long_normalize(PyLongObject *v)
126 {
127     Py_ssize_t j = Py_ABS(Py_SIZE(v));
128     Py_ssize_t i = j;
129 
130     while (i > 0 && v->ob_digit[i-1] == 0)
131         --i;
132     if (i != j) {
133         Py_SET_SIZE(v, (Py_SIZE(v) < 0) ? -(i) : i);
134     }
135     return v;
136 }
137 
138 /* Allocate a new int object with size digits.
139    Return NULL and set exception if we run out of memory. */
140 
141 #define MAX_LONG_DIGITS \
142     ((PY_SSIZE_T_MAX - offsetof(PyLongObject, ob_digit))/sizeof(digit))
143 
144 PyLongObject *
_PyLong_New(Py_ssize_t size)145 _PyLong_New(Py_ssize_t size)
146 {
147     PyLongObject *result;
148     if (size > (Py_ssize_t)MAX_LONG_DIGITS) {
149         PyErr_SetString(PyExc_OverflowError,
150                         "too many digits in integer");
151         return NULL;
152     }
153     /* Fast operations for single digit integers (including zero)
154      * assume that there is always at least one digit present. */
155     Py_ssize_t ndigits = size ? size : 1;
156     /* Number of bytes needed is: offsetof(PyLongObject, ob_digit) +
157        sizeof(digit)*size.  Previous incarnations of this code used
158        sizeof(PyVarObject) instead of the offsetof, but this risks being
159        incorrect in the presence of padding between the PyVarObject header
160        and the digits. */
161     result = PyObject_Malloc(offsetof(PyLongObject, ob_digit) +
162                              ndigits*sizeof(digit));
163     if (!result) {
164         PyErr_NoMemory();
165         return NULL;
166     }
167     _PyObject_InitVar((PyVarObject*)result, &PyLong_Type, size);
168     return result;
169 }
170 
171 PyObject *
_PyLong_Copy(PyLongObject * src)172 _PyLong_Copy(PyLongObject *src)
173 {
174     PyLongObject *result;
175     Py_ssize_t i;
176 
177     assert(src != NULL);
178     i = Py_SIZE(src);
179     if (i < 0)
180         i = -(i);
181     if (i < 2) {
182         stwodigits ival = medium_value(src);
183         if (IS_SMALL_INT(ival)) {
184             return get_small_int((sdigit)ival);
185         }
186     }
187     result = _PyLong_New(i);
188     if (result != NULL) {
189         Py_SET_SIZE(result, Py_SIZE(src));
190         while (--i >= 0) {
191             result->ob_digit[i] = src->ob_digit[i];
192         }
193     }
194     return (PyObject *)result;
195 }
196 
197 static PyObject *
_PyLong_FromMedium(sdigit x)198 _PyLong_FromMedium(sdigit x)
199 {
200     assert(!IS_SMALL_INT(x));
201     assert(is_medium_int(x));
202     /* We could use a freelist here */
203     PyLongObject *v = PyObject_Malloc(sizeof(PyLongObject));
204     if (v == NULL) {
205         PyErr_NoMemory();
206         return NULL;
207     }
208     Py_ssize_t sign = x < 0 ? -1: 1;
209     digit abs_x = x < 0 ? -x : x;
210     _PyObject_InitVar((PyVarObject*)v, &PyLong_Type, sign);
211     v->ob_digit[0] = abs_x;
212     return (PyObject*)v;
213 }
214 
215 static PyObject *
_PyLong_FromLarge(stwodigits ival)216 _PyLong_FromLarge(stwodigits ival)
217 {
218     twodigits abs_ival;
219     int sign;
220     assert(!is_medium_int(ival));
221 
222     if (ival < 0) {
223         /* negate: can't write this as abs_ival = -ival since that
224            invokes undefined behaviour when ival is LONG_MIN */
225         abs_ival = 0U-(twodigits)ival;
226         sign = -1;
227     }
228     else {
229         abs_ival = (twodigits)ival;
230         sign = 1;
231     }
232     /* Must be at least two digits */
233     assert(abs_ival >> PyLong_SHIFT != 0);
234     twodigits t = abs_ival >> (PyLong_SHIFT * 2);
235     Py_ssize_t ndigits = 2;
236     while (t) {
237         ++ndigits;
238         t >>= PyLong_SHIFT;
239     }
240     PyLongObject *v = _PyLong_New(ndigits);
241     if (v != NULL) {
242         digit *p = v->ob_digit;
243         Py_SET_SIZE(v, ndigits * sign);
244         t = abs_ival;
245         while (t) {
246             *p++ = Py_SAFE_DOWNCAST(
247                 t & PyLong_MASK, twodigits, digit);
248             t >>= PyLong_SHIFT;
249         }
250     }
251     return (PyObject *)v;
252 }
253 
254 /* Create a new int object from a C word-sized int */
255 static inline PyObject *
_PyLong_FromSTwoDigits(stwodigits x)256 _PyLong_FromSTwoDigits(stwodigits x)
257 {
258     if (IS_SMALL_INT(x)) {
259         return get_small_int((sdigit)x);
260     }
261     assert(x != 0);
262     if (is_medium_int(x)) {
263         return _PyLong_FromMedium((sdigit)x);
264     }
265     return _PyLong_FromLarge(x);
266 }
267 
268 /* If a freshly-allocated int is already shared, it must
269    be a small integer, so negating it must go to PyLong_FromLong */
270 Py_LOCAL_INLINE(void)
_PyLong_Negate(PyLongObject ** x_p)271 _PyLong_Negate(PyLongObject **x_p)
272 {
273     PyLongObject *x;
274 
275     x = (PyLongObject *)*x_p;
276     if (Py_REFCNT(x) == 1) {
277         Py_SET_SIZE(x, -Py_SIZE(x));
278         return;
279     }
280 
281     *x_p = (PyLongObject *)_PyLong_FromSTwoDigits(-medium_value(x));
282     Py_DECREF(x);
283 }
284 
285 /* Create a new int object from a C long int */
286 
287 PyObject *
PyLong_FromLong(long ival)288 PyLong_FromLong(long ival)
289 {
290     PyLongObject *v;
291     unsigned long abs_ival, t;
292     int ndigits;
293 
294     /* Handle small and medium cases. */
295     if (IS_SMALL_INT(ival)) {
296         return get_small_int((sdigit)ival);
297     }
298     if (-(long)PyLong_MASK <= ival && ival <= (long)PyLong_MASK) {
299         return _PyLong_FromMedium((sdigit)ival);
300     }
301 
302     /* Count digits (at least two - smaller cases were handled above). */
303     abs_ival = ival < 0 ? 0U-(unsigned long)ival : (unsigned long)ival;
304     /* Do shift in two steps to avoid possible undefined behavior. */
305     t = abs_ival >> PyLong_SHIFT >> PyLong_SHIFT;
306     ndigits = 2;
307     while (t) {
308         ++ndigits;
309         t >>= PyLong_SHIFT;
310     }
311 
312     /* Construct output value. */
313     v = _PyLong_New(ndigits);
314     if (v != NULL) {
315         digit *p = v->ob_digit;
316         Py_SET_SIZE(v, ival < 0 ? -ndigits : ndigits);
317         t = abs_ival;
318         while (t) {
319             *p++ = (digit)(t & PyLong_MASK);
320             t >>= PyLong_SHIFT;
321         }
322     }
323     return (PyObject *)v;
324 }
325 
326 #define PYLONG_FROM_UINT(INT_TYPE, ival) \
327     do { \
328         if (IS_SMALL_UINT(ival)) { \
329             return get_small_int((sdigit)(ival)); \
330         } \
331         /* Count the number of Python digits. */ \
332         Py_ssize_t ndigits = 0; \
333         INT_TYPE t = (ival); \
334         while (t) { \
335             ++ndigits; \
336             t >>= PyLong_SHIFT; \
337         } \
338         PyLongObject *v = _PyLong_New(ndigits); \
339         if (v == NULL) { \
340             return NULL; \
341         } \
342         digit *p = v->ob_digit; \
343         while ((ival)) { \
344             *p++ = (digit)((ival) & PyLong_MASK); \
345             (ival) >>= PyLong_SHIFT; \
346         } \
347         return (PyObject *)v; \
348     } while(0)
349 
350 /* Create a new int object from a C unsigned long int */
351 
352 PyObject *
PyLong_FromUnsignedLong(unsigned long ival)353 PyLong_FromUnsignedLong(unsigned long ival)
354 {
355     PYLONG_FROM_UINT(unsigned long, ival);
356 }
357 
358 /* Create a new int object from a C unsigned long long int. */
359 
360 PyObject *
PyLong_FromUnsignedLongLong(unsigned long long ival)361 PyLong_FromUnsignedLongLong(unsigned long long ival)
362 {
363     PYLONG_FROM_UINT(unsigned long long, ival);
364 }
365 
366 /* Create a new int object from a C size_t. */
367 
368 PyObject *
PyLong_FromSize_t(size_t ival)369 PyLong_FromSize_t(size_t ival)
370 {
371     PYLONG_FROM_UINT(size_t, ival);
372 }
373 
374 /* Create a new int object from a C double */
375 
376 PyObject *
PyLong_FromDouble(double dval)377 PyLong_FromDouble(double dval)
378 {
379     /* Try to get out cheap if this fits in a long. When a finite value of real
380      * floating type is converted to an integer type, the value is truncated
381      * toward zero. If the value of the integral part cannot be represented by
382      * the integer type, the behavior is undefined. Thus, we must check that
383      * value is in range (LONG_MIN - 1, LONG_MAX + 1). If a long has more bits
384      * of precision than a double, casting LONG_MIN - 1 to double may yield an
385      * approximation, but LONG_MAX + 1 is a power of two and can be represented
386      * as double exactly (assuming FLT_RADIX is 2 or 16), so for simplicity
387      * check against [-(LONG_MAX + 1), LONG_MAX + 1).
388      */
389     const double int_max = (unsigned long)LONG_MAX + 1;
390     if (-int_max < dval && dval < int_max) {
391         return PyLong_FromLong((long)dval);
392     }
393 
394     PyLongObject *v;
395     double frac;
396     int i, ndig, expo, neg;
397     neg = 0;
398     if (Py_IS_INFINITY(dval)) {
399         PyErr_SetString(PyExc_OverflowError,
400                         "cannot convert float infinity to integer");
401         return NULL;
402     }
403     if (Py_IS_NAN(dval)) {
404         PyErr_SetString(PyExc_ValueError,
405                         "cannot convert float NaN to integer");
406         return NULL;
407     }
408     if (dval < 0.0) {
409         neg = 1;
410         dval = -dval;
411     }
412     frac = frexp(dval, &expo); /* dval = frac*2**expo; 0.0 <= frac < 1.0 */
413     assert(expo > 0);
414     ndig = (expo-1) / PyLong_SHIFT + 1; /* Number of 'digits' in result */
415     v = _PyLong_New(ndig);
416     if (v == NULL)
417         return NULL;
418     frac = ldexp(frac, (expo-1) % PyLong_SHIFT + 1);
419     for (i = ndig; --i >= 0; ) {
420         digit bits = (digit)frac;
421         v->ob_digit[i] = bits;
422         frac = frac - (double)bits;
423         frac = ldexp(frac, PyLong_SHIFT);
424     }
425     if (neg) {
426         Py_SET_SIZE(v, -(Py_SIZE(v)));
427     }
428     return (PyObject *)v;
429 }
430 
431 /* Checking for overflow in PyLong_AsLong is a PITA since C doesn't define
432  * anything about what happens when a signed integer operation overflows,
433  * and some compilers think they're doing you a favor by being "clever"
434  * then.  The bit pattern for the largest positive signed long is
435  * (unsigned long)LONG_MAX, and for the smallest negative signed long
436  * it is abs(LONG_MIN), which we could write -(unsigned long)LONG_MIN.
437  * However, some other compilers warn about applying unary minus to an
438  * unsigned operand.  Hence the weird "0-".
439  */
440 #define PY_ABS_LONG_MIN         (0-(unsigned long)LONG_MIN)
441 #define PY_ABS_SSIZE_T_MIN      (0-(size_t)PY_SSIZE_T_MIN)
442 
443 /* Get a C long int from an int object or any object that has an __index__
444    method.
445 
446    On overflow, return -1 and set *overflow to 1 or -1 depending on the sign of
447    the result.  Otherwise *overflow is 0.
448 
449    For other errors (e.g., TypeError), return -1 and set an error condition.
450    In this case *overflow will be 0.
451 */
452 
453 long
PyLong_AsLongAndOverflow(PyObject * vv,int * overflow)454 PyLong_AsLongAndOverflow(PyObject *vv, int *overflow)
455 {
456     /* This version by Tim Peters */
457     PyLongObject *v;
458     unsigned long x, prev;
459     long res;
460     Py_ssize_t i;
461     int sign;
462     int do_decref = 0; /* if PyNumber_Index was called */
463 
464     *overflow = 0;
465     if (vv == NULL) {
466         PyErr_BadInternalCall();
467         return -1;
468     }
469 
470     if (PyLong_Check(vv)) {
471         v = (PyLongObject *)vv;
472     }
473     else {
474         v = (PyLongObject *)_PyNumber_Index(vv);
475         if (v == NULL)
476             return -1;
477         do_decref = 1;
478     }
479 
480     res = -1;
481     i = Py_SIZE(v);
482 
483     switch (i) {
484     case -1:
485         res = -(sdigit)v->ob_digit[0];
486         break;
487     case 0:
488         res = 0;
489         break;
490     case 1:
491         res = v->ob_digit[0];
492         break;
493     default:
494         sign = 1;
495         x = 0;
496         if (i < 0) {
497             sign = -1;
498             i = -(i);
499         }
500         while (--i >= 0) {
501             prev = x;
502             x = (x << PyLong_SHIFT) | v->ob_digit[i];
503             if ((x >> PyLong_SHIFT) != prev) {
504                 *overflow = sign;
505                 goto exit;
506             }
507         }
508         /* Haven't lost any bits, but casting to long requires extra
509          * care (see comment above).
510          */
511         if (x <= (unsigned long)LONG_MAX) {
512             res = (long)x * sign;
513         }
514         else if (sign < 0 && x == PY_ABS_LONG_MIN) {
515             res = LONG_MIN;
516         }
517         else {
518             *overflow = sign;
519             /* res is already set to -1 */
520         }
521     }
522   exit:
523     if (do_decref) {
524         Py_DECREF(v);
525     }
526     return res;
527 }
528 
529 /* Get a C long int from an int object or any object that has an __index__
530    method.  Return -1 and set an error if overflow occurs. */
531 
532 long
PyLong_AsLong(PyObject * obj)533 PyLong_AsLong(PyObject *obj)
534 {
535     int overflow;
536     long result = PyLong_AsLongAndOverflow(obj, &overflow);
537     if (overflow) {
538         /* XXX: could be cute and give a different
539            message for overflow == -1 */
540         PyErr_SetString(PyExc_OverflowError,
541                         "Python int too large to convert to C long");
542     }
543     return result;
544 }
545 
546 /* Get a C int from an int object or any object that has an __index__
547    method.  Return -1 and set an error if overflow occurs. */
548 
549 int
_PyLong_AsInt(PyObject * obj)550 _PyLong_AsInt(PyObject *obj)
551 {
552     int overflow;
553     long result = PyLong_AsLongAndOverflow(obj, &overflow);
554     if (overflow || result > INT_MAX || result < INT_MIN) {
555         /* XXX: could be cute and give a different
556            message for overflow == -1 */
557         PyErr_SetString(PyExc_OverflowError,
558                         "Python int too large to convert to C int");
559         return -1;
560     }
561     return (int)result;
562 }
563 
564 /* Get a Py_ssize_t from an int object.
565    Returns -1 and sets an error condition if overflow occurs. */
566 
567 Py_ssize_t
PyLong_AsSsize_t(PyObject * vv)568 PyLong_AsSsize_t(PyObject *vv) {
569     PyLongObject *v;
570     size_t x, prev;
571     Py_ssize_t i;
572     int sign;
573 
574     if (vv == NULL) {
575         PyErr_BadInternalCall();
576         return -1;
577     }
578     if (!PyLong_Check(vv)) {
579         PyErr_SetString(PyExc_TypeError, "an integer is required");
580         return -1;
581     }
582 
583     v = (PyLongObject *)vv;
584     i = Py_SIZE(v);
585     switch (i) {
586     case -1: return -(sdigit)v->ob_digit[0];
587     case 0: return 0;
588     case 1: return v->ob_digit[0];
589     }
590     sign = 1;
591     x = 0;
592     if (i < 0) {
593         sign = -1;
594         i = -(i);
595     }
596     while (--i >= 0) {
597         prev = x;
598         x = (x << PyLong_SHIFT) | v->ob_digit[i];
599         if ((x >> PyLong_SHIFT) != prev)
600             goto overflow;
601     }
602     /* Haven't lost any bits, but casting to a signed type requires
603      * extra care (see comment above).
604      */
605     if (x <= (size_t)PY_SSIZE_T_MAX) {
606         return (Py_ssize_t)x * sign;
607     }
608     else if (sign < 0 && x == PY_ABS_SSIZE_T_MIN) {
609         return PY_SSIZE_T_MIN;
610     }
611     /* else overflow */
612 
613   overflow:
614     PyErr_SetString(PyExc_OverflowError,
615                     "Python int too large to convert to C ssize_t");
616     return -1;
617 }
618 
619 /* Get a C unsigned long int from an int object.
620    Returns -1 and sets an error condition if overflow occurs. */
621 
622 unsigned long
PyLong_AsUnsignedLong(PyObject * vv)623 PyLong_AsUnsignedLong(PyObject *vv)
624 {
625     PyLongObject *v;
626     unsigned long x, prev;
627     Py_ssize_t i;
628 
629     if (vv == NULL) {
630         PyErr_BadInternalCall();
631         return (unsigned long)-1;
632     }
633     if (!PyLong_Check(vv)) {
634         PyErr_SetString(PyExc_TypeError, "an integer is required");
635         return (unsigned long)-1;
636     }
637 
638     v = (PyLongObject *)vv;
639     i = Py_SIZE(v);
640     x = 0;
641     if (i < 0) {
642         PyErr_SetString(PyExc_OverflowError,
643                         "can't convert negative value to unsigned int");
644         return (unsigned long) -1;
645     }
646     switch (i) {
647     case 0: return 0;
648     case 1: return v->ob_digit[0];
649     }
650     while (--i >= 0) {
651         prev = x;
652         x = (x << PyLong_SHIFT) | v->ob_digit[i];
653         if ((x >> PyLong_SHIFT) != prev) {
654             PyErr_SetString(PyExc_OverflowError,
655                             "Python int too large to convert "
656                             "to C unsigned long");
657             return (unsigned long) -1;
658         }
659     }
660     return x;
661 }
662 
663 /* Get a C size_t from an int object. Returns (size_t)-1 and sets
664    an error condition if overflow occurs. */
665 
666 size_t
PyLong_AsSize_t(PyObject * vv)667 PyLong_AsSize_t(PyObject *vv)
668 {
669     PyLongObject *v;
670     size_t x, prev;
671     Py_ssize_t i;
672 
673     if (vv == NULL) {
674         PyErr_BadInternalCall();
675         return (size_t) -1;
676     }
677     if (!PyLong_Check(vv)) {
678         PyErr_SetString(PyExc_TypeError, "an integer is required");
679         return (size_t)-1;
680     }
681 
682     v = (PyLongObject *)vv;
683     i = Py_SIZE(v);
684     x = 0;
685     if (i < 0) {
686         PyErr_SetString(PyExc_OverflowError,
687                    "can't convert negative value to size_t");
688         return (size_t) -1;
689     }
690     switch (i) {
691     case 0: return 0;
692     case 1: return v->ob_digit[0];
693     }
694     while (--i >= 0) {
695         prev = x;
696         x = (x << PyLong_SHIFT) | v->ob_digit[i];
697         if ((x >> PyLong_SHIFT) != prev) {
698             PyErr_SetString(PyExc_OverflowError,
699                 "Python int too large to convert to C size_t");
700             return (size_t) -1;
701         }
702     }
703     return x;
704 }
705 
706 /* Get a C unsigned long int from an int object, ignoring the high bits.
707    Returns -1 and sets an error condition if an error occurs. */
708 
709 static unsigned long
_PyLong_AsUnsignedLongMask(PyObject * vv)710 _PyLong_AsUnsignedLongMask(PyObject *vv)
711 {
712     PyLongObject *v;
713     unsigned long x;
714     Py_ssize_t i;
715     int sign;
716 
717     if (vv == NULL || !PyLong_Check(vv)) {
718         PyErr_BadInternalCall();
719         return (unsigned long) -1;
720     }
721     v = (PyLongObject *)vv;
722     i = Py_SIZE(v);
723     switch (i) {
724     case 0: return 0;
725     case 1: return v->ob_digit[0];
726     }
727     sign = 1;
728     x = 0;
729     if (i < 0) {
730         sign = -1;
731         i = -i;
732     }
733     while (--i >= 0) {
734         x = (x << PyLong_SHIFT) | v->ob_digit[i];
735     }
736     return x * sign;
737 }
738 
739 unsigned long
PyLong_AsUnsignedLongMask(PyObject * op)740 PyLong_AsUnsignedLongMask(PyObject *op)
741 {
742     PyLongObject *lo;
743     unsigned long val;
744 
745     if (op == NULL) {
746         PyErr_BadInternalCall();
747         return (unsigned long)-1;
748     }
749 
750     if (PyLong_Check(op)) {
751         return _PyLong_AsUnsignedLongMask(op);
752     }
753 
754     lo = (PyLongObject *)_PyNumber_Index(op);
755     if (lo == NULL)
756         return (unsigned long)-1;
757 
758     val = _PyLong_AsUnsignedLongMask((PyObject *)lo);
759     Py_DECREF(lo);
760     return val;
761 }
762 
763 int
_PyLong_Sign(PyObject * vv)764 _PyLong_Sign(PyObject *vv)
765 {
766     PyLongObject *v = (PyLongObject *)vv;
767 
768     assert(v != NULL);
769     assert(PyLong_Check(v));
770 
771     return Py_SIZE(v) == 0 ? 0 : (Py_SIZE(v) < 0 ? -1 : 1);
772 }
773 
774 static int
bit_length_digit(digit x)775 bit_length_digit(digit x)
776 {
777     // digit can be larger than unsigned long, but only PyLong_SHIFT bits
778     // of it will be ever used.
779     static_assert(PyLong_SHIFT <= sizeof(unsigned long) * 8,
780                   "digit is larger than unsigned long");
781     return _Py_bit_length((unsigned long)x);
782 }
783 
784 size_t
_PyLong_NumBits(PyObject * vv)785 _PyLong_NumBits(PyObject *vv)
786 {
787     PyLongObject *v = (PyLongObject *)vv;
788     size_t result = 0;
789     Py_ssize_t ndigits;
790     int msd_bits;
791 
792     assert(v != NULL);
793     assert(PyLong_Check(v));
794     ndigits = Py_ABS(Py_SIZE(v));
795     assert(ndigits == 0 || v->ob_digit[ndigits - 1] != 0);
796     if (ndigits > 0) {
797         digit msd = v->ob_digit[ndigits - 1];
798         if ((size_t)(ndigits - 1) > SIZE_MAX / (size_t)PyLong_SHIFT)
799             goto Overflow;
800         result = (size_t)(ndigits - 1) * (size_t)PyLong_SHIFT;
801         msd_bits = bit_length_digit(msd);
802         if (SIZE_MAX - msd_bits < result)
803             goto Overflow;
804         result += msd_bits;
805     }
806     return result;
807 
808   Overflow:
809     PyErr_SetString(PyExc_OverflowError, "int has too many bits "
810                     "to express in a platform size_t");
811     return (size_t)-1;
812 }
813 
814 PyObject *
_PyLong_FromByteArray(const unsigned char * bytes,size_t n,int little_endian,int is_signed)815 _PyLong_FromByteArray(const unsigned char* bytes, size_t n,
816                       int little_endian, int is_signed)
817 {
818     const unsigned char* pstartbyte;    /* LSB of bytes */
819     int incr;                           /* direction to move pstartbyte */
820     const unsigned char* pendbyte;      /* MSB of bytes */
821     size_t numsignificantbytes;         /* number of bytes that matter */
822     Py_ssize_t ndigits;                 /* number of Python int digits */
823     PyLongObject* v;                    /* result */
824     Py_ssize_t idigit = 0;              /* next free index in v->ob_digit */
825 
826     if (n == 0)
827         return PyLong_FromLong(0L);
828 
829     if (little_endian) {
830         pstartbyte = bytes;
831         pendbyte = bytes + n - 1;
832         incr = 1;
833     }
834     else {
835         pstartbyte = bytes + n - 1;
836         pendbyte = bytes;
837         incr = -1;
838     }
839 
840     if (is_signed)
841         is_signed = *pendbyte >= 0x80;
842 
843     /* Compute numsignificantbytes.  This consists of finding the most
844        significant byte.  Leading 0 bytes are insignificant if the number
845        is positive, and leading 0xff bytes if negative. */
846     {
847         size_t i;
848         const unsigned char* p = pendbyte;
849         const int pincr = -incr;  /* search MSB to LSB */
850         const unsigned char insignificant = is_signed ? 0xff : 0x00;
851 
852         for (i = 0; i < n; ++i, p += pincr) {
853             if (*p != insignificant)
854                 break;
855         }
856         numsignificantbytes = n - i;
857         /* 2's-comp is a bit tricky here, e.g. 0xff00 == -0x0100, so
858            actually has 2 significant bytes.  OTOH, 0xff0001 ==
859            -0x00ffff, so we wouldn't *need* to bump it there; but we
860            do for 0xffff = -0x0001.  To be safe without bothering to
861            check every case, bump it regardless. */
862         if (is_signed && numsignificantbytes < n)
863             ++numsignificantbytes;
864     }
865 
866     /* How many Python int digits do we need?  We have
867        8*numsignificantbytes bits, and each Python int digit has
868        PyLong_SHIFT bits, so it's the ceiling of the quotient. */
869     /* catch overflow before it happens */
870     if (numsignificantbytes > (PY_SSIZE_T_MAX - PyLong_SHIFT) / 8) {
871         PyErr_SetString(PyExc_OverflowError,
872                         "byte array too long to convert to int");
873         return NULL;
874     }
875     ndigits = (numsignificantbytes * 8 + PyLong_SHIFT - 1) / PyLong_SHIFT;
876     v = _PyLong_New(ndigits);
877     if (v == NULL)
878         return NULL;
879 
880     /* Copy the bits over.  The tricky parts are computing 2's-comp on
881        the fly for signed numbers, and dealing with the mismatch between
882        8-bit bytes and (probably) 15-bit Python digits.*/
883     {
884         size_t i;
885         twodigits carry = 1;                    /* for 2's-comp calculation */
886         twodigits accum = 0;                    /* sliding register */
887         unsigned int accumbits = 0;             /* number of bits in accum */
888         const unsigned char* p = pstartbyte;
889 
890         for (i = 0; i < numsignificantbytes; ++i, p += incr) {
891             twodigits thisbyte = *p;
892             /* Compute correction for 2's comp, if needed. */
893             if (is_signed) {
894                 thisbyte = (0xff ^ thisbyte) + carry;
895                 carry = thisbyte >> 8;
896                 thisbyte &= 0xff;
897             }
898             /* Because we're going LSB to MSB, thisbyte is
899                more significant than what's already in accum,
900                so needs to be prepended to accum. */
901             accum |= thisbyte << accumbits;
902             accumbits += 8;
903             if (accumbits >= PyLong_SHIFT) {
904                 /* There's enough to fill a Python digit. */
905                 assert(idigit < ndigits);
906                 v->ob_digit[idigit] = (digit)(accum & PyLong_MASK);
907                 ++idigit;
908                 accum >>= PyLong_SHIFT;
909                 accumbits -= PyLong_SHIFT;
910                 assert(accumbits < PyLong_SHIFT);
911             }
912         }
913         assert(accumbits < PyLong_SHIFT);
914         if (accumbits) {
915             assert(idigit < ndigits);
916             v->ob_digit[idigit] = (digit)accum;
917             ++idigit;
918         }
919     }
920 
921     Py_SET_SIZE(v, is_signed ? -idigit : idigit);
922     return (PyObject *)maybe_small_long(long_normalize(v));
923 }
924 
925 int
_PyLong_AsByteArray(PyLongObject * v,unsigned char * bytes,size_t n,int little_endian,int is_signed)926 _PyLong_AsByteArray(PyLongObject* v,
927                     unsigned char* bytes, size_t n,
928                     int little_endian, int is_signed)
929 {
930     Py_ssize_t i;               /* index into v->ob_digit */
931     Py_ssize_t ndigits;         /* |v->ob_size| */
932     twodigits accum;            /* sliding register */
933     unsigned int accumbits;     /* # bits in accum */
934     int do_twos_comp;           /* store 2's-comp?  is_signed and v < 0 */
935     digit carry;                /* for computing 2's-comp */
936     size_t j;                   /* # bytes filled */
937     unsigned char* p;           /* pointer to next byte in bytes */
938     int pincr;                  /* direction to move p */
939 
940     assert(v != NULL && PyLong_Check(v));
941 
942     if (Py_SIZE(v) < 0) {
943         ndigits = -(Py_SIZE(v));
944         if (!is_signed) {
945             PyErr_SetString(PyExc_OverflowError,
946                             "can't convert negative int to unsigned");
947             return -1;
948         }
949         do_twos_comp = 1;
950     }
951     else {
952         ndigits = Py_SIZE(v);
953         do_twos_comp = 0;
954     }
955 
956     if (little_endian) {
957         p = bytes;
958         pincr = 1;
959     }
960     else {
961         p = bytes + n - 1;
962         pincr = -1;
963     }
964 
965     /* Copy over all the Python digits.
966        It's crucial that every Python digit except for the MSD contribute
967        exactly PyLong_SHIFT bits to the total, so first assert that the int is
968        normalized. */
969     assert(ndigits == 0 || v->ob_digit[ndigits - 1] != 0);
970     j = 0;
971     accum = 0;
972     accumbits = 0;
973     carry = do_twos_comp ? 1 : 0;
974     for (i = 0; i < ndigits; ++i) {
975         digit thisdigit = v->ob_digit[i];
976         if (do_twos_comp) {
977             thisdigit = (thisdigit ^ PyLong_MASK) + carry;
978             carry = thisdigit >> PyLong_SHIFT;
979             thisdigit &= PyLong_MASK;
980         }
981         /* Because we're going LSB to MSB, thisdigit is more
982            significant than what's already in accum, so needs to be
983            prepended to accum. */
984         accum |= (twodigits)thisdigit << accumbits;
985 
986         /* The most-significant digit may be (probably is) at least
987            partly empty. */
988         if (i == ndigits - 1) {
989             /* Count # of sign bits -- they needn't be stored,
990              * although for signed conversion we need later to
991              * make sure at least one sign bit gets stored. */
992             digit s = do_twos_comp ? thisdigit ^ PyLong_MASK : thisdigit;
993             while (s != 0) {
994                 s >>= 1;
995                 accumbits++;
996             }
997         }
998         else
999             accumbits += PyLong_SHIFT;
1000 
1001         /* Store as many bytes as possible. */
1002         while (accumbits >= 8) {
1003             if (j >= n)
1004                 goto Overflow;
1005             ++j;
1006             *p = (unsigned char)(accum & 0xff);
1007             p += pincr;
1008             accumbits -= 8;
1009             accum >>= 8;
1010         }
1011     }
1012 
1013     /* Store the straggler (if any). */
1014     assert(accumbits < 8);
1015     assert(carry == 0);  /* else do_twos_comp and *every* digit was 0 */
1016     if (accumbits > 0) {
1017         if (j >= n)
1018             goto Overflow;
1019         ++j;
1020         if (do_twos_comp) {
1021             /* Fill leading bits of the byte with sign bits
1022                (appropriately pretending that the int had an
1023                infinite supply of sign bits). */
1024             accum |= (~(twodigits)0) << accumbits;
1025         }
1026         *p = (unsigned char)(accum & 0xff);
1027         p += pincr;
1028     }
1029     else if (j == n && n > 0 && is_signed) {
1030         /* The main loop filled the byte array exactly, so the code
1031            just above didn't get to ensure there's a sign bit, and the
1032            loop below wouldn't add one either.  Make sure a sign bit
1033            exists. */
1034         unsigned char msb = *(p - pincr);
1035         int sign_bit_set = msb >= 0x80;
1036         assert(accumbits == 0);
1037         if (sign_bit_set == do_twos_comp)
1038             return 0;
1039         else
1040             goto Overflow;
1041     }
1042 
1043     /* Fill remaining bytes with copies of the sign bit. */
1044     {
1045         unsigned char signbyte = do_twos_comp ? 0xffU : 0U;
1046         for ( ; j < n; ++j, p += pincr)
1047             *p = signbyte;
1048     }
1049 
1050     return 0;
1051 
1052   Overflow:
1053     PyErr_SetString(PyExc_OverflowError, "int too big to convert");
1054     return -1;
1055 
1056 }
1057 
1058 /* Create a new int object from a C pointer */
1059 
1060 PyObject *
PyLong_FromVoidPtr(void * p)1061 PyLong_FromVoidPtr(void *p)
1062 {
1063 #if SIZEOF_VOID_P <= SIZEOF_LONG
1064     return PyLong_FromUnsignedLong((unsigned long)(uintptr_t)p);
1065 #else
1066 
1067 #if SIZEOF_LONG_LONG < SIZEOF_VOID_P
1068 #   error "PyLong_FromVoidPtr: sizeof(long long) < sizeof(void*)"
1069 #endif
1070     return PyLong_FromUnsignedLongLong((unsigned long long)(uintptr_t)p);
1071 #endif /* SIZEOF_VOID_P <= SIZEOF_LONG */
1072 
1073 }
1074 
1075 /* Get a C pointer from an int object. */
1076 
1077 void *
PyLong_AsVoidPtr(PyObject * vv)1078 PyLong_AsVoidPtr(PyObject *vv)
1079 {
1080 #if SIZEOF_VOID_P <= SIZEOF_LONG
1081     long x;
1082 
1083     if (PyLong_Check(vv) && _PyLong_Sign(vv) < 0)
1084         x = PyLong_AsLong(vv);
1085     else
1086         x = PyLong_AsUnsignedLong(vv);
1087 #else
1088 
1089 #if SIZEOF_LONG_LONG < SIZEOF_VOID_P
1090 #   error "PyLong_AsVoidPtr: sizeof(long long) < sizeof(void*)"
1091 #endif
1092     long long x;
1093 
1094     if (PyLong_Check(vv) && _PyLong_Sign(vv) < 0)
1095         x = PyLong_AsLongLong(vv);
1096     else
1097         x = PyLong_AsUnsignedLongLong(vv);
1098 
1099 #endif /* SIZEOF_VOID_P <= SIZEOF_LONG */
1100 
1101     if (x == -1 && PyErr_Occurred())
1102         return NULL;
1103     return (void *)x;
1104 }
1105 
1106 /* Initial long long support by Chris Herborth ([email protected]), later
1107  * rewritten to use the newer PyLong_{As,From}ByteArray API.
1108  */
1109 
1110 #define PY_ABS_LLONG_MIN (0-(unsigned long long)LLONG_MIN)
1111 
1112 /* Create a new int object from a C long long int. */
1113 
1114 PyObject *
PyLong_FromLongLong(long long ival)1115 PyLong_FromLongLong(long long ival)
1116 {
1117     PyLongObject *v;
1118     unsigned long long abs_ival, t;
1119     int ndigits;
1120 
1121     /* Handle small and medium cases. */
1122     if (IS_SMALL_INT(ival)) {
1123         return get_small_int((sdigit)ival);
1124     }
1125     if (-(long long)PyLong_MASK <= ival && ival <= (long long)PyLong_MASK) {
1126         return _PyLong_FromMedium((sdigit)ival);
1127     }
1128 
1129     /* Count digits (at least two - smaller cases were handled above). */
1130     abs_ival = ival < 0 ? 0U-(unsigned long long)ival : (unsigned long long)ival;
1131     /* Do shift in two steps to avoid possible undefined behavior. */
1132     t = abs_ival >> PyLong_SHIFT >> PyLong_SHIFT;
1133     ndigits = 2;
1134     while (t) {
1135         ++ndigits;
1136         t >>= PyLong_SHIFT;
1137     }
1138 
1139     /* Construct output value. */
1140     v = _PyLong_New(ndigits);
1141     if (v != NULL) {
1142         digit *p = v->ob_digit;
1143         Py_SET_SIZE(v, ival < 0 ? -ndigits : ndigits);
1144         t = abs_ival;
1145         while (t) {
1146             *p++ = (digit)(t & PyLong_MASK);
1147             t >>= PyLong_SHIFT;
1148         }
1149     }
1150     return (PyObject *)v;
1151 }
1152 
1153 /* Create a new int object from a C Py_ssize_t. */
1154 
1155 PyObject *
PyLong_FromSsize_t(Py_ssize_t ival)1156 PyLong_FromSsize_t(Py_ssize_t ival)
1157 {
1158     PyLongObject *v;
1159     size_t abs_ival;
1160     size_t t;  /* unsigned so >> doesn't propagate sign bit */
1161     int ndigits = 0;
1162     int negative = 0;
1163 
1164     if (IS_SMALL_INT(ival)) {
1165         return get_small_int((sdigit)ival);
1166     }
1167 
1168     if (ival < 0) {
1169         /* avoid signed overflow when ival = SIZE_T_MIN */
1170         abs_ival = (size_t)(-1-ival)+1;
1171         negative = 1;
1172     }
1173     else {
1174         abs_ival = (size_t)ival;
1175     }
1176 
1177     /* Count the number of Python digits. */
1178     t = abs_ival;
1179     while (t) {
1180         ++ndigits;
1181         t >>= PyLong_SHIFT;
1182     }
1183     v = _PyLong_New(ndigits);
1184     if (v != NULL) {
1185         digit *p = v->ob_digit;
1186         Py_SET_SIZE(v, negative ? -ndigits : ndigits);
1187         t = abs_ival;
1188         while (t) {
1189             *p++ = (digit)(t & PyLong_MASK);
1190             t >>= PyLong_SHIFT;
1191         }
1192     }
1193     return (PyObject *)v;
1194 }
1195 
1196 /* Get a C long long int from an int object or any object that has an
1197    __index__ method.  Return -1 and set an error if overflow occurs. */
1198 
1199 long long
PyLong_AsLongLong(PyObject * vv)1200 PyLong_AsLongLong(PyObject *vv)
1201 {
1202     PyLongObject *v;
1203     long long bytes;
1204     int res;
1205     int do_decref = 0; /* if PyNumber_Index was called */
1206 
1207     if (vv == NULL) {
1208         PyErr_BadInternalCall();
1209         return -1;
1210     }
1211 
1212     if (PyLong_Check(vv)) {
1213         v = (PyLongObject *)vv;
1214     }
1215     else {
1216         v = (PyLongObject *)_PyNumber_Index(vv);
1217         if (v == NULL)
1218             return -1;
1219         do_decref = 1;
1220     }
1221 
1222     res = 0;
1223     switch(Py_SIZE(v)) {
1224     case -1:
1225         bytes = -(sdigit)v->ob_digit[0];
1226         break;
1227     case 0:
1228         bytes = 0;
1229         break;
1230     case 1:
1231         bytes = v->ob_digit[0];
1232         break;
1233     default:
1234         res = _PyLong_AsByteArray((PyLongObject *)v, (unsigned char *)&bytes,
1235                                   SIZEOF_LONG_LONG, PY_LITTLE_ENDIAN, 1);
1236     }
1237     if (do_decref) {
1238         Py_DECREF(v);
1239     }
1240 
1241     /* Plan 9 can't handle long long in ? : expressions */
1242     if (res < 0)
1243         return (long long)-1;
1244     else
1245         return bytes;
1246 }
1247 
1248 /* Get a C unsigned long long int from an int object.
1249    Return -1 and set an error if overflow occurs. */
1250 
1251 unsigned long long
PyLong_AsUnsignedLongLong(PyObject * vv)1252 PyLong_AsUnsignedLongLong(PyObject *vv)
1253 {
1254     PyLongObject *v;
1255     unsigned long long bytes;
1256     int res;
1257 
1258     if (vv == NULL) {
1259         PyErr_BadInternalCall();
1260         return (unsigned long long)-1;
1261     }
1262     if (!PyLong_Check(vv)) {
1263         PyErr_SetString(PyExc_TypeError, "an integer is required");
1264         return (unsigned long long)-1;
1265     }
1266 
1267     v = (PyLongObject*)vv;
1268     switch(Py_SIZE(v)) {
1269     case 0: return 0;
1270     case 1: return v->ob_digit[0];
1271     }
1272 
1273     res = _PyLong_AsByteArray((PyLongObject *)vv, (unsigned char *)&bytes,
1274                               SIZEOF_LONG_LONG, PY_LITTLE_ENDIAN, 0);
1275 
1276     /* Plan 9 can't handle long long in ? : expressions */
1277     if (res < 0)
1278         return (unsigned long long)res;
1279     else
1280         return bytes;
1281 }
1282 
1283 /* Get a C unsigned long int from an int object, ignoring the high bits.
1284    Returns -1 and sets an error condition if an error occurs. */
1285 
1286 static unsigned long long
_PyLong_AsUnsignedLongLongMask(PyObject * vv)1287 _PyLong_AsUnsignedLongLongMask(PyObject *vv)
1288 {
1289     PyLongObject *v;
1290     unsigned long long x;
1291     Py_ssize_t i;
1292     int sign;
1293 
1294     if (vv == NULL || !PyLong_Check(vv)) {
1295         PyErr_BadInternalCall();
1296         return (unsigned long long) -1;
1297     }
1298     v = (PyLongObject *)vv;
1299     switch(Py_SIZE(v)) {
1300     case 0: return 0;
1301     case 1: return v->ob_digit[0];
1302     }
1303     i = Py_SIZE(v);
1304     sign = 1;
1305     x = 0;
1306     if (i < 0) {
1307         sign = -1;
1308         i = -i;
1309     }
1310     while (--i >= 0) {
1311         x = (x << PyLong_SHIFT) | v->ob_digit[i];
1312     }
1313     return x * sign;
1314 }
1315 
1316 unsigned long long
PyLong_AsUnsignedLongLongMask(PyObject * op)1317 PyLong_AsUnsignedLongLongMask(PyObject *op)
1318 {
1319     PyLongObject *lo;
1320     unsigned long long val;
1321 
1322     if (op == NULL) {
1323         PyErr_BadInternalCall();
1324         return (unsigned long long)-1;
1325     }
1326 
1327     if (PyLong_Check(op)) {
1328         return _PyLong_AsUnsignedLongLongMask(op);
1329     }
1330 
1331     lo = (PyLongObject *)_PyNumber_Index(op);
1332     if (lo == NULL)
1333         return (unsigned long long)-1;
1334 
1335     val = _PyLong_AsUnsignedLongLongMask((PyObject *)lo);
1336     Py_DECREF(lo);
1337     return val;
1338 }
1339 
1340 /* Get a C long long int from an int object or any object that has an
1341    __index__ method.
1342 
1343    On overflow, return -1 and set *overflow to 1 or -1 depending on the sign of
1344    the result.  Otherwise *overflow is 0.
1345 
1346    For other errors (e.g., TypeError), return -1 and set an error condition.
1347    In this case *overflow will be 0.
1348 */
1349 
1350 long long
PyLong_AsLongLongAndOverflow(PyObject * vv,int * overflow)1351 PyLong_AsLongLongAndOverflow(PyObject *vv, int *overflow)
1352 {
1353     /* This version by Tim Peters */
1354     PyLongObject *v;
1355     unsigned long long x, prev;
1356     long long res;
1357     Py_ssize_t i;
1358     int sign;
1359     int do_decref = 0; /* if PyNumber_Index was called */
1360 
1361     *overflow = 0;
1362     if (vv == NULL) {
1363         PyErr_BadInternalCall();
1364         return -1;
1365     }
1366 
1367     if (PyLong_Check(vv)) {
1368         v = (PyLongObject *)vv;
1369     }
1370     else {
1371         v = (PyLongObject *)_PyNumber_Index(vv);
1372         if (v == NULL)
1373             return -1;
1374         do_decref = 1;
1375     }
1376 
1377     res = -1;
1378     i = Py_SIZE(v);
1379 
1380     switch (i) {
1381     case -1:
1382         res = -(sdigit)v->ob_digit[0];
1383         break;
1384     case 0:
1385         res = 0;
1386         break;
1387     case 1:
1388         res = v->ob_digit[0];
1389         break;
1390     default:
1391         sign = 1;
1392         x = 0;
1393         if (i < 0) {
1394             sign = -1;
1395             i = -(i);
1396         }
1397         while (--i >= 0) {
1398             prev = x;
1399             x = (x << PyLong_SHIFT) + v->ob_digit[i];
1400             if ((x >> PyLong_SHIFT) != prev) {
1401                 *overflow = sign;
1402                 goto exit;
1403             }
1404         }
1405         /* Haven't lost any bits, but casting to long requires extra
1406          * care (see comment above).
1407          */
1408         if (x <= (unsigned long long)LLONG_MAX) {
1409             res = (long long)x * sign;
1410         }
1411         else if (sign < 0 && x == PY_ABS_LLONG_MIN) {
1412             res = LLONG_MIN;
1413         }
1414         else {
1415             *overflow = sign;
1416             /* res is already set to -1 */
1417         }
1418     }
1419   exit:
1420     if (do_decref) {
1421         Py_DECREF(v);
1422     }
1423     return res;
1424 }
1425 
1426 int
_PyLong_UnsignedShort_Converter(PyObject * obj,void * ptr)1427 _PyLong_UnsignedShort_Converter(PyObject *obj, void *ptr)
1428 {
1429     unsigned long uval;
1430 
1431     if (PyLong_Check(obj) && _PyLong_Sign(obj) < 0) {
1432         PyErr_SetString(PyExc_ValueError, "value must be positive");
1433         return 0;
1434     }
1435     uval = PyLong_AsUnsignedLong(obj);
1436     if (uval == (unsigned long)-1 && PyErr_Occurred())
1437         return 0;
1438     if (uval > USHRT_MAX) {
1439         PyErr_SetString(PyExc_OverflowError,
1440                         "Python int too large for C unsigned short");
1441         return 0;
1442     }
1443 
1444     *(unsigned short *)ptr = Py_SAFE_DOWNCAST(uval, unsigned long, unsigned short);
1445     return 1;
1446 }
1447 
1448 int
_PyLong_UnsignedInt_Converter(PyObject * obj,void * ptr)1449 _PyLong_UnsignedInt_Converter(PyObject *obj, void *ptr)
1450 {
1451     unsigned long uval;
1452 
1453     if (PyLong_Check(obj) && _PyLong_Sign(obj) < 0) {
1454         PyErr_SetString(PyExc_ValueError, "value must be positive");
1455         return 0;
1456     }
1457     uval = PyLong_AsUnsignedLong(obj);
1458     if (uval == (unsigned long)-1 && PyErr_Occurred())
1459         return 0;
1460     if (uval > UINT_MAX) {
1461         PyErr_SetString(PyExc_OverflowError,
1462                         "Python int too large for C unsigned int");
1463         return 0;
1464     }
1465 
1466     *(unsigned int *)ptr = Py_SAFE_DOWNCAST(uval, unsigned long, unsigned int);
1467     return 1;
1468 }
1469 
1470 int
_PyLong_UnsignedLong_Converter(PyObject * obj,void * ptr)1471 _PyLong_UnsignedLong_Converter(PyObject *obj, void *ptr)
1472 {
1473     unsigned long uval;
1474 
1475     if (PyLong_Check(obj) && _PyLong_Sign(obj) < 0) {
1476         PyErr_SetString(PyExc_ValueError, "value must be positive");
1477         return 0;
1478     }
1479     uval = PyLong_AsUnsignedLong(obj);
1480     if (uval == (unsigned long)-1 && PyErr_Occurred())
1481         return 0;
1482 
1483     *(unsigned long *)ptr = uval;
1484     return 1;
1485 }
1486 
1487 int
_PyLong_UnsignedLongLong_Converter(PyObject * obj,void * ptr)1488 _PyLong_UnsignedLongLong_Converter(PyObject *obj, void *ptr)
1489 {
1490     unsigned long long uval;
1491 
1492     if (PyLong_Check(obj) && _PyLong_Sign(obj) < 0) {
1493         PyErr_SetString(PyExc_ValueError, "value must be positive");
1494         return 0;
1495     }
1496     uval = PyLong_AsUnsignedLongLong(obj);
1497     if (uval == (unsigned long long)-1 && PyErr_Occurred())
1498         return 0;
1499 
1500     *(unsigned long long *)ptr = uval;
1501     return 1;
1502 }
1503 
1504 int
_PyLong_Size_t_Converter(PyObject * obj,void * ptr)1505 _PyLong_Size_t_Converter(PyObject *obj, void *ptr)
1506 {
1507     size_t uval;
1508 
1509     if (PyLong_Check(obj) && _PyLong_Sign(obj) < 0) {
1510         PyErr_SetString(PyExc_ValueError, "value must be positive");
1511         return 0;
1512     }
1513     uval = PyLong_AsSize_t(obj);
1514     if (uval == (size_t)-1 && PyErr_Occurred())
1515         return 0;
1516 
1517     *(size_t *)ptr = uval;
1518     return 1;
1519 }
1520 
1521 
1522 #define CHECK_BINOP(v,w)                                \
1523     do {                                                \
1524         if (!PyLong_Check(v) || !PyLong_Check(w))       \
1525             Py_RETURN_NOTIMPLEMENTED;                   \
1526     } while(0)
1527 
1528 /* x[0:m] and y[0:n] are digit vectors, LSD first, m >= n required.  x[0:n]
1529  * is modified in place, by adding y to it.  Carries are propagated as far as
1530  * x[m-1], and the remaining carry (0 or 1) is returned.
1531  */
1532 static digit
v_iadd(digit * x,Py_ssize_t m,digit * y,Py_ssize_t n)1533 v_iadd(digit *x, Py_ssize_t m, digit *y, Py_ssize_t n)
1534 {
1535     Py_ssize_t i;
1536     digit carry = 0;
1537 
1538     assert(m >= n);
1539     for (i = 0; i < n; ++i) {
1540         carry += x[i] + y[i];
1541         x[i] = carry & PyLong_MASK;
1542         carry >>= PyLong_SHIFT;
1543         assert((carry & 1) == carry);
1544     }
1545     for (; carry && i < m; ++i) {
1546         carry += x[i];
1547         x[i] = carry & PyLong_MASK;
1548         carry >>= PyLong_SHIFT;
1549         assert((carry & 1) == carry);
1550     }
1551     return carry;
1552 }
1553 
1554 /* x[0:m] and y[0:n] are digit vectors, LSD first, m >= n required.  x[0:n]
1555  * is modified in place, by subtracting y from it.  Borrows are propagated as
1556  * far as x[m-1], and the remaining borrow (0 or 1) is returned.
1557  */
1558 static digit
v_isub(digit * x,Py_ssize_t m,digit * y,Py_ssize_t n)1559 v_isub(digit *x, Py_ssize_t m, digit *y, Py_ssize_t n)
1560 {
1561     Py_ssize_t i;
1562     digit borrow = 0;
1563 
1564     assert(m >= n);
1565     for (i = 0; i < n; ++i) {
1566         borrow = x[i] - y[i] - borrow;
1567         x[i] = borrow & PyLong_MASK;
1568         borrow >>= PyLong_SHIFT;
1569         borrow &= 1;            /* keep only 1 sign bit */
1570     }
1571     for (; borrow && i < m; ++i) {
1572         borrow = x[i] - borrow;
1573         x[i] = borrow & PyLong_MASK;
1574         borrow >>= PyLong_SHIFT;
1575         borrow &= 1;
1576     }
1577     return borrow;
1578 }
1579 
1580 /* Shift digit vector a[0:m] d bits left, with 0 <= d < PyLong_SHIFT.  Put
1581  * result in z[0:m], and return the d bits shifted out of the top.
1582  */
1583 static digit
v_lshift(digit * z,digit * a,Py_ssize_t m,int d)1584 v_lshift(digit *z, digit *a, Py_ssize_t m, int d)
1585 {
1586     Py_ssize_t i;
1587     digit carry = 0;
1588 
1589     assert(0 <= d && d < PyLong_SHIFT);
1590     for (i=0; i < m; i++) {
1591         twodigits acc = (twodigits)a[i] << d | carry;
1592         z[i] = (digit)acc & PyLong_MASK;
1593         carry = (digit)(acc >> PyLong_SHIFT);
1594     }
1595     return carry;
1596 }
1597 
1598 /* Shift digit vector a[0:m] d bits right, with 0 <= d < PyLong_SHIFT.  Put
1599  * result in z[0:m], and return the d bits shifted out of the bottom.
1600  */
1601 static digit
v_rshift(digit * z,digit * a,Py_ssize_t m,int d)1602 v_rshift(digit *z, digit *a, Py_ssize_t m, int d)
1603 {
1604     Py_ssize_t i;
1605     digit carry = 0;
1606     digit mask = ((digit)1 << d) - 1U;
1607 
1608     assert(0 <= d && d < PyLong_SHIFT);
1609     for (i=m; i-- > 0;) {
1610         twodigits acc = (twodigits)carry << PyLong_SHIFT | a[i];
1611         carry = (digit)acc & mask;
1612         z[i] = (digit)(acc >> d);
1613     }
1614     return carry;
1615 }
1616 
1617 /* Divide long pin, w/ size digits, by non-zero digit n, storing quotient
1618    in pout, and returning the remainder.  pin and pout point at the LSD.
1619    It's OK for pin == pout on entry, which saves oodles of mallocs/frees in
1620    _PyLong_Format, but that should be done with great care since ints are
1621    immutable.
1622 
1623    This version of the code can be 20% faster than the pre-2022 version
1624    on todays compilers on architectures like amd64.  It evolved from Mark
1625    Dickinson observing that a 128:64 divide instruction was always being
1626    generated by the compiler despite us working with 30-bit digit values.
1627    See the thread for full context:
1628 
1629      https://mail.python.org/archives/list/[email protected]/thread/ZICIMX5VFCX4IOFH5NUPVHCUJCQ4Q7QM/#NEUNFZU3TQU4CPTYZNF3WCN7DOJBBTK5
1630 
1631    If you ever want to change this code, pay attention to performance using
1632    different compilers, optimization levels, and cpu architectures. Beware of
1633    PGO/FDO builds doing value specialization such as a fast path for //10. :)
1634 
1635    Verify that 17 isn't specialized and this works as a quick test:
1636      python -m timeit -s 'x = 10**1000; r=x//10; assert r == 10**999, r' 'x//17'
1637 */
1638 static digit
inplace_divrem1(digit * pout,digit * pin,Py_ssize_t size,digit n)1639 inplace_divrem1(digit *pout, digit *pin, Py_ssize_t size, digit n)
1640 {
1641     digit remainder = 0;
1642 
1643     assert(n > 0 && n <= PyLong_MASK);
1644     while (--size >= 0) {
1645         twodigits dividend;
1646         dividend = ((twodigits)remainder << PyLong_SHIFT) | pin[size];
1647         digit quotient;
1648         quotient = (digit)(dividend / n);
1649         remainder = dividend % n;
1650         pout[size] = quotient;
1651     }
1652     return remainder;
1653 }
1654 
1655 
1656 /* Divide an integer by a digit, returning both the quotient
1657    (as function result) and the remainder (through *prem).
1658    The sign of a is ignored; n should not be zero. */
1659 
1660 static PyLongObject *
divrem1(PyLongObject * a,digit n,digit * prem)1661 divrem1(PyLongObject *a, digit n, digit *prem)
1662 {
1663     const Py_ssize_t size = Py_ABS(Py_SIZE(a));
1664     PyLongObject *z;
1665 
1666     assert(n > 0 && n <= PyLong_MASK);
1667     z = _PyLong_New(size);
1668     if (z == NULL)
1669         return NULL;
1670     *prem = inplace_divrem1(z->ob_digit, a->ob_digit, size, n);
1671     return long_normalize(z);
1672 }
1673 
1674 /* Remainder of long pin, w/ size digits, by non-zero digit n,
1675    returning the remainder. pin points at the LSD. */
1676 
1677 static digit
inplace_rem1(digit * pin,Py_ssize_t size,digit n)1678 inplace_rem1(digit *pin, Py_ssize_t size, digit n)
1679 {
1680     twodigits rem = 0;
1681 
1682     assert(n > 0 && n <= PyLong_MASK);
1683     while (--size >= 0)
1684         rem = ((rem << PyLong_SHIFT) | pin[size]) % n;
1685     return (digit)rem;
1686 }
1687 
1688 /* Get the remainder of an integer divided by a digit, returning
1689    the remainder as the result of the function. The sign of a is
1690    ignored; n should not be zero. */
1691 
1692 static PyLongObject *
rem1(PyLongObject * a,digit n)1693 rem1(PyLongObject *a, digit n)
1694 {
1695     const Py_ssize_t size = Py_ABS(Py_SIZE(a));
1696 
1697     assert(n > 0 && n <= PyLong_MASK);
1698     return (PyLongObject *)PyLong_FromLong(
1699         (long)inplace_rem1(a->ob_digit, size, n)
1700     );
1701 }
1702 
1703 /* Convert an integer to a base 10 string.  Returns a new non-shared
1704    string.  (Return value is non-shared so that callers can modify the
1705    returned value if necessary.) */
1706 
1707 static int
long_to_decimal_string_internal(PyObject * aa,PyObject ** p_output,_PyUnicodeWriter * writer,_PyBytesWriter * bytes_writer,char ** bytes_str)1708 long_to_decimal_string_internal(PyObject *aa,
1709                                 PyObject **p_output,
1710                                 _PyUnicodeWriter *writer,
1711                                 _PyBytesWriter *bytes_writer,
1712                                 char **bytes_str)
1713 {
1714     PyLongObject *scratch, *a;
1715     PyObject *str = NULL;
1716     Py_ssize_t size, strlen, size_a, i, j;
1717     digit *pout, *pin, rem, tenpow;
1718     int negative;
1719     int d;
1720     enum PyUnicode_Kind kind;
1721 
1722     a = (PyLongObject *)aa;
1723     if (a == NULL || !PyLong_Check(a)) {
1724         PyErr_BadInternalCall();
1725         return -1;
1726     }
1727     size_a = Py_ABS(Py_SIZE(a));
1728     negative = Py_SIZE(a) < 0;
1729 
1730     /* quick and dirty pre-check for overflowing the decimal digit limit,
1731        based on the inequality 10/3 >= log2(10)
1732 
1733        explanation in https://github.com/python/cpython/pull/96537
1734     */
1735     if (size_a >= 10 * _PY_LONG_MAX_STR_DIGITS_THRESHOLD
1736                   / (3 * PyLong_SHIFT) + 2) {
1737         PyInterpreterState *interp = _PyInterpreterState_GET();
1738         int max_str_digits = interp->int_max_str_digits;
1739         if ((max_str_digits > 0) &&
1740             (max_str_digits / (3 * PyLong_SHIFT) <= (size_a - 11) / 10)) {
1741             PyErr_Format(PyExc_ValueError, _MAX_STR_DIGITS_ERROR_FMT_TO_STR,
1742                          max_str_digits);
1743             return -1;
1744         }
1745     }
1746 
1747     /* quick and dirty upper bound for the number of digits
1748        required to express a in base _PyLong_DECIMAL_BASE:
1749 
1750          #digits = 1 + floor(log2(a) / log2(_PyLong_DECIMAL_BASE))
1751 
1752        But log2(a) < size_a * PyLong_SHIFT, and
1753        log2(_PyLong_DECIMAL_BASE) = log2(10) * _PyLong_DECIMAL_SHIFT
1754                                   > 3.3 * _PyLong_DECIMAL_SHIFT
1755 
1756          size_a * PyLong_SHIFT / (3.3 * _PyLong_DECIMAL_SHIFT) =
1757              size_a + size_a / d < size_a + size_a / floor(d),
1758        where d = (3.3 * _PyLong_DECIMAL_SHIFT) /
1759                  (PyLong_SHIFT - 3.3 * _PyLong_DECIMAL_SHIFT)
1760     */
1761     d = (33 * _PyLong_DECIMAL_SHIFT) /
1762         (10 * PyLong_SHIFT - 33 * _PyLong_DECIMAL_SHIFT);
1763     assert(size_a < PY_SSIZE_T_MAX/2);
1764     size = 1 + size_a + size_a / d;
1765     scratch = _PyLong_New(size);
1766     if (scratch == NULL)
1767         return -1;
1768 
1769     /* convert array of base _PyLong_BASE digits in pin to an array of
1770        base _PyLong_DECIMAL_BASE digits in pout, following Knuth (TAOCP,
1771        Volume 2 (3rd edn), section 4.4, Method 1b). */
1772     pin = a->ob_digit;
1773     pout = scratch->ob_digit;
1774     size = 0;
1775     for (i = size_a; --i >= 0; ) {
1776         digit hi = pin[i];
1777         for (j = 0; j < size; j++) {
1778             twodigits z = (twodigits)pout[j] << PyLong_SHIFT | hi;
1779             hi = (digit)(z / _PyLong_DECIMAL_BASE);
1780             pout[j] = (digit)(z - (twodigits)hi *
1781                               _PyLong_DECIMAL_BASE);
1782         }
1783         while (hi) {
1784             pout[size++] = hi % _PyLong_DECIMAL_BASE;
1785             hi /= _PyLong_DECIMAL_BASE;
1786         }
1787         /* check for keyboard interrupt */
1788         SIGCHECK({
1789                 Py_DECREF(scratch);
1790                 return -1;
1791             });
1792     }
1793     /* pout should have at least one digit, so that the case when a = 0
1794        works correctly */
1795     if (size == 0)
1796         pout[size++] = 0;
1797 
1798     /* calculate exact length of output string, and allocate */
1799     strlen = negative + 1 + (size - 1) * _PyLong_DECIMAL_SHIFT;
1800     tenpow = 10;
1801     rem = pout[size-1];
1802     while (rem >= tenpow) {
1803         tenpow *= 10;
1804         strlen++;
1805     }
1806     if (strlen > _PY_LONG_MAX_STR_DIGITS_THRESHOLD) {
1807         PyInterpreterState *interp = _PyInterpreterState_GET();
1808         int max_str_digits = interp->int_max_str_digits;
1809         Py_ssize_t strlen_nosign = strlen - negative;
1810         if ((max_str_digits > 0) && (strlen_nosign > max_str_digits)) {
1811             Py_DECREF(scratch);
1812             PyErr_Format(PyExc_ValueError, _MAX_STR_DIGITS_ERROR_FMT_TO_STR,
1813                          max_str_digits);
1814             return -1;
1815         }
1816     }
1817     if (writer) {
1818         if (_PyUnicodeWriter_Prepare(writer, strlen, '9') == -1) {
1819             Py_DECREF(scratch);
1820             return -1;
1821         }
1822         kind = writer->kind;
1823     }
1824     else if (bytes_writer) {
1825         *bytes_str = _PyBytesWriter_Prepare(bytes_writer, *bytes_str, strlen);
1826         if (*bytes_str == NULL) {
1827             Py_DECREF(scratch);
1828             return -1;
1829         }
1830     }
1831     else {
1832         str = PyUnicode_New(strlen, '9');
1833         if (str == NULL) {
1834             Py_DECREF(scratch);
1835             return -1;
1836         }
1837         kind = PyUnicode_KIND(str);
1838     }
1839 
1840 #define WRITE_DIGITS(p)                                               \
1841     do {                                                              \
1842         /* pout[0] through pout[size-2] contribute exactly            \
1843            _PyLong_DECIMAL_SHIFT digits each */                       \
1844         for (i=0; i < size - 1; i++) {                                \
1845             rem = pout[i];                                            \
1846             for (j = 0; j < _PyLong_DECIMAL_SHIFT; j++) {             \
1847                 *--p = '0' + rem % 10;                                \
1848                 rem /= 10;                                            \
1849             }                                                         \
1850         }                                                             \
1851         /* pout[size-1]: always produce at least one decimal digit */ \
1852         rem = pout[i];                                                \
1853         do {                                                          \
1854             *--p = '0' + rem % 10;                                    \
1855             rem /= 10;                                                \
1856         } while (rem != 0);                                           \
1857                                                                       \
1858         /* and sign */                                                \
1859         if (negative)                                                 \
1860             *--p = '-';                                               \
1861     } while (0)
1862 
1863 #define WRITE_UNICODE_DIGITS(TYPE)                                    \
1864     do {                                                              \
1865         if (writer)                                                   \
1866             p = (TYPE*)PyUnicode_DATA(writer->buffer) + writer->pos + strlen; \
1867         else                                                          \
1868             p = (TYPE*)PyUnicode_DATA(str) + strlen;                  \
1869                                                                       \
1870         WRITE_DIGITS(p);                                              \
1871                                                                       \
1872         /* check we've counted correctly */                           \
1873         if (writer)                                                   \
1874             assert(p == ((TYPE*)PyUnicode_DATA(writer->buffer) + writer->pos)); \
1875         else                                                          \
1876             assert(p == (TYPE*)PyUnicode_DATA(str));                  \
1877     } while (0)
1878 
1879     /* fill the string right-to-left */
1880     if (bytes_writer) {
1881         char *p = *bytes_str + strlen;
1882         WRITE_DIGITS(p);
1883         assert(p == *bytes_str);
1884     }
1885     else if (kind == PyUnicode_1BYTE_KIND) {
1886         Py_UCS1 *p;
1887         WRITE_UNICODE_DIGITS(Py_UCS1);
1888     }
1889     else if (kind == PyUnicode_2BYTE_KIND) {
1890         Py_UCS2 *p;
1891         WRITE_UNICODE_DIGITS(Py_UCS2);
1892     }
1893     else {
1894         Py_UCS4 *p;
1895         assert (kind == PyUnicode_4BYTE_KIND);
1896         WRITE_UNICODE_DIGITS(Py_UCS4);
1897     }
1898 #undef WRITE_DIGITS
1899 #undef WRITE_UNICODE_DIGITS
1900 
1901     _Py_DECREF_INT(scratch);
1902     if (writer) {
1903         writer->pos += strlen;
1904     }
1905     else if (bytes_writer) {
1906         (*bytes_str) += strlen;
1907     }
1908     else {
1909         assert(_PyUnicode_CheckConsistency(str, 1));
1910         *p_output = (PyObject *)str;
1911     }
1912     return 0;
1913 }
1914 
1915 static PyObject *
long_to_decimal_string(PyObject * aa)1916 long_to_decimal_string(PyObject *aa)
1917 {
1918     PyObject *v;
1919     if (long_to_decimal_string_internal(aa, &v, NULL, NULL, NULL) == -1)
1920         return NULL;
1921     return v;
1922 }
1923 
1924 /* Convert an int object to a string, using a given conversion base,
1925    which should be one of 2, 8 or 16.  Return a string object.
1926    If base is 2, 8 or 16, add the proper prefix '0b', '0o' or '0x'
1927    if alternate is nonzero. */
1928 
1929 static int
long_format_binary(PyObject * aa,int base,int alternate,PyObject ** p_output,_PyUnicodeWriter * writer,_PyBytesWriter * bytes_writer,char ** bytes_str)1930 long_format_binary(PyObject *aa, int base, int alternate,
1931                    PyObject **p_output, _PyUnicodeWriter *writer,
1932                    _PyBytesWriter *bytes_writer, char **bytes_str)
1933 {
1934     PyLongObject *a = (PyLongObject *)aa;
1935     PyObject *v = NULL;
1936     Py_ssize_t sz;
1937     Py_ssize_t size_a;
1938     enum PyUnicode_Kind kind;
1939     int negative;
1940     int bits;
1941 
1942     assert(base == 2 || base == 8 || base == 16);
1943     if (a == NULL || !PyLong_Check(a)) {
1944         PyErr_BadInternalCall();
1945         return -1;
1946     }
1947     size_a = Py_ABS(Py_SIZE(a));
1948     negative = Py_SIZE(a) < 0;
1949 
1950     /* Compute a rough upper bound for the length of the string */
1951     switch (base) {
1952     case 16:
1953         bits = 4;
1954         break;
1955     case 8:
1956         bits = 3;
1957         break;
1958     case 2:
1959         bits = 1;
1960         break;
1961     default:
1962         Py_UNREACHABLE();
1963     }
1964 
1965     /* Compute exact length 'sz' of output string. */
1966     if (size_a == 0) {
1967         sz = 1;
1968     }
1969     else {
1970         Py_ssize_t size_a_in_bits;
1971         /* Ensure overflow doesn't occur during computation of sz. */
1972         if (size_a > (PY_SSIZE_T_MAX - 3) / PyLong_SHIFT) {
1973             PyErr_SetString(PyExc_OverflowError,
1974                             "int too large to format");
1975             return -1;
1976         }
1977         size_a_in_bits = (size_a - 1) * PyLong_SHIFT +
1978                          bit_length_digit(a->ob_digit[size_a - 1]);
1979         /* Allow 1 character for a '-' sign. */
1980         sz = negative + (size_a_in_bits + (bits - 1)) / bits;
1981     }
1982     if (alternate) {
1983         /* 2 characters for prefix  */
1984         sz += 2;
1985     }
1986 
1987     if (writer) {
1988         if (_PyUnicodeWriter_Prepare(writer, sz, 'x') == -1)
1989             return -1;
1990         kind = writer->kind;
1991     }
1992     else if (bytes_writer) {
1993         *bytes_str = _PyBytesWriter_Prepare(bytes_writer, *bytes_str, sz);
1994         if (*bytes_str == NULL)
1995             return -1;
1996     }
1997     else {
1998         v = PyUnicode_New(sz, 'x');
1999         if (v == NULL)
2000             return -1;
2001         kind = PyUnicode_KIND(v);
2002     }
2003 
2004 #define WRITE_DIGITS(p)                                                 \
2005     do {                                                                \
2006         if (size_a == 0) {                                              \
2007             *--p = '0';                                                 \
2008         }                                                               \
2009         else {                                                          \
2010             /* JRH: special case for power-of-2 bases */                \
2011             twodigits accum = 0;                                        \
2012             int accumbits = 0;   /* # of bits in accum */               \
2013             Py_ssize_t i;                                               \
2014             for (i = 0; i < size_a; ++i) {                              \
2015                 accum |= (twodigits)a->ob_digit[i] << accumbits;        \
2016                 accumbits += PyLong_SHIFT;                              \
2017                 assert(accumbits >= bits);                              \
2018                 do {                                                    \
2019                     char cdigit;                                        \
2020                     cdigit = (char)(accum & (base - 1));                \
2021                     cdigit += (cdigit < 10) ? '0' : 'a'-10;             \
2022                     *--p = cdigit;                                      \
2023                     accumbits -= bits;                                  \
2024                     accum >>= bits;                                     \
2025                 } while (i < size_a-1 ? accumbits >= bits : accum > 0); \
2026             }                                                           \
2027         }                                                               \
2028                                                                         \
2029         if (alternate) {                                                \
2030             if (base == 16)                                             \
2031                 *--p = 'x';                                             \
2032             else if (base == 8)                                         \
2033                 *--p = 'o';                                             \
2034             else /* (base == 2) */                                      \
2035                 *--p = 'b';                                             \
2036             *--p = '0';                                                 \
2037         }                                                               \
2038         if (negative)                                                   \
2039             *--p = '-';                                                 \
2040     } while (0)
2041 
2042 #define WRITE_UNICODE_DIGITS(TYPE)                                      \
2043     do {                                                                \
2044         if (writer)                                                     \
2045             p = (TYPE*)PyUnicode_DATA(writer->buffer) + writer->pos + sz; \
2046         else                                                            \
2047             p = (TYPE*)PyUnicode_DATA(v) + sz;                          \
2048                                                                         \
2049         WRITE_DIGITS(p);                                                \
2050                                                                         \
2051         if (writer)                                                     \
2052             assert(p == ((TYPE*)PyUnicode_DATA(writer->buffer) + writer->pos)); \
2053         else                                                            \
2054             assert(p == (TYPE*)PyUnicode_DATA(v));                      \
2055     } while (0)
2056 
2057     if (bytes_writer) {
2058         char *p = *bytes_str + sz;
2059         WRITE_DIGITS(p);
2060         assert(p == *bytes_str);
2061     }
2062     else if (kind == PyUnicode_1BYTE_KIND) {
2063         Py_UCS1 *p;
2064         WRITE_UNICODE_DIGITS(Py_UCS1);
2065     }
2066     else if (kind == PyUnicode_2BYTE_KIND) {
2067         Py_UCS2 *p;
2068         WRITE_UNICODE_DIGITS(Py_UCS2);
2069     }
2070     else {
2071         Py_UCS4 *p;
2072         assert (kind == PyUnicode_4BYTE_KIND);
2073         WRITE_UNICODE_DIGITS(Py_UCS4);
2074     }
2075 #undef WRITE_DIGITS
2076 #undef WRITE_UNICODE_DIGITS
2077 
2078     if (writer) {
2079         writer->pos += sz;
2080     }
2081     else if (bytes_writer) {
2082         (*bytes_str) += sz;
2083     }
2084     else {
2085         assert(_PyUnicode_CheckConsistency(v, 1));
2086         *p_output = v;
2087     }
2088     return 0;
2089 }
2090 
2091 PyObject *
_PyLong_Format(PyObject * obj,int base)2092 _PyLong_Format(PyObject *obj, int base)
2093 {
2094     PyObject *str;
2095     int err;
2096     if (base == 10)
2097         err = long_to_decimal_string_internal(obj, &str, NULL, NULL, NULL);
2098     else
2099         err = long_format_binary(obj, base, 1, &str, NULL, NULL, NULL);
2100     if (err == -1)
2101         return NULL;
2102     return str;
2103 }
2104 
2105 int
_PyLong_FormatWriter(_PyUnicodeWriter * writer,PyObject * obj,int base,int alternate)2106 _PyLong_FormatWriter(_PyUnicodeWriter *writer,
2107                      PyObject *obj,
2108                      int base, int alternate)
2109 {
2110     if (base == 10)
2111         return long_to_decimal_string_internal(obj, NULL, writer,
2112                                                NULL, NULL);
2113     else
2114         return long_format_binary(obj, base, alternate, NULL, writer,
2115                                   NULL, NULL);
2116 }
2117 
2118 char*
_PyLong_FormatBytesWriter(_PyBytesWriter * writer,char * str,PyObject * obj,int base,int alternate)2119 _PyLong_FormatBytesWriter(_PyBytesWriter *writer, char *str,
2120                           PyObject *obj,
2121                           int base, int alternate)
2122 {
2123     char *str2;
2124     int res;
2125     str2 = str;
2126     if (base == 10)
2127         res = long_to_decimal_string_internal(obj, NULL, NULL,
2128                                               writer, &str2);
2129     else
2130         res = long_format_binary(obj, base, alternate, NULL, NULL,
2131                                  writer, &str2);
2132     if (res < 0)
2133         return NULL;
2134     assert(str2 != NULL);
2135     return str2;
2136 }
2137 
2138 /* Table of digit values for 8-bit string -> integer conversion.
2139  * '0' maps to 0, ..., '9' maps to 9.
2140  * 'a' and 'A' map to 10, ..., 'z' and 'Z' map to 35.
2141  * All other indices map to 37.
2142  * Note that when converting a base B string, a char c is a legitimate
2143  * base B digit iff _PyLong_DigitValue[Py_CHARPyLong_MASK(c)] < B.
2144  */
2145 unsigned char _PyLong_DigitValue[256] = {
2146     37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
2147     37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
2148     37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
2149     0,  1,  2,  3,  4,  5,  6,  7,  8,  9,  37, 37, 37, 37, 37, 37,
2150     37, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
2151     25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 37, 37, 37, 37, 37,
2152     37, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
2153     25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 37, 37, 37, 37, 37,
2154     37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
2155     37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
2156     37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
2157     37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
2158     37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
2159     37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
2160     37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
2161     37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
2162 };
2163 
2164 /* *str points to the first digit in a string of base `base` digits.  base
2165  * is a power of 2 (2, 4, 8, 16, or 32).  *str is set to point to the first
2166  * non-digit (which may be *str!).  A normalized int is returned.
2167  * The point to this routine is that it takes time linear in the number of
2168  * string characters.
2169  *
2170  * Return values:
2171  *   -1 on syntax error (exception needs to be set, *res is untouched)
2172  *   0 else (exception may be set, in that case *res is set to NULL)
2173  */
2174 static int
long_from_binary_base(const char ** str,int base,PyLongObject ** res)2175 long_from_binary_base(const char **str, int base, PyLongObject **res)
2176 {
2177     const char *p = *str;
2178     const char *start = p;
2179     char prev = 0;
2180     Py_ssize_t digits = 0;
2181     int bits_per_char;
2182     Py_ssize_t n;
2183     PyLongObject *z;
2184     twodigits accum;
2185     int bits_in_accum;
2186     digit *pdigit;
2187 
2188     assert(base >= 2 && base <= 32 && (base & (base - 1)) == 0);
2189     n = base;
2190     for (bits_per_char = -1; n; ++bits_per_char) {
2191         n >>= 1;
2192     }
2193     /* count digits and set p to end-of-string */
2194     while (_PyLong_DigitValue[Py_CHARMASK(*p)] < base || *p == '_') {
2195         if (*p == '_') {
2196             if (prev == '_') {
2197                 *str = p - 1;
2198                 return -1;
2199             }
2200         } else {
2201             ++digits;
2202         }
2203         prev = *p;
2204         ++p;
2205     }
2206     if (prev == '_') {
2207         /* Trailing underscore not allowed. */
2208         *str = p - 1;
2209         return -1;
2210     }
2211 
2212     *str = p;
2213     /* n <- the number of Python digits needed,
2214             = ceiling((digits * bits_per_char) / PyLong_SHIFT). */
2215     if (digits > (PY_SSIZE_T_MAX - (PyLong_SHIFT - 1)) / bits_per_char) {
2216         PyErr_SetString(PyExc_ValueError,
2217                         "int string too large to convert");
2218         *res = NULL;
2219         return 0;
2220     }
2221     n = (digits * bits_per_char + PyLong_SHIFT - 1) / PyLong_SHIFT;
2222     z = _PyLong_New(n);
2223     if (z == NULL) {
2224         *res = NULL;
2225         return 0;
2226     }
2227     /* Read string from right, and fill in int from left; i.e.,
2228      * from least to most significant in both.
2229      */
2230     accum = 0;
2231     bits_in_accum = 0;
2232     pdigit = z->ob_digit;
2233     while (--p >= start) {
2234         int k;
2235         if (*p == '_') {
2236             continue;
2237         }
2238         k = (int)_PyLong_DigitValue[Py_CHARMASK(*p)];
2239         assert(k >= 0 && k < base);
2240         accum |= (twodigits)k << bits_in_accum;
2241         bits_in_accum += bits_per_char;
2242         if (bits_in_accum >= PyLong_SHIFT) {
2243             *pdigit++ = (digit)(accum & PyLong_MASK);
2244             assert(pdigit - z->ob_digit <= n);
2245             accum >>= PyLong_SHIFT;
2246             bits_in_accum -= PyLong_SHIFT;
2247             assert(bits_in_accum < PyLong_SHIFT);
2248         }
2249     }
2250     if (bits_in_accum) {
2251         assert(bits_in_accum <= PyLong_SHIFT);
2252         *pdigit++ = (digit)accum;
2253         assert(pdigit - z->ob_digit <= n);
2254     }
2255     while (pdigit - z->ob_digit < n)
2256         *pdigit++ = 0;
2257     *res = long_normalize(z);
2258     return 0;
2259 }
2260 
2261 /* Parses an int from a bytestring. Leading and trailing whitespace will be
2262  * ignored.
2263  *
2264  * If successful, a PyLong object will be returned and 'pend' will be pointing
2265  * to the first unused byte unless it's NULL.
2266  *
2267  * If unsuccessful, NULL will be returned.
2268  */
2269 PyObject *
PyLong_FromString(const char * str,char ** pend,int base)2270 PyLong_FromString(const char *str, char **pend, int base)
2271 {
2272     int sign = 1, error_if_nonzero = 0;
2273     const char *start, *orig_str = str;
2274     PyLongObject *z = NULL;
2275     PyObject *strobj;
2276     Py_ssize_t slen;
2277 
2278     if ((base != 0 && base < 2) || base > 36) {
2279         PyErr_SetString(PyExc_ValueError,
2280                         "int() arg 2 must be >= 2 and <= 36");
2281         return NULL;
2282     }
2283     while (*str != '\0' && Py_ISSPACE(*str)) {
2284         str++;
2285     }
2286     if (*str == '+') {
2287         ++str;
2288     }
2289     else if (*str == '-') {
2290         ++str;
2291         sign = -1;
2292     }
2293     if (base == 0) {
2294         if (str[0] != '0') {
2295             base = 10;
2296         }
2297         else if (str[1] == 'x' || str[1] == 'X') {
2298             base = 16;
2299         }
2300         else if (str[1] == 'o' || str[1] == 'O') {
2301             base = 8;
2302         }
2303         else if (str[1] == 'b' || str[1] == 'B') {
2304             base = 2;
2305         }
2306         else {
2307             /* "old" (C-style) octal literal, now invalid.
2308                it might still be zero though */
2309             error_if_nonzero = 1;
2310             base = 10;
2311         }
2312     }
2313     if (str[0] == '0' &&
2314         ((base == 16 && (str[1] == 'x' || str[1] == 'X')) ||
2315          (base == 8  && (str[1] == 'o' || str[1] == 'O')) ||
2316          (base == 2  && (str[1] == 'b' || str[1] == 'B')))) {
2317         str += 2;
2318         /* One underscore allowed here. */
2319         if (*str == '_') {
2320             ++str;
2321         }
2322     }
2323     if (str[0] == '_') {
2324         /* May not start with underscores. */
2325         goto onError;
2326     }
2327 
2328     start = str;
2329     if ((base & (base - 1)) == 0) {
2330         /* binary bases are not limited by int_max_str_digits */
2331         int res = long_from_binary_base(&str, base, &z);
2332         if (res < 0) {
2333             /* Syntax error. */
2334             goto onError;
2335         }
2336     }
2337     else {
2338 /***
2339 Binary bases can be converted in time linear in the number of digits, because
2340 Python's representation base is binary.  Other bases (including decimal!) use
2341 the simple quadratic-time algorithm below, complicated by some speed tricks.
2342 
2343 First some math:  the largest integer that can be expressed in N base-B digits
2344 is B**N-1.  Consequently, if we have an N-digit input in base B, the worst-
2345 case number of Python digits needed to hold it is the smallest integer n s.t.
2346 
2347     BASE**n-1 >= B**N-1  [or, adding 1 to both sides]
2348     BASE**n >= B**N      [taking logs to base BASE]
2349     n >= log(B**N)/log(BASE) = N * log(B)/log(BASE)
2350 
2351 The static array log_base_BASE[base] == log(base)/log(BASE) so we can compute
2352 this quickly.  A Python int with that much space is reserved near the start,
2353 and the result is computed into it.
2354 
2355 The input string is actually treated as being in base base**i (i.e., i digits
2356 are processed at a time), where two more static arrays hold:
2357 
2358     convwidth_base[base] = the largest integer i such that base**i <= BASE
2359     convmultmax_base[base] = base ** convwidth_base[base]
2360 
2361 The first of these is the largest i such that i consecutive input digits
2362 must fit in a single Python digit.  The second is effectively the input
2363 base we're really using.
2364 
2365 Viewing the input as a sequence <c0, c1, ..., c_n-1> of digits in base
2366 convmultmax_base[base], the result is "simply"
2367 
2368    (((c0*B + c1)*B + c2)*B + c3)*B + ... ))) + c_n-1
2369 
2370 where B = convmultmax_base[base].
2371 
2372 Error analysis:  as above, the number of Python digits `n` needed is worst-
2373 case
2374 
2375     n >= N * log(B)/log(BASE)
2376 
2377 where `N` is the number of input digits in base `B`.  This is computed via
2378 
2379     size_z = (Py_ssize_t)((scan - str) * log_base_BASE[base]) + 1;
2380 
2381 below.  Two numeric concerns are how much space this can waste, and whether
2382 the computed result can be too small.  To be concrete, assume BASE = 2**15,
2383 which is the default (and it's unlikely anyone changes that).
2384 
2385 Waste isn't a problem:  provided the first input digit isn't 0, the difference
2386 between the worst-case input with N digits and the smallest input with N
2387 digits is about a factor of B, but B is small compared to BASE so at most
2388 one allocated Python digit can remain unused on that count.  If
2389 N*log(B)/log(BASE) is mathematically an exact integer, then truncating that
2390 and adding 1 returns a result 1 larger than necessary.  However, that can't
2391 happen:  whenever B is a power of 2, long_from_binary_base() is called
2392 instead, and it's impossible for B**i to be an integer power of 2**15 when
2393 B is not a power of 2 (i.e., it's impossible for N*log(B)/log(BASE) to be
2394 an exact integer when B is not a power of 2, since B**i has a prime factor
2395 other than 2 in that case, but (2**15)**j's only prime factor is 2).
2396 
2397 The computed result can be too small if the true value of N*log(B)/log(BASE)
2398 is a little bit larger than an exact integer, but due to roundoff errors (in
2399 computing log(B), log(BASE), their quotient, and/or multiplying that by N)
2400 yields a numeric result a little less than that integer.  Unfortunately, "how
2401 close can a transcendental function get to an integer over some range?"
2402 questions are generally theoretically intractable.  Computer analysis via
2403 continued fractions is practical:  expand log(B)/log(BASE) via continued
2404 fractions, giving a sequence i/j of "the best" rational approximations.  Then
2405 j*log(B)/log(BASE) is approximately equal to (the integer) i.  This shows that
2406 we can get very close to being in trouble, but very rarely.  For example,
2407 76573 is a denominator in one of the continued-fraction approximations to
2408 log(10)/log(2**15), and indeed:
2409 
2410     >>> log(10)/log(2**15)*76573
2411     16958.000000654003
2412 
2413 is very close to an integer.  If we were working with IEEE single-precision,
2414 rounding errors could kill us.  Finding worst cases in IEEE double-precision
2415 requires better-than-double-precision log() functions, and Tim didn't bother.
2416 Instead the code checks to see whether the allocated space is enough as each
2417 new Python digit is added, and copies the whole thing to a larger int if not.
2418 This should happen extremely rarely, and in fact I don't have a test case
2419 that triggers it(!).  Instead the code was tested by artificially allocating
2420 just 1 digit at the start, so that the copying code was exercised for every
2421 digit beyond the first.
2422 ***/
2423         twodigits c;           /* current input character */
2424         Py_ssize_t size_z;
2425         Py_ssize_t digits = 0;
2426         int i;
2427         int convwidth;
2428         twodigits convmultmax, convmult;
2429         digit *pz, *pzstop;
2430         const char *scan, *lastdigit;
2431         char prev = 0;
2432 
2433         static double log_base_BASE[37] = {0.0e0,};
2434         static int convwidth_base[37] = {0,};
2435         static twodigits convmultmax_base[37] = {0,};
2436 
2437         if (log_base_BASE[base] == 0.0) {
2438             twodigits convmax = base;
2439             int i = 1;
2440 
2441             log_base_BASE[base] = (log((double)base) /
2442                                    log((double)PyLong_BASE));
2443             for (;;) {
2444                 twodigits next = convmax * base;
2445                 if (next > PyLong_BASE) {
2446                     break;
2447                 }
2448                 convmax = next;
2449                 ++i;
2450             }
2451             convmultmax_base[base] = convmax;
2452             assert(i > 0);
2453             convwidth_base[base] = i;
2454         }
2455 
2456         /* Find length of the string of numeric characters. */
2457         scan = str;
2458         lastdigit = str;
2459 
2460         while (_PyLong_DigitValue[Py_CHARMASK(*scan)] < base || *scan == '_') {
2461             if (*scan == '_') {
2462                 if (prev == '_') {
2463                     /* Only one underscore allowed. */
2464                     str = lastdigit + 1;
2465                     goto onError;
2466                 }
2467             }
2468             else {
2469                 ++digits;
2470                 lastdigit = scan;
2471             }
2472             prev = *scan;
2473             ++scan;
2474         }
2475         if (prev == '_') {
2476             /* Trailing underscore not allowed. */
2477             /* Set error pointer to first underscore. */
2478             str = lastdigit + 1;
2479             goto onError;
2480         }
2481 
2482         /* Limit the size to avoid excessive computation attacks. */
2483         if (digits > _PY_LONG_MAX_STR_DIGITS_THRESHOLD) {
2484             PyInterpreterState *interp = _PyInterpreterState_GET();
2485             int max_str_digits = interp->int_max_str_digits;
2486             if ((max_str_digits > 0) && (digits > max_str_digits)) {
2487                 PyErr_Format(PyExc_ValueError, _MAX_STR_DIGITS_ERROR_FMT_TO_INT,
2488                              max_str_digits, digits);
2489                 return NULL;
2490             }
2491         }
2492 
2493         /* Create an int object that can contain the largest possible
2494          * integer with this base and length.  Note that there's no
2495          * need to initialize z->ob_digit -- no slot is read up before
2496          * being stored into.
2497          */
2498         double fsize_z = (double)digits * log_base_BASE[base] + 1.0;
2499         if (fsize_z > (double)MAX_LONG_DIGITS) {
2500             /* The same exception as in _PyLong_New(). */
2501             PyErr_SetString(PyExc_OverflowError,
2502                             "too many digits in integer");
2503             return NULL;
2504         }
2505         size_z = (Py_ssize_t)fsize_z;
2506         /* Uncomment next line to test exceedingly rare copy code */
2507         /* size_z = 1; */
2508         assert(size_z > 0);
2509         z = _PyLong_New(size_z);
2510         if (z == NULL) {
2511             return NULL;
2512         }
2513         Py_SET_SIZE(z, 0);
2514 
2515         /* `convwidth` consecutive input digits are treated as a single
2516          * digit in base `convmultmax`.
2517          */
2518         convwidth = convwidth_base[base];
2519         convmultmax = convmultmax_base[base];
2520 
2521         /* Work ;-) */
2522         while (str < scan) {
2523             if (*str == '_') {
2524                 str++;
2525                 continue;
2526             }
2527             /* grab up to convwidth digits from the input string */
2528             c = (digit)_PyLong_DigitValue[Py_CHARMASK(*str++)];
2529             for (i = 1; i < convwidth && str != scan; ++str) {
2530                 if (*str == '_') {
2531                     continue;
2532                 }
2533                 i++;
2534                 c = (twodigits)(c *  base +
2535                                 (int)_PyLong_DigitValue[Py_CHARMASK(*str)]);
2536                 assert(c < PyLong_BASE);
2537             }
2538 
2539             convmult = convmultmax;
2540             /* Calculate the shift only if we couldn't get
2541              * convwidth digits.
2542              */
2543             if (i != convwidth) {
2544                 convmult = base;
2545                 for ( ; i > 1; --i) {
2546                     convmult *= base;
2547                 }
2548             }
2549 
2550             /* Multiply z by convmult, and add c. */
2551             pz = z->ob_digit;
2552             pzstop = pz + Py_SIZE(z);
2553             for (; pz < pzstop; ++pz) {
2554                 c += (twodigits)*pz * convmult;
2555                 *pz = (digit)(c & PyLong_MASK);
2556                 c >>= PyLong_SHIFT;
2557             }
2558             /* carry off the current end? */
2559             if (c) {
2560                 assert(c < PyLong_BASE);
2561                 if (Py_SIZE(z) < size_z) {
2562                     *pz = (digit)c;
2563                     Py_SET_SIZE(z, Py_SIZE(z) + 1);
2564                 }
2565                 else {
2566                     PyLongObject *tmp;
2567                     /* Extremely rare.  Get more space. */
2568                     assert(Py_SIZE(z) == size_z);
2569                     tmp = _PyLong_New(size_z + 1);
2570                     if (tmp == NULL) {
2571                         Py_DECREF(z);
2572                         return NULL;
2573                     }
2574                     memcpy(tmp->ob_digit,
2575                            z->ob_digit,
2576                            sizeof(digit) * size_z);
2577                     Py_DECREF(z);
2578                     z = tmp;
2579                     z->ob_digit[size_z] = (digit)c;
2580                     ++size_z;
2581                 }
2582             }
2583         }
2584     }
2585     if (z == NULL) {
2586         return NULL;
2587     }
2588     if (error_if_nonzero) {
2589         /* reset the base to 0, else the exception message
2590            doesn't make too much sense */
2591         base = 0;
2592         if (Py_SIZE(z) != 0) {
2593             goto onError;
2594         }
2595         /* there might still be other problems, therefore base
2596            remains zero here for the same reason */
2597     }
2598     if (str == start) {
2599         goto onError;
2600     }
2601     if (sign < 0) {
2602         Py_SET_SIZE(z, -(Py_SIZE(z)));
2603     }
2604     while (*str && Py_ISSPACE(*str)) {
2605         str++;
2606     }
2607     if (*str != '\0') {
2608         goto onError;
2609     }
2610     long_normalize(z);
2611     z = maybe_small_long(z);
2612     if (z == NULL) {
2613         return NULL;
2614     }
2615     if (pend != NULL) {
2616         *pend = (char *)str;
2617     }
2618     return (PyObject *) z;
2619 
2620   onError:
2621     if (pend != NULL) {
2622         *pend = (char *)str;
2623     }
2624     Py_XDECREF(z);
2625     slen = strlen(orig_str) < 200 ? strlen(orig_str) : 200;
2626     strobj = PyUnicode_FromStringAndSize(orig_str, slen);
2627     if (strobj == NULL) {
2628         return NULL;
2629     }
2630     PyErr_Format(PyExc_ValueError,
2631                  "invalid literal for int() with base %d: %.200R",
2632                  base, strobj);
2633     Py_DECREF(strobj);
2634     return NULL;
2635 }
2636 
2637 /* Since PyLong_FromString doesn't have a length parameter,
2638  * check here for possible NULs in the string.
2639  *
2640  * Reports an invalid literal as a bytes object.
2641  */
2642 PyObject *
_PyLong_FromBytes(const char * s,Py_ssize_t len,int base)2643 _PyLong_FromBytes(const char *s, Py_ssize_t len, int base)
2644 {
2645     PyObject *result, *strobj;
2646     char *end = NULL;
2647 
2648     result = PyLong_FromString(s, &end, base);
2649     if (end == NULL || (result != NULL && end == s + len))
2650         return result;
2651     Py_XDECREF(result);
2652     strobj = PyBytes_FromStringAndSize(s, Py_MIN(len, 200));
2653     if (strobj != NULL) {
2654         PyErr_Format(PyExc_ValueError,
2655                      "invalid literal for int() with base %d: %.200R",
2656                      base, strobj);
2657         Py_DECREF(strobj);
2658     }
2659     return NULL;
2660 }
2661 
2662 PyObject *
PyLong_FromUnicodeObject(PyObject * u,int base)2663 PyLong_FromUnicodeObject(PyObject *u, int base)
2664 {
2665     PyObject *result, *asciidig;
2666     const char *buffer;
2667     char *end = NULL;
2668     Py_ssize_t buflen;
2669 
2670     asciidig = _PyUnicode_TransformDecimalAndSpaceToASCII(u);
2671     if (asciidig == NULL)
2672         return NULL;
2673     assert(PyUnicode_IS_ASCII(asciidig));
2674     /* Simply get a pointer to existing ASCII characters. */
2675     buffer = PyUnicode_AsUTF8AndSize(asciidig, &buflen);
2676     assert(buffer != NULL);
2677 
2678     result = PyLong_FromString(buffer, &end, base);
2679     if (end == NULL || (result != NULL && end == buffer + buflen)) {
2680         Py_DECREF(asciidig);
2681         return result;
2682     }
2683     Py_DECREF(asciidig);
2684     Py_XDECREF(result);
2685     PyErr_Format(PyExc_ValueError,
2686                  "invalid literal for int() with base %d: %.200R",
2687                  base, u);
2688     return NULL;
2689 }
2690 
2691 /* forward */
2692 static PyLongObject *x_divrem
2693     (PyLongObject *, PyLongObject *, PyLongObject **);
2694 static PyObject *long_long(PyObject *v);
2695 
2696 /* Int division with remainder, top-level routine */
2697 
2698 static int
long_divrem(PyLongObject * a,PyLongObject * b,PyLongObject ** pdiv,PyLongObject ** prem)2699 long_divrem(PyLongObject *a, PyLongObject *b,
2700             PyLongObject **pdiv, PyLongObject **prem)
2701 {
2702     Py_ssize_t size_a = Py_ABS(Py_SIZE(a)), size_b = Py_ABS(Py_SIZE(b));
2703     PyLongObject *z;
2704 
2705     if (size_b == 0) {
2706         PyErr_SetString(PyExc_ZeroDivisionError,
2707                         "integer division or modulo by zero");
2708         return -1;
2709     }
2710     if (size_a < size_b ||
2711         (size_a == size_b &&
2712          a->ob_digit[size_a-1] < b->ob_digit[size_b-1])) {
2713         /* |a| < |b|. */
2714         *prem = (PyLongObject *)long_long((PyObject *)a);
2715         if (*prem == NULL) {
2716             return -1;
2717         }
2718         PyObject *zero = _PyLong_GetZero();
2719         Py_INCREF(zero);
2720         *pdiv = (PyLongObject*)zero;
2721         return 0;
2722     }
2723     if (size_b == 1) {
2724         digit rem = 0;
2725         z = divrem1(a, b->ob_digit[0], &rem);
2726         if (z == NULL)
2727             return -1;
2728         *prem = (PyLongObject *) PyLong_FromLong((long)rem);
2729         if (*prem == NULL) {
2730             Py_DECREF(z);
2731             return -1;
2732         }
2733     }
2734     else {
2735         z = x_divrem(a, b, prem);
2736         *prem = maybe_small_long(*prem);
2737         if (z == NULL)
2738             return -1;
2739     }
2740     /* Set the signs.
2741        The quotient z has the sign of a*b;
2742        the remainder r has the sign of a,
2743        so a = b*z + r. */
2744     if ((Py_SIZE(a) < 0) != (Py_SIZE(b) < 0)) {
2745         _PyLong_Negate(&z);
2746         if (z == NULL) {
2747             Py_CLEAR(*prem);
2748             return -1;
2749         }
2750     }
2751     if (Py_SIZE(a) < 0 && Py_SIZE(*prem) != 0) {
2752         _PyLong_Negate(prem);
2753         if (*prem == NULL) {
2754             Py_DECREF(z);
2755             Py_CLEAR(*prem);
2756             return -1;
2757         }
2758     }
2759     *pdiv = maybe_small_long(z);
2760     return 0;
2761 }
2762 
2763 /* Int remainder, top-level routine */
2764 
2765 static int
long_rem(PyLongObject * a,PyLongObject * b,PyLongObject ** prem)2766 long_rem(PyLongObject *a, PyLongObject *b, PyLongObject **prem)
2767 {
2768     Py_ssize_t size_a = Py_ABS(Py_SIZE(a)), size_b = Py_ABS(Py_SIZE(b));
2769 
2770     if (size_b == 0) {
2771         PyErr_SetString(PyExc_ZeroDivisionError,
2772                         "integer modulo by zero");
2773         return -1;
2774     }
2775     if (size_a < size_b ||
2776         (size_a == size_b &&
2777          a->ob_digit[size_a-1] < b->ob_digit[size_b-1])) {
2778         /* |a| < |b|. */
2779         *prem = (PyLongObject *)long_long((PyObject *)a);
2780         return -(*prem == NULL);
2781     }
2782     if (size_b == 1) {
2783         *prem = rem1(a, b->ob_digit[0]);
2784         if (*prem == NULL)
2785             return -1;
2786     }
2787     else {
2788         /* Slow path using divrem. */
2789         Py_XDECREF(x_divrem(a, b, prem));
2790         *prem = maybe_small_long(*prem);
2791         if (*prem == NULL)
2792             return -1;
2793     }
2794     /* Set the sign. */
2795     if (Py_SIZE(a) < 0 && Py_SIZE(*prem) != 0) {
2796         _PyLong_Negate(prem);
2797         if (*prem == NULL) {
2798             Py_CLEAR(*prem);
2799             return -1;
2800         }
2801     }
2802     return 0;
2803 }
2804 
2805 /* Unsigned int division with remainder -- the algorithm.  The arguments v1
2806    and w1 should satisfy 2 <= Py_ABS(Py_SIZE(w1)) <= Py_ABS(Py_SIZE(v1)). */
2807 
2808 static PyLongObject *
x_divrem(PyLongObject * v1,PyLongObject * w1,PyLongObject ** prem)2809 x_divrem(PyLongObject *v1, PyLongObject *w1, PyLongObject **prem)
2810 {
2811     PyLongObject *v, *w, *a;
2812     Py_ssize_t i, k, size_v, size_w;
2813     int d;
2814     digit wm1, wm2, carry, q, r, vtop, *v0, *vk, *w0, *ak;
2815     twodigits vv;
2816     sdigit zhi;
2817     stwodigits z;
2818 
2819     /* We follow Knuth [The Art of Computer Programming, Vol. 2 (3rd
2820        edn.), section 4.3.1, Algorithm D], except that we don't explicitly
2821        handle the special case when the initial estimate q for a quotient
2822        digit is >= PyLong_BASE: the max value for q is PyLong_BASE+1, and
2823        that won't overflow a digit. */
2824 
2825     /* allocate space; w will also be used to hold the final remainder */
2826     size_v = Py_ABS(Py_SIZE(v1));
2827     size_w = Py_ABS(Py_SIZE(w1));
2828     assert(size_v >= size_w && size_w >= 2); /* Assert checks by div() */
2829     v = _PyLong_New(size_v+1);
2830     if (v == NULL) {
2831         *prem = NULL;
2832         return NULL;
2833     }
2834     w = _PyLong_New(size_w);
2835     if (w == NULL) {
2836         Py_DECREF(v);
2837         *prem = NULL;
2838         return NULL;
2839     }
2840 
2841     /* normalize: shift w1 left so that its top digit is >= PyLong_BASE/2.
2842        shift v1 left by the same amount.  Results go into w and v. */
2843     d = PyLong_SHIFT - bit_length_digit(w1->ob_digit[size_w-1]);
2844     carry = v_lshift(w->ob_digit, w1->ob_digit, size_w, d);
2845     assert(carry == 0);
2846     carry = v_lshift(v->ob_digit, v1->ob_digit, size_v, d);
2847     if (carry != 0 || v->ob_digit[size_v-1] >= w->ob_digit[size_w-1]) {
2848         v->ob_digit[size_v] = carry;
2849         size_v++;
2850     }
2851 
2852     /* Now v->ob_digit[size_v-1] < w->ob_digit[size_w-1], so quotient has
2853        at most (and usually exactly) k = size_v - size_w digits. */
2854     k = size_v - size_w;
2855     assert(k >= 0);
2856     a = _PyLong_New(k);
2857     if (a == NULL) {
2858         Py_DECREF(w);
2859         Py_DECREF(v);
2860         *prem = NULL;
2861         return NULL;
2862     }
2863     v0 = v->ob_digit;
2864     w0 = w->ob_digit;
2865     wm1 = w0[size_w-1];
2866     wm2 = w0[size_w-2];
2867     for (vk = v0+k, ak = a->ob_digit + k; vk-- > v0;) {
2868         /* inner loop: divide vk[0:size_w+1] by w0[0:size_w], giving
2869            single-digit quotient q, remainder in vk[0:size_w]. */
2870 
2871         SIGCHECK({
2872                 Py_DECREF(a);
2873                 Py_DECREF(w);
2874                 Py_DECREF(v);
2875                 *prem = NULL;
2876                 return NULL;
2877             });
2878 
2879         /* estimate quotient digit q; may overestimate by 1 (rare) */
2880         vtop = vk[size_w];
2881         assert(vtop <= wm1);
2882         vv = ((twodigits)vtop << PyLong_SHIFT) | vk[size_w-1];
2883         /* The code used to compute the remainder via
2884          *     r = (digit)(vv - (twodigits)wm1 * q);
2885          * and compilers generally generated code to do the * and -.
2886          * But modern processors generally compute q and r with a single
2887          * instruction, and modern optimizing compilers exploit that if we
2888          * _don't_ try to optimize it.
2889          */
2890         q = (digit)(vv / wm1);
2891         r = (digit)(vv % wm1);
2892         while ((twodigits)wm2 * q > (((twodigits)r << PyLong_SHIFT)
2893                                      | vk[size_w-2])) {
2894             --q;
2895             r += wm1;
2896             if (r >= PyLong_BASE)
2897                 break;
2898         }
2899         assert(q <= PyLong_BASE);
2900 
2901         /* subtract q*w0[0:size_w] from vk[0:size_w+1] */
2902         zhi = 0;
2903         for (i = 0; i < size_w; ++i) {
2904             /* invariants: -PyLong_BASE <= -q <= zhi <= 0;
2905                -PyLong_BASE * q <= z < PyLong_BASE */
2906             z = (sdigit)vk[i] + zhi -
2907                 (stwodigits)q * (stwodigits)w0[i];
2908             vk[i] = (digit)z & PyLong_MASK;
2909             zhi = (sdigit)Py_ARITHMETIC_RIGHT_SHIFT(stwodigits,
2910                                                     z, PyLong_SHIFT);
2911         }
2912 
2913         /* add w back if q was too large (this branch taken rarely) */
2914         assert((sdigit)vtop + zhi == -1 || (sdigit)vtop + zhi == 0);
2915         if ((sdigit)vtop + zhi < 0) {
2916             carry = 0;
2917             for (i = 0; i < size_w; ++i) {
2918                 carry += vk[i] + w0[i];
2919                 vk[i] = carry & PyLong_MASK;
2920                 carry >>= PyLong_SHIFT;
2921             }
2922             --q;
2923         }
2924 
2925         /* store quotient digit */
2926         assert(q < PyLong_BASE);
2927         *--ak = q;
2928     }
2929 
2930     /* unshift remainder; we reuse w to store the result */
2931     carry = v_rshift(w0, v0, size_w, d);
2932     assert(carry==0);
2933     Py_DECREF(v);
2934 
2935     *prem = long_normalize(w);
2936     return long_normalize(a);
2937 }
2938 
2939 /* For a nonzero PyLong a, express a in the form x * 2**e, with 0.5 <=
2940    abs(x) < 1.0 and e >= 0; return x and put e in *e.  Here x is
2941    rounded to DBL_MANT_DIG significant bits using round-half-to-even.
2942    If a == 0, return 0.0 and set *e = 0.  If the resulting exponent
2943    e is larger than PY_SSIZE_T_MAX, raise OverflowError and return
2944    -1.0. */
2945 
2946 /* attempt to define 2.0**DBL_MANT_DIG as a compile-time constant */
2947 #if DBL_MANT_DIG == 53
2948 #define EXP2_DBL_MANT_DIG 9007199254740992.0
2949 #else
2950 #define EXP2_DBL_MANT_DIG (ldexp(1.0, DBL_MANT_DIG))
2951 #endif
2952 
2953 double
_PyLong_Frexp(PyLongObject * a,Py_ssize_t * e)2954 _PyLong_Frexp(PyLongObject *a, Py_ssize_t *e)
2955 {
2956     Py_ssize_t a_size, a_bits, shift_digits, shift_bits, x_size;
2957     /* See below for why x_digits is always large enough. */
2958     digit rem;
2959     digit x_digits[2 + (DBL_MANT_DIG + 1) / PyLong_SHIFT] = {0,};
2960     double dx;
2961     /* Correction term for round-half-to-even rounding.  For a digit x,
2962        "x + half_even_correction[x & 7]" gives x rounded to the nearest
2963        multiple of 4, rounding ties to a multiple of 8. */
2964     static const int half_even_correction[8] = {0, -1, -2, 1, 0, -1, 2, 1};
2965 
2966     a_size = Py_ABS(Py_SIZE(a));
2967     if (a_size == 0) {
2968         /* Special case for 0: significand 0.0, exponent 0. */
2969         *e = 0;
2970         return 0.0;
2971     }
2972     a_bits = bit_length_digit(a->ob_digit[a_size-1]);
2973     /* The following is an overflow-free version of the check
2974        "if ((a_size - 1) * PyLong_SHIFT + a_bits > PY_SSIZE_T_MAX) ..." */
2975     if (a_size >= (PY_SSIZE_T_MAX - 1) / PyLong_SHIFT + 1 &&
2976         (a_size > (PY_SSIZE_T_MAX - 1) / PyLong_SHIFT + 1 ||
2977          a_bits > (PY_SSIZE_T_MAX - 1) % PyLong_SHIFT + 1))
2978         goto overflow;
2979     a_bits = (a_size - 1) * PyLong_SHIFT + a_bits;
2980 
2981     /* Shift the first DBL_MANT_DIG + 2 bits of a into x_digits[0:x_size]
2982        (shifting left if a_bits <= DBL_MANT_DIG + 2).
2983 
2984        Number of digits needed for result: write // for floor division.
2985        Then if shifting left, we end up using
2986 
2987          1 + a_size + (DBL_MANT_DIG + 2 - a_bits) // PyLong_SHIFT
2988 
2989        digits.  If shifting right, we use
2990 
2991          a_size - (a_bits - DBL_MANT_DIG - 2) // PyLong_SHIFT
2992 
2993        digits.  Using a_size = 1 + (a_bits - 1) // PyLong_SHIFT along with
2994        the inequalities
2995 
2996          m // PyLong_SHIFT + n // PyLong_SHIFT <= (m + n) // PyLong_SHIFT
2997          m // PyLong_SHIFT - n // PyLong_SHIFT <=
2998                                           1 + (m - n - 1) // PyLong_SHIFT,
2999 
3000        valid for any integers m and n, we find that x_size satisfies
3001 
3002          x_size <= 2 + (DBL_MANT_DIG + 1) // PyLong_SHIFT
3003 
3004        in both cases.
3005     */
3006     if (a_bits <= DBL_MANT_DIG + 2) {
3007         shift_digits = (DBL_MANT_DIG + 2 - a_bits) / PyLong_SHIFT;
3008         shift_bits = (DBL_MANT_DIG + 2 - a_bits) % PyLong_SHIFT;
3009         x_size = shift_digits;
3010         rem = v_lshift(x_digits + x_size, a->ob_digit, a_size,
3011                        (int)shift_bits);
3012         x_size += a_size;
3013         x_digits[x_size++] = rem;
3014     }
3015     else {
3016         shift_digits = (a_bits - DBL_MANT_DIG - 2) / PyLong_SHIFT;
3017         shift_bits = (a_bits - DBL_MANT_DIG - 2) % PyLong_SHIFT;
3018         rem = v_rshift(x_digits, a->ob_digit + shift_digits,
3019                        a_size - shift_digits, (int)shift_bits);
3020         x_size = a_size - shift_digits;
3021         /* For correct rounding below, we need the least significant
3022            bit of x to be 'sticky' for this shift: if any of the bits
3023            shifted out was nonzero, we set the least significant bit
3024            of x. */
3025         if (rem)
3026             x_digits[0] |= 1;
3027         else
3028             while (shift_digits > 0)
3029                 if (a->ob_digit[--shift_digits]) {
3030                     x_digits[0] |= 1;
3031                     break;
3032                 }
3033     }
3034     assert(1 <= x_size && x_size <= (Py_ssize_t)Py_ARRAY_LENGTH(x_digits));
3035 
3036     /* Round, and convert to double. */
3037     x_digits[0] += half_even_correction[x_digits[0] & 7];
3038     dx = x_digits[--x_size];
3039     while (x_size > 0)
3040         dx = dx * PyLong_BASE + x_digits[--x_size];
3041 
3042     /* Rescale;  make correction if result is 1.0. */
3043     dx /= 4.0 * EXP2_DBL_MANT_DIG;
3044     if (dx == 1.0) {
3045         if (a_bits == PY_SSIZE_T_MAX)
3046             goto overflow;
3047         dx = 0.5;
3048         a_bits += 1;
3049     }
3050 
3051     *e = a_bits;
3052     return Py_SIZE(a) < 0 ? -dx : dx;
3053 
3054   overflow:
3055     /* exponent > PY_SSIZE_T_MAX */
3056     PyErr_SetString(PyExc_OverflowError,
3057                     "huge integer: number of bits overflows a Py_ssize_t");
3058     *e = 0;
3059     return -1.0;
3060 }
3061 
3062 /* Get a C double from an int object.  Rounds to the nearest double,
3063    using the round-half-to-even rule in the case of a tie. */
3064 
3065 double
PyLong_AsDouble(PyObject * v)3066 PyLong_AsDouble(PyObject *v)
3067 {
3068     Py_ssize_t exponent;
3069     double x;
3070 
3071     if (v == NULL) {
3072         PyErr_BadInternalCall();
3073         return -1.0;
3074     }
3075     if (!PyLong_Check(v)) {
3076         PyErr_SetString(PyExc_TypeError, "an integer is required");
3077         return -1.0;
3078     }
3079     if (IS_MEDIUM_VALUE(v)) {
3080         /* Fast path; single digit long (31 bits) will cast safely
3081            to double.  This improves performance of FP/long operations
3082            by 20%.
3083         */
3084         return (double)medium_value((PyLongObject *)v);
3085     }
3086     x = _PyLong_Frexp((PyLongObject *)v, &exponent);
3087     if ((x == -1.0 && PyErr_Occurred()) || exponent > DBL_MAX_EXP) {
3088         PyErr_SetString(PyExc_OverflowError,
3089                         "int too large to convert to float");
3090         return -1.0;
3091     }
3092     return ldexp(x, (int)exponent);
3093 }
3094 
3095 /* Methods */
3096 
3097 /* if a < b, return a negative number
3098    if a == b, return 0
3099    if a > b, return a positive number */
3100 
3101 static Py_ssize_t
long_compare(PyLongObject * a,PyLongObject * b)3102 long_compare(PyLongObject *a, PyLongObject *b)
3103 {
3104     Py_ssize_t sign = Py_SIZE(a) - Py_SIZE(b);
3105     if (sign == 0) {
3106         Py_ssize_t i = Py_ABS(Py_SIZE(a));
3107         sdigit diff = 0;
3108         while (--i >= 0) {
3109             diff = (sdigit) a->ob_digit[i] - (sdigit) b->ob_digit[i];
3110             if (diff) {
3111                 break;
3112             }
3113         }
3114         sign = Py_SIZE(a) < 0 ? -diff : diff;
3115     }
3116     return sign;
3117 }
3118 
3119 static PyObject *
long_richcompare(PyObject * self,PyObject * other,int op)3120 long_richcompare(PyObject *self, PyObject *other, int op)
3121 {
3122     Py_ssize_t result;
3123     CHECK_BINOP(self, other);
3124     if (self == other)
3125         result = 0;
3126     else
3127         result = long_compare((PyLongObject*)self, (PyLongObject*)other);
3128     Py_RETURN_RICHCOMPARE(result, 0, op);
3129 }
3130 
3131 static Py_hash_t
long_hash(PyLongObject * v)3132 long_hash(PyLongObject *v)
3133 {
3134     Py_uhash_t x;
3135     Py_ssize_t i;
3136     int sign;
3137 
3138     i = Py_SIZE(v);
3139     switch(i) {
3140     case -1: return v->ob_digit[0]==1 ? -2 : -(sdigit)v->ob_digit[0];
3141     case 0: return 0;
3142     case 1: return v->ob_digit[0];
3143     }
3144     sign = 1;
3145     x = 0;
3146     if (i < 0) {
3147         sign = -1;
3148         i = -(i);
3149     }
3150     while (--i >= 0) {
3151         /* Here x is a quantity in the range [0, _PyHASH_MODULUS); we
3152            want to compute x * 2**PyLong_SHIFT + v->ob_digit[i] modulo
3153            _PyHASH_MODULUS.
3154 
3155            The computation of x * 2**PyLong_SHIFT % _PyHASH_MODULUS
3156            amounts to a rotation of the bits of x.  To see this, write
3157 
3158              x * 2**PyLong_SHIFT = y * 2**_PyHASH_BITS + z
3159 
3160            where y = x >> (_PyHASH_BITS - PyLong_SHIFT) gives the top
3161            PyLong_SHIFT bits of x (those that are shifted out of the
3162            original _PyHASH_BITS bits, and z = (x << PyLong_SHIFT) &
3163            _PyHASH_MODULUS gives the bottom _PyHASH_BITS - PyLong_SHIFT
3164            bits of x, shifted up.  Then since 2**_PyHASH_BITS is
3165            congruent to 1 modulo _PyHASH_MODULUS, y*2**_PyHASH_BITS is
3166            congruent to y modulo _PyHASH_MODULUS.  So
3167 
3168              x * 2**PyLong_SHIFT = y + z (mod _PyHASH_MODULUS).
3169 
3170            The right-hand side is just the result of rotating the
3171            _PyHASH_BITS bits of x left by PyLong_SHIFT places; since
3172            not all _PyHASH_BITS bits of x are 1s, the same is true
3173            after rotation, so 0 <= y+z < _PyHASH_MODULUS and y + z is
3174            the reduction of x*2**PyLong_SHIFT modulo
3175            _PyHASH_MODULUS. */
3176         x = ((x << PyLong_SHIFT) & _PyHASH_MODULUS) |
3177             (x >> (_PyHASH_BITS - PyLong_SHIFT));
3178         x += v->ob_digit[i];
3179         if (x >= _PyHASH_MODULUS)
3180             x -= _PyHASH_MODULUS;
3181     }
3182     x = x * sign;
3183     if (x == (Py_uhash_t)-1)
3184         x = (Py_uhash_t)-2;
3185     return (Py_hash_t)x;
3186 }
3187 
3188 
3189 /* Add the absolute values of two integers. */
3190 
3191 static PyLongObject *
x_add(PyLongObject * a,PyLongObject * b)3192 x_add(PyLongObject *a, PyLongObject *b)
3193 {
3194     Py_ssize_t size_a = Py_ABS(Py_SIZE(a)), size_b = Py_ABS(Py_SIZE(b));
3195     PyLongObject *z;
3196     Py_ssize_t i;
3197     digit carry = 0;
3198 
3199     /* Ensure a is the larger of the two: */
3200     if (size_a < size_b) {
3201         { PyLongObject *temp = a; a = b; b = temp; }
3202         { Py_ssize_t size_temp = size_a;
3203             size_a = size_b;
3204             size_b = size_temp; }
3205     }
3206     z = _PyLong_New(size_a+1);
3207     if (z == NULL)
3208         return NULL;
3209     for (i = 0; i < size_b; ++i) {
3210         carry += a->ob_digit[i] + b->ob_digit[i];
3211         z->ob_digit[i] = carry & PyLong_MASK;
3212         carry >>= PyLong_SHIFT;
3213     }
3214     for (; i < size_a; ++i) {
3215         carry += a->ob_digit[i];
3216         z->ob_digit[i] = carry & PyLong_MASK;
3217         carry >>= PyLong_SHIFT;
3218     }
3219     z->ob_digit[i] = carry;
3220     return long_normalize(z);
3221 }
3222 
3223 /* Subtract the absolute values of two integers. */
3224 
3225 static PyLongObject *
x_sub(PyLongObject * a,PyLongObject * b)3226 x_sub(PyLongObject *a, PyLongObject *b)
3227 {
3228     Py_ssize_t size_a = Py_ABS(Py_SIZE(a)), size_b = Py_ABS(Py_SIZE(b));
3229     PyLongObject *z;
3230     Py_ssize_t i;
3231     int sign = 1;
3232     digit borrow = 0;
3233 
3234     /* Ensure a is the larger of the two: */
3235     if (size_a < size_b) {
3236         sign = -1;
3237         { PyLongObject *temp = a; a = b; b = temp; }
3238         { Py_ssize_t size_temp = size_a;
3239             size_a = size_b;
3240             size_b = size_temp; }
3241     }
3242     else if (size_a == size_b) {
3243         /* Find highest digit where a and b differ: */
3244         i = size_a;
3245         while (--i >= 0 && a->ob_digit[i] == b->ob_digit[i])
3246             ;
3247         if (i < 0)
3248             return (PyLongObject *)PyLong_FromLong(0);
3249         if (a->ob_digit[i] < b->ob_digit[i]) {
3250             sign = -1;
3251             { PyLongObject *temp = a; a = b; b = temp; }
3252         }
3253         size_a = size_b = i+1;
3254     }
3255     z = _PyLong_New(size_a);
3256     if (z == NULL)
3257         return NULL;
3258     for (i = 0; i < size_b; ++i) {
3259         /* The following assumes unsigned arithmetic
3260            works module 2**N for some N>PyLong_SHIFT. */
3261         borrow = a->ob_digit[i] - b->ob_digit[i] - borrow;
3262         z->ob_digit[i] = borrow & PyLong_MASK;
3263         borrow >>= PyLong_SHIFT;
3264         borrow &= 1; /* Keep only one sign bit */
3265     }
3266     for (; i < size_a; ++i) {
3267         borrow = a->ob_digit[i] - borrow;
3268         z->ob_digit[i] = borrow & PyLong_MASK;
3269         borrow >>= PyLong_SHIFT;
3270         borrow &= 1; /* Keep only one sign bit */
3271     }
3272     assert(borrow == 0);
3273     if (sign < 0) {
3274         Py_SET_SIZE(z, -Py_SIZE(z));
3275     }
3276     return maybe_small_long(long_normalize(z));
3277 }
3278 
3279 PyObject *
_PyLong_Add(PyLongObject * a,PyLongObject * b)3280 _PyLong_Add(PyLongObject *a, PyLongObject *b)
3281 {
3282     if (IS_MEDIUM_VALUE(a) && IS_MEDIUM_VALUE(b)) {
3283         return _PyLong_FromSTwoDigits(medium_value(a) + medium_value(b));
3284     }
3285 
3286     PyLongObject *z;
3287     if (Py_SIZE(a) < 0) {
3288         if (Py_SIZE(b) < 0) {
3289             z = x_add(a, b);
3290             if (z != NULL) {
3291                 /* x_add received at least one multiple-digit int,
3292                    and thus z must be a multiple-digit int.
3293                    That also means z is not an element of
3294                    small_ints, so negating it in-place is safe. */
3295                 assert(Py_REFCNT(z) == 1);
3296                 Py_SET_SIZE(z, -(Py_SIZE(z)));
3297             }
3298         }
3299         else
3300             z = x_sub(b, a);
3301     }
3302     else {
3303         if (Py_SIZE(b) < 0)
3304             z = x_sub(a, b);
3305         else
3306             z = x_add(a, b);
3307     }
3308     return (PyObject *)z;
3309 }
3310 
3311 static PyObject *
long_add(PyLongObject * a,PyLongObject * b)3312 long_add(PyLongObject *a, PyLongObject *b)
3313 {
3314     CHECK_BINOP(a, b);
3315     return _PyLong_Add(a, b);
3316 }
3317 
3318 PyObject *
_PyLong_Subtract(PyLongObject * a,PyLongObject * b)3319 _PyLong_Subtract(PyLongObject *a, PyLongObject *b)
3320 {
3321     PyLongObject *z;
3322 
3323     if (IS_MEDIUM_VALUE(a) && IS_MEDIUM_VALUE(b)) {
3324         return _PyLong_FromSTwoDigits(medium_value(a) - medium_value(b));
3325     }
3326     if (Py_SIZE(a) < 0) {
3327         if (Py_SIZE(b) < 0) {
3328             z = x_sub(b, a);
3329         }
3330         else {
3331             z = x_add(a, b);
3332             if (z != NULL) {
3333                 assert(Py_SIZE(z) == 0 || Py_REFCNT(z) == 1);
3334                 Py_SET_SIZE(z, -(Py_SIZE(z)));
3335             }
3336         }
3337     }
3338     else {
3339         if (Py_SIZE(b) < 0)
3340             z = x_add(a, b);
3341         else
3342             z = x_sub(a, b);
3343     }
3344     return (PyObject *)z;
3345 }
3346 
3347 static PyObject *
long_sub(PyLongObject * a,PyLongObject * b)3348 long_sub(PyLongObject *a, PyLongObject *b)
3349 {
3350     CHECK_BINOP(a, b);
3351     return _PyLong_Subtract(a, b);
3352 }
3353 
3354 /* Grade school multiplication, ignoring the signs.
3355  * Returns the absolute value of the product, or NULL if error.
3356  */
3357 static PyLongObject *
x_mul(PyLongObject * a,PyLongObject * b)3358 x_mul(PyLongObject *a, PyLongObject *b)
3359 {
3360     PyLongObject *z;
3361     Py_ssize_t size_a = Py_ABS(Py_SIZE(a));
3362     Py_ssize_t size_b = Py_ABS(Py_SIZE(b));
3363     Py_ssize_t i;
3364 
3365     z = _PyLong_New(size_a + size_b);
3366     if (z == NULL)
3367         return NULL;
3368 
3369     memset(z->ob_digit, 0, Py_SIZE(z) * sizeof(digit));
3370     if (a == b) {
3371         /* Efficient squaring per HAC, Algorithm 14.16:
3372          * http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf
3373          * Gives slightly less than a 2x speedup when a == b,
3374          * via exploiting that each entry in the multiplication
3375          * pyramid appears twice (except for the size_a squares).
3376          */
3377         digit *paend = a->ob_digit + size_a;
3378         for (i = 0; i < size_a; ++i) {
3379             twodigits carry;
3380             twodigits f = a->ob_digit[i];
3381             digit *pz = z->ob_digit + (i << 1);
3382             digit *pa = a->ob_digit + i + 1;
3383 
3384             SIGCHECK({
3385                     Py_DECREF(z);
3386                     return NULL;
3387                 });
3388 
3389             carry = *pz + f * f;
3390             *pz++ = (digit)(carry & PyLong_MASK);
3391             carry >>= PyLong_SHIFT;
3392             assert(carry <= PyLong_MASK);
3393 
3394             /* Now f is added in twice in each column of the
3395              * pyramid it appears.  Same as adding f<<1 once.
3396              */
3397             f <<= 1;
3398             while (pa < paend) {
3399                 carry += *pz + *pa++ * f;
3400                 *pz++ = (digit)(carry & PyLong_MASK);
3401                 carry >>= PyLong_SHIFT;
3402                 assert(carry <= (PyLong_MASK << 1));
3403             }
3404             if (carry) {
3405                 /* See comment below. pz points at the highest possible
3406                  * carry position from the last outer loop iteration, so
3407                  * *pz is at most 1.
3408                  */
3409                 assert(*pz <= 1);
3410                 carry += *pz;
3411                 *pz = (digit)(carry & PyLong_MASK);
3412                 carry >>= PyLong_SHIFT;
3413                 if (carry) {
3414                     /* If there's still a carry, it must be into a position
3415                      * that still holds a 0. Where the base
3416                      ^ B is 1 << PyLong_SHIFT, the last add was of a carry no
3417                      * more than 2*B - 2 to a stored digit no more than 1.
3418                      * So the sum was no more than 2*B - 1, so the current
3419                      * carry no more than floor((2*B - 1)/B) = 1.
3420                      */
3421                     assert(carry == 1);
3422                     assert(pz[1] == 0);
3423                     pz[1] = (digit)carry;
3424                 }
3425             }
3426         }
3427     }
3428     else {      /* a is not the same as b -- gradeschool int mult */
3429         for (i = 0; i < size_a; ++i) {
3430             twodigits carry = 0;
3431             twodigits f = a->ob_digit[i];
3432             digit *pz = z->ob_digit + i;
3433             digit *pb = b->ob_digit;
3434             digit *pbend = b->ob_digit + size_b;
3435 
3436             SIGCHECK({
3437                     Py_DECREF(z);
3438                     return NULL;
3439                 });
3440 
3441             while (pb < pbend) {
3442                 carry += *pz + *pb++ * f;
3443                 *pz++ = (digit)(carry & PyLong_MASK);
3444                 carry >>= PyLong_SHIFT;
3445                 assert(carry <= PyLong_MASK);
3446             }
3447             if (carry)
3448                 *pz += (digit)(carry & PyLong_MASK);
3449             assert((carry >> PyLong_SHIFT) == 0);
3450         }
3451     }
3452     return long_normalize(z);
3453 }
3454 
3455 /* A helper for Karatsuba multiplication (k_mul).
3456    Takes an int "n" and an integer "size" representing the place to
3457    split, and sets low and high such that abs(n) == (high << size) + low,
3458    viewing the shift as being by digits.  The sign bit is ignored, and
3459    the return values are >= 0.
3460    Returns 0 on success, -1 on failure.
3461 */
3462 static int
kmul_split(PyLongObject * n,Py_ssize_t size,PyLongObject ** high,PyLongObject ** low)3463 kmul_split(PyLongObject *n,
3464            Py_ssize_t size,
3465            PyLongObject **high,
3466            PyLongObject **low)
3467 {
3468     PyLongObject *hi, *lo;
3469     Py_ssize_t size_lo, size_hi;
3470     const Py_ssize_t size_n = Py_ABS(Py_SIZE(n));
3471 
3472     size_lo = Py_MIN(size_n, size);
3473     size_hi = size_n - size_lo;
3474 
3475     if ((hi = _PyLong_New(size_hi)) == NULL)
3476         return -1;
3477     if ((lo = _PyLong_New(size_lo)) == NULL) {
3478         Py_DECREF(hi);
3479         return -1;
3480     }
3481 
3482     memcpy(lo->ob_digit, n->ob_digit, size_lo * sizeof(digit));
3483     memcpy(hi->ob_digit, n->ob_digit + size_lo, size_hi * sizeof(digit));
3484 
3485     *high = long_normalize(hi);
3486     *low = long_normalize(lo);
3487     return 0;
3488 }
3489 
3490 static PyLongObject *k_lopsided_mul(PyLongObject *a, PyLongObject *b);
3491 
3492 /* Karatsuba multiplication.  Ignores the input signs, and returns the
3493  * absolute value of the product (or NULL if error).
3494  * See Knuth Vol. 2 Chapter 4.3.3 (Pp. 294-295).
3495  */
3496 static PyLongObject *
k_mul(PyLongObject * a,PyLongObject * b)3497 k_mul(PyLongObject *a, PyLongObject *b)
3498 {
3499     Py_ssize_t asize = Py_ABS(Py_SIZE(a));
3500     Py_ssize_t bsize = Py_ABS(Py_SIZE(b));
3501     PyLongObject *ah = NULL;
3502     PyLongObject *al = NULL;
3503     PyLongObject *bh = NULL;
3504     PyLongObject *bl = NULL;
3505     PyLongObject *ret = NULL;
3506     PyLongObject *t1, *t2, *t3;
3507     Py_ssize_t shift;           /* the number of digits we split off */
3508     Py_ssize_t i;
3509 
3510     /* (ah*X+al)(bh*X+bl) = ah*bh*X*X + (ah*bl + al*bh)*X + al*bl
3511      * Let k = (ah+al)*(bh+bl) = ah*bl + al*bh  + ah*bh + al*bl
3512      * Then the original product is
3513      *     ah*bh*X*X + (k - ah*bh - al*bl)*X + al*bl
3514      * By picking X to be a power of 2, "*X" is just shifting, and it's
3515      * been reduced to 3 multiplies on numbers half the size.
3516      */
3517 
3518     /* We want to split based on the larger number; fiddle so that b
3519      * is largest.
3520      */
3521     if (asize > bsize) {
3522         t1 = a;
3523         a = b;
3524         b = t1;
3525 
3526         i = asize;
3527         asize = bsize;
3528         bsize = i;
3529     }
3530 
3531     /* Use gradeschool math when either number is too small. */
3532     i = a == b ? KARATSUBA_SQUARE_CUTOFF : KARATSUBA_CUTOFF;
3533     if (asize <= i) {
3534         if (asize == 0)
3535             return (PyLongObject *)PyLong_FromLong(0);
3536         else
3537             return x_mul(a, b);
3538     }
3539 
3540     /* If a is small compared to b, splitting on b gives a degenerate
3541      * case with ah==0, and Karatsuba may be (even much) less efficient
3542      * than "grade school" then.  However, we can still win, by viewing
3543      * b as a string of "big digits", each of width a->ob_size.  That
3544      * leads to a sequence of balanced calls to k_mul.
3545      */
3546     if (2 * asize <= bsize)
3547         return k_lopsided_mul(a, b);
3548 
3549     /* Split a & b into hi & lo pieces. */
3550     shift = bsize >> 1;
3551     if (kmul_split(a, shift, &ah, &al) < 0) goto fail;
3552     assert(Py_SIZE(ah) > 0);            /* the split isn't degenerate */
3553 
3554     if (a == b) {
3555         bh = ah;
3556         bl = al;
3557         Py_INCREF(bh);
3558         Py_INCREF(bl);
3559     }
3560     else if (kmul_split(b, shift, &bh, &bl) < 0) goto fail;
3561 
3562     /* The plan:
3563      * 1. Allocate result space (asize + bsize digits:  that's always
3564      *    enough).
3565      * 2. Compute ah*bh, and copy into result at 2*shift.
3566      * 3. Compute al*bl, and copy into result at 0.  Note that this
3567      *    can't overlap with #2.
3568      * 4. Subtract al*bl from the result, starting at shift.  This may
3569      *    underflow (borrow out of the high digit), but we don't care:
3570      *    we're effectively doing unsigned arithmetic mod
3571      *    BASE**(sizea + sizeb), and so long as the *final* result fits,
3572      *    borrows and carries out of the high digit can be ignored.
3573      * 5. Subtract ah*bh from the result, starting at shift.
3574      * 6. Compute (ah+al)*(bh+bl), and add it into the result starting
3575      *    at shift.
3576      */
3577 
3578     /* 1. Allocate result space. */
3579     ret = _PyLong_New(asize + bsize);
3580     if (ret == NULL) goto fail;
3581 #ifdef Py_DEBUG
3582     /* Fill with trash, to catch reference to uninitialized digits. */
3583     memset(ret->ob_digit, 0xDF, Py_SIZE(ret) * sizeof(digit));
3584 #endif
3585 
3586     /* 2. t1 <- ah*bh, and copy into high digits of result. */
3587     if ((t1 = k_mul(ah, bh)) == NULL) goto fail;
3588     assert(Py_SIZE(t1) >= 0);
3589     assert(2*shift + Py_SIZE(t1) <= Py_SIZE(ret));
3590     memcpy(ret->ob_digit + 2*shift, t1->ob_digit,
3591            Py_SIZE(t1) * sizeof(digit));
3592 
3593     /* Zero-out the digits higher than the ah*bh copy. */
3594     i = Py_SIZE(ret) - 2*shift - Py_SIZE(t1);
3595     if (i)
3596         memset(ret->ob_digit + 2*shift + Py_SIZE(t1), 0,
3597                i * sizeof(digit));
3598 
3599     /* 3. t2 <- al*bl, and copy into the low digits. */
3600     if ((t2 = k_mul(al, bl)) == NULL) {
3601         Py_DECREF(t1);
3602         goto fail;
3603     }
3604     assert(Py_SIZE(t2) >= 0);
3605     assert(Py_SIZE(t2) <= 2*shift); /* no overlap with high digits */
3606     memcpy(ret->ob_digit, t2->ob_digit, Py_SIZE(t2) * sizeof(digit));
3607 
3608     /* Zero out remaining digits. */
3609     i = 2*shift - Py_SIZE(t2);          /* number of uninitialized digits */
3610     if (i)
3611         memset(ret->ob_digit + Py_SIZE(t2), 0, i * sizeof(digit));
3612 
3613     /* 4 & 5. Subtract ah*bh (t1) and al*bl (t2).  We do al*bl first
3614      * because it's fresher in cache.
3615      */
3616     i = Py_SIZE(ret) - shift;  /* # digits after shift */
3617     (void)v_isub(ret->ob_digit + shift, i, t2->ob_digit, Py_SIZE(t2));
3618     _Py_DECREF_INT(t2);
3619 
3620     (void)v_isub(ret->ob_digit + shift, i, t1->ob_digit, Py_SIZE(t1));
3621     _Py_DECREF_INT(t1);
3622 
3623     /* 6. t3 <- (ah+al)(bh+bl), and add into result. */
3624     if ((t1 = x_add(ah, al)) == NULL) goto fail;
3625     _Py_DECREF_INT(ah);
3626     _Py_DECREF_INT(al);
3627     ah = al = NULL;
3628 
3629     if (a == b) {
3630         t2 = t1;
3631         Py_INCREF(t2);
3632     }
3633     else if ((t2 = x_add(bh, bl)) == NULL) {
3634         Py_DECREF(t1);
3635         goto fail;
3636     }
3637     _Py_DECREF_INT(bh);
3638     _Py_DECREF_INT(bl);
3639     bh = bl = NULL;
3640 
3641     t3 = k_mul(t1, t2);
3642     _Py_DECREF_INT(t1);
3643     _Py_DECREF_INT(t2);
3644     if (t3 == NULL) goto fail;
3645     assert(Py_SIZE(t3) >= 0);
3646 
3647     /* Add t3.  It's not obvious why we can't run out of room here.
3648      * See the (*) comment after this function.
3649      */
3650     (void)v_iadd(ret->ob_digit + shift, i, t3->ob_digit, Py_SIZE(t3));
3651     _Py_DECREF_INT(t3);
3652 
3653     return long_normalize(ret);
3654 
3655   fail:
3656     Py_XDECREF(ret);
3657     Py_XDECREF(ah);
3658     Py_XDECREF(al);
3659     Py_XDECREF(bh);
3660     Py_XDECREF(bl);
3661     return NULL;
3662 }
3663 
3664 /* (*) Why adding t3 can't "run out of room" above.
3665 
3666 Let f(x) mean the floor of x and c(x) mean the ceiling of x.  Some facts
3667 to start with:
3668 
3669 1. For any integer i, i = c(i/2) + f(i/2).  In particular,
3670    bsize = c(bsize/2) + f(bsize/2).
3671 2. shift = f(bsize/2)
3672 3. asize <= bsize
3673 4. Since we call k_lopsided_mul if asize*2 <= bsize, asize*2 > bsize in this
3674    routine, so asize > bsize/2 >= f(bsize/2) in this routine.
3675 
3676 We allocated asize + bsize result digits, and add t3 into them at an offset
3677 of shift.  This leaves asize+bsize-shift allocated digit positions for t3
3678 to fit into, = (by #1 and #2) asize + f(bsize/2) + c(bsize/2) - f(bsize/2) =
3679 asize + c(bsize/2) available digit positions.
3680 
3681 bh has c(bsize/2) digits, and bl at most f(size/2) digits.  So bh+hl has
3682 at most c(bsize/2) digits + 1 bit.
3683 
3684 If asize == bsize, ah has c(bsize/2) digits, else ah has at most f(bsize/2)
3685 digits, and al has at most f(bsize/2) digits in any case.  So ah+al has at
3686 most (asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 1 bit.
3687 
3688 The product (ah+al)*(bh+bl) therefore has at most
3689 
3690     c(bsize/2) + (asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 2 bits
3691 
3692 and we have asize + c(bsize/2) available digit positions.  We need to show
3693 this is always enough.  An instance of c(bsize/2) cancels out in both, so
3694 the question reduces to whether asize digits is enough to hold
3695 (asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 2 bits.  If asize < bsize,
3696 then we're asking whether asize digits >= f(bsize/2) digits + 2 bits.  By #4,
3697 asize is at least f(bsize/2)+1 digits, so this in turn reduces to whether 1
3698 digit is enough to hold 2 bits.  This is so since PyLong_SHIFT=15 >= 2.  If
3699 asize == bsize, then we're asking whether bsize digits is enough to hold
3700 c(bsize/2) digits + 2 bits, or equivalently (by #1) whether f(bsize/2) digits
3701 is enough to hold 2 bits.  This is so if bsize >= 2, which holds because
3702 bsize >= KARATSUBA_CUTOFF >= 2.
3703 
3704 Note that since there's always enough room for (ah+al)*(bh+bl), and that's
3705 clearly >= each of ah*bh and al*bl, there's always enough room to subtract
3706 ah*bh and al*bl too.
3707 */
3708 
3709 /* b has at least twice the digits of a, and a is big enough that Karatsuba
3710  * would pay off *if* the inputs had balanced sizes.  View b as a sequence
3711  * of slices, each with a->ob_size digits, and multiply the slices by a,
3712  * one at a time.  This gives k_mul balanced inputs to work with, and is
3713  * also cache-friendly (we compute one double-width slice of the result
3714  * at a time, then move on, never backtracking except for the helpful
3715  * single-width slice overlap between successive partial sums).
3716  */
3717 static PyLongObject *
k_lopsided_mul(PyLongObject * a,PyLongObject * b)3718 k_lopsided_mul(PyLongObject *a, PyLongObject *b)
3719 {
3720     const Py_ssize_t asize = Py_ABS(Py_SIZE(a));
3721     Py_ssize_t bsize = Py_ABS(Py_SIZE(b));
3722     Py_ssize_t nbdone;          /* # of b digits already multiplied */
3723     PyLongObject *ret;
3724     PyLongObject *bslice = NULL;
3725 
3726     assert(asize > KARATSUBA_CUTOFF);
3727     assert(2 * asize <= bsize);
3728 
3729     /* Allocate result space, and zero it out. */
3730     ret = _PyLong_New(asize + bsize);
3731     if (ret == NULL)
3732         return NULL;
3733     memset(ret->ob_digit, 0, Py_SIZE(ret) * sizeof(digit));
3734 
3735     /* Successive slices of b are copied into bslice. */
3736     bslice = _PyLong_New(asize);
3737     if (bslice == NULL)
3738         goto fail;
3739 
3740     nbdone = 0;
3741     while (bsize > 0) {
3742         PyLongObject *product;
3743         const Py_ssize_t nbtouse = Py_MIN(bsize, asize);
3744 
3745         /* Multiply the next slice of b by a. */
3746         memcpy(bslice->ob_digit, b->ob_digit + nbdone,
3747                nbtouse * sizeof(digit));
3748         Py_SET_SIZE(bslice, nbtouse);
3749         product = k_mul(a, bslice);
3750         if (product == NULL)
3751             goto fail;
3752 
3753         /* Add into result. */
3754         (void)v_iadd(ret->ob_digit + nbdone, Py_SIZE(ret) - nbdone,
3755                      product->ob_digit, Py_SIZE(product));
3756         _Py_DECREF_INT(product);
3757 
3758         bsize -= nbtouse;
3759         nbdone += nbtouse;
3760     }
3761 
3762     _Py_DECREF_INT(bslice);
3763     return long_normalize(ret);
3764 
3765   fail:
3766     Py_DECREF(ret);
3767     Py_XDECREF(bslice);
3768     return NULL;
3769 }
3770 
3771 PyObject *
_PyLong_Multiply(PyLongObject * a,PyLongObject * b)3772 _PyLong_Multiply(PyLongObject *a, PyLongObject *b)
3773 {
3774     PyLongObject *z;
3775 
3776     /* fast path for single-digit multiplication */
3777     if (IS_MEDIUM_VALUE(a) && IS_MEDIUM_VALUE(b)) {
3778         stwodigits v = medium_value(a) * medium_value(b);
3779         return _PyLong_FromSTwoDigits(v);
3780     }
3781 
3782     z = k_mul(a, b);
3783     /* Negate if exactly one of the inputs is negative. */
3784     if (((Py_SIZE(a) ^ Py_SIZE(b)) < 0) && z) {
3785         _PyLong_Negate(&z);
3786         if (z == NULL)
3787             return NULL;
3788     }
3789     return (PyObject *)z;
3790 }
3791 
3792 static PyObject *
long_mul(PyLongObject * a,PyLongObject * b)3793 long_mul(PyLongObject *a, PyLongObject *b)
3794 {
3795     CHECK_BINOP(a, b);
3796     return _PyLong_Multiply(a, b);
3797 }
3798 
3799 /* Fast modulo division for single-digit longs. */
3800 static PyObject *
fast_mod(PyLongObject * a,PyLongObject * b)3801 fast_mod(PyLongObject *a, PyLongObject *b)
3802 {
3803     sdigit left = a->ob_digit[0];
3804     sdigit right = b->ob_digit[0];
3805     sdigit mod;
3806 
3807     assert(Py_ABS(Py_SIZE(a)) == 1);
3808     assert(Py_ABS(Py_SIZE(b)) == 1);
3809 
3810     if (Py_SIZE(a) == Py_SIZE(b)) {
3811         /* 'a' and 'b' have the same sign. */
3812         mod = left % right;
3813     }
3814     else {
3815         /* Either 'a' or 'b' is negative. */
3816         mod = right - 1 - (left - 1) % right;
3817     }
3818 
3819     return PyLong_FromLong(mod * (sdigit)Py_SIZE(b));
3820 }
3821 
3822 /* Fast floor division for single-digit longs. */
3823 static PyObject *
fast_floor_div(PyLongObject * a,PyLongObject * b)3824 fast_floor_div(PyLongObject *a, PyLongObject *b)
3825 {
3826     sdigit left = a->ob_digit[0];
3827     sdigit right = b->ob_digit[0];
3828     sdigit div;
3829 
3830     assert(Py_ABS(Py_SIZE(a)) == 1);
3831     assert(Py_ABS(Py_SIZE(b)) == 1);
3832 
3833     if (Py_SIZE(a) == Py_SIZE(b)) {
3834         /* 'a' and 'b' have the same sign. */
3835         div = left / right;
3836     }
3837     else {
3838         /* Either 'a' or 'b' is negative. */
3839         div = -1 - (left - 1) / right;
3840     }
3841 
3842     return PyLong_FromLong(div);
3843 }
3844 
3845 /* The / and % operators are now defined in terms of divmod().
3846    The expression a mod b has the value a - b*floor(a/b).
3847    The long_divrem function gives the remainder after division of
3848    |a| by |b|, with the sign of a.  This is also expressed
3849    as a - b*trunc(a/b), if trunc truncates towards zero.
3850    Some examples:
3851      a           b      a rem b         a mod b
3852      13          10      3               3
3853     -13          10     -3               7
3854      13         -10      3              -7
3855     -13         -10     -3              -3
3856    So, to get from rem to mod, we have to add b if a and b
3857    have different signs.  We then subtract one from the 'div'
3858    part of the outcome to keep the invariant intact. */
3859 
3860 /* Compute
3861  *     *pdiv, *pmod = divmod(v, w)
3862  * NULL can be passed for pdiv or pmod, in which case that part of
3863  * the result is simply thrown away.  The caller owns a reference to
3864  * each of these it requests (does not pass NULL for).
3865  */
3866 static int
l_divmod(PyLongObject * v,PyLongObject * w,PyLongObject ** pdiv,PyLongObject ** pmod)3867 l_divmod(PyLongObject *v, PyLongObject *w,
3868          PyLongObject **pdiv, PyLongObject **pmod)
3869 {
3870     PyLongObject *div, *mod;
3871 
3872     if (Py_ABS(Py_SIZE(v)) == 1 && Py_ABS(Py_SIZE(w)) == 1) {
3873         /* Fast path for single-digit longs */
3874         div = NULL;
3875         if (pdiv != NULL) {
3876             div = (PyLongObject *)fast_floor_div(v, w);
3877             if (div == NULL) {
3878                 return -1;
3879             }
3880         }
3881         if (pmod != NULL) {
3882             mod = (PyLongObject *)fast_mod(v, w);
3883             if (mod == NULL) {
3884                 Py_XDECREF(div);
3885                 return -1;
3886             }
3887             *pmod = mod;
3888         }
3889         if (pdiv != NULL) {
3890             /* We only want to set `*pdiv` when `*pmod` is
3891                set successfully. */
3892             *pdiv = div;
3893         }
3894         return 0;
3895     }
3896     if (long_divrem(v, w, &div, &mod) < 0)
3897         return -1;
3898     if ((Py_SIZE(mod) < 0 && Py_SIZE(w) > 0) ||
3899         (Py_SIZE(mod) > 0 && Py_SIZE(w) < 0)) {
3900         PyLongObject *temp;
3901         temp = (PyLongObject *) long_add(mod, w);
3902         Py_DECREF(mod);
3903         mod = temp;
3904         if (mod == NULL) {
3905             Py_DECREF(div);
3906             return -1;
3907         }
3908         temp = (PyLongObject *) long_sub(div, (PyLongObject *)_PyLong_GetOne());
3909         if (temp == NULL) {
3910             Py_DECREF(mod);
3911             Py_DECREF(div);
3912             return -1;
3913         }
3914         Py_DECREF(div);
3915         div = temp;
3916     }
3917     if (pdiv != NULL)
3918         *pdiv = div;
3919     else
3920         Py_DECREF(div);
3921 
3922     if (pmod != NULL)
3923         *pmod = mod;
3924     else
3925         Py_DECREF(mod);
3926 
3927     return 0;
3928 }
3929 
3930 /* Compute
3931  *     *pmod = v % w
3932  * pmod cannot be NULL. The caller owns a reference to pmod.
3933  */
3934 static int
l_mod(PyLongObject * v,PyLongObject * w,PyLongObject ** pmod)3935 l_mod(PyLongObject *v, PyLongObject *w, PyLongObject **pmod)
3936 {
3937     PyLongObject *mod;
3938 
3939     assert(pmod);
3940     if (Py_ABS(Py_SIZE(v)) == 1 && Py_ABS(Py_SIZE(w)) == 1) {
3941         /* Fast path for single-digit longs */
3942         *pmod = (PyLongObject *)fast_mod(v, w);
3943         return -(*pmod == NULL);
3944     }
3945     if (long_rem(v, w, &mod) < 0)
3946         return -1;
3947     if ((Py_SIZE(mod) < 0 && Py_SIZE(w) > 0) ||
3948         (Py_SIZE(mod) > 0 && Py_SIZE(w) < 0)) {
3949         PyLongObject *temp;
3950         temp = (PyLongObject *) long_add(mod, w);
3951         Py_DECREF(mod);
3952         mod = temp;
3953         if (mod == NULL)
3954             return -1;
3955     }
3956     *pmod = mod;
3957 
3958     return 0;
3959 }
3960 
3961 static PyObject *
long_div(PyObject * a,PyObject * b)3962 long_div(PyObject *a, PyObject *b)
3963 {
3964     PyLongObject *div;
3965 
3966     CHECK_BINOP(a, b);
3967 
3968     if (Py_ABS(Py_SIZE(a)) == 1 && Py_ABS(Py_SIZE(b)) == 1) {
3969         return fast_floor_div((PyLongObject*)a, (PyLongObject*)b);
3970     }
3971 
3972     if (l_divmod((PyLongObject*)a, (PyLongObject*)b, &div, NULL) < 0)
3973         div = NULL;
3974     return (PyObject *)div;
3975 }
3976 
3977 /* PyLong/PyLong -> float, with correctly rounded result. */
3978 
3979 #define MANT_DIG_DIGITS (DBL_MANT_DIG / PyLong_SHIFT)
3980 #define MANT_DIG_BITS (DBL_MANT_DIG % PyLong_SHIFT)
3981 
3982 static PyObject *
long_true_divide(PyObject * v,PyObject * w)3983 long_true_divide(PyObject *v, PyObject *w)
3984 {
3985     PyLongObject *a, *b, *x;
3986     Py_ssize_t a_size, b_size, shift, extra_bits, diff, x_size, x_bits;
3987     digit mask, low;
3988     int inexact, negate, a_is_small, b_is_small;
3989     double dx, result;
3990 
3991     CHECK_BINOP(v, w);
3992     a = (PyLongObject *)v;
3993     b = (PyLongObject *)w;
3994 
3995     /*
3996        Method in a nutshell:
3997 
3998          0. reduce to case a, b > 0; filter out obvious underflow/overflow
3999          1. choose a suitable integer 'shift'
4000          2. use integer arithmetic to compute x = floor(2**-shift*a/b)
4001          3. adjust x for correct rounding
4002          4. convert x to a double dx with the same value
4003          5. return ldexp(dx, shift).
4004 
4005        In more detail:
4006 
4007        0. For any a, a/0 raises ZeroDivisionError; for nonzero b, 0/b
4008        returns either 0.0 or -0.0, depending on the sign of b.  For a and
4009        b both nonzero, ignore signs of a and b, and add the sign back in
4010        at the end.  Now write a_bits and b_bits for the bit lengths of a
4011        and b respectively (that is, a_bits = 1 + floor(log_2(a)); likewise
4012        for b).  Then
4013 
4014           2**(a_bits - b_bits - 1) < a/b < 2**(a_bits - b_bits + 1).
4015 
4016        So if a_bits - b_bits > DBL_MAX_EXP then a/b > 2**DBL_MAX_EXP and
4017        so overflows.  Similarly, if a_bits - b_bits < DBL_MIN_EXP -
4018        DBL_MANT_DIG - 1 then a/b underflows to 0.  With these cases out of
4019        the way, we can assume that
4020 
4021           DBL_MIN_EXP - DBL_MANT_DIG - 1 <= a_bits - b_bits <= DBL_MAX_EXP.
4022 
4023        1. The integer 'shift' is chosen so that x has the right number of
4024        bits for a double, plus two or three extra bits that will be used
4025        in the rounding decisions.  Writing a_bits and b_bits for the
4026        number of significant bits in a and b respectively, a
4027        straightforward formula for shift is:
4028 
4029           shift = a_bits - b_bits - DBL_MANT_DIG - 2
4030 
4031        This is fine in the usual case, but if a/b is smaller than the
4032        smallest normal float then it can lead to double rounding on an
4033        IEEE 754 platform, giving incorrectly rounded results.  So we
4034        adjust the formula slightly.  The actual formula used is:
4035 
4036            shift = MAX(a_bits - b_bits, DBL_MIN_EXP) - DBL_MANT_DIG - 2
4037 
4038        2. The quantity x is computed by first shifting a (left -shift bits
4039        if shift <= 0, right shift bits if shift > 0) and then dividing by
4040        b.  For both the shift and the division, we keep track of whether
4041        the result is inexact, in a flag 'inexact'; this information is
4042        needed at the rounding stage.
4043 
4044        With the choice of shift above, together with our assumption that
4045        a_bits - b_bits >= DBL_MIN_EXP - DBL_MANT_DIG - 1, it follows
4046        that x >= 1.
4047 
4048        3. Now x * 2**shift <= a/b < (x+1) * 2**shift.  We want to replace
4049        this with an exactly representable float of the form
4050 
4051           round(x/2**extra_bits) * 2**(extra_bits+shift).
4052 
4053        For float representability, we need x/2**extra_bits <
4054        2**DBL_MANT_DIG and extra_bits + shift >= DBL_MIN_EXP -
4055        DBL_MANT_DIG.  This translates to the condition:
4056 
4057           extra_bits >= MAX(x_bits, DBL_MIN_EXP - shift) - DBL_MANT_DIG
4058 
4059        To round, we just modify the bottom digit of x in-place; this can
4060        end up giving a digit with value > PyLONG_MASK, but that's not a
4061        problem since digits can hold values up to 2*PyLONG_MASK+1.
4062 
4063        With the original choices for shift above, extra_bits will always
4064        be 2 or 3.  Then rounding under the round-half-to-even rule, we
4065        round up iff the most significant of the extra bits is 1, and
4066        either: (a) the computation of x in step 2 had an inexact result,
4067        or (b) at least one other of the extra bits is 1, or (c) the least
4068        significant bit of x (above those to be rounded) is 1.
4069 
4070        4. Conversion to a double is straightforward; all floating-point
4071        operations involved in the conversion are exact, so there's no
4072        danger of rounding errors.
4073 
4074        5. Use ldexp(x, shift) to compute x*2**shift, the final result.
4075        The result will always be exactly representable as a double, except
4076        in the case that it overflows.  To avoid dependence on the exact
4077        behaviour of ldexp on overflow, we check for overflow before
4078        applying ldexp.  The result of ldexp is adjusted for sign before
4079        returning.
4080     */
4081 
4082     /* Reduce to case where a and b are both positive. */
4083     a_size = Py_ABS(Py_SIZE(a));
4084     b_size = Py_ABS(Py_SIZE(b));
4085     negate = (Py_SIZE(a) < 0) ^ (Py_SIZE(b) < 0);
4086     if (b_size == 0) {
4087         PyErr_SetString(PyExc_ZeroDivisionError,
4088                         "division by zero");
4089         goto error;
4090     }
4091     if (a_size == 0)
4092         goto underflow_or_zero;
4093 
4094     /* Fast path for a and b small (exactly representable in a double).
4095        Relies on floating-point division being correctly rounded; results
4096        may be subject to double rounding on x86 machines that operate with
4097        the x87 FPU set to 64-bit precision. */
4098     a_is_small = a_size <= MANT_DIG_DIGITS ||
4099         (a_size == MANT_DIG_DIGITS+1 &&
4100          a->ob_digit[MANT_DIG_DIGITS] >> MANT_DIG_BITS == 0);
4101     b_is_small = b_size <= MANT_DIG_DIGITS ||
4102         (b_size == MANT_DIG_DIGITS+1 &&
4103          b->ob_digit[MANT_DIG_DIGITS] >> MANT_DIG_BITS == 0);
4104     if (a_is_small && b_is_small) {
4105         double da, db;
4106         da = a->ob_digit[--a_size];
4107         while (a_size > 0)
4108             da = da * PyLong_BASE + a->ob_digit[--a_size];
4109         db = b->ob_digit[--b_size];
4110         while (b_size > 0)
4111             db = db * PyLong_BASE + b->ob_digit[--b_size];
4112         result = da / db;
4113         goto success;
4114     }
4115 
4116     /* Catch obvious cases of underflow and overflow */
4117     diff = a_size - b_size;
4118     if (diff > PY_SSIZE_T_MAX/PyLong_SHIFT - 1)
4119         /* Extreme overflow */
4120         goto overflow;
4121     else if (diff < 1 - PY_SSIZE_T_MAX/PyLong_SHIFT)
4122         /* Extreme underflow */
4123         goto underflow_or_zero;
4124     /* Next line is now safe from overflowing a Py_ssize_t */
4125     diff = diff * PyLong_SHIFT + bit_length_digit(a->ob_digit[a_size - 1]) -
4126         bit_length_digit(b->ob_digit[b_size - 1]);
4127     /* Now diff = a_bits - b_bits. */
4128     if (diff > DBL_MAX_EXP)
4129         goto overflow;
4130     else if (diff < DBL_MIN_EXP - DBL_MANT_DIG - 1)
4131         goto underflow_or_zero;
4132 
4133     /* Choose value for shift; see comments for step 1 above. */
4134     shift = Py_MAX(diff, DBL_MIN_EXP) - DBL_MANT_DIG - 2;
4135 
4136     inexact = 0;
4137 
4138     /* x = abs(a * 2**-shift) */
4139     if (shift <= 0) {
4140         Py_ssize_t i, shift_digits = -shift / PyLong_SHIFT;
4141         digit rem;
4142         /* x = a << -shift */
4143         if (a_size >= PY_SSIZE_T_MAX - 1 - shift_digits) {
4144             /* In practice, it's probably impossible to end up
4145                here.  Both a and b would have to be enormous,
4146                using close to SIZE_T_MAX bytes of memory each. */
4147             PyErr_SetString(PyExc_OverflowError,
4148                             "intermediate overflow during division");
4149             goto error;
4150         }
4151         x = _PyLong_New(a_size + shift_digits + 1);
4152         if (x == NULL)
4153             goto error;
4154         for (i = 0; i < shift_digits; i++)
4155             x->ob_digit[i] = 0;
4156         rem = v_lshift(x->ob_digit + shift_digits, a->ob_digit,
4157                        a_size, -shift % PyLong_SHIFT);
4158         x->ob_digit[a_size + shift_digits] = rem;
4159     }
4160     else {
4161         Py_ssize_t shift_digits = shift / PyLong_SHIFT;
4162         digit rem;
4163         /* x = a >> shift */
4164         assert(a_size >= shift_digits);
4165         x = _PyLong_New(a_size - shift_digits);
4166         if (x == NULL)
4167             goto error;
4168         rem = v_rshift(x->ob_digit, a->ob_digit + shift_digits,
4169                        a_size - shift_digits, shift % PyLong_SHIFT);
4170         /* set inexact if any of the bits shifted out is nonzero */
4171         if (rem)
4172             inexact = 1;
4173         while (!inexact && shift_digits > 0)
4174             if (a->ob_digit[--shift_digits])
4175                 inexact = 1;
4176     }
4177     long_normalize(x);
4178     x_size = Py_SIZE(x);
4179 
4180     /* x //= b. If the remainder is nonzero, set inexact.  We own the only
4181        reference to x, so it's safe to modify it in-place. */
4182     if (b_size == 1) {
4183         digit rem = inplace_divrem1(x->ob_digit, x->ob_digit, x_size,
4184                               b->ob_digit[0]);
4185         long_normalize(x);
4186         if (rem)
4187             inexact = 1;
4188     }
4189     else {
4190         PyLongObject *div, *rem;
4191         div = x_divrem(x, b, &rem);
4192         Py_DECREF(x);
4193         x = div;
4194         if (x == NULL)
4195             goto error;
4196         if (Py_SIZE(rem))
4197             inexact = 1;
4198         Py_DECREF(rem);
4199     }
4200     x_size = Py_ABS(Py_SIZE(x));
4201     assert(x_size > 0); /* result of division is never zero */
4202     x_bits = (x_size-1)*PyLong_SHIFT+bit_length_digit(x->ob_digit[x_size-1]);
4203 
4204     /* The number of extra bits that have to be rounded away. */
4205     extra_bits = Py_MAX(x_bits, DBL_MIN_EXP - shift) - DBL_MANT_DIG;
4206     assert(extra_bits == 2 || extra_bits == 3);
4207 
4208     /* Round by directly modifying the low digit of x. */
4209     mask = (digit)1 << (extra_bits - 1);
4210     low = x->ob_digit[0] | inexact;
4211     if ((low & mask) && (low & (3U*mask-1U)))
4212         low += mask;
4213     x->ob_digit[0] = low & ~(2U*mask-1U);
4214 
4215     /* Convert x to a double dx; the conversion is exact. */
4216     dx = x->ob_digit[--x_size];
4217     while (x_size > 0)
4218         dx = dx * PyLong_BASE + x->ob_digit[--x_size];
4219     Py_DECREF(x);
4220 
4221     /* Check whether ldexp result will overflow a double. */
4222     if (shift + x_bits >= DBL_MAX_EXP &&
4223         (shift + x_bits > DBL_MAX_EXP || dx == ldexp(1.0, (int)x_bits)))
4224         goto overflow;
4225     result = ldexp(dx, (int)shift);
4226 
4227   success:
4228     return PyFloat_FromDouble(negate ? -result : result);
4229 
4230   underflow_or_zero:
4231     return PyFloat_FromDouble(negate ? -0.0 : 0.0);
4232 
4233   overflow:
4234     PyErr_SetString(PyExc_OverflowError,
4235                     "integer division result too large for a float");
4236   error:
4237     return NULL;
4238 }
4239 
4240 static PyObject *
long_mod(PyObject * a,PyObject * b)4241 long_mod(PyObject *a, PyObject *b)
4242 {
4243     PyLongObject *mod;
4244 
4245     CHECK_BINOP(a, b);
4246 
4247     if (l_mod((PyLongObject*)a, (PyLongObject*)b, &mod) < 0)
4248         mod = NULL;
4249     return (PyObject *)mod;
4250 }
4251 
4252 static PyObject *
long_divmod(PyObject * a,PyObject * b)4253 long_divmod(PyObject *a, PyObject *b)
4254 {
4255     PyLongObject *div, *mod;
4256     PyObject *z;
4257 
4258     CHECK_BINOP(a, b);
4259 
4260     if (l_divmod((PyLongObject*)a, (PyLongObject*)b, &div, &mod) < 0) {
4261         return NULL;
4262     }
4263     z = PyTuple_New(2);
4264     if (z != NULL) {
4265         PyTuple_SET_ITEM(z, 0, (PyObject *) div);
4266         PyTuple_SET_ITEM(z, 1, (PyObject *) mod);
4267     }
4268     else {
4269         Py_DECREF(div);
4270         Py_DECREF(mod);
4271     }
4272     return z;
4273 }
4274 
4275 
4276 /* Compute an inverse to a modulo n, or raise ValueError if a is not
4277    invertible modulo n. Assumes n is positive. The inverse returned
4278    is whatever falls out of the extended Euclidean algorithm: it may
4279    be either positive or negative, but will be smaller than n in
4280    absolute value.
4281 
4282    Pure Python equivalent for long_invmod:
4283 
4284         def invmod(a, n):
4285             b, c = 1, 0
4286             while n:
4287                 q, r = divmod(a, n)
4288                 a, b, c, n = n, c, b - q*c, r
4289 
4290             # at this point a is the gcd of the original inputs
4291             if a == 1:
4292                 return b
4293             raise ValueError("Not invertible")
4294 */
4295 
4296 static PyLongObject *
long_invmod(PyLongObject * a,PyLongObject * n)4297 long_invmod(PyLongObject *a, PyLongObject *n)
4298 {
4299     PyLongObject *b, *c;
4300 
4301     /* Should only ever be called for positive n */
4302     assert(Py_SIZE(n) > 0);
4303 
4304     b = (PyLongObject *)PyLong_FromLong(1L);
4305     if (b == NULL) {
4306         return NULL;
4307     }
4308     c = (PyLongObject *)PyLong_FromLong(0L);
4309     if (c == NULL) {
4310         Py_DECREF(b);
4311         return NULL;
4312     }
4313     Py_INCREF(a);
4314     Py_INCREF(n);
4315 
4316     /* references now owned: a, b, c, n */
4317     while (Py_SIZE(n) != 0) {
4318         PyLongObject *q, *r, *s, *t;
4319 
4320         if (l_divmod(a, n, &q, &r) == -1) {
4321             goto Error;
4322         }
4323         Py_DECREF(a);
4324         a = n;
4325         n = r;
4326         t = (PyLongObject *)long_mul(q, c);
4327         Py_DECREF(q);
4328         if (t == NULL) {
4329             goto Error;
4330         }
4331         s = (PyLongObject *)long_sub(b, t);
4332         Py_DECREF(t);
4333         if (s == NULL) {
4334             goto Error;
4335         }
4336         Py_DECREF(b);
4337         b = c;
4338         c = s;
4339     }
4340     /* references now owned: a, b, c, n */
4341 
4342     Py_DECREF(c);
4343     Py_DECREF(n);
4344     if (long_compare(a, (PyLongObject *)_PyLong_GetOne())) {
4345         /* a != 1; we don't have an inverse. */
4346         Py_DECREF(a);
4347         Py_DECREF(b);
4348         PyErr_SetString(PyExc_ValueError,
4349                         "base is not invertible for the given modulus");
4350         return NULL;
4351     }
4352     else {
4353         /* a == 1; b gives an inverse modulo n */
4354         Py_DECREF(a);
4355         return b;
4356     }
4357 
4358   Error:
4359     Py_DECREF(a);
4360     Py_DECREF(b);
4361     Py_DECREF(c);
4362     Py_DECREF(n);
4363     return NULL;
4364 }
4365 
4366 
4367 /* pow(v, w, x) */
4368 static PyObject *
long_pow(PyObject * v,PyObject * w,PyObject * x)4369 long_pow(PyObject *v, PyObject *w, PyObject *x)
4370 {
4371     PyLongObject *a, *b, *c; /* a,b,c = v,w,x */
4372     int negativeOutput = 0;  /* if x<0 return negative output */
4373 
4374     PyLongObject *z = NULL;  /* accumulated result */
4375     Py_ssize_t i, j;             /* counters */
4376     PyLongObject *temp = NULL;
4377     PyLongObject *a2 = NULL; /* may temporarily hold a**2 % c */
4378 
4379     /* k-ary values.  If the exponent is large enough, table is
4380      * precomputed so that table[i] == a**(2*i+1) % c for i in
4381      * range(EXP_TABLE_LEN).
4382      * Note: this is uninitialzed stack trash: don't pay to set it to known
4383      * values unless it's needed. Instead ensure that num_table_entries is
4384      * set to the number of entries actually filled whenever a branch to the
4385      * Error or Done labels is possible.
4386      */
4387     PyLongObject *table[EXP_TABLE_LEN];
4388     Py_ssize_t num_table_entries = 0;
4389 
4390     /* a, b, c = v, w, x */
4391     CHECK_BINOP(v, w);
4392     a = (PyLongObject*)v; Py_INCREF(a);
4393     b = (PyLongObject*)w; Py_INCREF(b);
4394     if (PyLong_Check(x)) {
4395         c = (PyLongObject *)x;
4396         Py_INCREF(x);
4397     }
4398     else if (x == Py_None)
4399         c = NULL;
4400     else {
4401         Py_DECREF(a);
4402         Py_DECREF(b);
4403         Py_RETURN_NOTIMPLEMENTED;
4404     }
4405 
4406     if (Py_SIZE(b) < 0 && c == NULL) {
4407         /* if exponent is negative and there's no modulus:
4408                return a float.  This works because we know
4409                that this calls float_pow() which converts its
4410                arguments to double. */
4411         Py_DECREF(a);
4412         Py_DECREF(b);
4413         return PyFloat_Type.tp_as_number->nb_power(v, w, x);
4414     }
4415 
4416     if (c) {
4417         /* if modulus == 0:
4418                raise ValueError() */
4419         if (Py_SIZE(c) == 0) {
4420             PyErr_SetString(PyExc_ValueError,
4421                             "pow() 3rd argument cannot be 0");
4422             goto Error;
4423         }
4424 
4425         /* if modulus < 0:
4426                negativeOutput = True
4427                modulus = -modulus */
4428         if (Py_SIZE(c) < 0) {
4429             negativeOutput = 1;
4430             temp = (PyLongObject *)_PyLong_Copy(c);
4431             if (temp == NULL)
4432                 goto Error;
4433             Py_DECREF(c);
4434             c = temp;
4435             temp = NULL;
4436             _PyLong_Negate(&c);
4437             if (c == NULL)
4438                 goto Error;
4439         }
4440 
4441         /* if modulus == 1:
4442                return 0 */
4443         if ((Py_SIZE(c) == 1) && (c->ob_digit[0] == 1)) {
4444             z = (PyLongObject *)PyLong_FromLong(0L);
4445             goto Done;
4446         }
4447 
4448         /* if exponent is negative, negate the exponent and
4449            replace the base with a modular inverse */
4450         if (Py_SIZE(b) < 0) {
4451             temp = (PyLongObject *)_PyLong_Copy(b);
4452             if (temp == NULL)
4453                 goto Error;
4454             Py_DECREF(b);
4455             b = temp;
4456             temp = NULL;
4457             _PyLong_Negate(&b);
4458             if (b == NULL)
4459                 goto Error;
4460 
4461             temp = long_invmod(a, c);
4462             if (temp == NULL)
4463                 goto Error;
4464             Py_DECREF(a);
4465             a = temp;
4466             temp = NULL;
4467         }
4468 
4469         /* Reduce base by modulus in some cases:
4470            1. If base < 0.  Forcing the base non-negative makes things easier.
4471            2. If base is obviously larger than the modulus.  The "small
4472               exponent" case later can multiply directly by base repeatedly,
4473               while the "large exponent" case multiplies directly by base 31
4474               times.  It can be unboundedly faster to multiply by
4475               base % modulus instead.
4476            We could _always_ do this reduction, but l_mod() isn't cheap,
4477            so we only do it when it buys something. */
4478         if (Py_SIZE(a) < 0 || Py_SIZE(a) > Py_SIZE(c)) {
4479             if (l_mod(a, c, &temp) < 0)
4480                 goto Error;
4481             Py_DECREF(a);
4482             a = temp;
4483             temp = NULL;
4484         }
4485     }
4486 
4487     /* At this point a, b, and c are guaranteed non-negative UNLESS
4488        c is NULL, in which case a may be negative. */
4489 
4490     z = (PyLongObject *)PyLong_FromLong(1L);
4491     if (z == NULL)
4492         goto Error;
4493 
4494     /* Perform a modular reduction, X = X % c, but leave X alone if c
4495      * is NULL.
4496      */
4497 #define REDUCE(X)                                       \
4498     do {                                                \
4499         if (c != NULL) {                                \
4500             if (l_mod(X, c, &temp) < 0)                 \
4501                 goto Error;                             \
4502             Py_XDECREF(X);                              \
4503             X = temp;                                   \
4504             temp = NULL;                                \
4505         }                                               \
4506     } while(0)
4507 
4508     /* Multiply two values, then reduce the result:
4509        result = X*Y % c.  If c is NULL, skip the mod. */
4510 #define MULT(X, Y, result)                      \
4511     do {                                        \
4512         temp = (PyLongObject *)long_mul(X, Y);  \
4513         if (temp == NULL)                       \
4514             goto Error;                         \
4515         Py_XDECREF(result);                     \
4516         result = temp;                          \
4517         temp = NULL;                            \
4518         REDUCE(result);                         \
4519     } while(0)
4520 
4521     i = Py_SIZE(b);
4522     digit bi = i ? b->ob_digit[i-1] : 0;
4523     digit bit;
4524     if (i <= 1 && bi <= 3) {
4525         /* aim for minimal overhead */
4526         if (bi >= 2) {
4527             MULT(a, a, z);
4528             if (bi == 3) {
4529                 MULT(z, a, z);
4530             }
4531         }
4532         else if (bi == 1) {
4533             /* Multiplying by 1 serves two purposes: if `a` is of an int
4534              * subclass, makes the result an int (e.g., pow(False, 1) returns
4535              * 0 instead of False), and potentially reduces `a` by the modulus.
4536              */
4537             MULT(a, z, z);
4538         }
4539         /* else bi is 0, and z==1 is correct */
4540     }
4541     else if (i <= HUGE_EXP_CUTOFF / PyLong_SHIFT ) {
4542         /* Left-to-right binary exponentiation (HAC Algorithm 14.79) */
4543         /* http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf    */
4544 
4545         /* Find the first significant exponent bit. Search right to left
4546          * because we're primarily trying to cut overhead for small powers.
4547          */
4548         assert(bi);  /* else there is no significant bit */
4549         Py_INCREF(a);
4550         Py_DECREF(z);
4551         z = a;
4552         for (bit = 2; ; bit <<= 1) {
4553             if (bit > bi) { /* found the first bit */
4554                 assert((bi & bit) == 0);
4555                 bit >>= 1;
4556                 assert(bi & bit);
4557                 break;
4558             }
4559         }
4560         for (--i, bit >>= 1;;) {
4561             for (; bit != 0; bit >>= 1) {
4562                 MULT(z, z, z);
4563                 if (bi & bit) {
4564                     MULT(z, a, z);
4565                 }
4566             }
4567             if (--i < 0) {
4568                 break;
4569             }
4570             bi = b->ob_digit[i];
4571             bit = (digit)1 << (PyLong_SHIFT-1);
4572         }
4573     }
4574     else {
4575         /* Left-to-right k-ary sliding window exponentiation
4576          * (Handbook of Applied Cryptography (HAC) Algorithm 14.85)
4577          */
4578         Py_INCREF(a);
4579         table[0] = a;
4580         num_table_entries = 1;
4581         MULT(a, a, a2);
4582         /* table[i] == a**(2*i + 1) % c */
4583         for (i = 1; i < EXP_TABLE_LEN; ++i) {
4584             table[i] = NULL; /* must set to known value for MULT */
4585             MULT(table[i-1], a2, table[i]);
4586             ++num_table_entries; /* incremented iff MULT succeeded */
4587         }
4588         Py_CLEAR(a2);
4589 
4590         /* Repeatedly extract the next (no more than) EXP_WINDOW_SIZE bits
4591          * into `pending`, starting with the next 1 bit.  The current bit
4592          * length of `pending` is `blen`.
4593          */
4594         int pending = 0, blen = 0;
4595 #define ABSORB_PENDING  do { \
4596             int ntz = 0; /* number of trailing zeroes in `pending` */ \
4597             assert(pending && blen); \
4598             assert(pending >> (blen - 1)); \
4599             assert(pending >> blen == 0); \
4600             while ((pending & 1) == 0) { \
4601                 ++ntz; \
4602                 pending >>= 1; \
4603             } \
4604             assert(ntz < blen); \
4605             blen -= ntz; \
4606             do { \
4607                 MULT(z, z, z); \
4608             } while (--blen); \
4609             MULT(z, table[pending >> 1], z); \
4610             while (ntz-- > 0) \
4611                 MULT(z, z, z); \
4612             assert(blen == 0); \
4613             pending = 0; \
4614         } while(0)
4615 
4616         for (i = Py_SIZE(b) - 1; i >= 0; --i) {
4617             const digit bi = b->ob_digit[i];
4618             for (j = PyLong_SHIFT - 1; j >= 0; --j) {
4619                 const int bit = (bi >> j) & 1;
4620                 pending = (pending << 1) | bit;
4621                 if (pending) {
4622                     ++blen;
4623                     if (blen == EXP_WINDOW_SIZE)
4624                         ABSORB_PENDING;
4625                 }
4626                 else /* absorb strings of 0 bits */
4627                     MULT(z, z, z);
4628             }
4629         }
4630         if (pending)
4631             ABSORB_PENDING;
4632     }
4633 
4634     if (negativeOutput && (Py_SIZE(z) != 0)) {
4635         temp = (PyLongObject *)long_sub(z, c);
4636         if (temp == NULL)
4637             goto Error;
4638         Py_DECREF(z);
4639         z = temp;
4640         temp = NULL;
4641     }
4642     goto Done;
4643 
4644   Error:
4645     Py_CLEAR(z);
4646     /* fall through */
4647   Done:
4648     for (i = 0; i < num_table_entries; ++i)
4649         Py_DECREF(table[i]);
4650     Py_DECREF(a);
4651     Py_DECREF(b);
4652     Py_XDECREF(c);
4653     Py_XDECREF(a2);
4654     Py_XDECREF(temp);
4655     return (PyObject *)z;
4656 }
4657 
4658 static PyObject *
long_invert(PyLongObject * v)4659 long_invert(PyLongObject *v)
4660 {
4661     /* Implement ~x as -(x+1) */
4662     PyLongObject *x;
4663     if (IS_MEDIUM_VALUE(v))
4664         return _PyLong_FromSTwoDigits(~medium_value(v));
4665     x = (PyLongObject *) long_add(v, (PyLongObject *)_PyLong_GetOne());
4666     if (x == NULL)
4667         return NULL;
4668     _PyLong_Negate(&x);
4669     /* No need for maybe_small_long here, since any small
4670        longs will have been caught in the Py_SIZE <= 1 fast path. */
4671     return (PyObject *)x;
4672 }
4673 
4674 static PyObject *
long_neg(PyLongObject * v)4675 long_neg(PyLongObject *v)
4676 {
4677     PyLongObject *z;
4678     if (IS_MEDIUM_VALUE(v))
4679         return _PyLong_FromSTwoDigits(-medium_value(v));
4680     z = (PyLongObject *)_PyLong_Copy(v);
4681     if (z != NULL)
4682         Py_SET_SIZE(z, -(Py_SIZE(v)));
4683     return (PyObject *)z;
4684 }
4685 
4686 static PyObject *
long_abs(PyLongObject * v)4687 long_abs(PyLongObject *v)
4688 {
4689     if (Py_SIZE(v) < 0)
4690         return long_neg(v);
4691     else
4692         return long_long((PyObject *)v);
4693 }
4694 
4695 static int
long_bool(PyLongObject * v)4696 long_bool(PyLongObject *v)
4697 {
4698     return Py_SIZE(v) != 0;
4699 }
4700 
4701 /* wordshift, remshift = divmod(shiftby, PyLong_SHIFT) */
4702 static int
divmod_shift(PyObject * shiftby,Py_ssize_t * wordshift,digit * remshift)4703 divmod_shift(PyObject *shiftby, Py_ssize_t *wordshift, digit *remshift)
4704 {
4705     assert(PyLong_Check(shiftby));
4706     assert(Py_SIZE(shiftby) >= 0);
4707     Py_ssize_t lshiftby = PyLong_AsSsize_t((PyObject *)shiftby);
4708     if (lshiftby >= 0) {
4709         *wordshift = lshiftby / PyLong_SHIFT;
4710         *remshift = lshiftby % PyLong_SHIFT;
4711         return 0;
4712     }
4713     /* PyLong_Check(shiftby) is true and Py_SIZE(shiftby) >= 0, so it must
4714        be that PyLong_AsSsize_t raised an OverflowError. */
4715     assert(PyErr_ExceptionMatches(PyExc_OverflowError));
4716     PyErr_Clear();
4717     PyLongObject *wordshift_obj = divrem1((PyLongObject *)shiftby, PyLong_SHIFT, remshift);
4718     if (wordshift_obj == NULL) {
4719         return -1;
4720     }
4721     *wordshift = PyLong_AsSsize_t((PyObject *)wordshift_obj);
4722     Py_DECREF(wordshift_obj);
4723     if (*wordshift >= 0 && *wordshift < PY_SSIZE_T_MAX / (Py_ssize_t)sizeof(digit)) {
4724         return 0;
4725     }
4726     PyErr_Clear();
4727     /* Clip the value.  With such large wordshift the right shift
4728        returns 0 and the left shift raises an error in _PyLong_New(). */
4729     *wordshift = PY_SSIZE_T_MAX / sizeof(digit);
4730     *remshift = 0;
4731     return 0;
4732 }
4733 
4734 /* Inner function for both long_rshift and _PyLong_Rshift, shifting an
4735    integer right by PyLong_SHIFT*wordshift + remshift bits.
4736    wordshift should be nonnegative. */
4737 
4738 static PyObject *
long_rshift1(PyLongObject * a,Py_ssize_t wordshift,digit remshift)4739 long_rshift1(PyLongObject *a, Py_ssize_t wordshift, digit remshift)
4740 {
4741     PyLongObject *z = NULL;
4742     Py_ssize_t newsize, hishift, size_a;
4743     twodigits accum;
4744     int a_negative;
4745 
4746     /* Total number of bits shifted must be nonnegative. */
4747     assert(wordshift >= 0);
4748     assert(remshift < PyLong_SHIFT);
4749 
4750     /* Fast path for small a. */
4751     if (IS_MEDIUM_VALUE(a)) {
4752         stwodigits m, x;
4753         digit shift;
4754         m = medium_value(a);
4755         shift = wordshift == 0 ? remshift : PyLong_SHIFT;
4756         x = m < 0 ? ~(~m >> shift) : m >> shift;
4757         return _PyLong_FromSTwoDigits(x);
4758     }
4759 
4760     a_negative = Py_SIZE(a) < 0;
4761     size_a = Py_ABS(Py_SIZE(a));
4762 
4763     if (a_negative) {
4764         /* For negative 'a', adjust so that 0 < remshift <= PyLong_SHIFT,
4765            while keeping PyLong_SHIFT*wordshift + remshift the same. This
4766            ensures that 'newsize' is computed correctly below. */
4767         if (remshift == 0) {
4768             if (wordshift == 0) {
4769                 /* Can only happen if the original shift was 0. */
4770                 return long_long((PyObject *)a);
4771             }
4772             remshift = PyLong_SHIFT;
4773             --wordshift;
4774         }
4775     }
4776 
4777     assert(wordshift >= 0);
4778     newsize = size_a - wordshift;
4779     if (newsize <= 0) {
4780         /* Shifting all the bits of 'a' out gives either -1 or 0. */
4781         return PyLong_FromLong(-a_negative);
4782     }
4783     z = _PyLong_New(newsize);
4784     if (z == NULL) {
4785         return NULL;
4786     }
4787     hishift = PyLong_SHIFT - remshift;
4788 
4789     accum = a->ob_digit[wordshift];
4790     if (a_negative) {
4791         /*
4792             For a positive integer a and nonnegative shift, we have:
4793 
4794                 (-a) >> shift == -((a + 2**shift - 1) >> shift).
4795 
4796             In the addition `a + (2**shift - 1)`, the low `wordshift` digits of
4797             `2**shift - 1` all have value `PyLong_MASK`, so we get a carry out
4798             from the bottom `wordshift` digits when at least one of the least
4799             significant `wordshift` digits of `a` is nonzero. Digit `wordshift`
4800             of `2**shift - 1` has value `PyLong_MASK >> hishift`.
4801         */
4802         Py_SET_SIZE(z, -newsize);
4803 
4804         digit sticky = 0;
4805         for (Py_ssize_t j = 0; j < wordshift; j++) {
4806             sticky |= a->ob_digit[j];
4807         }
4808         accum += (PyLong_MASK >> hishift) + (digit)(sticky != 0);
4809     }
4810 
4811     accum >>= remshift;
4812     for (Py_ssize_t i = 0, j = wordshift + 1; j < size_a; i++, j++) {
4813         accum += (twodigits)a->ob_digit[j] << hishift;
4814         z->ob_digit[i] = (digit)(accum & PyLong_MASK);
4815         accum >>= PyLong_SHIFT;
4816     }
4817     assert(accum <= PyLong_MASK);
4818     z->ob_digit[newsize - 1] = (digit)accum;
4819 
4820     z = maybe_small_long(long_normalize(z));
4821     return (PyObject *)z;
4822 }
4823 
4824 static PyObject *
long_rshift(PyObject * a,PyObject * b)4825 long_rshift(PyObject *a, PyObject *b)
4826 {
4827     Py_ssize_t wordshift;
4828     digit remshift;
4829 
4830     CHECK_BINOP(a, b);
4831 
4832     if (Py_SIZE(b) < 0) {
4833         PyErr_SetString(PyExc_ValueError, "negative shift count");
4834         return NULL;
4835     }
4836     if (Py_SIZE(a) == 0) {
4837         return PyLong_FromLong(0);
4838     }
4839     if (divmod_shift(b, &wordshift, &remshift) < 0)
4840         return NULL;
4841     return long_rshift1((PyLongObject *)a, wordshift, remshift);
4842 }
4843 
4844 /* Return a >> shiftby. */
4845 PyObject *
_PyLong_Rshift(PyObject * a,size_t shiftby)4846 _PyLong_Rshift(PyObject *a, size_t shiftby)
4847 {
4848     Py_ssize_t wordshift;
4849     digit remshift;
4850 
4851     assert(PyLong_Check(a));
4852     if (Py_SIZE(a) == 0) {
4853         return PyLong_FromLong(0);
4854     }
4855     wordshift = shiftby / PyLong_SHIFT;
4856     remshift = shiftby % PyLong_SHIFT;
4857     return long_rshift1((PyLongObject *)a, wordshift, remshift);
4858 }
4859 
4860 static PyObject *
long_lshift1(PyLongObject * a,Py_ssize_t wordshift,digit remshift)4861 long_lshift1(PyLongObject *a, Py_ssize_t wordshift, digit remshift)
4862 {
4863     PyLongObject *z = NULL;
4864     Py_ssize_t oldsize, newsize, i, j;
4865     twodigits accum;
4866 
4867     if (wordshift == 0 && IS_MEDIUM_VALUE(a)) {
4868         stwodigits m = medium_value(a);
4869         // bypass undefined shift operator behavior
4870         stwodigits x = m < 0 ? -(-m << remshift) : m << remshift;
4871         return _PyLong_FromSTwoDigits(x);
4872     }
4873 
4874     oldsize = Py_ABS(Py_SIZE(a));
4875     newsize = oldsize + wordshift;
4876     if (remshift)
4877         ++newsize;
4878     z = _PyLong_New(newsize);
4879     if (z == NULL)
4880         return NULL;
4881     if (Py_SIZE(a) < 0) {
4882         assert(Py_REFCNT(z) == 1);
4883         Py_SET_SIZE(z, -Py_SIZE(z));
4884     }
4885     for (i = 0; i < wordshift; i++)
4886         z->ob_digit[i] = 0;
4887     accum = 0;
4888     for (i = wordshift, j = 0; j < oldsize; i++, j++) {
4889         accum |= (twodigits)a->ob_digit[j] << remshift;
4890         z->ob_digit[i] = (digit)(accum & PyLong_MASK);
4891         accum >>= PyLong_SHIFT;
4892     }
4893     if (remshift)
4894         z->ob_digit[newsize-1] = (digit)accum;
4895     else
4896         assert(!accum);
4897     z = long_normalize(z);
4898     return (PyObject *) maybe_small_long(z);
4899 }
4900 
4901 static PyObject *
long_lshift(PyObject * a,PyObject * b)4902 long_lshift(PyObject *a, PyObject *b)
4903 {
4904     Py_ssize_t wordshift;
4905     digit remshift;
4906 
4907     CHECK_BINOP(a, b);
4908 
4909     if (Py_SIZE(b) < 0) {
4910         PyErr_SetString(PyExc_ValueError, "negative shift count");
4911         return NULL;
4912     }
4913     if (Py_SIZE(a) == 0) {
4914         return PyLong_FromLong(0);
4915     }
4916     if (divmod_shift(b, &wordshift, &remshift) < 0)
4917         return NULL;
4918     return long_lshift1((PyLongObject *)a, wordshift, remshift);
4919 }
4920 
4921 /* Return a << shiftby. */
4922 PyObject *
_PyLong_Lshift(PyObject * a,size_t shiftby)4923 _PyLong_Lshift(PyObject *a, size_t shiftby)
4924 {
4925     Py_ssize_t wordshift;
4926     digit remshift;
4927 
4928     assert(PyLong_Check(a));
4929     if (Py_SIZE(a) == 0) {
4930         return PyLong_FromLong(0);
4931     }
4932     wordshift = shiftby / PyLong_SHIFT;
4933     remshift = shiftby % PyLong_SHIFT;
4934     return long_lshift1((PyLongObject *)a, wordshift, remshift);
4935 }
4936 
4937 /* Compute two's complement of digit vector a[0:m], writing result to
4938    z[0:m].  The digit vector a need not be normalized, but should not
4939    be entirely zero.  a and z may point to the same digit vector. */
4940 
4941 static void
v_complement(digit * z,digit * a,Py_ssize_t m)4942 v_complement(digit *z, digit *a, Py_ssize_t m)
4943 {
4944     Py_ssize_t i;
4945     digit carry = 1;
4946     for (i = 0; i < m; ++i) {
4947         carry += a[i] ^ PyLong_MASK;
4948         z[i] = carry & PyLong_MASK;
4949         carry >>= PyLong_SHIFT;
4950     }
4951     assert(carry == 0);
4952 }
4953 
4954 /* Bitwise and/xor/or operations */
4955 
4956 static PyObject *
long_bitwise(PyLongObject * a,char op,PyLongObject * b)4957 long_bitwise(PyLongObject *a,
4958              char op,  /* '&', '|', '^' */
4959              PyLongObject *b)
4960 {
4961     int nega, negb, negz;
4962     Py_ssize_t size_a, size_b, size_z, i;
4963     PyLongObject *z;
4964 
4965     /* Bitwise operations for negative numbers operate as though
4966        on a two's complement representation.  So convert arguments
4967        from sign-magnitude to two's complement, and convert the
4968        result back to sign-magnitude at the end. */
4969 
4970     /* If a is negative, replace it by its two's complement. */
4971     size_a = Py_ABS(Py_SIZE(a));
4972     nega = Py_SIZE(a) < 0;
4973     if (nega) {
4974         z = _PyLong_New(size_a);
4975         if (z == NULL)
4976             return NULL;
4977         v_complement(z->ob_digit, a->ob_digit, size_a);
4978         a = z;
4979     }
4980     else
4981         /* Keep reference count consistent. */
4982         Py_INCREF(a);
4983 
4984     /* Same for b. */
4985     size_b = Py_ABS(Py_SIZE(b));
4986     negb = Py_SIZE(b) < 0;
4987     if (negb) {
4988         z = _PyLong_New(size_b);
4989         if (z == NULL) {
4990             Py_DECREF(a);
4991             return NULL;
4992         }
4993         v_complement(z->ob_digit, b->ob_digit, size_b);
4994         b = z;
4995     }
4996     else
4997         Py_INCREF(b);
4998 
4999     /* Swap a and b if necessary to ensure size_a >= size_b. */
5000     if (size_a < size_b) {
5001         z = a; a = b; b = z;
5002         size_z = size_a; size_a = size_b; size_b = size_z;
5003         negz = nega; nega = negb; negb = negz;
5004     }
5005 
5006     /* JRH: The original logic here was to allocate the result value (z)
5007        as the longer of the two operands.  However, there are some cases
5008        where the result is guaranteed to be shorter than that: AND of two
5009        positives, OR of two negatives: use the shorter number.  AND with
5010        mixed signs: use the positive number.  OR with mixed signs: use the
5011        negative number.
5012     */
5013     switch (op) {
5014     case '^':
5015         negz = nega ^ negb;
5016         size_z = size_a;
5017         break;
5018     case '&':
5019         negz = nega & negb;
5020         size_z = negb ? size_a : size_b;
5021         break;
5022     case '|':
5023         negz = nega | negb;
5024         size_z = negb ? size_b : size_a;
5025         break;
5026     default:
5027         Py_UNREACHABLE();
5028     }
5029 
5030     /* We allow an extra digit if z is negative, to make sure that
5031        the final two's complement of z doesn't overflow. */
5032     z = _PyLong_New(size_z + negz);
5033     if (z == NULL) {
5034         Py_DECREF(a);
5035         Py_DECREF(b);
5036         return NULL;
5037     }
5038 
5039     /* Compute digits for overlap of a and b. */
5040     switch(op) {
5041     case '&':
5042         for (i = 0; i < size_b; ++i)
5043             z->ob_digit[i] = a->ob_digit[i] & b->ob_digit[i];
5044         break;
5045     case '|':
5046         for (i = 0; i < size_b; ++i)
5047             z->ob_digit[i] = a->ob_digit[i] | b->ob_digit[i];
5048         break;
5049     case '^':
5050         for (i = 0; i < size_b; ++i)
5051             z->ob_digit[i] = a->ob_digit[i] ^ b->ob_digit[i];
5052         break;
5053     default:
5054         Py_UNREACHABLE();
5055     }
5056 
5057     /* Copy any remaining digits of a, inverting if necessary. */
5058     if (op == '^' && negb)
5059         for (; i < size_z; ++i)
5060             z->ob_digit[i] = a->ob_digit[i] ^ PyLong_MASK;
5061     else if (i < size_z)
5062         memcpy(&z->ob_digit[i], &a->ob_digit[i],
5063                (size_z-i)*sizeof(digit));
5064 
5065     /* Complement result if negative. */
5066     if (negz) {
5067         Py_SET_SIZE(z, -(Py_SIZE(z)));
5068         z->ob_digit[size_z] = PyLong_MASK;
5069         v_complement(z->ob_digit, z->ob_digit, size_z+1);
5070     }
5071 
5072     Py_DECREF(a);
5073     Py_DECREF(b);
5074     return (PyObject *)maybe_small_long(long_normalize(z));
5075 }
5076 
5077 static PyObject *
long_and(PyObject * a,PyObject * b)5078 long_and(PyObject *a, PyObject *b)
5079 {
5080     CHECK_BINOP(a, b);
5081     PyLongObject *x = (PyLongObject*)a;
5082     PyLongObject *y = (PyLongObject*)b;
5083     if (IS_MEDIUM_VALUE(x) && IS_MEDIUM_VALUE(y)) {
5084         return _PyLong_FromSTwoDigits(medium_value(x) & medium_value(y));
5085     }
5086     return long_bitwise(x, '&', y);
5087 }
5088 
5089 static PyObject *
long_xor(PyObject * a,PyObject * b)5090 long_xor(PyObject *a, PyObject *b)
5091 {
5092     CHECK_BINOP(a, b);
5093     PyLongObject *x = (PyLongObject*)a;
5094     PyLongObject *y = (PyLongObject*)b;
5095     if (IS_MEDIUM_VALUE(x) && IS_MEDIUM_VALUE(y)) {
5096         return _PyLong_FromSTwoDigits(medium_value(x) ^ medium_value(y));
5097     }
5098     return long_bitwise(x, '^', y);
5099 }
5100 
5101 static PyObject *
long_or(PyObject * a,PyObject * b)5102 long_or(PyObject *a, PyObject *b)
5103 {
5104     CHECK_BINOP(a, b);
5105     PyLongObject *x = (PyLongObject*)a;
5106     PyLongObject *y = (PyLongObject*)b;
5107     if (IS_MEDIUM_VALUE(x) && IS_MEDIUM_VALUE(y)) {
5108         return _PyLong_FromSTwoDigits(medium_value(x) | medium_value(y));
5109     }
5110     return long_bitwise(x, '|', y);
5111 }
5112 
5113 static PyObject *
long_long(PyObject * v)5114 long_long(PyObject *v)
5115 {
5116     if (PyLong_CheckExact(v))
5117         Py_INCREF(v);
5118     else
5119         v = _PyLong_Copy((PyLongObject *)v);
5120     return v;
5121 }
5122 
5123 PyObject *
_PyLong_GCD(PyObject * aarg,PyObject * barg)5124 _PyLong_GCD(PyObject *aarg, PyObject *barg)
5125 {
5126     PyLongObject *a, *b, *c = NULL, *d = NULL, *r;
5127     stwodigits x, y, q, s, t, c_carry, d_carry;
5128     stwodigits A, B, C, D, T;
5129     int nbits, k;
5130     Py_ssize_t size_a, size_b, alloc_a, alloc_b;
5131     digit *a_digit, *b_digit, *c_digit, *d_digit, *a_end, *b_end;
5132 
5133     a = (PyLongObject *)aarg;
5134     b = (PyLongObject *)barg;
5135     size_a = Py_SIZE(a);
5136     size_b = Py_SIZE(b);
5137     if (-2 <= size_a && size_a <= 2 && -2 <= size_b && size_b <= 2) {
5138         Py_INCREF(a);
5139         Py_INCREF(b);
5140         goto simple;
5141     }
5142 
5143     /* Initial reduction: make sure that 0 <= b <= a. */
5144     a = (PyLongObject *)long_abs(a);
5145     if (a == NULL)
5146         return NULL;
5147     b = (PyLongObject *)long_abs(b);
5148     if (b == NULL) {
5149         Py_DECREF(a);
5150         return NULL;
5151     }
5152     if (long_compare(a, b) < 0) {
5153         r = a;
5154         a = b;
5155         b = r;
5156     }
5157     /* We now own references to a and b */
5158 
5159     alloc_a = Py_SIZE(a);
5160     alloc_b = Py_SIZE(b);
5161     /* reduce until a fits into 2 digits */
5162     while ((size_a = Py_SIZE(a)) > 2) {
5163         nbits = bit_length_digit(a->ob_digit[size_a-1]);
5164         /* extract top 2*PyLong_SHIFT bits of a into x, along with
5165            corresponding bits of b into y */
5166         size_b = Py_SIZE(b);
5167         assert(size_b <= size_a);
5168         if (size_b == 0) {
5169             if (size_a < alloc_a) {
5170                 r = (PyLongObject *)_PyLong_Copy(a);
5171                 Py_DECREF(a);
5172             }
5173             else
5174                 r = a;
5175             Py_DECREF(b);
5176             Py_XDECREF(c);
5177             Py_XDECREF(d);
5178             return (PyObject *)r;
5179         }
5180         x = (((twodigits)a->ob_digit[size_a-1] << (2*PyLong_SHIFT-nbits)) |
5181              ((twodigits)a->ob_digit[size_a-2] << (PyLong_SHIFT-nbits)) |
5182              (a->ob_digit[size_a-3] >> nbits));
5183 
5184         y = ((size_b >= size_a - 2 ? b->ob_digit[size_a-3] >> nbits : 0) |
5185              (size_b >= size_a - 1 ? (twodigits)b->ob_digit[size_a-2] << (PyLong_SHIFT-nbits) : 0) |
5186              (size_b >= size_a ? (twodigits)b->ob_digit[size_a-1] << (2*PyLong_SHIFT-nbits) : 0));
5187 
5188         /* inner loop of Lehmer's algorithm; A, B, C, D never grow
5189            larger than PyLong_MASK during the algorithm. */
5190         A = 1; B = 0; C = 0; D = 1;
5191         for (k=0;; k++) {
5192             if (y-C == 0)
5193                 break;
5194             q = (x+(A-1))/(y-C);
5195             s = B+q*D;
5196             t = x-q*y;
5197             if (s > t)
5198                 break;
5199             x = y; y = t;
5200             t = A+q*C; A = D; B = C; C = s; D = t;
5201         }
5202 
5203         if (k == 0) {
5204             /* no progress; do a Euclidean step */
5205             if (l_mod(a, b, &r) < 0)
5206                 goto error;
5207             Py_DECREF(a);
5208             a = b;
5209             b = r;
5210             alloc_a = alloc_b;
5211             alloc_b = Py_SIZE(b);
5212             continue;
5213         }
5214 
5215         /*
5216           a, b = A*b-B*a, D*a-C*b if k is odd
5217           a, b = A*a-B*b, D*b-C*a if k is even
5218         */
5219         if (k&1) {
5220             T = -A; A = -B; B = T;
5221             T = -C; C = -D; D = T;
5222         }
5223         if (c != NULL) {
5224             Py_SET_SIZE(c, size_a);
5225         }
5226         else if (Py_REFCNT(a) == 1) {
5227             Py_INCREF(a);
5228             c = a;
5229         }
5230         else {
5231             alloc_a = size_a;
5232             c = _PyLong_New(size_a);
5233             if (c == NULL)
5234                 goto error;
5235         }
5236 
5237         if (d != NULL) {
5238             Py_SET_SIZE(d, size_a);
5239         }
5240         else if (Py_REFCNT(b) == 1 && size_a <= alloc_b) {
5241             Py_INCREF(b);
5242             d = b;
5243             Py_SET_SIZE(d, size_a);
5244         }
5245         else {
5246             alloc_b = size_a;
5247             d = _PyLong_New(size_a);
5248             if (d == NULL)
5249                 goto error;
5250         }
5251         a_end = a->ob_digit + size_a;
5252         b_end = b->ob_digit + size_b;
5253 
5254         /* compute new a and new b in parallel */
5255         a_digit = a->ob_digit;
5256         b_digit = b->ob_digit;
5257         c_digit = c->ob_digit;
5258         d_digit = d->ob_digit;
5259         c_carry = 0;
5260         d_carry = 0;
5261         while (b_digit < b_end) {
5262             c_carry += (A * *a_digit) - (B * *b_digit);
5263             d_carry += (D * *b_digit++) - (C * *a_digit++);
5264             *c_digit++ = (digit)(c_carry & PyLong_MASK);
5265             *d_digit++ = (digit)(d_carry & PyLong_MASK);
5266             c_carry >>= PyLong_SHIFT;
5267             d_carry >>= PyLong_SHIFT;
5268         }
5269         while (a_digit < a_end) {
5270             c_carry += A * *a_digit;
5271             d_carry -= C * *a_digit++;
5272             *c_digit++ = (digit)(c_carry & PyLong_MASK);
5273             *d_digit++ = (digit)(d_carry & PyLong_MASK);
5274             c_carry >>= PyLong_SHIFT;
5275             d_carry >>= PyLong_SHIFT;
5276         }
5277         assert(c_carry == 0);
5278         assert(d_carry == 0);
5279 
5280         Py_INCREF(c);
5281         Py_INCREF(d);
5282         Py_DECREF(a);
5283         Py_DECREF(b);
5284         a = long_normalize(c);
5285         b = long_normalize(d);
5286     }
5287     Py_XDECREF(c);
5288     Py_XDECREF(d);
5289 
5290 simple:
5291     assert(Py_REFCNT(a) > 0);
5292     assert(Py_REFCNT(b) > 0);
5293 /* Issue #24999: use two shifts instead of ">> 2*PyLong_SHIFT" to avoid
5294    undefined behaviour when LONG_MAX type is smaller than 60 bits */
5295 #if LONG_MAX >> PyLong_SHIFT >> PyLong_SHIFT
5296     /* a fits into a long, so b must too */
5297     x = PyLong_AsLong((PyObject *)a);
5298     y = PyLong_AsLong((PyObject *)b);
5299 #elif LLONG_MAX >> PyLong_SHIFT >> PyLong_SHIFT
5300     x = PyLong_AsLongLong((PyObject *)a);
5301     y = PyLong_AsLongLong((PyObject *)b);
5302 #else
5303 # error "_PyLong_GCD"
5304 #endif
5305     x = Py_ABS(x);
5306     y = Py_ABS(y);
5307     Py_DECREF(a);
5308     Py_DECREF(b);
5309 
5310     /* usual Euclidean algorithm for longs */
5311     while (y != 0) {
5312         t = y;
5313         y = x % y;
5314         x = t;
5315     }
5316 #if LONG_MAX >> PyLong_SHIFT >> PyLong_SHIFT
5317     return PyLong_FromLong(x);
5318 #elif LLONG_MAX >> PyLong_SHIFT >> PyLong_SHIFT
5319     return PyLong_FromLongLong(x);
5320 #else
5321 # error "_PyLong_GCD"
5322 #endif
5323 
5324 error:
5325     Py_DECREF(a);
5326     Py_DECREF(b);
5327     Py_XDECREF(c);
5328     Py_XDECREF(d);
5329     return NULL;
5330 }
5331 
5332 static PyObject *
long_float(PyObject * v)5333 long_float(PyObject *v)
5334 {
5335     double result;
5336     result = PyLong_AsDouble(v);
5337     if (result == -1.0 && PyErr_Occurred())
5338         return NULL;
5339     return PyFloat_FromDouble(result);
5340 }
5341 
5342 static PyObject *
5343 long_subtype_new(PyTypeObject *type, PyObject *x, PyObject *obase);
5344 
5345 /*[clinic input]
5346 @classmethod
5347 int.__new__ as long_new
5348     x: object(c_default="NULL") = 0
5349     /
5350     base as obase: object(c_default="NULL") = 10
5351 [clinic start generated code]*/
5352 
5353 static PyObject *
long_new_impl(PyTypeObject * type,PyObject * x,PyObject * obase)5354 long_new_impl(PyTypeObject *type, PyObject *x, PyObject *obase)
5355 /*[clinic end generated code: output=e47cfe777ab0f24c input=81c98f418af9eb6f]*/
5356 {
5357     Py_ssize_t base;
5358 
5359     if (type != &PyLong_Type)
5360         return long_subtype_new(type, x, obase); /* Wimp out */
5361     if (x == NULL) {
5362         if (obase != NULL) {
5363             PyErr_SetString(PyExc_TypeError,
5364                             "int() missing string argument");
5365             return NULL;
5366         }
5367         return PyLong_FromLong(0L);
5368     }
5369     /* default base and limit, forward to standard implementation */
5370     if (obase == NULL)
5371         return PyNumber_Long(x);
5372 
5373     base = PyNumber_AsSsize_t(obase, NULL);
5374     if (base == -1 && PyErr_Occurred())
5375         return NULL;
5376     if ((base != 0 && base < 2) || base > 36) {
5377         PyErr_SetString(PyExc_ValueError,
5378                         "int() base must be >= 2 and <= 36, or 0");
5379         return NULL;
5380     }
5381 
5382     if (PyUnicode_Check(x))
5383         return PyLong_FromUnicodeObject(x, (int)base);
5384     else if (PyByteArray_Check(x) || PyBytes_Check(x)) {
5385         const char *string;
5386         if (PyByteArray_Check(x))
5387             string = PyByteArray_AS_STRING(x);
5388         else
5389             string = PyBytes_AS_STRING(x);
5390         return _PyLong_FromBytes(string, Py_SIZE(x), (int)base);
5391     }
5392     else {
5393         PyErr_SetString(PyExc_TypeError,
5394                         "int() can't convert non-string with explicit base");
5395         return NULL;
5396     }
5397 }
5398 
5399 /* Wimpy, slow approach to tp_new calls for subtypes of int:
5400    first create a regular int from whatever arguments we got,
5401    then allocate a subtype instance and initialize it from
5402    the regular int.  The regular int is then thrown away.
5403 */
5404 static PyObject *
long_subtype_new(PyTypeObject * type,PyObject * x,PyObject * obase)5405 long_subtype_new(PyTypeObject *type, PyObject *x, PyObject *obase)
5406 {
5407     PyLongObject *tmp, *newobj;
5408     Py_ssize_t i, n;
5409 
5410     assert(PyType_IsSubtype(type, &PyLong_Type));
5411     tmp = (PyLongObject *)long_new_impl(&PyLong_Type, x, obase);
5412     if (tmp == NULL)
5413         return NULL;
5414     assert(PyLong_Check(tmp));
5415     n = Py_SIZE(tmp);
5416     if (n < 0)
5417         n = -n;
5418     /* Fast operations for single digit integers (including zero)
5419      * assume that there is always at least one digit present. */
5420     if (n == 0) {
5421         n = 1;
5422     }
5423     newobj = (PyLongObject *)type->tp_alloc(type, n);
5424     if (newobj == NULL) {
5425         Py_DECREF(tmp);
5426         return NULL;
5427     }
5428     assert(PyLong_Check(newobj));
5429     Py_SET_SIZE(newobj, Py_SIZE(tmp));
5430     for (i = 0; i < n; i++) {
5431         newobj->ob_digit[i] = tmp->ob_digit[i];
5432     }
5433     Py_DECREF(tmp);
5434     return (PyObject *)newobj;
5435 }
5436 
5437 /*[clinic input]
5438 int.__getnewargs__
5439 [clinic start generated code]*/
5440 
5441 static PyObject *
int___getnewargs___impl(PyObject * self)5442 int___getnewargs___impl(PyObject *self)
5443 /*[clinic end generated code: output=839a49de3f00b61b input=5904770ab1fb8c75]*/
5444 {
5445     return Py_BuildValue("(N)", _PyLong_Copy((PyLongObject *)self));
5446 }
5447 
5448 static PyObject *
long_get0(PyObject * Py_UNUSED (self),void * Py_UNUSED (context))5449 long_get0(PyObject *Py_UNUSED(self), void *Py_UNUSED(context))
5450 {
5451     return PyLong_FromLong(0L);
5452 }
5453 
5454 static PyObject *
long_get1(PyObject * Py_UNUSED (self),void * Py_UNUSED (ignored))5455 long_get1(PyObject *Py_UNUSED(self), void *Py_UNUSED(ignored))
5456 {
5457     return PyLong_FromLong(1L);
5458 }
5459 
5460 /*[clinic input]
5461 int.__format__
5462 
5463     format_spec: unicode
5464     /
5465 [clinic start generated code]*/
5466 
5467 static PyObject *
int___format___impl(PyObject * self,PyObject * format_spec)5468 int___format___impl(PyObject *self, PyObject *format_spec)
5469 /*[clinic end generated code: output=b4929dee9ae18689 input=e31944a9b3e428b7]*/
5470 {
5471     _PyUnicodeWriter writer;
5472     int ret;
5473 
5474     _PyUnicodeWriter_Init(&writer);
5475     ret = _PyLong_FormatAdvancedWriter(
5476         &writer,
5477         self,
5478         format_spec, 0, PyUnicode_GET_LENGTH(format_spec));
5479     if (ret == -1) {
5480         _PyUnicodeWriter_Dealloc(&writer);
5481         return NULL;
5482     }
5483     return _PyUnicodeWriter_Finish(&writer);
5484 }
5485 
5486 /* Return a pair (q, r) such that a = b * q + r, and
5487    abs(r) <= abs(b)/2, with equality possible only if q is even.
5488    In other words, q == a / b, rounded to the nearest integer using
5489    round-half-to-even. */
5490 
5491 PyObject *
_PyLong_DivmodNear(PyObject * a,PyObject * b)5492 _PyLong_DivmodNear(PyObject *a, PyObject *b)
5493 {
5494     PyLongObject *quo = NULL, *rem = NULL;
5495     PyObject *twice_rem, *result, *temp;
5496     int quo_is_odd, quo_is_neg;
5497     Py_ssize_t cmp;
5498 
5499     /* Equivalent Python code:
5500 
5501        def divmod_near(a, b):
5502            q, r = divmod(a, b)
5503            # round up if either r / b > 0.5, or r / b == 0.5 and q is odd.
5504            # The expression r / b > 0.5 is equivalent to 2 * r > b if b is
5505            # positive, 2 * r < b if b negative.
5506            greater_than_half = 2*r > b if b > 0 else 2*r < b
5507            exactly_half = 2*r == b
5508            if greater_than_half or exactly_half and q % 2 == 1:
5509                q += 1
5510                r -= b
5511            return q, r
5512 
5513     */
5514     if (!PyLong_Check(a) || !PyLong_Check(b)) {
5515         PyErr_SetString(PyExc_TypeError,
5516                         "non-integer arguments in division");
5517         return NULL;
5518     }
5519 
5520     /* Do a and b have different signs?  If so, quotient is negative. */
5521     quo_is_neg = (Py_SIZE(a) < 0) != (Py_SIZE(b) < 0);
5522 
5523     if (long_divrem((PyLongObject*)a, (PyLongObject*)b, &quo, &rem) < 0)
5524         goto error;
5525 
5526     /* compare twice the remainder with the divisor, to see
5527        if we need to adjust the quotient and remainder */
5528     PyObject *one = _PyLong_GetOne();  // borrowed reference
5529     twice_rem = long_lshift((PyObject *)rem, one);
5530     if (twice_rem == NULL)
5531         goto error;
5532     if (quo_is_neg) {
5533         temp = long_neg((PyLongObject*)twice_rem);
5534         Py_DECREF(twice_rem);
5535         twice_rem = temp;
5536         if (twice_rem == NULL)
5537             goto error;
5538     }
5539     cmp = long_compare((PyLongObject *)twice_rem, (PyLongObject *)b);
5540     Py_DECREF(twice_rem);
5541 
5542     quo_is_odd = Py_SIZE(quo) != 0 && ((quo->ob_digit[0] & 1) != 0);
5543     if ((Py_SIZE(b) < 0 ? cmp < 0 : cmp > 0) || (cmp == 0 && quo_is_odd)) {
5544         /* fix up quotient */
5545         if (quo_is_neg)
5546             temp = long_sub(quo, (PyLongObject *)one);
5547         else
5548             temp = long_add(quo, (PyLongObject *)one);
5549         Py_DECREF(quo);
5550         quo = (PyLongObject *)temp;
5551         if (quo == NULL)
5552             goto error;
5553         /* and remainder */
5554         if (quo_is_neg)
5555             temp = long_add(rem, (PyLongObject *)b);
5556         else
5557             temp = long_sub(rem, (PyLongObject *)b);
5558         Py_DECREF(rem);
5559         rem = (PyLongObject *)temp;
5560         if (rem == NULL)
5561             goto error;
5562     }
5563 
5564     result = PyTuple_New(2);
5565     if (result == NULL)
5566         goto error;
5567 
5568     /* PyTuple_SET_ITEM steals references */
5569     PyTuple_SET_ITEM(result, 0, (PyObject *)quo);
5570     PyTuple_SET_ITEM(result, 1, (PyObject *)rem);
5571     return result;
5572 
5573   error:
5574     Py_XDECREF(quo);
5575     Py_XDECREF(rem);
5576     return NULL;
5577 }
5578 
5579 /*[clinic input]
5580 int.__round__
5581 
5582     ndigits as o_ndigits: object = NULL
5583     /
5584 
5585 Rounding an Integral returns itself.
5586 
5587 Rounding with an ndigits argument also returns an integer.
5588 [clinic start generated code]*/
5589 
5590 static PyObject *
int___round___impl(PyObject * self,PyObject * o_ndigits)5591 int___round___impl(PyObject *self, PyObject *o_ndigits)
5592 /*[clinic end generated code: output=954fda6b18875998 input=1614cf23ec9e18c3]*/
5593 {
5594     PyObject *temp, *result, *ndigits;
5595 
5596     /* To round an integer m to the nearest 10**n (n positive), we make use of
5597      * the divmod_near operation, defined by:
5598      *
5599      *   divmod_near(a, b) = (q, r)
5600      *
5601      * where q is the nearest integer to the quotient a / b (the
5602      * nearest even integer in the case of a tie) and r == a - q * b.
5603      * Hence q * b = a - r is the nearest multiple of b to a,
5604      * preferring even multiples in the case of a tie.
5605      *
5606      * So the nearest multiple of 10**n to m is:
5607      *
5608      *   m - divmod_near(m, 10**n)[1].
5609      */
5610     if (o_ndigits == NULL)
5611         return long_long(self);
5612 
5613     ndigits = _PyNumber_Index(o_ndigits);
5614     if (ndigits == NULL)
5615         return NULL;
5616 
5617     /* if ndigits >= 0 then no rounding is necessary; return self unchanged */
5618     if (Py_SIZE(ndigits) >= 0) {
5619         Py_DECREF(ndigits);
5620         return long_long(self);
5621     }
5622 
5623     /* result = self - divmod_near(self, 10 ** -ndigits)[1] */
5624     temp = long_neg((PyLongObject*)ndigits);
5625     Py_DECREF(ndigits);
5626     ndigits = temp;
5627     if (ndigits == NULL)
5628         return NULL;
5629 
5630     result = PyLong_FromLong(10L);
5631     if (result == NULL) {
5632         Py_DECREF(ndigits);
5633         return NULL;
5634     }
5635 
5636     temp = long_pow(result, ndigits, Py_None);
5637     Py_DECREF(ndigits);
5638     Py_DECREF(result);
5639     result = temp;
5640     if (result == NULL)
5641         return NULL;
5642 
5643     temp = _PyLong_DivmodNear(self, result);
5644     Py_DECREF(result);
5645     result = temp;
5646     if (result == NULL)
5647         return NULL;
5648 
5649     temp = long_sub((PyLongObject *)self,
5650                     (PyLongObject *)PyTuple_GET_ITEM(result, 1));
5651     Py_DECREF(result);
5652     result = temp;
5653 
5654     return result;
5655 }
5656 
5657 /*[clinic input]
5658 int.__sizeof__ -> Py_ssize_t
5659 
5660 Returns size in memory, in bytes.
5661 [clinic start generated code]*/
5662 
5663 static Py_ssize_t
int___sizeof___impl(PyObject * self)5664 int___sizeof___impl(PyObject *self)
5665 /*[clinic end generated code: output=3303f008eaa6a0a5 input=9b51620c76fc4507]*/
5666 {
5667     Py_ssize_t res;
5668 
5669     res = offsetof(PyLongObject, ob_digit)
5670         /* using Py_MAX(..., 1) because we always allocate space for at least
5671            one digit, even though the integer zero has a Py_SIZE of 0 */
5672         + Py_MAX(Py_ABS(Py_SIZE(self)), 1)*sizeof(digit);
5673     return res;
5674 }
5675 
5676 /*[clinic input]
5677 int.bit_length
5678 
5679 Number of bits necessary to represent self in binary.
5680 
5681 >>> bin(37)
5682 '0b100101'
5683 >>> (37).bit_length()
5684 6
5685 [clinic start generated code]*/
5686 
5687 static PyObject *
int_bit_length_impl(PyObject * self)5688 int_bit_length_impl(PyObject *self)
5689 /*[clinic end generated code: output=fc1977c9353d6a59 input=e4eb7a587e849a32]*/
5690 {
5691     PyLongObject *result, *x, *y;
5692     Py_ssize_t ndigits;
5693     int msd_bits;
5694     digit msd;
5695 
5696     assert(self != NULL);
5697     assert(PyLong_Check(self));
5698 
5699     ndigits = Py_ABS(Py_SIZE(self));
5700     if (ndigits == 0)
5701         return PyLong_FromLong(0);
5702 
5703     msd = ((PyLongObject *)self)->ob_digit[ndigits-1];
5704     msd_bits = bit_length_digit(msd);
5705 
5706     if (ndigits <= PY_SSIZE_T_MAX/PyLong_SHIFT)
5707         return PyLong_FromSsize_t((ndigits-1)*PyLong_SHIFT + msd_bits);
5708 
5709     /* expression above may overflow; use Python integers instead */
5710     result = (PyLongObject *)PyLong_FromSsize_t(ndigits - 1);
5711     if (result == NULL)
5712         return NULL;
5713     x = (PyLongObject *)PyLong_FromLong(PyLong_SHIFT);
5714     if (x == NULL)
5715         goto error;
5716     y = (PyLongObject *)long_mul(result, x);
5717     Py_DECREF(x);
5718     if (y == NULL)
5719         goto error;
5720     Py_DECREF(result);
5721     result = y;
5722 
5723     x = (PyLongObject *)PyLong_FromLong((long)msd_bits);
5724     if (x == NULL)
5725         goto error;
5726     y = (PyLongObject *)long_add(result, x);
5727     Py_DECREF(x);
5728     if (y == NULL)
5729         goto error;
5730     Py_DECREF(result);
5731     result = y;
5732 
5733     return (PyObject *)result;
5734 
5735   error:
5736     Py_DECREF(result);
5737     return NULL;
5738 }
5739 
5740 static int
popcount_digit(digit d)5741 popcount_digit(digit d)
5742 {
5743     // digit can be larger than uint32_t, but only PyLong_SHIFT bits
5744     // of it will be ever used.
5745     static_assert(PyLong_SHIFT <= 32, "digit is larger than uint32_t");
5746     return _Py_popcount32((uint32_t)d);
5747 }
5748 
5749 /*[clinic input]
5750 int.bit_count
5751 
5752 Number of ones in the binary representation of the absolute value of self.
5753 
5754 Also known as the population count.
5755 
5756 >>> bin(13)
5757 '0b1101'
5758 >>> (13).bit_count()
5759 3
5760 [clinic start generated code]*/
5761 
5762 static PyObject *
int_bit_count_impl(PyObject * self)5763 int_bit_count_impl(PyObject *self)
5764 /*[clinic end generated code: output=2e571970daf1e5c3 input=7e0adef8e8ccdf2e]*/
5765 {
5766     assert(self != NULL);
5767     assert(PyLong_Check(self));
5768 
5769     PyLongObject *z = (PyLongObject *)self;
5770     Py_ssize_t ndigits = Py_ABS(Py_SIZE(z));
5771     Py_ssize_t bit_count = 0;
5772 
5773     /* Each digit has up to PyLong_SHIFT ones, so the accumulated bit count
5774        from the first PY_SSIZE_T_MAX/PyLong_SHIFT digits can't overflow a
5775        Py_ssize_t. */
5776     Py_ssize_t ndigits_fast = Py_MIN(ndigits, PY_SSIZE_T_MAX/PyLong_SHIFT);
5777     for (Py_ssize_t i = 0; i < ndigits_fast; i++) {
5778         bit_count += popcount_digit(z->ob_digit[i]);
5779     }
5780 
5781     PyObject *result = PyLong_FromSsize_t(bit_count);
5782     if (result == NULL) {
5783         return NULL;
5784     }
5785 
5786     /* Use Python integers if bit_count would overflow. */
5787     for (Py_ssize_t i = ndigits_fast; i < ndigits; i++) {
5788         PyObject *x = PyLong_FromLong(popcount_digit(z->ob_digit[i]));
5789         if (x == NULL) {
5790             goto error;
5791         }
5792         PyObject *y = long_add((PyLongObject *)result, (PyLongObject *)x);
5793         Py_DECREF(x);
5794         if (y == NULL) {
5795             goto error;
5796         }
5797         Py_DECREF(result);
5798         result = y;
5799     }
5800 
5801     return result;
5802 
5803   error:
5804     Py_DECREF(result);
5805     return NULL;
5806 }
5807 
5808 /*[clinic input]
5809 int.as_integer_ratio
5810 
5811 Return integer ratio.
5812 
5813 Return a pair of integers, whose ratio is exactly equal to the original int
5814 and with a positive denominator.
5815 
5816 >>> (10).as_integer_ratio()
5817 (10, 1)
5818 >>> (-10).as_integer_ratio()
5819 (-10, 1)
5820 >>> (0).as_integer_ratio()
5821 (0, 1)
5822 [clinic start generated code]*/
5823 
5824 static PyObject *
int_as_integer_ratio_impl(PyObject * self)5825 int_as_integer_ratio_impl(PyObject *self)
5826 /*[clinic end generated code: output=e60803ae1cc8621a input=55ce3058e15de393]*/
5827 {
5828     PyObject *ratio_tuple;
5829     PyObject *numerator = long_long(self);
5830     if (numerator == NULL) {
5831         return NULL;
5832     }
5833     ratio_tuple = PyTuple_Pack(2, numerator, _PyLong_GetOne());
5834     Py_DECREF(numerator);
5835     return ratio_tuple;
5836 }
5837 
5838 /*[clinic input]
5839 int.to_bytes
5840 
5841     length: Py_ssize_t = 1
5842         Length of bytes object to use.  An OverflowError is raised if the
5843         integer is not representable with the given number of bytes.  Default
5844         is length 1.
5845     byteorder: unicode(c_default="NULL") = "big"
5846         The byte order used to represent the integer.  If byteorder is 'big',
5847         the most significant byte is at the beginning of the byte array.  If
5848         byteorder is 'little', the most significant byte is at the end of the
5849         byte array.  To request the native byte order of the host system, use
5850         `sys.byteorder' as the byte order value.  Default is to use 'big'.
5851     *
5852     signed as is_signed: bool = False
5853         Determines whether two's complement is used to represent the integer.
5854         If signed is False and a negative integer is given, an OverflowError
5855         is raised.
5856 
5857 Return an array of bytes representing an integer.
5858 [clinic start generated code]*/
5859 
5860 static PyObject *
int_to_bytes_impl(PyObject * self,Py_ssize_t length,PyObject * byteorder,int is_signed)5861 int_to_bytes_impl(PyObject *self, Py_ssize_t length, PyObject *byteorder,
5862                   int is_signed)
5863 /*[clinic end generated code: output=89c801df114050a3 input=d42ecfb545039d71]*/
5864 {
5865     int little_endian;
5866     PyObject *bytes;
5867 
5868     if (byteorder == NULL)
5869         little_endian = 0;
5870     else if (_PyUnicode_Equal(byteorder, &_Py_ID(little)))
5871         little_endian = 1;
5872     else if (_PyUnicode_Equal(byteorder, &_Py_ID(big)))
5873         little_endian = 0;
5874     else {
5875         PyErr_SetString(PyExc_ValueError,
5876             "byteorder must be either 'little' or 'big'");
5877         return NULL;
5878     }
5879 
5880     if (length < 0) {
5881         PyErr_SetString(PyExc_ValueError,
5882                         "length argument must be non-negative");
5883         return NULL;
5884     }
5885 
5886     bytes = PyBytes_FromStringAndSize(NULL, length);
5887     if (bytes == NULL)
5888         return NULL;
5889 
5890     if (_PyLong_AsByteArray((PyLongObject *)self,
5891                             (unsigned char *)PyBytes_AS_STRING(bytes),
5892                             length, little_endian, is_signed) < 0) {
5893         Py_DECREF(bytes);
5894         return NULL;
5895     }
5896 
5897     return bytes;
5898 }
5899 
5900 /*[clinic input]
5901 @classmethod
5902 int.from_bytes
5903 
5904     bytes as bytes_obj: object
5905         Holds the array of bytes to convert.  The argument must either
5906         support the buffer protocol or be an iterable object producing bytes.
5907         Bytes and bytearray are examples of built-in objects that support the
5908         buffer protocol.
5909     byteorder: unicode(c_default="NULL") = "big"
5910         The byte order used to represent the integer.  If byteorder is 'big',
5911         the most significant byte is at the beginning of the byte array.  If
5912         byteorder is 'little', the most significant byte is at the end of the
5913         byte array.  To request the native byte order of the host system, use
5914         `sys.byteorder' as the byte order value.  Default is to use 'big'.
5915     *
5916     signed as is_signed: bool = False
5917         Indicates whether two's complement is used to represent the integer.
5918 
5919 Return the integer represented by the given array of bytes.
5920 [clinic start generated code]*/
5921 
5922 static PyObject *
int_from_bytes_impl(PyTypeObject * type,PyObject * bytes_obj,PyObject * byteorder,int is_signed)5923 int_from_bytes_impl(PyTypeObject *type, PyObject *bytes_obj,
5924                     PyObject *byteorder, int is_signed)
5925 /*[clinic end generated code: output=efc5d68e31f9314f input=33326dccdd655553]*/
5926 {
5927     int little_endian;
5928     PyObject *long_obj, *bytes;
5929 
5930     if (byteorder == NULL)
5931         little_endian = 0;
5932     else if (_PyUnicode_Equal(byteorder, &_Py_ID(little)))
5933         little_endian = 1;
5934     else if (_PyUnicode_Equal(byteorder, &_Py_ID(big)))
5935         little_endian = 0;
5936     else {
5937         PyErr_SetString(PyExc_ValueError,
5938             "byteorder must be either 'little' or 'big'");
5939         return NULL;
5940     }
5941 
5942     bytes = PyObject_Bytes(bytes_obj);
5943     if (bytes == NULL)
5944         return NULL;
5945 
5946     long_obj = _PyLong_FromByteArray(
5947         (unsigned char *)PyBytes_AS_STRING(bytes), Py_SIZE(bytes),
5948         little_endian, is_signed);
5949     Py_DECREF(bytes);
5950 
5951     if (long_obj != NULL && type != &PyLong_Type) {
5952         Py_SETREF(long_obj, PyObject_CallOneArg((PyObject *)type, long_obj));
5953     }
5954 
5955     return long_obj;
5956 }
5957 
5958 static PyObject *
long_long_meth(PyObject * self,PyObject * Py_UNUSED (ignored))5959 long_long_meth(PyObject *self, PyObject *Py_UNUSED(ignored))
5960 {
5961     return long_long(self);
5962 }
5963 
5964 static PyMethodDef long_methods[] = {
5965     {"conjugate",       long_long_meth, METH_NOARGS,
5966      "Returns self, the complex conjugate of any int."},
5967     INT_BIT_LENGTH_METHODDEF
5968     INT_BIT_COUNT_METHODDEF
5969     INT_TO_BYTES_METHODDEF
5970     INT_FROM_BYTES_METHODDEF
5971     INT_AS_INTEGER_RATIO_METHODDEF
5972     {"__trunc__",       long_long_meth, METH_NOARGS,
5973      "Truncating an Integral returns itself."},
5974     {"__floor__",       long_long_meth, METH_NOARGS,
5975      "Flooring an Integral returns itself."},
5976     {"__ceil__",        long_long_meth, METH_NOARGS,
5977      "Ceiling of an Integral returns itself."},
5978     INT___ROUND___METHODDEF
5979     INT___GETNEWARGS___METHODDEF
5980     INT___FORMAT___METHODDEF
5981     INT___SIZEOF___METHODDEF
5982     {NULL,              NULL}           /* sentinel */
5983 };
5984 
5985 static PyGetSetDef long_getset[] = {
5986     {"real",
5987      (getter)long_long_meth, (setter)NULL,
5988      "the real part of a complex number",
5989      NULL},
5990     {"imag",
5991      long_get0, (setter)NULL,
5992      "the imaginary part of a complex number",
5993      NULL},
5994     {"numerator",
5995      (getter)long_long_meth, (setter)NULL,
5996      "the numerator of a rational number in lowest terms",
5997      NULL},
5998     {"denominator",
5999      long_get1, (setter)NULL,
6000      "the denominator of a rational number in lowest terms",
6001      NULL},
6002     {NULL}  /* Sentinel */
6003 };
6004 
6005 PyDoc_STRVAR(long_doc,
6006 "int([x]) -> integer\n\
6007 int(x, base=10) -> integer\n\
6008 \n\
6009 Convert a number or string to an integer, or return 0 if no arguments\n\
6010 are given.  If x is a number, return x.__int__().  For floating point\n\
6011 numbers, this truncates towards zero.\n\
6012 \n\
6013 If x is not a number or if base is given, then x must be a string,\n\
6014 bytes, or bytearray instance representing an integer literal in the\n\
6015 given base.  The literal can be preceded by '+' or '-' and be surrounded\n\
6016 by whitespace.  The base defaults to 10.  Valid bases are 0 and 2-36.\n\
6017 Base 0 means to interpret the base from the string as an integer literal.\n\
6018 >>> int('0b100', base=0)\n\
6019 4");
6020 
6021 static PyNumberMethods long_as_number = {
6022     (binaryfunc)long_add,       /*nb_add*/
6023     (binaryfunc)long_sub,       /*nb_subtract*/
6024     (binaryfunc)long_mul,       /*nb_multiply*/
6025     long_mod,                   /*nb_remainder*/
6026     long_divmod,                /*nb_divmod*/
6027     long_pow,                   /*nb_power*/
6028     (unaryfunc)long_neg,        /*nb_negative*/
6029     long_long,                  /*tp_positive*/
6030     (unaryfunc)long_abs,        /*tp_absolute*/
6031     (inquiry)long_bool,         /*tp_bool*/
6032     (unaryfunc)long_invert,     /*nb_invert*/
6033     long_lshift,                /*nb_lshift*/
6034     long_rshift,                /*nb_rshift*/
6035     long_and,                   /*nb_and*/
6036     long_xor,                   /*nb_xor*/
6037     long_or,                    /*nb_or*/
6038     long_long,                  /*nb_int*/
6039     0,                          /*nb_reserved*/
6040     long_float,                 /*nb_float*/
6041     0,                          /* nb_inplace_add */
6042     0,                          /* nb_inplace_subtract */
6043     0,                          /* nb_inplace_multiply */
6044     0,                          /* nb_inplace_remainder */
6045     0,                          /* nb_inplace_power */
6046     0,                          /* nb_inplace_lshift */
6047     0,                          /* nb_inplace_rshift */
6048     0,                          /* nb_inplace_and */
6049     0,                          /* nb_inplace_xor */
6050     0,                          /* nb_inplace_or */
6051     long_div,                   /* nb_floor_divide */
6052     long_true_divide,           /* nb_true_divide */
6053     0,                          /* nb_inplace_floor_divide */
6054     0,                          /* nb_inplace_true_divide */
6055     long_long,                  /* nb_index */
6056 };
6057 
6058 PyTypeObject PyLong_Type = {
6059     PyVarObject_HEAD_INIT(&PyType_Type, 0)
6060     "int",                                      /* tp_name */
6061     offsetof(PyLongObject, ob_digit),           /* tp_basicsize */
6062     sizeof(digit),                              /* tp_itemsize */
6063     0,                                          /* tp_dealloc */
6064     0,                                          /* tp_vectorcall_offset */
6065     0,                                          /* tp_getattr */
6066     0,                                          /* tp_setattr */
6067     0,                                          /* tp_as_async */
6068     long_to_decimal_string,                     /* tp_repr */
6069     &long_as_number,                            /* tp_as_number */
6070     0,                                          /* tp_as_sequence */
6071     0,                                          /* tp_as_mapping */
6072     (hashfunc)long_hash,                        /* tp_hash */
6073     0,                                          /* tp_call */
6074     0,                                          /* tp_str */
6075     PyObject_GenericGetAttr,                    /* tp_getattro */
6076     0,                                          /* tp_setattro */
6077     0,                                          /* tp_as_buffer */
6078     Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE |
6079         Py_TPFLAGS_LONG_SUBCLASS |
6080         _Py_TPFLAGS_MATCH_SELF,               /* tp_flags */
6081     long_doc,                                   /* tp_doc */
6082     0,                                          /* tp_traverse */
6083     0,                                          /* tp_clear */
6084     long_richcompare,                           /* tp_richcompare */
6085     0,                                          /* tp_weaklistoffset */
6086     0,                                          /* tp_iter */
6087     0,                                          /* tp_iternext */
6088     long_methods,                               /* tp_methods */
6089     0,                                          /* tp_members */
6090     long_getset,                                /* tp_getset */
6091     0,                                          /* tp_base */
6092     0,                                          /* tp_dict */
6093     0,                                          /* tp_descr_get */
6094     0,                                          /* tp_descr_set */
6095     0,                                          /* tp_dictoffset */
6096     0,                                          /* tp_init */
6097     0,                                          /* tp_alloc */
6098     long_new,                                   /* tp_new */
6099     PyObject_Free,                              /* tp_free */
6100 };
6101 
6102 static PyTypeObject Int_InfoType;
6103 
6104 PyDoc_STRVAR(int_info__doc__,
6105 "sys.int_info\n\
6106 \n\
6107 A named tuple that holds information about Python's\n\
6108 internal representation of integers.  The attributes are read only.");
6109 
6110 static PyStructSequence_Field int_info_fields[] = {
6111     {"bits_per_digit", "size of a digit in bits"},
6112     {"sizeof_digit", "size in bytes of the C type used to represent a digit"},
6113     {"default_max_str_digits", "maximum string conversion digits limitation"},
6114     {"str_digits_check_threshold", "minimum positive value for int_max_str_digits"},
6115     {NULL, NULL}
6116 };
6117 
6118 static PyStructSequence_Desc int_info_desc = {
6119     "sys.int_info",   /* name */
6120     int_info__doc__,  /* doc */
6121     int_info_fields,  /* fields */
6122     4                 /* number of fields */
6123 };
6124 
6125 PyObject *
PyLong_GetInfo(void)6126 PyLong_GetInfo(void)
6127 {
6128     PyObject* int_info;
6129     int field = 0;
6130     int_info = PyStructSequence_New(&Int_InfoType);
6131     if (int_info == NULL)
6132         return NULL;
6133     PyStructSequence_SET_ITEM(int_info, field++,
6134                               PyLong_FromLong(PyLong_SHIFT));
6135     PyStructSequence_SET_ITEM(int_info, field++,
6136                               PyLong_FromLong(sizeof(digit)));
6137     /*
6138      * The following two fields were added after investigating uses of
6139      * sys.int_info in the wild: Exceedingly rarely used. The ONLY use found was
6140      * numba using sys.int_info.bits_per_digit as attribute access rather than
6141      * sequence unpacking. Cython and sympy also refer to sys.int_info but only
6142      * as info for debugging. No concern about adding these in a backport.
6143      */
6144     PyStructSequence_SET_ITEM(int_info, field++,
6145                               PyLong_FromLong(_PY_LONG_DEFAULT_MAX_STR_DIGITS));
6146     PyStructSequence_SET_ITEM(int_info, field++,
6147                               PyLong_FromLong(_PY_LONG_MAX_STR_DIGITS_THRESHOLD));
6148     if (PyErr_Occurred()) {
6149         Py_CLEAR(int_info);
6150         return NULL;
6151     }
6152     return int_info;
6153 }
6154 
6155 
6156 /* runtime lifecycle */
6157 
6158 PyStatus
_PyLong_InitTypes(PyInterpreterState * interp)6159 _PyLong_InitTypes(PyInterpreterState *interp)
6160 {
6161     if (!_Py_IsMainInterpreter(interp)) {
6162         return _PyStatus_OK();
6163     }
6164 
6165     if (PyType_Ready(&PyLong_Type) < 0) {
6166         return _PyStatus_ERR("Can't initialize int type");
6167     }
6168 
6169     /* initialize int_info */
6170     if (Int_InfoType.tp_name == NULL) {
6171         if (PyStructSequence_InitType2(&Int_InfoType, &int_info_desc) < 0) {
6172             return _PyStatus_ERR("can't init int info type");
6173         }
6174     }
6175     interp->int_max_str_digits = _Py_global_config_int_max_str_digits;
6176     if (interp->int_max_str_digits == -1) {
6177         interp->int_max_str_digits = _PY_LONG_DEFAULT_MAX_STR_DIGITS;
6178     }
6179 
6180     return _PyStatus_OK();
6181 }
6182 
6183 
6184 void
_PyLong_FiniTypes(PyInterpreterState * interp)6185 _PyLong_FiniTypes(PyInterpreterState *interp)
6186 {
6187     if (!_Py_IsMainInterpreter(interp)) {
6188         return;
6189     }
6190 
6191     _PyStructSequence_FiniType(&Int_InfoType);
6192 }
6193