Blocked revisions 81192 via svnmerge
[python/dscho.git] / Objects / longobject.c
blobf7c2e3aa2476c20e2fdd98d7cf2104ef67c05207
1 /* Long (arbitrary precision) integer object implementation */
3 /* XXX The functional organization of this file is terrible */
5 #include "Python.h"
6 #include "longintrepr.h"
7 #include "structseq.h"
9 #include <float.h>
10 #include <ctype.h>
11 #include <stddef.h>
13 #ifndef NSMALLPOSINTS
14 #define NSMALLPOSINTS 257
15 #endif
16 #ifndef NSMALLNEGINTS
17 #define NSMALLNEGINTS 5
18 #endif
20 /* convert a PyLong of size 1, 0 or -1 to an sdigit */
21 #define MEDIUM_VALUE(x) (Py_SIZE(x) < 0 ? -(sdigit)(x)->ob_digit[0] : \
22 (Py_SIZE(x) == 0 ? (sdigit)0 : \
23 (sdigit)(x)->ob_digit[0]))
24 #define ABS(x) ((x) < 0 ? -(x) : (x))
26 #if NSMALLNEGINTS + NSMALLPOSINTS > 0
27 /* Small integers are preallocated in this array so that they
28 can be shared.
29 The integers that are preallocated are those in the range
30 -NSMALLNEGINTS (inclusive) to NSMALLPOSINTS (not inclusive).
32 static PyLongObject small_ints[NSMALLNEGINTS + NSMALLPOSINTS];
33 #ifdef COUNT_ALLOCS
34 int quick_int_allocs, quick_neg_int_allocs;
35 #endif
37 static PyObject *
38 get_small_int(sdigit ival)
40 PyObject *v = (PyObject*)(small_ints + ival + NSMALLNEGINTS);
41 Py_INCREF(v);
42 #ifdef COUNT_ALLOCS
43 if (ival >= 0)
44 quick_int_allocs++;
45 else
46 quick_neg_int_allocs++;
47 #endif
48 return v;
50 #define CHECK_SMALL_INT(ival) \
51 do if (-NSMALLNEGINTS <= ival && ival < NSMALLPOSINTS) { \
52 return get_small_int((sdigit)ival); \
53 } while(0)
55 static PyLongObject *
56 maybe_small_long(PyLongObject *v)
58 if (v && ABS(Py_SIZE(v)) <= 1) {
59 sdigit ival = MEDIUM_VALUE(v);
60 if (-NSMALLNEGINTS <= ival && ival < NSMALLPOSINTS) {
61 Py_DECREF(v);
62 return (PyLongObject *)get_small_int(ival);
65 return v;
67 #else
68 #define CHECK_SMALL_INT(ival)
69 #define maybe_small_long(val) (val)
70 #endif
72 /* If a freshly-allocated long is already shared, it must
73 be a small integer, so negating it must go to PyLong_FromLong */
74 #define NEGATE(x) \
75 do if (Py_REFCNT(x) == 1) Py_SIZE(x) = -Py_SIZE(x); \
76 else { PyObject* tmp=PyLong_FromLong(-MEDIUM_VALUE(x)); \
77 Py_DECREF(x); (x) = (PyLongObject*)tmp; } \
78 while(0)
79 /* For long multiplication, use the O(N**2) school algorithm unless
80 * both operands contain more than KARATSUBA_CUTOFF digits (this
81 * being an internal Python long digit, in base BASE).
83 #define KARATSUBA_CUTOFF 70
84 #define KARATSUBA_SQUARE_CUTOFF (2 * KARATSUBA_CUTOFF)
86 /* For exponentiation, use the binary left-to-right algorithm
87 * unless the exponent contains more than FIVEARY_CUTOFF digits.
88 * In that case, do 5 bits at a time. The potential drawback is that
89 * a table of 2**5 intermediate results is computed.
91 #define FIVEARY_CUTOFF 8
93 #undef MIN
94 #undef MAX
95 #define MAX(x, y) ((x) < (y) ? (y) : (x))
96 #define MIN(x, y) ((x) > (y) ? (y) : (x))
98 #define SIGCHECK(PyTryBlock) \
99 if (--_Py_Ticker < 0) { \
100 _Py_Ticker = _Py_CheckInterval; \
101 if (PyErr_CheckSignals()) PyTryBlock \
104 /* forward declaration */
105 static int bits_in_digit(digit d);
107 /* Normalize (remove leading zeros from) a long int object.
108 Doesn't attempt to free the storage--in most cases, due to the nature
109 of the algorithms used, this could save at most be one word anyway. */
111 static PyLongObject *
112 long_normalize(register PyLongObject *v)
114 Py_ssize_t j = ABS(Py_SIZE(v));
115 Py_ssize_t i = j;
117 while (i > 0 && v->ob_digit[i-1] == 0)
118 --i;
119 if (i != j)
120 Py_SIZE(v) = (Py_SIZE(v) < 0) ? -(i) : i;
121 return v;
124 /* Allocate a new long int object with size digits.
125 Return NULL and set exception if we run out of memory. */
127 #define MAX_LONG_DIGITS \
128 ((PY_SSIZE_T_MAX - offsetof(PyLongObject, ob_digit))/sizeof(digit))
130 PyLongObject *
131 _PyLong_New(Py_ssize_t size)
133 PyLongObject *result;
134 /* Number of bytes needed is: offsetof(PyLongObject, ob_digit) +
135 sizeof(digit)*size. Previous incarnations of this code used
136 sizeof(PyVarObject) instead of the offsetof, but this risks being
137 incorrect in the presence of padding between the PyVarObject header
138 and the digits. */
139 if (size > (Py_ssize_t)MAX_LONG_DIGITS) {
140 PyErr_SetString(PyExc_OverflowError,
141 "too many digits in integer");
142 return NULL;
144 result = PyObject_MALLOC(offsetof(PyLongObject, ob_digit) +
145 size*sizeof(digit));
146 if (!result) {
147 PyErr_NoMemory();
148 return NULL;
150 return (PyLongObject*)PyObject_INIT_VAR(result, &PyLong_Type, size);
153 PyObject *
154 _PyLong_Copy(PyLongObject *src)
156 PyLongObject *result;
157 Py_ssize_t i;
159 assert(src != NULL);
160 i = Py_SIZE(src);
161 if (i < 0)
162 i = -(i);
163 if (i < 2) {
164 sdigit ival = src->ob_digit[0];
165 if (Py_SIZE(src) < 0)
166 ival = -ival;
167 CHECK_SMALL_INT(ival);
169 result = _PyLong_New(i);
170 if (result != NULL) {
171 Py_SIZE(result) = Py_SIZE(src);
172 while (--i >= 0)
173 result->ob_digit[i] = src->ob_digit[i];
175 return (PyObject *)result;
178 /* Create a new long int object from a C long int */
180 PyObject *
181 PyLong_FromLong(long ival)
183 PyLongObject *v;
184 unsigned long abs_ival;
185 unsigned long t; /* unsigned so >> doesn't propagate sign bit */
186 int ndigits = 0;
187 int sign = 1;
189 CHECK_SMALL_INT(ival);
191 if (ival < 0) {
192 /* negate: can't write this as abs_ival = -ival since that
193 invokes undefined behaviour when ival is LONG_MIN */
194 abs_ival = 0U-(unsigned long)ival;
195 sign = -1;
197 else {
198 abs_ival = (unsigned long)ival;
201 /* Fast path for single-digit ints */
202 if (!(abs_ival >> PyLong_SHIFT)) {
203 v = _PyLong_New(1);
204 if (v) {
205 Py_SIZE(v) = sign;
206 v->ob_digit[0] = Py_SAFE_DOWNCAST(
207 abs_ival, unsigned long, digit);
209 return (PyObject*)v;
212 #if PyLong_SHIFT==15
213 /* 2 digits */
214 if (!(abs_ival >> 2*PyLong_SHIFT)) {
215 v = _PyLong_New(2);
216 if (v) {
217 Py_SIZE(v) = 2*sign;
218 v->ob_digit[0] = Py_SAFE_DOWNCAST(
219 abs_ival & PyLong_MASK, unsigned long, digit);
220 v->ob_digit[1] = Py_SAFE_DOWNCAST(
221 abs_ival >> PyLong_SHIFT, unsigned long, digit);
223 return (PyObject*)v;
225 #endif
227 /* Larger numbers: loop to determine number of digits */
228 t = abs_ival;
229 while (t) {
230 ++ndigits;
231 t >>= PyLong_SHIFT;
233 v = _PyLong_New(ndigits);
234 if (v != NULL) {
235 digit *p = v->ob_digit;
236 Py_SIZE(v) = ndigits*sign;
237 t = abs_ival;
238 while (t) {
239 *p++ = Py_SAFE_DOWNCAST(
240 t & PyLong_MASK, unsigned long, digit);
241 t >>= PyLong_SHIFT;
244 return (PyObject *)v;
247 /* Create a new long int object from a C unsigned long int */
249 PyObject *
250 PyLong_FromUnsignedLong(unsigned long ival)
252 PyLongObject *v;
253 unsigned long t;
254 int ndigits = 0;
256 if (ival < PyLong_BASE)
257 return PyLong_FromLong(ival);
258 /* Count the number of Python digits. */
259 t = (unsigned long)ival;
260 while (t) {
261 ++ndigits;
262 t >>= PyLong_SHIFT;
264 v = _PyLong_New(ndigits);
265 if (v != NULL) {
266 digit *p = v->ob_digit;
267 Py_SIZE(v) = ndigits;
268 while (ival) {
269 *p++ = (digit)(ival & PyLong_MASK);
270 ival >>= PyLong_SHIFT;
273 return (PyObject *)v;
276 /* Create a new long int object from a C double */
278 PyObject *
279 PyLong_FromDouble(double dval)
281 PyLongObject *v;
282 double frac;
283 int i, ndig, expo, neg;
284 neg = 0;
285 if (Py_IS_INFINITY(dval)) {
286 PyErr_SetString(PyExc_OverflowError,
287 "cannot convert float infinity to integer");
288 return NULL;
290 if (Py_IS_NAN(dval)) {
291 PyErr_SetString(PyExc_ValueError,
292 "cannot convert float NaN to integer");
293 return NULL;
295 if (dval < 0.0) {
296 neg = 1;
297 dval = -dval;
299 frac = frexp(dval, &expo); /* dval = frac*2**expo; 0.0 <= frac < 1.0 */
300 if (expo <= 0)
301 return PyLong_FromLong(0L);
302 ndig = (expo-1) / PyLong_SHIFT + 1; /* Number of 'digits' in result */
303 v = _PyLong_New(ndig);
304 if (v == NULL)
305 return NULL;
306 frac = ldexp(frac, (expo-1) % PyLong_SHIFT + 1);
307 for (i = ndig; --i >= 0; ) {
308 digit bits = (digit)frac;
309 v->ob_digit[i] = bits;
310 frac = frac - (double)bits;
311 frac = ldexp(frac, PyLong_SHIFT);
313 if (neg)
314 Py_SIZE(v) = -(Py_SIZE(v));
315 return (PyObject *)v;
318 /* Checking for overflow in PyLong_AsLong is a PITA since C doesn't define
319 * anything about what happens when a signed integer operation overflows,
320 * and some compilers think they're doing you a favor by being "clever"
321 * then. The bit pattern for the largest postive signed long is
322 * (unsigned long)LONG_MAX, and for the smallest negative signed long
323 * it is abs(LONG_MIN), which we could write -(unsigned long)LONG_MIN.
324 * However, some other compilers warn about applying unary minus to an
325 * unsigned operand. Hence the weird "0-".
327 #define PY_ABS_LONG_MIN (0-(unsigned long)LONG_MIN)
328 #define PY_ABS_SSIZE_T_MIN (0-(size_t)PY_SSIZE_T_MIN)
330 /* Get a C long int from a long int object.
331 Returns -1 and sets an error condition if overflow occurs. */
333 long
334 PyLong_AsLongAndOverflow(PyObject *vv, int *overflow)
336 /* This version by Tim Peters */
337 register PyLongObject *v;
338 unsigned long x, prev;
339 long res;
340 Py_ssize_t i;
341 int sign;
342 int do_decref = 0; /* if nb_int was called */
344 *overflow = 0;
345 if (vv == NULL) {
346 PyErr_BadInternalCall();
347 return -1;
350 if (!PyLong_Check(vv)) {
351 PyNumberMethods *nb;
352 if ((nb = vv->ob_type->tp_as_number) == NULL ||
353 nb->nb_int == NULL) {
354 PyErr_SetString(PyExc_TypeError, "an integer is required");
355 return -1;
357 vv = (*nb->nb_int) (vv);
358 if (vv == NULL)
359 return -1;
360 do_decref = 1;
361 if (!PyLong_Check(vv)) {
362 Py_DECREF(vv);
363 PyErr_SetString(PyExc_TypeError,
364 "nb_int should return int object");
365 return -1;
369 res = -1;
370 v = (PyLongObject *)vv;
371 i = Py_SIZE(v);
373 switch (i) {
374 case -1:
375 res = -(sdigit)v->ob_digit[0];
376 break;
377 case 0:
378 res = 0;
379 break;
380 case 1:
381 res = v->ob_digit[0];
382 break;
383 default:
384 sign = 1;
385 x = 0;
386 if (i < 0) {
387 sign = -1;
388 i = -(i);
390 while (--i >= 0) {
391 prev = x;
392 x = (x << PyLong_SHIFT) + v->ob_digit[i];
393 if ((x >> PyLong_SHIFT) != prev) {
394 *overflow = Py_SIZE(v) > 0 ? 1 : -1;
395 goto exit;
398 /* Haven't lost any bits, but casting to long requires extra care
399 * (see comment above).
401 if (x <= (unsigned long)LONG_MAX) {
402 res = (long)x * sign;
404 else if (sign < 0 && x == PY_ABS_LONG_MIN) {
405 res = LONG_MIN;
407 else {
408 *overflow = Py_SIZE(v) > 0 ? 1 : -1;
409 /* res is already set to -1 */
412 exit:
413 if (do_decref) {
414 Py_DECREF(vv);
416 return res;
419 long
420 PyLong_AsLong(PyObject *obj)
422 int overflow;
423 long result = PyLong_AsLongAndOverflow(obj, &overflow);
424 if (overflow) {
425 /* XXX: could be cute and give a different
426 message for overflow == -1 */
427 PyErr_SetString(PyExc_OverflowError,
428 "Python int too large to convert to C long");
430 return result;
433 /* Get a Py_ssize_t from a long int object.
434 Returns -1 and sets an error condition if overflow occurs. */
436 Py_ssize_t
437 PyLong_AsSsize_t(PyObject *vv) {
438 register PyLongObject *v;
439 size_t x, prev;
440 Py_ssize_t i;
441 int sign;
443 if (vv == NULL) {
444 PyErr_BadInternalCall();
445 return -1;
447 if (!PyLong_Check(vv)) {
448 PyErr_SetString(PyExc_TypeError, "an integer is required");
449 return -1;
452 v = (PyLongObject *)vv;
453 i = Py_SIZE(v);
454 switch (i) {
455 case -1: return -(sdigit)v->ob_digit[0];
456 case 0: return 0;
457 case 1: return v->ob_digit[0];
459 sign = 1;
460 x = 0;
461 if (i < 0) {
462 sign = -1;
463 i = -(i);
465 while (--i >= 0) {
466 prev = x;
467 x = (x << PyLong_SHIFT) + v->ob_digit[i];
468 if ((x >> PyLong_SHIFT) != prev)
469 goto overflow;
471 /* Haven't lost any bits, but casting to a signed type requires
472 * extra care (see comment above).
474 if (x <= (size_t)PY_SSIZE_T_MAX) {
475 return (Py_ssize_t)x * sign;
477 else if (sign < 0 && x == PY_ABS_SSIZE_T_MIN) {
478 return PY_SSIZE_T_MIN;
480 /* else overflow */
482 overflow:
483 PyErr_SetString(PyExc_OverflowError,
484 "Python int too large to convert to C ssize_t");
485 return -1;
488 /* Get a C unsigned long int from a long int object.
489 Returns -1 and sets an error condition if overflow occurs. */
491 unsigned long
492 PyLong_AsUnsignedLong(PyObject *vv)
494 register PyLongObject *v;
495 unsigned long x, prev;
496 Py_ssize_t i;
498 if (vv == NULL) {
499 PyErr_BadInternalCall();
500 return (unsigned long)-1;
502 if (!PyLong_Check(vv)) {
503 PyErr_SetString(PyExc_TypeError, "an integer is required");
504 return (unsigned long)-1;
507 v = (PyLongObject *)vv;
508 i = Py_SIZE(v);
509 x = 0;
510 if (i < 0) {
511 PyErr_SetString(PyExc_OverflowError,
512 "can't convert negative value to unsigned int");
513 return (unsigned long) -1;
515 switch (i) {
516 case 0: return 0;
517 case 1: return v->ob_digit[0];
519 while (--i >= 0) {
520 prev = x;
521 x = (x << PyLong_SHIFT) + v->ob_digit[i];
522 if ((x >> PyLong_SHIFT) != prev) {
523 PyErr_SetString(PyExc_OverflowError,
524 "python int too large to convert to C unsigned long");
525 return (unsigned long) -1;
528 return x;
531 /* Get a C unsigned long int from a long int object.
532 Returns -1 and sets an error condition if overflow occurs. */
534 size_t
535 PyLong_AsSize_t(PyObject *vv)
537 register PyLongObject *v;
538 size_t x, prev;
539 Py_ssize_t i;
541 if (vv == NULL) {
542 PyErr_BadInternalCall();
543 return (size_t) -1;
545 if (!PyLong_Check(vv)) {
546 PyErr_SetString(PyExc_TypeError, "an integer is required");
547 return (size_t)-1;
550 v = (PyLongObject *)vv;
551 i = Py_SIZE(v);
552 x = 0;
553 if (i < 0) {
554 PyErr_SetString(PyExc_OverflowError,
555 "can't convert negative value to size_t");
556 return (size_t) -1;
558 switch (i) {
559 case 0: return 0;
560 case 1: return v->ob_digit[0];
562 while (--i >= 0) {
563 prev = x;
564 x = (x << PyLong_SHIFT) + v->ob_digit[i];
565 if ((x >> PyLong_SHIFT) != prev) {
566 PyErr_SetString(PyExc_OverflowError,
567 "Python int too large to convert to C size_t");
568 return (unsigned long) -1;
571 return x;
574 /* Get a C unsigned long int from a long int object, ignoring the high bits.
575 Returns -1 and sets an error condition if an error occurs. */
577 static unsigned long
578 _PyLong_AsUnsignedLongMask(PyObject *vv)
580 register PyLongObject *v;
581 unsigned long x;
582 Py_ssize_t i;
583 int sign;
585 if (vv == NULL || !PyLong_Check(vv)) {
586 PyErr_BadInternalCall();
587 return (unsigned long) -1;
589 v = (PyLongObject *)vv;
590 i = Py_SIZE(v);
591 switch (i) {
592 case 0: return 0;
593 case 1: return v->ob_digit[0];
595 sign = 1;
596 x = 0;
597 if (i < 0) {
598 sign = -1;
599 i = -i;
601 while (--i >= 0) {
602 x = (x << PyLong_SHIFT) + v->ob_digit[i];
604 return x * sign;
607 unsigned long
608 PyLong_AsUnsignedLongMask(register PyObject *op)
610 PyNumberMethods *nb;
611 PyLongObject *lo;
612 unsigned long val;
614 if (op && PyLong_Check(op))
615 return _PyLong_AsUnsignedLongMask(op);
617 if (op == NULL || (nb = op->ob_type->tp_as_number) == NULL ||
618 nb->nb_int == NULL) {
619 PyErr_SetString(PyExc_TypeError, "an integer is required");
620 return (unsigned long)-1;
623 lo = (PyLongObject*) (*nb->nb_int) (op);
624 if (lo == NULL)
625 return (unsigned long)-1;
626 if (PyLong_Check(lo)) {
627 val = _PyLong_AsUnsignedLongMask((PyObject *)lo);
628 Py_DECREF(lo);
629 if (PyErr_Occurred())
630 return (unsigned long)-1;
631 return val;
633 else
635 Py_DECREF(lo);
636 PyErr_SetString(PyExc_TypeError,
637 "nb_int should return int object");
638 return (unsigned long)-1;
643 _PyLong_Sign(PyObject *vv)
645 PyLongObject *v = (PyLongObject *)vv;
647 assert(v != NULL);
648 assert(PyLong_Check(v));
650 return Py_SIZE(v) == 0 ? 0 : (Py_SIZE(v) < 0 ? -1 : 1);
653 size_t
654 _PyLong_NumBits(PyObject *vv)
656 PyLongObject *v = (PyLongObject *)vv;
657 size_t result = 0;
658 Py_ssize_t ndigits;
660 assert(v != NULL);
661 assert(PyLong_Check(v));
662 ndigits = ABS(Py_SIZE(v));
663 assert(ndigits == 0 || v->ob_digit[ndigits - 1] != 0);
664 if (ndigits > 0) {
665 digit msd = v->ob_digit[ndigits - 1];
667 result = (ndigits - 1) * PyLong_SHIFT;
668 if (result / PyLong_SHIFT != (size_t)(ndigits - 1))
669 goto Overflow;
670 do {
671 ++result;
672 if (result == 0)
673 goto Overflow;
674 msd >>= 1;
675 } while (msd);
677 return result;
679 Overflow:
680 PyErr_SetString(PyExc_OverflowError, "int has too many bits "
681 "to express in a platform size_t");
682 return (size_t)-1;
685 PyObject *
686 _PyLong_FromByteArray(const unsigned char* bytes, size_t n,
687 int little_endian, int is_signed)
689 const unsigned char* pstartbyte;/* LSB of bytes */
690 int incr; /* direction to move pstartbyte */
691 const unsigned char* pendbyte; /* MSB of bytes */
692 size_t numsignificantbytes; /* number of bytes that matter */
693 Py_ssize_t ndigits; /* number of Python long digits */
694 PyLongObject* v; /* result */
695 Py_ssize_t idigit = 0; /* next free index in v->ob_digit */
697 if (n == 0)
698 return PyLong_FromLong(0L);
700 if (little_endian) {
701 pstartbyte = bytes;
702 pendbyte = bytes + n - 1;
703 incr = 1;
705 else {
706 pstartbyte = bytes + n - 1;
707 pendbyte = bytes;
708 incr = -1;
711 if (is_signed)
712 is_signed = *pendbyte >= 0x80;
714 /* Compute numsignificantbytes. This consists of finding the most
715 significant byte. Leading 0 bytes are insignficant if the number
716 is positive, and leading 0xff bytes if negative. */
718 size_t i;
719 const unsigned char* p = pendbyte;
720 const int pincr = -incr; /* search MSB to LSB */
721 const unsigned char insignficant = is_signed ? 0xff : 0x00;
723 for (i = 0; i < n; ++i, p += pincr) {
724 if (*p != insignficant)
725 break;
727 numsignificantbytes = n - i;
728 /* 2's-comp is a bit tricky here, e.g. 0xff00 == -0x0100, so
729 actually has 2 significant bytes. OTOH, 0xff0001 ==
730 -0x00ffff, so we wouldn't *need* to bump it there; but we
731 do for 0xffff = -0x0001. To be safe without bothering to
732 check every case, bump it regardless. */
733 if (is_signed && numsignificantbytes < n)
734 ++numsignificantbytes;
737 /* How many Python long digits do we need? We have
738 8*numsignificantbytes bits, and each Python long digit has
739 PyLong_SHIFT bits, so it's the ceiling of the quotient. */
740 /* catch overflow before it happens */
741 if (numsignificantbytes > (PY_SSIZE_T_MAX - PyLong_SHIFT) / 8) {
742 PyErr_SetString(PyExc_OverflowError,
743 "byte array too long to convert to int");
744 return NULL;
746 ndigits = (numsignificantbytes * 8 + PyLong_SHIFT - 1) / PyLong_SHIFT;
747 v = _PyLong_New(ndigits);
748 if (v == NULL)
749 return NULL;
751 /* Copy the bits over. The tricky parts are computing 2's-comp on
752 the fly for signed numbers, and dealing with the mismatch between
753 8-bit bytes and (probably) 15-bit Python digits.*/
755 size_t i;
756 twodigits carry = 1; /* for 2's-comp calculation */
757 twodigits accum = 0; /* sliding register */
758 unsigned int accumbits = 0; /* number of bits in accum */
759 const unsigned char* p = pstartbyte;
761 for (i = 0; i < numsignificantbytes; ++i, p += incr) {
762 twodigits thisbyte = *p;
763 /* Compute correction for 2's comp, if needed. */
764 if (is_signed) {
765 thisbyte = (0xff ^ thisbyte) + carry;
766 carry = thisbyte >> 8;
767 thisbyte &= 0xff;
769 /* Because we're going LSB to MSB, thisbyte is
770 more significant than what's already in accum,
771 so needs to be prepended to accum. */
772 accum |= (twodigits)thisbyte << accumbits;
773 accumbits += 8;
774 if (accumbits >= PyLong_SHIFT) {
775 /* There's enough to fill a Python digit. */
776 assert(idigit < ndigits);
777 v->ob_digit[idigit] = (digit)(accum &
778 PyLong_MASK);
779 ++idigit;
780 accum >>= PyLong_SHIFT;
781 accumbits -= PyLong_SHIFT;
782 assert(accumbits < PyLong_SHIFT);
785 assert(accumbits < PyLong_SHIFT);
786 if (accumbits) {
787 assert(idigit < ndigits);
788 v->ob_digit[idigit] = (digit)accum;
789 ++idigit;
793 Py_SIZE(v) = is_signed ? -idigit : idigit;
794 return (PyObject *)long_normalize(v);
798 _PyLong_AsByteArray(PyLongObject* v,
799 unsigned char* bytes, size_t n,
800 int little_endian, int is_signed)
802 Py_ssize_t i; /* index into v->ob_digit */
803 Py_ssize_t ndigits; /* |v->ob_size| */
804 twodigits accum; /* sliding register */
805 unsigned int accumbits; /* # bits in accum */
806 int do_twos_comp; /* store 2's-comp? is_signed and v < 0 */
807 digit carry; /* for computing 2's-comp */
808 size_t j; /* # bytes filled */
809 unsigned char* p; /* pointer to next byte in bytes */
810 int pincr; /* direction to move p */
812 assert(v != NULL && PyLong_Check(v));
814 if (Py_SIZE(v) < 0) {
815 ndigits = -(Py_SIZE(v));
816 if (!is_signed) {
817 PyErr_SetString(PyExc_OverflowError,
818 "can't convert negative int to unsigned");
819 return -1;
821 do_twos_comp = 1;
823 else {
824 ndigits = Py_SIZE(v);
825 do_twos_comp = 0;
828 if (little_endian) {
829 p = bytes;
830 pincr = 1;
832 else {
833 p = bytes + n - 1;
834 pincr = -1;
837 /* Copy over all the Python digits.
838 It's crucial that every Python digit except for the MSD contribute
839 exactly PyLong_SHIFT bits to the total, so first assert that the long is
840 normalized. */
841 assert(ndigits == 0 || v->ob_digit[ndigits - 1] != 0);
842 j = 0;
843 accum = 0;
844 accumbits = 0;
845 carry = do_twos_comp ? 1 : 0;
846 for (i = 0; i < ndigits; ++i) {
847 digit thisdigit = v->ob_digit[i];
848 if (do_twos_comp) {
849 thisdigit = (thisdigit ^ PyLong_MASK) + carry;
850 carry = thisdigit >> PyLong_SHIFT;
851 thisdigit &= PyLong_MASK;
853 /* Because we're going LSB to MSB, thisdigit is more
854 significant than what's already in accum, so needs to be
855 prepended to accum. */
856 accum |= (twodigits)thisdigit << accumbits;
858 /* The most-significant digit may be (probably is) at least
859 partly empty. */
860 if (i == ndigits - 1) {
861 /* Count # of sign bits -- they needn't be stored,
862 * although for signed conversion we need later to
863 * make sure at least one sign bit gets stored. */
864 digit s = do_twos_comp ? thisdigit ^ PyLong_MASK :
865 thisdigit;
866 while (s != 0) {
867 s >>= 1;
868 accumbits++;
871 else
872 accumbits += PyLong_SHIFT;
874 /* Store as many bytes as possible. */
875 while (accumbits >= 8) {
876 if (j >= n)
877 goto Overflow;
878 ++j;
879 *p = (unsigned char)(accum & 0xff);
880 p += pincr;
881 accumbits -= 8;
882 accum >>= 8;
886 /* Store the straggler (if any). */
887 assert(accumbits < 8);
888 assert(carry == 0); /* else do_twos_comp and *every* digit was 0 */
889 if (accumbits > 0) {
890 if (j >= n)
891 goto Overflow;
892 ++j;
893 if (do_twos_comp) {
894 /* Fill leading bits of the byte with sign bits
895 (appropriately pretending that the long had an
896 infinite supply of sign bits). */
897 accum |= (~(twodigits)0) << accumbits;
899 *p = (unsigned char)(accum & 0xff);
900 p += pincr;
902 else if (j == n && n > 0 && is_signed) {
903 /* The main loop filled the byte array exactly, so the code
904 just above didn't get to ensure there's a sign bit, and the
905 loop below wouldn't add one either. Make sure a sign bit
906 exists. */
907 unsigned char msb = *(p - pincr);
908 int sign_bit_set = msb >= 0x80;
909 assert(accumbits == 0);
910 if (sign_bit_set == do_twos_comp)
911 return 0;
912 else
913 goto Overflow;
916 /* Fill remaining bytes with copies of the sign bit. */
918 unsigned char signbyte = do_twos_comp ? 0xffU : 0U;
919 for ( ; j < n; ++j, p += pincr)
920 *p = signbyte;
923 return 0;
925 Overflow:
926 PyErr_SetString(PyExc_OverflowError, "int too big to convert");
927 return -1;
931 double
932 _PyLong_AsScaledDouble(PyObject *vv, int *exponent)
934 /* NBITS_WANTED should be > the number of bits in a double's precision,
935 but small enough so that 2**NBITS_WANTED is within the normal double
936 range. nbitsneeded is set to 1 less than that because the most-significant
937 Python digit contains at least 1 significant bit, but we don't want to
938 bother counting them (catering to the worst case cheaply).
940 57 is one more than VAX-D double precision; I (Tim) don't know of a double
941 format with more precision than that; it's 1 larger so that we add in at
942 least one round bit to stand in for the ignored least-significant bits.
944 #define NBITS_WANTED 57
945 PyLongObject *v;
946 double x;
947 const double multiplier = (double)(1L << PyLong_SHIFT);
948 Py_ssize_t i;
949 int sign;
950 int nbitsneeded;
952 if (vv == NULL || !PyLong_Check(vv)) {
953 PyErr_BadInternalCall();
954 return -1;
956 v = (PyLongObject *)vv;
957 i = Py_SIZE(v);
958 sign = 1;
959 if (i < 0) {
960 sign = -1;
961 i = -(i);
963 else if (i == 0) {
964 *exponent = 0;
965 return 0.0;
967 --i;
968 x = (double)v->ob_digit[i];
969 nbitsneeded = NBITS_WANTED - 1;
970 /* Invariant: i Python digits remain unaccounted for. */
971 while (i > 0 && nbitsneeded > 0) {
972 --i;
973 x = x * multiplier + (double)v->ob_digit[i];
974 nbitsneeded -= PyLong_SHIFT;
976 /* There are i digits we didn't shift in. Pretending they're all
977 zeroes, the true value is x * 2**(i*PyLong_SHIFT). */
978 *exponent = i;
979 assert(x > 0.0);
980 return x * sign;
981 #undef NBITS_WANTED
984 /* Get a C double from a long int object. Rounds to the nearest double,
985 using the round-half-to-even rule in the case of a tie. */
987 double
988 PyLong_AsDouble(PyObject *vv)
990 PyLongObject *v = (PyLongObject *)vv;
991 Py_ssize_t rnd_digit, rnd_bit, m, n;
992 digit lsb, *d;
993 int round_up = 0;
994 double x;
996 if (vv == NULL || !PyLong_Check(vv)) {
997 PyErr_BadInternalCall();
998 return -1.0;
1001 /* Notes on the method: for simplicity, assume v is positive and >=
1002 2**DBL_MANT_DIG. (For negative v we just ignore the sign until the
1003 end; for small v no rounding is necessary.) Write n for the number
1004 of bits in v, so that 2**(n-1) <= v < 2**n, and n > DBL_MANT_DIG.
1006 Some terminology: the *rounding bit* of v is the 1st bit of v that
1007 will be rounded away (bit n - DBL_MANT_DIG - 1); the *parity bit*
1008 is the bit immediately above. The round-half-to-even rule says
1009 that we round up if the rounding bit is set, unless v is exactly
1010 halfway between two floats and the parity bit is zero.
1012 Write d[0] ... d[m] for the digits of v, least to most significant.
1013 Let rnd_bit be the index of the rounding bit, and rnd_digit the
1014 index of the PyLong digit containing the rounding bit. Then the
1015 bits of the digit d[rnd_digit] look something like:
1017 rounding bit
1020 msb -> sssssrttttttttt <- lsb
1023 parity bit
1025 where 's' represents a 'significant bit' that will be included in
1026 the mantissa of the result, 'r' is the rounding bit, and 't'
1027 represents a 'trailing bit' following the rounding bit. Note that
1028 if the rounding bit is at the top of d[rnd_digit] then the parity
1029 bit will be the lsb of d[rnd_digit+1]. If we set
1031 lsb = 1 << (rnd_bit % PyLong_SHIFT)
1033 then d[rnd_digit] & (PyLong_BASE - 2*lsb) selects just the
1034 significant bits of d[rnd_digit], d[rnd_digit] & (lsb-1) gets the
1035 trailing bits, and d[rnd_digit] & lsb gives the rounding bit.
1037 We initialize the double x to the integer given by digits
1038 d[rnd_digit:m-1], but with the rounding bit and trailing bits of
1039 d[rnd_digit] masked out. So the value of x comes from the top
1040 DBL_MANT_DIG bits of v, multiplied by 2*lsb. Note that in the loop
1041 that produces x, all floating-point operations are exact (assuming
1042 that FLT_RADIX==2). Now if we're rounding down, the value we want
1043 to return is simply
1045 x * 2**(PyLong_SHIFT * rnd_digit).
1047 and if we're rounding up, it's
1049 (x + 2*lsb) * 2**(PyLong_SHIFT * rnd_digit).
1051 Under the round-half-to-even rule, we round up if, and only
1052 if, the rounding bit is set *and* at least one of the
1053 following three conditions is satisfied:
1055 (1) the parity bit is set, or
1056 (2) at least one of the trailing bits of d[rnd_digit] is set, or
1057 (3) at least one of the digits d[i], 0 <= i < rnd_digit
1058 is nonzero.
1060 Finally, we have to worry about overflow. If v >= 2**DBL_MAX_EXP,
1061 or equivalently n > DBL_MAX_EXP, then overflow occurs. If v <
1062 2**DBL_MAX_EXP then we're usually safe, but there's a corner case
1063 to consider: if v is very close to 2**DBL_MAX_EXP then it's
1064 possible that v is rounded up to exactly 2**DBL_MAX_EXP, and then
1065 again overflow occurs.
1068 if (Py_SIZE(v) == 0)
1069 return 0.0;
1070 m = ABS(Py_SIZE(v)) - 1;
1071 d = v->ob_digit;
1072 assert(d[m]); /* v should be normalized */
1074 /* fast path for case where 0 < abs(v) < 2**DBL_MANT_DIG */
1075 if (m < DBL_MANT_DIG / PyLong_SHIFT ||
1076 (m == DBL_MANT_DIG / PyLong_SHIFT &&
1077 d[m] < (digit)1 << DBL_MANT_DIG%PyLong_SHIFT)) {
1078 x = d[m];
1079 while (--m >= 0)
1080 x = x*PyLong_BASE + d[m];
1081 return Py_SIZE(v) < 0 ? -x : x;
1084 /* if m is huge then overflow immediately; otherwise, compute the
1085 number of bits n in v. The condition below implies n (= #bits) >=
1086 m * PyLong_SHIFT + 1 > DBL_MAX_EXP, hence v >= 2**DBL_MAX_EXP. */
1087 if (m > (DBL_MAX_EXP-1)/PyLong_SHIFT)
1088 goto overflow;
1089 n = m * PyLong_SHIFT + bits_in_digit(d[m]);
1090 if (n > DBL_MAX_EXP)
1091 goto overflow;
1093 /* find location of rounding bit */
1094 assert(n > DBL_MANT_DIG); /* dealt with |v| < 2**DBL_MANT_DIG above */
1095 rnd_bit = n - DBL_MANT_DIG - 1;
1096 rnd_digit = rnd_bit/PyLong_SHIFT;
1097 lsb = (digit)1 << (rnd_bit%PyLong_SHIFT);
1099 /* Get top DBL_MANT_DIG bits of v. Assumes PyLong_SHIFT <
1100 DBL_MANT_DIG, so we'll need bits from at least 2 digits of v. */
1101 x = d[m];
1102 assert(m > rnd_digit);
1103 while (--m > rnd_digit)
1104 x = x*PyLong_BASE + d[m];
1105 x = x*PyLong_BASE + (d[m] & (PyLong_BASE-2*lsb));
1107 /* decide whether to round up, using round-half-to-even */
1108 assert(m == rnd_digit);
1109 if (d[m] & lsb) { /* if (rounding bit is set) */
1110 digit parity_bit;
1111 if (lsb == PyLong_BASE/2)
1112 parity_bit = d[m+1] & 1;
1113 else
1114 parity_bit = d[m] & 2*lsb;
1115 if (parity_bit)
1116 round_up = 1;
1117 else if (d[m] & (lsb-1))
1118 round_up = 1;
1119 else {
1120 while (--m >= 0) {
1121 if (d[m]) {
1122 round_up = 1;
1123 break;
1129 /* and round up if necessary */
1130 if (round_up) {
1131 x += 2*lsb;
1132 if (n == DBL_MAX_EXP &&
1133 x == ldexp((double)(2*lsb), DBL_MANT_DIG)) {
1134 /* overflow corner case */
1135 goto overflow;
1139 /* shift, adjust for sign, and return */
1140 x = ldexp(x, rnd_digit*PyLong_SHIFT);
1141 return Py_SIZE(v) < 0 ? -x : x;
1143 overflow:
1144 PyErr_SetString(PyExc_OverflowError,
1145 "Python int too large to convert to C double");
1146 return -1.0;
1149 /* Create a new long (or int) object from a C pointer */
1151 PyObject *
1152 PyLong_FromVoidPtr(void *p)
1154 #ifndef HAVE_LONG_LONG
1155 # error "PyLong_FromVoidPtr: sizeof(void*) > sizeof(long), but no long long"
1156 #endif
1157 #if SIZEOF_LONG_LONG < SIZEOF_VOID_P
1158 # error "PyLong_FromVoidPtr: sizeof(PY_LONG_LONG) < sizeof(void*)"
1159 #endif
1160 /* special-case null pointer */
1161 if (!p)
1162 return PyLong_FromLong(0);
1163 return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG)(Py_uintptr_t)p);
1167 /* Get a C pointer from a long object (or an int object in some cases) */
1169 void *
1170 PyLong_AsVoidPtr(PyObject *vv)
1172 /* This function will allow int or long objects. If vv is neither,
1173 then the PyLong_AsLong*() functions will raise the exception:
1174 PyExc_SystemError, "bad argument to internal function"
1176 #if SIZEOF_VOID_P <= SIZEOF_LONG
1177 long x;
1179 if (PyLong_Check(vv) && _PyLong_Sign(vv) < 0)
1180 x = PyLong_AsLong(vv);
1181 else
1182 x = PyLong_AsUnsignedLong(vv);
1183 #else
1185 #ifndef HAVE_LONG_LONG
1186 # error "PyLong_AsVoidPtr: sizeof(void*) > sizeof(long), but no long long"
1187 #endif
1188 #if SIZEOF_LONG_LONG < SIZEOF_VOID_P
1189 # error "PyLong_AsVoidPtr: sizeof(PY_LONG_LONG) < sizeof(void*)"
1190 #endif
1191 PY_LONG_LONG x;
1193 if (PyLong_Check(vv) && _PyLong_Sign(vv) < 0)
1194 x = PyLong_AsLongLong(vv);
1195 else
1196 x = PyLong_AsUnsignedLongLong(vv);
1198 #endif /* SIZEOF_VOID_P <= SIZEOF_LONG */
1200 if (x == -1 && PyErr_Occurred())
1201 return NULL;
1202 return (void *)x;
1205 #ifdef HAVE_LONG_LONG
1207 /* Initial PY_LONG_LONG support by Chris Herborth (chrish@qnx.com), later
1208 * rewritten to use the newer PyLong_{As,From}ByteArray API.
1211 #define IS_LITTLE_ENDIAN (int)*(unsigned char*)&one
1213 /* Create a new long int object from a C PY_LONG_LONG int. */
1215 PyObject *
1216 PyLong_FromLongLong(PY_LONG_LONG ival)
1218 PyLongObject *v;
1219 unsigned PY_LONG_LONG abs_ival;
1220 unsigned PY_LONG_LONG t; /* unsigned so >> doesn't propagate sign bit */
1221 int ndigits = 0;
1222 int negative = 0;
1224 CHECK_SMALL_INT(ival);
1225 if (ival < 0) {
1226 /* avoid signed overflow on negation; see comments
1227 in PyLong_FromLong above. */
1228 abs_ival = (unsigned PY_LONG_LONG)(-1-ival) + 1;
1229 negative = 1;
1231 else {
1232 abs_ival = (unsigned PY_LONG_LONG)ival;
1235 /* Count the number of Python digits.
1236 We used to pick 5 ("big enough for anything"), but that's a
1237 waste of time and space given that 5*15 = 75 bits are rarely
1238 needed. */
1239 t = abs_ival;
1240 while (t) {
1241 ++ndigits;
1242 t >>= PyLong_SHIFT;
1244 v = _PyLong_New(ndigits);
1245 if (v != NULL) {
1246 digit *p = v->ob_digit;
1247 Py_SIZE(v) = negative ? -ndigits : ndigits;
1248 t = abs_ival;
1249 while (t) {
1250 *p++ = (digit)(t & PyLong_MASK);
1251 t >>= PyLong_SHIFT;
1254 return (PyObject *)v;
1257 /* Create a new long int object from a C unsigned PY_LONG_LONG int. */
1259 PyObject *
1260 PyLong_FromUnsignedLongLong(unsigned PY_LONG_LONG ival)
1262 PyLongObject *v;
1263 unsigned PY_LONG_LONG t;
1264 int ndigits = 0;
1266 if (ival < PyLong_BASE)
1267 return PyLong_FromLong((long)ival);
1268 /* Count the number of Python digits. */
1269 t = (unsigned PY_LONG_LONG)ival;
1270 while (t) {
1271 ++ndigits;
1272 t >>= PyLong_SHIFT;
1274 v = _PyLong_New(ndigits);
1275 if (v != NULL) {
1276 digit *p = v->ob_digit;
1277 Py_SIZE(v) = ndigits;
1278 while (ival) {
1279 *p++ = (digit)(ival & PyLong_MASK);
1280 ival >>= PyLong_SHIFT;
1283 return (PyObject *)v;
1286 /* Create a new long int object from a C Py_ssize_t. */
1288 PyObject *
1289 PyLong_FromSsize_t(Py_ssize_t ival)
1291 PyLongObject *v;
1292 size_t abs_ival;
1293 size_t t; /* unsigned so >> doesn't propagate sign bit */
1294 int ndigits = 0;
1295 int negative = 0;
1297 CHECK_SMALL_INT(ival);
1298 if (ival < 0) {
1299 /* avoid signed overflow when ival = SIZE_T_MIN */
1300 abs_ival = (size_t)(-1-ival)+1;
1301 negative = 1;
1303 else {
1304 abs_ival = (size_t)ival;
1307 /* Count the number of Python digits. */
1308 t = abs_ival;
1309 while (t) {
1310 ++ndigits;
1311 t >>= PyLong_SHIFT;
1313 v = _PyLong_New(ndigits);
1314 if (v != NULL) {
1315 digit *p = v->ob_digit;
1316 Py_SIZE(v) = negative ? -ndigits : ndigits;
1317 t = abs_ival;
1318 while (t) {
1319 *p++ = (digit)(t & PyLong_MASK);
1320 t >>= PyLong_SHIFT;
1323 return (PyObject *)v;
1326 /* Create a new long int object from a C size_t. */
1328 PyObject *
1329 PyLong_FromSize_t(size_t ival)
1331 PyLongObject *v;
1332 size_t t;
1333 int ndigits = 0;
1335 if (ival < PyLong_BASE)
1336 return PyLong_FromLong((long)ival);
1337 /* Count the number of Python digits. */
1338 t = ival;
1339 while (t) {
1340 ++ndigits;
1341 t >>= PyLong_SHIFT;
1343 v = _PyLong_New(ndigits);
1344 if (v != NULL) {
1345 digit *p = v->ob_digit;
1346 Py_SIZE(v) = ndigits;
1347 while (ival) {
1348 *p++ = (digit)(ival & PyLong_MASK);
1349 ival >>= PyLong_SHIFT;
1352 return (PyObject *)v;
1355 /* Get a C PY_LONG_LONG int from a long int object.
1356 Return -1 and set an error if overflow occurs. */
1358 PY_LONG_LONG
1359 PyLong_AsLongLong(PyObject *vv)
1361 PyLongObject *v;
1362 PY_LONG_LONG bytes;
1363 int one = 1;
1364 int res;
1366 if (vv == NULL) {
1367 PyErr_BadInternalCall();
1368 return -1;
1370 if (!PyLong_Check(vv)) {
1371 PyNumberMethods *nb;
1372 PyObject *io;
1373 if ((nb = vv->ob_type->tp_as_number) == NULL ||
1374 nb->nb_int == NULL) {
1375 PyErr_SetString(PyExc_TypeError, "an integer is required");
1376 return -1;
1378 io = (*nb->nb_int) (vv);
1379 if (io == NULL)
1380 return -1;
1381 if (PyLong_Check(io)) {
1382 bytes = PyLong_AsLongLong(io);
1383 Py_DECREF(io);
1384 return bytes;
1386 Py_DECREF(io);
1387 PyErr_SetString(PyExc_TypeError, "integer conversion failed");
1388 return -1;
1391 v = (PyLongObject*)vv;
1392 switch(Py_SIZE(v)) {
1393 case -1: return -(sdigit)v->ob_digit[0];
1394 case 0: return 0;
1395 case 1: return v->ob_digit[0];
1397 res = _PyLong_AsByteArray(
1398 (PyLongObject *)vv, (unsigned char *)&bytes,
1399 SIZEOF_LONG_LONG, IS_LITTLE_ENDIAN, 1);
1401 /* Plan 9 can't handle PY_LONG_LONG in ? : expressions */
1402 if (res < 0)
1403 return (PY_LONG_LONG)-1;
1404 else
1405 return bytes;
1408 /* Get a C unsigned PY_LONG_LONG int from a long int object.
1409 Return -1 and set an error if overflow occurs. */
1411 unsigned PY_LONG_LONG
1412 PyLong_AsUnsignedLongLong(PyObject *vv)
1414 PyLongObject *v;
1415 unsigned PY_LONG_LONG bytes;
1416 int one = 1;
1417 int res;
1419 if (vv == NULL || !PyLong_Check(vv)) {
1420 PyErr_BadInternalCall();
1421 return (unsigned PY_LONG_LONG)-1;
1424 v = (PyLongObject*)vv;
1425 switch(Py_SIZE(v)) {
1426 case 0: return 0;
1427 case 1: return v->ob_digit[0];
1430 res = _PyLong_AsByteArray(
1431 (PyLongObject *)vv, (unsigned char *)&bytes,
1432 SIZEOF_LONG_LONG, IS_LITTLE_ENDIAN, 0);
1434 /* Plan 9 can't handle PY_LONG_LONG in ? : expressions */
1435 if (res < 0)
1436 return (unsigned PY_LONG_LONG)res;
1437 else
1438 return bytes;
1441 /* Get a C unsigned long int from a long int object, ignoring the high bits.
1442 Returns -1 and sets an error condition if an error occurs. */
1444 static unsigned PY_LONG_LONG
1445 _PyLong_AsUnsignedLongLongMask(PyObject *vv)
1447 register PyLongObject *v;
1448 unsigned PY_LONG_LONG x;
1449 Py_ssize_t i;
1450 int sign;
1452 if (vv == NULL || !PyLong_Check(vv)) {
1453 PyErr_BadInternalCall();
1454 return (unsigned long) -1;
1456 v = (PyLongObject *)vv;
1457 switch(Py_SIZE(v)) {
1458 case 0: return 0;
1459 case 1: return v->ob_digit[0];
1461 i = Py_SIZE(v);
1462 sign = 1;
1463 x = 0;
1464 if (i < 0) {
1465 sign = -1;
1466 i = -i;
1468 while (--i >= 0) {
1469 x = (x << PyLong_SHIFT) + v->ob_digit[i];
1471 return x * sign;
1474 unsigned PY_LONG_LONG
1475 PyLong_AsUnsignedLongLongMask(register PyObject *op)
1477 PyNumberMethods *nb;
1478 PyLongObject *lo;
1479 unsigned PY_LONG_LONG val;
1481 if (op && PyLong_Check(op))
1482 return _PyLong_AsUnsignedLongLongMask(op);
1484 if (op == NULL || (nb = op->ob_type->tp_as_number) == NULL ||
1485 nb->nb_int == NULL) {
1486 PyErr_SetString(PyExc_TypeError, "an integer is required");
1487 return (unsigned PY_LONG_LONG)-1;
1490 lo = (PyLongObject*) (*nb->nb_int) (op);
1491 if (lo == NULL)
1492 return (unsigned PY_LONG_LONG)-1;
1493 if (PyLong_Check(lo)) {
1494 val = _PyLong_AsUnsignedLongLongMask((PyObject *)lo);
1495 Py_DECREF(lo);
1496 if (PyErr_Occurred())
1497 return (unsigned PY_LONG_LONG)-1;
1498 return val;
1500 else
1502 Py_DECREF(lo);
1503 PyErr_SetString(PyExc_TypeError,
1504 "nb_int should return int object");
1505 return (unsigned PY_LONG_LONG)-1;
1508 #undef IS_LITTLE_ENDIAN
1510 #endif /* HAVE_LONG_LONG */
1512 #define CHECK_BINOP(v,w) \
1513 if (!PyLong_Check(v) || !PyLong_Check(w)) { \
1514 Py_INCREF(Py_NotImplemented); \
1515 return Py_NotImplemented; \
1518 /* bits_in_digit(d) returns the unique integer k such that 2**(k-1) <= d <
1519 2**k if d is nonzero, else 0. */
1521 static const unsigned char BitLengthTable[32] = {
1522 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
1523 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
1526 static int
1527 bits_in_digit(digit d)
1529 int d_bits = 0;
1530 while (d >= 32) {
1531 d_bits += 6;
1532 d >>= 6;
1534 d_bits += (int)BitLengthTable[d];
1535 return d_bits;
1538 /* x[0:m] and y[0:n] are digit vectors, LSD first, m >= n required. x[0:n]
1539 * is modified in place, by adding y to it. Carries are propagated as far as
1540 * x[m-1], and the remaining carry (0 or 1) is returned.
1542 static digit
1543 v_iadd(digit *x, Py_ssize_t m, digit *y, Py_ssize_t n)
1545 Py_ssize_t i;
1546 digit carry = 0;
1548 assert(m >= n);
1549 for (i = 0; i < n; ++i) {
1550 carry += x[i] + y[i];
1551 x[i] = carry & PyLong_MASK;
1552 carry >>= PyLong_SHIFT;
1553 assert((carry & 1) == carry);
1555 for (; carry && i < m; ++i) {
1556 carry += x[i];
1557 x[i] = carry & PyLong_MASK;
1558 carry >>= PyLong_SHIFT;
1559 assert((carry & 1) == carry);
1561 return carry;
1564 /* x[0:m] and y[0:n] are digit vectors, LSD first, m >= n required. x[0:n]
1565 * is modified in place, by subtracting y from it. Borrows are propagated as
1566 * far as x[m-1], and the remaining borrow (0 or 1) is returned.
1568 static digit
1569 v_isub(digit *x, Py_ssize_t m, digit *y, Py_ssize_t n)
1571 Py_ssize_t i;
1572 digit borrow = 0;
1574 assert(m >= n);
1575 for (i = 0; i < n; ++i) {
1576 borrow = x[i] - y[i] - borrow;
1577 x[i] = borrow & PyLong_MASK;
1578 borrow >>= PyLong_SHIFT;
1579 borrow &= 1; /* keep only 1 sign bit */
1581 for (; borrow && i < m; ++i) {
1582 borrow = x[i] - borrow;
1583 x[i] = borrow & PyLong_MASK;
1584 borrow >>= PyLong_SHIFT;
1585 borrow &= 1;
1587 return borrow;
1590 /* Shift digit vector a[0:m] d bits left, with 0 <= d < PyLong_SHIFT. Put
1591 * result in z[0:m], and return the d bits shifted out of the top.
1593 static digit
1594 v_lshift(digit *z, digit *a, Py_ssize_t m, int d)
1596 Py_ssize_t i;
1597 digit carry = 0;
1599 assert(0 <= d && d < PyLong_SHIFT);
1600 for (i=0; i < m; i++) {
1601 twodigits acc = (twodigits)a[i] << d | carry;
1602 z[i] = (digit)acc & PyLong_MASK;
1603 carry = (digit)(acc >> PyLong_SHIFT);
1605 return carry;
1608 /* Shift digit vector a[0:m] d bits right, with 0 <= d < PyLong_SHIFT. Put
1609 * result in z[0:m], and return the d bits shifted out of the bottom.
1611 static digit
1612 v_rshift(digit *z, digit *a, Py_ssize_t m, int d)
1614 Py_ssize_t i;
1615 digit carry = 0;
1616 digit mask = ((digit)1 << d) - 1U;
1618 assert(0 <= d && d < PyLong_SHIFT);
1619 for (i=m; i-- > 0;) {
1620 twodigits acc = (twodigits)carry << PyLong_SHIFT | a[i];
1621 carry = (digit)acc & mask;
1622 z[i] = (digit)(acc >> d);
1624 return carry;
1627 /* Divide long pin, w/ size digits, by non-zero digit n, storing quotient
1628 in pout, and returning the remainder. pin and pout point at the LSD.
1629 It's OK for pin == pout on entry, which saves oodles of mallocs/frees in
1630 _PyLong_Format, but that should be done with great care since longs are
1631 immutable. */
1633 static digit
1634 inplace_divrem1(digit *pout, digit *pin, Py_ssize_t size, digit n)
1636 twodigits rem = 0;
1638 assert(n > 0 && n <= PyLong_MASK);
1639 pin += size;
1640 pout += size;
1641 while (--size >= 0) {
1642 digit hi;
1643 rem = (rem << PyLong_SHIFT) + *--pin;
1644 *--pout = hi = (digit)(rem / n);
1645 rem -= (twodigits)hi * n;
1647 return (digit)rem;
1650 /* Divide a long integer by a digit, returning both the quotient
1651 (as function result) and the remainder (through *prem).
1652 The sign of a is ignored; n should not be zero. */
1654 static PyLongObject *
1655 divrem1(PyLongObject *a, digit n, digit *prem)
1657 const Py_ssize_t size = ABS(Py_SIZE(a));
1658 PyLongObject *z;
1660 assert(n > 0 && n <= PyLong_MASK);
1661 z = _PyLong_New(size);
1662 if (z == NULL)
1663 return NULL;
1664 *prem = inplace_divrem1(z->ob_digit, a->ob_digit, size, n);
1665 return long_normalize(z);
1668 /* Convert a long int object to a string, using a given conversion base.
1669 Return a string object.
1670 If base is 2, 8 or 16, add the proper prefix '0b', '0o' or '0x'. */
1672 PyObject *
1673 _PyLong_Format(PyObject *aa, int base)
1675 register PyLongObject *a = (PyLongObject *)aa;
1676 PyObject *str;
1677 Py_ssize_t i, sz;
1678 Py_ssize_t size_a;
1679 Py_UNICODE *p;
1680 int bits;
1681 char sign = '\0';
1683 if (a == NULL || !PyLong_Check(a)) {
1684 PyErr_BadInternalCall();
1685 return NULL;
1687 assert(base >= 2 && base <= 36);
1688 size_a = ABS(Py_SIZE(a));
1690 /* Compute a rough upper bound for the length of the string */
1691 i = base;
1692 bits = 0;
1693 while (i > 1) {
1694 ++bits;
1695 i >>= 1;
1697 i = 5;
1698 /* ensure we don't get signed overflow in sz calculation */
1699 if (size_a > (PY_SSIZE_T_MAX - i) / PyLong_SHIFT) {
1700 PyErr_SetString(PyExc_OverflowError,
1701 "int is too large to format");
1702 return NULL;
1704 sz = i + 1 + (size_a * PyLong_SHIFT - 1) / bits;
1705 assert(sz >= 0);
1706 str = PyUnicode_FromUnicode(NULL, sz);
1707 if (str == NULL)
1708 return NULL;
1709 p = PyUnicode_AS_UNICODE(str) + sz;
1710 *p = '\0';
1711 if (Py_SIZE(a) < 0)
1712 sign = '-';
1714 if (Py_SIZE(a) == 0) {
1715 *--p = '0';
1717 else if ((base & (base - 1)) == 0) {
1718 /* JRH: special case for power-of-2 bases */
1719 twodigits accum = 0;
1720 int accumbits = 0; /* # of bits in accum */
1721 int basebits = 1; /* # of bits in base-1 */
1722 i = base;
1723 while ((i >>= 1) > 1)
1724 ++basebits;
1726 for (i = 0; i < size_a; ++i) {
1727 accum |= (twodigits)a->ob_digit[i] << accumbits;
1728 accumbits += PyLong_SHIFT;
1729 assert(accumbits >= basebits);
1730 do {
1731 char cdigit = (char)(accum & (base - 1));
1732 cdigit += (cdigit < 10) ? '0' : 'a'-10;
1733 assert(p > PyUnicode_AS_UNICODE(str));
1734 *--p = cdigit;
1735 accumbits -= basebits;
1736 accum >>= basebits;
1737 } while (i < size_a-1 ? accumbits >= basebits :
1738 accum > 0);
1741 else {
1742 /* Not 0, and base not a power of 2. Divide repeatedly by
1743 base, but for speed use the highest power of base that
1744 fits in a digit. */
1745 Py_ssize_t size = size_a;
1746 digit *pin = a->ob_digit;
1747 PyLongObject *scratch;
1748 /* powbasw <- largest power of base that fits in a digit. */
1749 digit powbase = base; /* powbase == base ** power */
1750 int power = 1;
1751 for (;;) {
1752 twodigits newpow = powbase * (twodigits)base;
1753 if (newpow >> PyLong_SHIFT)
1754 /* doesn't fit in a digit */
1755 break;
1756 powbase = (digit)newpow;
1757 ++power;
1760 /* Get a scratch area for repeated division. */
1761 scratch = _PyLong_New(size);
1762 if (scratch == NULL) {
1763 Py_DECREF(str);
1764 return NULL;
1767 /* Repeatedly divide by powbase. */
1768 do {
1769 int ntostore = power;
1770 digit rem = inplace_divrem1(scratch->ob_digit,
1771 pin, size, powbase);
1772 pin = scratch->ob_digit; /* no need to use a again */
1773 if (pin[size - 1] == 0)
1774 --size;
1775 SIGCHECK({
1776 Py_DECREF(scratch);
1777 Py_DECREF(str);
1778 return NULL;
1781 /* Break rem into digits. */
1782 assert(ntostore > 0);
1783 do {
1784 digit nextrem = (digit)(rem / base);
1785 char c = (char)(rem - nextrem * base);
1786 assert(p > PyUnicode_AS_UNICODE(str));
1787 c += (c < 10) ? '0' : 'a'-10;
1788 *--p = c;
1789 rem = nextrem;
1790 --ntostore;
1791 /* Termination is a bit delicate: must not
1792 store leading zeroes, so must get out if
1793 remaining quotient and rem are both 0. */
1794 } while (ntostore && (size || rem));
1795 } while (size != 0);
1796 Py_DECREF(scratch);
1799 if (base == 16) {
1800 *--p = 'x';
1801 *--p = '0';
1803 else if (base == 8) {
1804 *--p = 'o';
1805 *--p = '0';
1807 else if (base == 2) {
1808 *--p = 'b';
1809 *--p = '0';
1811 else if (base != 10) {
1812 *--p = '#';
1813 *--p = '0' + base%10;
1814 if (base > 10)
1815 *--p = '0' + base/10;
1817 if (sign)
1818 *--p = sign;
1819 if (p != PyUnicode_AS_UNICODE(str)) {
1820 Py_UNICODE *q = PyUnicode_AS_UNICODE(str);
1821 assert(p > q);
1822 do {
1823 } while ((*q++ = *p++) != '\0');
1824 q--;
1825 if (PyUnicode_Resize(&str,(Py_ssize_t) (q -
1826 PyUnicode_AS_UNICODE(str)))) {
1827 Py_DECREF(str);
1828 return NULL;
1831 return (PyObject *)str;
1834 /* Table of digit values for 8-bit string -> integer conversion.
1835 * '0' maps to 0, ..., '9' maps to 9.
1836 * 'a' and 'A' map to 10, ..., 'z' and 'Z' map to 35.
1837 * All other indices map to 37.
1838 * Note that when converting a base B string, a char c is a legitimate
1839 * base B digit iff _PyLong_DigitValue[Py_CHARPyLong_MASK(c)] < B.
1841 unsigned char _PyLong_DigitValue[256] = {
1842 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1843 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1844 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1845 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 37, 37, 37, 37, 37, 37,
1846 37, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1847 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 37, 37, 37, 37, 37,
1848 37, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1849 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 37, 37, 37, 37, 37,
1850 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1851 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1852 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1853 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1854 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1855 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1856 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1857 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1860 /* *str points to the first digit in a string of base `base` digits. base
1861 * is a power of 2 (2, 4, 8, 16, or 32). *str is set to point to the first
1862 * non-digit (which may be *str!). A normalized long is returned.
1863 * The point to this routine is that it takes time linear in the number of
1864 * string characters.
1866 static PyLongObject *
1867 long_from_binary_base(char **str, int base)
1869 char *p = *str;
1870 char *start = p;
1871 int bits_per_char;
1872 Py_ssize_t n;
1873 PyLongObject *z;
1874 twodigits accum;
1875 int bits_in_accum;
1876 digit *pdigit;
1878 assert(base >= 2 && base <= 32 && (base & (base - 1)) == 0);
1879 n = base;
1880 for (bits_per_char = -1; n; ++bits_per_char)
1881 n >>= 1;
1882 /* n <- total # of bits needed, while setting p to end-of-string */
1883 while (_PyLong_DigitValue[Py_CHARMASK(*p)] < base)
1884 ++p;
1885 *str = p;
1886 /* n <- # of Python digits needed, = ceiling(n/PyLong_SHIFT). */
1887 n = (p - start) * bits_per_char + PyLong_SHIFT - 1;
1888 if (n / bits_per_char < p - start) {
1889 PyErr_SetString(PyExc_ValueError,
1890 "int string too large to convert");
1891 return NULL;
1893 n = n / PyLong_SHIFT;
1894 z = _PyLong_New(n);
1895 if (z == NULL)
1896 return NULL;
1897 /* Read string from right, and fill in long from left; i.e.,
1898 * from least to most significant in both.
1900 accum = 0;
1901 bits_in_accum = 0;
1902 pdigit = z->ob_digit;
1903 while (--p >= start) {
1904 int k = (int)_PyLong_DigitValue[Py_CHARMASK(*p)];
1905 assert(k >= 0 && k < base);
1906 accum |= (twodigits)k << bits_in_accum;
1907 bits_in_accum += bits_per_char;
1908 if (bits_in_accum >= PyLong_SHIFT) {
1909 *pdigit++ = (digit)(accum & PyLong_MASK);
1910 assert(pdigit - z->ob_digit <= n);
1911 accum >>= PyLong_SHIFT;
1912 bits_in_accum -= PyLong_SHIFT;
1913 assert(bits_in_accum < PyLong_SHIFT);
1916 if (bits_in_accum) {
1917 assert(bits_in_accum <= PyLong_SHIFT);
1918 *pdigit++ = (digit)accum;
1919 assert(pdigit - z->ob_digit <= n);
1921 while (pdigit - z->ob_digit < n)
1922 *pdigit++ = 0;
1923 return long_normalize(z);
1926 PyObject *
1927 PyLong_FromString(char *str, char **pend, int base)
1929 int sign = 1, error_if_nonzero = 0;
1930 char *start, *orig_str = str;
1931 PyLongObject *z = NULL;
1932 PyObject *strobj;
1933 Py_ssize_t slen;
1935 if ((base != 0 && base < 2) || base > 36) {
1936 PyErr_SetString(PyExc_ValueError,
1937 "int() arg 2 must be >= 2 and <= 36");
1938 return NULL;
1940 while (*str != '\0' && isspace(Py_CHARMASK(*str)))
1941 str++;
1942 if (*str == '+')
1943 ++str;
1944 else if (*str == '-') {
1945 ++str;
1946 sign = -1;
1948 if (base == 0) {
1949 if (str[0] != '0')
1950 base = 10;
1951 else if (str[1] == 'x' || str[1] == 'X')
1952 base = 16;
1953 else if (str[1] == 'o' || str[1] == 'O')
1954 base = 8;
1955 else if (str[1] == 'b' || str[1] == 'B')
1956 base = 2;
1957 else {
1958 /* "old" (C-style) octal literal, now invalid.
1959 it might still be zero though */
1960 error_if_nonzero = 1;
1961 base = 10;
1964 if (str[0] == '0' &&
1965 ((base == 16 && (str[1] == 'x' || str[1] == 'X')) ||
1966 (base == 8 && (str[1] == 'o' || str[1] == 'O')) ||
1967 (base == 2 && (str[1] == 'b' || str[1] == 'B'))))
1968 str += 2;
1970 start = str;
1971 if ((base & (base - 1)) == 0)
1972 z = long_from_binary_base(&str, base);
1973 else {
1974 /***
1975 Binary bases can be converted in time linear in the number of digits, because
1976 Python's representation base is binary. Other bases (including decimal!) use
1977 the simple quadratic-time algorithm below, complicated by some speed tricks.
1979 First some math: the largest integer that can be expressed in N base-B digits
1980 is B**N-1. Consequently, if we have an N-digit input in base B, the worst-
1981 case number of Python digits needed to hold it is the smallest integer n s.t.
1983 BASE**n-1 >= B**N-1 [or, adding 1 to both sides]
1984 BASE**n >= B**N [taking logs to base BASE]
1985 n >= log(B**N)/log(BASE) = N * log(B)/log(BASE)
1987 The static array log_base_BASE[base] == log(base)/log(BASE) so we can compute
1988 this quickly. A Python long with that much space is reserved near the start,
1989 and the result is computed into it.
1991 The input string is actually treated as being in base base**i (i.e., i digits
1992 are processed at a time), where two more static arrays hold:
1994 convwidth_base[base] = the largest integer i such that base**i <= BASE
1995 convmultmax_base[base] = base ** convwidth_base[base]
1997 The first of these is the largest i such that i consecutive input digits
1998 must fit in a single Python digit. The second is effectively the input
1999 base we're really using.
2001 Viewing the input as a sequence <c0, c1, ..., c_n-1> of digits in base
2002 convmultmax_base[base], the result is "simply"
2004 (((c0*B + c1)*B + c2)*B + c3)*B + ... ))) + c_n-1
2006 where B = convmultmax_base[base].
2008 Error analysis: as above, the number of Python digits `n` needed is worst-
2009 case
2011 n >= N * log(B)/log(BASE)
2013 where `N` is the number of input digits in base `B`. This is computed via
2015 size_z = (Py_ssize_t)((scan - str) * log_base_BASE[base]) + 1;
2017 below. Two numeric concerns are how much space this can waste, and whether
2018 the computed result can be too small. To be concrete, assume BASE = 2**15,
2019 which is the default (and it's unlikely anyone changes that).
2021 Waste isn't a problem: provided the first input digit isn't 0, the difference
2022 between the worst-case input with N digits and the smallest input with N
2023 digits is about a factor of B, but B is small compared to BASE so at most
2024 one allocated Python digit can remain unused on that count. If
2025 N*log(B)/log(BASE) is mathematically an exact integer, then truncating that
2026 and adding 1 returns a result 1 larger than necessary. However, that can't
2027 happen: whenever B is a power of 2, long_from_binary_base() is called
2028 instead, and it's impossible for B**i to be an integer power of 2**15 when
2029 B is not a power of 2 (i.e., it's impossible for N*log(B)/log(BASE) to be
2030 an exact integer when B is not a power of 2, since B**i has a prime factor
2031 other than 2 in that case, but (2**15)**j's only prime factor is 2).
2033 The computed result can be too small if the true value of N*log(B)/log(BASE)
2034 is a little bit larger than an exact integer, but due to roundoff errors (in
2035 computing log(B), log(BASE), their quotient, and/or multiplying that by N)
2036 yields a numeric result a little less than that integer. Unfortunately, "how
2037 close can a transcendental function get to an integer over some range?"
2038 questions are generally theoretically intractable. Computer analysis via
2039 continued fractions is practical: expand log(B)/log(BASE) via continued
2040 fractions, giving a sequence i/j of "the best" rational approximations. Then
2041 j*log(B)/log(BASE) is approximately equal to (the integer) i. This shows that
2042 we can get very close to being in trouble, but very rarely. For example,
2043 76573 is a denominator in one of the continued-fraction approximations to
2044 log(10)/log(2**15), and indeed:
2046 >>> log(10)/log(2**15)*76573
2047 16958.000000654003
2049 is very close to an integer. If we were working with IEEE single-precision,
2050 rounding errors could kill us. Finding worst cases in IEEE double-precision
2051 requires better-than-double-precision log() functions, and Tim didn't bother.
2052 Instead the code checks to see whether the allocated space is enough as each
2053 new Python digit is added, and copies the whole thing to a larger long if not.
2054 This should happen extremely rarely, and in fact I don't have a test case
2055 that triggers it(!). Instead the code was tested by artificially allocating
2056 just 1 digit at the start, so that the copying code was exercised for every
2057 digit beyond the first.
2058 ***/
2059 register twodigits c; /* current input character */
2060 Py_ssize_t size_z;
2061 int i;
2062 int convwidth;
2063 twodigits convmultmax, convmult;
2064 digit *pz, *pzstop;
2065 char* scan;
2067 static double log_base_BASE[37] = {0.0e0,};
2068 static int convwidth_base[37] = {0,};
2069 static twodigits convmultmax_base[37] = {0,};
2071 if (log_base_BASE[base] == 0.0) {
2072 twodigits convmax = base;
2073 int i = 1;
2075 log_base_BASE[base] = log((double)base) /
2076 log((double)PyLong_BASE);
2077 for (;;) {
2078 twodigits next = convmax * base;
2079 if (next > PyLong_BASE)
2080 break;
2081 convmax = next;
2082 ++i;
2084 convmultmax_base[base] = convmax;
2085 assert(i > 0);
2086 convwidth_base[base] = i;
2089 /* Find length of the string of numeric characters. */
2090 scan = str;
2091 while (_PyLong_DigitValue[Py_CHARMASK(*scan)] < base)
2092 ++scan;
2094 /* Create a long object that can contain the largest possible
2095 * integer with this base and length. Note that there's no
2096 * need to initialize z->ob_digit -- no slot is read up before
2097 * being stored into.
2099 size_z = (Py_ssize_t)((scan - str) * log_base_BASE[base]) + 1;
2100 /* Uncomment next line to test exceedingly rare copy code */
2101 /* size_z = 1; */
2102 assert(size_z > 0);
2103 z = _PyLong_New(size_z);
2104 if (z == NULL)
2105 return NULL;
2106 Py_SIZE(z) = 0;
2108 /* `convwidth` consecutive input digits are treated as a single
2109 * digit in base `convmultmax`.
2111 convwidth = convwidth_base[base];
2112 convmultmax = convmultmax_base[base];
2114 /* Work ;-) */
2115 while (str < scan) {
2116 /* grab up to convwidth digits from the input string */
2117 c = (digit)_PyLong_DigitValue[Py_CHARMASK(*str++)];
2118 for (i = 1; i < convwidth && str != scan; ++i, ++str) {
2119 c = (twodigits)(c * base +
2120 (int)_PyLong_DigitValue[Py_CHARMASK(*str)]);
2121 assert(c < PyLong_BASE);
2124 convmult = convmultmax;
2125 /* Calculate the shift only if we couldn't get
2126 * convwidth digits.
2128 if (i != convwidth) {
2129 convmult = base;
2130 for ( ; i > 1; --i)
2131 convmult *= base;
2134 /* Multiply z by convmult, and add c. */
2135 pz = z->ob_digit;
2136 pzstop = pz + Py_SIZE(z);
2137 for (; pz < pzstop; ++pz) {
2138 c += (twodigits)*pz * convmult;
2139 *pz = (digit)(c & PyLong_MASK);
2140 c >>= PyLong_SHIFT;
2142 /* carry off the current end? */
2143 if (c) {
2144 assert(c < PyLong_BASE);
2145 if (Py_SIZE(z) < size_z) {
2146 *pz = (digit)c;
2147 ++Py_SIZE(z);
2149 else {
2150 PyLongObject *tmp;
2151 /* Extremely rare. Get more space. */
2152 assert(Py_SIZE(z) == size_z);
2153 tmp = _PyLong_New(size_z + 1);
2154 if (tmp == NULL) {
2155 Py_DECREF(z);
2156 return NULL;
2158 memcpy(tmp->ob_digit,
2159 z->ob_digit,
2160 sizeof(digit) * size_z);
2161 Py_DECREF(z);
2162 z = tmp;
2163 z->ob_digit[size_z] = (digit)c;
2164 ++size_z;
2169 if (z == NULL)
2170 return NULL;
2171 if (error_if_nonzero) {
2172 /* reset the base to 0, else the exception message
2173 doesn't make too much sense */
2174 base = 0;
2175 if (Py_SIZE(z) != 0)
2176 goto onError;
2177 /* there might still be other problems, therefore base
2178 remains zero here for the same reason */
2180 if (str == start)
2181 goto onError;
2182 if (sign < 0)
2183 Py_SIZE(z) = -(Py_SIZE(z));
2184 while (*str && isspace(Py_CHARMASK(*str)))
2185 str++;
2186 if (*str != '\0')
2187 goto onError;
2188 if (pend)
2189 *pend = str;
2190 long_normalize(z);
2191 return (PyObject *) maybe_small_long(z);
2193 onError:
2194 Py_XDECREF(z);
2195 slen = strlen(orig_str) < 200 ? strlen(orig_str) : 200;
2196 strobj = PyUnicode_FromStringAndSize(orig_str, slen);
2197 if (strobj == NULL)
2198 return NULL;
2199 PyErr_Format(PyExc_ValueError,
2200 "invalid literal for int() with base %d: %R",
2201 base, strobj);
2202 Py_DECREF(strobj);
2203 return NULL;
2206 PyObject *
2207 PyLong_FromUnicode(Py_UNICODE *u, Py_ssize_t length, int base)
2209 PyObject *result;
2210 char *buffer = (char *)PyMem_MALLOC(length+1);
2212 if (buffer == NULL)
2213 return NULL;
2215 if (PyUnicode_EncodeDecimal(u, length, buffer, NULL)) {
2216 PyMem_FREE(buffer);
2217 return NULL;
2219 result = PyLong_FromString(buffer, NULL, base);
2220 PyMem_FREE(buffer);
2221 return result;
2224 /* forward */
2225 static PyLongObject *x_divrem
2226 (PyLongObject *, PyLongObject *, PyLongObject **);
2227 static PyObject *long_long(PyObject *v);
2229 /* Long division with remainder, top-level routine */
2231 static int
2232 long_divrem(PyLongObject *a, PyLongObject *b,
2233 PyLongObject **pdiv, PyLongObject **prem)
2235 Py_ssize_t size_a = ABS(Py_SIZE(a)), size_b = ABS(Py_SIZE(b));
2236 PyLongObject *z;
2238 if (size_b == 0) {
2239 PyErr_SetString(PyExc_ZeroDivisionError,
2240 "integer division or modulo by zero");
2241 return -1;
2243 if (size_a < size_b ||
2244 (size_a == size_b &&
2245 a->ob_digit[size_a-1] < b->ob_digit[size_b-1])) {
2246 /* |a| < |b|. */
2247 *pdiv = (PyLongObject*)PyLong_FromLong(0);
2248 if (*pdiv == NULL)
2249 return -1;
2250 Py_INCREF(a);
2251 *prem = (PyLongObject *) a;
2252 return 0;
2254 if (size_b == 1) {
2255 digit rem = 0;
2256 z = divrem1(a, b->ob_digit[0], &rem);
2257 if (z == NULL)
2258 return -1;
2259 *prem = (PyLongObject *) PyLong_FromLong((long)rem);
2260 if (*prem == NULL) {
2261 Py_DECREF(z);
2262 return -1;
2265 else {
2266 z = x_divrem(a, b, prem);
2267 if (z == NULL)
2268 return -1;
2270 /* Set the signs.
2271 The quotient z has the sign of a*b;
2272 the remainder r has the sign of a,
2273 so a = b*z + r. */
2274 if ((Py_SIZE(a) < 0) != (Py_SIZE(b) < 0))
2275 NEGATE(z);
2276 if (Py_SIZE(a) < 0 && Py_SIZE(*prem) != 0)
2277 NEGATE(*prem);
2278 *pdiv = maybe_small_long(z);
2279 return 0;
2282 /* Unsigned long division with remainder -- the algorithm. The arguments v1
2283 and w1 should satisfy 2 <= ABS(Py_SIZE(w1)) <= ABS(Py_SIZE(v1)). */
2285 static PyLongObject *
2286 x_divrem(PyLongObject *v1, PyLongObject *w1, PyLongObject **prem)
2288 PyLongObject *v, *w, *a;
2289 Py_ssize_t i, k, size_v, size_w;
2290 int d;
2291 digit wm1, wm2, carry, q, r, vtop, *v0, *vk, *w0, *ak;
2292 twodigits vv;
2293 sdigit zhi;
2294 stwodigits z;
2296 /* We follow Knuth [The Art of Computer Programming, Vol. 2 (3rd
2297 edn.), section 4.3.1, Algorithm D], except that we don't explicitly
2298 handle the special case when the initial estimate q for a quotient
2299 digit is >= PyLong_BASE: the max value for q is PyLong_BASE+1, and
2300 that won't overflow a digit. */
2302 /* allocate space; w will also be used to hold the final remainder */
2303 size_v = ABS(Py_SIZE(v1));
2304 size_w = ABS(Py_SIZE(w1));
2305 assert(size_v >= size_w && size_w >= 2); /* Assert checks by div() */
2306 v = _PyLong_New(size_v+1);
2307 if (v == NULL) {
2308 *prem = NULL;
2309 return NULL;
2311 w = _PyLong_New(size_w);
2312 if (w == NULL) {
2313 Py_DECREF(v);
2314 *prem = NULL;
2315 return NULL;
2318 /* normalize: shift w1 left so that its top digit is >= PyLong_BASE/2.
2319 shift v1 left by the same amount. Results go into w and v. */
2320 d = PyLong_SHIFT - bits_in_digit(w1->ob_digit[size_w-1]);
2321 carry = v_lshift(w->ob_digit, w1->ob_digit, size_w, d);
2322 assert(carry == 0);
2323 carry = v_lshift(v->ob_digit, v1->ob_digit, size_v, d);
2324 if (carry != 0 || v->ob_digit[size_v-1] >= w->ob_digit[size_w-1]) {
2325 v->ob_digit[size_v] = carry;
2326 size_v++;
2329 /* Now v->ob_digit[size_v-1] < w->ob_digit[size_w-1], so quotient has
2330 at most (and usually exactly) k = size_v - size_w digits. */
2331 k = size_v - size_w;
2332 assert(k >= 0);
2333 a = _PyLong_New(k);
2334 if (a == NULL) {
2335 Py_DECREF(w);
2336 Py_DECREF(v);
2337 *prem = NULL;
2338 return NULL;
2340 v0 = v->ob_digit;
2341 w0 = w->ob_digit;
2342 wm1 = w0[size_w-1];
2343 wm2 = w0[size_w-2];
2344 for (vk = v0+k, ak = a->ob_digit + k; vk-- > v0;) {
2345 /* inner loop: divide vk[0:size_w+1] by w0[0:size_w], giving
2346 single-digit quotient q, remainder in vk[0:size_w]. */
2348 SIGCHECK({
2349 Py_DECREF(a);
2350 Py_DECREF(w);
2351 Py_DECREF(v);
2352 *prem = NULL;
2353 return NULL;
2356 /* estimate quotient digit q; may overestimate by 1 (rare) */
2357 vtop = vk[size_w];
2358 assert(vtop <= wm1);
2359 vv = ((twodigits)vtop << PyLong_SHIFT) | vk[size_w-1];
2360 q = (digit)(vv / wm1);
2361 r = (digit)(vv - (twodigits)wm1 * q); /* r = vv % wm1 */
2362 while ((twodigits)wm2 * q > (((twodigits)r << PyLong_SHIFT)
2363 | vk[size_w-2])) {
2364 --q;
2365 r += wm1;
2366 if (r >= PyLong_BASE)
2367 break;
2369 assert(q <= PyLong_BASE);
2371 /* subtract q*w0[0:size_w] from vk[0:size_w+1] */
2372 zhi = 0;
2373 for (i = 0; i < size_w; ++i) {
2374 /* invariants: -PyLong_BASE <= -q <= zhi <= 0;
2375 -PyLong_BASE * q <= z < PyLong_BASE */
2376 z = (sdigit)vk[i] + zhi -
2377 (stwodigits)q * (stwodigits)w0[i];
2378 vk[i] = (digit)z & PyLong_MASK;
2379 zhi = (sdigit)Py_ARITHMETIC_RIGHT_SHIFT(stwodigits,
2380 z, PyLong_SHIFT);
2383 /* add w back if q was too large (this branch taken rarely) */
2384 assert((sdigit)vtop + zhi == -1 || (sdigit)vtop + zhi == 0);
2385 if ((sdigit)vtop + zhi < 0) {
2386 carry = 0;
2387 for (i = 0; i < size_w; ++i) {
2388 carry += vk[i] + w0[i];
2389 vk[i] = carry & PyLong_MASK;
2390 carry >>= PyLong_SHIFT;
2392 --q;
2395 /* store quotient digit */
2396 assert(q < PyLong_BASE);
2397 *--ak = q;
2400 /* unshift remainder; we reuse w to store the result */
2401 carry = v_rshift(w0, v0, size_w, d);
2402 assert(carry==0);
2403 Py_DECREF(v);
2405 *prem = long_normalize(w);
2406 return long_normalize(a);
2409 /* Methods */
2411 static void
2412 long_dealloc(PyObject *v)
2414 Py_TYPE(v)->tp_free(v);
2417 static PyObject *
2418 long_repr(PyObject *v)
2420 return _PyLong_Format(v, 10);
2423 static int
2424 long_compare(PyLongObject *a, PyLongObject *b)
2426 Py_ssize_t sign;
2428 if (Py_SIZE(a) != Py_SIZE(b)) {
2429 if (ABS(Py_SIZE(a)) == 0 && ABS(Py_SIZE(b)) == 0)
2430 sign = 0;
2431 else
2432 sign = Py_SIZE(a) - Py_SIZE(b);
2434 else {
2435 Py_ssize_t i = ABS(Py_SIZE(a));
2436 while (--i >= 0 && a->ob_digit[i] == b->ob_digit[i])
2438 if (i < 0)
2439 sign = 0;
2440 else {
2441 sign = (sdigit)a->ob_digit[i] - (sdigit)b->ob_digit[i];
2442 if (Py_SIZE(a) < 0)
2443 sign = -sign;
2446 return sign < 0 ? -1 : sign > 0 ? 1 : 0;
2449 #define TEST_COND(cond) \
2450 ((cond) ? Py_True : Py_False)
2452 static PyObject *
2453 long_richcompare(PyObject *self, PyObject *other, int op)
2455 int result;
2456 PyObject *v;
2457 CHECK_BINOP(self, other);
2458 if (self == other)
2459 result = 0;
2460 else
2461 result = long_compare((PyLongObject*)self, (PyLongObject*)other);
2462 /* Convert the return value to a Boolean */
2463 switch (op) {
2464 case Py_EQ:
2465 v = TEST_COND(result == 0);
2466 break;
2467 case Py_NE:
2468 v = TEST_COND(result != 0);
2469 break;
2470 case Py_LE:
2471 v = TEST_COND(result <= 0);
2472 break;
2473 case Py_GE:
2474 v = TEST_COND(result >= 0);
2475 break;
2476 case Py_LT:
2477 v = TEST_COND(result == -1);
2478 break;
2479 case Py_GT:
2480 v = TEST_COND(result == 1);
2481 break;
2482 default:
2483 PyErr_BadArgument();
2484 return NULL;
2486 Py_INCREF(v);
2487 return v;
2490 static long
2491 long_hash(PyLongObject *v)
2493 unsigned long x;
2494 Py_ssize_t i;
2495 int sign;
2497 /* This is designed so that Python ints and longs with the
2498 same value hash to the same value, otherwise comparisons
2499 of mapping keys will turn out weird */
2500 i = Py_SIZE(v);
2501 switch(i) {
2502 case -1: return v->ob_digit[0]==1 ? -2 : -(sdigit)v->ob_digit[0];
2503 case 0: return 0;
2504 case 1: return v->ob_digit[0];
2506 sign = 1;
2507 x = 0;
2508 if (i < 0) {
2509 sign = -1;
2510 i = -(i);
2512 /* The following loop produces a C unsigned long x such that x is
2513 congruent to the absolute value of v modulo ULONG_MAX. The
2514 resulting x is nonzero if and only if v is. */
2515 while (--i >= 0) {
2516 /* Force a native long #-bits (32 or 64) circular shift */
2517 x = (x >> (8*SIZEOF_LONG-PyLong_SHIFT)) | (x << PyLong_SHIFT);
2518 x += v->ob_digit[i];
2519 /* If the addition above overflowed we compensate by
2520 incrementing. This preserves the value modulo
2521 ULONG_MAX. */
2522 if (x < v->ob_digit[i])
2523 x++;
2525 x = x * sign;
2526 if (x == (unsigned long)-1)
2527 x = (unsigned long)-2;
2528 return (long)x;
2532 /* Add the absolute values of two long integers. */
2534 static PyLongObject *
2535 x_add(PyLongObject *a, PyLongObject *b)
2537 Py_ssize_t size_a = ABS(Py_SIZE(a)), size_b = ABS(Py_SIZE(b));
2538 PyLongObject *z;
2539 Py_ssize_t i;
2540 digit carry = 0;
2542 /* Ensure a is the larger of the two: */
2543 if (size_a < size_b) {
2544 { PyLongObject *temp = a; a = b; b = temp; }
2545 { Py_ssize_t size_temp = size_a;
2546 size_a = size_b;
2547 size_b = size_temp; }
2549 z = _PyLong_New(size_a+1);
2550 if (z == NULL)
2551 return NULL;
2552 for (i = 0; i < size_b; ++i) {
2553 carry += a->ob_digit[i] + b->ob_digit[i];
2554 z->ob_digit[i] = carry & PyLong_MASK;
2555 carry >>= PyLong_SHIFT;
2557 for (; i < size_a; ++i) {
2558 carry += a->ob_digit[i];
2559 z->ob_digit[i] = carry & PyLong_MASK;
2560 carry >>= PyLong_SHIFT;
2562 z->ob_digit[i] = carry;
2563 return long_normalize(z);
2566 /* Subtract the absolute values of two integers. */
2568 static PyLongObject *
2569 x_sub(PyLongObject *a, PyLongObject *b)
2571 Py_ssize_t size_a = ABS(Py_SIZE(a)), size_b = ABS(Py_SIZE(b));
2572 PyLongObject *z;
2573 Py_ssize_t i;
2574 int sign = 1;
2575 digit borrow = 0;
2577 /* Ensure a is the larger of the two: */
2578 if (size_a < size_b) {
2579 sign = -1;
2580 { PyLongObject *temp = a; a = b; b = temp; }
2581 { Py_ssize_t size_temp = size_a;
2582 size_a = size_b;
2583 size_b = size_temp; }
2585 else if (size_a == size_b) {
2586 /* Find highest digit where a and b differ: */
2587 i = size_a;
2588 while (--i >= 0 && a->ob_digit[i] == b->ob_digit[i])
2590 if (i < 0)
2591 return (PyLongObject *)PyLong_FromLong(0);
2592 if (a->ob_digit[i] < b->ob_digit[i]) {
2593 sign = -1;
2594 { PyLongObject *temp = a; a = b; b = temp; }
2596 size_a = size_b = i+1;
2598 z = _PyLong_New(size_a);
2599 if (z == NULL)
2600 return NULL;
2601 for (i = 0; i < size_b; ++i) {
2602 /* The following assumes unsigned arithmetic
2603 works module 2**N for some N>PyLong_SHIFT. */
2604 borrow = a->ob_digit[i] - b->ob_digit[i] - borrow;
2605 z->ob_digit[i] = borrow & PyLong_MASK;
2606 borrow >>= PyLong_SHIFT;
2607 borrow &= 1; /* Keep only one sign bit */
2609 for (; i < size_a; ++i) {
2610 borrow = a->ob_digit[i] - borrow;
2611 z->ob_digit[i] = borrow & PyLong_MASK;
2612 borrow >>= PyLong_SHIFT;
2613 borrow &= 1; /* Keep only one sign bit */
2615 assert(borrow == 0);
2616 if (sign < 0)
2617 NEGATE(z);
2618 return long_normalize(z);
2621 static PyObject *
2622 long_add(PyLongObject *a, PyLongObject *b)
2624 PyLongObject *z;
2626 CHECK_BINOP(a, b);
2628 if (ABS(Py_SIZE(a)) <= 1 && ABS(Py_SIZE(b)) <= 1) {
2629 PyObject *result = PyLong_FromLong(MEDIUM_VALUE(a) +
2630 MEDIUM_VALUE(b));
2631 return result;
2633 if (Py_SIZE(a) < 0) {
2634 if (Py_SIZE(b) < 0) {
2635 z = x_add(a, b);
2636 if (z != NULL && Py_SIZE(z) != 0)
2637 Py_SIZE(z) = -(Py_SIZE(z));
2639 else
2640 z = x_sub(b, a);
2642 else {
2643 if (Py_SIZE(b) < 0)
2644 z = x_sub(a, b);
2645 else
2646 z = x_add(a, b);
2648 return (PyObject *)z;
2651 static PyObject *
2652 long_sub(PyLongObject *a, PyLongObject *b)
2654 PyLongObject *z;
2656 CHECK_BINOP(a, b);
2658 if (ABS(Py_SIZE(a)) <= 1 && ABS(Py_SIZE(b)) <= 1) {
2659 PyObject* r;
2660 r = PyLong_FromLong(MEDIUM_VALUE(a)-MEDIUM_VALUE(b));
2661 return r;
2663 if (Py_SIZE(a) < 0) {
2664 if (Py_SIZE(b) < 0)
2665 z = x_sub(a, b);
2666 else
2667 z = x_add(a, b);
2668 if (z != NULL && Py_SIZE(z) != 0)
2669 Py_SIZE(z) = -(Py_SIZE(z));
2671 else {
2672 if (Py_SIZE(b) < 0)
2673 z = x_add(a, b);
2674 else
2675 z = x_sub(a, b);
2677 return (PyObject *)z;
2680 /* Grade school multiplication, ignoring the signs.
2681 * Returns the absolute value of the product, or NULL if error.
2683 static PyLongObject *
2684 x_mul(PyLongObject *a, PyLongObject *b)
2686 PyLongObject *z;
2687 Py_ssize_t size_a = ABS(Py_SIZE(a));
2688 Py_ssize_t size_b = ABS(Py_SIZE(b));
2689 Py_ssize_t i;
2691 z = _PyLong_New(size_a + size_b);
2692 if (z == NULL)
2693 return NULL;
2695 memset(z->ob_digit, 0, Py_SIZE(z) * sizeof(digit));
2696 if (a == b) {
2697 /* Efficient squaring per HAC, Algorithm 14.16:
2698 * http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf
2699 * Gives slightly less than a 2x speedup when a == b,
2700 * via exploiting that each entry in the multiplication
2701 * pyramid appears twice (except for the size_a squares).
2703 for (i = 0; i < size_a; ++i) {
2704 twodigits carry;
2705 twodigits f = a->ob_digit[i];
2706 digit *pz = z->ob_digit + (i << 1);
2707 digit *pa = a->ob_digit + i + 1;
2708 digit *paend = a->ob_digit + size_a;
2710 SIGCHECK({
2711 Py_DECREF(z);
2712 return NULL;
2715 carry = *pz + f * f;
2716 *pz++ = (digit)(carry & PyLong_MASK);
2717 carry >>= PyLong_SHIFT;
2718 assert(carry <= PyLong_MASK);
2720 /* Now f is added in twice in each column of the
2721 * pyramid it appears. Same as adding f<<1 once.
2723 f <<= 1;
2724 while (pa < paend) {
2725 carry += *pz + *pa++ * f;
2726 *pz++ = (digit)(carry & PyLong_MASK);
2727 carry >>= PyLong_SHIFT;
2728 assert(carry <= (PyLong_MASK << 1));
2730 if (carry) {
2731 carry += *pz;
2732 *pz++ = (digit)(carry & PyLong_MASK);
2733 carry >>= PyLong_SHIFT;
2735 if (carry)
2736 *pz += (digit)(carry & PyLong_MASK);
2737 assert((carry >> PyLong_SHIFT) == 0);
2740 else { /* a is not the same as b -- gradeschool long mult */
2741 for (i = 0; i < size_a; ++i) {
2742 twodigits carry = 0;
2743 twodigits f = a->ob_digit[i];
2744 digit *pz = z->ob_digit + i;
2745 digit *pb = b->ob_digit;
2746 digit *pbend = b->ob_digit + size_b;
2748 SIGCHECK({
2749 Py_DECREF(z);
2750 return NULL;
2753 while (pb < pbend) {
2754 carry += *pz + *pb++ * f;
2755 *pz++ = (digit)(carry & PyLong_MASK);
2756 carry >>= PyLong_SHIFT;
2757 assert(carry <= PyLong_MASK);
2759 if (carry)
2760 *pz += (digit)(carry & PyLong_MASK);
2761 assert((carry >> PyLong_SHIFT) == 0);
2764 return long_normalize(z);
2767 /* A helper for Karatsuba multiplication (k_mul).
2768 Takes a long "n" and an integer "size" representing the place to
2769 split, and sets low and high such that abs(n) == (high << size) + low,
2770 viewing the shift as being by digits. The sign bit is ignored, and
2771 the return values are >= 0.
2772 Returns 0 on success, -1 on failure.
2774 static int
2775 kmul_split(PyLongObject *n, Py_ssize_t size, PyLongObject **high, PyLongObject **low)
2777 PyLongObject *hi, *lo;
2778 Py_ssize_t size_lo, size_hi;
2779 const Py_ssize_t size_n = ABS(Py_SIZE(n));
2781 size_lo = MIN(size_n, size);
2782 size_hi = size_n - size_lo;
2784 if ((hi = _PyLong_New(size_hi)) == NULL)
2785 return -1;
2786 if ((lo = _PyLong_New(size_lo)) == NULL) {
2787 Py_DECREF(hi);
2788 return -1;
2791 memcpy(lo->ob_digit, n->ob_digit, size_lo * sizeof(digit));
2792 memcpy(hi->ob_digit, n->ob_digit + size_lo, size_hi * sizeof(digit));
2794 *high = long_normalize(hi);
2795 *low = long_normalize(lo);
2796 return 0;
2799 static PyLongObject *k_lopsided_mul(PyLongObject *a, PyLongObject *b);
2801 /* Karatsuba multiplication. Ignores the input signs, and returns the
2802 * absolute value of the product (or NULL if error).
2803 * See Knuth Vol. 2 Chapter 4.3.3 (Pp. 294-295).
2805 static PyLongObject *
2806 k_mul(PyLongObject *a, PyLongObject *b)
2808 Py_ssize_t asize = ABS(Py_SIZE(a));
2809 Py_ssize_t bsize = ABS(Py_SIZE(b));
2810 PyLongObject *ah = NULL;
2811 PyLongObject *al = NULL;
2812 PyLongObject *bh = NULL;
2813 PyLongObject *bl = NULL;
2814 PyLongObject *ret = NULL;
2815 PyLongObject *t1, *t2, *t3;
2816 Py_ssize_t shift; /* the number of digits we split off */
2817 Py_ssize_t i;
2819 /* (ah*X+al)(bh*X+bl) = ah*bh*X*X + (ah*bl + al*bh)*X + al*bl
2820 * Let k = (ah+al)*(bh+bl) = ah*bl + al*bh + ah*bh + al*bl
2821 * Then the original product is
2822 * ah*bh*X*X + (k - ah*bh - al*bl)*X + al*bl
2823 * By picking X to be a power of 2, "*X" is just shifting, and it's
2824 * been reduced to 3 multiplies on numbers half the size.
2827 /* We want to split based on the larger number; fiddle so that b
2828 * is largest.
2830 if (asize > bsize) {
2831 t1 = a;
2832 a = b;
2833 b = t1;
2835 i = asize;
2836 asize = bsize;
2837 bsize = i;
2840 /* Use gradeschool math when either number is too small. */
2841 i = a == b ? KARATSUBA_SQUARE_CUTOFF : KARATSUBA_CUTOFF;
2842 if (asize <= i) {
2843 if (asize == 0)
2844 return (PyLongObject *)PyLong_FromLong(0);
2845 else
2846 return x_mul(a, b);
2849 /* If a is small compared to b, splitting on b gives a degenerate
2850 * case with ah==0, and Karatsuba may be (even much) less efficient
2851 * than "grade school" then. However, we can still win, by viewing
2852 * b as a string of "big digits", each of width a->ob_size. That
2853 * leads to a sequence of balanced calls to k_mul.
2855 if (2 * asize <= bsize)
2856 return k_lopsided_mul(a, b);
2858 /* Split a & b into hi & lo pieces. */
2859 shift = bsize >> 1;
2860 if (kmul_split(a, shift, &ah, &al) < 0) goto fail;
2861 assert(Py_SIZE(ah) > 0); /* the split isn't degenerate */
2863 if (a == b) {
2864 bh = ah;
2865 bl = al;
2866 Py_INCREF(bh);
2867 Py_INCREF(bl);
2869 else if (kmul_split(b, shift, &bh, &bl) < 0) goto fail;
2871 /* The plan:
2872 * 1. Allocate result space (asize + bsize digits: that's always
2873 * enough).
2874 * 2. Compute ah*bh, and copy into result at 2*shift.
2875 * 3. Compute al*bl, and copy into result at 0. Note that this
2876 * can't overlap with #2.
2877 * 4. Subtract al*bl from the result, starting at shift. This may
2878 * underflow (borrow out of the high digit), but we don't care:
2879 * we're effectively doing unsigned arithmetic mod
2880 * BASE**(sizea + sizeb), and so long as the *final* result fits,
2881 * borrows and carries out of the high digit can be ignored.
2882 * 5. Subtract ah*bh from the result, starting at shift.
2883 * 6. Compute (ah+al)*(bh+bl), and add it into the result starting
2884 * at shift.
2887 /* 1. Allocate result space. */
2888 ret = _PyLong_New(asize + bsize);
2889 if (ret == NULL) goto fail;
2890 #ifdef Py_DEBUG
2891 /* Fill with trash, to catch reference to uninitialized digits. */
2892 memset(ret->ob_digit, 0xDF, Py_SIZE(ret) * sizeof(digit));
2893 #endif
2895 /* 2. t1 <- ah*bh, and copy into high digits of result. */
2896 if ((t1 = k_mul(ah, bh)) == NULL) goto fail;
2897 assert(Py_SIZE(t1) >= 0);
2898 assert(2*shift + Py_SIZE(t1) <= Py_SIZE(ret));
2899 memcpy(ret->ob_digit + 2*shift, t1->ob_digit,
2900 Py_SIZE(t1) * sizeof(digit));
2902 /* Zero-out the digits higher than the ah*bh copy. */
2903 i = Py_SIZE(ret) - 2*shift - Py_SIZE(t1);
2904 if (i)
2905 memset(ret->ob_digit + 2*shift + Py_SIZE(t1), 0,
2906 i * sizeof(digit));
2908 /* 3. t2 <- al*bl, and copy into the low digits. */
2909 if ((t2 = k_mul(al, bl)) == NULL) {
2910 Py_DECREF(t1);
2911 goto fail;
2913 assert(Py_SIZE(t2) >= 0);
2914 assert(Py_SIZE(t2) <= 2*shift); /* no overlap with high digits */
2915 memcpy(ret->ob_digit, t2->ob_digit, Py_SIZE(t2) * sizeof(digit));
2917 /* Zero out remaining digits. */
2918 i = 2*shift - Py_SIZE(t2); /* number of uninitialized digits */
2919 if (i)
2920 memset(ret->ob_digit + Py_SIZE(t2), 0, i * sizeof(digit));
2922 /* 4 & 5. Subtract ah*bh (t1) and al*bl (t2). We do al*bl first
2923 * because it's fresher in cache.
2925 i = Py_SIZE(ret) - shift; /* # digits after shift */
2926 (void)v_isub(ret->ob_digit + shift, i, t2->ob_digit, Py_SIZE(t2));
2927 Py_DECREF(t2);
2929 (void)v_isub(ret->ob_digit + shift, i, t1->ob_digit, Py_SIZE(t1));
2930 Py_DECREF(t1);
2932 /* 6. t3 <- (ah+al)(bh+bl), and add into result. */
2933 if ((t1 = x_add(ah, al)) == NULL) goto fail;
2934 Py_DECREF(ah);
2935 Py_DECREF(al);
2936 ah = al = NULL;
2938 if (a == b) {
2939 t2 = t1;
2940 Py_INCREF(t2);
2942 else if ((t2 = x_add(bh, bl)) == NULL) {
2943 Py_DECREF(t1);
2944 goto fail;
2946 Py_DECREF(bh);
2947 Py_DECREF(bl);
2948 bh = bl = NULL;
2950 t3 = k_mul(t1, t2);
2951 Py_DECREF(t1);
2952 Py_DECREF(t2);
2953 if (t3 == NULL) goto fail;
2954 assert(Py_SIZE(t3) >= 0);
2956 /* Add t3. It's not obvious why we can't run out of room here.
2957 * See the (*) comment after this function.
2959 (void)v_iadd(ret->ob_digit + shift, i, t3->ob_digit, Py_SIZE(t3));
2960 Py_DECREF(t3);
2962 return long_normalize(ret);
2964 fail:
2965 Py_XDECREF(ret);
2966 Py_XDECREF(ah);
2967 Py_XDECREF(al);
2968 Py_XDECREF(bh);
2969 Py_XDECREF(bl);
2970 return NULL;
2973 /* (*) Why adding t3 can't "run out of room" above.
2975 Let f(x) mean the floor of x and c(x) mean the ceiling of x. Some facts
2976 to start with:
2978 1. For any integer i, i = c(i/2) + f(i/2). In particular,
2979 bsize = c(bsize/2) + f(bsize/2).
2980 2. shift = f(bsize/2)
2981 3. asize <= bsize
2982 4. Since we call k_lopsided_mul if asize*2 <= bsize, asize*2 > bsize in this
2983 routine, so asize > bsize/2 >= f(bsize/2) in this routine.
2985 We allocated asize + bsize result digits, and add t3 into them at an offset
2986 of shift. This leaves asize+bsize-shift allocated digit positions for t3
2987 to fit into, = (by #1 and #2) asize + f(bsize/2) + c(bsize/2) - f(bsize/2) =
2988 asize + c(bsize/2) available digit positions.
2990 bh has c(bsize/2) digits, and bl at most f(size/2) digits. So bh+hl has
2991 at most c(bsize/2) digits + 1 bit.
2993 If asize == bsize, ah has c(bsize/2) digits, else ah has at most f(bsize/2)
2994 digits, and al has at most f(bsize/2) digits in any case. So ah+al has at
2995 most (asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 1 bit.
2997 The product (ah+al)*(bh+bl) therefore has at most
2999 c(bsize/2) + (asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 2 bits
3001 and we have asize + c(bsize/2) available digit positions. We need to show
3002 this is always enough. An instance of c(bsize/2) cancels out in both, so
3003 the question reduces to whether asize digits is enough to hold
3004 (asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 2 bits. If asize < bsize,
3005 then we're asking whether asize digits >= f(bsize/2) digits + 2 bits. By #4,
3006 asize is at least f(bsize/2)+1 digits, so this in turn reduces to whether 1
3007 digit is enough to hold 2 bits. This is so since PyLong_SHIFT=15 >= 2. If
3008 asize == bsize, then we're asking whether bsize digits is enough to hold
3009 c(bsize/2) digits + 2 bits, or equivalently (by #1) whether f(bsize/2) digits
3010 is enough to hold 2 bits. This is so if bsize >= 2, which holds because
3011 bsize >= KARATSUBA_CUTOFF >= 2.
3013 Note that since there's always enough room for (ah+al)*(bh+bl), and that's
3014 clearly >= each of ah*bh and al*bl, there's always enough room to subtract
3015 ah*bh and al*bl too.
3018 /* b has at least twice the digits of a, and a is big enough that Karatsuba
3019 * would pay off *if* the inputs had balanced sizes. View b as a sequence
3020 * of slices, each with a->ob_size digits, and multiply the slices by a,
3021 * one at a time. This gives k_mul balanced inputs to work with, and is
3022 * also cache-friendly (we compute one double-width slice of the result
3023 * at a time, then move on, never bactracking except for the helpful
3024 * single-width slice overlap between successive partial sums).
3026 static PyLongObject *
3027 k_lopsided_mul(PyLongObject *a, PyLongObject *b)
3029 const Py_ssize_t asize = ABS(Py_SIZE(a));
3030 Py_ssize_t bsize = ABS(Py_SIZE(b));
3031 Py_ssize_t nbdone; /* # of b digits already multiplied */
3032 PyLongObject *ret;
3033 PyLongObject *bslice = NULL;
3035 assert(asize > KARATSUBA_CUTOFF);
3036 assert(2 * asize <= bsize);
3038 /* Allocate result space, and zero it out. */
3039 ret = _PyLong_New(asize + bsize);
3040 if (ret == NULL)
3041 return NULL;
3042 memset(ret->ob_digit, 0, Py_SIZE(ret) * sizeof(digit));
3044 /* Successive slices of b are copied into bslice. */
3045 bslice = _PyLong_New(asize);
3046 if (bslice == NULL)
3047 goto fail;
3049 nbdone = 0;
3050 while (bsize > 0) {
3051 PyLongObject *product;
3052 const Py_ssize_t nbtouse = MIN(bsize, asize);
3054 /* Multiply the next slice of b by a. */
3055 memcpy(bslice->ob_digit, b->ob_digit + nbdone,
3056 nbtouse * sizeof(digit));
3057 Py_SIZE(bslice) = nbtouse;
3058 product = k_mul(a, bslice);
3059 if (product == NULL)
3060 goto fail;
3062 /* Add into result. */
3063 (void)v_iadd(ret->ob_digit + nbdone, Py_SIZE(ret) - nbdone,
3064 product->ob_digit, Py_SIZE(product));
3065 Py_DECREF(product);
3067 bsize -= nbtouse;
3068 nbdone += nbtouse;
3071 Py_DECREF(bslice);
3072 return long_normalize(ret);
3074 fail:
3075 Py_DECREF(ret);
3076 Py_XDECREF(bslice);
3077 return NULL;
3080 static PyObject *
3081 long_mul(PyLongObject *a, PyLongObject *b)
3083 PyLongObject *z;
3085 CHECK_BINOP(a, b);
3087 /* fast path for single-digit multiplication */
3088 if (ABS(Py_SIZE(a)) <= 1 && ABS(Py_SIZE(b)) <= 1) {
3089 stwodigits v = (stwodigits)(MEDIUM_VALUE(a)) * MEDIUM_VALUE(b);
3090 #ifdef HAVE_LONG_LONG
3091 return PyLong_FromLongLong((PY_LONG_LONG)v);
3092 #else
3093 /* if we don't have long long then we're almost certainly
3094 using 15-bit digits, so v will fit in a long. In the
3095 unlikely event that we're using 30-bit digits on a platform
3096 without long long, a large v will just cause us to fall
3097 through to the general multiplication code below. */
3098 if (v >= LONG_MIN && v <= LONG_MAX)
3099 return PyLong_FromLong((long)v);
3100 #endif
3103 z = k_mul(a, b);
3104 /* Negate if exactly one of the inputs is negative. */
3105 if (((Py_SIZE(a) ^ Py_SIZE(b)) < 0) && z)
3106 NEGATE(z);
3107 return (PyObject *)z;
3110 /* The / and % operators are now defined in terms of divmod().
3111 The expression a mod b has the value a - b*floor(a/b).
3112 The long_divrem function gives the remainder after division of
3113 |a| by |b|, with the sign of a. This is also expressed
3114 as a - b*trunc(a/b), if trunc truncates towards zero.
3115 Some examples:
3116 a b a rem b a mod b
3117 13 10 3 3
3118 -13 10 -3 7
3119 13 -10 3 -7
3120 -13 -10 -3 -3
3121 So, to get from rem to mod, we have to add b if a and b
3122 have different signs. We then subtract one from the 'div'
3123 part of the outcome to keep the invariant intact. */
3125 /* Compute
3126 * *pdiv, *pmod = divmod(v, w)
3127 * NULL can be passed for pdiv or pmod, in which case that part of
3128 * the result is simply thrown away. The caller owns a reference to
3129 * each of these it requests (does not pass NULL for).
3131 static int
3132 l_divmod(PyLongObject *v, PyLongObject *w,
3133 PyLongObject **pdiv, PyLongObject **pmod)
3135 PyLongObject *div, *mod;
3137 if (long_divrem(v, w, &div, &mod) < 0)
3138 return -1;
3139 if ((Py_SIZE(mod) < 0 && Py_SIZE(w) > 0) ||
3140 (Py_SIZE(mod) > 0 && Py_SIZE(w) < 0)) {
3141 PyLongObject *temp;
3142 PyLongObject *one;
3143 temp = (PyLongObject *) long_add(mod, w);
3144 Py_DECREF(mod);
3145 mod = temp;
3146 if (mod == NULL) {
3147 Py_DECREF(div);
3148 return -1;
3150 one = (PyLongObject *) PyLong_FromLong(1L);
3151 if (one == NULL ||
3152 (temp = (PyLongObject *) long_sub(div, one)) == NULL) {
3153 Py_DECREF(mod);
3154 Py_DECREF(div);
3155 Py_XDECREF(one);
3156 return -1;
3158 Py_DECREF(one);
3159 Py_DECREF(div);
3160 div = temp;
3162 if (pdiv != NULL)
3163 *pdiv = div;
3164 else
3165 Py_DECREF(div);
3167 if (pmod != NULL)
3168 *pmod = mod;
3169 else
3170 Py_DECREF(mod);
3172 return 0;
3175 static PyObject *
3176 long_div(PyObject *a, PyObject *b)
3178 PyLongObject *div;
3180 CHECK_BINOP(a, b);
3181 if (l_divmod((PyLongObject*)a, (PyLongObject*)b, &div, NULL) < 0)
3182 div = NULL;
3183 return (PyObject *)div;
3186 static PyObject *
3187 long_true_divide(PyObject *a, PyObject *b)
3189 double ad, bd;
3190 int failed, aexp = -1, bexp = -1;
3192 CHECK_BINOP(a, b);
3193 ad = _PyLong_AsScaledDouble((PyObject *)a, &aexp);
3194 bd = _PyLong_AsScaledDouble((PyObject *)b, &bexp);
3195 failed = (ad == -1.0 || bd == -1.0) && PyErr_Occurred();
3196 if (failed)
3197 return NULL;
3198 /* 'aexp' and 'bexp' were initialized to -1 to silence gcc-4.0.x,
3199 but should really be set correctly after sucessful calls to
3200 _PyLong_AsScaledDouble() */
3201 assert(aexp >= 0 && bexp >= 0);
3203 if (bd == 0.0) {
3204 PyErr_SetString(PyExc_ZeroDivisionError,
3205 "int division or modulo by zero");
3206 return NULL;
3209 /* True value is very close to ad/bd * 2**(PyLong_SHIFT*(aexp-bexp)) */
3210 ad /= bd; /* overflow/underflow impossible here */
3211 aexp -= bexp;
3212 if (aexp > INT_MAX / PyLong_SHIFT)
3213 goto overflow;
3214 else if (aexp < -(INT_MAX / PyLong_SHIFT))
3215 return PyFloat_FromDouble(0.0); /* underflow to 0 */
3216 errno = 0;
3217 ad = ldexp(ad, aexp * PyLong_SHIFT);
3218 if (Py_OVERFLOWED(ad)) /* ignore underflow to 0.0 */
3219 goto overflow;
3220 return PyFloat_FromDouble(ad);
3222 overflow:
3223 PyErr_SetString(PyExc_OverflowError,
3224 "int/int too large for a float");
3225 return NULL;
3229 static PyObject *
3230 long_mod(PyObject *a, PyObject *b)
3232 PyLongObject *mod;
3234 CHECK_BINOP(a, b);
3236 if (l_divmod((PyLongObject*)a, (PyLongObject*)b, NULL, &mod) < 0)
3237 mod = NULL;
3238 return (PyObject *)mod;
3241 static PyObject *
3242 long_divmod(PyObject *a, PyObject *b)
3244 PyLongObject *div, *mod;
3245 PyObject *z;
3247 CHECK_BINOP(a, b);
3249 if (l_divmod((PyLongObject*)a, (PyLongObject*)b, &div, &mod) < 0) {
3250 return NULL;
3252 z = PyTuple_New(2);
3253 if (z != NULL) {
3254 PyTuple_SetItem(z, 0, (PyObject *) div);
3255 PyTuple_SetItem(z, 1, (PyObject *) mod);
3257 else {
3258 Py_DECREF(div);
3259 Py_DECREF(mod);
3261 return z;
3264 /* pow(v, w, x) */
3265 static PyObject *
3266 long_pow(PyObject *v, PyObject *w, PyObject *x)
3268 PyLongObject *a, *b, *c; /* a,b,c = v,w,x */
3269 int negativeOutput = 0; /* if x<0 return negative output */
3271 PyLongObject *z = NULL; /* accumulated result */
3272 Py_ssize_t i, j, k; /* counters */
3273 PyLongObject *temp = NULL;
3275 /* 5-ary values. If the exponent is large enough, table is
3276 * precomputed so that table[i] == a**i % c for i in range(32).
3278 PyLongObject *table[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3279 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
3281 /* a, b, c = v, w, x */
3282 CHECK_BINOP(v, w);
3283 a = (PyLongObject*)v; Py_INCREF(a);
3284 b = (PyLongObject*)w; Py_INCREF(b);
3285 if (PyLong_Check(x)) {
3286 c = (PyLongObject *)x;
3287 Py_INCREF(x);
3289 else if (x == Py_None)
3290 c = NULL;
3291 else {
3292 Py_DECREF(a);
3293 Py_DECREF(b);
3294 Py_INCREF(Py_NotImplemented);
3295 return Py_NotImplemented;
3298 if (Py_SIZE(b) < 0) { /* if exponent is negative */
3299 if (c) {
3300 PyErr_SetString(PyExc_TypeError, "pow() 2nd argument "
3301 "cannot be negative when 3rd argument specified");
3302 goto Error;
3304 else {
3305 /* else return a float. This works because we know
3306 that this calls float_pow() which converts its
3307 arguments to double. */
3308 Py_DECREF(a);
3309 Py_DECREF(b);
3310 return PyFloat_Type.tp_as_number->nb_power(v, w, x);
3314 if (c) {
3315 /* if modulus == 0:
3316 raise ValueError() */
3317 if (Py_SIZE(c) == 0) {
3318 PyErr_SetString(PyExc_ValueError,
3319 "pow() 3rd argument cannot be 0");
3320 goto Error;
3323 /* if modulus < 0:
3324 negativeOutput = True
3325 modulus = -modulus */
3326 if (Py_SIZE(c) < 0) {
3327 negativeOutput = 1;
3328 temp = (PyLongObject *)_PyLong_Copy(c);
3329 if (temp == NULL)
3330 goto Error;
3331 Py_DECREF(c);
3332 c = temp;
3333 temp = NULL;
3334 NEGATE(c);
3337 /* if modulus == 1:
3338 return 0 */
3339 if ((Py_SIZE(c) == 1) && (c->ob_digit[0] == 1)) {
3340 z = (PyLongObject *)PyLong_FromLong(0L);
3341 goto Done;
3344 /* if base < 0:
3345 base = base % modulus
3346 Having the base positive just makes things easier. */
3347 if (Py_SIZE(a) < 0) {
3348 if (l_divmod(a, c, NULL, &temp) < 0)
3349 goto Error;
3350 Py_DECREF(a);
3351 a = temp;
3352 temp = NULL;
3356 /* At this point a, b, and c are guaranteed non-negative UNLESS
3357 c is NULL, in which case a may be negative. */
3359 z = (PyLongObject *)PyLong_FromLong(1L);
3360 if (z == NULL)
3361 goto Error;
3363 /* Perform a modular reduction, X = X % c, but leave X alone if c
3364 * is NULL.
3366 #define REDUCE(X) \
3367 if (c != NULL) { \
3368 if (l_divmod(X, c, NULL, &temp) < 0) \
3369 goto Error; \
3370 Py_XDECREF(X); \
3371 X = temp; \
3372 temp = NULL; \
3375 /* Multiply two values, then reduce the result:
3376 result = X*Y % c. If c is NULL, skip the mod. */
3377 #define MULT(X, Y, result) \
3379 temp = (PyLongObject *)long_mul(X, Y); \
3380 if (temp == NULL) \
3381 goto Error; \
3382 Py_XDECREF(result); \
3383 result = temp; \
3384 temp = NULL; \
3385 REDUCE(result) \
3388 if (Py_SIZE(b) <= FIVEARY_CUTOFF) {
3389 /* Left-to-right binary exponentiation (HAC Algorithm 14.79) */
3390 /* http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf */
3391 for (i = Py_SIZE(b) - 1; i >= 0; --i) {
3392 digit bi = b->ob_digit[i];
3394 for (j = (digit)1 << (PyLong_SHIFT-1); j != 0; j >>= 1) {
3395 MULT(z, z, z)
3396 if (bi & j)
3397 MULT(z, a, z)
3401 else {
3402 /* Left-to-right 5-ary exponentiation (HAC Algorithm 14.82) */
3403 Py_INCREF(z); /* still holds 1L */
3404 table[0] = z;
3405 for (i = 1; i < 32; ++i)
3406 MULT(table[i-1], a, table[i])
3408 for (i = Py_SIZE(b) - 1; i >= 0; --i) {
3409 const digit bi = b->ob_digit[i];
3411 for (j = PyLong_SHIFT - 5; j >= 0; j -= 5) {
3412 const int index = (bi >> j) & 0x1f;
3413 for (k = 0; k < 5; ++k)
3414 MULT(z, z, z)
3415 if (index)
3416 MULT(z, table[index], z)
3421 if (negativeOutput && (Py_SIZE(z) != 0)) {
3422 temp = (PyLongObject *)long_sub(z, c);
3423 if (temp == NULL)
3424 goto Error;
3425 Py_DECREF(z);
3426 z = temp;
3427 temp = NULL;
3429 goto Done;
3431 Error:
3432 if (z != NULL) {
3433 Py_DECREF(z);
3434 z = NULL;
3436 /* fall through */
3437 Done:
3438 if (Py_SIZE(b) > FIVEARY_CUTOFF) {
3439 for (i = 0; i < 32; ++i)
3440 Py_XDECREF(table[i]);
3442 Py_DECREF(a);
3443 Py_DECREF(b);
3444 Py_XDECREF(c);
3445 Py_XDECREF(temp);
3446 return (PyObject *)z;
3449 static PyObject *
3450 long_invert(PyLongObject *v)
3452 /* Implement ~x as -(x+1) */
3453 PyLongObject *x;
3454 PyLongObject *w;
3455 if (ABS(Py_SIZE(v)) <=1)
3456 return PyLong_FromLong(-(MEDIUM_VALUE(v)+1));
3457 w = (PyLongObject *)PyLong_FromLong(1L);
3458 if (w == NULL)
3459 return NULL;
3460 x = (PyLongObject *) long_add(v, w);
3461 Py_DECREF(w);
3462 if (x == NULL)
3463 return NULL;
3464 Py_SIZE(x) = -(Py_SIZE(x));
3465 return (PyObject *)maybe_small_long(x);
3468 static PyObject *
3469 long_neg(PyLongObject *v)
3471 PyLongObject *z;
3472 if (ABS(Py_SIZE(v)) <= 1)
3473 return PyLong_FromLong(-MEDIUM_VALUE(v));
3474 z = (PyLongObject *)_PyLong_Copy(v);
3475 if (z != NULL)
3476 Py_SIZE(z) = -(Py_SIZE(v));
3477 return (PyObject *)z;
3480 static PyObject *
3481 long_abs(PyLongObject *v)
3483 if (Py_SIZE(v) < 0)
3484 return long_neg(v);
3485 else
3486 return long_long((PyObject *)v);
3489 static int
3490 long_bool(PyLongObject *v)
3492 return ABS(Py_SIZE(v)) != 0;
3495 static PyObject *
3496 long_rshift(PyLongObject *a, PyLongObject *b)
3498 PyLongObject *z = NULL;
3499 long shiftby;
3500 Py_ssize_t newsize, wordshift, loshift, hishift, i, j;
3501 digit lomask, himask;
3503 CHECK_BINOP(a, b);
3505 if (Py_SIZE(a) < 0) {
3506 /* Right shifting negative numbers is harder */
3507 PyLongObject *a1, *a2;
3508 a1 = (PyLongObject *) long_invert(a);
3509 if (a1 == NULL)
3510 goto rshift_error;
3511 a2 = (PyLongObject *) long_rshift(a1, b);
3512 Py_DECREF(a1);
3513 if (a2 == NULL)
3514 goto rshift_error;
3515 z = (PyLongObject *) long_invert(a2);
3516 Py_DECREF(a2);
3518 else {
3520 shiftby = PyLong_AsLong((PyObject *)b);
3521 if (shiftby == -1L && PyErr_Occurred())
3522 goto rshift_error;
3523 if (shiftby < 0) {
3524 PyErr_SetString(PyExc_ValueError,
3525 "negative shift count");
3526 goto rshift_error;
3528 wordshift = shiftby / PyLong_SHIFT;
3529 newsize = ABS(Py_SIZE(a)) - wordshift;
3530 if (newsize <= 0)
3531 return PyLong_FromLong(0);
3532 loshift = shiftby % PyLong_SHIFT;
3533 hishift = PyLong_SHIFT - loshift;
3534 lomask = ((digit)1 << hishift) - 1;
3535 himask = PyLong_MASK ^ lomask;
3536 z = _PyLong_New(newsize);
3537 if (z == NULL)
3538 goto rshift_error;
3539 if (Py_SIZE(a) < 0)
3540 Py_SIZE(z) = -(Py_SIZE(z));
3541 for (i = 0, j = wordshift; i < newsize; i++, j++) {
3542 z->ob_digit[i] = (a->ob_digit[j] >> loshift) & lomask;
3543 if (i+1 < newsize)
3544 z->ob_digit[i] |=
3545 (a->ob_digit[j+1] << hishift) & himask;
3547 z = long_normalize(z);
3549 rshift_error:
3550 return (PyObject *) maybe_small_long(z);
3554 static PyObject *
3555 long_lshift(PyObject *v, PyObject *w)
3557 /* This version due to Tim Peters */
3558 PyLongObject *a = (PyLongObject*)v;
3559 PyLongObject *b = (PyLongObject*)w;
3560 PyLongObject *z = NULL;
3561 long shiftby;
3562 Py_ssize_t oldsize, newsize, wordshift, remshift, i, j;
3563 twodigits accum;
3565 CHECK_BINOP(a, b);
3567 shiftby = PyLong_AsLong((PyObject *)b);
3568 if (shiftby == -1L && PyErr_Occurred())
3569 goto lshift_error;
3570 if (shiftby < 0) {
3571 PyErr_SetString(PyExc_ValueError, "negative shift count");
3572 goto lshift_error;
3574 if ((long)(int)shiftby != shiftby) {
3575 PyErr_SetString(PyExc_ValueError,
3576 "outrageous left shift count");
3577 goto lshift_error;
3579 /* wordshift, remshift = divmod(shiftby, PyLong_SHIFT) */
3580 wordshift = (int)shiftby / PyLong_SHIFT;
3581 remshift = (int)shiftby - wordshift * PyLong_SHIFT;
3583 oldsize = ABS(Py_SIZE(a));
3584 newsize = oldsize + wordshift;
3585 if (remshift)
3586 ++newsize;
3587 z = _PyLong_New(newsize);
3588 if (z == NULL)
3589 goto lshift_error;
3590 if (Py_SIZE(a) < 0)
3591 NEGATE(z);
3592 for (i = 0; i < wordshift; i++)
3593 z->ob_digit[i] = 0;
3594 accum = 0;
3595 for (i = wordshift, j = 0; j < oldsize; i++, j++) {
3596 accum |= (twodigits)a->ob_digit[j] << remshift;
3597 z->ob_digit[i] = (digit)(accum & PyLong_MASK);
3598 accum >>= PyLong_SHIFT;
3600 if (remshift)
3601 z->ob_digit[newsize-1] = (digit)accum;
3602 else
3603 assert(!accum);
3604 z = long_normalize(z);
3605 lshift_error:
3606 return (PyObject *) maybe_small_long(z);
3610 /* Bitwise and/xor/or operations */
3612 static PyObject *
3613 long_bitwise(PyLongObject *a,
3614 int op, /* '&', '|', '^' */
3615 PyLongObject *b)
3617 digit maska, maskb; /* 0 or PyLong_MASK */
3618 int negz;
3619 Py_ssize_t size_a, size_b, size_z, i;
3620 PyLongObject *z;
3621 digit diga, digb;
3622 PyObject *v;
3624 if (Py_SIZE(a) < 0) {
3625 a = (PyLongObject *) long_invert(a);
3626 if (a == NULL)
3627 return NULL;
3628 maska = PyLong_MASK;
3630 else {
3631 Py_INCREF(a);
3632 maska = 0;
3634 if (Py_SIZE(b) < 0) {
3635 b = (PyLongObject *) long_invert(b);
3636 if (b == NULL) {
3637 Py_DECREF(a);
3638 return NULL;
3640 maskb = PyLong_MASK;
3642 else {
3643 Py_INCREF(b);
3644 maskb = 0;
3647 negz = 0;
3648 switch (op) {
3649 case '^':
3650 if (maska != maskb) {
3651 maska ^= PyLong_MASK;
3652 negz = -1;
3654 break;
3655 case '&':
3656 if (maska && maskb) {
3657 op = '|';
3658 maska ^= PyLong_MASK;
3659 maskb ^= PyLong_MASK;
3660 negz = -1;
3662 break;
3663 case '|':
3664 if (maska || maskb) {
3665 op = '&';
3666 maska ^= PyLong_MASK;
3667 maskb ^= PyLong_MASK;
3668 negz = -1;
3670 break;
3673 /* JRH: The original logic here was to allocate the result value (z)
3674 as the longer of the two operands. However, there are some cases
3675 where the result is guaranteed to be shorter than that: AND of two
3676 positives, OR of two negatives: use the shorter number. AND with
3677 mixed signs: use the positive number. OR with mixed signs: use the
3678 negative number. After the transformations above, op will be '&'
3679 iff one of these cases applies, and mask will be non-0 for operands
3680 whose length should be ignored.
3683 size_a = Py_SIZE(a);
3684 size_b = Py_SIZE(b);
3685 size_z = op == '&'
3686 ? (maska
3687 ? size_b
3688 : (maskb ? size_a : MIN(size_a, size_b)))
3689 : MAX(size_a, size_b);
3690 z = _PyLong_New(size_z);
3691 if (z == NULL) {
3692 Py_DECREF(a);
3693 Py_DECREF(b);
3694 return NULL;
3697 for (i = 0; i < size_z; ++i) {
3698 diga = (i < size_a ? a->ob_digit[i] : 0) ^ maska;
3699 digb = (i < size_b ? b->ob_digit[i] : 0) ^ maskb;
3700 switch (op) {
3701 case '&': z->ob_digit[i] = diga & digb; break;
3702 case '|': z->ob_digit[i] = diga | digb; break;
3703 case '^': z->ob_digit[i] = diga ^ digb; break;
3707 Py_DECREF(a);
3708 Py_DECREF(b);
3709 z = long_normalize(z);
3710 if (negz == 0)
3711 return (PyObject *) maybe_small_long(z);
3712 v = long_invert(z);
3713 Py_DECREF(z);
3714 return v;
3717 static PyObject *
3718 long_and(PyObject *a, PyObject *b)
3720 PyObject *c;
3721 CHECK_BINOP(a, b);
3722 c = long_bitwise((PyLongObject*)a, '&', (PyLongObject*)b);
3723 return c;
3726 static PyObject *
3727 long_xor(PyObject *a, PyObject *b)
3729 PyObject *c;
3730 CHECK_BINOP(a, b);
3731 c = long_bitwise((PyLongObject*)a, '^', (PyLongObject*)b);
3732 return c;
3735 static PyObject *
3736 long_or(PyObject *a, PyObject *b)
3738 PyObject *c;
3739 CHECK_BINOP(a, b);
3740 c = long_bitwise((PyLongObject*)a, '|', (PyLongObject*)b);
3741 return c;
3744 static PyObject *
3745 long_long(PyObject *v)
3747 if (PyLong_CheckExact(v))
3748 Py_INCREF(v);
3749 else
3750 v = _PyLong_Copy((PyLongObject *)v);
3751 return v;
3754 static PyObject *
3755 long_float(PyObject *v)
3757 double result;
3758 result = PyLong_AsDouble(v);
3759 if (result == -1.0 && PyErr_Occurred())
3760 return NULL;
3761 return PyFloat_FromDouble(result);
3764 static PyObject *
3765 long_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
3767 static PyObject *
3768 long_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
3770 PyObject *x = NULL;
3771 int base = -909; /* unlikely! */
3772 static char *kwlist[] = {"x", "base", 0};
3774 if (type != &PyLong_Type)
3775 return long_subtype_new(type, args, kwds); /* Wimp out */
3776 if (!PyArg_ParseTupleAndKeywords(args, kwds, "|Oi:int", kwlist,
3777 &x, &base))
3778 return NULL;
3779 if (x == NULL)
3780 return PyLong_FromLong(0L);
3781 if (base == -909)
3782 return PyNumber_Long(x);
3783 else if (PyUnicode_Check(x))
3784 return PyLong_FromUnicode(PyUnicode_AS_UNICODE(x),
3785 PyUnicode_GET_SIZE(x),
3786 base);
3787 else if (PyByteArray_Check(x) || PyBytes_Check(x)) {
3788 /* Since PyLong_FromString doesn't have a length parameter,
3789 * check here for possible NULs in the string. */
3790 char *string;
3791 Py_ssize_t size = Py_SIZE(x);
3792 if (PyByteArray_Check(x))
3793 string = PyByteArray_AS_STRING(x);
3794 else
3795 string = PyBytes_AS_STRING(x);
3796 if (strlen(string) != (size_t)size) {
3797 /* We only see this if there's a null byte in x,
3798 x is a bytes or buffer, *and* a base is given. */
3799 PyErr_Format(PyExc_ValueError,
3800 "invalid literal for int() with base %d: %R",
3801 base, x);
3802 return NULL;
3804 return PyLong_FromString(string, NULL, base);
3806 else {
3807 PyErr_SetString(PyExc_TypeError,
3808 "int() can't convert non-string with explicit base");
3809 return NULL;
3813 /* Wimpy, slow approach to tp_new calls for subtypes of long:
3814 first create a regular long from whatever arguments we got,
3815 then allocate a subtype instance and initialize it from
3816 the regular long. The regular long is then thrown away.
3818 static PyObject *
3819 long_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
3821 PyLongObject *tmp, *newobj;
3822 Py_ssize_t i, n;
3824 assert(PyType_IsSubtype(type, &PyLong_Type));
3825 tmp = (PyLongObject *)long_new(&PyLong_Type, args, kwds);
3826 if (tmp == NULL)
3827 return NULL;
3828 assert(PyLong_CheckExact(tmp));
3829 n = Py_SIZE(tmp);
3830 if (n < 0)
3831 n = -n;
3832 newobj = (PyLongObject *)type->tp_alloc(type, n);
3833 if (newobj == NULL) {
3834 Py_DECREF(tmp);
3835 return NULL;
3837 assert(PyLong_Check(newobj));
3838 Py_SIZE(newobj) = Py_SIZE(tmp);
3839 for (i = 0; i < n; i++)
3840 newobj->ob_digit[i] = tmp->ob_digit[i];
3841 Py_DECREF(tmp);
3842 return (PyObject *)newobj;
3845 static PyObject *
3846 long_getnewargs(PyLongObject *v)
3848 return Py_BuildValue("(N)", _PyLong_Copy(v));
3851 static PyObject *
3852 long_get0(PyLongObject *v, void *context) {
3853 return PyLong_FromLong(0L);
3856 static PyObject *
3857 long_get1(PyLongObject *v, void *context) {
3858 return PyLong_FromLong(1L);
3861 static PyObject *
3862 long__format__(PyObject *self, PyObject *args)
3864 PyObject *format_spec;
3866 if (!PyArg_ParseTuple(args, "U:__format__", &format_spec))
3867 return NULL;
3868 return _PyLong_FormatAdvanced(self,
3869 PyUnicode_AS_UNICODE(format_spec),
3870 PyUnicode_GET_SIZE(format_spec));
3873 static PyObject *
3874 long_round(PyObject *self, PyObject *args)
3876 PyObject *o_ndigits=NULL, *temp;
3877 PyLongObject *pow=NULL, *q=NULL, *r=NULL, *ndigits=NULL, *one;
3878 int errcode;
3879 digit q_mod_4;
3881 /* Notes on the algorithm: to round to the nearest 10**n (n positive),
3882 the straightforward method is:
3884 (1) divide by 10**n
3885 (2) round to nearest integer (round to even in case of tie)
3886 (3) multiply result by 10**n.
3888 But the rounding step involves examining the fractional part of the
3889 quotient to see whether it's greater than 0.5 or not. Since we
3890 want to do the whole calculation in integer arithmetic, it's
3891 simpler to do:
3893 (1) divide by (10**n)/2
3894 (2) round to nearest multiple of 2 (multiple of 4 in case of tie)
3895 (3) multiply result by (10**n)/2.
3897 Then all we need to know about the fractional part of the quotient
3898 arising in step (2) is whether it's zero or not.
3900 Doing both a multiplication and division is wasteful, and is easily
3901 avoided if we just figure out how much to adjust the original input
3902 by to do the rounding.
3904 Here's the whole algorithm expressed in Python.
3906 def round(self, ndigits = None):
3907 """round(int, int) -> int"""
3908 if ndigits is None or ndigits >= 0:
3909 return self
3910 pow = 10**-ndigits >> 1
3911 q, r = divmod(self, pow)
3912 self -= r
3913 if (q & 1 != 0):
3914 if (q & 2 == r == 0):
3915 self -= pow
3916 else:
3917 self += pow
3918 return self
3921 if (!PyArg_ParseTuple(args, "|O", &o_ndigits))
3922 return NULL;
3923 if (o_ndigits == NULL)
3924 return long_long(self);
3926 ndigits = (PyLongObject *)PyNumber_Index(o_ndigits);
3927 if (ndigits == NULL)
3928 return NULL;
3930 if (Py_SIZE(ndigits) >= 0) {
3931 Py_DECREF(ndigits);
3932 return long_long(self);
3935 Py_INCREF(self); /* to keep refcounting simple */
3936 /* we now own references to self, ndigits */
3938 /* pow = 10 ** -ndigits >> 1 */
3939 pow = (PyLongObject *)PyLong_FromLong(10L);
3940 if (pow == NULL)
3941 goto error;
3942 temp = long_neg(ndigits);
3943 Py_DECREF(ndigits);
3944 ndigits = (PyLongObject *)temp;
3945 if (ndigits == NULL)
3946 goto error;
3947 temp = long_pow((PyObject *)pow, (PyObject *)ndigits, Py_None);
3948 Py_DECREF(pow);
3949 pow = (PyLongObject *)temp;
3950 if (pow == NULL)
3951 goto error;
3952 assert(PyLong_Check(pow)); /* check long_pow returned a long */
3953 one = (PyLongObject *)PyLong_FromLong(1L);
3954 if (one == NULL)
3955 goto error;
3956 temp = long_rshift(pow, one);
3957 Py_DECREF(one);
3958 Py_DECREF(pow);
3959 pow = (PyLongObject *)temp;
3960 if (pow == NULL)
3961 goto error;
3963 /* q, r = divmod(self, pow) */
3964 errcode = l_divmod((PyLongObject *)self, pow, &q, &r);
3965 if (errcode == -1)
3966 goto error;
3968 /* self -= r */
3969 temp = long_sub((PyLongObject *)self, r);
3970 Py_DECREF(self);
3971 self = temp;
3972 if (self == NULL)
3973 goto error;
3975 /* get value of quotient modulo 4 */
3976 if (Py_SIZE(q) == 0)
3977 q_mod_4 = 0;
3978 else if (Py_SIZE(q) > 0)
3979 q_mod_4 = q->ob_digit[0] & 3;
3980 else
3981 q_mod_4 = (PyLong_BASE-q->ob_digit[0]) & 3;
3983 if ((q_mod_4 & 1) == 1) {
3984 /* q is odd; round self up or down by adding or subtracting pow */
3985 if (q_mod_4 == 1 && Py_SIZE(r) == 0)
3986 temp = (PyObject *)long_sub((PyLongObject *)self, pow);
3987 else
3988 temp = (PyObject *)long_add((PyLongObject *)self, pow);
3989 Py_DECREF(self);
3990 self = temp;
3991 if (self == NULL)
3992 goto error;
3994 Py_DECREF(q);
3995 Py_DECREF(r);
3996 Py_DECREF(pow);
3997 Py_DECREF(ndigits);
3998 return self;
4000 error:
4001 Py_XDECREF(q);
4002 Py_XDECREF(r);
4003 Py_XDECREF(pow);
4004 Py_XDECREF(self);
4005 Py_XDECREF(ndigits);
4006 return NULL;
4009 static PyObject *
4010 long_sizeof(PyLongObject *v)
4012 Py_ssize_t res;
4014 res = offsetof(PyLongObject, ob_digit) + ABS(Py_SIZE(v))*sizeof(digit);
4015 return PyLong_FromSsize_t(res);
4018 static PyObject *
4019 long_bit_length(PyLongObject *v)
4021 PyLongObject *result, *x, *y;
4022 Py_ssize_t ndigits, msd_bits = 0;
4023 digit msd;
4025 assert(v != NULL);
4026 assert(PyLong_Check(v));
4028 ndigits = ABS(Py_SIZE(v));
4029 if (ndigits == 0)
4030 return PyLong_FromLong(0);
4032 msd = v->ob_digit[ndigits-1];
4033 while (msd >= 32) {
4034 msd_bits += 6;
4035 msd >>= 6;
4037 msd_bits += (long)(BitLengthTable[msd]);
4039 if (ndigits <= PY_SSIZE_T_MAX/PyLong_SHIFT)
4040 return PyLong_FromSsize_t((ndigits-1)*PyLong_SHIFT + msd_bits);
4042 /* expression above may overflow; use Python integers instead */
4043 result = (PyLongObject *)PyLong_FromSsize_t(ndigits - 1);
4044 if (result == NULL)
4045 return NULL;
4046 x = (PyLongObject *)PyLong_FromLong(PyLong_SHIFT);
4047 if (x == NULL)
4048 goto error;
4049 y = (PyLongObject *)long_mul(result, x);
4050 Py_DECREF(x);
4051 if (y == NULL)
4052 goto error;
4053 Py_DECREF(result);
4054 result = y;
4056 x = (PyLongObject *)PyLong_FromLong((long)msd_bits);
4057 if (x == NULL)
4058 goto error;
4059 y = (PyLongObject *)long_add(result, x);
4060 Py_DECREF(x);
4061 if (y == NULL)
4062 goto error;
4063 Py_DECREF(result);
4064 result = y;
4066 return (PyObject *)result;
4068 error:
4069 Py_DECREF(result);
4070 return NULL;
4073 PyDoc_STRVAR(long_bit_length_doc,
4074 "int.bit_length() -> int\n\
4076 Number of bits necessary to represent self in binary.\n\
4077 >>> bin(37)\n\
4078 '0b100101'\n\
4079 >>> (37).bit_length()\n\
4080 6");
4082 #if 0
4083 static PyObject *
4084 long_is_finite(PyObject *v)
4086 Py_RETURN_TRUE;
4088 #endif
4090 static PyMethodDef long_methods[] = {
4091 {"conjugate", (PyCFunction)long_long, METH_NOARGS,
4092 "Returns self, the complex conjugate of any int."},
4093 {"bit_length", (PyCFunction)long_bit_length, METH_NOARGS,
4094 long_bit_length_doc},
4095 #if 0
4096 {"is_finite", (PyCFunction)long_is_finite, METH_NOARGS,
4097 "Returns always True."},
4098 #endif
4099 {"__trunc__", (PyCFunction)long_long, METH_NOARGS,
4100 "Truncating an Integral returns itself."},
4101 {"__floor__", (PyCFunction)long_long, METH_NOARGS,
4102 "Flooring an Integral returns itself."},
4103 {"__ceil__", (PyCFunction)long_long, METH_NOARGS,
4104 "Ceiling of an Integral returns itself."},
4105 {"__round__", (PyCFunction)long_round, METH_VARARGS,
4106 "Rounding an Integral returns itself.\n"
4107 "Rounding with an ndigits argument also returns an integer."},
4108 {"__getnewargs__", (PyCFunction)long_getnewargs, METH_NOARGS},
4109 {"__format__", (PyCFunction)long__format__, METH_VARARGS},
4110 {"__sizeof__", (PyCFunction)long_sizeof, METH_NOARGS,
4111 "Returns size in memory, in bytes"},
4112 {NULL, NULL} /* sentinel */
4115 static PyGetSetDef long_getset[] = {
4116 {"real",
4117 (getter)long_long, (setter)NULL,
4118 "the real part of a complex number",
4119 NULL},
4120 {"imag",
4121 (getter)long_get0, (setter)NULL,
4122 "the imaginary part of a complex number",
4123 NULL},
4124 {"numerator",
4125 (getter)long_long, (setter)NULL,
4126 "the numerator of a rational number in lowest terms",
4127 NULL},
4128 {"denominator",
4129 (getter)long_get1, (setter)NULL,
4130 "the denominator of a rational number in lowest terms",
4131 NULL},
4132 {NULL} /* Sentinel */
4135 PyDoc_STRVAR(long_doc,
4136 "int(x[, base]) -> integer\n\
4138 Convert a string or number to an integer, if possible. A floating\n\
4139 point argument will be truncated towards zero (this does not include a\n\
4140 string representation of a floating point number!) When converting a\n\
4141 string, use the optional base. It is an error to supply a base when\n\
4142 converting a non-string.");
4144 static PyNumberMethods long_as_number = {
4145 (binaryfunc) long_add, /*nb_add*/
4146 (binaryfunc) long_sub, /*nb_subtract*/
4147 (binaryfunc) long_mul, /*nb_multiply*/
4148 long_mod, /*nb_remainder*/
4149 long_divmod, /*nb_divmod*/
4150 long_pow, /*nb_power*/
4151 (unaryfunc) long_neg, /*nb_negative*/
4152 (unaryfunc) long_long, /*tp_positive*/
4153 (unaryfunc) long_abs, /*tp_absolute*/
4154 (inquiry) long_bool, /*tp_bool*/
4155 (unaryfunc) long_invert, /*nb_invert*/
4156 long_lshift, /*nb_lshift*/
4157 (binaryfunc) long_rshift, /*nb_rshift*/
4158 long_and, /*nb_and*/
4159 long_xor, /*nb_xor*/
4160 long_or, /*nb_or*/
4161 long_long, /*nb_int*/
4162 0, /*nb_reserved*/
4163 long_float, /*nb_float*/
4164 0, /* nb_inplace_add */
4165 0, /* nb_inplace_subtract */
4166 0, /* nb_inplace_multiply */
4167 0, /* nb_inplace_remainder */
4168 0, /* nb_inplace_power */
4169 0, /* nb_inplace_lshift */
4170 0, /* nb_inplace_rshift */
4171 0, /* nb_inplace_and */
4172 0, /* nb_inplace_xor */
4173 0, /* nb_inplace_or */
4174 long_div, /* nb_floor_divide */
4175 long_true_divide, /* nb_true_divide */
4176 0, /* nb_inplace_floor_divide */
4177 0, /* nb_inplace_true_divide */
4178 long_long, /* nb_index */
4181 PyTypeObject PyLong_Type = {
4182 PyVarObject_HEAD_INIT(&PyType_Type, 0)
4183 "int", /* tp_name */
4184 offsetof(PyLongObject, ob_digit), /* tp_basicsize */
4185 sizeof(digit), /* tp_itemsize */
4186 long_dealloc, /* tp_dealloc */
4187 0, /* tp_print */
4188 0, /* tp_getattr */
4189 0, /* tp_setattr */
4190 0, /* tp_reserved */
4191 long_repr, /* tp_repr */
4192 &long_as_number, /* tp_as_number */
4193 0, /* tp_as_sequence */
4194 0, /* tp_as_mapping */
4195 (hashfunc)long_hash, /* tp_hash */
4196 0, /* tp_call */
4197 long_repr, /* tp_str */
4198 PyObject_GenericGetAttr, /* tp_getattro */
4199 0, /* tp_setattro */
4200 0, /* tp_as_buffer */
4201 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE |
4202 Py_TPFLAGS_LONG_SUBCLASS, /* tp_flags */
4203 long_doc, /* tp_doc */
4204 0, /* tp_traverse */
4205 0, /* tp_clear */
4206 long_richcompare, /* tp_richcompare */
4207 0, /* tp_weaklistoffset */
4208 0, /* tp_iter */
4209 0, /* tp_iternext */
4210 long_methods, /* tp_methods */
4211 0, /* tp_members */
4212 long_getset, /* tp_getset */
4213 0, /* tp_base */
4214 0, /* tp_dict */
4215 0, /* tp_descr_get */
4216 0, /* tp_descr_set */
4217 0, /* tp_dictoffset */
4218 0, /* tp_init */
4219 0, /* tp_alloc */
4220 long_new, /* tp_new */
4221 PyObject_Del, /* tp_free */
4224 static PyTypeObject Int_InfoType;
4226 PyDoc_STRVAR(int_info__doc__,
4227 "sys.int_info\n\
4229 A struct sequence that holds information about Python's\n\
4230 internal representation of integers. The attributes are read only.");
4232 static PyStructSequence_Field int_info_fields[] = {
4233 {"bits_per_digit", "size of a digit in bits"},
4234 {"sizeof_digit", "size in bytes of the C type used to "
4235 "represent a digit"},
4236 {NULL, NULL}
4239 static PyStructSequence_Desc int_info_desc = {
4240 "sys.int_info", /* name */
4241 int_info__doc__, /* doc */
4242 int_info_fields, /* fields */
4243 2 /* number of fields */
4246 PyObject *
4247 PyLong_GetInfo(void)
4249 PyObject* int_info;
4250 int field = 0;
4251 int_info = PyStructSequence_New(&Int_InfoType);
4252 if (int_info == NULL)
4253 return NULL;
4254 PyStructSequence_SET_ITEM(int_info, field++,
4255 PyLong_FromLong(PyLong_SHIFT));
4256 PyStructSequence_SET_ITEM(int_info, field++,
4257 PyLong_FromLong(sizeof(digit)));
4258 if (PyErr_Occurred()) {
4259 Py_CLEAR(int_info);
4260 return NULL;
4262 return int_info;
4266 _PyLong_Init(void)
4268 #if NSMALLNEGINTS + NSMALLPOSINTS > 0
4269 int ival, size;
4270 PyLongObject *v = small_ints;
4272 for (ival = -NSMALLNEGINTS; ival < NSMALLPOSINTS; ival++, v++) {
4273 size = (ival < 0) ? -1 : ((ival == 0) ? 0 : 1);
4274 if (Py_TYPE(v) == &PyLong_Type) {
4275 /* The element is already initialized, most likely
4276 * the Python interpreter was initialized before.
4278 Py_ssize_t refcnt;
4279 PyObject* op = (PyObject*)v;
4281 refcnt = Py_REFCNT(op) < 0 ? 0 : Py_REFCNT(op);
4282 _Py_NewReference(op);
4283 /* _Py_NewReference sets the ref count to 1 but
4284 * the ref count might be larger. Set the refcnt
4285 * to the original refcnt + 1 */
4286 Py_REFCNT(op) = refcnt + 1;
4287 assert(Py_SIZE(op) == size);
4288 assert(v->ob_digit[0] == abs(ival));
4290 else {
4291 PyObject_INIT(v, &PyLong_Type);
4293 Py_SIZE(v) = size;
4294 v->ob_digit[0] = abs(ival);
4296 #endif
4297 /* initialize int_info */
4298 if (Int_InfoType.tp_name == 0)
4299 PyStructSequence_InitType(&Int_InfoType, &int_info_desc);
4301 return 1;
4304 void
4305 PyLong_Fini(void)
4307 /* Integers are currently statically allocated. Py_DECREF is not
4308 needed, but Python must forget about the reference or multiple
4309 reinitializations will fail. */
4310 #if NSMALLNEGINTS + NSMALLPOSINTS > 0
4311 int i;
4312 PyLongObject *v = small_ints;
4313 for (i = 0; i < NSMALLNEGINTS + NSMALLPOSINTS; i++, v++) {
4314 _Py_DEC_REFTOTAL;
4315 _Py_ForgetReference((PyObject*)v);
4317 #endif