blob: d4b26d65b9fceca5c329f1f204f78a5dc597a58c [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"
Mark Dickinsonbd792642009-03-18 20:06:12 +00007#include "structseq.h"
Guido van Rossumc0b618a1997-05-02 03:12:38 +00008
Mark Dickinsonc6300392009-04-20 21:38:00 +00009#include <float.h>
Guido van Rossumeb1fafc1994-08-29 12:47:19 +000010#include <ctype.h>
Mark Dickinson5a74bf62009-02-15 11:04:38 +000011#include <stddef.h>
Guido van Rossumedcc38a1991-05-05 20:09:44 +000012
Guido van Rossumddefaf32007-01-14 03:31:43 +000013#ifndef NSMALLPOSINTS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000014#define NSMALLPOSINTS 257
Guido van Rossumddefaf32007-01-14 03:31:43 +000015#endif
16#ifndef NSMALLNEGINTS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000017#define NSMALLNEGINTS 5
Guido van Rossumddefaf32007-01-14 03:31:43 +000018#endif
Facundo Batista6e6f59b2008-07-24 18:57:11 +000019
Mark Dickinsone4416742009-02-15 15:14:57 +000020/* convert a PyLong of size 1, 0 or -1 to an sdigit */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000021#define MEDIUM_VALUE(x) (Py_SIZE(x) < 0 ? -(sdigit)(x)->ob_digit[0] : \
22 (Py_SIZE(x) == 0 ? (sdigit)0 : \
23 (sdigit)(x)->ob_digit[0]))
Facundo Batista6e6f59b2008-07-24 18:57:11 +000024#define ABS(x) ((x) < 0 ? -(x) : (x))
25
Guido van Rossumddefaf32007-01-14 03:31:43 +000026#if NSMALLNEGINTS + NSMALLPOSINTS > 0
27/* Small integers are preallocated in this array so that they
28 can be shared.
29 The integers that are preallocated are those in the range
30 -NSMALLNEGINTS (inclusive) to NSMALLPOSINTS (not inclusive).
31*/
32static PyLongObject small_ints[NSMALLNEGINTS + NSMALLPOSINTS];
33#ifdef COUNT_ALLOCS
34int quick_int_allocs, quick_neg_int_allocs;
35#endif
36
Guido van Rossum7eaf8222007-06-18 17:58:50 +000037static PyObject *
Mark Dickinsone4416742009-02-15 15:14:57 +000038get_small_int(sdigit ival)
Guido van Rossumddefaf32007-01-14 03:31:43 +000039{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000040 PyObject *v = (PyObject*)(small_ints + ival + NSMALLNEGINTS);
41 Py_INCREF(v);
Guido van Rossumddefaf32007-01-14 03:31:43 +000042#ifdef COUNT_ALLOCS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000043 if (ival >= 0)
44 quick_int_allocs++;
45 else
46 quick_neg_int_allocs++;
Guido van Rossumddefaf32007-01-14 03:31:43 +000047#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000048 return v;
Guido van Rossumddefaf32007-01-14 03:31:43 +000049}
50#define CHECK_SMALL_INT(ival) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000051 do if (-NSMALLNEGINTS <= ival && ival < NSMALLPOSINTS) { \
52 return get_small_int((sdigit)ival); \
53 } while(0)
Guido van Rossumddefaf32007-01-14 03:31:43 +000054
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000055static PyLongObject *
Facundo Batista6e6f59b2008-07-24 18:57:11 +000056maybe_small_long(PyLongObject *v)
57{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000058 if (v && ABS(Py_SIZE(v)) <= 1) {
59 sdigit ival = MEDIUM_VALUE(v);
60 if (-NSMALLNEGINTS <= ival && ival < NSMALLPOSINTS) {
61 Py_DECREF(v);
62 return (PyLongObject *)get_small_int(ival);
63 }
64 }
65 return v;
Facundo Batista6e6f59b2008-07-24 18:57:11 +000066}
Guido van Rossumddefaf32007-01-14 03:31:43 +000067#else
68#define CHECK_SMALL_INT(ival)
Facundo Batista6e6f59b2008-07-24 18:57:11 +000069#define maybe_small_long(val) (val)
Guido van Rossumddefaf32007-01-14 03:31:43 +000070#endif
71
Guido van Rossumddefaf32007-01-14 03:31:43 +000072/* If a freshly-allocated long is already shared, it must
73 be a small integer, so negating it must go to PyLong_FromLong */
74#define NEGATE(x) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000075 do if (Py_REFCNT(x) == 1) Py_SIZE(x) = -Py_SIZE(x); \
76 else { PyObject* tmp=PyLong_FromLong(-MEDIUM_VALUE(x)); \
77 Py_DECREF(x); (x) = (PyLongObject*)tmp; } \
78 while(0)
Tim Peters5af4e6c2002-08-12 02:31:19 +000079/* For long multiplication, use the O(N**2) school algorithm unless
80 * both operands contain more than KARATSUBA_CUTOFF digits (this
81 * being an internal Python long digit, in base BASE).
82 */
Tim Peters0973b992004-08-29 22:16:50 +000083#define KARATSUBA_CUTOFF 70
84#define KARATSUBA_SQUARE_CUTOFF (2 * KARATSUBA_CUTOFF)
Tim Peters5af4e6c2002-08-12 02:31:19 +000085
Tim Peters47e52ee2004-08-30 02:44:38 +000086/* For exponentiation, use the binary left-to-right algorithm
87 * unless the exponent contains more than FIVEARY_CUTOFF digits.
88 * In that case, do 5 bits at a time. The potential drawback is that
89 * a table of 2**5 intermediate results is computed.
90 */
91#define FIVEARY_CUTOFF 8
92
Tim Peters5af4e6c2002-08-12 02:31:19 +000093#undef MIN
94#undef MAX
95#define MAX(x, y) ((x) < (y) ? (y) : (x))
96#define MIN(x, y) ((x) > (y) ? (y) : (x))
97
Guido van Rossumc0b618a1997-05-02 03:12:38 +000098#define SIGCHECK(PyTryBlock) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000099 if (PyErr_CheckSignals()) PyTryBlock \
Guido van Rossum23d6f0e1991-05-14 12:06:49 +0000100
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000101/* Normalize (remove leading zeros from) a long int object.
102 Doesn't attempt to free the storage--in most cases, due to the nature
103 of the algorithms used, this could save at most be one word anyway. */
104
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000105static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +0000106long_normalize(register PyLongObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000107{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000108 Py_ssize_t j = ABS(Py_SIZE(v));
109 Py_ssize_t i = j;
Tim Peters5af4e6c2002-08-12 02:31:19 +0000110
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000111 while (i > 0 && v->ob_digit[i-1] == 0)
112 --i;
113 if (i != j)
114 Py_SIZE(v) = (Py_SIZE(v) < 0) ? -(i) : i;
115 return v;
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000116}
117
118/* Allocate a new long int object with size digits.
119 Return NULL and set exception if we run out of memory. */
120
Mark Dickinson5a74bf62009-02-15 11:04:38 +0000121#define MAX_LONG_DIGITS \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000122 ((PY_SSIZE_T_MAX - offsetof(PyLongObject, ob_digit))/sizeof(digit))
Mark Dickinson5a74bf62009-02-15 11:04:38 +0000123
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000124PyLongObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +0000125_PyLong_New(Py_ssize_t size)
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000126{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000127 PyLongObject *result;
128 /* Number of bytes needed is: offsetof(PyLongObject, ob_digit) +
129 sizeof(digit)*size. Previous incarnations of this code used
130 sizeof(PyVarObject) instead of the offsetof, but this risks being
131 incorrect in the presence of padding between the PyVarObject header
132 and the digits. */
133 if (size > (Py_ssize_t)MAX_LONG_DIGITS) {
134 PyErr_SetString(PyExc_OverflowError,
135 "too many digits in integer");
136 return NULL;
137 }
138 result = PyObject_MALLOC(offsetof(PyLongObject, ob_digit) +
139 size*sizeof(digit));
140 if (!result) {
141 PyErr_NoMemory();
142 return NULL;
143 }
144 return (PyLongObject*)PyObject_INIT_VAR(result, &PyLong_Type, size);
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000145}
146
Tim Peters64b5ce32001-09-10 20:52:51 +0000147PyObject *
148_PyLong_Copy(PyLongObject *src)
149{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000150 PyLongObject *result;
151 Py_ssize_t i;
Tim Peters64b5ce32001-09-10 20:52:51 +0000152
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000153 assert(src != NULL);
154 i = Py_SIZE(src);
155 if (i < 0)
156 i = -(i);
157 if (i < 2) {
158 sdigit ival = src->ob_digit[0];
159 if (Py_SIZE(src) < 0)
160 ival = -ival;
161 CHECK_SMALL_INT(ival);
162 }
163 result = _PyLong_New(i);
164 if (result != NULL) {
165 Py_SIZE(result) = Py_SIZE(src);
166 while (--i >= 0)
167 result->ob_digit[i] = src->ob_digit[i];
168 }
169 return (PyObject *)result;
Tim Peters64b5ce32001-09-10 20:52:51 +0000170}
171
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000172/* Create a new long int object from a C long int */
173
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000174PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +0000175PyLong_FromLong(long ival)
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000176{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000177 PyLongObject *v;
178 unsigned long abs_ival;
179 unsigned long t; /* unsigned so >> doesn't propagate sign bit */
180 int ndigits = 0;
181 int sign = 1;
Guido van Rossumddefaf32007-01-14 03:31:43 +0000182
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000183 CHECK_SMALL_INT(ival);
Tim Petersce9de2f2001-06-14 04:56:19 +0000184
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000185 if (ival < 0) {
186 /* negate: can't write this as abs_ival = -ival since that
187 invokes undefined behaviour when ival is LONG_MIN */
188 abs_ival = 0U-(unsigned long)ival;
189 sign = -1;
190 }
191 else {
192 abs_ival = (unsigned long)ival;
193 }
Tim Petersce9de2f2001-06-14 04:56:19 +0000194
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000195 /* Fast path for single-digit ints */
196 if (!(abs_ival >> PyLong_SHIFT)) {
197 v = _PyLong_New(1);
198 if (v) {
199 Py_SIZE(v) = sign;
200 v->ob_digit[0] = Py_SAFE_DOWNCAST(
201 abs_ival, unsigned long, digit);
202 }
203 return (PyObject*)v;
204 }
Guido van Rossumddefaf32007-01-14 03:31:43 +0000205
Mark Dickinson249b8982009-04-27 19:41:00 +0000206#if PyLong_SHIFT==15
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000207 /* 2 digits */
208 if (!(abs_ival >> 2*PyLong_SHIFT)) {
209 v = _PyLong_New(2);
210 if (v) {
211 Py_SIZE(v) = 2*sign;
212 v->ob_digit[0] = Py_SAFE_DOWNCAST(
213 abs_ival & PyLong_MASK, unsigned long, digit);
214 v->ob_digit[1] = Py_SAFE_DOWNCAST(
215 abs_ival >> PyLong_SHIFT, unsigned long, digit);
216 }
217 return (PyObject*)v;
218 }
Mark Dickinsonbd792642009-03-18 20:06:12 +0000219#endif
Guido van Rossumddefaf32007-01-14 03:31:43 +0000220
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000221 /* Larger numbers: loop to determine number of digits */
222 t = abs_ival;
223 while (t) {
224 ++ndigits;
225 t >>= PyLong_SHIFT;
226 }
227 v = _PyLong_New(ndigits);
228 if (v != NULL) {
229 digit *p = v->ob_digit;
230 Py_SIZE(v) = ndigits*sign;
231 t = abs_ival;
232 while (t) {
233 *p++ = Py_SAFE_DOWNCAST(
234 t & PyLong_MASK, unsigned long, digit);
235 t >>= PyLong_SHIFT;
236 }
237 }
238 return (PyObject *)v;
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000239}
240
Guido van Rossum53756b11997-01-03 17:14:46 +0000241/* Create a new long int object from a C unsigned long int */
242
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000243PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +0000244PyLong_FromUnsignedLong(unsigned long ival)
Guido van Rossum53756b11997-01-03 17:14:46 +0000245{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000246 PyLongObject *v;
247 unsigned long t;
248 int ndigits = 0;
Tim Petersce9de2f2001-06-14 04:56:19 +0000249
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000250 if (ival < PyLong_BASE)
251 return PyLong_FromLong(ival);
252 /* Count the number of Python digits. */
253 t = (unsigned long)ival;
254 while (t) {
255 ++ndigits;
256 t >>= PyLong_SHIFT;
257 }
258 v = _PyLong_New(ndigits);
259 if (v != NULL) {
260 digit *p = v->ob_digit;
261 Py_SIZE(v) = ndigits;
262 while (ival) {
263 *p++ = (digit)(ival & PyLong_MASK);
264 ival >>= PyLong_SHIFT;
265 }
266 }
267 return (PyObject *)v;
Guido van Rossum53756b11997-01-03 17:14:46 +0000268}
269
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000270/* Create a new long int object from a C double */
271
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000272PyObject *
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000273PyLong_FromDouble(double dval)
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000274{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000275 PyLongObject *v;
276 double frac;
277 int i, ndig, expo, neg;
278 neg = 0;
279 if (Py_IS_INFINITY(dval)) {
280 PyErr_SetString(PyExc_OverflowError,
281 "cannot convert float infinity to integer");
282 return NULL;
283 }
284 if (Py_IS_NAN(dval)) {
285 PyErr_SetString(PyExc_ValueError,
286 "cannot convert float NaN to integer");
287 return NULL;
288 }
289 if (dval < 0.0) {
290 neg = 1;
291 dval = -dval;
292 }
293 frac = frexp(dval, &expo); /* dval = frac*2**expo; 0.0 <= frac < 1.0 */
294 if (expo <= 0)
295 return PyLong_FromLong(0L);
296 ndig = (expo-1) / PyLong_SHIFT + 1; /* Number of 'digits' in result */
297 v = _PyLong_New(ndig);
298 if (v == NULL)
299 return NULL;
300 frac = ldexp(frac, (expo-1) % PyLong_SHIFT + 1);
301 for (i = ndig; --i >= 0; ) {
302 digit bits = (digit)frac;
303 v->ob_digit[i] = bits;
304 frac = frac - (double)bits;
305 frac = ldexp(frac, PyLong_SHIFT);
306 }
307 if (neg)
308 Py_SIZE(v) = -(Py_SIZE(v));
309 return (PyObject *)v;
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000310}
311
Thomas Wouters89f507f2006-12-13 04:49:30 +0000312/* Checking for overflow in PyLong_AsLong is a PITA since C doesn't define
313 * anything about what happens when a signed integer operation overflows,
314 * and some compilers think they're doing you a favor by being "clever"
315 * then. The bit pattern for the largest postive signed long is
316 * (unsigned long)LONG_MAX, and for the smallest negative signed long
317 * it is abs(LONG_MIN), which we could write -(unsigned long)LONG_MIN.
318 * However, some other compilers warn about applying unary minus to an
319 * unsigned operand. Hence the weird "0-".
320 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000321#define PY_ABS_LONG_MIN (0-(unsigned long)LONG_MIN)
322#define PY_ABS_SSIZE_T_MIN (0-(size_t)PY_SSIZE_T_MIN)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000323
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000324/* Get a C long int from a long int object.
325 Returns -1 and sets an error condition if overflow occurs. */
326
327long
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +0000328PyLong_AsLongAndOverflow(PyObject *vv, int *overflow)
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000329{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000330 /* This version by Tim Peters */
331 register PyLongObject *v;
332 unsigned long x, prev;
333 long res;
334 Py_ssize_t i;
335 int sign;
336 int do_decref = 0; /* if nb_int was called */
Guido van Rossumf7531811998-05-26 14:33:37 +0000337
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000338 *overflow = 0;
339 if (vv == NULL) {
340 PyErr_BadInternalCall();
341 return -1;
342 }
Guido van Rossumddefaf32007-01-14 03:31:43 +0000343
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000344 if (!PyLong_Check(vv)) {
345 PyNumberMethods *nb;
346 nb = vv->ob_type->tp_as_number;
347 if (nb == NULL || nb->nb_int == NULL) {
348 PyErr_SetString(PyExc_TypeError,
349 "an integer is required");
350 return -1;
351 }
352 vv = (*nb->nb_int) (vv);
353 if (vv == NULL)
354 return -1;
355 do_decref = 1;
356 if (!PyLong_Check(vv)) {
357 Py_DECREF(vv);
358 PyErr_SetString(PyExc_TypeError,
359 "nb_int should return int object");
360 return -1;
361 }
362 }
Guido van Rossumddefaf32007-01-14 03:31:43 +0000363
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000364 res = -1;
365 v = (PyLongObject *)vv;
366 i = Py_SIZE(v);
Guido van Rossumf7531811998-05-26 14:33:37 +0000367
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000368 switch (i) {
369 case -1:
370 res = -(sdigit)v->ob_digit[0];
371 break;
372 case 0:
373 res = 0;
374 break;
375 case 1:
376 res = v->ob_digit[0];
377 break;
378 default:
379 sign = 1;
380 x = 0;
381 if (i < 0) {
382 sign = -1;
383 i = -(i);
384 }
385 while (--i >= 0) {
386 prev = x;
387 x = (x << PyLong_SHIFT) | v->ob_digit[i];
388 if ((x >> PyLong_SHIFT) != prev) {
389 *overflow = sign;
390 goto exit;
391 }
392 }
393 /* Haven't lost any bits, but casting to long requires extra
394 * care (see comment above).
395 */
396 if (x <= (unsigned long)LONG_MAX) {
397 res = (long)x * sign;
398 }
399 else if (sign < 0 && x == PY_ABS_LONG_MIN) {
400 res = LONG_MIN;
401 }
402 else {
403 *overflow = sign;
404 /* res is already set to -1 */
405 }
406 }
Georg Brandl61c31b02007-02-26 14:46:30 +0000407 exit:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000408 if (do_decref) {
409 Py_DECREF(vv);
410 }
411 return res;
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000412}
413
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000414long
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +0000415PyLong_AsLong(PyObject *obj)
416{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000417 int overflow;
418 long result = PyLong_AsLongAndOverflow(obj, &overflow);
419 if (overflow) {
420 /* XXX: could be cute and give a different
421 message for overflow == -1 */
422 PyErr_SetString(PyExc_OverflowError,
423 "Python int too large to convert to C long");
424 }
425 return result;
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +0000426}
427
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000428/* Get a Py_ssize_t from a long int object.
429 Returns -1 and sets an error condition if overflow occurs. */
430
431Py_ssize_t
Guido van Rossumddefaf32007-01-14 03:31:43 +0000432PyLong_AsSsize_t(PyObject *vv) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000433 register PyLongObject *v;
434 size_t x, prev;
435 Py_ssize_t i;
436 int sign;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000437
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000438 if (vv == NULL) {
439 PyErr_BadInternalCall();
440 return -1;
441 }
442 if (!PyLong_Check(vv)) {
443 PyErr_SetString(PyExc_TypeError, "an integer is required");
444 return -1;
445 }
Mark Dickinsond59b4162010-03-13 11:34:40 +0000446
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000447 v = (PyLongObject *)vv;
448 i = Py_SIZE(v);
449 switch (i) {
450 case -1: return -(sdigit)v->ob_digit[0];
451 case 0: return 0;
452 case 1: return v->ob_digit[0];
453 }
454 sign = 1;
455 x = 0;
456 if (i < 0) {
457 sign = -1;
458 i = -(i);
459 }
460 while (--i >= 0) {
461 prev = x;
462 x = (x << PyLong_SHIFT) | v->ob_digit[i];
463 if ((x >> PyLong_SHIFT) != prev)
464 goto overflow;
465 }
466 /* Haven't lost any bits, but casting to a signed type requires
467 * extra care (see comment above).
468 */
469 if (x <= (size_t)PY_SSIZE_T_MAX) {
470 return (Py_ssize_t)x * sign;
471 }
472 else if (sign < 0 && x == PY_ABS_SSIZE_T_MIN) {
473 return PY_SSIZE_T_MIN;
474 }
475 /* else overflow */
Martin v. Löwis18e16552006-02-15 17:27:45 +0000476
477 overflow:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000478 PyErr_SetString(PyExc_OverflowError,
479 "Python int too large to convert to C ssize_t");
480 return -1;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000481}
482
Guido van Rossumd8c80482002-08-13 00:24:58 +0000483/* Get a C unsigned long int from a long int object.
Guido van Rossum53756b11997-01-03 17:14:46 +0000484 Returns -1 and sets an error condition if overflow occurs. */
485
486unsigned long
Tim Peters9f688bf2000-07-07 15:53:28 +0000487PyLong_AsUnsignedLong(PyObject *vv)
Guido van Rossum53756b11997-01-03 17:14:46 +0000488{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000489 register PyLongObject *v;
490 unsigned long x, prev;
491 Py_ssize_t i;
Tim Peters5af4e6c2002-08-12 02:31:19 +0000492
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000493 if (vv == NULL) {
494 PyErr_BadInternalCall();
495 return (unsigned long)-1;
496 }
497 if (!PyLong_Check(vv)) {
498 PyErr_SetString(PyExc_TypeError, "an integer is required");
499 return (unsigned long)-1;
500 }
Mark Dickinsond59b4162010-03-13 11:34:40 +0000501
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000502 v = (PyLongObject *)vv;
503 i = Py_SIZE(v);
504 x = 0;
505 if (i < 0) {
506 PyErr_SetString(PyExc_OverflowError,
507 "can't convert negative value to unsigned int");
508 return (unsigned long) -1;
509 }
510 switch (i) {
511 case 0: return 0;
512 case 1: return v->ob_digit[0];
513 }
514 while (--i >= 0) {
515 prev = x;
516 x = (x << PyLong_SHIFT) | v->ob_digit[i];
517 if ((x >> PyLong_SHIFT) != prev) {
518 PyErr_SetString(PyExc_OverflowError,
519 "python int too large to convert to C unsigned long");
520 return (unsigned long) -1;
521 }
522 }
523 return x;
Guido van Rossumddefaf32007-01-14 03:31:43 +0000524}
525
526/* Get a C unsigned long int from a long int object.
527 Returns -1 and sets an error condition if overflow occurs. */
528
529size_t
530PyLong_AsSize_t(PyObject *vv)
531{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000532 register PyLongObject *v;
533 size_t x, prev;
534 Py_ssize_t i;
Guido van Rossumddefaf32007-01-14 03:31:43 +0000535
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000536 if (vv == NULL) {
537 PyErr_BadInternalCall();
538 return (size_t) -1;
539 }
540 if (!PyLong_Check(vv)) {
541 PyErr_SetString(PyExc_TypeError, "an integer is required");
542 return (size_t)-1;
543 }
Mark Dickinsond59b4162010-03-13 11:34:40 +0000544
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000545 v = (PyLongObject *)vv;
546 i = Py_SIZE(v);
547 x = 0;
548 if (i < 0) {
549 PyErr_SetString(PyExc_OverflowError,
550 "can't convert negative value to size_t");
551 return (size_t) -1;
552 }
553 switch (i) {
554 case 0: return 0;
555 case 1: return v->ob_digit[0];
556 }
557 while (--i >= 0) {
558 prev = x;
559 x = (x << PyLong_SHIFT) | v->ob_digit[i];
560 if ((x >> PyLong_SHIFT) != prev) {
561 PyErr_SetString(PyExc_OverflowError,
562 "Python int too large to convert to C size_t");
563 return (unsigned long) -1;
564 }
565 }
566 return x;
Guido van Rossum53756b11997-01-03 17:14:46 +0000567}
568
Thomas Hellera4ea6032003-04-17 18:55:45 +0000569/* Get a C unsigned long int from a long int object, ignoring the high bits.
570 Returns -1 and sets an error condition if an error occurs. */
571
Guido van Rossumddefaf32007-01-14 03:31:43 +0000572static unsigned long
573_PyLong_AsUnsignedLongMask(PyObject *vv)
Thomas Hellera4ea6032003-04-17 18:55:45 +0000574{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000575 register PyLongObject *v;
576 unsigned long x;
577 Py_ssize_t i;
578 int sign;
Thomas Hellera4ea6032003-04-17 18:55:45 +0000579
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000580 if (vv == NULL || !PyLong_Check(vv)) {
581 PyErr_BadInternalCall();
582 return (unsigned long) -1;
583 }
584 v = (PyLongObject *)vv;
585 i = Py_SIZE(v);
586 switch (i) {
587 case 0: return 0;
588 case 1: return v->ob_digit[0];
589 }
590 sign = 1;
591 x = 0;
592 if (i < 0) {
593 sign = -1;
594 i = -i;
595 }
596 while (--i >= 0) {
597 x = (x << PyLong_SHIFT) | v->ob_digit[i];
598 }
599 return x * sign;
Thomas Hellera4ea6032003-04-17 18:55:45 +0000600}
601
Guido van Rossumddefaf32007-01-14 03:31:43 +0000602unsigned long
603PyLong_AsUnsignedLongMask(register PyObject *op)
604{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000605 PyNumberMethods *nb;
606 PyLongObject *lo;
607 unsigned long val;
Guido van Rossumddefaf32007-01-14 03:31:43 +0000608
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000609 if (op && PyLong_Check(op))
610 return _PyLong_AsUnsignedLongMask(op);
Guido van Rossumddefaf32007-01-14 03:31:43 +0000611
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000612 if (op == NULL || (nb = op->ob_type->tp_as_number) == NULL ||
613 nb->nb_int == NULL) {
614 PyErr_SetString(PyExc_TypeError, "an integer is required");
615 return (unsigned long)-1;
616 }
Guido van Rossumddefaf32007-01-14 03:31:43 +0000617
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000618 lo = (PyLongObject*) (*nb->nb_int) (op);
619 if (lo == NULL)
620 return (unsigned long)-1;
621 if (PyLong_Check(lo)) {
622 val = _PyLong_AsUnsignedLongMask((PyObject *)lo);
623 Py_DECREF(lo);
624 if (PyErr_Occurred())
625 return (unsigned long)-1;
626 return val;
627 }
628 else
629 {
630 Py_DECREF(lo);
631 PyErr_SetString(PyExc_TypeError,
632 "nb_int should return int object");
633 return (unsigned long)-1;
634 }
Guido van Rossumddefaf32007-01-14 03:31:43 +0000635}
636
Tim Peters5b8132f2003-01-31 15:52:05 +0000637int
638_PyLong_Sign(PyObject *vv)
639{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000640 PyLongObject *v = (PyLongObject *)vv;
Tim Peters5b8132f2003-01-31 15:52:05 +0000641
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000642 assert(v != NULL);
643 assert(PyLong_Check(v));
Tim Peters5b8132f2003-01-31 15:52:05 +0000644
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000645 return Py_SIZE(v) == 0 ? 0 : (Py_SIZE(v) < 0 ? -1 : 1);
Tim Peters5b8132f2003-01-31 15:52:05 +0000646}
647
Tim Petersbaefd9e2003-01-28 20:37:45 +0000648size_t
649_PyLong_NumBits(PyObject *vv)
650{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000651 PyLongObject *v = (PyLongObject *)vv;
652 size_t result = 0;
653 Py_ssize_t ndigits;
Tim Petersbaefd9e2003-01-28 20:37:45 +0000654
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000655 assert(v != NULL);
656 assert(PyLong_Check(v));
657 ndigits = ABS(Py_SIZE(v));
658 assert(ndigits == 0 || v->ob_digit[ndigits - 1] != 0);
659 if (ndigits > 0) {
660 digit msd = v->ob_digit[ndigits - 1];
Tim Petersbaefd9e2003-01-28 20:37:45 +0000661
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000662 result = (ndigits - 1) * PyLong_SHIFT;
663 if (result / PyLong_SHIFT != (size_t)(ndigits - 1))
664 goto Overflow;
665 do {
666 ++result;
667 if (result == 0)
668 goto Overflow;
669 msd >>= 1;
670 } while (msd);
671 }
672 return result;
Tim Petersbaefd9e2003-01-28 20:37:45 +0000673
674Overflow:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000675 PyErr_SetString(PyExc_OverflowError, "int has too many bits "
676 "to express in a platform size_t");
677 return (size_t)-1;
Tim Petersbaefd9e2003-01-28 20:37:45 +0000678}
679
Tim Peters2a9b3672001-06-11 21:23:58 +0000680PyObject *
681_PyLong_FromByteArray(const unsigned char* bytes, size_t n,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000682 int little_endian, int is_signed)
Tim Peters2a9b3672001-06-11 21:23:58 +0000683{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000684 const unsigned char* pstartbyte;/* LSB of bytes */
685 int incr; /* direction to move pstartbyte */
686 const unsigned char* pendbyte; /* MSB of bytes */
687 size_t numsignificantbytes; /* number of bytes that matter */
688 Py_ssize_t ndigits; /* number of Python long digits */
689 PyLongObject* v; /* result */
690 Py_ssize_t idigit = 0; /* next free index in v->ob_digit */
Tim Peters2a9b3672001-06-11 21:23:58 +0000691
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000692 if (n == 0)
693 return PyLong_FromLong(0L);
Tim Peters2a9b3672001-06-11 21:23:58 +0000694
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000695 if (little_endian) {
696 pstartbyte = bytes;
697 pendbyte = bytes + n - 1;
698 incr = 1;
699 }
700 else {
701 pstartbyte = bytes + n - 1;
702 pendbyte = bytes;
703 incr = -1;
704 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000705
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000706 if (is_signed)
707 is_signed = *pendbyte >= 0x80;
Tim Peters2a9b3672001-06-11 21:23:58 +0000708
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000709 /* Compute numsignificantbytes. This consists of finding the most
710 significant byte. Leading 0 bytes are insignficant if the number
711 is positive, and leading 0xff bytes if negative. */
712 {
713 size_t i;
714 const unsigned char* p = pendbyte;
715 const int pincr = -incr; /* search MSB to LSB */
716 const unsigned char insignficant = is_signed ? 0xff : 0x00;
Tim Peters2a9b3672001-06-11 21:23:58 +0000717
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000718 for (i = 0; i < n; ++i, p += pincr) {
719 if (*p != insignficant)
720 break;
721 }
722 numsignificantbytes = n - i;
723 /* 2's-comp is a bit tricky here, e.g. 0xff00 == -0x0100, so
724 actually has 2 significant bytes. OTOH, 0xff0001 ==
725 -0x00ffff, so we wouldn't *need* to bump it there; but we
726 do for 0xffff = -0x0001. To be safe without bothering to
727 check every case, bump it regardless. */
728 if (is_signed && numsignificantbytes < n)
729 ++numsignificantbytes;
730 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000731
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000732 /* How many Python long digits do we need? We have
733 8*numsignificantbytes bits, and each Python long digit has
734 PyLong_SHIFT bits, so it's the ceiling of the quotient. */
735 /* catch overflow before it happens */
736 if (numsignificantbytes > (PY_SSIZE_T_MAX - PyLong_SHIFT) / 8) {
737 PyErr_SetString(PyExc_OverflowError,
738 "byte array too long to convert to int");
739 return NULL;
740 }
741 ndigits = (numsignificantbytes * 8 + PyLong_SHIFT - 1) / PyLong_SHIFT;
742 v = _PyLong_New(ndigits);
743 if (v == NULL)
744 return NULL;
Tim Peters2a9b3672001-06-11 21:23:58 +0000745
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000746 /* Copy the bits over. The tricky parts are computing 2's-comp on
747 the fly for signed numbers, and dealing with the mismatch between
748 8-bit bytes and (probably) 15-bit Python digits.*/
749 {
750 size_t i;
751 twodigits carry = 1; /* for 2's-comp calculation */
752 twodigits accum = 0; /* sliding register */
753 unsigned int accumbits = 0; /* number of bits in accum */
754 const unsigned char* p = pstartbyte;
Tim Peters2a9b3672001-06-11 21:23:58 +0000755
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000756 for (i = 0; i < numsignificantbytes; ++i, p += incr) {
757 twodigits thisbyte = *p;
758 /* Compute correction for 2's comp, if needed. */
759 if (is_signed) {
760 thisbyte = (0xff ^ thisbyte) + carry;
761 carry = thisbyte >> 8;
762 thisbyte &= 0xff;
763 }
764 /* Because we're going LSB to MSB, thisbyte is
765 more significant than what's already in accum,
766 so needs to be prepended to accum. */
767 accum |= (twodigits)thisbyte << accumbits;
768 accumbits += 8;
769 if (accumbits >= PyLong_SHIFT) {
770 /* There's enough to fill a Python digit. */
771 assert(idigit < ndigits);
772 v->ob_digit[idigit] = (digit)(accum &
773 PyLong_MASK);
774 ++idigit;
775 accum >>= PyLong_SHIFT;
776 accumbits -= PyLong_SHIFT;
777 assert(accumbits < PyLong_SHIFT);
778 }
779 }
780 assert(accumbits < PyLong_SHIFT);
781 if (accumbits) {
782 assert(idigit < ndigits);
783 v->ob_digit[idigit] = (digit)accum;
784 ++idigit;
785 }
786 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000787
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000788 Py_SIZE(v) = is_signed ? -idigit : idigit;
789 return (PyObject *)long_normalize(v);
Tim Peters2a9b3672001-06-11 21:23:58 +0000790}
791
792int
793_PyLong_AsByteArray(PyLongObject* v,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000794 unsigned char* bytes, size_t n,
795 int little_endian, int is_signed)
Tim Peters2a9b3672001-06-11 21:23:58 +0000796{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000797 Py_ssize_t i; /* index into v->ob_digit */
798 Py_ssize_t ndigits; /* |v->ob_size| */
799 twodigits accum; /* sliding register */
800 unsigned int accumbits; /* # bits in accum */
801 int do_twos_comp; /* store 2's-comp? is_signed and v < 0 */
802 digit carry; /* for computing 2's-comp */
803 size_t j; /* # bytes filled */
804 unsigned char* p; /* pointer to next byte in bytes */
805 int pincr; /* direction to move p */
Tim Peters2a9b3672001-06-11 21:23:58 +0000806
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000807 assert(v != NULL && PyLong_Check(v));
Tim Peters2a9b3672001-06-11 21:23:58 +0000808
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000809 if (Py_SIZE(v) < 0) {
810 ndigits = -(Py_SIZE(v));
811 if (!is_signed) {
812 PyErr_SetString(PyExc_OverflowError,
813 "can't convert negative int to unsigned");
814 return -1;
815 }
816 do_twos_comp = 1;
817 }
818 else {
819 ndigits = Py_SIZE(v);
820 do_twos_comp = 0;
821 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000822
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000823 if (little_endian) {
824 p = bytes;
825 pincr = 1;
826 }
827 else {
828 p = bytes + n - 1;
829 pincr = -1;
830 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000831
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000832 /* Copy over all the Python digits.
833 It's crucial that every Python digit except for the MSD contribute
834 exactly PyLong_SHIFT bits to the total, so first assert that the long is
835 normalized. */
836 assert(ndigits == 0 || v->ob_digit[ndigits - 1] != 0);
837 j = 0;
838 accum = 0;
839 accumbits = 0;
840 carry = do_twos_comp ? 1 : 0;
841 for (i = 0; i < ndigits; ++i) {
842 digit thisdigit = v->ob_digit[i];
843 if (do_twos_comp) {
844 thisdigit = (thisdigit ^ PyLong_MASK) + carry;
845 carry = thisdigit >> PyLong_SHIFT;
846 thisdigit &= PyLong_MASK;
847 }
848 /* Because we're going LSB to MSB, thisdigit is more
849 significant than what's already in accum, so needs to be
850 prepended to accum. */
851 accum |= (twodigits)thisdigit << accumbits;
Tim Peters8bc84b42001-06-12 19:17:03 +0000852
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000853 /* The most-significant digit may be (probably is) at least
854 partly empty. */
855 if (i == ndigits - 1) {
856 /* Count # of sign bits -- they needn't be stored,
857 * although for signed conversion we need later to
858 * make sure at least one sign bit gets stored. */
859 digit s = do_twos_comp ? thisdigit ^ PyLong_MASK :
860 thisdigit;
861 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
920Overflow:
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
Antoine Pitrouf95a1b32010-05-09 15:52:27 +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 }
1175 res = _PyLong_AsByteArray(
1176 (PyLongObject *)vv, (unsigned char *)&bytes,
1177 SIZEOF_LONG_LONG, IS_LITTLE_ENDIAN, 1);
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001178
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001179 /* Plan 9 can't handle PY_LONG_LONG in ? : expressions */
1180 if (res < 0)
1181 return (PY_LONG_LONG)-1;
1182 else
1183 return bytes;
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001184}
1185
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001186/* Get a C unsigned PY_LONG_LONG int from a long int object.
Tim Petersd1a7da62001-06-13 00:35:57 +00001187 Return -1 and set an error if overflow occurs. */
1188
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001189unsigned PY_LONG_LONG
Tim Peters9f688bf2000-07-07 15:53:28 +00001190PyLong_AsUnsignedLongLong(PyObject *vv)
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001191{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001192 PyLongObject *v;
1193 unsigned PY_LONG_LONG bytes;
1194 int one = 1;
1195 int res;
Tim Petersd1a7da62001-06-13 00:35:57 +00001196
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001197 if (vv == NULL || !PyLong_Check(vv)) {
1198 PyErr_BadInternalCall();
1199 return (unsigned PY_LONG_LONG)-1;
1200 }
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001201
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001202 v = (PyLongObject*)vv;
1203 switch(Py_SIZE(v)) {
1204 case 0: return 0;
1205 case 1: return v->ob_digit[0];
1206 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00001207
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001208 res = _PyLong_AsByteArray(
1209 (PyLongObject *)vv, (unsigned char *)&bytes,
1210 SIZEOF_LONG_LONG, IS_LITTLE_ENDIAN, 0);
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001211
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001212 /* Plan 9 can't handle PY_LONG_LONG in ? : expressions */
1213 if (res < 0)
1214 return (unsigned PY_LONG_LONG)res;
1215 else
1216 return bytes;
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001217}
Tim Petersd1a7da62001-06-13 00:35:57 +00001218
Thomas Hellera4ea6032003-04-17 18:55:45 +00001219/* Get a C unsigned long int from a long int object, ignoring the high bits.
1220 Returns -1 and sets an error condition if an error occurs. */
1221
Guido van Rossumddefaf32007-01-14 03:31:43 +00001222static unsigned PY_LONG_LONG
1223_PyLong_AsUnsignedLongLongMask(PyObject *vv)
Thomas Hellera4ea6032003-04-17 18:55:45 +00001224{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001225 register PyLongObject *v;
1226 unsigned PY_LONG_LONG x;
1227 Py_ssize_t i;
1228 int sign;
Thomas Hellera4ea6032003-04-17 18:55:45 +00001229
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001230 if (vv == NULL || !PyLong_Check(vv)) {
1231 PyErr_BadInternalCall();
1232 return (unsigned long) -1;
1233 }
1234 v = (PyLongObject *)vv;
1235 switch(Py_SIZE(v)) {
1236 case 0: return 0;
1237 case 1: return v->ob_digit[0];
1238 }
1239 i = Py_SIZE(v);
1240 sign = 1;
1241 x = 0;
1242 if (i < 0) {
1243 sign = -1;
1244 i = -i;
1245 }
1246 while (--i >= 0) {
1247 x = (x << PyLong_SHIFT) | v->ob_digit[i];
1248 }
1249 return x * sign;
Thomas Hellera4ea6032003-04-17 18:55:45 +00001250}
Guido van Rossumddefaf32007-01-14 03:31:43 +00001251
1252unsigned PY_LONG_LONG
1253PyLong_AsUnsignedLongLongMask(register PyObject *op)
1254{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001255 PyNumberMethods *nb;
1256 PyLongObject *lo;
1257 unsigned PY_LONG_LONG val;
Guido van Rossumddefaf32007-01-14 03:31:43 +00001258
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001259 if (op && PyLong_Check(op))
1260 return _PyLong_AsUnsignedLongLongMask(op);
Guido van Rossumddefaf32007-01-14 03:31:43 +00001261
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001262 if (op == NULL || (nb = op->ob_type->tp_as_number) == NULL ||
1263 nb->nb_int == NULL) {
1264 PyErr_SetString(PyExc_TypeError, "an integer is required");
1265 return (unsigned PY_LONG_LONG)-1;
1266 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00001267
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001268 lo = (PyLongObject*) (*nb->nb_int) (op);
1269 if (lo == NULL)
1270 return (unsigned PY_LONG_LONG)-1;
1271 if (PyLong_Check(lo)) {
1272 val = _PyLong_AsUnsignedLongLongMask((PyObject *)lo);
1273 Py_DECREF(lo);
1274 if (PyErr_Occurred())
1275 return (unsigned PY_LONG_LONG)-1;
1276 return val;
1277 }
1278 else
1279 {
1280 Py_DECREF(lo);
1281 PyErr_SetString(PyExc_TypeError,
1282 "nb_int should return int object");
1283 return (unsigned PY_LONG_LONG)-1;
1284 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00001285}
Tim Petersd1a7da62001-06-13 00:35:57 +00001286#undef IS_LITTLE_ENDIAN
1287
Mark Dickinson93f562c2010-01-30 10:30:15 +00001288/* Get a C long long int from a Python long or Python int object.
1289 On overflow, returns -1 and sets *overflow to 1 or -1 depending
1290 on the sign of the result. Otherwise *overflow is 0.
1291
1292 For other errors (e.g., type error), returns -1 and sets an error
1293 condition.
1294*/
1295
1296PY_LONG_LONG
1297PyLong_AsLongLongAndOverflow(PyObject *vv, int *overflow)
1298{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001299 /* This version by Tim Peters */
1300 register PyLongObject *v;
1301 unsigned PY_LONG_LONG x, prev;
1302 PY_LONG_LONG res;
1303 Py_ssize_t i;
1304 int sign;
1305 int do_decref = 0; /* if nb_int was called */
Mark Dickinson93f562c2010-01-30 10:30:15 +00001306
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001307 *overflow = 0;
1308 if (vv == NULL) {
1309 PyErr_BadInternalCall();
1310 return -1;
1311 }
Mark Dickinson93f562c2010-01-30 10:30:15 +00001312
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001313 if (!PyLong_Check(vv)) {
1314 PyNumberMethods *nb;
1315 nb = vv->ob_type->tp_as_number;
1316 if (nb == NULL || nb->nb_int == NULL) {
1317 PyErr_SetString(PyExc_TypeError,
1318 "an integer is required");
1319 return -1;
1320 }
1321 vv = (*nb->nb_int) (vv);
1322 if (vv == NULL)
1323 return -1;
1324 do_decref = 1;
1325 if (!PyLong_Check(vv)) {
1326 Py_DECREF(vv);
1327 PyErr_SetString(PyExc_TypeError,
1328 "nb_int should return int object");
1329 return -1;
1330 }
1331 }
Mark Dickinson93f562c2010-01-30 10:30:15 +00001332
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001333 res = -1;
1334 v = (PyLongObject *)vv;
1335 i = Py_SIZE(v);
Mark Dickinson93f562c2010-01-30 10:30:15 +00001336
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001337 switch (i) {
1338 case -1:
1339 res = -(sdigit)v->ob_digit[0];
1340 break;
1341 case 0:
1342 res = 0;
1343 break;
1344 case 1:
1345 res = v->ob_digit[0];
1346 break;
1347 default:
1348 sign = 1;
1349 x = 0;
1350 if (i < 0) {
1351 sign = -1;
1352 i = -(i);
1353 }
1354 while (--i >= 0) {
1355 prev = x;
1356 x = (x << PyLong_SHIFT) + v->ob_digit[i];
1357 if ((x >> PyLong_SHIFT) != prev) {
1358 *overflow = sign;
1359 goto exit;
1360 }
1361 }
1362 /* Haven't lost any bits, but casting to long requires extra
1363 * care (see comment above).
1364 */
1365 if (x <= (unsigned PY_LONG_LONG)PY_LLONG_MAX) {
1366 res = (PY_LONG_LONG)x * sign;
1367 }
1368 else if (sign < 0 && x == PY_ABS_LLONG_MIN) {
1369 res = PY_LLONG_MIN;
1370 }
1371 else {
1372 *overflow = sign;
1373 /* res is already set to -1 */
1374 }
1375 }
Mark Dickinson93f562c2010-01-30 10:30:15 +00001376 exit:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001377 if (do_decref) {
1378 Py_DECREF(vv);
1379 }
1380 return res;
Mark Dickinson93f562c2010-01-30 10:30:15 +00001381}
1382
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001383#endif /* HAVE_LONG_LONG */
1384
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00001385#define CHECK_BINOP(v,w) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001386 if (!PyLong_Check(v) || !PyLong_Check(w)) { \
1387 Py_INCREF(Py_NotImplemented); \
1388 return Py_NotImplemented; \
1389 }
Neil Schemenauerba872e22001-01-04 01:46:03 +00001390
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001391/* bits_in_digit(d) returns the unique integer k such that 2**(k-1) <= d <
1392 2**k if d is nonzero, else 0. */
1393
1394static const unsigned char BitLengthTable[32] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001395 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
1396 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001397};
1398
1399static int
1400bits_in_digit(digit d)
1401{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001402 int d_bits = 0;
1403 while (d >= 32) {
1404 d_bits += 6;
1405 d >>= 6;
1406 }
1407 d_bits += (int)BitLengthTable[d];
1408 return d_bits;
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001409}
1410
Tim Peters877a2122002-08-12 05:09:36 +00001411/* x[0:m] and y[0:n] are digit vectors, LSD first, m >= n required. x[0:n]
1412 * is modified in place, by adding y to it. Carries are propagated as far as
1413 * x[m-1], and the remaining carry (0 or 1) is returned.
1414 */
1415static digit
Martin v. Löwis18e16552006-02-15 17:27:45 +00001416v_iadd(digit *x, Py_ssize_t m, digit *y, Py_ssize_t n)
Tim Peters877a2122002-08-12 05:09:36 +00001417{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001418 Py_ssize_t i;
1419 digit carry = 0;
Tim Peters877a2122002-08-12 05:09:36 +00001420
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001421 assert(m >= n);
1422 for (i = 0; i < n; ++i) {
1423 carry += x[i] + y[i];
1424 x[i] = carry & PyLong_MASK;
1425 carry >>= PyLong_SHIFT;
1426 assert((carry & 1) == carry);
1427 }
1428 for (; carry && i < m; ++i) {
1429 carry += x[i];
1430 x[i] = carry & PyLong_MASK;
1431 carry >>= PyLong_SHIFT;
1432 assert((carry & 1) == carry);
1433 }
1434 return carry;
Tim Peters877a2122002-08-12 05:09:36 +00001435}
1436
1437/* x[0:m] and y[0:n] are digit vectors, LSD first, m >= n required. x[0:n]
1438 * is modified in place, by subtracting y from it. Borrows are propagated as
1439 * far as x[m-1], and the remaining borrow (0 or 1) is returned.
1440 */
1441static digit
Martin v. Löwis18e16552006-02-15 17:27:45 +00001442v_isub(digit *x, Py_ssize_t m, digit *y, Py_ssize_t n)
Tim Peters877a2122002-08-12 05:09:36 +00001443{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001444 Py_ssize_t i;
1445 digit borrow = 0;
Tim Peters877a2122002-08-12 05:09:36 +00001446
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001447 assert(m >= n);
1448 for (i = 0; i < n; ++i) {
1449 borrow = x[i] - y[i] - borrow;
1450 x[i] = borrow & PyLong_MASK;
1451 borrow >>= PyLong_SHIFT;
1452 borrow &= 1; /* keep only 1 sign bit */
1453 }
1454 for (; borrow && i < m; ++i) {
1455 borrow = x[i] - borrow;
1456 x[i] = borrow & PyLong_MASK;
1457 borrow >>= PyLong_SHIFT;
1458 borrow &= 1;
1459 }
1460 return borrow;
Tim Peters877a2122002-08-12 05:09:36 +00001461}
Neil Schemenauerba872e22001-01-04 01:46:03 +00001462
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001463/* Shift digit vector a[0:m] d bits left, with 0 <= d < PyLong_SHIFT. Put
1464 * result in z[0:m], and return the d bits shifted out of the top.
1465 */
1466static digit
1467v_lshift(digit *z, digit *a, Py_ssize_t m, int d)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001468{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001469 Py_ssize_t i;
1470 digit carry = 0;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001471
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001472 assert(0 <= d && d < PyLong_SHIFT);
1473 for (i=0; i < m; i++) {
1474 twodigits acc = (twodigits)a[i] << d | carry;
1475 z[i] = (digit)acc & PyLong_MASK;
1476 carry = (digit)(acc >> PyLong_SHIFT);
1477 }
1478 return carry;
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001479}
1480
1481/* Shift digit vector a[0:m] d bits right, with 0 <= d < PyLong_SHIFT. Put
1482 * result in z[0:m], and return the d bits shifted out of the bottom.
1483 */
1484static digit
1485v_rshift(digit *z, digit *a, Py_ssize_t m, int d)
1486{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001487 Py_ssize_t i;
1488 digit carry = 0;
1489 digit mask = ((digit)1 << d) - 1U;
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001490
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001491 assert(0 <= d && d < PyLong_SHIFT);
1492 for (i=m; i-- > 0;) {
1493 twodigits acc = (twodigits)carry << PyLong_SHIFT | a[i];
1494 carry = (digit)acc & mask;
1495 z[i] = (digit)(acc >> d);
1496 }
1497 return carry;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001498}
1499
Tim Peters212e6142001-07-14 12:23:19 +00001500/* Divide long pin, w/ size digits, by non-zero digit n, storing quotient
1501 in pout, and returning the remainder. pin and pout point at the LSD.
1502 It's OK for pin == pout on entry, which saves oodles of mallocs/frees in
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001503 _PyLong_Format, but that should be done with great care since longs are
Tim Peters212e6142001-07-14 12:23:19 +00001504 immutable. */
1505
1506static digit
Martin v. Löwis18e16552006-02-15 17:27:45 +00001507inplace_divrem1(digit *pout, digit *pin, Py_ssize_t size, digit n)
Tim Peters212e6142001-07-14 12:23:19 +00001508{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001509 twodigits rem = 0;
Tim Peters212e6142001-07-14 12:23:19 +00001510
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001511 assert(n > 0 && n <= PyLong_MASK);
1512 pin += size;
1513 pout += size;
1514 while (--size >= 0) {
1515 digit hi;
1516 rem = (rem << PyLong_SHIFT) | *--pin;
1517 *--pout = hi = (digit)(rem / n);
1518 rem -= (twodigits)hi * n;
1519 }
1520 return (digit)rem;
Tim Peters212e6142001-07-14 12:23:19 +00001521}
1522
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001523/* Divide a long integer by a digit, returning both the quotient
1524 (as function result) and the remainder (through *prem).
1525 The sign of a is ignored; n should not be zero. */
1526
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001527static PyLongObject *
Tim Peters212e6142001-07-14 12:23:19 +00001528divrem1(PyLongObject *a, digit n, digit *prem)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001529{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001530 const Py_ssize_t size = ABS(Py_SIZE(a));
1531 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001532
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001533 assert(n > 0 && n <= PyLong_MASK);
1534 z = _PyLong_New(size);
1535 if (z == NULL)
1536 return NULL;
1537 *prem = inplace_divrem1(z->ob_digit, a->ob_digit, size, n);
1538 return long_normalize(z);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001539}
1540
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001541/* Convert a long integer to a base 10 string. Returns a new non-shared
1542 string. (Return value is non-shared so that callers can modify the
1543 returned value if necessary.) */
1544
1545static PyObject *
1546long_to_decimal_string(PyObject *aa)
1547{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001548 PyLongObject *scratch, *a;
1549 PyObject *str;
1550 Py_ssize_t size, strlen, size_a, i, j;
1551 digit *pout, *pin, rem, tenpow;
1552 Py_UNICODE *p;
1553 int negative;
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001554
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001555 a = (PyLongObject *)aa;
1556 if (a == NULL || !PyLong_Check(a)) {
1557 PyErr_BadInternalCall();
1558 return NULL;
1559 }
1560 size_a = ABS(Py_SIZE(a));
1561 negative = Py_SIZE(a) < 0;
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001562
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001563 /* quick and dirty upper bound for the number of digits
1564 required to express a in base _PyLong_DECIMAL_BASE:
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001565
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001566 #digits = 1 + floor(log2(a) / log2(_PyLong_DECIMAL_BASE))
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001567
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001568 But log2(a) < size_a * PyLong_SHIFT, and
1569 log2(_PyLong_DECIMAL_BASE) = log2(10) * _PyLong_DECIMAL_SHIFT
1570 > 3 * _PyLong_DECIMAL_SHIFT
1571 */
1572 if (size_a > PY_SSIZE_T_MAX / PyLong_SHIFT) {
1573 PyErr_SetString(PyExc_OverflowError,
1574 "long is too large to format");
1575 return NULL;
1576 }
1577 /* the expression size_a * PyLong_SHIFT is now safe from overflow */
1578 size = 1 + size_a * PyLong_SHIFT / (3 * _PyLong_DECIMAL_SHIFT);
1579 scratch = _PyLong_New(size);
1580 if (scratch == NULL)
1581 return NULL;
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001582
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001583 /* convert array of base _PyLong_BASE digits in pin to an array of
1584 base _PyLong_DECIMAL_BASE digits in pout, following Knuth (TAOCP,
1585 Volume 2 (3rd edn), section 4.4, Method 1b). */
1586 pin = a->ob_digit;
1587 pout = scratch->ob_digit;
1588 size = 0;
1589 for (i = size_a; --i >= 0; ) {
1590 digit hi = pin[i];
1591 for (j = 0; j < size; j++) {
1592 twodigits z = (twodigits)pout[j] << PyLong_SHIFT | hi;
1593 hi = (digit)(z / _PyLong_DECIMAL_BASE);
1594 pout[j] = (digit)(z - (twodigits)hi *
1595 _PyLong_DECIMAL_BASE);
1596 }
1597 while (hi) {
1598 pout[size++] = hi % _PyLong_DECIMAL_BASE;
1599 hi /= _PyLong_DECIMAL_BASE;
1600 }
1601 /* check for keyboard interrupt */
1602 SIGCHECK({
1603 Py_DECREF(scratch);
1604 return NULL;
1605 })
1606 }
1607 /* pout should have at least one digit, so that the case when a = 0
1608 works correctly */
1609 if (size == 0)
1610 pout[size++] = 0;
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001611
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001612 /* calculate exact length of output string, and allocate */
1613 strlen = negative + 1 + (size - 1) * _PyLong_DECIMAL_SHIFT;
1614 tenpow = 10;
1615 rem = pout[size-1];
1616 while (rem >= tenpow) {
1617 tenpow *= 10;
1618 strlen++;
1619 }
1620 str = PyUnicode_FromUnicode(NULL, strlen);
1621 if (str == NULL) {
1622 Py_DECREF(scratch);
1623 return NULL;
1624 }
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001625
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001626 /* fill the string right-to-left */
1627 p = PyUnicode_AS_UNICODE(str) + strlen;
1628 *p = '\0';
1629 /* pout[0] through pout[size-2] contribute exactly
1630 _PyLong_DECIMAL_SHIFT digits each */
1631 for (i=0; i < size - 1; i++) {
1632 rem = pout[i];
1633 for (j = 0; j < _PyLong_DECIMAL_SHIFT; j++) {
1634 *--p = '0' + rem % 10;
1635 rem /= 10;
1636 }
1637 }
1638 /* pout[size-1]: always produce at least one decimal digit */
1639 rem = pout[i];
1640 do {
1641 *--p = '0' + rem % 10;
1642 rem /= 10;
1643 } while (rem != 0);
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001644
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001645 /* and sign */
1646 if (negative)
1647 *--p = '-';
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001648
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001649 /* check we've counted correctly */
1650 assert(p == PyUnicode_AS_UNICODE(str));
1651 Py_DECREF(scratch);
1652 return (PyObject *)str;
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001653}
1654
Mark Dickinsoncd068122009-09-18 14:53:08 +00001655/* Convert a long int object to a string, using a given conversion base,
1656 which should be one of 2, 8, 10 or 16. Return a string object.
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001657 If base is 2, 8 or 16, add the proper prefix '0b', '0o' or '0x'. */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001658
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001659PyObject *
1660_PyLong_Format(PyObject *aa, int base)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001661{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001662 register PyLongObject *a = (PyLongObject *)aa;
1663 PyObject *str;
1664 Py_ssize_t i, sz;
1665 Py_ssize_t size_a;
1666 Py_UNICODE *p, sign = '\0';
1667 int bits;
Guido van Rossume32e0141992-01-19 16:31:05 +00001668
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001669 assert(base == 2 || base == 8 || base == 10 || base == 16);
1670 if (base == 10)
1671 return long_to_decimal_string((PyObject *)a);
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001672
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001673 if (a == NULL || !PyLong_Check(a)) {
1674 PyErr_BadInternalCall();
1675 return NULL;
1676 }
1677 size_a = ABS(Py_SIZE(a));
Tim Peters5af4e6c2002-08-12 02:31:19 +00001678
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001679 /* Compute a rough upper bound for the length of the string */
1680 switch (base) {
1681 case 16:
1682 bits = 4;
1683 break;
1684 case 8:
1685 bits = 3;
1686 break;
1687 case 2:
1688 bits = 1;
1689 break;
1690 default:
1691 assert(0); /* shouldn't ever get here */
1692 bits = 0; /* to silence gcc warning */
1693 }
1694 /* compute length of output string: allow 2 characters for prefix and
1695 1 for possible '-' sign. */
1696 if (size_a > (PY_SSIZE_T_MAX - 3) / PyLong_SHIFT) {
1697 PyErr_SetString(PyExc_OverflowError,
1698 "int is too large to format");
1699 return NULL;
1700 }
1701 /* now size_a * PyLong_SHIFT + 3 <= PY_SSIZE_T_MAX, so the RHS below
1702 is safe from overflow */
1703 sz = 3 + (size_a * PyLong_SHIFT + (bits - 1)) / bits;
1704 assert(sz >= 0);
1705 str = PyUnicode_FromUnicode(NULL, sz);
1706 if (str == NULL)
1707 return NULL;
1708 p = PyUnicode_AS_UNICODE(str) + sz;
1709 *p = '\0';
1710 if (Py_SIZE(a) < 0)
1711 sign = '-';
Tim Peters5af4e6c2002-08-12 02:31:19 +00001712
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001713 if (Py_SIZE(a) == 0) {
1714 *--p = '0';
1715 }
1716 else {
1717 /* JRH: special case for power-of-2 bases */
1718 twodigits accum = 0;
1719 int accumbits = 0; /* # of bits in accum */
1720 for (i = 0; i < size_a; ++i) {
1721 accum |= (twodigits)a->ob_digit[i] << accumbits;
1722 accumbits += PyLong_SHIFT;
1723 assert(accumbits >= bits);
1724 do {
1725 Py_UNICODE cdigit;
1726 cdigit = (Py_UNICODE)(accum & (base - 1));
1727 cdigit += (cdigit < 10) ? '0' : 'a'-10;
1728 assert(p > PyUnicode_AS_UNICODE(str));
1729 *--p = cdigit;
1730 accumbits -= bits;
1731 accum >>= bits;
1732 } while (i < size_a-1 ? accumbits >= bits : accum > 0);
1733 }
1734 }
Mark Dickinson8accd6b2009-09-17 19:39:12 +00001735
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001736 if (base == 16)
1737 *--p = 'x';
1738 else if (base == 8)
1739 *--p = 'o';
1740 else /* (base == 2) */
1741 *--p = 'b';
1742 *--p = '0';
1743 if (sign)
1744 *--p = sign;
1745 if (p != PyUnicode_AS_UNICODE(str)) {
1746 Py_UNICODE *q = PyUnicode_AS_UNICODE(str);
1747 assert(p > q);
1748 do {
1749 } while ((*q++ = *p++) != '\0');
1750 q--;
1751 if (PyUnicode_Resize(&str,(Py_ssize_t) (q -
1752 PyUnicode_AS_UNICODE(str)))) {
1753 Py_DECREF(str);
1754 return NULL;
1755 }
1756 }
1757 return (PyObject *)str;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001758}
1759
Thomas Wouters477c8d52006-05-27 19:21:47 +00001760/* Table of digit values for 8-bit string -> integer conversion.
1761 * '0' maps to 0, ..., '9' maps to 9.
1762 * 'a' and 'A' map to 10, ..., 'z' and 'Z' map to 35.
1763 * All other indices map to 37.
1764 * Note that when converting a base B string, a char c is a legitimate
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00001765 * base B digit iff _PyLong_DigitValue[Py_CHARPyLong_MASK(c)] < B.
Thomas Wouters477c8d52006-05-27 19:21:47 +00001766 */
Raymond Hettinger35631532009-01-09 03:58:09 +00001767unsigned char _PyLong_DigitValue[256] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001768 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1769 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1770 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1771 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 37, 37, 37, 37, 37, 37,
1772 37, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1773 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 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, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1777 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 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,
Thomas Wouters477c8d52006-05-27 19:21:47 +00001784};
1785
1786/* *str points to the first digit in a string of base `base` digits. base
Tim Petersbf2674b2003-02-02 07:51:32 +00001787 * is a power of 2 (2, 4, 8, 16, or 32). *str is set to point to the first
1788 * non-digit (which may be *str!). A normalized long is returned.
1789 * The point to this routine is that it takes time linear in the number of
1790 * string characters.
1791 */
1792static PyLongObject *
1793long_from_binary_base(char **str, int base)
1794{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001795 char *p = *str;
1796 char *start = p;
1797 int bits_per_char;
1798 Py_ssize_t n;
1799 PyLongObject *z;
1800 twodigits accum;
1801 int bits_in_accum;
1802 digit *pdigit;
Tim Petersbf2674b2003-02-02 07:51:32 +00001803
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001804 assert(base >= 2 && base <= 32 && (base & (base - 1)) == 0);
1805 n = base;
1806 for (bits_per_char = -1; n; ++bits_per_char)
1807 n >>= 1;
1808 /* n <- total # of bits needed, while setting p to end-of-string */
1809 while (_PyLong_DigitValue[Py_CHARMASK(*p)] < base)
1810 ++p;
1811 *str = p;
1812 /* n <- # of Python digits needed, = ceiling(n/PyLong_SHIFT). */
1813 n = (p - start) * bits_per_char + PyLong_SHIFT - 1;
1814 if (n / bits_per_char < p - start) {
1815 PyErr_SetString(PyExc_ValueError,
1816 "int string too large to convert");
1817 return NULL;
1818 }
1819 n = n / PyLong_SHIFT;
1820 z = _PyLong_New(n);
1821 if (z == NULL)
1822 return NULL;
1823 /* Read string from right, and fill in long from left; i.e.,
1824 * from least to most significant in both.
1825 */
1826 accum = 0;
1827 bits_in_accum = 0;
1828 pdigit = z->ob_digit;
1829 while (--p >= start) {
1830 int k = (int)_PyLong_DigitValue[Py_CHARMASK(*p)];
1831 assert(k >= 0 && k < base);
1832 accum |= (twodigits)k << bits_in_accum;
1833 bits_in_accum += bits_per_char;
1834 if (bits_in_accum >= PyLong_SHIFT) {
1835 *pdigit++ = (digit)(accum & PyLong_MASK);
1836 assert(pdigit - z->ob_digit <= n);
1837 accum >>= PyLong_SHIFT;
1838 bits_in_accum -= PyLong_SHIFT;
1839 assert(bits_in_accum < PyLong_SHIFT);
1840 }
1841 }
1842 if (bits_in_accum) {
1843 assert(bits_in_accum <= PyLong_SHIFT);
1844 *pdigit++ = (digit)accum;
1845 assert(pdigit - z->ob_digit <= n);
1846 }
1847 while (pdigit - z->ob_digit < n)
1848 *pdigit++ = 0;
1849 return long_normalize(z);
Tim Petersbf2674b2003-02-02 07:51:32 +00001850}
1851
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001852PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00001853PyLong_FromString(char *str, char **pend, int base)
Guido van Rossumeb1fafc1994-08-29 12:47:19 +00001854{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001855 int sign = 1, error_if_nonzero = 0;
1856 char *start, *orig_str = str;
1857 PyLongObject *z = NULL;
1858 PyObject *strobj;
1859 Py_ssize_t slen;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001860
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001861 if ((base != 0 && base < 2) || base > 36) {
1862 PyErr_SetString(PyExc_ValueError,
1863 "int() arg 2 must be >= 2 and <= 36");
1864 return NULL;
1865 }
1866 while (*str != '\0' && isspace(Py_CHARMASK(*str)))
1867 str++;
1868 if (*str == '+')
1869 ++str;
1870 else if (*str == '-') {
1871 ++str;
1872 sign = -1;
1873 }
1874 if (base == 0) {
1875 if (str[0] != '0')
1876 base = 10;
1877 else if (str[1] == 'x' || str[1] == 'X')
1878 base = 16;
1879 else if (str[1] == 'o' || str[1] == 'O')
1880 base = 8;
1881 else if (str[1] == 'b' || str[1] == 'B')
1882 base = 2;
1883 else {
1884 /* "old" (C-style) octal literal, now invalid.
1885 it might still be zero though */
1886 error_if_nonzero = 1;
1887 base = 10;
1888 }
1889 }
1890 if (str[0] == '0' &&
1891 ((base == 16 && (str[1] == 'x' || str[1] == 'X')) ||
1892 (base == 8 && (str[1] == 'o' || str[1] == 'O')) ||
1893 (base == 2 && (str[1] == 'b' || str[1] == 'B'))))
1894 str += 2;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001895
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001896 start = str;
1897 if ((base & (base - 1)) == 0)
1898 z = long_from_binary_base(&str, base);
1899 else {
Thomas Wouters477c8d52006-05-27 19:21:47 +00001900/***
1901Binary bases can be converted in time linear in the number of digits, because
1902Python's representation base is binary. Other bases (including decimal!) use
1903the simple quadratic-time algorithm below, complicated by some speed tricks.
Tim Peters5af4e6c2002-08-12 02:31:19 +00001904
Thomas Wouters477c8d52006-05-27 19:21:47 +00001905First some math: the largest integer that can be expressed in N base-B digits
1906is B**N-1. Consequently, if we have an N-digit input in base B, the worst-
1907case number of Python digits needed to hold it is the smallest integer n s.t.
1908
1909 BASE**n-1 >= B**N-1 [or, adding 1 to both sides]
1910 BASE**n >= B**N [taking logs to base BASE]
1911 n >= log(B**N)/log(BASE) = N * log(B)/log(BASE)
1912
1913The static array log_base_BASE[base] == log(base)/log(BASE) so we can compute
1914this quickly. A Python long with that much space is reserved near the start,
1915and the result is computed into it.
1916
1917The input string is actually treated as being in base base**i (i.e., i digits
1918are processed at a time), where two more static arrays hold:
1919
1920 convwidth_base[base] = the largest integer i such that base**i <= BASE
1921 convmultmax_base[base] = base ** convwidth_base[base]
1922
1923The first of these is the largest i such that i consecutive input digits
1924must fit in a single Python digit. The second is effectively the input
1925base we're really using.
1926
1927Viewing the input as a sequence <c0, c1, ..., c_n-1> of digits in base
1928convmultmax_base[base], the result is "simply"
1929
1930 (((c0*B + c1)*B + c2)*B + c3)*B + ... ))) + c_n-1
1931
1932where B = convmultmax_base[base].
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001933
1934Error analysis: as above, the number of Python digits `n` needed is worst-
1935case
1936
1937 n >= N * log(B)/log(BASE)
1938
1939where `N` is the number of input digits in base `B`. This is computed via
1940
1941 size_z = (Py_ssize_t)((scan - str) * log_base_BASE[base]) + 1;
1942
1943below. Two numeric concerns are how much space this can waste, and whether
1944the computed result can be too small. To be concrete, assume BASE = 2**15,
1945which is the default (and it's unlikely anyone changes that).
1946
1947Waste isn't a problem: provided the first input digit isn't 0, the difference
1948between the worst-case input with N digits and the smallest input with N
1949digits is about a factor of B, but B is small compared to BASE so at most
1950one allocated Python digit can remain unused on that count. If
1951N*log(B)/log(BASE) is mathematically an exact integer, then truncating that
1952and adding 1 returns a result 1 larger than necessary. However, that can't
1953happen: whenever B is a power of 2, long_from_binary_base() is called
1954instead, and it's impossible for B**i to be an integer power of 2**15 when
1955B is not a power of 2 (i.e., it's impossible for N*log(B)/log(BASE) to be
1956an exact integer when B is not a power of 2, since B**i has a prime factor
1957other than 2 in that case, but (2**15)**j's only prime factor is 2).
1958
1959The computed result can be too small if the true value of N*log(B)/log(BASE)
1960is a little bit larger than an exact integer, but due to roundoff errors (in
1961computing log(B), log(BASE), their quotient, and/or multiplying that by N)
1962yields a numeric result a little less than that integer. Unfortunately, "how
1963close can a transcendental function get to an integer over some range?"
1964questions are generally theoretically intractable. Computer analysis via
1965continued fractions is practical: expand log(B)/log(BASE) via continued
1966fractions, giving a sequence i/j of "the best" rational approximations. Then
1967j*log(B)/log(BASE) is approximately equal to (the integer) i. This shows that
1968we can get very close to being in trouble, but very rarely. For example,
196976573 is a denominator in one of the continued-fraction approximations to
1970log(10)/log(2**15), and indeed:
1971
1972 >>> log(10)/log(2**15)*76573
1973 16958.000000654003
1974
1975is very close to an integer. If we were working with IEEE single-precision,
1976rounding errors could kill us. Finding worst cases in IEEE double-precision
1977requires better-than-double-precision log() functions, and Tim didn't bother.
1978Instead the code checks to see whether the allocated space is enough as each
1979new Python digit is added, and copies the whole thing to a larger long if not.
1980This should happen extremely rarely, and in fact I don't have a test case
1981that triggers it(!). Instead the code was tested by artificially allocating
1982just 1 digit at the start, so that the copying code was exercised for every
1983digit beyond the first.
Thomas Wouters477c8d52006-05-27 19:21:47 +00001984***/
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001985 register twodigits c; /* current input character */
1986 Py_ssize_t size_z;
1987 int i;
1988 int convwidth;
1989 twodigits convmultmax, convmult;
1990 digit *pz, *pzstop;
1991 char* scan;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001992
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001993 static double log_base_BASE[37] = {0.0e0,};
1994 static int convwidth_base[37] = {0,};
1995 static twodigits convmultmax_base[37] = {0,};
Thomas Wouters477c8d52006-05-27 19:21:47 +00001996
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001997 if (log_base_BASE[base] == 0.0) {
1998 twodigits convmax = base;
1999 int i = 1;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002000
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002001 log_base_BASE[base] = log((double)base) /
2002 log((double)PyLong_BASE);
2003 for (;;) {
2004 twodigits next = convmax * base;
2005 if (next > PyLong_BASE)
2006 break;
2007 convmax = next;
2008 ++i;
2009 }
2010 convmultmax_base[base] = convmax;
2011 assert(i > 0);
2012 convwidth_base[base] = i;
2013 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00002014
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002015 /* Find length of the string of numeric characters. */
2016 scan = str;
2017 while (_PyLong_DigitValue[Py_CHARMASK(*scan)] < base)
2018 ++scan;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002019
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002020 /* Create a long object that can contain the largest possible
2021 * integer with this base and length. Note that there's no
2022 * need to initialize z->ob_digit -- no slot is read up before
2023 * being stored into.
2024 */
2025 size_z = (Py_ssize_t)((scan - str) * log_base_BASE[base]) + 1;
2026 /* Uncomment next line to test exceedingly rare copy code */
2027 /* size_z = 1; */
2028 assert(size_z > 0);
2029 z = _PyLong_New(size_z);
2030 if (z == NULL)
2031 return NULL;
2032 Py_SIZE(z) = 0;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002033
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002034 /* `convwidth` consecutive input digits are treated as a single
2035 * digit in base `convmultmax`.
2036 */
2037 convwidth = convwidth_base[base];
2038 convmultmax = convmultmax_base[base];
Thomas Wouters477c8d52006-05-27 19:21:47 +00002039
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002040 /* Work ;-) */
2041 while (str < scan) {
2042 /* grab up to convwidth digits from the input string */
2043 c = (digit)_PyLong_DigitValue[Py_CHARMASK(*str++)];
2044 for (i = 1; i < convwidth && str != scan; ++i, ++str) {
2045 c = (twodigits)(c * base +
2046 (int)_PyLong_DigitValue[Py_CHARMASK(*str)]);
2047 assert(c < PyLong_BASE);
2048 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00002049
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002050 convmult = convmultmax;
2051 /* Calculate the shift only if we couldn't get
2052 * convwidth digits.
2053 */
2054 if (i != convwidth) {
2055 convmult = base;
2056 for ( ; i > 1; --i)
2057 convmult *= base;
2058 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00002059
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002060 /* Multiply z by convmult, and add c. */
2061 pz = z->ob_digit;
2062 pzstop = pz + Py_SIZE(z);
2063 for (; pz < pzstop; ++pz) {
2064 c += (twodigits)*pz * convmult;
2065 *pz = (digit)(c & PyLong_MASK);
2066 c >>= PyLong_SHIFT;
2067 }
2068 /* carry off the current end? */
2069 if (c) {
2070 assert(c < PyLong_BASE);
2071 if (Py_SIZE(z) < size_z) {
2072 *pz = (digit)c;
2073 ++Py_SIZE(z);
2074 }
2075 else {
2076 PyLongObject *tmp;
2077 /* Extremely rare. Get more space. */
2078 assert(Py_SIZE(z) == size_z);
2079 tmp = _PyLong_New(size_z + 1);
2080 if (tmp == NULL) {
2081 Py_DECREF(z);
2082 return NULL;
2083 }
2084 memcpy(tmp->ob_digit,
2085 z->ob_digit,
2086 sizeof(digit) * size_z);
2087 Py_DECREF(z);
2088 z = tmp;
2089 z->ob_digit[size_z] = (digit)c;
2090 ++size_z;
2091 }
2092 }
2093 }
2094 }
2095 if (z == NULL)
2096 return NULL;
2097 if (error_if_nonzero) {
2098 /* reset the base to 0, else the exception message
2099 doesn't make too much sense */
2100 base = 0;
2101 if (Py_SIZE(z) != 0)
2102 goto onError;
2103 /* there might still be other problems, therefore base
2104 remains zero here for the same reason */
2105 }
2106 if (str == start)
2107 goto onError;
2108 if (sign < 0)
2109 Py_SIZE(z) = -(Py_SIZE(z));
2110 while (*str && isspace(Py_CHARMASK(*str)))
2111 str++;
2112 if (*str != '\0')
2113 goto onError;
2114 if (pend)
2115 *pend = str;
2116 long_normalize(z);
2117 return (PyObject *) maybe_small_long(z);
Guido van Rossum9e896b32000-04-05 20:11:21 +00002118
2119 onError:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002120 Py_XDECREF(z);
2121 slen = strlen(orig_str) < 200 ? strlen(orig_str) : 200;
2122 strobj = PyUnicode_FromStringAndSize(orig_str, slen);
2123 if (strobj == NULL)
2124 return NULL;
2125 PyErr_Format(PyExc_ValueError,
2126 "invalid literal for int() with base %d: %R",
2127 base, strobj);
2128 Py_DECREF(strobj);
2129 return NULL;
Guido van Rossum9e896b32000-04-05 20:11:21 +00002130}
2131
2132PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00002133PyLong_FromUnicode(Py_UNICODE *u, Py_ssize_t length, int base)
Guido van Rossum9e896b32000-04-05 20:11:21 +00002134{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002135 PyObject *result;
2136 char *buffer = (char *)PyMem_MALLOC(length+1);
Guido van Rossum9e896b32000-04-05 20:11:21 +00002137
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002138 if (buffer == NULL)
2139 return NULL;
Walter Dörwald07e14762002-11-06 16:15:14 +00002140
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002141 if (PyUnicode_EncodeDecimal(u, length, buffer, NULL)) {
2142 PyMem_FREE(buffer);
2143 return NULL;
2144 }
2145 result = PyLong_FromString(buffer, NULL, base);
2146 PyMem_FREE(buffer);
2147 return result;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002148}
2149
Tim Peters9f688bf2000-07-07 15:53:28 +00002150/* forward */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002151static PyLongObject *x_divrem
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002152 (PyLongObject *, PyLongObject *, PyLongObject **);
Guido van Rossumb43daf72007-08-01 18:08:08 +00002153static PyObject *long_long(PyObject *v);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002154
2155/* Long division with remainder, top-level routine */
2156
Guido van Rossume32e0141992-01-19 16:31:05 +00002157static int
Tim Peters9f688bf2000-07-07 15:53:28 +00002158long_divrem(PyLongObject *a, PyLongObject *b,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002159 PyLongObject **pdiv, PyLongObject **prem)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002160{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002161 Py_ssize_t size_a = ABS(Py_SIZE(a)), size_b = ABS(Py_SIZE(b));
2162 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002163
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002164 if (size_b == 0) {
2165 PyErr_SetString(PyExc_ZeroDivisionError,
2166 "integer division or modulo by zero");
2167 return -1;
2168 }
2169 if (size_a < size_b ||
2170 (size_a == size_b &&
2171 a->ob_digit[size_a-1] < b->ob_digit[size_b-1])) {
2172 /* |a| < |b|. */
2173 *pdiv = (PyLongObject*)PyLong_FromLong(0);
2174 if (*pdiv == NULL)
2175 return -1;
2176 Py_INCREF(a);
2177 *prem = (PyLongObject *) a;
2178 return 0;
2179 }
2180 if (size_b == 1) {
2181 digit rem = 0;
2182 z = divrem1(a, b->ob_digit[0], &rem);
2183 if (z == NULL)
2184 return -1;
2185 *prem = (PyLongObject *) PyLong_FromLong((long)rem);
2186 if (*prem == NULL) {
2187 Py_DECREF(z);
2188 return -1;
2189 }
2190 }
2191 else {
2192 z = x_divrem(a, b, prem);
2193 if (z == NULL)
2194 return -1;
2195 }
2196 /* Set the signs.
2197 The quotient z has the sign of a*b;
2198 the remainder r has the sign of a,
2199 so a = b*z + r. */
2200 if ((Py_SIZE(a) < 0) != (Py_SIZE(b) < 0))
2201 NEGATE(z);
2202 if (Py_SIZE(a) < 0 && Py_SIZE(*prem) != 0)
2203 NEGATE(*prem);
2204 *pdiv = maybe_small_long(z);
2205 return 0;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002206}
2207
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002208/* Unsigned long division with remainder -- the algorithm. The arguments v1
2209 and w1 should satisfy 2 <= ABS(Py_SIZE(w1)) <= ABS(Py_SIZE(v1)). */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002210
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002211static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00002212x_divrem(PyLongObject *v1, PyLongObject *w1, PyLongObject **prem)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002213{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002214 PyLongObject *v, *w, *a;
2215 Py_ssize_t i, k, size_v, size_w;
2216 int d;
2217 digit wm1, wm2, carry, q, r, vtop, *v0, *vk, *w0, *ak;
2218 twodigits vv;
2219 sdigit zhi;
2220 stwodigits z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002221
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002222 /* We follow Knuth [The Art of Computer Programming, Vol. 2 (3rd
2223 edn.), section 4.3.1, Algorithm D], except that we don't explicitly
2224 handle the special case when the initial estimate q for a quotient
2225 digit is >= PyLong_BASE: the max value for q is PyLong_BASE+1, and
2226 that won't overflow a digit. */
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002227
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002228 /* allocate space; w will also be used to hold the final remainder */
2229 size_v = ABS(Py_SIZE(v1));
2230 size_w = ABS(Py_SIZE(w1));
2231 assert(size_v >= size_w && size_w >= 2); /* Assert checks by div() */
2232 v = _PyLong_New(size_v+1);
2233 if (v == NULL) {
2234 *prem = NULL;
2235 return NULL;
2236 }
2237 w = _PyLong_New(size_w);
2238 if (w == NULL) {
2239 Py_DECREF(v);
2240 *prem = NULL;
2241 return NULL;
2242 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002243
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002244 /* normalize: shift w1 left so that its top digit is >= PyLong_BASE/2.
2245 shift v1 left by the same amount. Results go into w and v. */
2246 d = PyLong_SHIFT - bits_in_digit(w1->ob_digit[size_w-1]);
2247 carry = v_lshift(w->ob_digit, w1->ob_digit, size_w, d);
2248 assert(carry == 0);
2249 carry = v_lshift(v->ob_digit, v1->ob_digit, size_v, d);
2250 if (carry != 0 || v->ob_digit[size_v-1] >= w->ob_digit[size_w-1]) {
2251 v->ob_digit[size_v] = carry;
2252 size_v++;
2253 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002254
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002255 /* Now v->ob_digit[size_v-1] < w->ob_digit[size_w-1], so quotient has
2256 at most (and usually exactly) k = size_v - size_w digits. */
2257 k = size_v - size_w;
2258 assert(k >= 0);
2259 a = _PyLong_New(k);
2260 if (a == NULL) {
2261 Py_DECREF(w);
2262 Py_DECREF(v);
2263 *prem = NULL;
2264 return NULL;
2265 }
2266 v0 = v->ob_digit;
2267 w0 = w->ob_digit;
2268 wm1 = w0[size_w-1];
2269 wm2 = w0[size_w-2];
2270 for (vk = v0+k, ak = a->ob_digit + k; vk-- > v0;) {
2271 /* inner loop: divide vk[0:size_w+1] by w0[0:size_w], giving
2272 single-digit quotient q, remainder in vk[0:size_w]. */
Tim Peters5af4e6c2002-08-12 02:31:19 +00002273
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002274 SIGCHECK({
2275 Py_DECREF(a);
2276 Py_DECREF(w);
2277 Py_DECREF(v);
2278 *prem = NULL;
2279 return NULL;
2280 })
Tim Peters5af4e6c2002-08-12 02:31:19 +00002281
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002282 /* estimate quotient digit q; may overestimate by 1 (rare) */
2283 vtop = vk[size_w];
2284 assert(vtop <= wm1);
2285 vv = ((twodigits)vtop << PyLong_SHIFT) | vk[size_w-1];
2286 q = (digit)(vv / wm1);
2287 r = (digit)(vv - (twodigits)wm1 * q); /* r = vv % wm1 */
2288 while ((twodigits)wm2 * q > (((twodigits)r << PyLong_SHIFT)
2289 | vk[size_w-2])) {
2290 --q;
2291 r += wm1;
2292 if (r >= PyLong_BASE)
2293 break;
2294 }
2295 assert(q <= PyLong_BASE);
Tim Peters5af4e6c2002-08-12 02:31:19 +00002296
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002297 /* subtract q*w0[0:size_w] from vk[0:size_w+1] */
2298 zhi = 0;
2299 for (i = 0; i < size_w; ++i) {
2300 /* invariants: -PyLong_BASE <= -q <= zhi <= 0;
2301 -PyLong_BASE * q <= z < PyLong_BASE */
2302 z = (sdigit)vk[i] + zhi -
2303 (stwodigits)q * (stwodigits)w0[i];
2304 vk[i] = (digit)z & PyLong_MASK;
2305 zhi = (sdigit)Py_ARITHMETIC_RIGHT_SHIFT(stwodigits,
2306 z, PyLong_SHIFT);
2307 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002308
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002309 /* add w back if q was too large (this branch taken rarely) */
2310 assert((sdigit)vtop + zhi == -1 || (sdigit)vtop + zhi == 0);
2311 if ((sdigit)vtop + zhi < 0) {
2312 carry = 0;
2313 for (i = 0; i < size_w; ++i) {
2314 carry += vk[i] + w0[i];
2315 vk[i] = carry & PyLong_MASK;
2316 carry >>= PyLong_SHIFT;
2317 }
2318 --q;
2319 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002320
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002321 /* store quotient digit */
2322 assert(q < PyLong_BASE);
2323 *--ak = q;
2324 }
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002325
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002326 /* unshift remainder; we reuse w to store the result */
2327 carry = v_rshift(w0, v0, size_w, d);
2328 assert(carry==0);
2329 Py_DECREF(v);
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002330
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002331 *prem = long_normalize(w);
2332 return long_normalize(a);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002333}
2334
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002335/* For a nonzero PyLong a, express a in the form x * 2**e, with 0.5 <=
2336 abs(x) < 1.0 and e >= 0; return x and put e in *e. Here x is
2337 rounded to DBL_MANT_DIG significant bits using round-half-to-even.
2338 If a == 0, return 0.0 and set *e = 0. If the resulting exponent
2339 e is larger than PY_SSIZE_T_MAX, raise OverflowError and return
2340 -1.0. */
2341
2342/* attempt to define 2.0**DBL_MANT_DIG as a compile-time constant */
2343#if DBL_MANT_DIG == 53
2344#define EXP2_DBL_MANT_DIG 9007199254740992.0
2345#else
2346#define EXP2_DBL_MANT_DIG (ldexp(1.0, DBL_MANT_DIG))
2347#endif
2348
2349double
2350_PyLong_Frexp(PyLongObject *a, Py_ssize_t *e)
2351{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002352 Py_ssize_t a_size, a_bits, shift_digits, shift_bits, x_size;
2353 /* See below for why x_digits is always large enough. */
2354 digit rem, x_digits[2 + (DBL_MANT_DIG + 1) / PyLong_SHIFT];
2355 double dx;
2356 /* Correction term for round-half-to-even rounding. For a digit x,
2357 "x + half_even_correction[x & 7]" gives x rounded to the nearest
2358 multiple of 4, rounding ties to a multiple of 8. */
2359 static const int half_even_correction[8] = {0, -1, -2, 1, 0, -1, 2, 1};
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002360
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002361 a_size = ABS(Py_SIZE(a));
2362 if (a_size == 0) {
2363 /* Special case for 0: significand 0.0, exponent 0. */
2364 *e = 0;
2365 return 0.0;
2366 }
2367 a_bits = bits_in_digit(a->ob_digit[a_size-1]);
2368 /* The following is an overflow-free version of the check
2369 "if ((a_size - 1) * PyLong_SHIFT + a_bits > PY_SSIZE_T_MAX) ..." */
2370 if (a_size >= (PY_SSIZE_T_MAX - 1) / PyLong_SHIFT + 1 &&
2371 (a_size > (PY_SSIZE_T_MAX - 1) / PyLong_SHIFT + 1 ||
2372 a_bits > (PY_SSIZE_T_MAX - 1) % PyLong_SHIFT + 1))
2373 goto overflow;
2374 a_bits = (a_size - 1) * PyLong_SHIFT + a_bits;
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002375
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002376 /* Shift the first DBL_MANT_DIG + 2 bits of a into x_digits[0:x_size]
2377 (shifting left if a_bits <= DBL_MANT_DIG + 2).
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002378
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002379 Number of digits needed for result: write // for floor division.
2380 Then if shifting left, we end up using
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002381
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002382 1 + a_size + (DBL_MANT_DIG + 2 - a_bits) // PyLong_SHIFT
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002383
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002384 digits. If shifting right, we use
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002385
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002386 a_size - (a_bits - DBL_MANT_DIG - 2) // PyLong_SHIFT
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002387
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002388 digits. Using a_size = 1 + (a_bits - 1) // PyLong_SHIFT along with
2389 the inequalities
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002390
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002391 m // PyLong_SHIFT + n // PyLong_SHIFT <= (m + n) // PyLong_SHIFT
2392 m // PyLong_SHIFT - n // PyLong_SHIFT <=
2393 1 + (m - n - 1) // PyLong_SHIFT,
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002394
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002395 valid for any integers m and n, we find that x_size satisfies
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002396
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002397 x_size <= 2 + (DBL_MANT_DIG + 1) // PyLong_SHIFT
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002398
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002399 in both cases.
2400 */
2401 if (a_bits <= DBL_MANT_DIG + 2) {
2402 shift_digits = (DBL_MANT_DIG + 2 - a_bits) / PyLong_SHIFT;
2403 shift_bits = (DBL_MANT_DIG + 2 - a_bits) % PyLong_SHIFT;
2404 x_size = 0;
2405 while (x_size < shift_digits)
2406 x_digits[x_size++] = 0;
2407 rem = v_lshift(x_digits + x_size, a->ob_digit, a_size,
2408 (int)shift_bits);
2409 x_size += a_size;
2410 x_digits[x_size++] = rem;
2411 }
2412 else {
2413 shift_digits = (a_bits - DBL_MANT_DIG - 2) / PyLong_SHIFT;
2414 shift_bits = (a_bits - DBL_MANT_DIG - 2) % PyLong_SHIFT;
2415 rem = v_rshift(x_digits, a->ob_digit + shift_digits,
2416 a_size - shift_digits, (int)shift_bits);
2417 x_size = a_size - shift_digits;
2418 /* For correct rounding below, we need the least significant
2419 bit of x to be 'sticky' for this shift: if any of the bits
2420 shifted out was nonzero, we set the least significant bit
2421 of x. */
2422 if (rem)
2423 x_digits[0] |= 1;
2424 else
2425 while (shift_digits > 0)
2426 if (a->ob_digit[--shift_digits]) {
2427 x_digits[0] |= 1;
2428 break;
2429 }
2430 }
2431 assert(1 <= x_size && x_size <= (Py_ssize_t)(sizeof(x_digits)/sizeof(digit)));
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002432
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002433 /* Round, and convert to double. */
2434 x_digits[0] += half_even_correction[x_digits[0] & 7];
2435 dx = x_digits[--x_size];
2436 while (x_size > 0)
2437 dx = dx * PyLong_BASE + x_digits[--x_size];
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002438
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002439 /* Rescale; make correction if result is 1.0. */
2440 dx /= 4.0 * EXP2_DBL_MANT_DIG;
2441 if (dx == 1.0) {
2442 if (a_bits == PY_SSIZE_T_MAX)
2443 goto overflow;
2444 dx = 0.5;
2445 a_bits += 1;
2446 }
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002447
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002448 *e = a_bits;
2449 return Py_SIZE(a) < 0 ? -dx : dx;
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002450
2451 overflow:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002452 /* exponent > PY_SSIZE_T_MAX */
2453 PyErr_SetString(PyExc_OverflowError,
2454 "huge integer: number of bits overflows a Py_ssize_t");
2455 *e = 0;
2456 return -1.0;
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002457}
2458
2459/* Get a C double from a long int object. Rounds to the nearest double,
2460 using the round-half-to-even rule in the case of a tie. */
2461
2462double
2463PyLong_AsDouble(PyObject *v)
2464{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002465 Py_ssize_t exponent;
2466 double x;
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002467
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002468 if (v == NULL || !PyLong_Check(v)) {
2469 PyErr_BadInternalCall();
2470 return -1.0;
2471 }
2472 x = _PyLong_Frexp((PyLongObject *)v, &exponent);
2473 if ((x == -1.0 && PyErr_Occurred()) || exponent > DBL_MAX_EXP) {
2474 PyErr_SetString(PyExc_OverflowError,
2475 "long int too large to convert to float");
2476 return -1.0;
2477 }
2478 return ldexp(x, (int)exponent);
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002479}
2480
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002481/* Methods */
2482
2483static void
Tim Peters9f688bf2000-07-07 15:53:28 +00002484long_dealloc(PyObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002485{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002486 Py_TYPE(v)->tp_free(v);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002487}
2488
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002489static int
Tim Peters9f688bf2000-07-07 15:53:28 +00002490long_compare(PyLongObject *a, PyLongObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002491{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002492 Py_ssize_t sign;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002493
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002494 if (Py_SIZE(a) != Py_SIZE(b)) {
2495 sign = Py_SIZE(a) - Py_SIZE(b);
2496 }
2497 else {
2498 Py_ssize_t i = ABS(Py_SIZE(a));
2499 while (--i >= 0 && a->ob_digit[i] == b->ob_digit[i])
2500 ;
2501 if (i < 0)
2502 sign = 0;
2503 else {
2504 sign = (sdigit)a->ob_digit[i] - (sdigit)b->ob_digit[i];
2505 if (Py_SIZE(a) < 0)
2506 sign = -sign;
2507 }
2508 }
2509 return sign < 0 ? -1 : sign > 0 ? 1 : 0;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002510}
2511
Antoine Pitrou51f3ef92008-12-20 13:14:23 +00002512#define TEST_COND(cond) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002513 ((cond) ? Py_True : Py_False)
Antoine Pitrou51f3ef92008-12-20 13:14:23 +00002514
Guido van Rossum47b9ff62006-08-24 00:41:19 +00002515static PyObject *
2516long_richcompare(PyObject *self, PyObject *other, int op)
2517{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002518 int result;
2519 PyObject *v;
2520 CHECK_BINOP(self, other);
2521 if (self == other)
2522 result = 0;
2523 else
2524 result = long_compare((PyLongObject*)self, (PyLongObject*)other);
2525 /* Convert the return value to a Boolean */
2526 switch (op) {
2527 case Py_EQ:
2528 v = TEST_COND(result == 0);
2529 break;
2530 case Py_NE:
2531 v = TEST_COND(result != 0);
2532 break;
2533 case Py_LE:
2534 v = TEST_COND(result <= 0);
2535 break;
2536 case Py_GE:
2537 v = TEST_COND(result >= 0);
2538 break;
2539 case Py_LT:
2540 v = TEST_COND(result == -1);
2541 break;
2542 case Py_GT:
2543 v = TEST_COND(result == 1);
2544 break;
2545 default:
2546 PyErr_BadArgument();
2547 return NULL;
2548 }
2549 Py_INCREF(v);
2550 return v;
Guido van Rossum47b9ff62006-08-24 00:41:19 +00002551}
2552
Guido van Rossum9bfef441993-03-29 10:43:31 +00002553static long
Tim Peters9f688bf2000-07-07 15:53:28 +00002554long_hash(PyLongObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00002555{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002556 unsigned long x;
2557 Py_ssize_t i;
2558 int sign;
Guido van Rossum9bfef441993-03-29 10:43:31 +00002559
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002560 i = Py_SIZE(v);
2561 switch(i) {
2562 case -1: return v->ob_digit[0]==1 ? -2 : -(sdigit)v->ob_digit[0];
2563 case 0: return 0;
2564 case 1: return v->ob_digit[0];
2565 }
2566 sign = 1;
2567 x = 0;
2568 if (i < 0) {
2569 sign = -1;
2570 i = -(i);
2571 }
2572 /* The following loop produces a C unsigned long x such that x is
2573 congruent to the absolute value of v modulo ULONG_MAX. The
2574 resulting x is nonzero if and only if v is. */
2575 while (--i >= 0) {
2576 /* Force a native long #-bits (32 or 64) circular shift */
2577 x = (x >> (8*SIZEOF_LONG-PyLong_SHIFT)) | (x << PyLong_SHIFT);
2578 x += v->ob_digit[i];
2579 /* If the addition above overflowed we compensate by
2580 incrementing. This preserves the value modulo
2581 ULONG_MAX. */
2582 if (x < v->ob_digit[i])
2583 x++;
2584 }
2585 x = x * sign;
2586 if (x == (unsigned long)-1)
2587 x = (unsigned long)-2;
2588 return (long)x;
Guido van Rossum9bfef441993-03-29 10:43:31 +00002589}
2590
2591
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002592/* Add the absolute values of two long integers. */
2593
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002594static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00002595x_add(PyLongObject *a, PyLongObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002596{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002597 Py_ssize_t size_a = ABS(Py_SIZE(a)), size_b = ABS(Py_SIZE(b));
2598 PyLongObject *z;
2599 Py_ssize_t i;
2600 digit carry = 0;
Tim Peters69c2de32001-09-11 22:31:33 +00002601
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002602 /* Ensure a is the larger of the two: */
2603 if (size_a < size_b) {
2604 { PyLongObject *temp = a; a = b; b = temp; }
2605 { Py_ssize_t size_temp = size_a;
2606 size_a = size_b;
2607 size_b = size_temp; }
2608 }
2609 z = _PyLong_New(size_a+1);
2610 if (z == NULL)
2611 return NULL;
2612 for (i = 0; i < size_b; ++i) {
2613 carry += a->ob_digit[i] + b->ob_digit[i];
2614 z->ob_digit[i] = carry & PyLong_MASK;
2615 carry >>= PyLong_SHIFT;
2616 }
2617 for (; i < size_a; ++i) {
2618 carry += a->ob_digit[i];
2619 z->ob_digit[i] = carry & PyLong_MASK;
2620 carry >>= PyLong_SHIFT;
2621 }
2622 z->ob_digit[i] = carry;
2623 return long_normalize(z);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002624}
2625
2626/* Subtract the absolute values of two integers. */
2627
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002628static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00002629x_sub(PyLongObject *a, PyLongObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002630{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002631 Py_ssize_t size_a = ABS(Py_SIZE(a)), size_b = ABS(Py_SIZE(b));
2632 PyLongObject *z;
2633 Py_ssize_t i;
2634 int sign = 1;
2635 digit borrow = 0;
Tim Peters69c2de32001-09-11 22:31:33 +00002636
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002637 /* Ensure a is the larger of the two: */
2638 if (size_a < size_b) {
2639 sign = -1;
2640 { PyLongObject *temp = a; a = b; b = temp; }
2641 { Py_ssize_t size_temp = size_a;
2642 size_a = size_b;
2643 size_b = size_temp; }
2644 }
2645 else if (size_a == size_b) {
2646 /* Find highest digit where a and b differ: */
2647 i = size_a;
2648 while (--i >= 0 && a->ob_digit[i] == b->ob_digit[i])
2649 ;
2650 if (i < 0)
2651 return (PyLongObject *)PyLong_FromLong(0);
2652 if (a->ob_digit[i] < b->ob_digit[i]) {
2653 sign = -1;
2654 { PyLongObject *temp = a; a = b; b = temp; }
2655 }
2656 size_a = size_b = i+1;
2657 }
2658 z = _PyLong_New(size_a);
2659 if (z == NULL)
2660 return NULL;
2661 for (i = 0; i < size_b; ++i) {
2662 /* The following assumes unsigned arithmetic
2663 works module 2**N for some N>PyLong_SHIFT. */
2664 borrow = a->ob_digit[i] - b->ob_digit[i] - borrow;
2665 z->ob_digit[i] = borrow & PyLong_MASK;
2666 borrow >>= PyLong_SHIFT;
2667 borrow &= 1; /* Keep only one sign bit */
2668 }
2669 for (; i < size_a; ++i) {
2670 borrow = a->ob_digit[i] - borrow;
2671 z->ob_digit[i] = borrow & PyLong_MASK;
2672 borrow >>= PyLong_SHIFT;
2673 borrow &= 1; /* Keep only one sign bit */
2674 }
2675 assert(borrow == 0);
2676 if (sign < 0)
2677 NEGATE(z);
2678 return long_normalize(z);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002679}
2680
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002681static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00002682long_add(PyLongObject *a, PyLongObject *b)
Guido van Rossum4c260ff1992-01-14 18:36:43 +00002683{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002684 PyLongObject *z;
Tim Peters69c2de32001-09-11 22:31:33 +00002685
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002686 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00002687
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002688 if (ABS(Py_SIZE(a)) <= 1 && ABS(Py_SIZE(b)) <= 1) {
2689 PyObject *result = PyLong_FromLong(MEDIUM_VALUE(a) +
2690 MEDIUM_VALUE(b));
2691 return result;
2692 }
2693 if (Py_SIZE(a) < 0) {
2694 if (Py_SIZE(b) < 0) {
2695 z = x_add(a, b);
2696 if (z != NULL && Py_SIZE(z) != 0)
2697 Py_SIZE(z) = -(Py_SIZE(z));
2698 }
2699 else
2700 z = x_sub(b, a);
2701 }
2702 else {
2703 if (Py_SIZE(b) < 0)
2704 z = x_sub(a, b);
2705 else
2706 z = x_add(a, b);
2707 }
2708 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002709}
2710
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002711static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00002712long_sub(PyLongObject *a, PyLongObject *b)
Guido van Rossum4c260ff1992-01-14 18:36:43 +00002713{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002714 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002715
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002716 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00002717
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002718 if (ABS(Py_SIZE(a)) <= 1 && ABS(Py_SIZE(b)) <= 1) {
2719 PyObject* r;
2720 r = PyLong_FromLong(MEDIUM_VALUE(a)-MEDIUM_VALUE(b));
2721 return r;
2722 }
2723 if (Py_SIZE(a) < 0) {
2724 if (Py_SIZE(b) < 0)
2725 z = x_sub(a, b);
2726 else
2727 z = x_add(a, b);
2728 if (z != NULL && Py_SIZE(z) != 0)
2729 Py_SIZE(z) = -(Py_SIZE(z));
2730 }
2731 else {
2732 if (Py_SIZE(b) < 0)
2733 z = x_add(a, b);
2734 else
2735 z = x_sub(a, b);
2736 }
2737 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002738}
2739
Tim Peters5af4e6c2002-08-12 02:31:19 +00002740/* Grade school multiplication, ignoring the signs.
2741 * Returns the absolute value of the product, or NULL if error.
2742 */
2743static PyLongObject *
2744x_mul(PyLongObject *a, PyLongObject *b)
Neil Schemenauerba872e22001-01-04 01:46:03 +00002745{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002746 PyLongObject *z;
2747 Py_ssize_t size_a = ABS(Py_SIZE(a));
2748 Py_ssize_t size_b = ABS(Py_SIZE(b));
2749 Py_ssize_t i;
Neil Schemenauerba872e22001-01-04 01:46:03 +00002750
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002751 z = _PyLong_New(size_a + size_b);
2752 if (z == NULL)
2753 return NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002754
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002755 memset(z->ob_digit, 0, Py_SIZE(z) * sizeof(digit));
2756 if (a == b) {
2757 /* Efficient squaring per HAC, Algorithm 14.16:
2758 * http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf
2759 * Gives slightly less than a 2x speedup when a == b,
2760 * via exploiting that each entry in the multiplication
2761 * pyramid appears twice (except for the size_a squares).
2762 */
2763 for (i = 0; i < size_a; ++i) {
2764 twodigits carry;
2765 twodigits f = a->ob_digit[i];
2766 digit *pz = z->ob_digit + (i << 1);
2767 digit *pa = a->ob_digit + i + 1;
2768 digit *paend = a->ob_digit + size_a;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002769
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002770 SIGCHECK({
2771 Py_DECREF(z);
2772 return NULL;
2773 })
Tim Peters0973b992004-08-29 22:16:50 +00002774
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002775 carry = *pz + f * f;
2776 *pz++ = (digit)(carry & PyLong_MASK);
2777 carry >>= PyLong_SHIFT;
2778 assert(carry <= PyLong_MASK);
Tim Peters0973b992004-08-29 22:16:50 +00002779
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002780 /* Now f is added in twice in each column of the
2781 * pyramid it appears. Same as adding f<<1 once.
2782 */
2783 f <<= 1;
2784 while (pa < paend) {
2785 carry += *pz + *pa++ * f;
2786 *pz++ = (digit)(carry & PyLong_MASK);
2787 carry >>= PyLong_SHIFT;
2788 assert(carry <= (PyLong_MASK << 1));
2789 }
2790 if (carry) {
2791 carry += *pz;
2792 *pz++ = (digit)(carry & PyLong_MASK);
2793 carry >>= PyLong_SHIFT;
2794 }
2795 if (carry)
2796 *pz += (digit)(carry & PyLong_MASK);
2797 assert((carry >> PyLong_SHIFT) == 0);
2798 }
2799 }
2800 else { /* a is not the same as b -- gradeschool long mult */
2801 for (i = 0; i < size_a; ++i) {
2802 twodigits carry = 0;
2803 twodigits f = a->ob_digit[i];
2804 digit *pz = z->ob_digit + i;
2805 digit *pb = b->ob_digit;
2806 digit *pbend = b->ob_digit + size_b;
Tim Peters0973b992004-08-29 22:16:50 +00002807
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002808 SIGCHECK({
2809 Py_DECREF(z);
2810 return NULL;
2811 })
Tim Peters0973b992004-08-29 22:16:50 +00002812
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002813 while (pb < pbend) {
2814 carry += *pz + *pb++ * f;
2815 *pz++ = (digit)(carry & PyLong_MASK);
2816 carry >>= PyLong_SHIFT;
2817 assert(carry <= PyLong_MASK);
2818 }
2819 if (carry)
2820 *pz += (digit)(carry & PyLong_MASK);
2821 assert((carry >> PyLong_SHIFT) == 0);
2822 }
2823 }
2824 return long_normalize(z);
Tim Peters5af4e6c2002-08-12 02:31:19 +00002825}
2826
2827/* A helper for Karatsuba multiplication (k_mul).
2828 Takes a long "n" and an integer "size" representing the place to
2829 split, and sets low and high such that abs(n) == (high << size) + low,
2830 viewing the shift as being by digits. The sign bit is ignored, and
2831 the return values are >= 0.
2832 Returns 0 on success, -1 on failure.
2833*/
2834static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00002835kmul_split(PyLongObject *n, Py_ssize_t size, PyLongObject **high, PyLongObject **low)
Tim Peters5af4e6c2002-08-12 02:31:19 +00002836{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002837 PyLongObject *hi, *lo;
2838 Py_ssize_t size_lo, size_hi;
2839 const Py_ssize_t size_n = ABS(Py_SIZE(n));
Tim Peters5af4e6c2002-08-12 02:31:19 +00002840
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002841 size_lo = MIN(size_n, size);
2842 size_hi = size_n - size_lo;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002843
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002844 if ((hi = _PyLong_New(size_hi)) == NULL)
2845 return -1;
2846 if ((lo = _PyLong_New(size_lo)) == NULL) {
2847 Py_DECREF(hi);
2848 return -1;
2849 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002850
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002851 memcpy(lo->ob_digit, n->ob_digit, size_lo * sizeof(digit));
2852 memcpy(hi->ob_digit, n->ob_digit + size_lo, size_hi * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00002853
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002854 *high = long_normalize(hi);
2855 *low = long_normalize(lo);
2856 return 0;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002857}
2858
Tim Peters60004642002-08-12 22:01:34 +00002859static PyLongObject *k_lopsided_mul(PyLongObject *a, PyLongObject *b);
2860
Tim Peters5af4e6c2002-08-12 02:31:19 +00002861/* Karatsuba multiplication. Ignores the input signs, and returns the
2862 * absolute value of the product (or NULL if error).
2863 * See Knuth Vol. 2 Chapter 4.3.3 (Pp. 294-295).
2864 */
2865static PyLongObject *
2866k_mul(PyLongObject *a, PyLongObject *b)
2867{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002868 Py_ssize_t asize = ABS(Py_SIZE(a));
2869 Py_ssize_t bsize = ABS(Py_SIZE(b));
2870 PyLongObject *ah = NULL;
2871 PyLongObject *al = NULL;
2872 PyLongObject *bh = NULL;
2873 PyLongObject *bl = NULL;
2874 PyLongObject *ret = NULL;
2875 PyLongObject *t1, *t2, *t3;
2876 Py_ssize_t shift; /* the number of digits we split off */
2877 Py_ssize_t i;
Tim Peters738eda72002-08-12 15:08:20 +00002878
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002879 /* (ah*X+al)(bh*X+bl) = ah*bh*X*X + (ah*bl + al*bh)*X + al*bl
2880 * Let k = (ah+al)*(bh+bl) = ah*bl + al*bh + ah*bh + al*bl
2881 * Then the original product is
2882 * ah*bh*X*X + (k - ah*bh - al*bl)*X + al*bl
2883 * By picking X to be a power of 2, "*X" is just shifting, and it's
2884 * been reduced to 3 multiplies on numbers half the size.
2885 */
Tim Peters5af4e6c2002-08-12 02:31:19 +00002886
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002887 /* We want to split based on the larger number; fiddle so that b
2888 * is largest.
2889 */
2890 if (asize > bsize) {
2891 t1 = a;
2892 a = b;
2893 b = t1;
Tim Peters738eda72002-08-12 15:08:20 +00002894
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002895 i = asize;
2896 asize = bsize;
2897 bsize = i;
2898 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002899
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002900 /* Use gradeschool math when either number is too small. */
2901 i = a == b ? KARATSUBA_SQUARE_CUTOFF : KARATSUBA_CUTOFF;
2902 if (asize <= i) {
2903 if (asize == 0)
2904 return (PyLongObject *)PyLong_FromLong(0);
2905 else
2906 return x_mul(a, b);
2907 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002908
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002909 /* If a is small compared to b, splitting on b gives a degenerate
2910 * case with ah==0, and Karatsuba may be (even much) less efficient
2911 * than "grade school" then. However, we can still win, by viewing
2912 * b as a string of "big digits", each of width a->ob_size. That
2913 * leads to a sequence of balanced calls to k_mul.
2914 */
2915 if (2 * asize <= bsize)
2916 return k_lopsided_mul(a, b);
Tim Peters60004642002-08-12 22:01:34 +00002917
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002918 /* Split a & b into hi & lo pieces. */
2919 shift = bsize >> 1;
2920 if (kmul_split(a, shift, &ah, &al) < 0) goto fail;
2921 assert(Py_SIZE(ah) > 0); /* the split isn't degenerate */
Tim Petersd6974a52002-08-13 20:37:51 +00002922
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002923 if (a == b) {
2924 bh = ah;
2925 bl = al;
2926 Py_INCREF(bh);
2927 Py_INCREF(bl);
2928 }
2929 else if (kmul_split(b, shift, &bh, &bl) < 0) goto fail;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002930
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002931 /* The plan:
2932 * 1. Allocate result space (asize + bsize digits: that's always
2933 * enough).
2934 * 2. Compute ah*bh, and copy into result at 2*shift.
2935 * 3. Compute al*bl, and copy into result at 0. Note that this
2936 * can't overlap with #2.
2937 * 4. Subtract al*bl from the result, starting at shift. This may
2938 * underflow (borrow out of the high digit), but we don't care:
2939 * we're effectively doing unsigned arithmetic mod
2940 * BASE**(sizea + sizeb), and so long as the *final* result fits,
2941 * borrows and carries out of the high digit can be ignored.
2942 * 5. Subtract ah*bh from the result, starting at shift.
2943 * 6. Compute (ah+al)*(bh+bl), and add it into the result starting
2944 * at shift.
2945 */
Tim Petersd64c1de2002-08-12 17:36:03 +00002946
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002947 /* 1. Allocate result space. */
2948 ret = _PyLong_New(asize + bsize);
2949 if (ret == NULL) goto fail;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002950#ifdef Py_DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002951 /* Fill with trash, to catch reference to uninitialized digits. */
2952 memset(ret->ob_digit, 0xDF, Py_SIZE(ret) * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00002953#endif
Tim Peters44121a62002-08-12 06:17:58 +00002954
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002955 /* 2. t1 <- ah*bh, and copy into high digits of result. */
2956 if ((t1 = k_mul(ah, bh)) == NULL) goto fail;
2957 assert(Py_SIZE(t1) >= 0);
2958 assert(2*shift + Py_SIZE(t1) <= Py_SIZE(ret));
2959 memcpy(ret->ob_digit + 2*shift, t1->ob_digit,
2960 Py_SIZE(t1) * sizeof(digit));
Tim Peters738eda72002-08-12 15:08:20 +00002961
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002962 /* Zero-out the digits higher than the ah*bh copy. */
2963 i = Py_SIZE(ret) - 2*shift - Py_SIZE(t1);
2964 if (i)
2965 memset(ret->ob_digit + 2*shift + Py_SIZE(t1), 0,
2966 i * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00002967
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002968 /* 3. t2 <- al*bl, and copy into the low digits. */
2969 if ((t2 = k_mul(al, bl)) == NULL) {
2970 Py_DECREF(t1);
2971 goto fail;
2972 }
2973 assert(Py_SIZE(t2) >= 0);
2974 assert(Py_SIZE(t2) <= 2*shift); /* no overlap with high digits */
2975 memcpy(ret->ob_digit, t2->ob_digit, Py_SIZE(t2) * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00002976
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002977 /* Zero out remaining digits. */
2978 i = 2*shift - Py_SIZE(t2); /* number of uninitialized digits */
2979 if (i)
2980 memset(ret->ob_digit + Py_SIZE(t2), 0, i * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00002981
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002982 /* 4 & 5. Subtract ah*bh (t1) and al*bl (t2). We do al*bl first
2983 * because it's fresher in cache.
2984 */
2985 i = Py_SIZE(ret) - shift; /* # digits after shift */
2986 (void)v_isub(ret->ob_digit + shift, i, t2->ob_digit, Py_SIZE(t2));
2987 Py_DECREF(t2);
Tim Peters738eda72002-08-12 15:08:20 +00002988
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002989 (void)v_isub(ret->ob_digit + shift, i, t1->ob_digit, Py_SIZE(t1));
2990 Py_DECREF(t1);
Tim Peters738eda72002-08-12 15:08:20 +00002991
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002992 /* 6. t3 <- (ah+al)(bh+bl), and add into result. */
2993 if ((t1 = x_add(ah, al)) == NULL) goto fail;
2994 Py_DECREF(ah);
2995 Py_DECREF(al);
2996 ah = al = NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002997
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002998 if (a == b) {
2999 t2 = t1;
3000 Py_INCREF(t2);
3001 }
3002 else if ((t2 = x_add(bh, bl)) == NULL) {
3003 Py_DECREF(t1);
3004 goto fail;
3005 }
3006 Py_DECREF(bh);
3007 Py_DECREF(bl);
3008 bh = bl = NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003009
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003010 t3 = k_mul(t1, t2);
3011 Py_DECREF(t1);
3012 Py_DECREF(t2);
3013 if (t3 == NULL) goto fail;
3014 assert(Py_SIZE(t3) >= 0);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003015
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003016 /* Add t3. It's not obvious why we can't run out of room here.
3017 * See the (*) comment after this function.
3018 */
3019 (void)v_iadd(ret->ob_digit + shift, i, t3->ob_digit, Py_SIZE(t3));
3020 Py_DECREF(t3);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003021
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003022 return long_normalize(ret);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003023
3024 fail:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003025 Py_XDECREF(ret);
3026 Py_XDECREF(ah);
3027 Py_XDECREF(al);
3028 Py_XDECREF(bh);
3029 Py_XDECREF(bl);
3030 return NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003031}
3032
Tim Petersd6974a52002-08-13 20:37:51 +00003033/* (*) Why adding t3 can't "run out of room" above.
3034
Tim Petersab86c2b2002-08-15 20:06:00 +00003035Let f(x) mean the floor of x and c(x) mean the ceiling of x. Some facts
3036to start with:
Tim Petersd6974a52002-08-13 20:37:51 +00003037
Tim Petersab86c2b2002-08-15 20:06:00 +000030381. For any integer i, i = c(i/2) + f(i/2). In particular,
3039 bsize = c(bsize/2) + f(bsize/2).
30402. shift = f(bsize/2)
30413. asize <= bsize
30424. Since we call k_lopsided_mul if asize*2 <= bsize, asize*2 > bsize in this
3043 routine, so asize > bsize/2 >= f(bsize/2) in this routine.
Tim Petersd6974a52002-08-13 20:37:51 +00003044
Tim Petersab86c2b2002-08-15 20:06:00 +00003045We allocated asize + bsize result digits, and add t3 into them at an offset
3046of shift. This leaves asize+bsize-shift allocated digit positions for t3
3047to fit into, = (by #1 and #2) asize + f(bsize/2) + c(bsize/2) - f(bsize/2) =
3048asize + c(bsize/2) available digit positions.
Tim Petersd6974a52002-08-13 20:37:51 +00003049
Tim Petersab86c2b2002-08-15 20:06:00 +00003050bh has c(bsize/2) digits, and bl at most f(size/2) digits. So bh+hl has
3051at most c(bsize/2) digits + 1 bit.
Tim Petersd6974a52002-08-13 20:37:51 +00003052
Tim Petersab86c2b2002-08-15 20:06:00 +00003053If asize == bsize, ah has c(bsize/2) digits, else ah has at most f(bsize/2)
3054digits, and al has at most f(bsize/2) digits in any case. So ah+al has at
3055most (asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 1 bit.
Tim Petersd6974a52002-08-13 20:37:51 +00003056
Tim Petersab86c2b2002-08-15 20:06:00 +00003057The product (ah+al)*(bh+bl) therefore has at most
Tim Petersd6974a52002-08-13 20:37:51 +00003058
Tim Petersab86c2b2002-08-15 20:06:00 +00003059 c(bsize/2) + (asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 2 bits
Tim Petersd6974a52002-08-13 20:37:51 +00003060
Tim Petersab86c2b2002-08-15 20:06:00 +00003061and we have asize + c(bsize/2) available digit positions. We need to show
3062this is always enough. An instance of c(bsize/2) cancels out in both, so
3063the question reduces to whether asize digits is enough to hold
3064(asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 2 bits. If asize < bsize,
3065then we're asking whether asize digits >= f(bsize/2) digits + 2 bits. By #4,
3066asize 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 +00003067digit is enough to hold 2 bits. This is so since PyLong_SHIFT=15 >= 2. If
Tim Petersab86c2b2002-08-15 20:06:00 +00003068asize == bsize, then we're asking whether bsize digits is enough to hold
Tim Peterse417de02002-08-15 20:10:45 +00003069c(bsize/2) digits + 2 bits, or equivalently (by #1) whether f(bsize/2) digits
3070is enough to hold 2 bits. This is so if bsize >= 2, which holds because
3071bsize >= KARATSUBA_CUTOFF >= 2.
Tim Peters8e966ee2002-08-14 16:36:23 +00003072
Tim Peters48d52c02002-08-14 17:07:32 +00003073Note that since there's always enough room for (ah+al)*(bh+bl), and that's
3074clearly >= each of ah*bh and al*bl, there's always enough room to subtract
3075ah*bh and al*bl too.
Tim Petersd6974a52002-08-13 20:37:51 +00003076*/
3077
Tim Peters60004642002-08-12 22:01:34 +00003078/* b has at least twice the digits of a, and a is big enough that Karatsuba
3079 * would pay off *if* the inputs had balanced sizes. View b as a sequence
3080 * of slices, each with a->ob_size digits, and multiply the slices by a,
3081 * one at a time. This gives k_mul balanced inputs to work with, and is
3082 * also cache-friendly (we compute one double-width slice of the result
3083 * at a time, then move on, never bactracking except for the helpful
3084 * single-width slice overlap between successive partial sums).
3085 */
3086static PyLongObject *
3087k_lopsided_mul(PyLongObject *a, PyLongObject *b)
3088{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003089 const Py_ssize_t asize = ABS(Py_SIZE(a));
3090 Py_ssize_t bsize = ABS(Py_SIZE(b));
3091 Py_ssize_t nbdone; /* # of b digits already multiplied */
3092 PyLongObject *ret;
3093 PyLongObject *bslice = NULL;
Tim Peters60004642002-08-12 22:01:34 +00003094
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003095 assert(asize > KARATSUBA_CUTOFF);
3096 assert(2 * asize <= bsize);
Tim Peters60004642002-08-12 22:01:34 +00003097
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003098 /* Allocate result space, and zero it out. */
3099 ret = _PyLong_New(asize + bsize);
3100 if (ret == NULL)
3101 return NULL;
3102 memset(ret->ob_digit, 0, Py_SIZE(ret) * sizeof(digit));
Tim Peters60004642002-08-12 22:01:34 +00003103
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003104 /* Successive slices of b are copied into bslice. */
3105 bslice = _PyLong_New(asize);
3106 if (bslice == NULL)
3107 goto fail;
Tim Peters60004642002-08-12 22:01:34 +00003108
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003109 nbdone = 0;
3110 while (bsize > 0) {
3111 PyLongObject *product;
3112 const Py_ssize_t nbtouse = MIN(bsize, asize);
Tim Peters60004642002-08-12 22:01:34 +00003113
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003114 /* Multiply the next slice of b by a. */
3115 memcpy(bslice->ob_digit, b->ob_digit + nbdone,
3116 nbtouse * sizeof(digit));
3117 Py_SIZE(bslice) = nbtouse;
3118 product = k_mul(a, bslice);
3119 if (product == NULL)
3120 goto fail;
Tim Peters60004642002-08-12 22:01:34 +00003121
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003122 /* Add into result. */
3123 (void)v_iadd(ret->ob_digit + nbdone, Py_SIZE(ret) - nbdone,
3124 product->ob_digit, Py_SIZE(product));
3125 Py_DECREF(product);
Tim Peters60004642002-08-12 22:01:34 +00003126
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003127 bsize -= nbtouse;
3128 nbdone += nbtouse;
3129 }
Tim Peters60004642002-08-12 22:01:34 +00003130
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003131 Py_DECREF(bslice);
3132 return long_normalize(ret);
Tim Peters60004642002-08-12 22:01:34 +00003133
3134 fail:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003135 Py_DECREF(ret);
3136 Py_XDECREF(bslice);
3137 return NULL;
Tim Peters60004642002-08-12 22:01:34 +00003138}
Tim Peters5af4e6c2002-08-12 02:31:19 +00003139
3140static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003141long_mul(PyLongObject *a, PyLongObject *b)
Tim Peters5af4e6c2002-08-12 02:31:19 +00003142{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003143 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003144
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003145 CHECK_BINOP(a, b);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003146
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003147 /* fast path for single-digit multiplication */
3148 if (ABS(Py_SIZE(a)) <= 1 && ABS(Py_SIZE(b)) <= 1) {
3149 stwodigits v = (stwodigits)(MEDIUM_VALUE(a)) * MEDIUM_VALUE(b);
Mark Dickinsonbd792642009-03-18 20:06:12 +00003150#ifdef HAVE_LONG_LONG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003151 return PyLong_FromLongLong((PY_LONG_LONG)v);
Mark Dickinsonbd792642009-03-18 20:06:12 +00003152#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003153 /* if we don't have long long then we're almost certainly
3154 using 15-bit digits, so v will fit in a long. In the
3155 unlikely event that we're using 30-bit digits on a platform
3156 without long long, a large v will just cause us to fall
3157 through to the general multiplication code below. */
3158 if (v >= LONG_MIN && v <= LONG_MAX)
3159 return PyLong_FromLong((long)v);
Mark Dickinsonbd792642009-03-18 20:06:12 +00003160#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003161 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00003162
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003163 z = k_mul(a, b);
3164 /* Negate if exactly one of the inputs is negative. */
3165 if (((Py_SIZE(a) ^ Py_SIZE(b)) < 0) && z)
3166 NEGATE(z);
3167 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003168}
3169
Guido van Rossume32e0141992-01-19 16:31:05 +00003170/* The / and % operators are now defined in terms of divmod().
3171 The expression a mod b has the value a - b*floor(a/b).
3172 The long_divrem function gives the remainder after division of
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003173 |a| by |b|, with the sign of a. This is also expressed
3174 as a - b*trunc(a/b), if trunc truncates towards zero.
3175 Some examples:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003176 a b a rem b a mod b
3177 13 10 3 3
3178 -13 10 -3 7
3179 13 -10 3 -7
3180 -13 -10 -3 -3
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003181 So, to get from rem to mod, we have to add b if a and b
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00003182 have different signs. We then subtract one from the 'div'
3183 part of the outcome to keep the invariant intact. */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003184
Tim Peters47e52ee2004-08-30 02:44:38 +00003185/* Compute
3186 * *pdiv, *pmod = divmod(v, w)
3187 * NULL can be passed for pdiv or pmod, in which case that part of
3188 * the result is simply thrown away. The caller owns a reference to
3189 * each of these it requests (does not pass NULL for).
3190 */
Guido van Rossume32e0141992-01-19 16:31:05 +00003191static int
Tim Peters5af4e6c2002-08-12 02:31:19 +00003192l_divmod(PyLongObject *v, PyLongObject *w,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003193 PyLongObject **pdiv, PyLongObject **pmod)
Guido van Rossume32e0141992-01-19 16:31:05 +00003194{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003195 PyLongObject *div, *mod;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003196
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003197 if (long_divrem(v, w, &div, &mod) < 0)
3198 return -1;
3199 if ((Py_SIZE(mod) < 0 && Py_SIZE(w) > 0) ||
3200 (Py_SIZE(mod) > 0 && Py_SIZE(w) < 0)) {
3201 PyLongObject *temp;
3202 PyLongObject *one;
3203 temp = (PyLongObject *) long_add(mod, w);
3204 Py_DECREF(mod);
3205 mod = temp;
3206 if (mod == NULL) {
3207 Py_DECREF(div);
3208 return -1;
3209 }
3210 one = (PyLongObject *) PyLong_FromLong(1L);
3211 if (one == NULL ||
3212 (temp = (PyLongObject *) long_sub(div, one)) == NULL) {
3213 Py_DECREF(mod);
3214 Py_DECREF(div);
3215 Py_XDECREF(one);
3216 return -1;
3217 }
3218 Py_DECREF(one);
3219 Py_DECREF(div);
3220 div = temp;
3221 }
3222 if (pdiv != NULL)
3223 *pdiv = div;
3224 else
3225 Py_DECREF(div);
Tim Peters47e52ee2004-08-30 02:44:38 +00003226
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003227 if (pmod != NULL)
3228 *pmod = mod;
3229 else
3230 Py_DECREF(mod);
Tim Peters47e52ee2004-08-30 02:44:38 +00003231
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003232 return 0;
Guido van Rossume32e0141992-01-19 16:31:05 +00003233}
3234
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003235static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003236long_div(PyObject *a, PyObject *b)
Guido van Rossume32e0141992-01-19 16:31:05 +00003237{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003238 PyLongObject *div;
Neil Schemenauerba872e22001-01-04 01:46:03 +00003239
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003240 CHECK_BINOP(a, b);
3241 if (l_divmod((PyLongObject*)a, (PyLongObject*)b, &div, NULL) < 0)
3242 div = NULL;
3243 return (PyObject *)div;
Guido van Rossume32e0141992-01-19 16:31:05 +00003244}
3245
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003246/* PyLong/PyLong -> float, with correctly rounded result. */
3247
3248#define MANT_DIG_DIGITS (DBL_MANT_DIG / PyLong_SHIFT)
3249#define MANT_DIG_BITS (DBL_MANT_DIG % PyLong_SHIFT)
3250
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003251static PyObject *
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003252long_true_divide(PyObject *v, PyObject *w)
Tim Peters20dab9f2001-09-04 05:31:47 +00003253{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003254 PyLongObject *a, *b, *x;
3255 Py_ssize_t a_size, b_size, shift, extra_bits, diff, x_size, x_bits;
3256 digit mask, low;
3257 int inexact, negate, a_is_small, b_is_small;
3258 double dx, result;
Tim Peterse2a60002001-09-04 06:17:36 +00003259
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003260 CHECK_BINOP(v, w);
3261 a = (PyLongObject *)v;
3262 b = (PyLongObject *)w;
Tim Peterse2a60002001-09-04 06:17:36 +00003263
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003264 /*
3265 Method in a nutshell:
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003266
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003267 0. reduce to case a, b > 0; filter out obvious underflow/overflow
3268 1. choose a suitable integer 'shift'
3269 2. use integer arithmetic to compute x = floor(2**-shift*a/b)
3270 3. adjust x for correct rounding
3271 4. convert x to a double dx with the same value
3272 5. return ldexp(dx, shift).
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003273
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003274 In more detail:
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003275
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003276 0. For any a, a/0 raises ZeroDivisionError; for nonzero b, 0/b
3277 returns either 0.0 or -0.0, depending on the sign of b. For a and
3278 b both nonzero, ignore signs of a and b, and add the sign back in
3279 at the end. Now write a_bits and b_bits for the bit lengths of a
3280 and b respectively (that is, a_bits = 1 + floor(log_2(a)); likewise
3281 for b). Then
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003282
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003283 2**(a_bits - b_bits - 1) < a/b < 2**(a_bits - b_bits + 1).
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003284
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003285 So if a_bits - b_bits > DBL_MAX_EXP then a/b > 2**DBL_MAX_EXP and
3286 so overflows. Similarly, if a_bits - b_bits < DBL_MIN_EXP -
3287 DBL_MANT_DIG - 1 then a/b underflows to 0. With these cases out of
3288 the way, we can assume that
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003289
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003290 DBL_MIN_EXP - DBL_MANT_DIG - 1 <= a_bits - b_bits <= DBL_MAX_EXP.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003291
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003292 1. The integer 'shift' is chosen so that x has the right number of
3293 bits for a double, plus two or three extra bits that will be used
3294 in the rounding decisions. Writing a_bits and b_bits for the
3295 number of significant bits in a and b respectively, a
3296 straightforward formula for shift is:
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003297
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003298 shift = a_bits - b_bits - DBL_MANT_DIG - 2
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003299
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003300 This is fine in the usual case, but if a/b is smaller than the
3301 smallest normal float then it can lead to double rounding on an
3302 IEEE 754 platform, giving incorrectly rounded results. So we
3303 adjust the formula slightly. The actual formula used is:
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003304
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003305 shift = MAX(a_bits - b_bits, DBL_MIN_EXP) - DBL_MANT_DIG - 2
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003306
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003307 2. The quantity x is computed by first shifting a (left -shift bits
3308 if shift <= 0, right shift bits if shift > 0) and then dividing by
3309 b. For both the shift and the division, we keep track of whether
3310 the result is inexact, in a flag 'inexact'; this information is
3311 needed at the rounding stage.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003312
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003313 With the choice of shift above, together with our assumption that
3314 a_bits - b_bits >= DBL_MIN_EXP - DBL_MANT_DIG - 1, it follows
3315 that x >= 1.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003316
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003317 3. Now x * 2**shift <= a/b < (x+1) * 2**shift. We want to replace
3318 this with an exactly representable float of the form
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003319
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003320 round(x/2**extra_bits) * 2**(extra_bits+shift).
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003321
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003322 For float representability, we need x/2**extra_bits <
3323 2**DBL_MANT_DIG and extra_bits + shift >= DBL_MIN_EXP -
3324 DBL_MANT_DIG. This translates to the condition:
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003325
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003326 extra_bits >= MAX(x_bits, DBL_MIN_EXP - shift) - DBL_MANT_DIG
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003327
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003328 To round, we just modify the bottom digit of x in-place; this can
3329 end up giving a digit with value > PyLONG_MASK, but that's not a
3330 problem since digits can hold values up to 2*PyLONG_MASK+1.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003331
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003332 With the original choices for shift above, extra_bits will always
3333 be 2 or 3. Then rounding under the round-half-to-even rule, we
3334 round up iff the most significant of the extra bits is 1, and
3335 either: (a) the computation of x in step 2 had an inexact result,
3336 or (b) at least one other of the extra bits is 1, or (c) the least
3337 significant bit of x (above those to be rounded) is 1.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003338
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003339 4. Conversion to a double is straightforward; all floating-point
3340 operations involved in the conversion are exact, so there's no
3341 danger of rounding errors.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003342
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003343 5. Use ldexp(x, shift) to compute x*2**shift, the final result.
3344 The result will always be exactly representable as a double, except
3345 in the case that it overflows. To avoid dependence on the exact
3346 behaviour of ldexp on overflow, we check for overflow before
3347 applying ldexp. The result of ldexp is adjusted for sign before
3348 returning.
3349 */
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003350
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003351 /* Reduce to case where a and b are both positive. */
3352 a_size = ABS(Py_SIZE(a));
3353 b_size = ABS(Py_SIZE(b));
3354 negate = (Py_SIZE(a) < 0) ^ (Py_SIZE(b) < 0);
3355 if (b_size == 0) {
3356 PyErr_SetString(PyExc_ZeroDivisionError,
3357 "division by zero");
3358 goto error;
3359 }
3360 if (a_size == 0)
3361 goto underflow_or_zero;
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003362
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003363 /* Fast path for a and b small (exactly representable in a double).
3364 Relies on floating-point division being correctly rounded; results
3365 may be subject to double rounding on x86 machines that operate with
3366 the x87 FPU set to 64-bit precision. */
3367 a_is_small = a_size <= MANT_DIG_DIGITS ||
3368 (a_size == MANT_DIG_DIGITS+1 &&
3369 a->ob_digit[MANT_DIG_DIGITS] >> MANT_DIG_BITS == 0);
3370 b_is_small = b_size <= MANT_DIG_DIGITS ||
3371 (b_size == MANT_DIG_DIGITS+1 &&
3372 b->ob_digit[MANT_DIG_DIGITS] >> MANT_DIG_BITS == 0);
3373 if (a_is_small && b_is_small) {
3374 double da, db;
3375 da = a->ob_digit[--a_size];
3376 while (a_size > 0)
3377 da = da * PyLong_BASE + a->ob_digit[--a_size];
3378 db = b->ob_digit[--b_size];
3379 while (b_size > 0)
3380 db = db * PyLong_BASE + b->ob_digit[--b_size];
3381 result = da / db;
3382 goto success;
3383 }
Tim Peterse2a60002001-09-04 06:17:36 +00003384
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003385 /* Catch obvious cases of underflow and overflow */
3386 diff = a_size - b_size;
3387 if (diff > PY_SSIZE_T_MAX/PyLong_SHIFT - 1)
3388 /* Extreme overflow */
3389 goto overflow;
3390 else if (diff < 1 - PY_SSIZE_T_MAX/PyLong_SHIFT)
3391 /* Extreme underflow */
3392 goto underflow_or_zero;
3393 /* Next line is now safe from overflowing a Py_ssize_t */
3394 diff = diff * PyLong_SHIFT + bits_in_digit(a->ob_digit[a_size - 1]) -
3395 bits_in_digit(b->ob_digit[b_size - 1]);
3396 /* Now diff = a_bits - b_bits. */
3397 if (diff > DBL_MAX_EXP)
3398 goto overflow;
3399 else if (diff < DBL_MIN_EXP - DBL_MANT_DIG - 1)
3400 goto underflow_or_zero;
Tim Peterse2a60002001-09-04 06:17:36 +00003401
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003402 /* Choose value for shift; see comments for step 1 above. */
3403 shift = MAX(diff, DBL_MIN_EXP) - DBL_MANT_DIG - 2;
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003404
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003405 inexact = 0;
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003406
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003407 /* x = abs(a * 2**-shift) */
3408 if (shift <= 0) {
3409 Py_ssize_t i, shift_digits = -shift / PyLong_SHIFT;
3410 digit rem;
3411 /* x = a << -shift */
3412 if (a_size >= PY_SSIZE_T_MAX - 1 - shift_digits) {
3413 /* In practice, it's probably impossible to end up
3414 here. Both a and b would have to be enormous,
3415 using close to SIZE_T_MAX bytes of memory each. */
3416 PyErr_SetString(PyExc_OverflowError,
3417 "intermediate overflow during division");
3418 goto error;
3419 }
3420 x = _PyLong_New(a_size + shift_digits + 1);
3421 if (x == NULL)
3422 goto error;
3423 for (i = 0; i < shift_digits; i++)
3424 x->ob_digit[i] = 0;
3425 rem = v_lshift(x->ob_digit + shift_digits, a->ob_digit,
3426 a_size, -shift % PyLong_SHIFT);
3427 x->ob_digit[a_size + shift_digits] = rem;
3428 }
3429 else {
3430 Py_ssize_t shift_digits = shift / PyLong_SHIFT;
3431 digit rem;
3432 /* x = a >> shift */
3433 assert(a_size >= shift_digits);
3434 x = _PyLong_New(a_size - shift_digits);
3435 if (x == NULL)
3436 goto error;
3437 rem = v_rshift(x->ob_digit, a->ob_digit + shift_digits,
3438 a_size - shift_digits, shift % PyLong_SHIFT);
3439 /* set inexact if any of the bits shifted out is nonzero */
3440 if (rem)
3441 inexact = 1;
3442 while (!inexact && shift_digits > 0)
3443 if (a->ob_digit[--shift_digits])
3444 inexact = 1;
3445 }
3446 long_normalize(x);
3447 x_size = Py_SIZE(x);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003448
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003449 /* x //= b. If the remainder is nonzero, set inexact. We own the only
3450 reference to x, so it's safe to modify it in-place. */
3451 if (b_size == 1) {
3452 digit rem = inplace_divrem1(x->ob_digit, x->ob_digit, x_size,
3453 b->ob_digit[0]);
3454 long_normalize(x);
3455 if (rem)
3456 inexact = 1;
3457 }
3458 else {
3459 PyLongObject *div, *rem;
3460 div = x_divrem(x, b, &rem);
3461 Py_DECREF(x);
3462 x = div;
3463 if (x == NULL)
3464 goto error;
3465 if (Py_SIZE(rem))
3466 inexact = 1;
3467 Py_DECREF(rem);
3468 }
3469 x_size = ABS(Py_SIZE(x));
3470 assert(x_size > 0); /* result of division is never zero */
3471 x_bits = (x_size-1)*PyLong_SHIFT+bits_in_digit(x->ob_digit[x_size-1]);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003472
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003473 /* The number of extra bits that have to be rounded away. */
3474 extra_bits = MAX(x_bits, DBL_MIN_EXP - shift) - DBL_MANT_DIG;
3475 assert(extra_bits == 2 || extra_bits == 3);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003476
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003477 /* Round by directly modifying the low digit of x. */
3478 mask = (digit)1 << (extra_bits - 1);
3479 low = x->ob_digit[0] | inexact;
3480 if (low & mask && low & (3*mask-1))
3481 low += mask;
3482 x->ob_digit[0] = low & ~(mask-1U);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003483
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003484 /* Convert x to a double dx; the conversion is exact. */
3485 dx = x->ob_digit[--x_size];
3486 while (x_size > 0)
3487 dx = dx * PyLong_BASE + x->ob_digit[--x_size];
3488 Py_DECREF(x);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003489
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003490 /* Check whether ldexp result will overflow a double. */
3491 if (shift + x_bits >= DBL_MAX_EXP &&
3492 (shift + x_bits > DBL_MAX_EXP || dx == ldexp(1.0, (int)x_bits)))
3493 goto overflow;
3494 result = ldexp(dx, (int)shift);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003495
3496 success:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003497 return PyFloat_FromDouble(negate ? -result : result);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003498
3499 underflow_or_zero:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003500 return PyFloat_FromDouble(negate ? -0.0 : 0.0);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003501
3502 overflow:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003503 PyErr_SetString(PyExc_OverflowError,
3504 "integer division result too large for a float");
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003505 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003506 return NULL;
Tim Peters20dab9f2001-09-04 05:31:47 +00003507}
3508
3509static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003510long_mod(PyObject *a, PyObject *b)
Guido van Rossume32e0141992-01-19 16:31:05 +00003511{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003512 PyLongObject *mod;
Neil Schemenauerba872e22001-01-04 01:46:03 +00003513
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003514 CHECK_BINOP(a, b);
3515
3516 if (l_divmod((PyLongObject*)a, (PyLongObject*)b, NULL, &mod) < 0)
3517 mod = NULL;
3518 return (PyObject *)mod;
Guido van Rossume32e0141992-01-19 16:31:05 +00003519}
3520
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003521static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003522long_divmod(PyObject *a, PyObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003523{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003524 PyLongObject *div, *mod;
3525 PyObject *z;
Neil Schemenauerba872e22001-01-04 01:46:03 +00003526
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003527 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003528
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003529 if (l_divmod((PyLongObject*)a, (PyLongObject*)b, &div, &mod) < 0) {
3530 return NULL;
3531 }
3532 z = PyTuple_New(2);
3533 if (z != NULL) {
3534 PyTuple_SetItem(z, 0, (PyObject *) div);
3535 PyTuple_SetItem(z, 1, (PyObject *) mod);
3536 }
3537 else {
3538 Py_DECREF(div);
3539 Py_DECREF(mod);
3540 }
3541 return z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003542}
3543
Tim Peters47e52ee2004-08-30 02:44:38 +00003544/* pow(v, w, x) */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003545static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00003546long_pow(PyObject *v, PyObject *w, PyObject *x)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003547{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003548 PyLongObject *a, *b, *c; /* a,b,c = v,w,x */
3549 int negativeOutput = 0; /* if x<0 return negative output */
Neil Schemenauerba872e22001-01-04 01:46:03 +00003550
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003551 PyLongObject *z = NULL; /* accumulated result */
3552 Py_ssize_t i, j, k; /* counters */
3553 PyLongObject *temp = NULL;
Tim Peters47e52ee2004-08-30 02:44:38 +00003554
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003555 /* 5-ary values. If the exponent is large enough, table is
3556 * precomputed so that table[i] == a**i % c for i in range(32).
3557 */
3558 PyLongObject *table[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3559 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
Tim Peters47e52ee2004-08-30 02:44:38 +00003560
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003561 /* a, b, c = v, w, x */
3562 CHECK_BINOP(v, w);
3563 a = (PyLongObject*)v; Py_INCREF(a);
3564 b = (PyLongObject*)w; Py_INCREF(b);
3565 if (PyLong_Check(x)) {
3566 c = (PyLongObject *)x;
3567 Py_INCREF(x);
3568 }
3569 else if (x == Py_None)
3570 c = NULL;
3571 else {
3572 Py_DECREF(a);
3573 Py_DECREF(b);
3574 Py_INCREF(Py_NotImplemented);
3575 return Py_NotImplemented;
3576 }
Tim Peters4c483c42001-09-05 06:24:58 +00003577
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003578 if (Py_SIZE(b) < 0) { /* if exponent is negative */
3579 if (c) {
3580 PyErr_SetString(PyExc_TypeError, "pow() 2nd argument "
3581 "cannot be negative when 3rd argument specified");
3582 goto Error;
3583 }
3584 else {
3585 /* else return a float. This works because we know
3586 that this calls float_pow() which converts its
3587 arguments to double. */
3588 Py_DECREF(a);
3589 Py_DECREF(b);
3590 return PyFloat_Type.tp_as_number->nb_power(v, w, x);
3591 }
3592 }
Tim Peters47e52ee2004-08-30 02:44:38 +00003593
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003594 if (c) {
3595 /* if modulus == 0:
3596 raise ValueError() */
3597 if (Py_SIZE(c) == 0) {
3598 PyErr_SetString(PyExc_ValueError,
3599 "pow() 3rd argument cannot be 0");
3600 goto Error;
3601 }
Tim Peters47e52ee2004-08-30 02:44:38 +00003602
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003603 /* if modulus < 0:
3604 negativeOutput = True
3605 modulus = -modulus */
3606 if (Py_SIZE(c) < 0) {
3607 negativeOutput = 1;
3608 temp = (PyLongObject *)_PyLong_Copy(c);
3609 if (temp == NULL)
3610 goto Error;
3611 Py_DECREF(c);
3612 c = temp;
3613 temp = NULL;
3614 NEGATE(c);
3615 }
Tim Peters47e52ee2004-08-30 02:44:38 +00003616
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003617 /* if modulus == 1:
3618 return 0 */
3619 if ((Py_SIZE(c) == 1) && (c->ob_digit[0] == 1)) {
3620 z = (PyLongObject *)PyLong_FromLong(0L);
3621 goto Done;
3622 }
Tim Peters47e52ee2004-08-30 02:44:38 +00003623
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003624 /* if base < 0:
3625 base = base % modulus
3626 Having the base positive just makes things easier. */
3627 if (Py_SIZE(a) < 0) {
3628 if (l_divmod(a, c, NULL, &temp) < 0)
3629 goto Error;
3630 Py_DECREF(a);
3631 a = temp;
3632 temp = NULL;
3633 }
3634 }
Tim Peters47e52ee2004-08-30 02:44:38 +00003635
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003636 /* At this point a, b, and c are guaranteed non-negative UNLESS
3637 c is NULL, in which case a may be negative. */
Tim Peters47e52ee2004-08-30 02:44:38 +00003638
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003639 z = (PyLongObject *)PyLong_FromLong(1L);
3640 if (z == NULL)
3641 goto Error;
Tim Peters47e52ee2004-08-30 02:44:38 +00003642
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003643 /* Perform a modular reduction, X = X % c, but leave X alone if c
3644 * is NULL.
3645 */
3646#define REDUCE(X) \
3647 if (c != NULL) { \
3648 if (l_divmod(X, c, NULL, &temp) < 0) \
3649 goto Error; \
3650 Py_XDECREF(X); \
3651 X = temp; \
3652 temp = NULL; \
3653 }
Tim Peters47e52ee2004-08-30 02:44:38 +00003654
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003655 /* Multiply two values, then reduce the result:
3656 result = X*Y % c. If c is NULL, skip the mod. */
3657#define MULT(X, Y, result) \
3658{ \
3659 temp = (PyLongObject *)long_mul(X, Y); \
3660 if (temp == NULL) \
3661 goto Error; \
3662 Py_XDECREF(result); \
3663 result = temp; \
3664 temp = NULL; \
3665 REDUCE(result) \
Tim Peters47e52ee2004-08-30 02:44:38 +00003666}
3667
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003668 if (Py_SIZE(b) <= FIVEARY_CUTOFF) {
3669 /* Left-to-right binary exponentiation (HAC Algorithm 14.79) */
3670 /* http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf */
3671 for (i = Py_SIZE(b) - 1; i >= 0; --i) {
3672 digit bi = b->ob_digit[i];
Tim Peters47e52ee2004-08-30 02:44:38 +00003673
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003674 for (j = (digit)1 << (PyLong_SHIFT-1); j != 0; j >>= 1) {
3675 MULT(z, z, z)
3676 if (bi & j)
3677 MULT(z, a, z)
3678 }
3679 }
3680 }
3681 else {
3682 /* Left-to-right 5-ary exponentiation (HAC Algorithm 14.82) */
3683 Py_INCREF(z); /* still holds 1L */
3684 table[0] = z;
3685 for (i = 1; i < 32; ++i)
3686 MULT(table[i-1], a, table[i])
Tim Peters47e52ee2004-08-30 02:44:38 +00003687
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003688 for (i = Py_SIZE(b) - 1; i >= 0; --i) {
3689 const digit bi = b->ob_digit[i];
Tim Peters47e52ee2004-08-30 02:44:38 +00003690
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003691 for (j = PyLong_SHIFT - 5; j >= 0; j -= 5) {
3692 const int index = (bi >> j) & 0x1f;
3693 for (k = 0; k < 5; ++k)
3694 MULT(z, z, z)
3695 if (index)
3696 MULT(z, table[index], z)
3697 }
3698 }
3699 }
Tim Peters47e52ee2004-08-30 02:44:38 +00003700
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003701 if (negativeOutput && (Py_SIZE(z) != 0)) {
3702 temp = (PyLongObject *)long_sub(z, c);
3703 if (temp == NULL)
3704 goto Error;
3705 Py_DECREF(z);
3706 z = temp;
3707 temp = NULL;
3708 }
3709 goto Done;
Tim Peters47e52ee2004-08-30 02:44:38 +00003710
3711 Error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003712 if (z != NULL) {
3713 Py_DECREF(z);
3714 z = NULL;
3715 }
3716 /* fall through */
Tim Peters47e52ee2004-08-30 02:44:38 +00003717 Done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003718 if (Py_SIZE(b) > FIVEARY_CUTOFF) {
3719 for (i = 0; i < 32; ++i)
3720 Py_XDECREF(table[i]);
3721 }
3722 Py_DECREF(a);
3723 Py_DECREF(b);
3724 Py_XDECREF(c);
3725 Py_XDECREF(temp);
3726 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003727}
3728
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003729static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003730long_invert(PyLongObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003731{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003732 /* Implement ~x as -(x+1) */
3733 PyLongObject *x;
3734 PyLongObject *w;
3735 if (ABS(Py_SIZE(v)) <=1)
3736 return PyLong_FromLong(-(MEDIUM_VALUE(v)+1));
3737 w = (PyLongObject *)PyLong_FromLong(1L);
3738 if (w == NULL)
3739 return NULL;
3740 x = (PyLongObject *) long_add(v, w);
3741 Py_DECREF(w);
3742 if (x == NULL)
3743 return NULL;
3744 Py_SIZE(x) = -(Py_SIZE(x));
3745 return (PyObject *)maybe_small_long(x);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003746}
3747
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003748static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003749long_neg(PyLongObject *v)
Guido van Rossumc6913e71991-11-19 20:26:46 +00003750{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003751 PyLongObject *z;
3752 if (ABS(Py_SIZE(v)) <= 1)
3753 return PyLong_FromLong(-MEDIUM_VALUE(v));
3754 z = (PyLongObject *)_PyLong_Copy(v);
3755 if (z != NULL)
3756 Py_SIZE(z) = -(Py_SIZE(v));
3757 return (PyObject *)z;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003758}
3759
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003760static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003761long_abs(PyLongObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003762{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003763 if (Py_SIZE(v) < 0)
3764 return long_neg(v);
3765 else
3766 return long_long((PyObject *)v);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003767}
3768
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00003769static int
Jack Diederich4dafcc42006-11-28 19:15:13 +00003770long_bool(PyLongObject *v)
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00003771{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003772 return Py_SIZE(v) != 0;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003773}
3774
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003775static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003776long_rshift(PyLongObject *a, PyLongObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00003777{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003778 PyLongObject *z = NULL;
3779 Py_ssize_t shiftby, newsize, wordshift, loshift, hishift, i, j;
3780 digit lomask, himask;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003781
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003782 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003783
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003784 if (Py_SIZE(a) < 0) {
3785 /* Right shifting negative numbers is harder */
3786 PyLongObject *a1, *a2;
3787 a1 = (PyLongObject *) long_invert(a);
3788 if (a1 == NULL)
3789 goto rshift_error;
3790 a2 = (PyLongObject *) long_rshift(a1, b);
3791 Py_DECREF(a1);
3792 if (a2 == NULL)
3793 goto rshift_error;
3794 z = (PyLongObject *) long_invert(a2);
3795 Py_DECREF(a2);
3796 }
3797 else {
3798 shiftby = PyLong_AsSsize_t((PyObject *)b);
3799 if (shiftby == -1L && PyErr_Occurred())
3800 goto rshift_error;
3801 if (shiftby < 0) {
3802 PyErr_SetString(PyExc_ValueError,
3803 "negative shift count");
3804 goto rshift_error;
3805 }
3806 wordshift = shiftby / PyLong_SHIFT;
3807 newsize = ABS(Py_SIZE(a)) - wordshift;
3808 if (newsize <= 0)
3809 return PyLong_FromLong(0);
3810 loshift = shiftby % PyLong_SHIFT;
3811 hishift = PyLong_SHIFT - loshift;
3812 lomask = ((digit)1 << hishift) - 1;
3813 himask = PyLong_MASK ^ lomask;
3814 z = _PyLong_New(newsize);
3815 if (z == NULL)
3816 goto rshift_error;
3817 if (Py_SIZE(a) < 0)
3818 Py_SIZE(z) = -(Py_SIZE(z));
3819 for (i = 0, j = wordshift; i < newsize; i++, j++) {
3820 z->ob_digit[i] = (a->ob_digit[j] >> loshift) & lomask;
3821 if (i+1 < newsize)
3822 z->ob_digit[i] |=
3823 (a->ob_digit[j+1] << hishift) & himask;
3824 }
3825 z = long_normalize(z);
3826 }
Neil Schemenauerba872e22001-01-04 01:46:03 +00003827rshift_error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003828 return (PyObject *) maybe_small_long(z);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003829
Guido van Rossumc6913e71991-11-19 20:26:46 +00003830}
3831
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003832static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00003833long_lshift(PyObject *v, PyObject *w)
Guido van Rossumc6913e71991-11-19 20:26:46 +00003834{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003835 /* This version due to Tim Peters */
3836 PyLongObject *a = (PyLongObject*)v;
3837 PyLongObject *b = (PyLongObject*)w;
3838 PyLongObject *z = NULL;
3839 Py_ssize_t shiftby, oldsize, newsize, wordshift, remshift, i, j;
3840 twodigits accum;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003841
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003842 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003843
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003844 shiftby = PyLong_AsSsize_t((PyObject *)b);
3845 if (shiftby == -1L && PyErr_Occurred())
3846 goto lshift_error;
3847 if (shiftby < 0) {
3848 PyErr_SetString(PyExc_ValueError, "negative shift count");
3849 goto lshift_error;
3850 }
3851 /* wordshift, remshift = divmod(shiftby, PyLong_SHIFT) */
3852 wordshift = shiftby / PyLong_SHIFT;
3853 remshift = shiftby - wordshift * PyLong_SHIFT;
Guido van Rossumf2e499b1997-03-16 00:37:59 +00003854
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003855 oldsize = ABS(Py_SIZE(a));
3856 newsize = oldsize + wordshift;
3857 if (remshift)
3858 ++newsize;
3859 z = _PyLong_New(newsize);
3860 if (z == NULL)
3861 goto lshift_error;
3862 if (Py_SIZE(a) < 0)
3863 NEGATE(z);
3864 for (i = 0; i < wordshift; i++)
3865 z->ob_digit[i] = 0;
3866 accum = 0;
3867 for (i = wordshift, j = 0; j < oldsize; i++, j++) {
3868 accum |= (twodigits)a->ob_digit[j] << remshift;
3869 z->ob_digit[i] = (digit)(accum & PyLong_MASK);
3870 accum >>= PyLong_SHIFT;
3871 }
3872 if (remshift)
3873 z->ob_digit[newsize-1] = (digit)accum;
3874 else
3875 assert(!accum);
3876 z = long_normalize(z);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003877lshift_error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003878 return (PyObject *) maybe_small_long(z);
Guido van Rossumc6913e71991-11-19 20:26:46 +00003879}
3880
Mark Dickinson27a87a22009-10-25 20:43:34 +00003881/* Compute two's complement of digit vector a[0:m], writing result to
3882 z[0:m]. The digit vector a need not be normalized, but should not
3883 be entirely zero. a and z may point to the same digit vector. */
3884
3885static void
3886v_complement(digit *z, digit *a, Py_ssize_t m)
3887{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003888 Py_ssize_t i;
3889 digit carry = 1;
3890 for (i = 0; i < m; ++i) {
3891 carry += a[i] ^ PyLong_MASK;
3892 z[i] = carry & PyLong_MASK;
3893 carry >>= PyLong_SHIFT;
3894 }
3895 assert(carry == 0);
Mark Dickinson27a87a22009-10-25 20:43:34 +00003896}
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003897
3898/* Bitwise and/xor/or operations */
3899
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003900static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003901long_bitwise(PyLongObject *a,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003902 int op, /* '&', '|', '^' */
3903 PyLongObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00003904{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003905 int nega, negb, negz;
3906 Py_ssize_t size_a, size_b, size_z, i;
3907 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003908
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003909 /* Bitwise operations for negative numbers operate as though
3910 on a two's complement representation. So convert arguments
3911 from sign-magnitude to two's complement, and convert the
3912 result back to sign-magnitude at the end. */
Mark Dickinson27a87a22009-10-25 20:43:34 +00003913
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003914 /* If a is negative, replace it by its two's complement. */
3915 size_a = ABS(Py_SIZE(a));
3916 nega = Py_SIZE(a) < 0;
3917 if (nega) {
3918 z = _PyLong_New(size_a);
3919 if (z == NULL)
3920 return NULL;
3921 v_complement(z->ob_digit, a->ob_digit, size_a);
3922 a = z;
3923 }
3924 else
3925 /* Keep reference count consistent. */
3926 Py_INCREF(a);
Mark Dickinson27a87a22009-10-25 20:43:34 +00003927
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003928 /* Same for b. */
3929 size_b = ABS(Py_SIZE(b));
3930 negb = Py_SIZE(b) < 0;
3931 if (negb) {
3932 z = _PyLong_New(size_b);
3933 if (z == NULL) {
3934 Py_DECREF(a);
3935 return NULL;
3936 }
3937 v_complement(z->ob_digit, b->ob_digit, size_b);
3938 b = z;
3939 }
3940 else
3941 Py_INCREF(b);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003942
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003943 /* Swap a and b if necessary to ensure size_a >= size_b. */
3944 if (size_a < size_b) {
3945 z = a; a = b; b = z;
3946 size_z = size_a; size_a = size_b; size_b = size_z;
3947 negz = nega; nega = negb; negb = negz;
3948 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00003949
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003950 /* JRH: The original logic here was to allocate the result value (z)
3951 as the longer of the two operands. However, there are some cases
3952 where the result is guaranteed to be shorter than that: AND of two
3953 positives, OR of two negatives: use the shorter number. AND with
3954 mixed signs: use the positive number. OR with mixed signs: use the
3955 negative number.
3956 */
3957 switch (op) {
3958 case '^':
3959 negz = nega ^ negb;
3960 size_z = size_a;
3961 break;
3962 case '&':
3963 negz = nega & negb;
3964 size_z = negb ? size_a : size_b;
3965 break;
3966 case '|':
3967 negz = nega | negb;
3968 size_z = negb ? size_b : size_a;
3969 break;
3970 default:
3971 PyErr_BadArgument();
3972 return NULL;
3973 }
Guido van Rossumbd3a5271998-08-11 15:04:47 +00003974
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003975 /* We allow an extra digit if z is negative, to make sure that
3976 the final two's complement of z doesn't overflow. */
3977 z = _PyLong_New(size_z + negz);
3978 if (z == NULL) {
3979 Py_DECREF(a);
3980 Py_DECREF(b);
3981 return NULL;
3982 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00003983
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003984 /* Compute digits for overlap of a and b. */
3985 switch(op) {
3986 case '&':
3987 for (i = 0; i < size_b; ++i)
3988 z->ob_digit[i] = a->ob_digit[i] & b->ob_digit[i];
3989 break;
3990 case '|':
3991 for (i = 0; i < size_b; ++i)
3992 z->ob_digit[i] = a->ob_digit[i] | b->ob_digit[i];
3993 break;
3994 case '^':
3995 for (i = 0; i < size_b; ++i)
3996 z->ob_digit[i] = a->ob_digit[i] ^ b->ob_digit[i];
3997 break;
3998 default:
3999 PyErr_BadArgument();
4000 return NULL;
4001 }
Mark Dickinson27a87a22009-10-25 20:43:34 +00004002
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004003 /* Copy any remaining digits of a, inverting if necessary. */
4004 if (op == '^' && negb)
4005 for (; i < size_z; ++i)
4006 z->ob_digit[i] = a->ob_digit[i] ^ PyLong_MASK;
4007 else if (i < size_z)
4008 memcpy(&z->ob_digit[i], &a->ob_digit[i],
4009 (size_z-i)*sizeof(digit));
Mark Dickinson27a87a22009-10-25 20:43:34 +00004010
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004011 /* Complement result if negative. */
4012 if (negz) {
4013 Py_SIZE(z) = -(Py_SIZE(z));
4014 z->ob_digit[size_z] = PyLong_MASK;
4015 v_complement(z->ob_digit, z->ob_digit, size_z+1);
4016 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00004017
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004018 Py_DECREF(a);
4019 Py_DECREF(b);
4020 return (PyObject *)maybe_small_long(long_normalize(z));
Guido van Rossumc6913e71991-11-19 20:26:46 +00004021}
4022
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004023static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00004024long_and(PyObject *a, PyObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00004025{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004026 PyObject *c;
4027 CHECK_BINOP(a, b);
4028 c = long_bitwise((PyLongObject*)a, '&', (PyLongObject*)b);
4029 return c;
Guido van Rossumc6913e71991-11-19 20:26:46 +00004030}
4031
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004032static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00004033long_xor(PyObject *a, PyObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00004034{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004035 PyObject *c;
4036 CHECK_BINOP(a, b);
4037 c = long_bitwise((PyLongObject*)a, '^', (PyLongObject*)b);
4038 return c;
Guido van Rossumc6913e71991-11-19 20:26:46 +00004039}
4040
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004041static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00004042long_or(PyObject *a, PyObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00004043{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004044 PyObject *c;
4045 CHECK_BINOP(a, b);
4046 c = long_bitwise((PyLongObject*)a, '|', (PyLongObject*)b);
4047 return c;
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00004048}
4049
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004050static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00004051long_long(PyObject *v)
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004052{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004053 if (PyLong_CheckExact(v))
4054 Py_INCREF(v);
4055 else
4056 v = _PyLong_Copy((PyLongObject *)v);
4057 return v;
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004058}
4059
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004060static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00004061long_float(PyObject *v)
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004062{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004063 double result;
4064 result = PyLong_AsDouble(v);
4065 if (result == -1.0 && PyErr_Occurred())
4066 return NULL;
4067 return PyFloat_FromDouble(result);
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004068}
4069
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004070static PyObject *
Guido van Rossumbef14172001-08-29 15:47:46 +00004071long_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004072
Tim Peters6d6c1a32001-08-02 04:15:00 +00004073static PyObject *
4074long_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
4075{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004076 PyObject *x = NULL;
4077 int base = -909; /* unlikely! */
4078 static char *kwlist[] = {"x", "base", 0};
Tim Peters6d6c1a32001-08-02 04:15:00 +00004079
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004080 if (type != &PyLong_Type)
4081 return long_subtype_new(type, args, kwds); /* Wimp out */
4082 if (!PyArg_ParseTupleAndKeywords(args, kwds, "|Oi:int", kwlist,
4083 &x, &base))
4084 return NULL;
4085 if (x == NULL)
4086 return PyLong_FromLong(0L);
4087 if (base == -909)
4088 return PyNumber_Long(x);
4089 else if (PyUnicode_Check(x))
4090 return PyLong_FromUnicode(PyUnicode_AS_UNICODE(x),
4091 PyUnicode_GET_SIZE(x),
4092 base);
4093 else if (PyByteArray_Check(x) || PyBytes_Check(x)) {
4094 /* Since PyLong_FromString doesn't have a length parameter,
4095 * check here for possible NULs in the string. */
4096 char *string;
4097 Py_ssize_t size = Py_SIZE(x);
4098 if (PyByteArray_Check(x))
4099 string = PyByteArray_AS_STRING(x);
4100 else
4101 string = PyBytes_AS_STRING(x);
4102 if (strlen(string) != (size_t)size) {
4103 /* We only see this if there's a null byte in x,
4104 x is a bytes or buffer, *and* a base is given. */
4105 PyErr_Format(PyExc_ValueError,
4106 "invalid literal for int() with base %d: %R",
4107 base, x);
4108 return NULL;
4109 }
4110 return PyLong_FromString(string, NULL, base);
4111 }
4112 else {
4113 PyErr_SetString(PyExc_TypeError,
4114 "int() can't convert non-string with explicit base");
4115 return NULL;
4116 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00004117}
4118
Guido van Rossumbef14172001-08-29 15:47:46 +00004119/* Wimpy, slow approach to tp_new calls for subtypes of long:
4120 first create a regular long from whatever arguments we got,
4121 then allocate a subtype instance and initialize it from
4122 the regular long. The regular long is then thrown away.
4123*/
4124static PyObject *
4125long_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
4126{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004127 PyLongObject *tmp, *newobj;
4128 Py_ssize_t i, n;
Guido van Rossumbef14172001-08-29 15:47:46 +00004129
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004130 assert(PyType_IsSubtype(type, &PyLong_Type));
4131 tmp = (PyLongObject *)long_new(&PyLong_Type, args, kwds);
4132 if (tmp == NULL)
4133 return NULL;
4134 assert(PyLong_CheckExact(tmp));
4135 n = Py_SIZE(tmp);
4136 if (n < 0)
4137 n = -n;
4138 newobj = (PyLongObject *)type->tp_alloc(type, n);
4139 if (newobj == NULL) {
4140 Py_DECREF(tmp);
4141 return NULL;
4142 }
4143 assert(PyLong_Check(newobj));
4144 Py_SIZE(newobj) = Py_SIZE(tmp);
4145 for (i = 0; i < n; i++)
4146 newobj->ob_digit[i] = tmp->ob_digit[i];
4147 Py_DECREF(tmp);
4148 return (PyObject *)newobj;
Guido van Rossumbef14172001-08-29 15:47:46 +00004149}
4150
Guido van Rossum5d9113d2003-01-29 17:58:45 +00004151static PyObject *
4152long_getnewargs(PyLongObject *v)
4153{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004154 return Py_BuildValue("(N)", _PyLong_Copy(v));
Guido van Rossum5d9113d2003-01-29 17:58:45 +00004155}
4156
Guido van Rossumb43daf72007-08-01 18:08:08 +00004157static PyObject *
Mark Dickinson6bf19002009-05-02 17:57:52 +00004158long_get0(PyLongObject *v, void *context) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004159 return PyLong_FromLong(0L);
Mark Dickinson6bf19002009-05-02 17:57:52 +00004160}
4161
4162static PyObject *
4163long_get1(PyLongObject *v, void *context) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004164 return PyLong_FromLong(1L);
Guido van Rossumb43daf72007-08-01 18:08:08 +00004165}
4166
Guido van Rossum2fa33db2007-08-23 22:07:24 +00004167static PyObject *
Eric Smith8c663262007-08-25 02:26:07 +00004168long__format__(PyObject *self, PyObject *args)
4169{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004170 PyObject *format_spec;
Eric Smith4a7d76d2008-05-30 18:10:19 +00004171
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004172 if (!PyArg_ParseTuple(args, "U:__format__", &format_spec))
4173 return NULL;
4174 return _PyLong_FormatAdvanced(self,
4175 PyUnicode_AS_UNICODE(format_spec),
4176 PyUnicode_GET_SIZE(format_spec));
Eric Smith8c663262007-08-25 02:26:07 +00004177}
4178
Eric Smith8c663262007-08-25 02:26:07 +00004179static PyObject *
Guido van Rossum2fa33db2007-08-23 22:07:24 +00004180long_round(PyObject *self, PyObject *args)
4181{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004182 PyObject *o_ndigits=NULL, *temp;
4183 PyLongObject *pow=NULL, *q=NULL, *r=NULL, *ndigits=NULL, *one;
4184 int errcode;
4185 digit q_mod_4;
Guido van Rossum2fa33db2007-08-23 22:07:24 +00004186
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004187 /* Notes on the algorithm: to round to the nearest 10**n (n positive),
4188 the straightforward method is:
Mark Dickinson1124e712009-01-28 21:25:58 +00004189
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004190 (1) divide by 10**n
4191 (2) round to nearest integer (round to even in case of tie)
4192 (3) multiply result by 10**n.
Mark Dickinson1124e712009-01-28 21:25:58 +00004193
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004194 But the rounding step involves examining the fractional part of the
4195 quotient to see whether it's greater than 0.5 or not. Since we
4196 want to do the whole calculation in integer arithmetic, it's
4197 simpler to do:
Mark Dickinson1124e712009-01-28 21:25:58 +00004198
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004199 (1) divide by (10**n)/2
4200 (2) round to nearest multiple of 2 (multiple of 4 in case of tie)
4201 (3) multiply result by (10**n)/2.
Mark Dickinson1124e712009-01-28 21:25:58 +00004202
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004203 Then all we need to know about the fractional part of the quotient
4204 arising in step (2) is whether it's zero or not.
Mark Dickinson1124e712009-01-28 21:25:58 +00004205
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004206 Doing both a multiplication and division is wasteful, and is easily
4207 avoided if we just figure out how much to adjust the original input
4208 by to do the rounding.
Mark Dickinson1124e712009-01-28 21:25:58 +00004209
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004210 Here's the whole algorithm expressed in Python.
Mark Dickinson1124e712009-01-28 21:25:58 +00004211
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004212 def round(self, ndigits = None):
4213 """round(int, int) -> int"""
4214 if ndigits is None or ndigits >= 0:
4215 return self
4216 pow = 10**-ndigits >> 1
4217 q, r = divmod(self, pow)
4218 self -= r
4219 if (q & 1 != 0):
4220 if (q & 2 == r == 0):
4221 self -= pow
4222 else:
4223 self += pow
4224 return self
Mark Dickinson1124e712009-01-28 21:25:58 +00004225
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004226 */
4227 if (!PyArg_ParseTuple(args, "|O", &o_ndigits))
4228 return NULL;
4229 if (o_ndigits == NULL)
4230 return long_long(self);
Guido van Rossum2fa33db2007-08-23 22:07:24 +00004231
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004232 ndigits = (PyLongObject *)PyNumber_Index(o_ndigits);
4233 if (ndigits == NULL)
4234 return NULL;
Mark Dickinson1124e712009-01-28 21:25:58 +00004235
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004236 if (Py_SIZE(ndigits) >= 0) {
4237 Py_DECREF(ndigits);
4238 return long_long(self);
4239 }
Mark Dickinson1124e712009-01-28 21:25:58 +00004240
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004241 Py_INCREF(self); /* to keep refcounting simple */
4242 /* we now own references to self, ndigits */
Mark Dickinson1124e712009-01-28 21:25:58 +00004243
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004244 /* pow = 10 ** -ndigits >> 1 */
4245 pow = (PyLongObject *)PyLong_FromLong(10L);
4246 if (pow == NULL)
4247 goto error;
4248 temp = long_neg(ndigits);
4249 Py_DECREF(ndigits);
4250 ndigits = (PyLongObject *)temp;
4251 if (ndigits == NULL)
4252 goto error;
4253 temp = long_pow((PyObject *)pow, (PyObject *)ndigits, Py_None);
4254 Py_DECREF(pow);
4255 pow = (PyLongObject *)temp;
4256 if (pow == NULL)
4257 goto error;
4258 assert(PyLong_Check(pow)); /* check long_pow returned a long */
4259 one = (PyLongObject *)PyLong_FromLong(1L);
4260 if (one == NULL)
4261 goto error;
4262 temp = long_rshift(pow, one);
4263 Py_DECREF(one);
4264 Py_DECREF(pow);
4265 pow = (PyLongObject *)temp;
4266 if (pow == NULL)
4267 goto error;
Mark Dickinson1124e712009-01-28 21:25:58 +00004268
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004269 /* q, r = divmod(self, pow) */
4270 errcode = l_divmod((PyLongObject *)self, pow, &q, &r);
4271 if (errcode == -1)
4272 goto error;
Mark Dickinson1124e712009-01-28 21:25:58 +00004273
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004274 /* self -= r */
4275 temp = long_sub((PyLongObject *)self, r);
4276 Py_DECREF(self);
4277 self = temp;
4278 if (self == NULL)
4279 goto error;
Mark Dickinson1124e712009-01-28 21:25:58 +00004280
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004281 /* get value of quotient modulo 4 */
4282 if (Py_SIZE(q) == 0)
4283 q_mod_4 = 0;
4284 else if (Py_SIZE(q) > 0)
4285 q_mod_4 = q->ob_digit[0] & 3;
4286 else
4287 q_mod_4 = (PyLong_BASE-q->ob_digit[0]) & 3;
Mark Dickinson1124e712009-01-28 21:25:58 +00004288
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004289 if ((q_mod_4 & 1) == 1) {
4290 /* q is odd; round self up or down by adding or subtracting pow */
4291 if (q_mod_4 == 1 && Py_SIZE(r) == 0)
4292 temp = (PyObject *)long_sub((PyLongObject *)self, pow);
4293 else
4294 temp = (PyObject *)long_add((PyLongObject *)self, pow);
4295 Py_DECREF(self);
4296 self = temp;
4297 if (self == NULL)
4298 goto error;
4299 }
4300 Py_DECREF(q);
4301 Py_DECREF(r);
4302 Py_DECREF(pow);
4303 Py_DECREF(ndigits);
4304 return self;
Mark Dickinson1124e712009-01-28 21:25:58 +00004305
4306 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004307 Py_XDECREF(q);
4308 Py_XDECREF(r);
4309 Py_XDECREF(pow);
4310 Py_XDECREF(self);
4311 Py_XDECREF(ndigits);
4312 return NULL;
Guido van Rossum2fa33db2007-08-23 22:07:24 +00004313}
4314
Martin v. Löwis00709aa2008-06-04 14:18:43 +00004315static PyObject *
4316long_sizeof(PyLongObject *v)
4317{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004318 Py_ssize_t res;
Martin v. Löwis00709aa2008-06-04 14:18:43 +00004319
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004320 res = offsetof(PyLongObject, ob_digit) + ABS(Py_SIZE(v))*sizeof(digit);
4321 return PyLong_FromSsize_t(res);
Martin v. Löwis00709aa2008-06-04 14:18:43 +00004322}
4323
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004324static PyObject *
4325long_bit_length(PyLongObject *v)
4326{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004327 PyLongObject *result, *x, *y;
4328 Py_ssize_t ndigits, msd_bits = 0;
4329 digit msd;
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004330
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004331 assert(v != NULL);
4332 assert(PyLong_Check(v));
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004333
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004334 ndigits = ABS(Py_SIZE(v));
4335 if (ndigits == 0)
4336 return PyLong_FromLong(0);
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004337
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004338 msd = v->ob_digit[ndigits-1];
4339 while (msd >= 32) {
4340 msd_bits += 6;
4341 msd >>= 6;
4342 }
4343 msd_bits += (long)(BitLengthTable[msd]);
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004344
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004345 if (ndigits <= PY_SSIZE_T_MAX/PyLong_SHIFT)
4346 return PyLong_FromSsize_t((ndigits-1)*PyLong_SHIFT + msd_bits);
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004347
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004348 /* expression above may overflow; use Python integers instead */
4349 result = (PyLongObject *)PyLong_FromSsize_t(ndigits - 1);
4350 if (result == NULL)
4351 return NULL;
4352 x = (PyLongObject *)PyLong_FromLong(PyLong_SHIFT);
4353 if (x == NULL)
4354 goto error;
4355 y = (PyLongObject *)long_mul(result, x);
4356 Py_DECREF(x);
4357 if (y == NULL)
4358 goto error;
4359 Py_DECREF(result);
4360 result = y;
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004361
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004362 x = (PyLongObject *)PyLong_FromLong((long)msd_bits);
4363 if (x == NULL)
4364 goto error;
4365 y = (PyLongObject *)long_add(result, x);
4366 Py_DECREF(x);
4367 if (y == NULL)
4368 goto error;
4369 Py_DECREF(result);
4370 result = y;
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004371
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004372 return (PyObject *)result;
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004373
4374error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004375 Py_DECREF(result);
4376 return NULL;
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004377}
4378
4379PyDoc_STRVAR(long_bit_length_doc,
4380"int.bit_length() -> int\n\
4381\n\
4382Number of bits necessary to represent self in binary.\n\
4383>>> bin(37)\n\
4384'0b100101'\n\
4385>>> (37).bit_length()\n\
43866");
4387
Christian Heimes53876d92008-04-19 00:31:39 +00004388#if 0
4389static PyObject *
4390long_is_finite(PyObject *v)
4391{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004392 Py_RETURN_TRUE;
Christian Heimes53876d92008-04-19 00:31:39 +00004393}
4394#endif
4395
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004396
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004397static PyObject *
4398long_to_bytes(PyLongObject *v, PyObject *args, PyObject *kwds)
4399{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004400 PyObject *byteorder_str;
4401 PyObject *is_signed_obj = NULL;
4402 Py_ssize_t length;
4403 int little_endian;
4404 int is_signed;
4405 PyObject *bytes;
4406 static char *kwlist[] = {"length", "byteorder", "signed", NULL};
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004407
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004408 if (!PyArg_ParseTupleAndKeywords(args, kwds, "nU|O:to_bytes", kwlist,
4409 &length, &byteorder_str,
4410 &is_signed_obj))
4411 return NULL;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004412
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004413 if (args != NULL && Py_SIZE(args) > 2) {
4414 PyErr_SetString(PyExc_TypeError,
4415 "'signed' is a keyword-only argument");
4416 return NULL;
4417 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004418
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004419 if (!PyUnicode_CompareWithASCIIString(byteorder_str, "little"))
4420 little_endian = 1;
4421 else if (!PyUnicode_CompareWithASCIIString(byteorder_str, "big"))
4422 little_endian = 0;
4423 else {
4424 PyErr_SetString(PyExc_ValueError,
4425 "byteorder must be either 'little' or 'big'");
4426 return NULL;
4427 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004428
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004429 if (is_signed_obj != NULL) {
4430 int cmp = PyObject_IsTrue(is_signed_obj);
4431 if (cmp < 0)
4432 return NULL;
4433 is_signed = cmp ? 1 : 0;
4434 }
4435 else {
4436 /* If the signed argument was omitted, use False as the
4437 default. */
4438 is_signed = 0;
4439 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004440
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004441 if (length < 0) {
4442 PyErr_SetString(PyExc_ValueError,
4443 "length argument must be non-negative");
4444 return NULL;
4445 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004446
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004447 bytes = PyBytes_FromStringAndSize(NULL, length);
4448 if (bytes == NULL)
4449 return NULL;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004450
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004451 if (_PyLong_AsByteArray(v, (unsigned char *)PyBytes_AS_STRING(bytes),
4452 length, little_endian, is_signed) < 0) {
4453 Py_DECREF(bytes);
4454 return NULL;
4455 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004456
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004457 return bytes;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004458}
4459
Mark Dickinson078c2532010-01-30 18:06:17 +00004460PyDoc_STRVAR(long_to_bytes_doc,
4461"int.to_bytes(length, byteorder, *, signed=False) -> bytes\n\
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004462\n\
Mark Dickinson078c2532010-01-30 18:06:17 +00004463Return an array of bytes representing an integer.\n\
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004464\n\
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004465The integer is represented using length bytes. An OverflowError is\n\
Mark Dickinson078c2532010-01-30 18:06:17 +00004466raised if the integer is not representable with the given number of\n\
4467bytes.\n\
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004468\n\
4469The byteorder argument determines the byte order used to represent the\n\
4470integer. If byteorder is 'big', the most significant byte is at the\n\
4471beginning of the byte array. If byteorder is 'little', the most\n\
4472significant byte is at the end of the byte array. To request the native\n\
4473byte order of the host system, use `sys.byteorder' as the byte order value.\n\
4474\n\
Mark Dickinson078c2532010-01-30 18:06:17 +00004475The signed keyword-only argument determines whether two's complement is\n\
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004476used to represent the integer. If signed is False and a negative integer\n\
Mark Dickinson078c2532010-01-30 18:06:17 +00004477is given, an OverflowError is raised.");
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004478
4479static PyObject *
4480long_from_bytes(PyTypeObject *type, PyObject *args, PyObject *kwds)
4481{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004482 PyObject *byteorder_str;
4483 PyObject *is_signed_obj = NULL;
4484 int little_endian;
4485 int is_signed;
4486 PyObject *obj;
4487 PyObject *bytes;
4488 PyObject *long_obj;
4489 static char *kwlist[] = {"bytes", "byteorder", "signed", NULL};
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004490
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004491 if (!PyArg_ParseTupleAndKeywords(args, kwds, "OU|O:from_bytes", kwlist,
4492 &obj, &byteorder_str,
4493 &is_signed_obj))
4494 return NULL;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004495
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004496 if (args != NULL && Py_SIZE(args) > 2) {
4497 PyErr_SetString(PyExc_TypeError,
4498 "'signed' is a keyword-only argument");
4499 return NULL;
4500 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004501
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004502 if (!PyUnicode_CompareWithASCIIString(byteorder_str, "little"))
4503 little_endian = 1;
4504 else if (!PyUnicode_CompareWithASCIIString(byteorder_str, "big"))
4505 little_endian = 0;
4506 else {
4507 PyErr_SetString(PyExc_ValueError,
4508 "byteorder must be either 'little' or 'big'");
4509 return NULL;
4510 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004511
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004512 if (is_signed_obj != NULL) {
4513 int cmp = PyObject_IsTrue(is_signed_obj);
4514 if (cmp < 0)
4515 return NULL;
4516 is_signed = cmp ? 1 : 0;
4517 }
4518 else {
4519 /* If the signed argument was omitted, use False as the
4520 default. */
4521 is_signed = 0;
4522 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004523
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004524 bytes = PyObject_Bytes(obj);
4525 if (bytes == NULL)
4526 return NULL;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004527
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004528 long_obj = _PyLong_FromByteArray(
4529 (unsigned char *)PyBytes_AS_STRING(bytes), Py_SIZE(bytes),
4530 little_endian, is_signed);
4531 Py_DECREF(bytes);
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004532
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004533 /* If from_bytes() was used on subclass, allocate new subclass
4534 * instance, initialize it with decoded long value and return it.
4535 */
4536 if (type != &PyLong_Type && PyType_IsSubtype(type, &PyLong_Type)) {
4537 PyLongObject *newobj;
4538 int i;
4539 Py_ssize_t n = ABS(Py_SIZE(long_obj));
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004540
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004541 newobj = (PyLongObject *)type->tp_alloc(type, n);
4542 if (newobj == NULL) {
4543 Py_DECREF(long_obj);
4544 return NULL;
4545 }
4546 assert(PyLong_Check(newobj));
4547 Py_SIZE(newobj) = Py_SIZE(long_obj);
4548 for (i = 0; i < n; i++) {
4549 newobj->ob_digit[i] =
4550 ((PyLongObject *)long_obj)->ob_digit[i];
4551 }
4552 Py_DECREF(long_obj);
4553 return (PyObject *)newobj;
4554 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004555
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004556 return long_obj;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004557}
4558
Mark Dickinson078c2532010-01-30 18:06:17 +00004559PyDoc_STRVAR(long_from_bytes_doc,
4560"int.from_bytes(bytes, byteorder, *, signed=False) -> int\n\
4561\n\
4562Return the integer represented by the given array of bytes.\n\
4563\n\
4564The bytes argument must either support the buffer protocol or be an\n\
4565iterable object producing bytes. Bytes and bytearray are examples of\n\
4566built-in objects that support the buffer protocol.\n\
4567\n\
4568The byteorder argument determines the byte order used to represent the\n\
4569integer. If byteorder is 'big', the most significant byte is at the\n\
4570beginning of the byte array. If byteorder is 'little', the most\n\
4571significant byte is at the end of the byte array. To request the native\n\
4572byte order of the host system, use `sys.byteorder' as the byte order value.\n\
4573\n\
4574The signed keyword-only argument indicates whether two's complement is\n\
4575used to represent the integer.");
4576
Guido van Rossum5d9113d2003-01-29 17:58:45 +00004577static PyMethodDef long_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004578 {"conjugate", (PyCFunction)long_long, METH_NOARGS,
4579 "Returns self, the complex conjugate of any int."},
4580 {"bit_length", (PyCFunction)long_bit_length, METH_NOARGS,
4581 long_bit_length_doc},
Christian Heimes53876d92008-04-19 00:31:39 +00004582#if 0
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004583 {"is_finite", (PyCFunction)long_is_finite, METH_NOARGS,
4584 "Returns always True."},
Christian Heimes53876d92008-04-19 00:31:39 +00004585#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004586 {"to_bytes", (PyCFunction)long_to_bytes,
4587 METH_VARARGS|METH_KEYWORDS, long_to_bytes_doc},
4588 {"from_bytes", (PyCFunction)long_from_bytes,
4589 METH_VARARGS|METH_KEYWORDS|METH_CLASS, long_from_bytes_doc},
4590 {"__trunc__", (PyCFunction)long_long, METH_NOARGS,
4591 "Truncating an Integral returns itself."},
4592 {"__floor__", (PyCFunction)long_long, METH_NOARGS,
4593 "Flooring an Integral returns itself."},
4594 {"__ceil__", (PyCFunction)long_long, METH_NOARGS,
4595 "Ceiling of an Integral returns itself."},
4596 {"__round__", (PyCFunction)long_round, METH_VARARGS,
4597 "Rounding an Integral returns itself.\n"
4598 "Rounding with an ndigits argument also returns an integer."},
4599 {"__getnewargs__", (PyCFunction)long_getnewargs, METH_NOARGS},
4600 {"__format__", (PyCFunction)long__format__, METH_VARARGS},
4601 {"__sizeof__", (PyCFunction)long_sizeof, METH_NOARGS,
4602 "Returns size in memory, in bytes"},
4603 {NULL, NULL} /* sentinel */
Guido van Rossum5d9113d2003-01-29 17:58:45 +00004604};
4605
Guido van Rossumb43daf72007-08-01 18:08:08 +00004606static PyGetSetDef long_getset[] = {
Mark Dickinson6bf19002009-05-02 17:57:52 +00004607 {"real",
Guido van Rossumb43daf72007-08-01 18:08:08 +00004608 (getter)long_long, (setter)NULL,
4609 "the real part of a complex number",
4610 NULL},
Mark Dickinson6bf19002009-05-02 17:57:52 +00004611 {"imag",
4612 (getter)long_get0, (setter)NULL,
Guido van Rossumb43daf72007-08-01 18:08:08 +00004613 "the imaginary part of a complex number",
Mark Dickinson6bf19002009-05-02 17:57:52 +00004614 NULL},
4615 {"numerator",
Guido van Rossumb43daf72007-08-01 18:08:08 +00004616 (getter)long_long, (setter)NULL,
4617 "the numerator of a rational number in lowest terms",
4618 NULL},
Mark Dickinson6bf19002009-05-02 17:57:52 +00004619 {"denominator",
4620 (getter)long_get1, (setter)NULL,
Guido van Rossumb43daf72007-08-01 18:08:08 +00004621 "the denominator of a rational number in lowest terms",
Mark Dickinson6bf19002009-05-02 17:57:52 +00004622 NULL},
Guido van Rossumb43daf72007-08-01 18:08:08 +00004623 {NULL} /* Sentinel */
4624};
4625
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004626PyDoc_STRVAR(long_doc,
Guido van Rossumddefaf32007-01-14 03:31:43 +00004627"int(x[, base]) -> integer\n\
Tim Peters6d6c1a32001-08-02 04:15:00 +00004628\n\
Guido van Rossumddefaf32007-01-14 03:31:43 +00004629Convert a string or number to an integer, if possible. A floating\n\
Tim Peters6d6c1a32001-08-02 04:15:00 +00004630point argument will be truncated towards zero (this does not include a\n\
4631string representation of a floating point number!) When converting a\n\
4632string, use the optional base. It is an error to supply a base when\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004633converting a non-string.");
Tim Peters6d6c1a32001-08-02 04:15:00 +00004634
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004635static PyNumberMethods long_as_number = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004636 (binaryfunc) long_add, /*nb_add*/
4637 (binaryfunc) long_sub, /*nb_subtract*/
4638 (binaryfunc) long_mul, /*nb_multiply*/
4639 long_mod, /*nb_remainder*/
4640 long_divmod, /*nb_divmod*/
4641 long_pow, /*nb_power*/
4642 (unaryfunc) long_neg, /*nb_negative*/
4643 (unaryfunc) long_long, /*tp_positive*/
4644 (unaryfunc) long_abs, /*tp_absolute*/
4645 (inquiry) long_bool, /*tp_bool*/
4646 (unaryfunc) long_invert, /*nb_invert*/
4647 long_lshift, /*nb_lshift*/
4648 (binaryfunc) long_rshift, /*nb_rshift*/
4649 long_and, /*nb_and*/
4650 long_xor, /*nb_xor*/
4651 long_or, /*nb_or*/
4652 long_long, /*nb_int*/
4653 0, /*nb_reserved*/
4654 long_float, /*nb_float*/
4655 0, /* nb_inplace_add */
4656 0, /* nb_inplace_subtract */
4657 0, /* nb_inplace_multiply */
4658 0, /* nb_inplace_remainder */
4659 0, /* nb_inplace_power */
4660 0, /* nb_inplace_lshift */
4661 0, /* nb_inplace_rshift */
4662 0, /* nb_inplace_and */
4663 0, /* nb_inplace_xor */
4664 0, /* nb_inplace_or */
4665 long_div, /* nb_floor_divide */
4666 long_true_divide, /* nb_true_divide */
4667 0, /* nb_inplace_floor_divide */
4668 0, /* nb_inplace_true_divide */
4669 long_long, /* nb_index */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00004670};
4671
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004672PyTypeObject PyLong_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004673 PyVarObject_HEAD_INIT(&PyType_Type, 0)
4674 "int", /* tp_name */
4675 offsetof(PyLongObject, ob_digit), /* tp_basicsize */
4676 sizeof(digit), /* tp_itemsize */
4677 long_dealloc, /* tp_dealloc */
4678 0, /* tp_print */
4679 0, /* tp_getattr */
4680 0, /* tp_setattr */
4681 0, /* tp_reserved */
4682 long_to_decimal_string, /* tp_repr */
4683 &long_as_number, /* tp_as_number */
4684 0, /* tp_as_sequence */
4685 0, /* tp_as_mapping */
4686 (hashfunc)long_hash, /* tp_hash */
4687 0, /* tp_call */
4688 long_to_decimal_string, /* tp_str */
4689 PyObject_GenericGetAttr, /* tp_getattro */
4690 0, /* tp_setattro */
4691 0, /* tp_as_buffer */
4692 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE |
4693 Py_TPFLAGS_LONG_SUBCLASS, /* tp_flags */
4694 long_doc, /* tp_doc */
4695 0, /* tp_traverse */
4696 0, /* tp_clear */
4697 long_richcompare, /* tp_richcompare */
4698 0, /* tp_weaklistoffset */
4699 0, /* tp_iter */
4700 0, /* tp_iternext */
4701 long_methods, /* tp_methods */
4702 0, /* tp_members */
4703 long_getset, /* tp_getset */
4704 0, /* tp_base */
4705 0, /* tp_dict */
4706 0, /* tp_descr_get */
4707 0, /* tp_descr_set */
4708 0, /* tp_dictoffset */
4709 0, /* tp_init */
4710 0, /* tp_alloc */
4711 long_new, /* tp_new */
4712 PyObject_Del, /* tp_free */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00004713};
Guido van Rossumddefaf32007-01-14 03:31:43 +00004714
Mark Dickinsonbd792642009-03-18 20:06:12 +00004715static PyTypeObject Int_InfoType;
4716
4717PyDoc_STRVAR(int_info__doc__,
4718"sys.int_info\n\
4719\n\
4720A struct sequence that holds information about Python's\n\
4721internal representation of integers. The attributes are read only.");
4722
4723static PyStructSequence_Field int_info_fields[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004724 {"bits_per_digit", "size of a digit in bits"},
4725 {"sizeof_digit", "size in bytes of the C type used to "
4726 "represent a digit"},
4727 {NULL, NULL}
Mark Dickinsonbd792642009-03-18 20:06:12 +00004728};
4729
4730static PyStructSequence_Desc int_info_desc = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004731 "sys.int_info", /* name */
4732 int_info__doc__, /* doc */
4733 int_info_fields, /* fields */
4734 2 /* number of fields */
Mark Dickinsonbd792642009-03-18 20:06:12 +00004735};
4736
4737PyObject *
4738PyLong_GetInfo(void)
4739{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004740 PyObject* int_info;
4741 int field = 0;
4742 int_info = PyStructSequence_New(&Int_InfoType);
4743 if (int_info == NULL)
4744 return NULL;
4745 PyStructSequence_SET_ITEM(int_info, field++,
4746 PyLong_FromLong(PyLong_SHIFT));
4747 PyStructSequence_SET_ITEM(int_info, field++,
4748 PyLong_FromLong(sizeof(digit)));
4749 if (PyErr_Occurred()) {
4750 Py_CLEAR(int_info);
4751 return NULL;
4752 }
4753 return int_info;
Mark Dickinsonbd792642009-03-18 20:06:12 +00004754}
4755
Guido van Rossumddefaf32007-01-14 03:31:43 +00004756int
4757_PyLong_Init(void)
4758{
4759#if NSMALLNEGINTS + NSMALLPOSINTS > 0
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004760 int ival, size;
4761 PyLongObject *v = small_ints;
Christian Heimesdfc12ed2008-01-31 15:16:38 +00004762
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004763 for (ival = -NSMALLNEGINTS; ival < NSMALLPOSINTS; ival++, v++) {
4764 size = (ival < 0) ? -1 : ((ival == 0) ? 0 : 1);
4765 if (Py_TYPE(v) == &PyLong_Type) {
4766 /* The element is already initialized, most likely
4767 * the Python interpreter was initialized before.
4768 */
4769 Py_ssize_t refcnt;
4770 PyObject* op = (PyObject*)v;
Christian Heimesdfc12ed2008-01-31 15:16:38 +00004771
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004772 refcnt = Py_REFCNT(op) < 0 ? 0 : Py_REFCNT(op);
4773 _Py_NewReference(op);
4774 /* _Py_NewReference sets the ref count to 1 but
4775 * the ref count might be larger. Set the refcnt
4776 * to the original refcnt + 1 */
4777 Py_REFCNT(op) = refcnt + 1;
4778 assert(Py_SIZE(op) == size);
4779 assert(v->ob_digit[0] == abs(ival));
4780 }
4781 else {
4782 PyObject_INIT(v, &PyLong_Type);
4783 }
4784 Py_SIZE(v) = size;
4785 v->ob_digit[0] = abs(ival);
4786 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00004787#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004788 /* initialize int_info */
4789 if (Int_InfoType.tp_name == 0)
4790 PyStructSequence_InitType(&Int_InfoType, &int_info_desc);
Mark Dickinsonbd792642009-03-18 20:06:12 +00004791
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004792 return 1;
Guido van Rossumddefaf32007-01-14 03:31:43 +00004793}
4794
4795void
4796PyLong_Fini(void)
4797{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004798 /* Integers are currently statically allocated. Py_DECREF is not
4799 needed, but Python must forget about the reference or multiple
4800 reinitializations will fail. */
Guido van Rossumddefaf32007-01-14 03:31:43 +00004801#if NSMALLNEGINTS + NSMALLPOSINTS > 0
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004802 int i;
4803 PyLongObject *v = small_ints;
4804 for (i = 0; i < NSMALLNEGINTS + NSMALLPOSINTS; i++, v++) {
4805 _Py_DEC_REFTOTAL;
4806 _Py_ForgetReference((PyObject*)v);
4807 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00004808#endif
4809}