blob: 8f6f18f0a6454ea967c25fcffe0dd4864dd223ed [file] [log] [blame]
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001/* Long (arbitrary precision) integer object implementation */
2
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00003/* XXX The functional organization of this file is terrible */
4
Guido van Rossumc0b618a1997-05-02 03:12:38 +00005#include "Python.h"
Guido van Rossumedcc38a1991-05-05 20:09:44 +00006#include "longintrepr.h"
Guido van Rossumc0b618a1997-05-02 03:12:38 +00007
Mark Dickinsonc6300392009-04-20 21:38:00 +00008#include <float.h>
Guido van Rossumeb1fafc1994-08-29 12:47:19 +00009#include <ctype.h>
Mark Dickinson5a74bf62009-02-15 11:04:38 +000010#include <stddef.h>
Guido van Rossumedcc38a1991-05-05 20:09:44 +000011
Guido van Rossumddefaf32007-01-14 03:31:43 +000012#ifndef NSMALLPOSINTS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000013#define NSMALLPOSINTS 257
Guido van Rossumddefaf32007-01-14 03:31:43 +000014#endif
15#ifndef NSMALLNEGINTS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000016#define NSMALLNEGINTS 5
Guido van Rossumddefaf32007-01-14 03:31:43 +000017#endif
Facundo Batista6e6f59b2008-07-24 18:57:11 +000018
Mark Dickinsone4416742009-02-15 15:14:57 +000019/* convert a PyLong of size 1, 0 or -1 to an sdigit */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000020#define MEDIUM_VALUE(x) (Py_SIZE(x) < 0 ? -(sdigit)(x)->ob_digit[0] : \
21 (Py_SIZE(x) == 0 ? (sdigit)0 : \
22 (sdigit)(x)->ob_digit[0]))
Facundo Batista6e6f59b2008-07-24 18:57:11 +000023#define ABS(x) ((x) < 0 ? -(x) : (x))
24
Guido van Rossumddefaf32007-01-14 03:31:43 +000025#if NSMALLNEGINTS + NSMALLPOSINTS > 0
26/* Small integers are preallocated in this array so that they
27 can be shared.
28 The integers that are preallocated are those in the range
29 -NSMALLNEGINTS (inclusive) to NSMALLPOSINTS (not inclusive).
30*/
31static PyLongObject small_ints[NSMALLNEGINTS + NSMALLPOSINTS];
32#ifdef COUNT_ALLOCS
33int quick_int_allocs, quick_neg_int_allocs;
34#endif
35
Guido van Rossum7eaf8222007-06-18 17:58:50 +000036static PyObject *
Mark Dickinsone4416742009-02-15 15:14:57 +000037get_small_int(sdigit ival)
Guido van Rossumddefaf32007-01-14 03:31:43 +000038{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000039 PyObject *v = (PyObject*)(small_ints + ival + NSMALLNEGINTS);
40 Py_INCREF(v);
Guido van Rossumddefaf32007-01-14 03:31:43 +000041#ifdef COUNT_ALLOCS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000042 if (ival >= 0)
43 quick_int_allocs++;
44 else
45 quick_neg_int_allocs++;
Guido van Rossumddefaf32007-01-14 03:31:43 +000046#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000047 return v;
Guido van Rossumddefaf32007-01-14 03:31:43 +000048}
49#define CHECK_SMALL_INT(ival) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000050 do if (-NSMALLNEGINTS <= ival && ival < NSMALLPOSINTS) { \
51 return get_small_int((sdigit)ival); \
52 } while(0)
Guido van Rossumddefaf32007-01-14 03:31:43 +000053
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000054static PyLongObject *
Facundo Batista6e6f59b2008-07-24 18:57:11 +000055maybe_small_long(PyLongObject *v)
56{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000057 if (v && ABS(Py_SIZE(v)) <= 1) {
58 sdigit ival = MEDIUM_VALUE(v);
59 if (-NSMALLNEGINTS <= ival && ival < NSMALLPOSINTS) {
60 Py_DECREF(v);
61 return (PyLongObject *)get_small_int(ival);
62 }
63 }
64 return v;
Facundo Batista6e6f59b2008-07-24 18:57:11 +000065}
Guido van Rossumddefaf32007-01-14 03:31:43 +000066#else
67#define CHECK_SMALL_INT(ival)
Facundo Batista6e6f59b2008-07-24 18:57:11 +000068#define maybe_small_long(val) (val)
Guido van Rossumddefaf32007-01-14 03:31:43 +000069#endif
70
Guido van Rossumddefaf32007-01-14 03:31:43 +000071/* If a freshly-allocated long is already shared, it must
72 be a small integer, so negating it must go to PyLong_FromLong */
73#define NEGATE(x) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000074 do if (Py_REFCNT(x) == 1) Py_SIZE(x) = -Py_SIZE(x); \
75 else { PyObject* tmp=PyLong_FromLong(-MEDIUM_VALUE(x)); \
76 Py_DECREF(x); (x) = (PyLongObject*)tmp; } \
77 while(0)
Tim Peters5af4e6c2002-08-12 02:31:19 +000078/* For long multiplication, use the O(N**2) school algorithm unless
79 * both operands contain more than KARATSUBA_CUTOFF digits (this
80 * being an internal Python long digit, in base BASE).
81 */
Tim Peters0973b992004-08-29 22:16:50 +000082#define KARATSUBA_CUTOFF 70
83#define KARATSUBA_SQUARE_CUTOFF (2 * KARATSUBA_CUTOFF)
Tim Peters5af4e6c2002-08-12 02:31:19 +000084
Tim Peters47e52ee2004-08-30 02:44:38 +000085/* For exponentiation, use the binary left-to-right algorithm
86 * unless the exponent contains more than FIVEARY_CUTOFF digits.
87 * In that case, do 5 bits at a time. The potential drawback is that
88 * a table of 2**5 intermediate results is computed.
89 */
90#define FIVEARY_CUTOFF 8
91
Tim Peters5af4e6c2002-08-12 02:31:19 +000092#undef MIN
93#undef MAX
94#define MAX(x, y) ((x) < (y) ? (y) : (x))
95#define MIN(x, y) ((x) > (y) ? (y) : (x))
96
Mark Dickinsoncdd01d22010-05-10 21:37:34 +000097#define SIGCHECK(PyTryBlock) \
98 do { \
99 if (PyErr_CheckSignals()) PyTryBlock \
100 } while(0)
Guido van Rossum23d6f0e1991-05-14 12:06:49 +0000101
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000102/* Normalize (remove leading zeros from) a long int object.
103 Doesn't attempt to free the storage--in most cases, due to the nature
104 of the algorithms used, this could save at most be one word anyway. */
105
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000106static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +0000107long_normalize(register PyLongObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000108{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000109 Py_ssize_t j = ABS(Py_SIZE(v));
110 Py_ssize_t i = j;
Tim Peters5af4e6c2002-08-12 02:31:19 +0000111
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000112 while (i > 0 && v->ob_digit[i-1] == 0)
113 --i;
114 if (i != j)
115 Py_SIZE(v) = (Py_SIZE(v) < 0) ? -(i) : i;
116 return v;
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000117}
118
119/* Allocate a new long int object with size digits.
120 Return NULL and set exception if we run out of memory. */
121
Mark Dickinson5a74bf62009-02-15 11:04:38 +0000122#define MAX_LONG_DIGITS \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000123 ((PY_SSIZE_T_MAX - offsetof(PyLongObject, ob_digit))/sizeof(digit))
Mark Dickinson5a74bf62009-02-15 11:04:38 +0000124
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000125PyLongObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +0000126_PyLong_New(Py_ssize_t size)
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000127{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000128 PyLongObject *result;
129 /* Number of bytes needed is: offsetof(PyLongObject, ob_digit) +
130 sizeof(digit)*size. Previous incarnations of this code used
131 sizeof(PyVarObject) instead of the offsetof, but this risks being
132 incorrect in the presence of padding between the PyVarObject header
133 and the digits. */
134 if (size > (Py_ssize_t)MAX_LONG_DIGITS) {
135 PyErr_SetString(PyExc_OverflowError,
136 "too many digits in integer");
137 return NULL;
138 }
139 result = PyObject_MALLOC(offsetof(PyLongObject, ob_digit) +
140 size*sizeof(digit));
141 if (!result) {
142 PyErr_NoMemory();
143 return NULL;
144 }
145 return (PyLongObject*)PyObject_INIT_VAR(result, &PyLong_Type, size);
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000146}
147
Tim Peters64b5ce32001-09-10 20:52:51 +0000148PyObject *
149_PyLong_Copy(PyLongObject *src)
150{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000151 PyLongObject *result;
152 Py_ssize_t i;
Tim Peters64b5ce32001-09-10 20:52:51 +0000153
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000154 assert(src != NULL);
155 i = Py_SIZE(src);
156 if (i < 0)
157 i = -(i);
158 if (i < 2) {
159 sdigit ival = src->ob_digit[0];
160 if (Py_SIZE(src) < 0)
161 ival = -ival;
162 CHECK_SMALL_INT(ival);
163 }
164 result = _PyLong_New(i);
165 if (result != NULL) {
166 Py_SIZE(result) = Py_SIZE(src);
167 while (--i >= 0)
168 result->ob_digit[i] = src->ob_digit[i];
169 }
170 return (PyObject *)result;
Tim Peters64b5ce32001-09-10 20:52:51 +0000171}
172
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000173/* Create a new long int object from a C long int */
174
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000175PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +0000176PyLong_FromLong(long ival)
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000177{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000178 PyLongObject *v;
179 unsigned long abs_ival;
180 unsigned long t; /* unsigned so >> doesn't propagate sign bit */
181 int ndigits = 0;
182 int sign = 1;
Guido van Rossumddefaf32007-01-14 03:31:43 +0000183
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000184 CHECK_SMALL_INT(ival);
Tim Petersce9de2f2001-06-14 04:56:19 +0000185
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000186 if (ival < 0) {
187 /* negate: can't write this as abs_ival = -ival since that
188 invokes undefined behaviour when ival is LONG_MIN */
189 abs_ival = 0U-(unsigned long)ival;
190 sign = -1;
191 }
192 else {
193 abs_ival = (unsigned long)ival;
194 }
Tim Petersce9de2f2001-06-14 04:56:19 +0000195
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000196 /* Fast path for single-digit ints */
197 if (!(abs_ival >> PyLong_SHIFT)) {
198 v = _PyLong_New(1);
199 if (v) {
200 Py_SIZE(v) = sign;
201 v->ob_digit[0] = Py_SAFE_DOWNCAST(
202 abs_ival, unsigned long, digit);
203 }
204 return (PyObject*)v;
205 }
Guido van Rossumddefaf32007-01-14 03:31:43 +0000206
Mark Dickinson249b8982009-04-27 19:41:00 +0000207#if PyLong_SHIFT==15
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000208 /* 2 digits */
209 if (!(abs_ival >> 2*PyLong_SHIFT)) {
210 v = _PyLong_New(2);
211 if (v) {
212 Py_SIZE(v) = 2*sign;
213 v->ob_digit[0] = Py_SAFE_DOWNCAST(
214 abs_ival & PyLong_MASK, unsigned long, digit);
215 v->ob_digit[1] = Py_SAFE_DOWNCAST(
216 abs_ival >> PyLong_SHIFT, unsigned long, digit);
217 }
218 return (PyObject*)v;
219 }
Mark Dickinsonbd792642009-03-18 20:06:12 +0000220#endif
Guido van Rossumddefaf32007-01-14 03:31:43 +0000221
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000222 /* Larger numbers: loop to determine number of digits */
223 t = abs_ival;
224 while (t) {
225 ++ndigits;
226 t >>= PyLong_SHIFT;
227 }
228 v = _PyLong_New(ndigits);
229 if (v != NULL) {
230 digit *p = v->ob_digit;
231 Py_SIZE(v) = ndigits*sign;
232 t = abs_ival;
233 while (t) {
234 *p++ = Py_SAFE_DOWNCAST(
235 t & PyLong_MASK, unsigned long, digit);
236 t >>= PyLong_SHIFT;
237 }
238 }
239 return (PyObject *)v;
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000240}
241
Guido van Rossum53756b11997-01-03 17:14:46 +0000242/* Create a new long int object from a C unsigned long int */
243
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000244PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +0000245PyLong_FromUnsignedLong(unsigned long ival)
Guido van Rossum53756b11997-01-03 17:14:46 +0000246{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000247 PyLongObject *v;
248 unsigned long t;
249 int ndigits = 0;
Tim Petersce9de2f2001-06-14 04:56:19 +0000250
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000251 if (ival < PyLong_BASE)
252 return PyLong_FromLong(ival);
253 /* Count the number of Python digits. */
254 t = (unsigned long)ival;
255 while (t) {
256 ++ndigits;
257 t >>= PyLong_SHIFT;
258 }
259 v = _PyLong_New(ndigits);
260 if (v != NULL) {
261 digit *p = v->ob_digit;
262 Py_SIZE(v) = ndigits;
263 while (ival) {
264 *p++ = (digit)(ival & PyLong_MASK);
265 ival >>= PyLong_SHIFT;
266 }
267 }
268 return (PyObject *)v;
Guido van Rossum53756b11997-01-03 17:14:46 +0000269}
270
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000271/* Create a new long int object from a C double */
272
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000273PyObject *
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000274PyLong_FromDouble(double dval)
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000275{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000276 PyLongObject *v;
277 double frac;
278 int i, ndig, expo, neg;
279 neg = 0;
280 if (Py_IS_INFINITY(dval)) {
281 PyErr_SetString(PyExc_OverflowError,
Mark Dickinson22b20182010-05-10 21:27:53 +0000282 "cannot convert float infinity to integer");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000283 return NULL;
284 }
285 if (Py_IS_NAN(dval)) {
286 PyErr_SetString(PyExc_ValueError,
Mark Dickinson22b20182010-05-10 21:27:53 +0000287 "cannot convert float NaN to integer");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000288 return NULL;
289 }
290 if (dval < 0.0) {
291 neg = 1;
292 dval = -dval;
293 }
294 frac = frexp(dval, &expo); /* dval = frac*2**expo; 0.0 <= frac < 1.0 */
295 if (expo <= 0)
296 return PyLong_FromLong(0L);
297 ndig = (expo-1) / PyLong_SHIFT + 1; /* Number of 'digits' in result */
298 v = _PyLong_New(ndig);
299 if (v == NULL)
300 return NULL;
301 frac = ldexp(frac, (expo-1) % PyLong_SHIFT + 1);
302 for (i = ndig; --i >= 0; ) {
303 digit bits = (digit)frac;
304 v->ob_digit[i] = bits;
305 frac = frac - (double)bits;
306 frac = ldexp(frac, PyLong_SHIFT);
307 }
308 if (neg)
309 Py_SIZE(v) = -(Py_SIZE(v));
310 return (PyObject *)v;
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000311}
312
Thomas Wouters89f507f2006-12-13 04:49:30 +0000313/* Checking for overflow in PyLong_AsLong is a PITA since C doesn't define
314 * anything about what happens when a signed integer operation overflows,
315 * and some compilers think they're doing you a favor by being "clever"
316 * then. The bit pattern for the largest postive signed long is
317 * (unsigned long)LONG_MAX, and for the smallest negative signed long
318 * it is abs(LONG_MIN), which we could write -(unsigned long)LONG_MIN.
319 * However, some other compilers warn about applying unary minus to an
320 * unsigned operand. Hence the weird "0-".
321 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000322#define PY_ABS_LONG_MIN (0-(unsigned long)LONG_MIN)
323#define PY_ABS_SSIZE_T_MIN (0-(size_t)PY_SSIZE_T_MIN)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000324
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000325/* Get a C long int from a long int object.
326 Returns -1 and sets an error condition if overflow occurs. */
327
328long
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +0000329PyLong_AsLongAndOverflow(PyObject *vv, int *overflow)
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000330{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000331 /* This version by Tim Peters */
332 register PyLongObject *v;
333 unsigned long x, prev;
334 long res;
335 Py_ssize_t i;
336 int sign;
337 int do_decref = 0; /* if nb_int was called */
Guido van Rossumf7531811998-05-26 14:33:37 +0000338
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000339 *overflow = 0;
340 if (vv == NULL) {
341 PyErr_BadInternalCall();
342 return -1;
343 }
Guido van Rossumddefaf32007-01-14 03:31:43 +0000344
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000345 if (!PyLong_Check(vv)) {
346 PyNumberMethods *nb;
347 nb = vv->ob_type->tp_as_number;
348 if (nb == NULL || nb->nb_int == NULL) {
349 PyErr_SetString(PyExc_TypeError,
350 "an integer is required");
351 return -1;
352 }
353 vv = (*nb->nb_int) (vv);
354 if (vv == NULL)
355 return -1;
356 do_decref = 1;
357 if (!PyLong_Check(vv)) {
358 Py_DECREF(vv);
359 PyErr_SetString(PyExc_TypeError,
360 "nb_int should return int object");
361 return -1;
362 }
363 }
Guido van Rossumddefaf32007-01-14 03:31:43 +0000364
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000365 res = -1;
366 v = (PyLongObject *)vv;
367 i = Py_SIZE(v);
Guido van Rossumf7531811998-05-26 14:33:37 +0000368
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000369 switch (i) {
370 case -1:
371 res = -(sdigit)v->ob_digit[0];
372 break;
373 case 0:
374 res = 0;
375 break;
376 case 1:
377 res = v->ob_digit[0];
378 break;
379 default:
380 sign = 1;
381 x = 0;
382 if (i < 0) {
383 sign = -1;
384 i = -(i);
385 }
386 while (--i >= 0) {
387 prev = x;
388 x = (x << PyLong_SHIFT) | v->ob_digit[i];
389 if ((x >> PyLong_SHIFT) != prev) {
390 *overflow = sign;
391 goto exit;
392 }
393 }
394 /* Haven't lost any bits, but casting to long requires extra
395 * care (see comment above).
396 */
397 if (x <= (unsigned long)LONG_MAX) {
398 res = (long)x * sign;
399 }
400 else if (sign < 0 && x == PY_ABS_LONG_MIN) {
401 res = LONG_MIN;
402 }
403 else {
404 *overflow = sign;
405 /* res is already set to -1 */
406 }
407 }
Mark Dickinson22b20182010-05-10 21:27:53 +0000408 exit:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000409 if (do_decref) {
410 Py_DECREF(vv);
411 }
412 return res;
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000413}
414
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000415long
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +0000416PyLong_AsLong(PyObject *obj)
417{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000418 int overflow;
419 long result = PyLong_AsLongAndOverflow(obj, &overflow);
420 if (overflow) {
421 /* XXX: could be cute and give a different
422 message for overflow == -1 */
423 PyErr_SetString(PyExc_OverflowError,
424 "Python int too large to convert to C long");
425 }
426 return result;
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +0000427}
428
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000429/* Get a Py_ssize_t from a long int object.
430 Returns -1 and sets an error condition if overflow occurs. */
431
432Py_ssize_t
Guido van Rossumddefaf32007-01-14 03:31:43 +0000433PyLong_AsSsize_t(PyObject *vv) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000434 register PyLongObject *v;
435 size_t x, prev;
436 Py_ssize_t i;
437 int sign;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000438
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000439 if (vv == NULL) {
440 PyErr_BadInternalCall();
441 return -1;
442 }
443 if (!PyLong_Check(vv)) {
444 PyErr_SetString(PyExc_TypeError, "an integer is required");
445 return -1;
446 }
Mark Dickinsond59b4162010-03-13 11:34:40 +0000447
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000448 v = (PyLongObject *)vv;
449 i = Py_SIZE(v);
450 switch (i) {
451 case -1: return -(sdigit)v->ob_digit[0];
452 case 0: return 0;
453 case 1: return v->ob_digit[0];
454 }
455 sign = 1;
456 x = 0;
457 if (i < 0) {
458 sign = -1;
459 i = -(i);
460 }
461 while (--i >= 0) {
462 prev = x;
463 x = (x << PyLong_SHIFT) | v->ob_digit[i];
464 if ((x >> PyLong_SHIFT) != prev)
465 goto overflow;
466 }
467 /* Haven't lost any bits, but casting to a signed type requires
468 * extra care (see comment above).
469 */
470 if (x <= (size_t)PY_SSIZE_T_MAX) {
471 return (Py_ssize_t)x * sign;
472 }
473 else if (sign < 0 && x == PY_ABS_SSIZE_T_MIN) {
474 return PY_SSIZE_T_MIN;
475 }
476 /* else overflow */
Martin v. Löwis18e16552006-02-15 17:27:45 +0000477
Mark Dickinson22b20182010-05-10 21:27:53 +0000478 overflow:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000479 PyErr_SetString(PyExc_OverflowError,
480 "Python int too large to convert to C ssize_t");
481 return -1;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000482}
483
Guido van Rossumd8c80482002-08-13 00:24:58 +0000484/* Get a C unsigned long int from a long int object.
Guido van Rossum53756b11997-01-03 17:14:46 +0000485 Returns -1 and sets an error condition if overflow occurs. */
486
487unsigned long
Tim Peters9f688bf2000-07-07 15:53:28 +0000488PyLong_AsUnsignedLong(PyObject *vv)
Guido van Rossum53756b11997-01-03 17:14:46 +0000489{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000490 register PyLongObject *v;
491 unsigned long x, prev;
492 Py_ssize_t i;
Tim Peters5af4e6c2002-08-12 02:31:19 +0000493
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000494 if (vv == NULL) {
495 PyErr_BadInternalCall();
496 return (unsigned long)-1;
497 }
498 if (!PyLong_Check(vv)) {
499 PyErr_SetString(PyExc_TypeError, "an integer is required");
500 return (unsigned long)-1;
501 }
Mark Dickinsond59b4162010-03-13 11:34:40 +0000502
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000503 v = (PyLongObject *)vv;
504 i = Py_SIZE(v);
505 x = 0;
506 if (i < 0) {
507 PyErr_SetString(PyExc_OverflowError,
Mark Dickinson22b20182010-05-10 21:27:53 +0000508 "can't convert negative value to unsigned int");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000509 return (unsigned long) -1;
510 }
511 switch (i) {
512 case 0: return 0;
513 case 1: return v->ob_digit[0];
514 }
515 while (--i >= 0) {
516 prev = x;
517 x = (x << PyLong_SHIFT) | v->ob_digit[i];
518 if ((x >> PyLong_SHIFT) != prev) {
519 PyErr_SetString(PyExc_OverflowError,
Mark Dickinson22b20182010-05-10 21:27:53 +0000520 "python int too large to convert "
521 "to C unsigned long");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000522 return (unsigned long) -1;
523 }
524 }
525 return x;
Guido van Rossumddefaf32007-01-14 03:31:43 +0000526}
527
528/* Get a C unsigned long int from a long int object.
529 Returns -1 and sets an error condition if overflow occurs. */
530
531size_t
532PyLong_AsSize_t(PyObject *vv)
533{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000534 register PyLongObject *v;
535 size_t x, prev;
536 Py_ssize_t i;
Guido van Rossumddefaf32007-01-14 03:31:43 +0000537
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000538 if (vv == NULL) {
539 PyErr_BadInternalCall();
540 return (size_t) -1;
541 }
542 if (!PyLong_Check(vv)) {
543 PyErr_SetString(PyExc_TypeError, "an integer is required");
544 return (size_t)-1;
545 }
Mark Dickinsond59b4162010-03-13 11:34:40 +0000546
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000547 v = (PyLongObject *)vv;
548 i = Py_SIZE(v);
549 x = 0;
550 if (i < 0) {
551 PyErr_SetString(PyExc_OverflowError,
552 "can't convert negative value to size_t");
553 return (size_t) -1;
554 }
555 switch (i) {
556 case 0: return 0;
557 case 1: return v->ob_digit[0];
558 }
559 while (--i >= 0) {
560 prev = x;
561 x = (x << PyLong_SHIFT) | v->ob_digit[i];
562 if ((x >> PyLong_SHIFT) != prev) {
563 PyErr_SetString(PyExc_OverflowError,
564 "Python int too large to convert to C size_t");
565 return (unsigned long) -1;
566 }
567 }
568 return x;
Guido van Rossum53756b11997-01-03 17:14:46 +0000569}
570
Thomas Hellera4ea6032003-04-17 18:55:45 +0000571/* Get a C unsigned long int from a long int object, ignoring the high bits.
572 Returns -1 and sets an error condition if an error occurs. */
573
Guido van Rossumddefaf32007-01-14 03:31:43 +0000574static unsigned long
575_PyLong_AsUnsignedLongMask(PyObject *vv)
Thomas Hellera4ea6032003-04-17 18:55:45 +0000576{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000577 register PyLongObject *v;
578 unsigned long x;
579 Py_ssize_t i;
580 int sign;
Thomas Hellera4ea6032003-04-17 18:55:45 +0000581
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000582 if (vv == NULL || !PyLong_Check(vv)) {
583 PyErr_BadInternalCall();
584 return (unsigned long) -1;
585 }
586 v = (PyLongObject *)vv;
587 i = Py_SIZE(v);
588 switch (i) {
589 case 0: return 0;
590 case 1: return v->ob_digit[0];
591 }
592 sign = 1;
593 x = 0;
594 if (i < 0) {
595 sign = -1;
596 i = -i;
597 }
598 while (--i >= 0) {
599 x = (x << PyLong_SHIFT) | v->ob_digit[i];
600 }
601 return x * sign;
Thomas Hellera4ea6032003-04-17 18:55:45 +0000602}
603
Guido van Rossumddefaf32007-01-14 03:31:43 +0000604unsigned long
605PyLong_AsUnsignedLongMask(register PyObject *op)
606{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000607 PyNumberMethods *nb;
608 PyLongObject *lo;
609 unsigned long val;
Guido van Rossumddefaf32007-01-14 03:31:43 +0000610
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000611 if (op && PyLong_Check(op))
612 return _PyLong_AsUnsignedLongMask(op);
Guido van Rossumddefaf32007-01-14 03:31:43 +0000613
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000614 if (op == NULL || (nb = op->ob_type->tp_as_number) == NULL ||
615 nb->nb_int == NULL) {
616 PyErr_SetString(PyExc_TypeError, "an integer is required");
617 return (unsigned long)-1;
618 }
Guido van Rossumddefaf32007-01-14 03:31:43 +0000619
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000620 lo = (PyLongObject*) (*nb->nb_int) (op);
621 if (lo == NULL)
622 return (unsigned long)-1;
623 if (PyLong_Check(lo)) {
624 val = _PyLong_AsUnsignedLongMask((PyObject *)lo);
625 Py_DECREF(lo);
626 if (PyErr_Occurred())
627 return (unsigned long)-1;
628 return val;
629 }
630 else
631 {
632 Py_DECREF(lo);
633 PyErr_SetString(PyExc_TypeError,
634 "nb_int should return int object");
635 return (unsigned long)-1;
636 }
Guido van Rossumddefaf32007-01-14 03:31:43 +0000637}
638
Tim Peters5b8132f2003-01-31 15:52:05 +0000639int
640_PyLong_Sign(PyObject *vv)
641{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000642 PyLongObject *v = (PyLongObject *)vv;
Tim Peters5b8132f2003-01-31 15:52:05 +0000643
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000644 assert(v != NULL);
645 assert(PyLong_Check(v));
Tim Peters5b8132f2003-01-31 15:52:05 +0000646
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000647 return Py_SIZE(v) == 0 ? 0 : (Py_SIZE(v) < 0 ? -1 : 1);
Tim Peters5b8132f2003-01-31 15:52:05 +0000648}
649
Tim Petersbaefd9e2003-01-28 20:37:45 +0000650size_t
651_PyLong_NumBits(PyObject *vv)
652{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000653 PyLongObject *v = (PyLongObject *)vv;
654 size_t result = 0;
655 Py_ssize_t ndigits;
Tim Petersbaefd9e2003-01-28 20:37:45 +0000656
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000657 assert(v != NULL);
658 assert(PyLong_Check(v));
659 ndigits = ABS(Py_SIZE(v));
660 assert(ndigits == 0 || v->ob_digit[ndigits - 1] != 0);
661 if (ndigits > 0) {
662 digit msd = v->ob_digit[ndigits - 1];
Tim Petersbaefd9e2003-01-28 20:37:45 +0000663
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000664 result = (ndigits - 1) * PyLong_SHIFT;
665 if (result / PyLong_SHIFT != (size_t)(ndigits - 1))
666 goto Overflow;
667 do {
668 ++result;
669 if (result == 0)
670 goto Overflow;
671 msd >>= 1;
672 } while (msd);
673 }
674 return result;
Tim Petersbaefd9e2003-01-28 20:37:45 +0000675
Mark Dickinson22b20182010-05-10 21:27:53 +0000676 Overflow:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000677 PyErr_SetString(PyExc_OverflowError, "int has too many bits "
678 "to express in a platform size_t");
679 return (size_t)-1;
Tim Petersbaefd9e2003-01-28 20:37:45 +0000680}
681
Tim Peters2a9b3672001-06-11 21:23:58 +0000682PyObject *
683_PyLong_FromByteArray(const unsigned char* bytes, size_t n,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000684 int little_endian, int is_signed)
Tim Peters2a9b3672001-06-11 21:23:58 +0000685{
Mark Dickinson22b20182010-05-10 21:27:53 +0000686 const unsigned char* pstartbyte; /* LSB of bytes */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000687 int incr; /* direction to move pstartbyte */
688 const unsigned char* pendbyte; /* MSB of bytes */
689 size_t numsignificantbytes; /* number of bytes that matter */
690 Py_ssize_t ndigits; /* number of Python long digits */
691 PyLongObject* v; /* result */
692 Py_ssize_t idigit = 0; /* next free index in v->ob_digit */
Tim Peters2a9b3672001-06-11 21:23:58 +0000693
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000694 if (n == 0)
695 return PyLong_FromLong(0L);
Tim Peters2a9b3672001-06-11 21:23:58 +0000696
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000697 if (little_endian) {
698 pstartbyte = bytes;
699 pendbyte = bytes + n - 1;
700 incr = 1;
701 }
702 else {
703 pstartbyte = bytes + n - 1;
704 pendbyte = bytes;
705 incr = -1;
706 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000707
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000708 if (is_signed)
709 is_signed = *pendbyte >= 0x80;
Tim Peters2a9b3672001-06-11 21:23:58 +0000710
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000711 /* Compute numsignificantbytes. This consists of finding the most
Ezio Melotti13925002011-03-16 11:05:33 +0200712 significant byte. Leading 0 bytes are insignificant if the number
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000713 is positive, and leading 0xff bytes if negative. */
714 {
715 size_t i;
716 const unsigned char* p = pendbyte;
717 const int pincr = -incr; /* search MSB to LSB */
718 const unsigned char insignficant = is_signed ? 0xff : 0x00;
Tim Peters2a9b3672001-06-11 21:23:58 +0000719
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000720 for (i = 0; i < n; ++i, p += pincr) {
721 if (*p != insignficant)
722 break;
723 }
724 numsignificantbytes = n - i;
725 /* 2's-comp is a bit tricky here, e.g. 0xff00 == -0x0100, so
726 actually has 2 significant bytes. OTOH, 0xff0001 ==
727 -0x00ffff, so we wouldn't *need* to bump it there; but we
728 do for 0xffff = -0x0001. To be safe without bothering to
729 check every case, bump it regardless. */
730 if (is_signed && numsignificantbytes < n)
731 ++numsignificantbytes;
732 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000733
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000734 /* How many Python long digits do we need? We have
735 8*numsignificantbytes bits, and each Python long digit has
736 PyLong_SHIFT bits, so it's the ceiling of the quotient. */
737 /* catch overflow before it happens */
738 if (numsignificantbytes > (PY_SSIZE_T_MAX - PyLong_SHIFT) / 8) {
739 PyErr_SetString(PyExc_OverflowError,
740 "byte array too long to convert to int");
741 return NULL;
742 }
743 ndigits = (numsignificantbytes * 8 + PyLong_SHIFT - 1) / PyLong_SHIFT;
744 v = _PyLong_New(ndigits);
745 if (v == NULL)
746 return NULL;
Tim Peters2a9b3672001-06-11 21:23:58 +0000747
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000748 /* Copy the bits over. The tricky parts are computing 2's-comp on
749 the fly for signed numbers, and dealing with the mismatch between
750 8-bit bytes and (probably) 15-bit Python digits.*/
751 {
752 size_t i;
753 twodigits carry = 1; /* for 2's-comp calculation */
754 twodigits accum = 0; /* sliding register */
755 unsigned int accumbits = 0; /* number of bits in accum */
756 const unsigned char* p = pstartbyte;
Tim Peters2a9b3672001-06-11 21:23:58 +0000757
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000758 for (i = 0; i < numsignificantbytes; ++i, p += incr) {
759 twodigits thisbyte = *p;
760 /* Compute correction for 2's comp, if needed. */
761 if (is_signed) {
762 thisbyte = (0xff ^ thisbyte) + carry;
763 carry = thisbyte >> 8;
764 thisbyte &= 0xff;
765 }
766 /* Because we're going LSB to MSB, thisbyte is
767 more significant than what's already in accum,
768 so needs to be prepended to accum. */
769 accum |= (twodigits)thisbyte << accumbits;
770 accumbits += 8;
771 if (accumbits >= PyLong_SHIFT) {
772 /* There's enough to fill a Python digit. */
773 assert(idigit < ndigits);
Mark Dickinson22b20182010-05-10 21:27:53 +0000774 v->ob_digit[idigit] = (digit)(accum & PyLong_MASK);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000775 ++idigit;
776 accum >>= PyLong_SHIFT;
777 accumbits -= PyLong_SHIFT;
778 assert(accumbits < PyLong_SHIFT);
779 }
780 }
781 assert(accumbits < PyLong_SHIFT);
782 if (accumbits) {
783 assert(idigit < ndigits);
784 v->ob_digit[idigit] = (digit)accum;
785 ++idigit;
786 }
787 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000788
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000789 Py_SIZE(v) = is_signed ? -idigit : idigit;
790 return (PyObject *)long_normalize(v);
Tim Peters2a9b3672001-06-11 21:23:58 +0000791}
792
793int
794_PyLong_AsByteArray(PyLongObject* v,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000795 unsigned char* bytes, size_t n,
796 int little_endian, int is_signed)
Tim Peters2a9b3672001-06-11 21:23:58 +0000797{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000798 Py_ssize_t i; /* index into v->ob_digit */
Mark Dickinson22b20182010-05-10 21:27:53 +0000799 Py_ssize_t ndigits; /* |v->ob_size| */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000800 twodigits accum; /* sliding register */
Mark Dickinson22b20182010-05-10 21:27:53 +0000801 unsigned int accumbits; /* # bits in accum */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000802 int do_twos_comp; /* store 2's-comp? is_signed and v < 0 */
803 digit carry; /* for computing 2's-comp */
804 size_t j; /* # bytes filled */
805 unsigned char* p; /* pointer to next byte in bytes */
806 int pincr; /* direction to move p */
Tim Peters2a9b3672001-06-11 21:23:58 +0000807
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000808 assert(v != NULL && PyLong_Check(v));
Tim Peters2a9b3672001-06-11 21:23:58 +0000809
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000810 if (Py_SIZE(v) < 0) {
811 ndigits = -(Py_SIZE(v));
812 if (!is_signed) {
813 PyErr_SetString(PyExc_OverflowError,
Mark Dickinson22b20182010-05-10 21:27:53 +0000814 "can't convert negative int to unsigned");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000815 return -1;
816 }
817 do_twos_comp = 1;
818 }
819 else {
820 ndigits = Py_SIZE(v);
821 do_twos_comp = 0;
822 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000823
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000824 if (little_endian) {
825 p = bytes;
826 pincr = 1;
827 }
828 else {
829 p = bytes + n - 1;
830 pincr = -1;
831 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000832
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000833 /* Copy over all the Python digits.
834 It's crucial that every Python digit except for the MSD contribute
835 exactly PyLong_SHIFT bits to the total, so first assert that the long is
836 normalized. */
837 assert(ndigits == 0 || v->ob_digit[ndigits - 1] != 0);
838 j = 0;
839 accum = 0;
840 accumbits = 0;
841 carry = do_twos_comp ? 1 : 0;
842 for (i = 0; i < ndigits; ++i) {
843 digit thisdigit = v->ob_digit[i];
844 if (do_twos_comp) {
845 thisdigit = (thisdigit ^ PyLong_MASK) + carry;
846 carry = thisdigit >> PyLong_SHIFT;
847 thisdigit &= PyLong_MASK;
848 }
849 /* Because we're going LSB to MSB, thisdigit is more
850 significant than what's already in accum, so needs to be
851 prepended to accum. */
852 accum |= (twodigits)thisdigit << accumbits;
Tim Peters8bc84b42001-06-12 19:17:03 +0000853
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000854 /* The most-significant digit may be (probably is) at least
855 partly empty. */
856 if (i == ndigits - 1) {
857 /* Count # of sign bits -- they needn't be stored,
858 * although for signed conversion we need later to
859 * make sure at least one sign bit gets stored. */
Mark Dickinson22b20182010-05-10 21:27:53 +0000860 digit s = do_twos_comp ? thisdigit ^ PyLong_MASK : thisdigit;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000861 while (s != 0) {
862 s >>= 1;
863 accumbits++;
864 }
865 }
866 else
867 accumbits += PyLong_SHIFT;
Tim Peters8bc84b42001-06-12 19:17:03 +0000868
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000869 /* Store as many bytes as possible. */
870 while (accumbits >= 8) {
871 if (j >= n)
872 goto Overflow;
873 ++j;
874 *p = (unsigned char)(accum & 0xff);
875 p += pincr;
876 accumbits -= 8;
877 accum >>= 8;
878 }
879 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000880
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000881 /* Store the straggler (if any). */
882 assert(accumbits < 8);
883 assert(carry == 0); /* else do_twos_comp and *every* digit was 0 */
884 if (accumbits > 0) {
885 if (j >= n)
886 goto Overflow;
887 ++j;
888 if (do_twos_comp) {
889 /* Fill leading bits of the byte with sign bits
890 (appropriately pretending that the long had an
891 infinite supply of sign bits). */
892 accum |= (~(twodigits)0) << accumbits;
893 }
894 *p = (unsigned char)(accum & 0xff);
895 p += pincr;
896 }
897 else if (j == n && n > 0 && is_signed) {
898 /* The main loop filled the byte array exactly, so the code
899 just above didn't get to ensure there's a sign bit, and the
900 loop below wouldn't add one either. Make sure a sign bit
901 exists. */
902 unsigned char msb = *(p - pincr);
903 int sign_bit_set = msb >= 0x80;
904 assert(accumbits == 0);
905 if (sign_bit_set == do_twos_comp)
906 return 0;
907 else
908 goto Overflow;
909 }
Tim Peters05607ad2001-06-13 21:01:27 +0000910
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000911 /* Fill remaining bytes with copies of the sign bit. */
912 {
913 unsigned char signbyte = do_twos_comp ? 0xffU : 0U;
914 for ( ; j < n; ++j, p += pincr)
915 *p = signbyte;
916 }
Tim Peters05607ad2001-06-13 21:01:27 +0000917
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000918 return 0;
Tim Peters2a9b3672001-06-11 21:23:58 +0000919
Mark Dickinson22b20182010-05-10 21:27:53 +0000920 Overflow:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000921 PyErr_SetString(PyExc_OverflowError, "int too big to convert");
922 return -1;
Tim Peters5af4e6c2002-08-12 02:31:19 +0000923
Tim Peters2a9b3672001-06-11 21:23:58 +0000924}
925
Guido van Rossum78694d91998-09-18 14:14:13 +0000926/* Create a new long (or int) object from a C pointer */
927
928PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +0000929PyLong_FromVoidPtr(void *p)
Guido van Rossum78694d91998-09-18 14:14:13 +0000930{
Tim Peters70128a12001-06-16 08:48:40 +0000931#ifndef HAVE_LONG_LONG
932# error "PyLong_FromVoidPtr: sizeof(void*) > sizeof(long), but no long long"
933#endif
934#if SIZEOF_LONG_LONG < SIZEOF_VOID_P
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000935# error "PyLong_FromVoidPtr: sizeof(PY_LONG_LONG) < sizeof(void*)"
Tim Peters70128a12001-06-16 08:48:40 +0000936#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000937 /* special-case null pointer */
938 if (!p)
939 return PyLong_FromLong(0);
940 return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG)(Py_uintptr_t)p);
Tim Peters70128a12001-06-16 08:48:40 +0000941
Guido van Rossum78694d91998-09-18 14:14:13 +0000942}
943
944/* Get a C pointer from a long object (or an int object in some cases) */
945
946void *
Tim Peters9f688bf2000-07-07 15:53:28 +0000947PyLong_AsVoidPtr(PyObject *vv)
Guido van Rossum78694d91998-09-18 14:14:13 +0000948{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000949 /* This function will allow int or long objects. If vv is neither,
950 then the PyLong_AsLong*() functions will raise the exception:
951 PyExc_SystemError, "bad argument to internal function"
952 */
Tim Peters70128a12001-06-16 08:48:40 +0000953#if SIZEOF_VOID_P <= SIZEOF_LONG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000954 long x;
Guido van Rossum78694d91998-09-18 14:14:13 +0000955
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000956 if (PyLong_Check(vv) && _PyLong_Sign(vv) < 0)
957 x = PyLong_AsLong(vv);
958 else
959 x = PyLong_AsUnsignedLong(vv);
Guido van Rossum78694d91998-09-18 14:14:13 +0000960#else
Tim Peters70128a12001-06-16 08:48:40 +0000961
962#ifndef HAVE_LONG_LONG
963# error "PyLong_AsVoidPtr: sizeof(void*) > sizeof(long), but no long long"
964#endif
965#if SIZEOF_LONG_LONG < SIZEOF_VOID_P
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000966# error "PyLong_AsVoidPtr: sizeof(PY_LONG_LONG) < sizeof(void*)"
Tim Peters70128a12001-06-16 08:48:40 +0000967#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000968 PY_LONG_LONG x;
Guido van Rossum78694d91998-09-18 14:14:13 +0000969
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000970 if (PyLong_Check(vv) && _PyLong_Sign(vv) < 0)
971 x = PyLong_AsLongLong(vv);
972 else
973 x = PyLong_AsUnsignedLongLong(vv);
Tim Peters70128a12001-06-16 08:48:40 +0000974
975#endif /* SIZEOF_VOID_P <= SIZEOF_LONG */
Guido van Rossum78694d91998-09-18 14:14:13 +0000976
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000977 if (x == -1 && PyErr_Occurred())
978 return NULL;
979 return (void *)x;
Guido van Rossum78694d91998-09-18 14:14:13 +0000980}
981
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000982#ifdef HAVE_LONG_LONG
Tim Petersd1a7da62001-06-13 00:35:57 +0000983
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000984/* Initial PY_LONG_LONG support by Chris Herborth (chrish@qnx.com), later
Tim Petersd1a7da62001-06-13 00:35:57 +0000985 * rewritten to use the newer PyLong_{As,From}ByteArray API.
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000986 */
987
Tim Peterscf37dfc2001-06-14 18:42:50 +0000988#define IS_LITTLE_ENDIAN (int)*(unsigned char*)&one
Mark Dickinson22b20182010-05-10 21:27:53 +0000989#define PY_ABS_LLONG_MIN (0-(unsigned PY_LONG_LONG)PY_LLONG_MIN)
Tim Petersd1a7da62001-06-13 00:35:57 +0000990
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000991/* Create a new long int object from a C PY_LONG_LONG int. */
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000992
993PyObject *
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000994PyLong_FromLongLong(PY_LONG_LONG ival)
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000995{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000996 PyLongObject *v;
997 unsigned PY_LONG_LONG abs_ival;
998 unsigned PY_LONG_LONG t; /* unsigned so >> doesn't propagate sign bit */
999 int ndigits = 0;
1000 int negative = 0;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001001
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001002 CHECK_SMALL_INT(ival);
1003 if (ival < 0) {
1004 /* avoid signed overflow on negation; see comments
1005 in PyLong_FromLong above. */
1006 abs_ival = (unsigned PY_LONG_LONG)(-1-ival) + 1;
1007 negative = 1;
1008 }
1009 else {
1010 abs_ival = (unsigned PY_LONG_LONG)ival;
1011 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00001012
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001013 /* Count the number of Python digits.
1014 We used to pick 5 ("big enough for anything"), but that's a
1015 waste of time and space given that 5*15 = 75 bits are rarely
1016 needed. */
1017 t = abs_ival;
1018 while (t) {
1019 ++ndigits;
1020 t >>= PyLong_SHIFT;
1021 }
1022 v = _PyLong_New(ndigits);
1023 if (v != NULL) {
1024 digit *p = v->ob_digit;
1025 Py_SIZE(v) = negative ? -ndigits : ndigits;
1026 t = abs_ival;
1027 while (t) {
1028 *p++ = (digit)(t & PyLong_MASK);
1029 t >>= PyLong_SHIFT;
1030 }
1031 }
1032 return (PyObject *)v;
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001033}
1034
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001035/* Create a new long int object from a C unsigned PY_LONG_LONG int. */
Tim Petersd1a7da62001-06-13 00:35:57 +00001036
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001037PyObject *
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001038PyLong_FromUnsignedLongLong(unsigned PY_LONG_LONG ival)
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001039{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001040 PyLongObject *v;
1041 unsigned PY_LONG_LONG t;
1042 int ndigits = 0;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001043
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001044 if (ival < PyLong_BASE)
1045 return PyLong_FromLong((long)ival);
1046 /* Count the number of Python digits. */
1047 t = (unsigned PY_LONG_LONG)ival;
1048 while (t) {
1049 ++ndigits;
1050 t >>= PyLong_SHIFT;
1051 }
1052 v = _PyLong_New(ndigits);
1053 if (v != NULL) {
1054 digit *p = v->ob_digit;
1055 Py_SIZE(v) = ndigits;
1056 while (ival) {
1057 *p++ = (digit)(ival & PyLong_MASK);
1058 ival >>= PyLong_SHIFT;
1059 }
1060 }
1061 return (PyObject *)v;
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001062}
1063
Martin v. Löwis18e16552006-02-15 17:27:45 +00001064/* Create a new long int object from a C Py_ssize_t. */
1065
1066PyObject *
Guido van Rossumddefaf32007-01-14 03:31:43 +00001067PyLong_FromSsize_t(Py_ssize_t ival)
Martin v. Löwis18e16552006-02-15 17:27:45 +00001068{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001069 PyLongObject *v;
1070 size_t abs_ival;
1071 size_t t; /* unsigned so >> doesn't propagate sign bit */
1072 int ndigits = 0;
1073 int negative = 0;
Mark Dickinson7ab6be22008-04-15 21:42:42 +00001074
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001075 CHECK_SMALL_INT(ival);
1076 if (ival < 0) {
1077 /* avoid signed overflow when ival = SIZE_T_MIN */
1078 abs_ival = (size_t)(-1-ival)+1;
1079 negative = 1;
1080 }
1081 else {
1082 abs_ival = (size_t)ival;
1083 }
Mark Dickinson7ab6be22008-04-15 21:42:42 +00001084
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001085 /* Count the number of Python digits. */
1086 t = abs_ival;
1087 while (t) {
1088 ++ndigits;
1089 t >>= PyLong_SHIFT;
1090 }
1091 v = _PyLong_New(ndigits);
1092 if (v != NULL) {
1093 digit *p = v->ob_digit;
1094 Py_SIZE(v) = negative ? -ndigits : ndigits;
1095 t = abs_ival;
1096 while (t) {
1097 *p++ = (digit)(t & PyLong_MASK);
1098 t >>= PyLong_SHIFT;
1099 }
1100 }
1101 return (PyObject *)v;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001102}
1103
1104/* Create a new long int object from a C size_t. */
1105
1106PyObject *
Guido van Rossumddefaf32007-01-14 03:31:43 +00001107PyLong_FromSize_t(size_t ival)
Martin v. Löwis18e16552006-02-15 17:27:45 +00001108{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001109 PyLongObject *v;
1110 size_t t;
1111 int ndigits = 0;
Mark Dickinson7ab6be22008-04-15 21:42:42 +00001112
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001113 if (ival < PyLong_BASE)
1114 return PyLong_FromLong((long)ival);
1115 /* Count the number of Python digits. */
1116 t = ival;
1117 while (t) {
1118 ++ndigits;
1119 t >>= PyLong_SHIFT;
1120 }
1121 v = _PyLong_New(ndigits);
1122 if (v != NULL) {
1123 digit *p = v->ob_digit;
1124 Py_SIZE(v) = ndigits;
1125 while (ival) {
1126 *p++ = (digit)(ival & PyLong_MASK);
1127 ival >>= PyLong_SHIFT;
1128 }
1129 }
1130 return (PyObject *)v;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001131}
1132
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001133/* Get a C PY_LONG_LONG int from a long int object.
Tim Petersd1a7da62001-06-13 00:35:57 +00001134 Return -1 and set an error if overflow occurs. */
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001135
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001136PY_LONG_LONG
Tim Peters9f688bf2000-07-07 15:53:28 +00001137PyLong_AsLongLong(PyObject *vv)
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001138{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001139 PyLongObject *v;
1140 PY_LONG_LONG bytes;
1141 int one = 1;
1142 int res;
Tim Petersd1a7da62001-06-13 00:35:57 +00001143
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001144 if (vv == NULL) {
1145 PyErr_BadInternalCall();
1146 return -1;
1147 }
1148 if (!PyLong_Check(vv)) {
1149 PyNumberMethods *nb;
1150 PyObject *io;
1151 if ((nb = vv->ob_type->tp_as_number) == NULL ||
1152 nb->nb_int == NULL) {
1153 PyErr_SetString(PyExc_TypeError, "an integer is required");
1154 return -1;
1155 }
1156 io = (*nb->nb_int) (vv);
1157 if (io == NULL)
1158 return -1;
1159 if (PyLong_Check(io)) {
1160 bytes = PyLong_AsLongLong(io);
1161 Py_DECREF(io);
1162 return bytes;
1163 }
1164 Py_DECREF(io);
1165 PyErr_SetString(PyExc_TypeError, "integer conversion failed");
1166 return -1;
1167 }
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001168
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001169 v = (PyLongObject*)vv;
1170 switch(Py_SIZE(v)) {
1171 case -1: return -(sdigit)v->ob_digit[0];
1172 case 0: return 0;
1173 case 1: return v->ob_digit[0];
1174 }
Mark Dickinson22b20182010-05-10 21:27:53 +00001175 res = _PyLong_AsByteArray((PyLongObject *)vv, (unsigned char *)&bytes,
1176 SIZEOF_LONG_LONG, IS_LITTLE_ENDIAN, 1);
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001177
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001178 /* Plan 9 can't handle PY_LONG_LONG in ? : expressions */
1179 if (res < 0)
1180 return (PY_LONG_LONG)-1;
1181 else
1182 return bytes;
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001183}
1184
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001185/* Get a C unsigned PY_LONG_LONG int from a long int object.
Tim Petersd1a7da62001-06-13 00:35:57 +00001186 Return -1 and set an error if overflow occurs. */
1187
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001188unsigned PY_LONG_LONG
Tim Peters9f688bf2000-07-07 15:53:28 +00001189PyLong_AsUnsignedLongLong(PyObject *vv)
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001190{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001191 PyLongObject *v;
1192 unsigned PY_LONG_LONG bytes;
1193 int one = 1;
1194 int res;
Tim Petersd1a7da62001-06-13 00:35:57 +00001195
Nadeem Vawda3d5881e2011-09-07 21:40:26 +02001196 if (vv == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001197 PyErr_BadInternalCall();
1198 return (unsigned PY_LONG_LONG)-1;
1199 }
Nadeem Vawda3d5881e2011-09-07 21:40:26 +02001200 if (!PyLong_Check(vv)) {
1201 PyErr_SetString(PyExc_TypeError, "an integer is required");
1202 return (unsigned PY_LONG_LONG)-1;
1203 }
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001204
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001205 v = (PyLongObject*)vv;
1206 switch(Py_SIZE(v)) {
1207 case 0: return 0;
1208 case 1: return v->ob_digit[0];
1209 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00001210
Mark Dickinson22b20182010-05-10 21:27:53 +00001211 res = _PyLong_AsByteArray((PyLongObject *)vv, (unsigned char *)&bytes,
1212 SIZEOF_LONG_LONG, IS_LITTLE_ENDIAN, 0);
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001213
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001214 /* Plan 9 can't handle PY_LONG_LONG in ? : expressions */
1215 if (res < 0)
1216 return (unsigned PY_LONG_LONG)res;
1217 else
1218 return bytes;
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001219}
Tim Petersd1a7da62001-06-13 00:35:57 +00001220
Thomas Hellera4ea6032003-04-17 18:55:45 +00001221/* Get a C unsigned long int from a long int object, ignoring the high bits.
1222 Returns -1 and sets an error condition if an error occurs. */
1223
Guido van Rossumddefaf32007-01-14 03:31:43 +00001224static unsigned PY_LONG_LONG
1225_PyLong_AsUnsignedLongLongMask(PyObject *vv)
Thomas Hellera4ea6032003-04-17 18:55:45 +00001226{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001227 register PyLongObject *v;
1228 unsigned PY_LONG_LONG x;
1229 Py_ssize_t i;
1230 int sign;
Thomas Hellera4ea6032003-04-17 18:55:45 +00001231
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001232 if (vv == NULL || !PyLong_Check(vv)) {
1233 PyErr_BadInternalCall();
1234 return (unsigned long) -1;
1235 }
1236 v = (PyLongObject *)vv;
1237 switch(Py_SIZE(v)) {
1238 case 0: return 0;
1239 case 1: return v->ob_digit[0];
1240 }
1241 i = Py_SIZE(v);
1242 sign = 1;
1243 x = 0;
1244 if (i < 0) {
1245 sign = -1;
1246 i = -i;
1247 }
1248 while (--i >= 0) {
1249 x = (x << PyLong_SHIFT) | v->ob_digit[i];
1250 }
1251 return x * sign;
Thomas Hellera4ea6032003-04-17 18:55:45 +00001252}
Guido van Rossumddefaf32007-01-14 03:31:43 +00001253
1254unsigned PY_LONG_LONG
1255PyLong_AsUnsignedLongLongMask(register PyObject *op)
1256{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001257 PyNumberMethods *nb;
1258 PyLongObject *lo;
1259 unsigned PY_LONG_LONG val;
Guido van Rossumddefaf32007-01-14 03:31:43 +00001260
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001261 if (op && PyLong_Check(op))
1262 return _PyLong_AsUnsignedLongLongMask(op);
Guido van Rossumddefaf32007-01-14 03:31:43 +00001263
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001264 if (op == NULL || (nb = op->ob_type->tp_as_number) == NULL ||
1265 nb->nb_int == NULL) {
1266 PyErr_SetString(PyExc_TypeError, "an integer is required");
1267 return (unsigned PY_LONG_LONG)-1;
1268 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00001269
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001270 lo = (PyLongObject*) (*nb->nb_int) (op);
1271 if (lo == NULL)
1272 return (unsigned PY_LONG_LONG)-1;
1273 if (PyLong_Check(lo)) {
1274 val = _PyLong_AsUnsignedLongLongMask((PyObject *)lo);
1275 Py_DECREF(lo);
1276 if (PyErr_Occurred())
1277 return (unsigned PY_LONG_LONG)-1;
1278 return val;
1279 }
1280 else
1281 {
1282 Py_DECREF(lo);
1283 PyErr_SetString(PyExc_TypeError,
1284 "nb_int should return int object");
1285 return (unsigned PY_LONG_LONG)-1;
1286 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00001287}
Tim Petersd1a7da62001-06-13 00:35:57 +00001288#undef IS_LITTLE_ENDIAN
1289
Mark Dickinson93f562c2010-01-30 10:30:15 +00001290/* Get a C long long int from a Python long or Python int object.
1291 On overflow, returns -1 and sets *overflow to 1 or -1 depending
1292 on the sign of the result. Otherwise *overflow is 0.
1293
1294 For other errors (e.g., type error), returns -1 and sets an error
1295 condition.
1296*/
1297
1298PY_LONG_LONG
1299PyLong_AsLongLongAndOverflow(PyObject *vv, int *overflow)
1300{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001301 /* This version by Tim Peters */
1302 register PyLongObject *v;
1303 unsigned PY_LONG_LONG x, prev;
1304 PY_LONG_LONG res;
1305 Py_ssize_t i;
1306 int sign;
1307 int do_decref = 0; /* if nb_int was called */
Mark Dickinson93f562c2010-01-30 10:30:15 +00001308
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001309 *overflow = 0;
1310 if (vv == NULL) {
1311 PyErr_BadInternalCall();
1312 return -1;
1313 }
Mark Dickinson93f562c2010-01-30 10:30:15 +00001314
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001315 if (!PyLong_Check(vv)) {
1316 PyNumberMethods *nb;
1317 nb = vv->ob_type->tp_as_number;
1318 if (nb == NULL || nb->nb_int == NULL) {
1319 PyErr_SetString(PyExc_TypeError,
1320 "an integer is required");
1321 return -1;
1322 }
1323 vv = (*nb->nb_int) (vv);
1324 if (vv == NULL)
1325 return -1;
1326 do_decref = 1;
1327 if (!PyLong_Check(vv)) {
1328 Py_DECREF(vv);
1329 PyErr_SetString(PyExc_TypeError,
1330 "nb_int should return int object");
1331 return -1;
1332 }
1333 }
Mark Dickinson93f562c2010-01-30 10:30:15 +00001334
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001335 res = -1;
1336 v = (PyLongObject *)vv;
1337 i = Py_SIZE(v);
Mark Dickinson93f562c2010-01-30 10:30:15 +00001338
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001339 switch (i) {
1340 case -1:
1341 res = -(sdigit)v->ob_digit[0];
1342 break;
1343 case 0:
1344 res = 0;
1345 break;
1346 case 1:
1347 res = v->ob_digit[0];
1348 break;
1349 default:
1350 sign = 1;
1351 x = 0;
1352 if (i < 0) {
1353 sign = -1;
1354 i = -(i);
1355 }
1356 while (--i >= 0) {
1357 prev = x;
1358 x = (x << PyLong_SHIFT) + v->ob_digit[i];
1359 if ((x >> PyLong_SHIFT) != prev) {
1360 *overflow = sign;
1361 goto exit;
1362 }
1363 }
1364 /* Haven't lost any bits, but casting to long requires extra
1365 * care (see comment above).
1366 */
1367 if (x <= (unsigned PY_LONG_LONG)PY_LLONG_MAX) {
1368 res = (PY_LONG_LONG)x * sign;
1369 }
1370 else if (sign < 0 && x == PY_ABS_LLONG_MIN) {
1371 res = PY_LLONG_MIN;
1372 }
1373 else {
1374 *overflow = sign;
1375 /* res is already set to -1 */
1376 }
1377 }
Mark Dickinson22b20182010-05-10 21:27:53 +00001378 exit:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001379 if (do_decref) {
1380 Py_DECREF(vv);
1381 }
1382 return res;
Mark Dickinson93f562c2010-01-30 10:30:15 +00001383}
1384
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001385#endif /* HAVE_LONG_LONG */
1386
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00001387#define CHECK_BINOP(v,w) \
1388 do { \
Brian Curtindfc80e32011-08-10 20:28:54 -05001389 if (!PyLong_Check(v) || !PyLong_Check(w)) \
1390 Py_RETURN_NOTIMPLEMENTED; \
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00001391 } while(0)
Neil Schemenauerba872e22001-01-04 01:46:03 +00001392
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001393/* bits_in_digit(d) returns the unique integer k such that 2**(k-1) <= d <
1394 2**k if d is nonzero, else 0. */
1395
1396static const unsigned char BitLengthTable[32] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001397 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
1398 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001399};
1400
1401static int
1402bits_in_digit(digit d)
1403{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001404 int d_bits = 0;
1405 while (d >= 32) {
1406 d_bits += 6;
1407 d >>= 6;
1408 }
1409 d_bits += (int)BitLengthTable[d];
1410 return d_bits;
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001411}
1412
Tim Peters877a2122002-08-12 05:09:36 +00001413/* x[0:m] and y[0:n] are digit vectors, LSD first, m >= n required. x[0:n]
1414 * is modified in place, by adding y to it. Carries are propagated as far as
1415 * x[m-1], and the remaining carry (0 or 1) is returned.
1416 */
1417static digit
Martin v. Löwis18e16552006-02-15 17:27:45 +00001418v_iadd(digit *x, Py_ssize_t m, digit *y, Py_ssize_t n)
Tim Peters877a2122002-08-12 05:09:36 +00001419{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001420 Py_ssize_t i;
1421 digit carry = 0;
Tim Peters877a2122002-08-12 05:09:36 +00001422
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001423 assert(m >= n);
1424 for (i = 0; i < n; ++i) {
1425 carry += x[i] + y[i];
1426 x[i] = carry & PyLong_MASK;
1427 carry >>= PyLong_SHIFT;
1428 assert((carry & 1) == carry);
1429 }
1430 for (; carry && i < m; ++i) {
1431 carry += x[i];
1432 x[i] = carry & PyLong_MASK;
1433 carry >>= PyLong_SHIFT;
1434 assert((carry & 1) == carry);
1435 }
1436 return carry;
Tim Peters877a2122002-08-12 05:09:36 +00001437}
1438
1439/* x[0:m] and y[0:n] are digit vectors, LSD first, m >= n required. x[0:n]
1440 * is modified in place, by subtracting y from it. Borrows are propagated as
1441 * far as x[m-1], and the remaining borrow (0 or 1) is returned.
1442 */
1443static digit
Martin v. Löwis18e16552006-02-15 17:27:45 +00001444v_isub(digit *x, Py_ssize_t m, digit *y, Py_ssize_t n)
Tim Peters877a2122002-08-12 05:09:36 +00001445{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001446 Py_ssize_t i;
1447 digit borrow = 0;
Tim Peters877a2122002-08-12 05:09:36 +00001448
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001449 assert(m >= n);
1450 for (i = 0; i < n; ++i) {
1451 borrow = x[i] - y[i] - borrow;
1452 x[i] = borrow & PyLong_MASK;
1453 borrow >>= PyLong_SHIFT;
1454 borrow &= 1; /* keep only 1 sign bit */
1455 }
1456 for (; borrow && i < m; ++i) {
1457 borrow = x[i] - borrow;
1458 x[i] = borrow & PyLong_MASK;
1459 borrow >>= PyLong_SHIFT;
1460 borrow &= 1;
1461 }
1462 return borrow;
Tim Peters877a2122002-08-12 05:09:36 +00001463}
Neil Schemenauerba872e22001-01-04 01:46:03 +00001464
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001465/* Shift digit vector a[0:m] d bits left, with 0 <= d < PyLong_SHIFT. Put
1466 * result in z[0:m], and return the d bits shifted out of the top.
1467 */
1468static digit
1469v_lshift(digit *z, digit *a, Py_ssize_t m, int d)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001470{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001471 Py_ssize_t i;
1472 digit carry = 0;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001473
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001474 assert(0 <= d && d < PyLong_SHIFT);
1475 for (i=0; i < m; i++) {
1476 twodigits acc = (twodigits)a[i] << d | carry;
1477 z[i] = (digit)acc & PyLong_MASK;
1478 carry = (digit)(acc >> PyLong_SHIFT);
1479 }
1480 return carry;
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001481}
1482
1483/* Shift digit vector a[0:m] d bits right, with 0 <= d < PyLong_SHIFT. Put
1484 * result in z[0:m], and return the d bits shifted out of the bottom.
1485 */
1486static digit
1487v_rshift(digit *z, digit *a, Py_ssize_t m, int d)
1488{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001489 Py_ssize_t i;
1490 digit carry = 0;
1491 digit mask = ((digit)1 << d) - 1U;
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001492
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001493 assert(0 <= d && d < PyLong_SHIFT);
1494 for (i=m; i-- > 0;) {
1495 twodigits acc = (twodigits)carry << PyLong_SHIFT | a[i];
1496 carry = (digit)acc & mask;
1497 z[i] = (digit)(acc >> d);
1498 }
1499 return carry;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001500}
1501
Tim Peters212e6142001-07-14 12:23:19 +00001502/* Divide long pin, w/ size digits, by non-zero digit n, storing quotient
1503 in pout, and returning the remainder. pin and pout point at the LSD.
1504 It's OK for pin == pout on entry, which saves oodles of mallocs/frees in
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001505 _PyLong_Format, but that should be done with great care since longs are
Tim Peters212e6142001-07-14 12:23:19 +00001506 immutable. */
1507
1508static digit
Martin v. Löwis18e16552006-02-15 17:27:45 +00001509inplace_divrem1(digit *pout, digit *pin, Py_ssize_t size, digit n)
Tim Peters212e6142001-07-14 12:23:19 +00001510{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001511 twodigits rem = 0;
Tim Peters212e6142001-07-14 12:23:19 +00001512
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001513 assert(n > 0 && n <= PyLong_MASK);
1514 pin += size;
1515 pout += size;
1516 while (--size >= 0) {
1517 digit hi;
1518 rem = (rem << PyLong_SHIFT) | *--pin;
1519 *--pout = hi = (digit)(rem / n);
1520 rem -= (twodigits)hi * n;
1521 }
1522 return (digit)rem;
Tim Peters212e6142001-07-14 12:23:19 +00001523}
1524
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001525/* Divide a long integer by a digit, returning both the quotient
1526 (as function result) and the remainder (through *prem).
1527 The sign of a is ignored; n should not be zero. */
1528
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001529static PyLongObject *
Tim Peters212e6142001-07-14 12:23:19 +00001530divrem1(PyLongObject *a, digit n, digit *prem)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001531{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001532 const Py_ssize_t size = ABS(Py_SIZE(a));
1533 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001534
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001535 assert(n > 0 && n <= PyLong_MASK);
1536 z = _PyLong_New(size);
1537 if (z == NULL)
1538 return NULL;
1539 *prem = inplace_divrem1(z->ob_digit, a->ob_digit, size, n);
1540 return long_normalize(z);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001541}
1542
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001543/* Convert a long integer to a base 10 string. Returns a new non-shared
1544 string. (Return value is non-shared so that callers can modify the
1545 returned value if necessary.) */
1546
1547static PyObject *
1548long_to_decimal_string(PyObject *aa)
1549{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001550 PyLongObject *scratch, *a;
1551 PyObject *str;
1552 Py_ssize_t size, strlen, size_a, i, j;
1553 digit *pout, *pin, rem, tenpow;
1554 Py_UNICODE *p;
1555 int negative;
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001556
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001557 a = (PyLongObject *)aa;
1558 if (a == NULL || !PyLong_Check(a)) {
1559 PyErr_BadInternalCall();
1560 return NULL;
1561 }
1562 size_a = ABS(Py_SIZE(a));
1563 negative = Py_SIZE(a) < 0;
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001564
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001565 /* quick and dirty upper bound for the number of digits
1566 required to express a in base _PyLong_DECIMAL_BASE:
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001567
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001568 #digits = 1 + floor(log2(a) / log2(_PyLong_DECIMAL_BASE))
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001569
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001570 But log2(a) < size_a * PyLong_SHIFT, and
1571 log2(_PyLong_DECIMAL_BASE) = log2(10) * _PyLong_DECIMAL_SHIFT
1572 > 3 * _PyLong_DECIMAL_SHIFT
1573 */
1574 if (size_a > PY_SSIZE_T_MAX / PyLong_SHIFT) {
1575 PyErr_SetString(PyExc_OverflowError,
1576 "long is too large to format");
1577 return NULL;
1578 }
1579 /* the expression size_a * PyLong_SHIFT is now safe from overflow */
1580 size = 1 + size_a * PyLong_SHIFT / (3 * _PyLong_DECIMAL_SHIFT);
1581 scratch = _PyLong_New(size);
1582 if (scratch == NULL)
1583 return NULL;
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001584
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001585 /* convert array of base _PyLong_BASE digits in pin to an array of
1586 base _PyLong_DECIMAL_BASE digits in pout, following Knuth (TAOCP,
1587 Volume 2 (3rd edn), section 4.4, Method 1b). */
1588 pin = a->ob_digit;
1589 pout = scratch->ob_digit;
1590 size = 0;
1591 for (i = size_a; --i >= 0; ) {
1592 digit hi = pin[i];
1593 for (j = 0; j < size; j++) {
1594 twodigits z = (twodigits)pout[j] << PyLong_SHIFT | hi;
1595 hi = (digit)(z / _PyLong_DECIMAL_BASE);
1596 pout[j] = (digit)(z - (twodigits)hi *
1597 _PyLong_DECIMAL_BASE);
1598 }
1599 while (hi) {
1600 pout[size++] = hi % _PyLong_DECIMAL_BASE;
1601 hi /= _PyLong_DECIMAL_BASE;
1602 }
1603 /* check for keyboard interrupt */
1604 SIGCHECK({
Mark Dickinson22b20182010-05-10 21:27:53 +00001605 Py_DECREF(scratch);
1606 return NULL;
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00001607 });
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001608 }
1609 /* pout should have at least one digit, so that the case when a = 0
1610 works correctly */
1611 if (size == 0)
1612 pout[size++] = 0;
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001613
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001614 /* calculate exact length of output string, and allocate */
1615 strlen = negative + 1 + (size - 1) * _PyLong_DECIMAL_SHIFT;
1616 tenpow = 10;
1617 rem = pout[size-1];
1618 while (rem >= tenpow) {
1619 tenpow *= 10;
1620 strlen++;
1621 }
1622 str = PyUnicode_FromUnicode(NULL, strlen);
1623 if (str == NULL) {
1624 Py_DECREF(scratch);
1625 return NULL;
1626 }
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001627
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001628 /* fill the string right-to-left */
1629 p = PyUnicode_AS_UNICODE(str) + strlen;
1630 *p = '\0';
1631 /* pout[0] through pout[size-2] contribute exactly
1632 _PyLong_DECIMAL_SHIFT digits each */
1633 for (i=0; i < size - 1; i++) {
1634 rem = pout[i];
1635 for (j = 0; j < _PyLong_DECIMAL_SHIFT; j++) {
1636 *--p = '0' + rem % 10;
1637 rem /= 10;
1638 }
1639 }
1640 /* pout[size-1]: always produce at least one decimal digit */
1641 rem = pout[i];
1642 do {
1643 *--p = '0' + rem % 10;
1644 rem /= 10;
1645 } while (rem != 0);
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001646
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001647 /* and sign */
1648 if (negative)
1649 *--p = '-';
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001650
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001651 /* check we've counted correctly */
1652 assert(p == PyUnicode_AS_UNICODE(str));
1653 Py_DECREF(scratch);
1654 return (PyObject *)str;
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001655}
1656
Mark Dickinsoncd068122009-09-18 14:53:08 +00001657/* Convert a long int object to a string, using a given conversion base,
1658 which should be one of 2, 8, 10 or 16. Return a string object.
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001659 If base is 2, 8 or 16, add the proper prefix '0b', '0o' or '0x'. */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001660
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001661PyObject *
1662_PyLong_Format(PyObject *aa, int base)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001663{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001664 register PyLongObject *a = (PyLongObject *)aa;
1665 PyObject *str;
1666 Py_ssize_t i, sz;
1667 Py_ssize_t size_a;
1668 Py_UNICODE *p, sign = '\0';
1669 int bits;
Guido van Rossume32e0141992-01-19 16:31:05 +00001670
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001671 assert(base == 2 || base == 8 || base == 10 || base == 16);
1672 if (base == 10)
1673 return long_to_decimal_string((PyObject *)a);
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001674
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001675 if (a == NULL || !PyLong_Check(a)) {
1676 PyErr_BadInternalCall();
1677 return NULL;
1678 }
1679 size_a = ABS(Py_SIZE(a));
Tim Peters5af4e6c2002-08-12 02:31:19 +00001680
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001681 /* Compute a rough upper bound for the length of the string */
1682 switch (base) {
1683 case 16:
1684 bits = 4;
1685 break;
1686 case 8:
1687 bits = 3;
1688 break;
1689 case 2:
1690 bits = 1;
1691 break;
1692 default:
1693 assert(0); /* shouldn't ever get here */
1694 bits = 0; /* to silence gcc warning */
1695 }
1696 /* compute length of output string: allow 2 characters for prefix and
1697 1 for possible '-' sign. */
1698 if (size_a > (PY_SSIZE_T_MAX - 3) / PyLong_SHIFT) {
1699 PyErr_SetString(PyExc_OverflowError,
1700 "int is too large to format");
1701 return NULL;
1702 }
1703 /* now size_a * PyLong_SHIFT + 3 <= PY_SSIZE_T_MAX, so the RHS below
1704 is safe from overflow */
1705 sz = 3 + (size_a * PyLong_SHIFT + (bits - 1)) / bits;
1706 assert(sz >= 0);
1707 str = PyUnicode_FromUnicode(NULL, sz);
1708 if (str == NULL)
1709 return NULL;
1710 p = PyUnicode_AS_UNICODE(str) + sz;
1711 *p = '\0';
1712 if (Py_SIZE(a) < 0)
1713 sign = '-';
Tim Peters5af4e6c2002-08-12 02:31:19 +00001714
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001715 if (Py_SIZE(a) == 0) {
1716 *--p = '0';
1717 }
1718 else {
1719 /* JRH: special case for power-of-2 bases */
1720 twodigits accum = 0;
1721 int accumbits = 0; /* # of bits in accum */
1722 for (i = 0; i < size_a; ++i) {
1723 accum |= (twodigits)a->ob_digit[i] << accumbits;
1724 accumbits += PyLong_SHIFT;
1725 assert(accumbits >= bits);
1726 do {
1727 Py_UNICODE cdigit;
1728 cdigit = (Py_UNICODE)(accum & (base - 1));
1729 cdigit += (cdigit < 10) ? '0' : 'a'-10;
1730 assert(p > PyUnicode_AS_UNICODE(str));
1731 *--p = cdigit;
1732 accumbits -= bits;
1733 accum >>= bits;
1734 } while (i < size_a-1 ? accumbits >= bits : accum > 0);
1735 }
1736 }
Mark Dickinson8accd6b2009-09-17 19:39:12 +00001737
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001738 if (base == 16)
1739 *--p = 'x';
1740 else if (base == 8)
1741 *--p = 'o';
1742 else /* (base == 2) */
1743 *--p = 'b';
1744 *--p = '0';
1745 if (sign)
1746 *--p = sign;
1747 if (p != PyUnicode_AS_UNICODE(str)) {
1748 Py_UNICODE *q = PyUnicode_AS_UNICODE(str);
1749 assert(p > q);
1750 do {
1751 } while ((*q++ = *p++) != '\0');
1752 q--;
1753 if (PyUnicode_Resize(&str,(Py_ssize_t) (q -
1754 PyUnicode_AS_UNICODE(str)))) {
1755 Py_DECREF(str);
1756 return NULL;
1757 }
1758 }
1759 return (PyObject *)str;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001760}
1761
Thomas Wouters477c8d52006-05-27 19:21:47 +00001762/* Table of digit values for 8-bit string -> integer conversion.
1763 * '0' maps to 0, ..., '9' maps to 9.
1764 * 'a' and 'A' map to 10, ..., 'z' and 'Z' map to 35.
1765 * All other indices map to 37.
1766 * Note that when converting a base B string, a char c is a legitimate
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00001767 * base B digit iff _PyLong_DigitValue[Py_CHARPyLong_MASK(c)] < B.
Thomas Wouters477c8d52006-05-27 19:21:47 +00001768 */
Raymond Hettinger35631532009-01-09 03:58:09 +00001769unsigned char _PyLong_DigitValue[256] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001770 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1771 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1772 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1773 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 37, 37, 37, 37, 37, 37,
1774 37, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1775 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 37, 37, 37, 37, 37,
1776 37, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1777 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 37, 37, 37, 37, 37,
1778 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1779 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1780 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1781 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1782 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1783 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1784 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1785 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
Thomas Wouters477c8d52006-05-27 19:21:47 +00001786};
1787
1788/* *str points to the first digit in a string of base `base` digits. base
Tim Petersbf2674b2003-02-02 07:51:32 +00001789 * is a power of 2 (2, 4, 8, 16, or 32). *str is set to point to the first
1790 * non-digit (which may be *str!). A normalized long is returned.
1791 * The point to this routine is that it takes time linear in the number of
1792 * string characters.
1793 */
1794static PyLongObject *
1795long_from_binary_base(char **str, int base)
1796{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001797 char *p = *str;
1798 char *start = p;
1799 int bits_per_char;
1800 Py_ssize_t n;
1801 PyLongObject *z;
1802 twodigits accum;
1803 int bits_in_accum;
1804 digit *pdigit;
Tim Petersbf2674b2003-02-02 07:51:32 +00001805
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001806 assert(base >= 2 && base <= 32 && (base & (base - 1)) == 0);
1807 n = base;
1808 for (bits_per_char = -1; n; ++bits_per_char)
1809 n >>= 1;
1810 /* n <- total # of bits needed, while setting p to end-of-string */
1811 while (_PyLong_DigitValue[Py_CHARMASK(*p)] < base)
1812 ++p;
1813 *str = p;
1814 /* n <- # of Python digits needed, = ceiling(n/PyLong_SHIFT). */
1815 n = (p - start) * bits_per_char + PyLong_SHIFT - 1;
1816 if (n / bits_per_char < p - start) {
1817 PyErr_SetString(PyExc_ValueError,
1818 "int string too large to convert");
1819 return NULL;
1820 }
1821 n = n / PyLong_SHIFT;
1822 z = _PyLong_New(n);
1823 if (z == NULL)
1824 return NULL;
1825 /* Read string from right, and fill in long from left; i.e.,
1826 * from least to most significant in both.
1827 */
1828 accum = 0;
1829 bits_in_accum = 0;
1830 pdigit = z->ob_digit;
1831 while (--p >= start) {
1832 int k = (int)_PyLong_DigitValue[Py_CHARMASK(*p)];
1833 assert(k >= 0 && k < base);
1834 accum |= (twodigits)k << bits_in_accum;
1835 bits_in_accum += bits_per_char;
1836 if (bits_in_accum >= PyLong_SHIFT) {
1837 *pdigit++ = (digit)(accum & PyLong_MASK);
1838 assert(pdigit - z->ob_digit <= n);
1839 accum >>= PyLong_SHIFT;
1840 bits_in_accum -= PyLong_SHIFT;
1841 assert(bits_in_accum < PyLong_SHIFT);
1842 }
1843 }
1844 if (bits_in_accum) {
1845 assert(bits_in_accum <= PyLong_SHIFT);
1846 *pdigit++ = (digit)accum;
1847 assert(pdigit - z->ob_digit <= n);
1848 }
1849 while (pdigit - z->ob_digit < n)
1850 *pdigit++ = 0;
1851 return long_normalize(z);
Tim Petersbf2674b2003-02-02 07:51:32 +00001852}
1853
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001854PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00001855PyLong_FromString(char *str, char **pend, int base)
Guido van Rossumeb1fafc1994-08-29 12:47:19 +00001856{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001857 int sign = 1, error_if_nonzero = 0;
1858 char *start, *orig_str = str;
1859 PyLongObject *z = NULL;
1860 PyObject *strobj;
1861 Py_ssize_t slen;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001862
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001863 if ((base != 0 && base < 2) || base > 36) {
1864 PyErr_SetString(PyExc_ValueError,
1865 "int() arg 2 must be >= 2 and <= 36");
1866 return NULL;
1867 }
1868 while (*str != '\0' && isspace(Py_CHARMASK(*str)))
1869 str++;
1870 if (*str == '+')
1871 ++str;
1872 else if (*str == '-') {
1873 ++str;
1874 sign = -1;
1875 }
1876 if (base == 0) {
1877 if (str[0] != '0')
1878 base = 10;
1879 else if (str[1] == 'x' || str[1] == 'X')
1880 base = 16;
1881 else if (str[1] == 'o' || str[1] == 'O')
1882 base = 8;
1883 else if (str[1] == 'b' || str[1] == 'B')
1884 base = 2;
1885 else {
1886 /* "old" (C-style) octal literal, now invalid.
1887 it might still be zero though */
1888 error_if_nonzero = 1;
1889 base = 10;
1890 }
1891 }
1892 if (str[0] == '0' &&
1893 ((base == 16 && (str[1] == 'x' || str[1] == 'X')) ||
1894 (base == 8 && (str[1] == 'o' || str[1] == 'O')) ||
1895 (base == 2 && (str[1] == 'b' || str[1] == 'B'))))
1896 str += 2;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001897
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001898 start = str;
1899 if ((base & (base - 1)) == 0)
1900 z = long_from_binary_base(&str, base);
1901 else {
Thomas Wouters477c8d52006-05-27 19:21:47 +00001902/***
1903Binary bases can be converted in time linear in the number of digits, because
1904Python's representation base is binary. Other bases (including decimal!) use
1905the simple quadratic-time algorithm below, complicated by some speed tricks.
Tim Peters5af4e6c2002-08-12 02:31:19 +00001906
Thomas Wouters477c8d52006-05-27 19:21:47 +00001907First some math: the largest integer that can be expressed in N base-B digits
1908is B**N-1. Consequently, if we have an N-digit input in base B, the worst-
1909case number of Python digits needed to hold it is the smallest integer n s.t.
1910
1911 BASE**n-1 >= B**N-1 [or, adding 1 to both sides]
1912 BASE**n >= B**N [taking logs to base BASE]
1913 n >= log(B**N)/log(BASE) = N * log(B)/log(BASE)
1914
1915The static array log_base_BASE[base] == log(base)/log(BASE) so we can compute
1916this quickly. A Python long with that much space is reserved near the start,
1917and the result is computed into it.
1918
1919The input string is actually treated as being in base base**i (i.e., i digits
1920are processed at a time), where two more static arrays hold:
1921
1922 convwidth_base[base] = the largest integer i such that base**i <= BASE
1923 convmultmax_base[base] = base ** convwidth_base[base]
1924
1925The first of these is the largest i such that i consecutive input digits
1926must fit in a single Python digit. The second is effectively the input
1927base we're really using.
1928
1929Viewing the input as a sequence <c0, c1, ..., c_n-1> of digits in base
1930convmultmax_base[base], the result is "simply"
1931
1932 (((c0*B + c1)*B + c2)*B + c3)*B + ... ))) + c_n-1
1933
1934where B = convmultmax_base[base].
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001935
1936Error analysis: as above, the number of Python digits `n` needed is worst-
1937case
1938
1939 n >= N * log(B)/log(BASE)
1940
1941where `N` is the number of input digits in base `B`. This is computed via
1942
1943 size_z = (Py_ssize_t)((scan - str) * log_base_BASE[base]) + 1;
1944
1945below. Two numeric concerns are how much space this can waste, and whether
1946the computed result can be too small. To be concrete, assume BASE = 2**15,
1947which is the default (and it's unlikely anyone changes that).
1948
1949Waste isn't a problem: provided the first input digit isn't 0, the difference
1950between the worst-case input with N digits and the smallest input with N
1951digits is about a factor of B, but B is small compared to BASE so at most
1952one allocated Python digit can remain unused on that count. If
1953N*log(B)/log(BASE) is mathematically an exact integer, then truncating that
1954and adding 1 returns a result 1 larger than necessary. However, that can't
1955happen: whenever B is a power of 2, long_from_binary_base() is called
1956instead, and it's impossible for B**i to be an integer power of 2**15 when
1957B is not a power of 2 (i.e., it's impossible for N*log(B)/log(BASE) to be
1958an exact integer when B is not a power of 2, since B**i has a prime factor
1959other than 2 in that case, but (2**15)**j's only prime factor is 2).
1960
1961The computed result can be too small if the true value of N*log(B)/log(BASE)
1962is a little bit larger than an exact integer, but due to roundoff errors (in
1963computing log(B), log(BASE), their quotient, and/or multiplying that by N)
1964yields a numeric result a little less than that integer. Unfortunately, "how
1965close can a transcendental function get to an integer over some range?"
1966questions are generally theoretically intractable. Computer analysis via
1967continued fractions is practical: expand log(B)/log(BASE) via continued
1968fractions, giving a sequence i/j of "the best" rational approximations. Then
1969j*log(B)/log(BASE) is approximately equal to (the integer) i. This shows that
1970we can get very close to being in trouble, but very rarely. For example,
197176573 is a denominator in one of the continued-fraction approximations to
1972log(10)/log(2**15), and indeed:
1973
1974 >>> log(10)/log(2**15)*76573
1975 16958.000000654003
1976
1977is very close to an integer. If we were working with IEEE single-precision,
1978rounding errors could kill us. Finding worst cases in IEEE double-precision
1979requires better-than-double-precision log() functions, and Tim didn't bother.
1980Instead the code checks to see whether the allocated space is enough as each
1981new Python digit is added, and copies the whole thing to a larger long if not.
1982This should happen extremely rarely, and in fact I don't have a test case
1983that triggers it(!). Instead the code was tested by artificially allocating
1984just 1 digit at the start, so that the copying code was exercised for every
1985digit beyond the first.
Thomas Wouters477c8d52006-05-27 19:21:47 +00001986***/
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001987 register twodigits c; /* current input character */
1988 Py_ssize_t size_z;
1989 int i;
1990 int convwidth;
1991 twodigits convmultmax, convmult;
1992 digit *pz, *pzstop;
1993 char* scan;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001994
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001995 static double log_base_BASE[37] = {0.0e0,};
1996 static int convwidth_base[37] = {0,};
1997 static twodigits convmultmax_base[37] = {0,};
Thomas Wouters477c8d52006-05-27 19:21:47 +00001998
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001999 if (log_base_BASE[base] == 0.0) {
2000 twodigits convmax = base;
2001 int i = 1;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002002
Mark Dickinson22b20182010-05-10 21:27:53 +00002003 log_base_BASE[base] = (log((double)base) /
2004 log((double)PyLong_BASE));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002005 for (;;) {
2006 twodigits next = convmax * base;
2007 if (next > PyLong_BASE)
2008 break;
2009 convmax = next;
2010 ++i;
2011 }
2012 convmultmax_base[base] = convmax;
2013 assert(i > 0);
2014 convwidth_base[base] = i;
2015 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00002016
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002017 /* Find length of the string of numeric characters. */
2018 scan = str;
2019 while (_PyLong_DigitValue[Py_CHARMASK(*scan)] < base)
2020 ++scan;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002021
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002022 /* Create a long object that can contain the largest possible
2023 * integer with this base and length. Note that there's no
2024 * need to initialize z->ob_digit -- no slot is read up before
2025 * being stored into.
2026 */
2027 size_z = (Py_ssize_t)((scan - str) * log_base_BASE[base]) + 1;
2028 /* Uncomment next line to test exceedingly rare copy code */
2029 /* size_z = 1; */
2030 assert(size_z > 0);
2031 z = _PyLong_New(size_z);
2032 if (z == NULL)
2033 return NULL;
2034 Py_SIZE(z) = 0;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002035
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002036 /* `convwidth` consecutive input digits are treated as a single
2037 * digit in base `convmultmax`.
2038 */
2039 convwidth = convwidth_base[base];
2040 convmultmax = convmultmax_base[base];
Thomas Wouters477c8d52006-05-27 19:21:47 +00002041
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002042 /* Work ;-) */
2043 while (str < scan) {
2044 /* grab up to convwidth digits from the input string */
2045 c = (digit)_PyLong_DigitValue[Py_CHARMASK(*str++)];
2046 for (i = 1; i < convwidth && str != scan; ++i, ++str) {
2047 c = (twodigits)(c * base +
Mark Dickinson22b20182010-05-10 21:27:53 +00002048 (int)_PyLong_DigitValue[Py_CHARMASK(*str)]);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002049 assert(c < PyLong_BASE);
2050 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00002051
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002052 convmult = convmultmax;
2053 /* Calculate the shift only if we couldn't get
2054 * convwidth digits.
2055 */
2056 if (i != convwidth) {
2057 convmult = base;
2058 for ( ; i > 1; --i)
2059 convmult *= base;
2060 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00002061
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002062 /* Multiply z by convmult, and add c. */
2063 pz = z->ob_digit;
2064 pzstop = pz + Py_SIZE(z);
2065 for (; pz < pzstop; ++pz) {
2066 c += (twodigits)*pz * convmult;
2067 *pz = (digit)(c & PyLong_MASK);
2068 c >>= PyLong_SHIFT;
2069 }
2070 /* carry off the current end? */
2071 if (c) {
2072 assert(c < PyLong_BASE);
2073 if (Py_SIZE(z) < size_z) {
2074 *pz = (digit)c;
2075 ++Py_SIZE(z);
2076 }
2077 else {
2078 PyLongObject *tmp;
2079 /* Extremely rare. Get more space. */
2080 assert(Py_SIZE(z) == size_z);
2081 tmp = _PyLong_New(size_z + 1);
2082 if (tmp == NULL) {
2083 Py_DECREF(z);
2084 return NULL;
2085 }
2086 memcpy(tmp->ob_digit,
2087 z->ob_digit,
2088 sizeof(digit) * size_z);
2089 Py_DECREF(z);
2090 z = tmp;
2091 z->ob_digit[size_z] = (digit)c;
2092 ++size_z;
2093 }
2094 }
2095 }
2096 }
2097 if (z == NULL)
2098 return NULL;
2099 if (error_if_nonzero) {
2100 /* reset the base to 0, else the exception message
2101 doesn't make too much sense */
2102 base = 0;
2103 if (Py_SIZE(z) != 0)
2104 goto onError;
2105 /* there might still be other problems, therefore base
2106 remains zero here for the same reason */
2107 }
2108 if (str == start)
2109 goto onError;
2110 if (sign < 0)
2111 Py_SIZE(z) = -(Py_SIZE(z));
2112 while (*str && isspace(Py_CHARMASK(*str)))
2113 str++;
2114 if (*str != '\0')
2115 goto onError;
2116 if (pend)
2117 *pend = str;
2118 long_normalize(z);
2119 return (PyObject *) maybe_small_long(z);
Guido van Rossum9e896b32000-04-05 20:11:21 +00002120
Mark Dickinson22b20182010-05-10 21:27:53 +00002121 onError:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002122 Py_XDECREF(z);
2123 slen = strlen(orig_str) < 200 ? strlen(orig_str) : 200;
2124 strobj = PyUnicode_FromStringAndSize(orig_str, slen);
2125 if (strobj == NULL)
2126 return NULL;
2127 PyErr_Format(PyExc_ValueError,
2128 "invalid literal for int() with base %d: %R",
2129 base, strobj);
2130 Py_DECREF(strobj);
2131 return NULL;
Guido van Rossum9e896b32000-04-05 20:11:21 +00002132}
2133
2134PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00002135PyLong_FromUnicode(Py_UNICODE *u, Py_ssize_t length, int base)
Guido van Rossum9e896b32000-04-05 20:11:21 +00002136{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002137 PyObject *result;
Alexander Belopolsky942af5a2010-12-04 03:38:46 +00002138 PyObject *asciidig;
2139 char *buffer, *end;
2140 Py_ssize_t i, buflen;
2141 Py_UNICODE *ptr;
Guido van Rossum9e896b32000-04-05 20:11:21 +00002142
Alexander Belopolsky942af5a2010-12-04 03:38:46 +00002143 asciidig = PyUnicode_TransformDecimalToASCII(u, length);
2144 if (asciidig == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002145 return NULL;
Alexander Belopolsky942af5a2010-12-04 03:38:46 +00002146 /* Replace non-ASCII whitespace with ' ' */
2147 ptr = PyUnicode_AS_UNICODE(asciidig);
2148 for (i = 0; i < length; i++) {
Mark Dickinsonc9fb3c62010-12-04 11:06:25 +00002149 Py_UNICODE ch = ptr[i];
2150 if (ch > 127 && Py_UNICODE_ISSPACE(ch))
2151 ptr[i] = ' ';
Alexander Belopolsky942af5a2010-12-04 03:38:46 +00002152 }
2153 buffer = _PyUnicode_AsStringAndSize(asciidig, &buflen);
2154 if (buffer == NULL) {
2155 Py_DECREF(asciidig);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002156 return NULL;
2157 }
Alexander Belopolsky942af5a2010-12-04 03:38:46 +00002158 result = PyLong_FromString(buffer, &end, base);
2159 if (result != NULL && end != buffer + buflen) {
2160 PyErr_SetString(PyExc_ValueError,
2161 "null byte in argument for int()");
2162 Py_DECREF(result);
2163 result = NULL;
2164 }
2165 Py_DECREF(asciidig);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002166 return result;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002167}
2168
Tim Peters9f688bf2000-07-07 15:53:28 +00002169/* forward */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002170static PyLongObject *x_divrem
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002171 (PyLongObject *, PyLongObject *, PyLongObject **);
Guido van Rossumb43daf72007-08-01 18:08:08 +00002172static PyObject *long_long(PyObject *v);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002173
2174/* Long division with remainder, top-level routine */
2175
Guido van Rossume32e0141992-01-19 16:31:05 +00002176static int
Tim Peters9f688bf2000-07-07 15:53:28 +00002177long_divrem(PyLongObject *a, PyLongObject *b,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002178 PyLongObject **pdiv, PyLongObject **prem)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002179{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002180 Py_ssize_t size_a = ABS(Py_SIZE(a)), size_b = ABS(Py_SIZE(b));
2181 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002182
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002183 if (size_b == 0) {
2184 PyErr_SetString(PyExc_ZeroDivisionError,
2185 "integer division or modulo by zero");
2186 return -1;
2187 }
2188 if (size_a < size_b ||
2189 (size_a == size_b &&
2190 a->ob_digit[size_a-1] < b->ob_digit[size_b-1])) {
2191 /* |a| < |b|. */
2192 *pdiv = (PyLongObject*)PyLong_FromLong(0);
2193 if (*pdiv == NULL)
2194 return -1;
2195 Py_INCREF(a);
2196 *prem = (PyLongObject *) a;
2197 return 0;
2198 }
2199 if (size_b == 1) {
2200 digit rem = 0;
2201 z = divrem1(a, b->ob_digit[0], &rem);
2202 if (z == NULL)
2203 return -1;
2204 *prem = (PyLongObject *) PyLong_FromLong((long)rem);
2205 if (*prem == NULL) {
2206 Py_DECREF(z);
2207 return -1;
2208 }
2209 }
2210 else {
2211 z = x_divrem(a, b, prem);
2212 if (z == NULL)
2213 return -1;
2214 }
2215 /* Set the signs.
2216 The quotient z has the sign of a*b;
2217 the remainder r has the sign of a,
2218 so a = b*z + r. */
2219 if ((Py_SIZE(a) < 0) != (Py_SIZE(b) < 0))
2220 NEGATE(z);
2221 if (Py_SIZE(a) < 0 && Py_SIZE(*prem) != 0)
2222 NEGATE(*prem);
2223 *pdiv = maybe_small_long(z);
2224 return 0;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002225}
2226
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002227/* Unsigned long division with remainder -- the algorithm. The arguments v1
2228 and w1 should satisfy 2 <= ABS(Py_SIZE(w1)) <= ABS(Py_SIZE(v1)). */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002229
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002230static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00002231x_divrem(PyLongObject *v1, PyLongObject *w1, PyLongObject **prem)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002232{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002233 PyLongObject *v, *w, *a;
2234 Py_ssize_t i, k, size_v, size_w;
2235 int d;
2236 digit wm1, wm2, carry, q, r, vtop, *v0, *vk, *w0, *ak;
2237 twodigits vv;
2238 sdigit zhi;
2239 stwodigits z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002240
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002241 /* We follow Knuth [The Art of Computer Programming, Vol. 2 (3rd
2242 edn.), section 4.3.1, Algorithm D], except that we don't explicitly
2243 handle the special case when the initial estimate q for a quotient
2244 digit is >= PyLong_BASE: the max value for q is PyLong_BASE+1, and
2245 that won't overflow a digit. */
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002246
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002247 /* allocate space; w will also be used to hold the final remainder */
2248 size_v = ABS(Py_SIZE(v1));
2249 size_w = ABS(Py_SIZE(w1));
2250 assert(size_v >= size_w && size_w >= 2); /* Assert checks by div() */
2251 v = _PyLong_New(size_v+1);
2252 if (v == NULL) {
2253 *prem = NULL;
2254 return NULL;
2255 }
2256 w = _PyLong_New(size_w);
2257 if (w == NULL) {
2258 Py_DECREF(v);
2259 *prem = NULL;
2260 return NULL;
2261 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002262
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002263 /* normalize: shift w1 left so that its top digit is >= PyLong_BASE/2.
2264 shift v1 left by the same amount. Results go into w and v. */
2265 d = PyLong_SHIFT - bits_in_digit(w1->ob_digit[size_w-1]);
2266 carry = v_lshift(w->ob_digit, w1->ob_digit, size_w, d);
2267 assert(carry == 0);
2268 carry = v_lshift(v->ob_digit, v1->ob_digit, size_v, d);
2269 if (carry != 0 || v->ob_digit[size_v-1] >= w->ob_digit[size_w-1]) {
2270 v->ob_digit[size_v] = carry;
2271 size_v++;
2272 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002273
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002274 /* Now v->ob_digit[size_v-1] < w->ob_digit[size_w-1], so quotient has
2275 at most (and usually exactly) k = size_v - size_w digits. */
2276 k = size_v - size_w;
2277 assert(k >= 0);
2278 a = _PyLong_New(k);
2279 if (a == NULL) {
2280 Py_DECREF(w);
2281 Py_DECREF(v);
2282 *prem = NULL;
2283 return NULL;
2284 }
2285 v0 = v->ob_digit;
2286 w0 = w->ob_digit;
2287 wm1 = w0[size_w-1];
2288 wm2 = w0[size_w-2];
2289 for (vk = v0+k, ak = a->ob_digit + k; vk-- > v0;) {
2290 /* inner loop: divide vk[0:size_w+1] by w0[0:size_w], giving
2291 single-digit quotient q, remainder in vk[0:size_w]. */
Tim Peters5af4e6c2002-08-12 02:31:19 +00002292
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002293 SIGCHECK({
Mark Dickinson22b20182010-05-10 21:27:53 +00002294 Py_DECREF(a);
2295 Py_DECREF(w);
2296 Py_DECREF(v);
2297 *prem = NULL;
2298 return NULL;
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00002299 });
Tim Peters5af4e6c2002-08-12 02:31:19 +00002300
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002301 /* estimate quotient digit q; may overestimate by 1 (rare) */
2302 vtop = vk[size_w];
2303 assert(vtop <= wm1);
2304 vv = ((twodigits)vtop << PyLong_SHIFT) | vk[size_w-1];
2305 q = (digit)(vv / wm1);
2306 r = (digit)(vv - (twodigits)wm1 * q); /* r = vv % wm1 */
2307 while ((twodigits)wm2 * q > (((twodigits)r << PyLong_SHIFT)
2308 | vk[size_w-2])) {
2309 --q;
2310 r += wm1;
2311 if (r >= PyLong_BASE)
2312 break;
2313 }
2314 assert(q <= PyLong_BASE);
Tim Peters5af4e6c2002-08-12 02:31:19 +00002315
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002316 /* subtract q*w0[0:size_w] from vk[0:size_w+1] */
2317 zhi = 0;
2318 for (i = 0; i < size_w; ++i) {
2319 /* invariants: -PyLong_BASE <= -q <= zhi <= 0;
2320 -PyLong_BASE * q <= z < PyLong_BASE */
2321 z = (sdigit)vk[i] + zhi -
2322 (stwodigits)q * (stwodigits)w0[i];
2323 vk[i] = (digit)z & PyLong_MASK;
2324 zhi = (sdigit)Py_ARITHMETIC_RIGHT_SHIFT(stwodigits,
Mark Dickinson22b20182010-05-10 21:27:53 +00002325 z, PyLong_SHIFT);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002326 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002327
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002328 /* add w back if q was too large (this branch taken rarely) */
2329 assert((sdigit)vtop + zhi == -1 || (sdigit)vtop + zhi == 0);
2330 if ((sdigit)vtop + zhi < 0) {
2331 carry = 0;
2332 for (i = 0; i < size_w; ++i) {
2333 carry += vk[i] + w0[i];
2334 vk[i] = carry & PyLong_MASK;
2335 carry >>= PyLong_SHIFT;
2336 }
2337 --q;
2338 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002339
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002340 /* store quotient digit */
2341 assert(q < PyLong_BASE);
2342 *--ak = q;
2343 }
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002344
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002345 /* unshift remainder; we reuse w to store the result */
2346 carry = v_rshift(w0, v0, size_w, d);
2347 assert(carry==0);
2348 Py_DECREF(v);
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002349
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002350 *prem = long_normalize(w);
2351 return long_normalize(a);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002352}
2353
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002354/* For a nonzero PyLong a, express a in the form x * 2**e, with 0.5 <=
2355 abs(x) < 1.0 and e >= 0; return x and put e in *e. Here x is
2356 rounded to DBL_MANT_DIG significant bits using round-half-to-even.
2357 If a == 0, return 0.0 and set *e = 0. If the resulting exponent
2358 e is larger than PY_SSIZE_T_MAX, raise OverflowError and return
2359 -1.0. */
2360
2361/* attempt to define 2.0**DBL_MANT_DIG as a compile-time constant */
2362#if DBL_MANT_DIG == 53
2363#define EXP2_DBL_MANT_DIG 9007199254740992.0
2364#else
2365#define EXP2_DBL_MANT_DIG (ldexp(1.0, DBL_MANT_DIG))
2366#endif
2367
2368double
2369_PyLong_Frexp(PyLongObject *a, Py_ssize_t *e)
2370{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002371 Py_ssize_t a_size, a_bits, shift_digits, shift_bits, x_size;
2372 /* See below for why x_digits is always large enough. */
2373 digit rem, x_digits[2 + (DBL_MANT_DIG + 1) / PyLong_SHIFT];
2374 double dx;
2375 /* Correction term for round-half-to-even rounding. For a digit x,
2376 "x + half_even_correction[x & 7]" gives x rounded to the nearest
2377 multiple of 4, rounding ties to a multiple of 8. */
2378 static const int half_even_correction[8] = {0, -1, -2, 1, 0, -1, 2, 1};
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002379
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002380 a_size = ABS(Py_SIZE(a));
2381 if (a_size == 0) {
2382 /* Special case for 0: significand 0.0, exponent 0. */
2383 *e = 0;
2384 return 0.0;
2385 }
2386 a_bits = bits_in_digit(a->ob_digit[a_size-1]);
2387 /* The following is an overflow-free version of the check
2388 "if ((a_size - 1) * PyLong_SHIFT + a_bits > PY_SSIZE_T_MAX) ..." */
2389 if (a_size >= (PY_SSIZE_T_MAX - 1) / PyLong_SHIFT + 1 &&
2390 (a_size > (PY_SSIZE_T_MAX - 1) / PyLong_SHIFT + 1 ||
2391 a_bits > (PY_SSIZE_T_MAX - 1) % PyLong_SHIFT + 1))
Mark Dickinson22b20182010-05-10 21:27:53 +00002392 goto overflow;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002393 a_bits = (a_size - 1) * PyLong_SHIFT + a_bits;
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002394
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002395 /* Shift the first DBL_MANT_DIG + 2 bits of a into x_digits[0:x_size]
2396 (shifting left if a_bits <= DBL_MANT_DIG + 2).
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002397
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002398 Number of digits needed for result: write // for floor division.
2399 Then if shifting left, we end up using
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002400
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002401 1 + a_size + (DBL_MANT_DIG + 2 - a_bits) // PyLong_SHIFT
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002402
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002403 digits. If shifting right, we use
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002404
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002405 a_size - (a_bits - DBL_MANT_DIG - 2) // PyLong_SHIFT
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002406
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002407 digits. Using a_size = 1 + (a_bits - 1) // PyLong_SHIFT along with
2408 the inequalities
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002409
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002410 m // PyLong_SHIFT + n // PyLong_SHIFT <= (m + n) // PyLong_SHIFT
2411 m // PyLong_SHIFT - n // PyLong_SHIFT <=
2412 1 + (m - n - 1) // PyLong_SHIFT,
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002413
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002414 valid for any integers m and n, we find that x_size satisfies
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002415
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002416 x_size <= 2 + (DBL_MANT_DIG + 1) // PyLong_SHIFT
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002417
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002418 in both cases.
2419 */
2420 if (a_bits <= DBL_MANT_DIG + 2) {
2421 shift_digits = (DBL_MANT_DIG + 2 - a_bits) / PyLong_SHIFT;
2422 shift_bits = (DBL_MANT_DIG + 2 - a_bits) % PyLong_SHIFT;
2423 x_size = 0;
2424 while (x_size < shift_digits)
2425 x_digits[x_size++] = 0;
2426 rem = v_lshift(x_digits + x_size, a->ob_digit, a_size,
2427 (int)shift_bits);
2428 x_size += a_size;
2429 x_digits[x_size++] = rem;
2430 }
2431 else {
2432 shift_digits = (a_bits - DBL_MANT_DIG - 2) / PyLong_SHIFT;
2433 shift_bits = (a_bits - DBL_MANT_DIG - 2) % PyLong_SHIFT;
2434 rem = v_rshift(x_digits, a->ob_digit + shift_digits,
2435 a_size - shift_digits, (int)shift_bits);
2436 x_size = a_size - shift_digits;
2437 /* For correct rounding below, we need the least significant
2438 bit of x to be 'sticky' for this shift: if any of the bits
2439 shifted out was nonzero, we set the least significant bit
2440 of x. */
2441 if (rem)
2442 x_digits[0] |= 1;
2443 else
2444 while (shift_digits > 0)
2445 if (a->ob_digit[--shift_digits]) {
2446 x_digits[0] |= 1;
2447 break;
2448 }
2449 }
Mark Dickinson22b20182010-05-10 21:27:53 +00002450 assert(1 <= x_size &&
2451 x_size <= (Py_ssize_t)(sizeof(x_digits)/sizeof(digit)));
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002452
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002453 /* Round, and convert to double. */
2454 x_digits[0] += half_even_correction[x_digits[0] & 7];
2455 dx = x_digits[--x_size];
2456 while (x_size > 0)
2457 dx = dx * PyLong_BASE + x_digits[--x_size];
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002458
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002459 /* Rescale; make correction if result is 1.0. */
2460 dx /= 4.0 * EXP2_DBL_MANT_DIG;
2461 if (dx == 1.0) {
2462 if (a_bits == PY_SSIZE_T_MAX)
2463 goto overflow;
2464 dx = 0.5;
2465 a_bits += 1;
2466 }
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002467
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002468 *e = a_bits;
2469 return Py_SIZE(a) < 0 ? -dx : dx;
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002470
2471 overflow:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002472 /* exponent > PY_SSIZE_T_MAX */
2473 PyErr_SetString(PyExc_OverflowError,
2474 "huge integer: number of bits overflows a Py_ssize_t");
2475 *e = 0;
2476 return -1.0;
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002477}
2478
2479/* Get a C double from a long int object. Rounds to the nearest double,
2480 using the round-half-to-even rule in the case of a tie. */
2481
2482double
2483PyLong_AsDouble(PyObject *v)
2484{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002485 Py_ssize_t exponent;
2486 double x;
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002487
Nadeem Vawda3d5881e2011-09-07 21:40:26 +02002488 if (v == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002489 PyErr_BadInternalCall();
2490 return -1.0;
2491 }
Nadeem Vawda3d5881e2011-09-07 21:40:26 +02002492 if (!PyLong_Check(v)) {
2493 PyErr_SetString(PyExc_TypeError, "an integer is required");
2494 return -1.0;
2495 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002496 x = _PyLong_Frexp((PyLongObject *)v, &exponent);
2497 if ((x == -1.0 && PyErr_Occurred()) || exponent > DBL_MAX_EXP) {
2498 PyErr_SetString(PyExc_OverflowError,
2499 "long int too large to convert to float");
2500 return -1.0;
2501 }
2502 return ldexp(x, (int)exponent);
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002503}
2504
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002505/* Methods */
2506
2507static void
Tim Peters9f688bf2000-07-07 15:53:28 +00002508long_dealloc(PyObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002509{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002510 Py_TYPE(v)->tp_free(v);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002511}
2512
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002513static int
Tim Peters9f688bf2000-07-07 15:53:28 +00002514long_compare(PyLongObject *a, PyLongObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002515{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002516 Py_ssize_t sign;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002517
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002518 if (Py_SIZE(a) != Py_SIZE(b)) {
2519 sign = Py_SIZE(a) - Py_SIZE(b);
2520 }
2521 else {
2522 Py_ssize_t i = ABS(Py_SIZE(a));
2523 while (--i >= 0 && a->ob_digit[i] == b->ob_digit[i])
2524 ;
2525 if (i < 0)
2526 sign = 0;
2527 else {
2528 sign = (sdigit)a->ob_digit[i] - (sdigit)b->ob_digit[i];
2529 if (Py_SIZE(a) < 0)
2530 sign = -sign;
2531 }
2532 }
2533 return sign < 0 ? -1 : sign > 0 ? 1 : 0;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002534}
2535
Antoine Pitrou51f3ef92008-12-20 13:14:23 +00002536#define TEST_COND(cond) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002537 ((cond) ? Py_True : Py_False)
Antoine Pitrou51f3ef92008-12-20 13:14:23 +00002538
Guido van Rossum47b9ff62006-08-24 00:41:19 +00002539static PyObject *
2540long_richcompare(PyObject *self, PyObject *other, int op)
2541{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002542 int result;
2543 PyObject *v;
2544 CHECK_BINOP(self, other);
2545 if (self == other)
2546 result = 0;
2547 else
2548 result = long_compare((PyLongObject*)self, (PyLongObject*)other);
2549 /* Convert the return value to a Boolean */
2550 switch (op) {
2551 case Py_EQ:
2552 v = TEST_COND(result == 0);
2553 break;
2554 case Py_NE:
2555 v = TEST_COND(result != 0);
2556 break;
2557 case Py_LE:
2558 v = TEST_COND(result <= 0);
2559 break;
2560 case Py_GE:
2561 v = TEST_COND(result >= 0);
2562 break;
2563 case Py_LT:
2564 v = TEST_COND(result == -1);
2565 break;
2566 case Py_GT:
2567 v = TEST_COND(result == 1);
2568 break;
2569 default:
2570 PyErr_BadArgument();
2571 return NULL;
2572 }
2573 Py_INCREF(v);
2574 return v;
Guido van Rossum47b9ff62006-08-24 00:41:19 +00002575}
2576
Benjamin Peterson8f67d082010-10-17 20:54:53 +00002577static Py_hash_t
Tim Peters9f688bf2000-07-07 15:53:28 +00002578long_hash(PyLongObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00002579{
Benjamin Peterson8035bc52010-10-23 16:20:50 +00002580 Py_uhash_t x;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002581 Py_ssize_t i;
2582 int sign;
Guido van Rossum9bfef441993-03-29 10:43:31 +00002583
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002584 i = Py_SIZE(v);
2585 switch(i) {
2586 case -1: return v->ob_digit[0]==1 ? -2 : -(sdigit)v->ob_digit[0];
2587 case 0: return 0;
2588 case 1: return v->ob_digit[0];
2589 }
2590 sign = 1;
2591 x = 0;
2592 if (i < 0) {
2593 sign = -1;
2594 i = -(i);
2595 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002596 while (--i >= 0) {
Mark Dickinsondc787d22010-05-23 13:33:13 +00002597 /* Here x is a quantity in the range [0, _PyHASH_MODULUS); we
2598 want to compute x * 2**PyLong_SHIFT + v->ob_digit[i] modulo
2599 _PyHASH_MODULUS.
2600
2601 The computation of x * 2**PyLong_SHIFT % _PyHASH_MODULUS
2602 amounts to a rotation of the bits of x. To see this, write
2603
2604 x * 2**PyLong_SHIFT = y * 2**_PyHASH_BITS + z
2605
2606 where y = x >> (_PyHASH_BITS - PyLong_SHIFT) gives the top
2607 PyLong_SHIFT bits of x (those that are shifted out of the
2608 original _PyHASH_BITS bits, and z = (x << PyLong_SHIFT) &
2609 _PyHASH_MODULUS gives the bottom _PyHASH_BITS - PyLong_SHIFT
2610 bits of x, shifted up. Then since 2**_PyHASH_BITS is
2611 congruent to 1 modulo _PyHASH_MODULUS, y*2**_PyHASH_BITS is
2612 congruent to y modulo _PyHASH_MODULUS. So
2613
2614 x * 2**PyLong_SHIFT = y + z (mod _PyHASH_MODULUS).
2615
2616 The right-hand side is just the result of rotating the
2617 _PyHASH_BITS bits of x left by PyLong_SHIFT places; since
2618 not all _PyHASH_BITS bits of x are 1s, the same is true
2619 after rotation, so 0 <= y+z < _PyHASH_MODULUS and y + z is
2620 the reduction of x*2**PyLong_SHIFT modulo
2621 _PyHASH_MODULUS. */
2622 x = ((x << PyLong_SHIFT) & _PyHASH_MODULUS) |
2623 (x >> (_PyHASH_BITS - PyLong_SHIFT));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002624 x += v->ob_digit[i];
Mark Dickinsondc787d22010-05-23 13:33:13 +00002625 if (x >= _PyHASH_MODULUS)
2626 x -= _PyHASH_MODULUS;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002627 }
2628 x = x * sign;
Benjamin Peterson8035bc52010-10-23 16:20:50 +00002629 if (x == (Py_uhash_t)-1)
2630 x = (Py_uhash_t)-2;
Benjamin Peterson8f67d082010-10-17 20:54:53 +00002631 return (Py_hash_t)x;
Guido van Rossum9bfef441993-03-29 10:43:31 +00002632}
2633
2634
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002635/* Add the absolute values of two long integers. */
2636
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002637static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00002638x_add(PyLongObject *a, PyLongObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002639{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002640 Py_ssize_t size_a = ABS(Py_SIZE(a)), size_b = ABS(Py_SIZE(b));
2641 PyLongObject *z;
2642 Py_ssize_t i;
2643 digit carry = 0;
Tim Peters69c2de32001-09-11 22:31:33 +00002644
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002645 /* Ensure a is the larger of the two: */
2646 if (size_a < size_b) {
2647 { PyLongObject *temp = a; a = b; b = temp; }
2648 { Py_ssize_t size_temp = size_a;
Mark Dickinson22b20182010-05-10 21:27:53 +00002649 size_a = size_b;
2650 size_b = size_temp; }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002651 }
2652 z = _PyLong_New(size_a+1);
2653 if (z == NULL)
2654 return NULL;
2655 for (i = 0; i < size_b; ++i) {
2656 carry += a->ob_digit[i] + b->ob_digit[i];
2657 z->ob_digit[i] = carry & PyLong_MASK;
2658 carry >>= PyLong_SHIFT;
2659 }
2660 for (; i < size_a; ++i) {
2661 carry += a->ob_digit[i];
2662 z->ob_digit[i] = carry & PyLong_MASK;
2663 carry >>= PyLong_SHIFT;
2664 }
2665 z->ob_digit[i] = carry;
2666 return long_normalize(z);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002667}
2668
2669/* Subtract the absolute values of two integers. */
2670
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002671static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00002672x_sub(PyLongObject *a, PyLongObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002673{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002674 Py_ssize_t size_a = ABS(Py_SIZE(a)), size_b = ABS(Py_SIZE(b));
2675 PyLongObject *z;
2676 Py_ssize_t i;
2677 int sign = 1;
2678 digit borrow = 0;
Tim Peters69c2de32001-09-11 22:31:33 +00002679
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002680 /* Ensure a is the larger of the two: */
2681 if (size_a < size_b) {
2682 sign = -1;
2683 { PyLongObject *temp = a; a = b; b = temp; }
2684 { Py_ssize_t size_temp = size_a;
Mark Dickinson22b20182010-05-10 21:27:53 +00002685 size_a = size_b;
2686 size_b = size_temp; }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002687 }
2688 else if (size_a == size_b) {
2689 /* Find highest digit where a and b differ: */
2690 i = size_a;
2691 while (--i >= 0 && a->ob_digit[i] == b->ob_digit[i])
2692 ;
2693 if (i < 0)
2694 return (PyLongObject *)PyLong_FromLong(0);
2695 if (a->ob_digit[i] < b->ob_digit[i]) {
2696 sign = -1;
2697 { PyLongObject *temp = a; a = b; b = temp; }
2698 }
2699 size_a = size_b = i+1;
2700 }
2701 z = _PyLong_New(size_a);
2702 if (z == NULL)
2703 return NULL;
2704 for (i = 0; i < size_b; ++i) {
2705 /* The following assumes unsigned arithmetic
2706 works module 2**N for some N>PyLong_SHIFT. */
2707 borrow = a->ob_digit[i] - b->ob_digit[i] - borrow;
2708 z->ob_digit[i] = borrow & PyLong_MASK;
2709 borrow >>= PyLong_SHIFT;
2710 borrow &= 1; /* Keep only one sign bit */
2711 }
2712 for (; i < size_a; ++i) {
2713 borrow = a->ob_digit[i] - borrow;
2714 z->ob_digit[i] = borrow & PyLong_MASK;
2715 borrow >>= PyLong_SHIFT;
2716 borrow &= 1; /* Keep only one sign bit */
2717 }
2718 assert(borrow == 0);
2719 if (sign < 0)
2720 NEGATE(z);
2721 return long_normalize(z);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002722}
2723
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002724static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00002725long_add(PyLongObject *a, PyLongObject *b)
Guido van Rossum4c260ff1992-01-14 18:36:43 +00002726{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002727 PyLongObject *z;
Tim Peters69c2de32001-09-11 22:31:33 +00002728
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002729 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00002730
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002731 if (ABS(Py_SIZE(a)) <= 1 && ABS(Py_SIZE(b)) <= 1) {
2732 PyObject *result = PyLong_FromLong(MEDIUM_VALUE(a) +
2733 MEDIUM_VALUE(b));
2734 return result;
2735 }
2736 if (Py_SIZE(a) < 0) {
2737 if (Py_SIZE(b) < 0) {
2738 z = x_add(a, b);
2739 if (z != NULL && Py_SIZE(z) != 0)
2740 Py_SIZE(z) = -(Py_SIZE(z));
2741 }
2742 else
2743 z = x_sub(b, a);
2744 }
2745 else {
2746 if (Py_SIZE(b) < 0)
2747 z = x_sub(a, b);
2748 else
2749 z = x_add(a, b);
2750 }
2751 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002752}
2753
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002754static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00002755long_sub(PyLongObject *a, PyLongObject *b)
Guido van Rossum4c260ff1992-01-14 18:36:43 +00002756{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002757 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002758
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002759 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00002760
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002761 if (ABS(Py_SIZE(a)) <= 1 && ABS(Py_SIZE(b)) <= 1) {
2762 PyObject* r;
2763 r = PyLong_FromLong(MEDIUM_VALUE(a)-MEDIUM_VALUE(b));
2764 return r;
2765 }
2766 if (Py_SIZE(a) < 0) {
2767 if (Py_SIZE(b) < 0)
2768 z = x_sub(a, b);
2769 else
2770 z = x_add(a, b);
2771 if (z != NULL && Py_SIZE(z) != 0)
2772 Py_SIZE(z) = -(Py_SIZE(z));
2773 }
2774 else {
2775 if (Py_SIZE(b) < 0)
2776 z = x_add(a, b);
2777 else
2778 z = x_sub(a, b);
2779 }
2780 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002781}
2782
Tim Peters5af4e6c2002-08-12 02:31:19 +00002783/* Grade school multiplication, ignoring the signs.
2784 * Returns the absolute value of the product, or NULL if error.
2785 */
2786static PyLongObject *
2787x_mul(PyLongObject *a, PyLongObject *b)
Neil Schemenauerba872e22001-01-04 01:46:03 +00002788{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002789 PyLongObject *z;
2790 Py_ssize_t size_a = ABS(Py_SIZE(a));
2791 Py_ssize_t size_b = ABS(Py_SIZE(b));
2792 Py_ssize_t i;
Neil Schemenauerba872e22001-01-04 01:46:03 +00002793
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002794 z = _PyLong_New(size_a + size_b);
2795 if (z == NULL)
2796 return NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002797
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002798 memset(z->ob_digit, 0, Py_SIZE(z) * sizeof(digit));
2799 if (a == b) {
2800 /* Efficient squaring per HAC, Algorithm 14.16:
2801 * http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf
2802 * Gives slightly less than a 2x speedup when a == b,
2803 * via exploiting that each entry in the multiplication
2804 * pyramid appears twice (except for the size_a squares).
2805 */
2806 for (i = 0; i < size_a; ++i) {
2807 twodigits carry;
2808 twodigits f = a->ob_digit[i];
2809 digit *pz = z->ob_digit + (i << 1);
2810 digit *pa = a->ob_digit + i + 1;
2811 digit *paend = a->ob_digit + size_a;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002812
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002813 SIGCHECK({
Mark Dickinson22b20182010-05-10 21:27:53 +00002814 Py_DECREF(z);
2815 return NULL;
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00002816 });
Tim Peters0973b992004-08-29 22:16:50 +00002817
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002818 carry = *pz + f * f;
2819 *pz++ = (digit)(carry & PyLong_MASK);
2820 carry >>= PyLong_SHIFT;
2821 assert(carry <= PyLong_MASK);
Tim Peters0973b992004-08-29 22:16:50 +00002822
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002823 /* Now f is added in twice in each column of the
2824 * pyramid it appears. Same as adding f<<1 once.
2825 */
2826 f <<= 1;
2827 while (pa < paend) {
2828 carry += *pz + *pa++ * f;
2829 *pz++ = (digit)(carry & PyLong_MASK);
2830 carry >>= PyLong_SHIFT;
2831 assert(carry <= (PyLong_MASK << 1));
2832 }
2833 if (carry) {
2834 carry += *pz;
2835 *pz++ = (digit)(carry & PyLong_MASK);
2836 carry >>= PyLong_SHIFT;
2837 }
2838 if (carry)
2839 *pz += (digit)(carry & PyLong_MASK);
2840 assert((carry >> PyLong_SHIFT) == 0);
2841 }
2842 }
2843 else { /* a is not the same as b -- gradeschool long mult */
2844 for (i = 0; i < size_a; ++i) {
2845 twodigits carry = 0;
2846 twodigits f = a->ob_digit[i];
2847 digit *pz = z->ob_digit + i;
2848 digit *pb = b->ob_digit;
2849 digit *pbend = b->ob_digit + size_b;
Tim Peters0973b992004-08-29 22:16:50 +00002850
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002851 SIGCHECK({
Mark Dickinson22b20182010-05-10 21:27:53 +00002852 Py_DECREF(z);
2853 return NULL;
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00002854 });
Tim Peters0973b992004-08-29 22:16:50 +00002855
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002856 while (pb < pbend) {
2857 carry += *pz + *pb++ * f;
2858 *pz++ = (digit)(carry & PyLong_MASK);
2859 carry >>= PyLong_SHIFT;
2860 assert(carry <= PyLong_MASK);
2861 }
2862 if (carry)
2863 *pz += (digit)(carry & PyLong_MASK);
2864 assert((carry >> PyLong_SHIFT) == 0);
2865 }
2866 }
2867 return long_normalize(z);
Tim Peters5af4e6c2002-08-12 02:31:19 +00002868}
2869
2870/* A helper for Karatsuba multiplication (k_mul).
2871 Takes a long "n" and an integer "size" representing the place to
2872 split, and sets low and high such that abs(n) == (high << size) + low,
2873 viewing the shift as being by digits. The sign bit is ignored, and
2874 the return values are >= 0.
2875 Returns 0 on success, -1 on failure.
2876*/
2877static int
Mark Dickinson22b20182010-05-10 21:27:53 +00002878kmul_split(PyLongObject *n,
2879 Py_ssize_t size,
2880 PyLongObject **high,
2881 PyLongObject **low)
Tim Peters5af4e6c2002-08-12 02:31:19 +00002882{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002883 PyLongObject *hi, *lo;
2884 Py_ssize_t size_lo, size_hi;
2885 const Py_ssize_t size_n = ABS(Py_SIZE(n));
Tim Peters5af4e6c2002-08-12 02:31:19 +00002886
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002887 size_lo = MIN(size_n, size);
2888 size_hi = size_n - size_lo;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002889
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002890 if ((hi = _PyLong_New(size_hi)) == NULL)
2891 return -1;
2892 if ((lo = _PyLong_New(size_lo)) == NULL) {
2893 Py_DECREF(hi);
2894 return -1;
2895 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002896
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002897 memcpy(lo->ob_digit, n->ob_digit, size_lo * sizeof(digit));
2898 memcpy(hi->ob_digit, n->ob_digit + size_lo, size_hi * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00002899
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002900 *high = long_normalize(hi);
2901 *low = long_normalize(lo);
2902 return 0;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002903}
2904
Tim Peters60004642002-08-12 22:01:34 +00002905static PyLongObject *k_lopsided_mul(PyLongObject *a, PyLongObject *b);
2906
Tim Peters5af4e6c2002-08-12 02:31:19 +00002907/* Karatsuba multiplication. Ignores the input signs, and returns the
2908 * absolute value of the product (or NULL if error).
2909 * See Knuth Vol. 2 Chapter 4.3.3 (Pp. 294-295).
2910 */
2911static PyLongObject *
2912k_mul(PyLongObject *a, PyLongObject *b)
2913{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002914 Py_ssize_t asize = ABS(Py_SIZE(a));
2915 Py_ssize_t bsize = ABS(Py_SIZE(b));
2916 PyLongObject *ah = NULL;
2917 PyLongObject *al = NULL;
2918 PyLongObject *bh = NULL;
2919 PyLongObject *bl = NULL;
2920 PyLongObject *ret = NULL;
2921 PyLongObject *t1, *t2, *t3;
2922 Py_ssize_t shift; /* the number of digits we split off */
2923 Py_ssize_t i;
Tim Peters738eda72002-08-12 15:08:20 +00002924
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002925 /* (ah*X+al)(bh*X+bl) = ah*bh*X*X + (ah*bl + al*bh)*X + al*bl
2926 * Let k = (ah+al)*(bh+bl) = ah*bl + al*bh + ah*bh + al*bl
2927 * Then the original product is
2928 * ah*bh*X*X + (k - ah*bh - al*bl)*X + al*bl
2929 * By picking X to be a power of 2, "*X" is just shifting, and it's
2930 * been reduced to 3 multiplies on numbers half the size.
2931 */
Tim Peters5af4e6c2002-08-12 02:31:19 +00002932
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002933 /* We want to split based on the larger number; fiddle so that b
2934 * is largest.
2935 */
2936 if (asize > bsize) {
2937 t1 = a;
2938 a = b;
2939 b = t1;
Tim Peters738eda72002-08-12 15:08:20 +00002940
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002941 i = asize;
2942 asize = bsize;
2943 bsize = i;
2944 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002945
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002946 /* Use gradeschool math when either number is too small. */
2947 i = a == b ? KARATSUBA_SQUARE_CUTOFF : KARATSUBA_CUTOFF;
2948 if (asize <= i) {
2949 if (asize == 0)
2950 return (PyLongObject *)PyLong_FromLong(0);
2951 else
2952 return x_mul(a, b);
2953 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002954
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002955 /* If a is small compared to b, splitting on b gives a degenerate
2956 * case with ah==0, and Karatsuba may be (even much) less efficient
2957 * than "grade school" then. However, we can still win, by viewing
2958 * b as a string of "big digits", each of width a->ob_size. That
2959 * leads to a sequence of balanced calls to k_mul.
2960 */
2961 if (2 * asize <= bsize)
2962 return k_lopsided_mul(a, b);
Tim Peters60004642002-08-12 22:01:34 +00002963
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002964 /* Split a & b into hi & lo pieces. */
2965 shift = bsize >> 1;
2966 if (kmul_split(a, shift, &ah, &al) < 0) goto fail;
2967 assert(Py_SIZE(ah) > 0); /* the split isn't degenerate */
Tim Petersd6974a52002-08-13 20:37:51 +00002968
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002969 if (a == b) {
2970 bh = ah;
2971 bl = al;
2972 Py_INCREF(bh);
2973 Py_INCREF(bl);
2974 }
2975 else if (kmul_split(b, shift, &bh, &bl) < 0) goto fail;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002976
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002977 /* The plan:
2978 * 1. Allocate result space (asize + bsize digits: that's always
2979 * enough).
2980 * 2. Compute ah*bh, and copy into result at 2*shift.
2981 * 3. Compute al*bl, and copy into result at 0. Note that this
2982 * can't overlap with #2.
2983 * 4. Subtract al*bl from the result, starting at shift. This may
2984 * underflow (borrow out of the high digit), but we don't care:
2985 * we're effectively doing unsigned arithmetic mod
2986 * BASE**(sizea + sizeb), and so long as the *final* result fits,
2987 * borrows and carries out of the high digit can be ignored.
2988 * 5. Subtract ah*bh from the result, starting at shift.
2989 * 6. Compute (ah+al)*(bh+bl), and add it into the result starting
2990 * at shift.
2991 */
Tim Petersd64c1de2002-08-12 17:36:03 +00002992
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002993 /* 1. Allocate result space. */
2994 ret = _PyLong_New(asize + bsize);
2995 if (ret == NULL) goto fail;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002996#ifdef Py_DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002997 /* Fill with trash, to catch reference to uninitialized digits. */
2998 memset(ret->ob_digit, 0xDF, Py_SIZE(ret) * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00002999#endif
Tim Peters44121a62002-08-12 06:17:58 +00003000
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003001 /* 2. t1 <- ah*bh, and copy into high digits of result. */
3002 if ((t1 = k_mul(ah, bh)) == NULL) goto fail;
3003 assert(Py_SIZE(t1) >= 0);
3004 assert(2*shift + Py_SIZE(t1) <= Py_SIZE(ret));
3005 memcpy(ret->ob_digit + 2*shift, t1->ob_digit,
3006 Py_SIZE(t1) * sizeof(digit));
Tim Peters738eda72002-08-12 15:08:20 +00003007
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003008 /* Zero-out the digits higher than the ah*bh copy. */
3009 i = Py_SIZE(ret) - 2*shift - Py_SIZE(t1);
3010 if (i)
3011 memset(ret->ob_digit + 2*shift + Py_SIZE(t1), 0,
3012 i * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00003013
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003014 /* 3. t2 <- al*bl, and copy into the low digits. */
3015 if ((t2 = k_mul(al, bl)) == NULL) {
3016 Py_DECREF(t1);
3017 goto fail;
3018 }
3019 assert(Py_SIZE(t2) >= 0);
3020 assert(Py_SIZE(t2) <= 2*shift); /* no overlap with high digits */
3021 memcpy(ret->ob_digit, t2->ob_digit, Py_SIZE(t2) * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00003022
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003023 /* Zero out remaining digits. */
3024 i = 2*shift - Py_SIZE(t2); /* number of uninitialized digits */
3025 if (i)
3026 memset(ret->ob_digit + Py_SIZE(t2), 0, i * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00003027
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003028 /* 4 & 5. Subtract ah*bh (t1) and al*bl (t2). We do al*bl first
3029 * because it's fresher in cache.
3030 */
3031 i = Py_SIZE(ret) - shift; /* # digits after shift */
3032 (void)v_isub(ret->ob_digit + shift, i, t2->ob_digit, Py_SIZE(t2));
3033 Py_DECREF(t2);
Tim Peters738eda72002-08-12 15:08:20 +00003034
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003035 (void)v_isub(ret->ob_digit + shift, i, t1->ob_digit, Py_SIZE(t1));
3036 Py_DECREF(t1);
Tim Peters738eda72002-08-12 15:08:20 +00003037
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003038 /* 6. t3 <- (ah+al)(bh+bl), and add into result. */
3039 if ((t1 = x_add(ah, al)) == NULL) goto fail;
3040 Py_DECREF(ah);
3041 Py_DECREF(al);
3042 ah = al = NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003043
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003044 if (a == b) {
3045 t2 = t1;
3046 Py_INCREF(t2);
3047 }
3048 else if ((t2 = x_add(bh, bl)) == NULL) {
3049 Py_DECREF(t1);
3050 goto fail;
3051 }
3052 Py_DECREF(bh);
3053 Py_DECREF(bl);
3054 bh = bl = NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003055
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003056 t3 = k_mul(t1, t2);
3057 Py_DECREF(t1);
3058 Py_DECREF(t2);
3059 if (t3 == NULL) goto fail;
3060 assert(Py_SIZE(t3) >= 0);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003061
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003062 /* Add t3. It's not obvious why we can't run out of room here.
3063 * See the (*) comment after this function.
3064 */
3065 (void)v_iadd(ret->ob_digit + shift, i, t3->ob_digit, Py_SIZE(t3));
3066 Py_DECREF(t3);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003067
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003068 return long_normalize(ret);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003069
Mark Dickinson22b20182010-05-10 21:27:53 +00003070 fail:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003071 Py_XDECREF(ret);
3072 Py_XDECREF(ah);
3073 Py_XDECREF(al);
3074 Py_XDECREF(bh);
3075 Py_XDECREF(bl);
3076 return NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003077}
3078
Tim Petersd6974a52002-08-13 20:37:51 +00003079/* (*) Why adding t3 can't "run out of room" above.
3080
Tim Petersab86c2b2002-08-15 20:06:00 +00003081Let f(x) mean the floor of x and c(x) mean the ceiling of x. Some facts
3082to start with:
Tim Petersd6974a52002-08-13 20:37:51 +00003083
Tim Petersab86c2b2002-08-15 20:06:00 +000030841. For any integer i, i = c(i/2) + f(i/2). In particular,
3085 bsize = c(bsize/2) + f(bsize/2).
30862. shift = f(bsize/2)
30873. asize <= bsize
30884. Since we call k_lopsided_mul if asize*2 <= bsize, asize*2 > bsize in this
3089 routine, so asize > bsize/2 >= f(bsize/2) in this routine.
Tim Petersd6974a52002-08-13 20:37:51 +00003090
Tim Petersab86c2b2002-08-15 20:06:00 +00003091We allocated asize + bsize result digits, and add t3 into them at an offset
3092of shift. This leaves asize+bsize-shift allocated digit positions for t3
3093to fit into, = (by #1 and #2) asize + f(bsize/2) + c(bsize/2) - f(bsize/2) =
3094asize + c(bsize/2) available digit positions.
Tim Petersd6974a52002-08-13 20:37:51 +00003095
Tim Petersab86c2b2002-08-15 20:06:00 +00003096bh has c(bsize/2) digits, and bl at most f(size/2) digits. So bh+hl has
3097at most c(bsize/2) digits + 1 bit.
Tim Petersd6974a52002-08-13 20:37:51 +00003098
Tim Petersab86c2b2002-08-15 20:06:00 +00003099If asize == bsize, ah has c(bsize/2) digits, else ah has at most f(bsize/2)
3100digits, and al has at most f(bsize/2) digits in any case. So ah+al has at
3101most (asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 1 bit.
Tim Petersd6974a52002-08-13 20:37:51 +00003102
Tim Petersab86c2b2002-08-15 20:06:00 +00003103The product (ah+al)*(bh+bl) therefore has at most
Tim Petersd6974a52002-08-13 20:37:51 +00003104
Tim Petersab86c2b2002-08-15 20:06:00 +00003105 c(bsize/2) + (asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 2 bits
Tim Petersd6974a52002-08-13 20:37:51 +00003106
Tim Petersab86c2b2002-08-15 20:06:00 +00003107and we have asize + c(bsize/2) available digit positions. We need to show
3108this is always enough. An instance of c(bsize/2) cancels out in both, so
3109the question reduces to whether asize digits is enough to hold
3110(asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 2 bits. If asize < bsize,
3111then we're asking whether asize digits >= f(bsize/2) digits + 2 bits. By #4,
3112asize is at least f(bsize/2)+1 digits, so this in turn reduces to whether 1
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00003113digit is enough to hold 2 bits. This is so since PyLong_SHIFT=15 >= 2. If
Tim Petersab86c2b2002-08-15 20:06:00 +00003114asize == bsize, then we're asking whether bsize digits is enough to hold
Tim Peterse417de02002-08-15 20:10:45 +00003115c(bsize/2) digits + 2 bits, or equivalently (by #1) whether f(bsize/2) digits
3116is enough to hold 2 bits. This is so if bsize >= 2, which holds because
3117bsize >= KARATSUBA_CUTOFF >= 2.
Tim Peters8e966ee2002-08-14 16:36:23 +00003118
Tim Peters48d52c02002-08-14 17:07:32 +00003119Note that since there's always enough room for (ah+al)*(bh+bl), and that's
3120clearly >= each of ah*bh and al*bl, there's always enough room to subtract
3121ah*bh and al*bl too.
Tim Petersd6974a52002-08-13 20:37:51 +00003122*/
3123
Tim Peters60004642002-08-12 22:01:34 +00003124/* b has at least twice the digits of a, and a is big enough that Karatsuba
3125 * would pay off *if* the inputs had balanced sizes. View b as a sequence
3126 * of slices, each with a->ob_size digits, and multiply the slices by a,
3127 * one at a time. This gives k_mul balanced inputs to work with, and is
3128 * also cache-friendly (we compute one double-width slice of the result
Ezio Melotti42da6632011-03-15 05:18:48 +02003129 * at a time, then move on, never backtracking except for the helpful
Tim Peters60004642002-08-12 22:01:34 +00003130 * single-width slice overlap between successive partial sums).
3131 */
3132static PyLongObject *
3133k_lopsided_mul(PyLongObject *a, PyLongObject *b)
3134{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003135 const Py_ssize_t asize = ABS(Py_SIZE(a));
3136 Py_ssize_t bsize = ABS(Py_SIZE(b));
3137 Py_ssize_t nbdone; /* # of b digits already multiplied */
3138 PyLongObject *ret;
3139 PyLongObject *bslice = NULL;
Tim Peters60004642002-08-12 22:01:34 +00003140
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003141 assert(asize > KARATSUBA_CUTOFF);
3142 assert(2 * asize <= bsize);
Tim Peters60004642002-08-12 22:01:34 +00003143
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003144 /* Allocate result space, and zero it out. */
3145 ret = _PyLong_New(asize + bsize);
3146 if (ret == NULL)
3147 return NULL;
3148 memset(ret->ob_digit, 0, Py_SIZE(ret) * sizeof(digit));
Tim Peters60004642002-08-12 22:01:34 +00003149
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003150 /* Successive slices of b are copied into bslice. */
3151 bslice = _PyLong_New(asize);
3152 if (bslice == NULL)
3153 goto fail;
Tim Peters60004642002-08-12 22:01:34 +00003154
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003155 nbdone = 0;
3156 while (bsize > 0) {
3157 PyLongObject *product;
3158 const Py_ssize_t nbtouse = MIN(bsize, asize);
Tim Peters60004642002-08-12 22:01:34 +00003159
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003160 /* Multiply the next slice of b by a. */
3161 memcpy(bslice->ob_digit, b->ob_digit + nbdone,
3162 nbtouse * sizeof(digit));
3163 Py_SIZE(bslice) = nbtouse;
3164 product = k_mul(a, bslice);
3165 if (product == NULL)
3166 goto fail;
Tim Peters60004642002-08-12 22:01:34 +00003167
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003168 /* Add into result. */
3169 (void)v_iadd(ret->ob_digit + nbdone, Py_SIZE(ret) - nbdone,
3170 product->ob_digit, Py_SIZE(product));
3171 Py_DECREF(product);
Tim Peters60004642002-08-12 22:01:34 +00003172
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003173 bsize -= nbtouse;
3174 nbdone += nbtouse;
3175 }
Tim Peters60004642002-08-12 22:01:34 +00003176
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003177 Py_DECREF(bslice);
3178 return long_normalize(ret);
Tim Peters60004642002-08-12 22:01:34 +00003179
Mark Dickinson22b20182010-05-10 21:27:53 +00003180 fail:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003181 Py_DECREF(ret);
3182 Py_XDECREF(bslice);
3183 return NULL;
Tim Peters60004642002-08-12 22:01:34 +00003184}
Tim Peters5af4e6c2002-08-12 02:31:19 +00003185
3186static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003187long_mul(PyLongObject *a, PyLongObject *b)
Tim Peters5af4e6c2002-08-12 02:31:19 +00003188{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003189 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003190
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003191 CHECK_BINOP(a, b);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003192
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003193 /* fast path for single-digit multiplication */
3194 if (ABS(Py_SIZE(a)) <= 1 && ABS(Py_SIZE(b)) <= 1) {
3195 stwodigits v = (stwodigits)(MEDIUM_VALUE(a)) * MEDIUM_VALUE(b);
Mark Dickinsonbd792642009-03-18 20:06:12 +00003196#ifdef HAVE_LONG_LONG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003197 return PyLong_FromLongLong((PY_LONG_LONG)v);
Mark Dickinsonbd792642009-03-18 20:06:12 +00003198#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003199 /* if we don't have long long then we're almost certainly
3200 using 15-bit digits, so v will fit in a long. In the
3201 unlikely event that we're using 30-bit digits on a platform
3202 without long long, a large v will just cause us to fall
3203 through to the general multiplication code below. */
3204 if (v >= LONG_MIN && v <= LONG_MAX)
3205 return PyLong_FromLong((long)v);
Mark Dickinsonbd792642009-03-18 20:06:12 +00003206#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003207 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00003208
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003209 z = k_mul(a, b);
3210 /* Negate if exactly one of the inputs is negative. */
3211 if (((Py_SIZE(a) ^ Py_SIZE(b)) < 0) && z)
3212 NEGATE(z);
3213 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003214}
3215
Guido van Rossume32e0141992-01-19 16:31:05 +00003216/* The / and % operators are now defined in terms of divmod().
3217 The expression a mod b has the value a - b*floor(a/b).
3218 The long_divrem function gives the remainder after division of
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003219 |a| by |b|, with the sign of a. This is also expressed
3220 as a - b*trunc(a/b), if trunc truncates towards zero.
3221 Some examples:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003222 a b a rem b a mod b
3223 13 10 3 3
3224 -13 10 -3 7
3225 13 -10 3 -7
3226 -13 -10 -3 -3
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003227 So, to get from rem to mod, we have to add b if a and b
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00003228 have different signs. We then subtract one from the 'div'
3229 part of the outcome to keep the invariant intact. */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003230
Tim Peters47e52ee2004-08-30 02:44:38 +00003231/* Compute
3232 * *pdiv, *pmod = divmod(v, w)
3233 * NULL can be passed for pdiv or pmod, in which case that part of
3234 * the result is simply thrown away. The caller owns a reference to
3235 * each of these it requests (does not pass NULL for).
3236 */
Guido van Rossume32e0141992-01-19 16:31:05 +00003237static int
Tim Peters5af4e6c2002-08-12 02:31:19 +00003238l_divmod(PyLongObject *v, PyLongObject *w,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003239 PyLongObject **pdiv, PyLongObject **pmod)
Guido van Rossume32e0141992-01-19 16:31:05 +00003240{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003241 PyLongObject *div, *mod;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003242
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003243 if (long_divrem(v, w, &div, &mod) < 0)
3244 return -1;
3245 if ((Py_SIZE(mod) < 0 && Py_SIZE(w) > 0) ||
3246 (Py_SIZE(mod) > 0 && Py_SIZE(w) < 0)) {
3247 PyLongObject *temp;
3248 PyLongObject *one;
3249 temp = (PyLongObject *) long_add(mod, w);
3250 Py_DECREF(mod);
3251 mod = temp;
3252 if (mod == NULL) {
3253 Py_DECREF(div);
3254 return -1;
3255 }
3256 one = (PyLongObject *) PyLong_FromLong(1L);
3257 if (one == NULL ||
3258 (temp = (PyLongObject *) long_sub(div, one)) == NULL) {
3259 Py_DECREF(mod);
3260 Py_DECREF(div);
3261 Py_XDECREF(one);
3262 return -1;
3263 }
3264 Py_DECREF(one);
3265 Py_DECREF(div);
3266 div = temp;
3267 }
3268 if (pdiv != NULL)
3269 *pdiv = div;
3270 else
3271 Py_DECREF(div);
Tim Peters47e52ee2004-08-30 02:44:38 +00003272
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003273 if (pmod != NULL)
3274 *pmod = mod;
3275 else
3276 Py_DECREF(mod);
Tim Peters47e52ee2004-08-30 02:44:38 +00003277
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003278 return 0;
Guido van Rossume32e0141992-01-19 16:31:05 +00003279}
3280
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003281static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003282long_div(PyObject *a, PyObject *b)
Guido van Rossume32e0141992-01-19 16:31:05 +00003283{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003284 PyLongObject *div;
Neil Schemenauerba872e22001-01-04 01:46:03 +00003285
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003286 CHECK_BINOP(a, b);
3287 if (l_divmod((PyLongObject*)a, (PyLongObject*)b, &div, NULL) < 0)
3288 div = NULL;
3289 return (PyObject *)div;
Guido van Rossume32e0141992-01-19 16:31:05 +00003290}
3291
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003292/* PyLong/PyLong -> float, with correctly rounded result. */
3293
3294#define MANT_DIG_DIGITS (DBL_MANT_DIG / PyLong_SHIFT)
3295#define MANT_DIG_BITS (DBL_MANT_DIG % PyLong_SHIFT)
3296
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003297static PyObject *
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003298long_true_divide(PyObject *v, PyObject *w)
Tim Peters20dab9f2001-09-04 05:31:47 +00003299{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003300 PyLongObject *a, *b, *x;
3301 Py_ssize_t a_size, b_size, shift, extra_bits, diff, x_size, x_bits;
3302 digit mask, low;
3303 int inexact, negate, a_is_small, b_is_small;
3304 double dx, result;
Tim Peterse2a60002001-09-04 06:17:36 +00003305
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003306 CHECK_BINOP(v, w);
3307 a = (PyLongObject *)v;
3308 b = (PyLongObject *)w;
Tim Peterse2a60002001-09-04 06:17:36 +00003309
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003310 /*
3311 Method in a nutshell:
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003312
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003313 0. reduce to case a, b > 0; filter out obvious underflow/overflow
3314 1. choose a suitable integer 'shift'
3315 2. use integer arithmetic to compute x = floor(2**-shift*a/b)
3316 3. adjust x for correct rounding
3317 4. convert x to a double dx with the same value
3318 5. return ldexp(dx, shift).
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003319
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003320 In more detail:
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003321
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003322 0. For any a, a/0 raises ZeroDivisionError; for nonzero b, 0/b
3323 returns either 0.0 or -0.0, depending on the sign of b. For a and
3324 b both nonzero, ignore signs of a and b, and add the sign back in
3325 at the end. Now write a_bits and b_bits for the bit lengths of a
3326 and b respectively (that is, a_bits = 1 + floor(log_2(a)); likewise
3327 for b). Then
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003328
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003329 2**(a_bits - b_bits - 1) < a/b < 2**(a_bits - b_bits + 1).
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003330
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003331 So if a_bits - b_bits > DBL_MAX_EXP then a/b > 2**DBL_MAX_EXP and
3332 so overflows. Similarly, if a_bits - b_bits < DBL_MIN_EXP -
3333 DBL_MANT_DIG - 1 then a/b underflows to 0. With these cases out of
3334 the way, we can assume that
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003335
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003336 DBL_MIN_EXP - DBL_MANT_DIG - 1 <= a_bits - b_bits <= DBL_MAX_EXP.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003337
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003338 1. The integer 'shift' is chosen so that x has the right number of
3339 bits for a double, plus two or three extra bits that will be used
3340 in the rounding decisions. Writing a_bits and b_bits for the
3341 number of significant bits in a and b respectively, a
3342 straightforward formula for shift is:
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003343
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003344 shift = a_bits - b_bits - DBL_MANT_DIG - 2
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003345
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003346 This is fine in the usual case, but if a/b is smaller than the
3347 smallest normal float then it can lead to double rounding on an
3348 IEEE 754 platform, giving incorrectly rounded results. So we
3349 adjust the formula slightly. The actual formula used is:
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003350
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003351 shift = MAX(a_bits - b_bits, DBL_MIN_EXP) - DBL_MANT_DIG - 2
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003352
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003353 2. The quantity x is computed by first shifting a (left -shift bits
3354 if shift <= 0, right shift bits if shift > 0) and then dividing by
3355 b. For both the shift and the division, we keep track of whether
3356 the result is inexact, in a flag 'inexact'; this information is
3357 needed at the rounding stage.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003358
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003359 With the choice of shift above, together with our assumption that
3360 a_bits - b_bits >= DBL_MIN_EXP - DBL_MANT_DIG - 1, it follows
3361 that x >= 1.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003362
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003363 3. Now x * 2**shift <= a/b < (x+1) * 2**shift. We want to replace
3364 this with an exactly representable float of the form
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003365
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003366 round(x/2**extra_bits) * 2**(extra_bits+shift).
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003367
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003368 For float representability, we need x/2**extra_bits <
3369 2**DBL_MANT_DIG and extra_bits + shift >= DBL_MIN_EXP -
3370 DBL_MANT_DIG. This translates to the condition:
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003371
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003372 extra_bits >= MAX(x_bits, DBL_MIN_EXP - shift) - DBL_MANT_DIG
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003373
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003374 To round, we just modify the bottom digit of x in-place; this can
3375 end up giving a digit with value > PyLONG_MASK, but that's not a
3376 problem since digits can hold values up to 2*PyLONG_MASK+1.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003377
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003378 With the original choices for shift above, extra_bits will always
3379 be 2 or 3. Then rounding under the round-half-to-even rule, we
3380 round up iff the most significant of the extra bits is 1, and
3381 either: (a) the computation of x in step 2 had an inexact result,
3382 or (b) at least one other of the extra bits is 1, or (c) the least
3383 significant bit of x (above those to be rounded) is 1.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003384
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003385 4. Conversion to a double is straightforward; all floating-point
3386 operations involved in the conversion are exact, so there's no
3387 danger of rounding errors.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003388
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003389 5. Use ldexp(x, shift) to compute x*2**shift, the final result.
3390 The result will always be exactly representable as a double, except
3391 in the case that it overflows. To avoid dependence on the exact
3392 behaviour of ldexp on overflow, we check for overflow before
3393 applying ldexp. The result of ldexp is adjusted for sign before
3394 returning.
3395 */
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003396
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003397 /* Reduce to case where a and b are both positive. */
3398 a_size = ABS(Py_SIZE(a));
3399 b_size = ABS(Py_SIZE(b));
3400 negate = (Py_SIZE(a) < 0) ^ (Py_SIZE(b) < 0);
3401 if (b_size == 0) {
3402 PyErr_SetString(PyExc_ZeroDivisionError,
3403 "division by zero");
3404 goto error;
3405 }
3406 if (a_size == 0)
3407 goto underflow_or_zero;
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003408
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003409 /* Fast path for a and b small (exactly representable in a double).
3410 Relies on floating-point division being correctly rounded; results
3411 may be subject to double rounding on x86 machines that operate with
3412 the x87 FPU set to 64-bit precision. */
3413 a_is_small = a_size <= MANT_DIG_DIGITS ||
3414 (a_size == MANT_DIG_DIGITS+1 &&
3415 a->ob_digit[MANT_DIG_DIGITS] >> MANT_DIG_BITS == 0);
3416 b_is_small = b_size <= MANT_DIG_DIGITS ||
3417 (b_size == MANT_DIG_DIGITS+1 &&
3418 b->ob_digit[MANT_DIG_DIGITS] >> MANT_DIG_BITS == 0);
3419 if (a_is_small && b_is_small) {
3420 double da, db;
3421 da = a->ob_digit[--a_size];
3422 while (a_size > 0)
3423 da = da * PyLong_BASE + a->ob_digit[--a_size];
3424 db = b->ob_digit[--b_size];
3425 while (b_size > 0)
3426 db = db * PyLong_BASE + b->ob_digit[--b_size];
3427 result = da / db;
3428 goto success;
3429 }
Tim Peterse2a60002001-09-04 06:17:36 +00003430
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003431 /* Catch obvious cases of underflow and overflow */
3432 diff = a_size - b_size;
3433 if (diff > PY_SSIZE_T_MAX/PyLong_SHIFT - 1)
3434 /* Extreme overflow */
3435 goto overflow;
3436 else if (diff < 1 - PY_SSIZE_T_MAX/PyLong_SHIFT)
3437 /* Extreme underflow */
3438 goto underflow_or_zero;
3439 /* Next line is now safe from overflowing a Py_ssize_t */
3440 diff = diff * PyLong_SHIFT + bits_in_digit(a->ob_digit[a_size - 1]) -
3441 bits_in_digit(b->ob_digit[b_size - 1]);
3442 /* Now diff = a_bits - b_bits. */
3443 if (diff > DBL_MAX_EXP)
3444 goto overflow;
3445 else if (diff < DBL_MIN_EXP - DBL_MANT_DIG - 1)
3446 goto underflow_or_zero;
Tim Peterse2a60002001-09-04 06:17:36 +00003447
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003448 /* Choose value for shift; see comments for step 1 above. */
3449 shift = MAX(diff, DBL_MIN_EXP) - DBL_MANT_DIG - 2;
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003450
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003451 inexact = 0;
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003452
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003453 /* x = abs(a * 2**-shift) */
3454 if (shift <= 0) {
3455 Py_ssize_t i, shift_digits = -shift / PyLong_SHIFT;
3456 digit rem;
3457 /* x = a << -shift */
3458 if (a_size >= PY_SSIZE_T_MAX - 1 - shift_digits) {
3459 /* In practice, it's probably impossible to end up
3460 here. Both a and b would have to be enormous,
3461 using close to SIZE_T_MAX bytes of memory each. */
3462 PyErr_SetString(PyExc_OverflowError,
Mark Dickinson22b20182010-05-10 21:27:53 +00003463 "intermediate overflow during division");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003464 goto error;
3465 }
3466 x = _PyLong_New(a_size + shift_digits + 1);
3467 if (x == NULL)
3468 goto error;
3469 for (i = 0; i < shift_digits; i++)
3470 x->ob_digit[i] = 0;
3471 rem = v_lshift(x->ob_digit + shift_digits, a->ob_digit,
3472 a_size, -shift % PyLong_SHIFT);
3473 x->ob_digit[a_size + shift_digits] = rem;
3474 }
3475 else {
3476 Py_ssize_t shift_digits = shift / PyLong_SHIFT;
3477 digit rem;
3478 /* x = a >> shift */
3479 assert(a_size >= shift_digits);
3480 x = _PyLong_New(a_size - shift_digits);
3481 if (x == NULL)
3482 goto error;
3483 rem = v_rshift(x->ob_digit, a->ob_digit + shift_digits,
3484 a_size - shift_digits, shift % PyLong_SHIFT);
3485 /* set inexact if any of the bits shifted out is nonzero */
3486 if (rem)
3487 inexact = 1;
3488 while (!inexact && shift_digits > 0)
3489 if (a->ob_digit[--shift_digits])
3490 inexact = 1;
3491 }
3492 long_normalize(x);
3493 x_size = Py_SIZE(x);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003494
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003495 /* x //= b. If the remainder is nonzero, set inexact. We own the only
3496 reference to x, so it's safe to modify it in-place. */
3497 if (b_size == 1) {
3498 digit rem = inplace_divrem1(x->ob_digit, x->ob_digit, x_size,
3499 b->ob_digit[0]);
3500 long_normalize(x);
3501 if (rem)
3502 inexact = 1;
3503 }
3504 else {
3505 PyLongObject *div, *rem;
3506 div = x_divrem(x, b, &rem);
3507 Py_DECREF(x);
3508 x = div;
3509 if (x == NULL)
3510 goto error;
3511 if (Py_SIZE(rem))
3512 inexact = 1;
3513 Py_DECREF(rem);
3514 }
3515 x_size = ABS(Py_SIZE(x));
3516 assert(x_size > 0); /* result of division is never zero */
3517 x_bits = (x_size-1)*PyLong_SHIFT+bits_in_digit(x->ob_digit[x_size-1]);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003518
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003519 /* The number of extra bits that have to be rounded away. */
3520 extra_bits = MAX(x_bits, DBL_MIN_EXP - shift) - DBL_MANT_DIG;
3521 assert(extra_bits == 2 || extra_bits == 3);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003522
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003523 /* Round by directly modifying the low digit of x. */
3524 mask = (digit)1 << (extra_bits - 1);
3525 low = x->ob_digit[0] | inexact;
3526 if (low & mask && low & (3*mask-1))
3527 low += mask;
3528 x->ob_digit[0] = low & ~(mask-1U);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003529
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003530 /* Convert x to a double dx; the conversion is exact. */
3531 dx = x->ob_digit[--x_size];
3532 while (x_size > 0)
3533 dx = dx * PyLong_BASE + x->ob_digit[--x_size];
3534 Py_DECREF(x);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003535
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003536 /* Check whether ldexp result will overflow a double. */
3537 if (shift + x_bits >= DBL_MAX_EXP &&
3538 (shift + x_bits > DBL_MAX_EXP || dx == ldexp(1.0, (int)x_bits)))
3539 goto overflow;
3540 result = ldexp(dx, (int)shift);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003541
3542 success:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003543 return PyFloat_FromDouble(negate ? -result : result);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003544
3545 underflow_or_zero:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003546 return PyFloat_FromDouble(negate ? -0.0 : 0.0);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003547
3548 overflow:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003549 PyErr_SetString(PyExc_OverflowError,
3550 "integer division result too large for a float");
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003551 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003552 return NULL;
Tim Peters20dab9f2001-09-04 05:31:47 +00003553}
3554
3555static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003556long_mod(PyObject *a, PyObject *b)
Guido van Rossume32e0141992-01-19 16:31:05 +00003557{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003558 PyLongObject *mod;
Neil Schemenauerba872e22001-01-04 01:46:03 +00003559
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003560 CHECK_BINOP(a, b);
3561
3562 if (l_divmod((PyLongObject*)a, (PyLongObject*)b, NULL, &mod) < 0)
3563 mod = NULL;
3564 return (PyObject *)mod;
Guido van Rossume32e0141992-01-19 16:31:05 +00003565}
3566
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003567static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003568long_divmod(PyObject *a, PyObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003569{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003570 PyLongObject *div, *mod;
3571 PyObject *z;
Neil Schemenauerba872e22001-01-04 01:46:03 +00003572
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003573 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003574
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003575 if (l_divmod((PyLongObject*)a, (PyLongObject*)b, &div, &mod) < 0) {
3576 return NULL;
3577 }
3578 z = PyTuple_New(2);
3579 if (z != NULL) {
3580 PyTuple_SetItem(z, 0, (PyObject *) div);
3581 PyTuple_SetItem(z, 1, (PyObject *) mod);
3582 }
3583 else {
3584 Py_DECREF(div);
3585 Py_DECREF(mod);
3586 }
3587 return z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003588}
3589
Tim Peters47e52ee2004-08-30 02:44:38 +00003590/* pow(v, w, x) */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003591static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00003592long_pow(PyObject *v, PyObject *w, PyObject *x)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003593{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003594 PyLongObject *a, *b, *c; /* a,b,c = v,w,x */
3595 int negativeOutput = 0; /* if x<0 return negative output */
Neil Schemenauerba872e22001-01-04 01:46:03 +00003596
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003597 PyLongObject *z = NULL; /* accumulated result */
3598 Py_ssize_t i, j, k; /* counters */
3599 PyLongObject *temp = NULL;
Tim Peters47e52ee2004-08-30 02:44:38 +00003600
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003601 /* 5-ary values. If the exponent is large enough, table is
3602 * precomputed so that table[i] == a**i % c for i in range(32).
3603 */
3604 PyLongObject *table[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3605 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
Tim Peters47e52ee2004-08-30 02:44:38 +00003606
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003607 /* a, b, c = v, w, x */
3608 CHECK_BINOP(v, w);
3609 a = (PyLongObject*)v; Py_INCREF(a);
3610 b = (PyLongObject*)w; Py_INCREF(b);
3611 if (PyLong_Check(x)) {
3612 c = (PyLongObject *)x;
3613 Py_INCREF(x);
3614 }
3615 else if (x == Py_None)
3616 c = NULL;
3617 else {
3618 Py_DECREF(a);
3619 Py_DECREF(b);
Brian Curtindfc80e32011-08-10 20:28:54 -05003620 Py_RETURN_NOTIMPLEMENTED;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003621 }
Tim Peters4c483c42001-09-05 06:24:58 +00003622
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003623 if (Py_SIZE(b) < 0) { /* if exponent is negative */
3624 if (c) {
3625 PyErr_SetString(PyExc_TypeError, "pow() 2nd argument "
Mark Dickinson22b20182010-05-10 21:27:53 +00003626 "cannot be negative when 3rd argument specified");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003627 goto Error;
3628 }
3629 else {
3630 /* else return a float. This works because we know
3631 that this calls float_pow() which converts its
3632 arguments to double. */
3633 Py_DECREF(a);
3634 Py_DECREF(b);
3635 return PyFloat_Type.tp_as_number->nb_power(v, w, x);
3636 }
3637 }
Tim Peters47e52ee2004-08-30 02:44:38 +00003638
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003639 if (c) {
3640 /* if modulus == 0:
3641 raise ValueError() */
3642 if (Py_SIZE(c) == 0) {
3643 PyErr_SetString(PyExc_ValueError,
3644 "pow() 3rd argument cannot be 0");
3645 goto Error;
3646 }
Tim Peters47e52ee2004-08-30 02:44:38 +00003647
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003648 /* if modulus < 0:
3649 negativeOutput = True
3650 modulus = -modulus */
3651 if (Py_SIZE(c) < 0) {
3652 negativeOutput = 1;
3653 temp = (PyLongObject *)_PyLong_Copy(c);
3654 if (temp == NULL)
3655 goto Error;
3656 Py_DECREF(c);
3657 c = temp;
3658 temp = NULL;
3659 NEGATE(c);
3660 }
Tim Peters47e52ee2004-08-30 02:44:38 +00003661
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003662 /* if modulus == 1:
3663 return 0 */
3664 if ((Py_SIZE(c) == 1) && (c->ob_digit[0] == 1)) {
3665 z = (PyLongObject *)PyLong_FromLong(0L);
3666 goto Done;
3667 }
Tim Peters47e52ee2004-08-30 02:44:38 +00003668
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003669 /* if base < 0:
3670 base = base % modulus
3671 Having the base positive just makes things easier. */
3672 if (Py_SIZE(a) < 0) {
3673 if (l_divmod(a, c, NULL, &temp) < 0)
3674 goto Error;
3675 Py_DECREF(a);
3676 a = temp;
3677 temp = NULL;
3678 }
3679 }
Tim Peters47e52ee2004-08-30 02:44:38 +00003680
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003681 /* At this point a, b, and c are guaranteed non-negative UNLESS
3682 c is NULL, in which case a may be negative. */
Tim Peters47e52ee2004-08-30 02:44:38 +00003683
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003684 z = (PyLongObject *)PyLong_FromLong(1L);
3685 if (z == NULL)
3686 goto Error;
Tim Peters47e52ee2004-08-30 02:44:38 +00003687
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003688 /* Perform a modular reduction, X = X % c, but leave X alone if c
3689 * is NULL.
3690 */
3691#define REDUCE(X) \
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00003692 do { \
3693 if (c != NULL) { \
3694 if (l_divmod(X, c, NULL, &temp) < 0) \
3695 goto Error; \
3696 Py_XDECREF(X); \
3697 X = temp; \
3698 temp = NULL; \
3699 } \
3700 } while(0)
Tim Peters47e52ee2004-08-30 02:44:38 +00003701
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003702 /* Multiply two values, then reduce the result:
3703 result = X*Y % c. If c is NULL, skip the mod. */
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00003704#define MULT(X, Y, result) \
3705 do { \
3706 temp = (PyLongObject *)long_mul(X, Y); \
3707 if (temp == NULL) \
3708 goto Error; \
3709 Py_XDECREF(result); \
3710 result = temp; \
3711 temp = NULL; \
3712 REDUCE(result); \
3713 } while(0)
Tim Peters47e52ee2004-08-30 02:44:38 +00003714
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003715 if (Py_SIZE(b) <= FIVEARY_CUTOFF) {
3716 /* Left-to-right binary exponentiation (HAC Algorithm 14.79) */
3717 /* http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf */
3718 for (i = Py_SIZE(b) - 1; i >= 0; --i) {
3719 digit bi = b->ob_digit[i];
Tim Peters47e52ee2004-08-30 02:44:38 +00003720
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003721 for (j = (digit)1 << (PyLong_SHIFT-1); j != 0; j >>= 1) {
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00003722 MULT(z, z, z);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003723 if (bi & j)
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00003724 MULT(z, a, z);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003725 }
3726 }
3727 }
3728 else {
3729 /* Left-to-right 5-ary exponentiation (HAC Algorithm 14.82) */
3730 Py_INCREF(z); /* still holds 1L */
3731 table[0] = z;
3732 for (i = 1; i < 32; ++i)
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00003733 MULT(table[i-1], a, table[i]);
Tim Peters47e52ee2004-08-30 02:44:38 +00003734
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003735 for (i = Py_SIZE(b) - 1; i >= 0; --i) {
3736 const digit bi = b->ob_digit[i];
Tim Peters47e52ee2004-08-30 02:44:38 +00003737
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003738 for (j = PyLong_SHIFT - 5; j >= 0; j -= 5) {
3739 const int index = (bi >> j) & 0x1f;
3740 for (k = 0; k < 5; ++k)
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00003741 MULT(z, z, z);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003742 if (index)
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00003743 MULT(z, table[index], z);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003744 }
3745 }
3746 }
Tim Peters47e52ee2004-08-30 02:44:38 +00003747
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003748 if (negativeOutput && (Py_SIZE(z) != 0)) {
3749 temp = (PyLongObject *)long_sub(z, c);
3750 if (temp == NULL)
3751 goto Error;
3752 Py_DECREF(z);
3753 z = temp;
3754 temp = NULL;
3755 }
3756 goto Done;
Tim Peters47e52ee2004-08-30 02:44:38 +00003757
Mark Dickinson22b20182010-05-10 21:27:53 +00003758 Error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003759 if (z != NULL) {
3760 Py_DECREF(z);
3761 z = NULL;
3762 }
3763 /* fall through */
Mark Dickinson22b20182010-05-10 21:27:53 +00003764 Done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003765 if (Py_SIZE(b) > FIVEARY_CUTOFF) {
3766 for (i = 0; i < 32; ++i)
3767 Py_XDECREF(table[i]);
3768 }
3769 Py_DECREF(a);
3770 Py_DECREF(b);
3771 Py_XDECREF(c);
3772 Py_XDECREF(temp);
3773 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003774}
3775
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003776static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003777long_invert(PyLongObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003778{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003779 /* Implement ~x as -(x+1) */
3780 PyLongObject *x;
3781 PyLongObject *w;
3782 if (ABS(Py_SIZE(v)) <=1)
3783 return PyLong_FromLong(-(MEDIUM_VALUE(v)+1));
3784 w = (PyLongObject *)PyLong_FromLong(1L);
3785 if (w == NULL)
3786 return NULL;
3787 x = (PyLongObject *) long_add(v, w);
3788 Py_DECREF(w);
3789 if (x == NULL)
3790 return NULL;
3791 Py_SIZE(x) = -(Py_SIZE(x));
3792 return (PyObject *)maybe_small_long(x);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003793}
3794
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003795static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003796long_neg(PyLongObject *v)
Guido van Rossumc6913e71991-11-19 20:26:46 +00003797{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003798 PyLongObject *z;
3799 if (ABS(Py_SIZE(v)) <= 1)
3800 return PyLong_FromLong(-MEDIUM_VALUE(v));
3801 z = (PyLongObject *)_PyLong_Copy(v);
3802 if (z != NULL)
3803 Py_SIZE(z) = -(Py_SIZE(v));
3804 return (PyObject *)z;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003805}
3806
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003807static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003808long_abs(PyLongObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003809{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003810 if (Py_SIZE(v) < 0)
3811 return long_neg(v);
3812 else
3813 return long_long((PyObject *)v);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003814}
3815
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00003816static int
Jack Diederich4dafcc42006-11-28 19:15:13 +00003817long_bool(PyLongObject *v)
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00003818{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003819 return Py_SIZE(v) != 0;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003820}
3821
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003822static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003823long_rshift(PyLongObject *a, PyLongObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00003824{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003825 PyLongObject *z = NULL;
3826 Py_ssize_t shiftby, newsize, wordshift, loshift, hishift, i, j;
3827 digit lomask, himask;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003828
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003829 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003830
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003831 if (Py_SIZE(a) < 0) {
3832 /* Right shifting negative numbers is harder */
3833 PyLongObject *a1, *a2;
3834 a1 = (PyLongObject *) long_invert(a);
3835 if (a1 == NULL)
3836 goto rshift_error;
3837 a2 = (PyLongObject *) long_rshift(a1, b);
3838 Py_DECREF(a1);
3839 if (a2 == NULL)
3840 goto rshift_error;
3841 z = (PyLongObject *) long_invert(a2);
3842 Py_DECREF(a2);
3843 }
3844 else {
3845 shiftby = PyLong_AsSsize_t((PyObject *)b);
3846 if (shiftby == -1L && PyErr_Occurred())
3847 goto rshift_error;
3848 if (shiftby < 0) {
3849 PyErr_SetString(PyExc_ValueError,
3850 "negative shift count");
3851 goto rshift_error;
3852 }
3853 wordshift = shiftby / PyLong_SHIFT;
3854 newsize = ABS(Py_SIZE(a)) - wordshift;
3855 if (newsize <= 0)
3856 return PyLong_FromLong(0);
3857 loshift = shiftby % PyLong_SHIFT;
3858 hishift = PyLong_SHIFT - loshift;
3859 lomask = ((digit)1 << hishift) - 1;
3860 himask = PyLong_MASK ^ lomask;
3861 z = _PyLong_New(newsize);
3862 if (z == NULL)
3863 goto rshift_error;
3864 if (Py_SIZE(a) < 0)
3865 Py_SIZE(z) = -(Py_SIZE(z));
3866 for (i = 0, j = wordshift; i < newsize; i++, j++) {
3867 z->ob_digit[i] = (a->ob_digit[j] >> loshift) & lomask;
3868 if (i+1 < newsize)
Mark Dickinson22b20182010-05-10 21:27:53 +00003869 z->ob_digit[i] |= (a->ob_digit[j+1] << hishift) & himask;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003870 }
3871 z = long_normalize(z);
3872 }
Mark Dickinson22b20182010-05-10 21:27:53 +00003873 rshift_error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003874 return (PyObject *) maybe_small_long(z);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003875
Guido van Rossumc6913e71991-11-19 20:26:46 +00003876}
3877
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003878static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00003879long_lshift(PyObject *v, PyObject *w)
Guido van Rossumc6913e71991-11-19 20:26:46 +00003880{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003881 /* This version due to Tim Peters */
3882 PyLongObject *a = (PyLongObject*)v;
3883 PyLongObject *b = (PyLongObject*)w;
3884 PyLongObject *z = NULL;
3885 Py_ssize_t shiftby, oldsize, newsize, wordshift, remshift, i, j;
3886 twodigits accum;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003887
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003888 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003889
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003890 shiftby = PyLong_AsSsize_t((PyObject *)b);
3891 if (shiftby == -1L && PyErr_Occurred())
3892 goto lshift_error;
3893 if (shiftby < 0) {
3894 PyErr_SetString(PyExc_ValueError, "negative shift count");
3895 goto lshift_error;
3896 }
3897 /* wordshift, remshift = divmod(shiftby, PyLong_SHIFT) */
3898 wordshift = shiftby / PyLong_SHIFT;
3899 remshift = shiftby - wordshift * PyLong_SHIFT;
Guido van Rossumf2e499b1997-03-16 00:37:59 +00003900
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003901 oldsize = ABS(Py_SIZE(a));
3902 newsize = oldsize + wordshift;
3903 if (remshift)
3904 ++newsize;
3905 z = _PyLong_New(newsize);
3906 if (z == NULL)
3907 goto lshift_error;
3908 if (Py_SIZE(a) < 0)
3909 NEGATE(z);
3910 for (i = 0; i < wordshift; i++)
3911 z->ob_digit[i] = 0;
3912 accum = 0;
3913 for (i = wordshift, j = 0; j < oldsize; i++, j++) {
3914 accum |= (twodigits)a->ob_digit[j] << remshift;
3915 z->ob_digit[i] = (digit)(accum & PyLong_MASK);
3916 accum >>= PyLong_SHIFT;
3917 }
3918 if (remshift)
3919 z->ob_digit[newsize-1] = (digit)accum;
3920 else
3921 assert(!accum);
3922 z = long_normalize(z);
Mark Dickinson22b20182010-05-10 21:27:53 +00003923 lshift_error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003924 return (PyObject *) maybe_small_long(z);
Guido van Rossumc6913e71991-11-19 20:26:46 +00003925}
3926
Mark Dickinson27a87a22009-10-25 20:43:34 +00003927/* Compute two's complement of digit vector a[0:m], writing result to
3928 z[0:m]. The digit vector a need not be normalized, but should not
3929 be entirely zero. a and z may point to the same digit vector. */
3930
3931static void
3932v_complement(digit *z, digit *a, Py_ssize_t m)
3933{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003934 Py_ssize_t i;
3935 digit carry = 1;
3936 for (i = 0; i < m; ++i) {
3937 carry += a[i] ^ PyLong_MASK;
3938 z[i] = carry & PyLong_MASK;
3939 carry >>= PyLong_SHIFT;
3940 }
3941 assert(carry == 0);
Mark Dickinson27a87a22009-10-25 20:43:34 +00003942}
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003943
3944/* Bitwise and/xor/or operations */
3945
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003946static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003947long_bitwise(PyLongObject *a,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003948 int op, /* '&', '|', '^' */
Mark Dickinson22b20182010-05-10 21:27:53 +00003949 PyLongObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00003950{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003951 int nega, negb, negz;
3952 Py_ssize_t size_a, size_b, size_z, i;
3953 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003954
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003955 /* Bitwise operations for negative numbers operate as though
3956 on a two's complement representation. So convert arguments
3957 from sign-magnitude to two's complement, and convert the
3958 result back to sign-magnitude at the end. */
Mark Dickinson27a87a22009-10-25 20:43:34 +00003959
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003960 /* If a is negative, replace it by its two's complement. */
3961 size_a = ABS(Py_SIZE(a));
3962 nega = Py_SIZE(a) < 0;
3963 if (nega) {
3964 z = _PyLong_New(size_a);
3965 if (z == NULL)
3966 return NULL;
3967 v_complement(z->ob_digit, a->ob_digit, size_a);
3968 a = z;
3969 }
3970 else
3971 /* Keep reference count consistent. */
3972 Py_INCREF(a);
Mark Dickinson27a87a22009-10-25 20:43:34 +00003973
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003974 /* Same for b. */
3975 size_b = ABS(Py_SIZE(b));
3976 negb = Py_SIZE(b) < 0;
3977 if (negb) {
3978 z = _PyLong_New(size_b);
3979 if (z == NULL) {
3980 Py_DECREF(a);
3981 return NULL;
3982 }
3983 v_complement(z->ob_digit, b->ob_digit, size_b);
3984 b = z;
3985 }
3986 else
3987 Py_INCREF(b);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003988
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003989 /* Swap a and b if necessary to ensure size_a >= size_b. */
3990 if (size_a < size_b) {
3991 z = a; a = b; b = z;
3992 size_z = size_a; size_a = size_b; size_b = size_z;
3993 negz = nega; nega = negb; negb = negz;
3994 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00003995
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003996 /* JRH: The original logic here was to allocate the result value (z)
3997 as the longer of the two operands. However, there are some cases
3998 where the result is guaranteed to be shorter than that: AND of two
3999 positives, OR of two negatives: use the shorter number. AND with
4000 mixed signs: use the positive number. OR with mixed signs: use the
4001 negative number.
4002 */
4003 switch (op) {
4004 case '^':
4005 negz = nega ^ negb;
4006 size_z = size_a;
4007 break;
4008 case '&':
4009 negz = nega & negb;
4010 size_z = negb ? size_a : size_b;
4011 break;
4012 case '|':
4013 negz = nega | negb;
4014 size_z = negb ? size_b : size_a;
4015 break;
4016 default:
4017 PyErr_BadArgument();
4018 return NULL;
4019 }
Guido van Rossumbd3a5271998-08-11 15:04:47 +00004020
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004021 /* We allow an extra digit if z is negative, to make sure that
4022 the final two's complement of z doesn't overflow. */
4023 z = _PyLong_New(size_z + negz);
4024 if (z == NULL) {
4025 Py_DECREF(a);
4026 Py_DECREF(b);
4027 return NULL;
4028 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00004029
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004030 /* Compute digits for overlap of a and b. */
4031 switch(op) {
4032 case '&':
4033 for (i = 0; i < size_b; ++i)
4034 z->ob_digit[i] = a->ob_digit[i] & b->ob_digit[i];
4035 break;
4036 case '|':
4037 for (i = 0; i < size_b; ++i)
4038 z->ob_digit[i] = a->ob_digit[i] | b->ob_digit[i];
4039 break;
4040 case '^':
4041 for (i = 0; i < size_b; ++i)
4042 z->ob_digit[i] = a->ob_digit[i] ^ b->ob_digit[i];
4043 break;
4044 default:
4045 PyErr_BadArgument();
4046 return NULL;
4047 }
Mark Dickinson27a87a22009-10-25 20:43:34 +00004048
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004049 /* Copy any remaining digits of a, inverting if necessary. */
4050 if (op == '^' && negb)
4051 for (; i < size_z; ++i)
4052 z->ob_digit[i] = a->ob_digit[i] ^ PyLong_MASK;
4053 else if (i < size_z)
4054 memcpy(&z->ob_digit[i], &a->ob_digit[i],
4055 (size_z-i)*sizeof(digit));
Mark Dickinson27a87a22009-10-25 20:43:34 +00004056
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004057 /* Complement result if negative. */
4058 if (negz) {
4059 Py_SIZE(z) = -(Py_SIZE(z));
4060 z->ob_digit[size_z] = PyLong_MASK;
4061 v_complement(z->ob_digit, z->ob_digit, size_z+1);
4062 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00004063
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004064 Py_DECREF(a);
4065 Py_DECREF(b);
4066 return (PyObject *)maybe_small_long(long_normalize(z));
Guido van Rossumc6913e71991-11-19 20:26:46 +00004067}
4068
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004069static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00004070long_and(PyObject *a, PyObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00004071{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004072 PyObject *c;
4073 CHECK_BINOP(a, b);
4074 c = long_bitwise((PyLongObject*)a, '&', (PyLongObject*)b);
4075 return c;
Guido van Rossumc6913e71991-11-19 20:26:46 +00004076}
4077
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004078static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00004079long_xor(PyObject *a, PyObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00004080{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004081 PyObject *c;
4082 CHECK_BINOP(a, b);
4083 c = long_bitwise((PyLongObject*)a, '^', (PyLongObject*)b);
4084 return c;
Guido van Rossumc6913e71991-11-19 20:26:46 +00004085}
4086
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004087static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00004088long_or(PyObject *a, PyObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00004089{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004090 PyObject *c;
4091 CHECK_BINOP(a, b);
4092 c = long_bitwise((PyLongObject*)a, '|', (PyLongObject*)b);
4093 return c;
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00004094}
4095
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004096static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00004097long_long(PyObject *v)
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004098{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004099 if (PyLong_CheckExact(v))
4100 Py_INCREF(v);
4101 else
4102 v = _PyLong_Copy((PyLongObject *)v);
4103 return v;
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004104}
4105
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004106static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00004107long_float(PyObject *v)
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004108{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004109 double result;
4110 result = PyLong_AsDouble(v);
4111 if (result == -1.0 && PyErr_Occurred())
4112 return NULL;
4113 return PyFloat_FromDouble(result);
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004114}
4115
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004116static PyObject *
Guido van Rossumbef14172001-08-29 15:47:46 +00004117long_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004118
Tim Peters6d6c1a32001-08-02 04:15:00 +00004119static PyObject *
4120long_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
4121{
Mark Dickinsonf9a5a8e2010-05-26 20:07:58 +00004122 PyObject *obase = NULL, *x = NULL;
4123 long base;
4124 int overflow;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004125 static char *kwlist[] = {"x", "base", 0};
Tim Peters6d6c1a32001-08-02 04:15:00 +00004126
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004127 if (type != &PyLong_Type)
4128 return long_subtype_new(type, args, kwds); /* Wimp out */
Mark Dickinsonf9a5a8e2010-05-26 20:07:58 +00004129 if (!PyArg_ParseTupleAndKeywords(args, kwds, "|OO:int", kwlist,
4130 &x, &obase))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004131 return NULL;
4132 if (x == NULL)
4133 return PyLong_FromLong(0L);
Mark Dickinsonf9a5a8e2010-05-26 20:07:58 +00004134 if (obase == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004135 return PyNumber_Long(x);
Mark Dickinsonf9a5a8e2010-05-26 20:07:58 +00004136
4137 base = PyLong_AsLongAndOverflow(obase, &overflow);
4138 if (base == -1 && PyErr_Occurred())
4139 return NULL;
4140 if (overflow || (base != 0 && base < 2) || base > 36) {
4141 PyErr_SetString(PyExc_ValueError,
4142 "int() arg 2 must be >= 2 and <= 36");
4143 return NULL;
4144 }
4145
4146 if (PyUnicode_Check(x))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004147 return PyLong_FromUnicode(PyUnicode_AS_UNICODE(x),
4148 PyUnicode_GET_SIZE(x),
Mark Dickinsonf9a5a8e2010-05-26 20:07:58 +00004149 (int)base);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004150 else if (PyByteArray_Check(x) || PyBytes_Check(x)) {
4151 /* Since PyLong_FromString doesn't have a length parameter,
4152 * check here for possible NULs in the string. */
4153 char *string;
4154 Py_ssize_t size = Py_SIZE(x);
4155 if (PyByteArray_Check(x))
4156 string = PyByteArray_AS_STRING(x);
4157 else
4158 string = PyBytes_AS_STRING(x);
4159 if (strlen(string) != (size_t)size) {
4160 /* We only see this if there's a null byte in x,
4161 x is a bytes or buffer, *and* a base is given. */
4162 PyErr_Format(PyExc_ValueError,
Mark Dickinson22b20182010-05-10 21:27:53 +00004163 "invalid literal for int() with base %d: %R",
Mark Dickinsonf9a5a8e2010-05-26 20:07:58 +00004164 (int)base, x);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004165 return NULL;
4166 }
Mark Dickinsonf9a5a8e2010-05-26 20:07:58 +00004167 return PyLong_FromString(string, NULL, (int)base);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004168 }
4169 else {
4170 PyErr_SetString(PyExc_TypeError,
Mark Dickinson22b20182010-05-10 21:27:53 +00004171 "int() can't convert non-string with explicit base");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004172 return NULL;
4173 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00004174}
4175
Guido van Rossumbef14172001-08-29 15:47:46 +00004176/* Wimpy, slow approach to tp_new calls for subtypes of long:
4177 first create a regular long from whatever arguments we got,
4178 then allocate a subtype instance and initialize it from
4179 the regular long. The regular long is then thrown away.
4180*/
4181static PyObject *
4182long_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
4183{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004184 PyLongObject *tmp, *newobj;
4185 Py_ssize_t i, n;
Guido van Rossumbef14172001-08-29 15:47:46 +00004186
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004187 assert(PyType_IsSubtype(type, &PyLong_Type));
4188 tmp = (PyLongObject *)long_new(&PyLong_Type, args, kwds);
4189 if (tmp == NULL)
4190 return NULL;
4191 assert(PyLong_CheckExact(tmp));
4192 n = Py_SIZE(tmp);
4193 if (n < 0)
4194 n = -n;
4195 newobj = (PyLongObject *)type->tp_alloc(type, n);
4196 if (newobj == NULL) {
4197 Py_DECREF(tmp);
4198 return NULL;
4199 }
4200 assert(PyLong_Check(newobj));
4201 Py_SIZE(newobj) = Py_SIZE(tmp);
4202 for (i = 0; i < n; i++)
4203 newobj->ob_digit[i] = tmp->ob_digit[i];
4204 Py_DECREF(tmp);
4205 return (PyObject *)newobj;
Guido van Rossumbef14172001-08-29 15:47:46 +00004206}
4207
Guido van Rossum5d9113d2003-01-29 17:58:45 +00004208static PyObject *
4209long_getnewargs(PyLongObject *v)
4210{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004211 return Py_BuildValue("(N)", _PyLong_Copy(v));
Guido van Rossum5d9113d2003-01-29 17:58:45 +00004212}
4213
Guido van Rossumb43daf72007-08-01 18:08:08 +00004214static PyObject *
Mark Dickinson6bf19002009-05-02 17:57:52 +00004215long_get0(PyLongObject *v, void *context) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004216 return PyLong_FromLong(0L);
Mark Dickinson6bf19002009-05-02 17:57:52 +00004217}
4218
4219static PyObject *
4220long_get1(PyLongObject *v, void *context) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004221 return PyLong_FromLong(1L);
Guido van Rossumb43daf72007-08-01 18:08:08 +00004222}
4223
Guido van Rossum2fa33db2007-08-23 22:07:24 +00004224static PyObject *
Eric Smith8c663262007-08-25 02:26:07 +00004225long__format__(PyObject *self, PyObject *args)
4226{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004227 PyObject *format_spec;
Eric Smith4a7d76d2008-05-30 18:10:19 +00004228
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004229 if (!PyArg_ParseTuple(args, "U:__format__", &format_spec))
4230 return NULL;
4231 return _PyLong_FormatAdvanced(self,
4232 PyUnicode_AS_UNICODE(format_spec),
4233 PyUnicode_GET_SIZE(format_spec));
Eric Smith8c663262007-08-25 02:26:07 +00004234}
4235
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004236/* Return a pair (q, r) such that a = b * q + r, and
4237 abs(r) <= abs(b)/2, with equality possible only if q is even.
4238 In other words, q == a / b, rounded to the nearest integer using
4239 round-half-to-even. */
4240
4241PyObject *
Mark Dickinsonfa68a612010-06-07 18:47:09 +00004242_PyLong_DivmodNear(PyObject *a, PyObject *b)
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004243{
4244 PyLongObject *quo = NULL, *rem = NULL;
4245 PyObject *one = NULL, *twice_rem, *result, *temp;
4246 int cmp, quo_is_odd, quo_is_neg;
4247
4248 /* Equivalent Python code:
4249
4250 def divmod_near(a, b):
4251 q, r = divmod(a, b)
4252 # round up if either r / b > 0.5, or r / b == 0.5 and q is odd.
4253 # The expression r / b > 0.5 is equivalent to 2 * r > b if b is
4254 # positive, 2 * r < b if b negative.
4255 greater_than_half = 2*r > b if b > 0 else 2*r < b
4256 exactly_half = 2*r == b
4257 if greater_than_half or exactly_half and q % 2 == 1:
4258 q += 1
4259 r -= b
4260 return q, r
4261
4262 */
4263 if (!PyLong_Check(a) || !PyLong_Check(b)) {
4264 PyErr_SetString(PyExc_TypeError,
4265 "non-integer arguments in division");
4266 return NULL;
4267 }
4268
4269 /* Do a and b have different signs? If so, quotient is negative. */
4270 quo_is_neg = (Py_SIZE(a) < 0) != (Py_SIZE(b) < 0);
4271
4272 one = PyLong_FromLong(1L);
4273 if (one == NULL)
4274 return NULL;
4275
4276 if (long_divrem((PyLongObject*)a, (PyLongObject*)b, &quo, &rem) < 0)
4277 goto error;
4278
4279 /* compare twice the remainder with the divisor, to see
4280 if we need to adjust the quotient and remainder */
4281 twice_rem = long_lshift((PyObject *)rem, one);
4282 if (twice_rem == NULL)
4283 goto error;
4284 if (quo_is_neg) {
4285 temp = long_neg((PyLongObject*)twice_rem);
4286 Py_DECREF(twice_rem);
4287 twice_rem = temp;
4288 if (twice_rem == NULL)
4289 goto error;
4290 }
4291 cmp = long_compare((PyLongObject *)twice_rem, (PyLongObject *)b);
4292 Py_DECREF(twice_rem);
4293
4294 quo_is_odd = Py_SIZE(quo) != 0 && ((quo->ob_digit[0] & 1) != 0);
4295 if ((Py_SIZE(b) < 0 ? cmp < 0 : cmp > 0) || (cmp == 0 && quo_is_odd)) {
4296 /* fix up quotient */
4297 if (quo_is_neg)
4298 temp = long_sub(quo, (PyLongObject *)one);
4299 else
4300 temp = long_add(quo, (PyLongObject *)one);
4301 Py_DECREF(quo);
4302 quo = (PyLongObject *)temp;
4303 if (quo == NULL)
4304 goto error;
4305 /* and remainder */
4306 if (quo_is_neg)
4307 temp = long_add(rem, (PyLongObject *)b);
4308 else
4309 temp = long_sub(rem, (PyLongObject *)b);
4310 Py_DECREF(rem);
4311 rem = (PyLongObject *)temp;
4312 if (rem == NULL)
4313 goto error;
4314 }
4315
4316 result = PyTuple_New(2);
4317 if (result == NULL)
4318 goto error;
4319
4320 /* PyTuple_SET_ITEM steals references */
4321 PyTuple_SET_ITEM(result, 0, (PyObject *)quo);
4322 PyTuple_SET_ITEM(result, 1, (PyObject *)rem);
4323 Py_DECREF(one);
4324 return result;
4325
4326 error:
4327 Py_XDECREF(quo);
4328 Py_XDECREF(rem);
4329 Py_XDECREF(one);
4330 return NULL;
4331}
4332
Eric Smith8c663262007-08-25 02:26:07 +00004333static PyObject *
Guido van Rossum2fa33db2007-08-23 22:07:24 +00004334long_round(PyObject *self, PyObject *args)
4335{
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004336 PyObject *o_ndigits=NULL, *temp, *result, *ndigits;
Guido van Rossum2fa33db2007-08-23 22:07:24 +00004337
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004338 /* To round an integer m to the nearest 10**n (n positive), we make use of
4339 * the divmod_near operation, defined by:
4340 *
4341 * divmod_near(a, b) = (q, r)
4342 *
4343 * where q is the nearest integer to the quotient a / b (the
4344 * nearest even integer in the case of a tie) and r == a - q * b.
4345 * Hence q * b = a - r is the nearest multiple of b to a,
4346 * preferring even multiples in the case of a tie.
4347 *
4348 * So the nearest multiple of 10**n to m is:
4349 *
4350 * m - divmod_near(m, 10**n)[1].
4351 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004352 if (!PyArg_ParseTuple(args, "|O", &o_ndigits))
4353 return NULL;
4354 if (o_ndigits == NULL)
4355 return long_long(self);
Guido van Rossum2fa33db2007-08-23 22:07:24 +00004356
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004357 ndigits = PyNumber_Index(o_ndigits);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004358 if (ndigits == NULL)
4359 return NULL;
Mark Dickinson1124e712009-01-28 21:25:58 +00004360
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004361 /* if ndigits >= 0 then no rounding is necessary; return self unchanged */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004362 if (Py_SIZE(ndigits) >= 0) {
4363 Py_DECREF(ndigits);
4364 return long_long(self);
4365 }
Mark Dickinson1124e712009-01-28 21:25:58 +00004366
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004367 /* result = self - divmod_near(self, 10 ** -ndigits)[1] */
4368 temp = long_neg((PyLongObject*)ndigits);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004369 Py_DECREF(ndigits);
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004370 ndigits = temp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004371 if (ndigits == NULL)
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004372 return NULL;
Mark Dickinson1124e712009-01-28 21:25:58 +00004373
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004374 result = PyLong_FromLong(10L);
4375 if (result == NULL) {
4376 Py_DECREF(ndigits);
4377 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004378 }
Mark Dickinson1124e712009-01-28 21:25:58 +00004379
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004380 temp = long_pow(result, ndigits, Py_None);
4381 Py_DECREF(ndigits);
4382 Py_DECREF(result);
4383 result = temp;
4384 if (result == NULL)
4385 return NULL;
4386
Mark Dickinsonfa68a612010-06-07 18:47:09 +00004387 temp = _PyLong_DivmodNear(self, result);
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004388 Py_DECREF(result);
4389 result = temp;
4390 if (result == NULL)
4391 return NULL;
4392
4393 temp = long_sub((PyLongObject *)self,
4394 (PyLongObject *)PyTuple_GET_ITEM(result, 1));
4395 Py_DECREF(result);
4396 result = temp;
4397
4398 return result;
Guido van Rossum2fa33db2007-08-23 22:07:24 +00004399}
4400
Martin v. Löwis00709aa2008-06-04 14:18:43 +00004401static PyObject *
4402long_sizeof(PyLongObject *v)
4403{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004404 Py_ssize_t res;
Martin v. Löwis00709aa2008-06-04 14:18:43 +00004405
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004406 res = offsetof(PyLongObject, ob_digit) + ABS(Py_SIZE(v))*sizeof(digit);
4407 return PyLong_FromSsize_t(res);
Martin v. Löwis00709aa2008-06-04 14:18:43 +00004408}
4409
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004410static PyObject *
4411long_bit_length(PyLongObject *v)
4412{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004413 PyLongObject *result, *x, *y;
4414 Py_ssize_t ndigits, msd_bits = 0;
4415 digit msd;
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004416
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004417 assert(v != NULL);
4418 assert(PyLong_Check(v));
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004419
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004420 ndigits = ABS(Py_SIZE(v));
4421 if (ndigits == 0)
4422 return PyLong_FromLong(0);
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004423
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004424 msd = v->ob_digit[ndigits-1];
4425 while (msd >= 32) {
4426 msd_bits += 6;
4427 msd >>= 6;
4428 }
4429 msd_bits += (long)(BitLengthTable[msd]);
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004430
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004431 if (ndigits <= PY_SSIZE_T_MAX/PyLong_SHIFT)
4432 return PyLong_FromSsize_t((ndigits-1)*PyLong_SHIFT + msd_bits);
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004433
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004434 /* expression above may overflow; use Python integers instead */
4435 result = (PyLongObject *)PyLong_FromSsize_t(ndigits - 1);
4436 if (result == NULL)
4437 return NULL;
4438 x = (PyLongObject *)PyLong_FromLong(PyLong_SHIFT);
4439 if (x == NULL)
4440 goto error;
4441 y = (PyLongObject *)long_mul(result, x);
4442 Py_DECREF(x);
4443 if (y == NULL)
4444 goto error;
4445 Py_DECREF(result);
4446 result = y;
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004447
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004448 x = (PyLongObject *)PyLong_FromLong((long)msd_bits);
4449 if (x == NULL)
4450 goto error;
4451 y = (PyLongObject *)long_add(result, x);
4452 Py_DECREF(x);
4453 if (y == NULL)
4454 goto error;
4455 Py_DECREF(result);
4456 result = y;
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004457
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004458 return (PyObject *)result;
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004459
Mark Dickinson22b20182010-05-10 21:27:53 +00004460 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004461 Py_DECREF(result);
4462 return NULL;
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004463}
4464
4465PyDoc_STRVAR(long_bit_length_doc,
4466"int.bit_length() -> int\n\
4467\n\
4468Number of bits necessary to represent self in binary.\n\
4469>>> bin(37)\n\
4470'0b100101'\n\
4471>>> (37).bit_length()\n\
44726");
4473
Christian Heimes53876d92008-04-19 00:31:39 +00004474#if 0
4475static PyObject *
4476long_is_finite(PyObject *v)
4477{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004478 Py_RETURN_TRUE;
Christian Heimes53876d92008-04-19 00:31:39 +00004479}
4480#endif
4481
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004482
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004483static PyObject *
4484long_to_bytes(PyLongObject *v, PyObject *args, PyObject *kwds)
4485{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004486 PyObject *byteorder_str;
4487 PyObject *is_signed_obj = NULL;
4488 Py_ssize_t length;
4489 int little_endian;
4490 int is_signed;
4491 PyObject *bytes;
4492 static char *kwlist[] = {"length", "byteorder", "signed", NULL};
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004493
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004494 if (!PyArg_ParseTupleAndKeywords(args, kwds, "nU|O:to_bytes", kwlist,
4495 &length, &byteorder_str,
4496 &is_signed_obj))
4497 return NULL;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004498
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004499 if (args != NULL && Py_SIZE(args) > 2) {
4500 PyErr_SetString(PyExc_TypeError,
4501 "'signed' is a keyword-only argument");
4502 return NULL;
4503 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004504
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004505 if (!PyUnicode_CompareWithASCIIString(byteorder_str, "little"))
4506 little_endian = 1;
4507 else if (!PyUnicode_CompareWithASCIIString(byteorder_str, "big"))
4508 little_endian = 0;
4509 else {
4510 PyErr_SetString(PyExc_ValueError,
4511 "byteorder must be either 'little' or 'big'");
4512 return NULL;
4513 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004514
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004515 if (is_signed_obj != NULL) {
4516 int cmp = PyObject_IsTrue(is_signed_obj);
4517 if (cmp < 0)
4518 return NULL;
4519 is_signed = cmp ? 1 : 0;
4520 }
4521 else {
4522 /* If the signed argument was omitted, use False as the
4523 default. */
4524 is_signed = 0;
4525 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004526
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004527 if (length < 0) {
4528 PyErr_SetString(PyExc_ValueError,
4529 "length argument must be non-negative");
4530 return NULL;
4531 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004532
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004533 bytes = PyBytes_FromStringAndSize(NULL, length);
4534 if (bytes == NULL)
4535 return NULL;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004536
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004537 if (_PyLong_AsByteArray(v, (unsigned char *)PyBytes_AS_STRING(bytes),
4538 length, little_endian, is_signed) < 0) {
4539 Py_DECREF(bytes);
4540 return NULL;
4541 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004542
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004543 return bytes;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004544}
4545
Mark Dickinson078c2532010-01-30 18:06:17 +00004546PyDoc_STRVAR(long_to_bytes_doc,
4547"int.to_bytes(length, byteorder, *, signed=False) -> bytes\n\
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004548\n\
Mark Dickinson078c2532010-01-30 18:06:17 +00004549Return an array of bytes representing an integer.\n\
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004550\n\
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004551The integer is represented using length bytes. An OverflowError is\n\
Mark Dickinson078c2532010-01-30 18:06:17 +00004552raised if the integer is not representable with the given number of\n\
4553bytes.\n\
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004554\n\
4555The byteorder argument determines the byte order used to represent the\n\
4556integer. If byteorder is 'big', the most significant byte is at the\n\
4557beginning of the byte array. If byteorder is 'little', the most\n\
4558significant byte is at the end of the byte array. To request the native\n\
4559byte order of the host system, use `sys.byteorder' as the byte order value.\n\
4560\n\
Mark Dickinson078c2532010-01-30 18:06:17 +00004561The signed keyword-only argument determines whether two's complement is\n\
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004562used to represent the integer. If signed is False and a negative integer\n\
Mark Dickinson078c2532010-01-30 18:06:17 +00004563is given, an OverflowError is raised.");
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004564
4565static PyObject *
4566long_from_bytes(PyTypeObject *type, PyObject *args, PyObject *kwds)
4567{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004568 PyObject *byteorder_str;
4569 PyObject *is_signed_obj = NULL;
4570 int little_endian;
4571 int is_signed;
4572 PyObject *obj;
4573 PyObject *bytes;
4574 PyObject *long_obj;
4575 static char *kwlist[] = {"bytes", "byteorder", "signed", NULL};
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004576
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004577 if (!PyArg_ParseTupleAndKeywords(args, kwds, "OU|O:from_bytes", kwlist,
4578 &obj, &byteorder_str,
4579 &is_signed_obj))
4580 return NULL;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004581
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004582 if (args != NULL && Py_SIZE(args) > 2) {
4583 PyErr_SetString(PyExc_TypeError,
4584 "'signed' is a keyword-only argument");
4585 return NULL;
4586 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004587
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004588 if (!PyUnicode_CompareWithASCIIString(byteorder_str, "little"))
4589 little_endian = 1;
4590 else if (!PyUnicode_CompareWithASCIIString(byteorder_str, "big"))
4591 little_endian = 0;
4592 else {
4593 PyErr_SetString(PyExc_ValueError,
4594 "byteorder must be either 'little' or 'big'");
4595 return NULL;
4596 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004597
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004598 if (is_signed_obj != NULL) {
4599 int cmp = PyObject_IsTrue(is_signed_obj);
4600 if (cmp < 0)
4601 return NULL;
4602 is_signed = cmp ? 1 : 0;
4603 }
4604 else {
4605 /* If the signed argument was omitted, use False as the
4606 default. */
4607 is_signed = 0;
4608 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004609
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004610 bytes = PyObject_Bytes(obj);
4611 if (bytes == NULL)
4612 return NULL;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004613
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004614 long_obj = _PyLong_FromByteArray(
4615 (unsigned char *)PyBytes_AS_STRING(bytes), Py_SIZE(bytes),
4616 little_endian, is_signed);
4617 Py_DECREF(bytes);
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004618
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004619 /* If from_bytes() was used on subclass, allocate new subclass
4620 * instance, initialize it with decoded long value and return it.
4621 */
4622 if (type != &PyLong_Type && PyType_IsSubtype(type, &PyLong_Type)) {
4623 PyLongObject *newobj;
4624 int i;
4625 Py_ssize_t n = ABS(Py_SIZE(long_obj));
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004626
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004627 newobj = (PyLongObject *)type->tp_alloc(type, n);
4628 if (newobj == NULL) {
4629 Py_DECREF(long_obj);
4630 return NULL;
4631 }
4632 assert(PyLong_Check(newobj));
4633 Py_SIZE(newobj) = Py_SIZE(long_obj);
4634 for (i = 0; i < n; i++) {
4635 newobj->ob_digit[i] =
4636 ((PyLongObject *)long_obj)->ob_digit[i];
4637 }
4638 Py_DECREF(long_obj);
4639 return (PyObject *)newobj;
4640 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004641
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004642 return long_obj;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004643}
4644
Mark Dickinson078c2532010-01-30 18:06:17 +00004645PyDoc_STRVAR(long_from_bytes_doc,
4646"int.from_bytes(bytes, byteorder, *, signed=False) -> int\n\
4647\n\
4648Return the integer represented by the given array of bytes.\n\
4649\n\
4650The bytes argument must either support the buffer protocol or be an\n\
4651iterable object producing bytes. Bytes and bytearray are examples of\n\
4652built-in objects that support the buffer protocol.\n\
4653\n\
4654The byteorder argument determines the byte order used to represent the\n\
4655integer. If byteorder is 'big', the most significant byte is at the\n\
4656beginning of the byte array. If byteorder is 'little', the most\n\
4657significant byte is at the end of the byte array. To request the native\n\
4658byte order of the host system, use `sys.byteorder' as the byte order value.\n\
4659\n\
4660The signed keyword-only argument indicates whether two's complement is\n\
4661used to represent the integer.");
4662
Guido van Rossum5d9113d2003-01-29 17:58:45 +00004663static PyMethodDef long_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004664 {"conjugate", (PyCFunction)long_long, METH_NOARGS,
4665 "Returns self, the complex conjugate of any int."},
4666 {"bit_length", (PyCFunction)long_bit_length, METH_NOARGS,
4667 long_bit_length_doc},
Christian Heimes53876d92008-04-19 00:31:39 +00004668#if 0
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004669 {"is_finite", (PyCFunction)long_is_finite, METH_NOARGS,
4670 "Returns always True."},
Christian Heimes53876d92008-04-19 00:31:39 +00004671#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004672 {"to_bytes", (PyCFunction)long_to_bytes,
4673 METH_VARARGS|METH_KEYWORDS, long_to_bytes_doc},
4674 {"from_bytes", (PyCFunction)long_from_bytes,
4675 METH_VARARGS|METH_KEYWORDS|METH_CLASS, long_from_bytes_doc},
4676 {"__trunc__", (PyCFunction)long_long, METH_NOARGS,
4677 "Truncating an Integral returns itself."},
4678 {"__floor__", (PyCFunction)long_long, METH_NOARGS,
4679 "Flooring an Integral returns itself."},
4680 {"__ceil__", (PyCFunction)long_long, METH_NOARGS,
4681 "Ceiling of an Integral returns itself."},
4682 {"__round__", (PyCFunction)long_round, METH_VARARGS,
4683 "Rounding an Integral returns itself.\n"
4684 "Rounding with an ndigits argument also returns an integer."},
4685 {"__getnewargs__", (PyCFunction)long_getnewargs, METH_NOARGS},
4686 {"__format__", (PyCFunction)long__format__, METH_VARARGS},
4687 {"__sizeof__", (PyCFunction)long_sizeof, METH_NOARGS,
4688 "Returns size in memory, in bytes"},
4689 {NULL, NULL} /* sentinel */
Guido van Rossum5d9113d2003-01-29 17:58:45 +00004690};
4691
Guido van Rossumb43daf72007-08-01 18:08:08 +00004692static PyGetSetDef long_getset[] = {
Mark Dickinson6bf19002009-05-02 17:57:52 +00004693 {"real",
Guido van Rossumb43daf72007-08-01 18:08:08 +00004694 (getter)long_long, (setter)NULL,
4695 "the real part of a complex number",
4696 NULL},
Mark Dickinson6bf19002009-05-02 17:57:52 +00004697 {"imag",
4698 (getter)long_get0, (setter)NULL,
Guido van Rossumb43daf72007-08-01 18:08:08 +00004699 "the imaginary part of a complex number",
Mark Dickinson6bf19002009-05-02 17:57:52 +00004700 NULL},
4701 {"numerator",
Guido van Rossumb43daf72007-08-01 18:08:08 +00004702 (getter)long_long, (setter)NULL,
4703 "the numerator of a rational number in lowest terms",
4704 NULL},
Mark Dickinson6bf19002009-05-02 17:57:52 +00004705 {"denominator",
4706 (getter)long_get1, (setter)NULL,
Guido van Rossumb43daf72007-08-01 18:08:08 +00004707 "the denominator of a rational number in lowest terms",
Mark Dickinson6bf19002009-05-02 17:57:52 +00004708 NULL},
Guido van Rossumb43daf72007-08-01 18:08:08 +00004709 {NULL} /* Sentinel */
4710};
4711
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004712PyDoc_STRVAR(long_doc,
Guido van Rossumddefaf32007-01-14 03:31:43 +00004713"int(x[, base]) -> integer\n\
Tim Peters6d6c1a32001-08-02 04:15:00 +00004714\n\
Guido van Rossumddefaf32007-01-14 03:31:43 +00004715Convert a string or number to an integer, if possible. A floating\n\
Tim Peters6d6c1a32001-08-02 04:15:00 +00004716point argument will be truncated towards zero (this does not include a\n\
4717string representation of a floating point number!) When converting a\n\
4718string, use the optional base. It is an error to supply a base when\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004719converting a non-string.");
Tim Peters6d6c1a32001-08-02 04:15:00 +00004720
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004721static PyNumberMethods long_as_number = {
Mark Dickinson22b20182010-05-10 21:27:53 +00004722 (binaryfunc)long_add, /*nb_add*/
4723 (binaryfunc)long_sub, /*nb_subtract*/
4724 (binaryfunc)long_mul, /*nb_multiply*/
4725 long_mod, /*nb_remainder*/
4726 long_divmod, /*nb_divmod*/
4727 long_pow, /*nb_power*/
4728 (unaryfunc)long_neg, /*nb_negative*/
4729 (unaryfunc)long_long, /*tp_positive*/
4730 (unaryfunc)long_abs, /*tp_absolute*/
4731 (inquiry)long_bool, /*tp_bool*/
4732 (unaryfunc)long_invert, /*nb_invert*/
4733 long_lshift, /*nb_lshift*/
4734 (binaryfunc)long_rshift, /*nb_rshift*/
4735 long_and, /*nb_and*/
4736 long_xor, /*nb_xor*/
4737 long_or, /*nb_or*/
4738 long_long, /*nb_int*/
4739 0, /*nb_reserved*/
4740 long_float, /*nb_float*/
4741 0, /* nb_inplace_add */
4742 0, /* nb_inplace_subtract */
4743 0, /* nb_inplace_multiply */
4744 0, /* nb_inplace_remainder */
4745 0, /* nb_inplace_power */
4746 0, /* nb_inplace_lshift */
4747 0, /* nb_inplace_rshift */
4748 0, /* nb_inplace_and */
4749 0, /* nb_inplace_xor */
4750 0, /* nb_inplace_or */
4751 long_div, /* nb_floor_divide */
4752 long_true_divide, /* nb_true_divide */
4753 0, /* nb_inplace_floor_divide */
4754 0, /* nb_inplace_true_divide */
4755 long_long, /* nb_index */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00004756};
4757
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004758PyTypeObject PyLong_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004759 PyVarObject_HEAD_INIT(&PyType_Type, 0)
4760 "int", /* tp_name */
4761 offsetof(PyLongObject, ob_digit), /* tp_basicsize */
4762 sizeof(digit), /* tp_itemsize */
4763 long_dealloc, /* tp_dealloc */
4764 0, /* tp_print */
4765 0, /* tp_getattr */
4766 0, /* tp_setattr */
4767 0, /* tp_reserved */
4768 long_to_decimal_string, /* tp_repr */
4769 &long_as_number, /* tp_as_number */
4770 0, /* tp_as_sequence */
4771 0, /* tp_as_mapping */
4772 (hashfunc)long_hash, /* tp_hash */
4773 0, /* tp_call */
4774 long_to_decimal_string, /* tp_str */
4775 PyObject_GenericGetAttr, /* tp_getattro */
4776 0, /* tp_setattro */
4777 0, /* tp_as_buffer */
4778 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE |
4779 Py_TPFLAGS_LONG_SUBCLASS, /* tp_flags */
4780 long_doc, /* tp_doc */
4781 0, /* tp_traverse */
4782 0, /* tp_clear */
4783 long_richcompare, /* tp_richcompare */
4784 0, /* tp_weaklistoffset */
4785 0, /* tp_iter */
4786 0, /* tp_iternext */
4787 long_methods, /* tp_methods */
4788 0, /* tp_members */
4789 long_getset, /* tp_getset */
4790 0, /* tp_base */
4791 0, /* tp_dict */
4792 0, /* tp_descr_get */
4793 0, /* tp_descr_set */
4794 0, /* tp_dictoffset */
4795 0, /* tp_init */
4796 0, /* tp_alloc */
4797 long_new, /* tp_new */
4798 PyObject_Del, /* tp_free */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00004799};
Guido van Rossumddefaf32007-01-14 03:31:43 +00004800
Mark Dickinsonbd792642009-03-18 20:06:12 +00004801static PyTypeObject Int_InfoType;
4802
4803PyDoc_STRVAR(int_info__doc__,
4804"sys.int_info\n\
4805\n\
4806A struct sequence that holds information about Python's\n\
4807internal representation of integers. The attributes are read only.");
4808
4809static PyStructSequence_Field int_info_fields[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004810 {"bits_per_digit", "size of a digit in bits"},
Mark Dickinson22b20182010-05-10 21:27:53 +00004811 {"sizeof_digit", "size in bytes of the C type used to represent a digit"},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004812 {NULL, NULL}
Mark Dickinsonbd792642009-03-18 20:06:12 +00004813};
4814
4815static PyStructSequence_Desc int_info_desc = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004816 "sys.int_info", /* name */
4817 int_info__doc__, /* doc */
4818 int_info_fields, /* fields */
4819 2 /* number of fields */
Mark Dickinsonbd792642009-03-18 20:06:12 +00004820};
4821
4822PyObject *
4823PyLong_GetInfo(void)
4824{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004825 PyObject* int_info;
4826 int field = 0;
4827 int_info = PyStructSequence_New(&Int_InfoType);
4828 if (int_info == NULL)
4829 return NULL;
4830 PyStructSequence_SET_ITEM(int_info, field++,
4831 PyLong_FromLong(PyLong_SHIFT));
4832 PyStructSequence_SET_ITEM(int_info, field++,
4833 PyLong_FromLong(sizeof(digit)));
4834 if (PyErr_Occurred()) {
4835 Py_CLEAR(int_info);
4836 return NULL;
4837 }
4838 return int_info;
Mark Dickinsonbd792642009-03-18 20:06:12 +00004839}
4840
Guido van Rossumddefaf32007-01-14 03:31:43 +00004841int
4842_PyLong_Init(void)
4843{
4844#if NSMALLNEGINTS + NSMALLPOSINTS > 0
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004845 int ival, size;
4846 PyLongObject *v = small_ints;
Christian Heimesdfc12ed2008-01-31 15:16:38 +00004847
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004848 for (ival = -NSMALLNEGINTS; ival < NSMALLPOSINTS; ival++, v++) {
4849 size = (ival < 0) ? -1 : ((ival == 0) ? 0 : 1);
4850 if (Py_TYPE(v) == &PyLong_Type) {
4851 /* The element is already initialized, most likely
4852 * the Python interpreter was initialized before.
4853 */
4854 Py_ssize_t refcnt;
4855 PyObject* op = (PyObject*)v;
Christian Heimesdfc12ed2008-01-31 15:16:38 +00004856
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004857 refcnt = Py_REFCNT(op) < 0 ? 0 : Py_REFCNT(op);
4858 _Py_NewReference(op);
4859 /* _Py_NewReference sets the ref count to 1 but
4860 * the ref count might be larger. Set the refcnt
4861 * to the original refcnt + 1 */
4862 Py_REFCNT(op) = refcnt + 1;
4863 assert(Py_SIZE(op) == size);
4864 assert(v->ob_digit[0] == abs(ival));
4865 }
4866 else {
4867 PyObject_INIT(v, &PyLong_Type);
4868 }
4869 Py_SIZE(v) = size;
4870 v->ob_digit[0] = abs(ival);
4871 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00004872#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004873 /* initialize int_info */
4874 if (Int_InfoType.tp_name == 0)
4875 PyStructSequence_InitType(&Int_InfoType, &int_info_desc);
Mark Dickinsonbd792642009-03-18 20:06:12 +00004876
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004877 return 1;
Guido van Rossumddefaf32007-01-14 03:31:43 +00004878}
4879
4880void
4881PyLong_Fini(void)
4882{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004883 /* Integers are currently statically allocated. Py_DECREF is not
4884 needed, but Python must forget about the reference or multiple
4885 reinitializations will fail. */
Guido van Rossumddefaf32007-01-14 03:31:43 +00004886#if NSMALLNEGINTS + NSMALLPOSINTS > 0
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004887 int i;
4888 PyLongObject *v = small_ints;
4889 for (i = 0; i < NSMALLNEGINTS + NSMALLPOSINTS; i++, v++) {
4890 _Py_DEC_REFTOTAL;
4891 _Py_ForgetReference((PyObject*)v);
4892 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00004893#endif
4894}