blob: 5df519cfdbc981fde0076024fcba0c483920d906 [file] [log] [blame]
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001/* Long (arbitrary precision) integer object implementation */
2
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00003/* XXX The functional organization of this file is terrible */
4
Guido van Rossumc0b618a1997-05-02 03:12:38 +00005#include "Python.h"
Guido van Rossumedcc38a1991-05-05 20:09:44 +00006#include "longintrepr.h"
Guido van Rossumc0b618a1997-05-02 03:12:38 +00007
Mark Dickinsonc6300392009-04-20 21:38:00 +00008#include <float.h>
Guido van Rossumeb1fafc1994-08-29 12:47:19 +00009#include <ctype.h>
Mark Dickinson5a74bf62009-02-15 11:04:38 +000010#include <stddef.h>
Guido van Rossumedcc38a1991-05-05 20:09:44 +000011
Guido van Rossumddefaf32007-01-14 03:31:43 +000012#ifndef NSMALLPOSINTS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000013#define NSMALLPOSINTS 257
Guido van Rossumddefaf32007-01-14 03:31:43 +000014#endif
15#ifndef NSMALLNEGINTS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000016#define NSMALLNEGINTS 5
Guido van Rossumddefaf32007-01-14 03:31:43 +000017#endif
Facundo Batista6e6f59b2008-07-24 18:57:11 +000018
Mark Dickinsone4416742009-02-15 15:14:57 +000019/* convert a PyLong of size 1, 0 or -1 to an sdigit */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000020#define MEDIUM_VALUE(x) (Py_SIZE(x) < 0 ? -(sdigit)(x)->ob_digit[0] : \
21 (Py_SIZE(x) == 0 ? (sdigit)0 : \
22 (sdigit)(x)->ob_digit[0]))
Facundo Batista6e6f59b2008-07-24 18:57:11 +000023#define ABS(x) ((x) < 0 ? -(x) : (x))
24
Guido van Rossumddefaf32007-01-14 03:31:43 +000025#if NSMALLNEGINTS + NSMALLPOSINTS > 0
26/* Small integers are preallocated in this array so that they
27 can be shared.
28 The integers that are preallocated are those in the range
29 -NSMALLNEGINTS (inclusive) to NSMALLPOSINTS (not inclusive).
30*/
31static PyLongObject small_ints[NSMALLNEGINTS + NSMALLPOSINTS];
32#ifdef COUNT_ALLOCS
33int quick_int_allocs, quick_neg_int_allocs;
34#endif
35
Guido van Rossum7eaf8222007-06-18 17:58:50 +000036static PyObject *
Mark Dickinsone4416742009-02-15 15:14:57 +000037get_small_int(sdigit ival)
Guido van Rossumddefaf32007-01-14 03:31:43 +000038{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000039 PyObject *v = (PyObject*)(small_ints + ival + NSMALLNEGINTS);
40 Py_INCREF(v);
Guido van Rossumddefaf32007-01-14 03:31:43 +000041#ifdef COUNT_ALLOCS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000042 if (ival >= 0)
43 quick_int_allocs++;
44 else
45 quick_neg_int_allocs++;
Guido van Rossumddefaf32007-01-14 03:31:43 +000046#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000047 return v;
Guido van Rossumddefaf32007-01-14 03:31:43 +000048}
49#define CHECK_SMALL_INT(ival) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000050 do if (-NSMALLNEGINTS <= ival && ival < NSMALLPOSINTS) { \
51 return get_small_int((sdigit)ival); \
52 } while(0)
Guido van Rossumddefaf32007-01-14 03:31:43 +000053
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000054static PyLongObject *
Facundo Batista6e6f59b2008-07-24 18:57:11 +000055maybe_small_long(PyLongObject *v)
56{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000057 if (v && ABS(Py_SIZE(v)) <= 1) {
58 sdigit ival = MEDIUM_VALUE(v);
59 if (-NSMALLNEGINTS <= ival && ival < NSMALLPOSINTS) {
60 Py_DECREF(v);
61 return (PyLongObject *)get_small_int(ival);
62 }
63 }
64 return v;
Facundo Batista6e6f59b2008-07-24 18:57:11 +000065}
Guido van Rossumddefaf32007-01-14 03:31:43 +000066#else
67#define CHECK_SMALL_INT(ival)
Facundo Batista6e6f59b2008-07-24 18:57:11 +000068#define maybe_small_long(val) (val)
Guido van Rossumddefaf32007-01-14 03:31:43 +000069#endif
70
Guido van Rossumddefaf32007-01-14 03:31:43 +000071/* If a freshly-allocated long is already shared, it must
72 be a small integer, so negating it must go to PyLong_FromLong */
73#define NEGATE(x) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000074 do if (Py_REFCNT(x) == 1) Py_SIZE(x) = -Py_SIZE(x); \
75 else { PyObject* tmp=PyLong_FromLong(-MEDIUM_VALUE(x)); \
76 Py_DECREF(x); (x) = (PyLongObject*)tmp; } \
77 while(0)
Tim Peters5af4e6c2002-08-12 02:31:19 +000078/* For long multiplication, use the O(N**2) school algorithm unless
79 * both operands contain more than KARATSUBA_CUTOFF digits (this
80 * being an internal Python long digit, in base BASE).
81 */
Tim Peters0973b992004-08-29 22:16:50 +000082#define KARATSUBA_CUTOFF 70
83#define KARATSUBA_SQUARE_CUTOFF (2 * KARATSUBA_CUTOFF)
Tim Peters5af4e6c2002-08-12 02:31:19 +000084
Tim Peters47e52ee2004-08-30 02:44:38 +000085/* For exponentiation, use the binary left-to-right algorithm
86 * unless the exponent contains more than FIVEARY_CUTOFF digits.
87 * In that case, do 5 bits at a time. The potential drawback is that
88 * a table of 2**5 intermediate results is computed.
89 */
90#define FIVEARY_CUTOFF 8
91
Tim Peters5af4e6c2002-08-12 02:31:19 +000092#undef MIN
93#undef MAX
94#define MAX(x, y) ((x) < (y) ? (y) : (x))
95#define MIN(x, y) ((x) > (y) ? (y) : (x))
96
Mark Dickinsoncdd01d22010-05-10 21:37:34 +000097#define SIGCHECK(PyTryBlock) \
98 do { \
99 if (PyErr_CheckSignals()) PyTryBlock \
100 } while(0)
Guido van Rossum23d6f0e1991-05-14 12:06:49 +0000101
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000102/* Normalize (remove leading zeros from) a long int object.
103 Doesn't attempt to free the storage--in most cases, due to the nature
104 of the algorithms used, this could save at most be one word anyway. */
105
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000106static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +0000107long_normalize(register PyLongObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000108{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000109 Py_ssize_t j = ABS(Py_SIZE(v));
110 Py_ssize_t i = j;
Tim Peters5af4e6c2002-08-12 02:31:19 +0000111
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000112 while (i > 0 && v->ob_digit[i-1] == 0)
113 --i;
114 if (i != j)
115 Py_SIZE(v) = (Py_SIZE(v) < 0) ? -(i) : i;
116 return v;
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000117}
118
119/* Allocate a new long int object with size digits.
120 Return NULL and set exception if we run out of memory. */
121
Mark Dickinson5a74bf62009-02-15 11:04:38 +0000122#define MAX_LONG_DIGITS \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000123 ((PY_SSIZE_T_MAX - offsetof(PyLongObject, ob_digit))/sizeof(digit))
Mark Dickinson5a74bf62009-02-15 11:04:38 +0000124
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000125PyLongObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +0000126_PyLong_New(Py_ssize_t size)
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000127{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000128 PyLongObject *result;
129 /* Number of bytes needed is: offsetof(PyLongObject, ob_digit) +
130 sizeof(digit)*size. Previous incarnations of this code used
131 sizeof(PyVarObject) instead of the offsetof, but this risks being
132 incorrect in the presence of padding between the PyVarObject header
133 and the digits. */
134 if (size > (Py_ssize_t)MAX_LONG_DIGITS) {
135 PyErr_SetString(PyExc_OverflowError,
136 "too many digits in integer");
137 return NULL;
138 }
139 result = PyObject_MALLOC(offsetof(PyLongObject, ob_digit) +
140 size*sizeof(digit));
141 if (!result) {
142 PyErr_NoMemory();
143 return NULL;
144 }
145 return (PyLongObject*)PyObject_INIT_VAR(result, &PyLong_Type, size);
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000146}
147
Tim Peters64b5ce32001-09-10 20:52:51 +0000148PyObject *
149_PyLong_Copy(PyLongObject *src)
150{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000151 PyLongObject *result;
152 Py_ssize_t i;
Tim Peters64b5ce32001-09-10 20:52:51 +0000153
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000154 assert(src != NULL);
155 i = Py_SIZE(src);
156 if (i < 0)
157 i = -(i);
158 if (i < 2) {
159 sdigit ival = src->ob_digit[0];
160 if (Py_SIZE(src) < 0)
161 ival = -ival;
162 CHECK_SMALL_INT(ival);
163 }
164 result = _PyLong_New(i);
165 if (result != NULL) {
166 Py_SIZE(result) = Py_SIZE(src);
167 while (--i >= 0)
168 result->ob_digit[i] = src->ob_digit[i];
169 }
170 return (PyObject *)result;
Tim Peters64b5ce32001-09-10 20:52:51 +0000171}
172
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000173/* Create a new long int object from a C long int */
174
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000175PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +0000176PyLong_FromLong(long ival)
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000177{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000178 PyLongObject *v;
179 unsigned long abs_ival;
180 unsigned long t; /* unsigned so >> doesn't propagate sign bit */
181 int ndigits = 0;
182 int sign = 1;
Guido van Rossumddefaf32007-01-14 03:31:43 +0000183
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000184 CHECK_SMALL_INT(ival);
Tim Petersce9de2f2001-06-14 04:56:19 +0000185
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000186 if (ival < 0) {
187 /* negate: can't write this as abs_ival = -ival since that
188 invokes undefined behaviour when ival is LONG_MIN */
189 abs_ival = 0U-(unsigned long)ival;
190 sign = -1;
191 }
192 else {
193 abs_ival = (unsigned long)ival;
194 }
Tim Petersce9de2f2001-06-14 04:56:19 +0000195
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000196 /* Fast path for single-digit ints */
197 if (!(abs_ival >> PyLong_SHIFT)) {
198 v = _PyLong_New(1);
199 if (v) {
200 Py_SIZE(v) = sign;
201 v->ob_digit[0] = Py_SAFE_DOWNCAST(
202 abs_ival, unsigned long, digit);
203 }
204 return (PyObject*)v;
205 }
Guido van Rossumddefaf32007-01-14 03:31:43 +0000206
Mark Dickinson249b8982009-04-27 19:41:00 +0000207#if PyLong_SHIFT==15
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000208 /* 2 digits */
209 if (!(abs_ival >> 2*PyLong_SHIFT)) {
210 v = _PyLong_New(2);
211 if (v) {
212 Py_SIZE(v) = 2*sign;
213 v->ob_digit[0] = Py_SAFE_DOWNCAST(
214 abs_ival & PyLong_MASK, unsigned long, digit);
215 v->ob_digit[1] = Py_SAFE_DOWNCAST(
216 abs_ival >> PyLong_SHIFT, unsigned long, digit);
217 }
218 return (PyObject*)v;
219 }
Mark Dickinsonbd792642009-03-18 20:06:12 +0000220#endif
Guido van Rossumddefaf32007-01-14 03:31:43 +0000221
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000222 /* Larger numbers: loop to determine number of digits */
223 t = abs_ival;
224 while (t) {
225 ++ndigits;
226 t >>= PyLong_SHIFT;
227 }
228 v = _PyLong_New(ndigits);
229 if (v != NULL) {
230 digit *p = v->ob_digit;
231 Py_SIZE(v) = ndigits*sign;
232 t = abs_ival;
233 while (t) {
234 *p++ = Py_SAFE_DOWNCAST(
235 t & PyLong_MASK, unsigned long, digit);
236 t >>= PyLong_SHIFT;
237 }
238 }
239 return (PyObject *)v;
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000240}
241
Guido van Rossum53756b11997-01-03 17:14:46 +0000242/* Create a new long int object from a C unsigned long int */
243
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000244PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +0000245PyLong_FromUnsignedLong(unsigned long ival)
Guido van Rossum53756b11997-01-03 17:14:46 +0000246{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000247 PyLongObject *v;
248 unsigned long t;
249 int ndigits = 0;
Tim Petersce9de2f2001-06-14 04:56:19 +0000250
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000251 if (ival < PyLong_BASE)
252 return PyLong_FromLong(ival);
253 /* Count the number of Python digits. */
254 t = (unsigned long)ival;
255 while (t) {
256 ++ndigits;
257 t >>= PyLong_SHIFT;
258 }
259 v = _PyLong_New(ndigits);
260 if (v != NULL) {
261 digit *p = v->ob_digit;
262 Py_SIZE(v) = ndigits;
263 while (ival) {
264 *p++ = (digit)(ival & PyLong_MASK);
265 ival >>= PyLong_SHIFT;
266 }
267 }
268 return (PyObject *)v;
Guido van Rossum53756b11997-01-03 17:14:46 +0000269}
270
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000271/* Create a new long int object from a C double */
272
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000273PyObject *
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000274PyLong_FromDouble(double dval)
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000275{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000276 PyLongObject *v;
277 double frac;
278 int i, ndig, expo, neg;
279 neg = 0;
280 if (Py_IS_INFINITY(dval)) {
281 PyErr_SetString(PyExc_OverflowError,
Mark Dickinson22b20182010-05-10 21:27:53 +0000282 "cannot convert float infinity to integer");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000283 return NULL;
284 }
285 if (Py_IS_NAN(dval)) {
286 PyErr_SetString(PyExc_ValueError,
Mark Dickinson22b20182010-05-10 21:27:53 +0000287 "cannot convert float NaN to integer");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000288 return NULL;
289 }
290 if (dval < 0.0) {
291 neg = 1;
292 dval = -dval;
293 }
294 frac = frexp(dval, &expo); /* dval = frac*2**expo; 0.0 <= frac < 1.0 */
295 if (expo <= 0)
296 return PyLong_FromLong(0L);
297 ndig = (expo-1) / PyLong_SHIFT + 1; /* Number of 'digits' in result */
298 v = _PyLong_New(ndig);
299 if (v == NULL)
300 return NULL;
301 frac = ldexp(frac, (expo-1) % PyLong_SHIFT + 1);
302 for (i = ndig; --i >= 0; ) {
303 digit bits = (digit)frac;
304 v->ob_digit[i] = bits;
305 frac = frac - (double)bits;
306 frac = ldexp(frac, PyLong_SHIFT);
307 }
308 if (neg)
309 Py_SIZE(v) = -(Py_SIZE(v));
310 return (PyObject *)v;
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000311}
312
Thomas Wouters89f507f2006-12-13 04:49:30 +0000313/* Checking for overflow in PyLong_AsLong is a PITA since C doesn't define
314 * anything about what happens when a signed integer operation overflows,
315 * and some compilers think they're doing you a favor by being "clever"
316 * then. The bit pattern for the largest postive signed long is
317 * (unsigned long)LONG_MAX, and for the smallest negative signed long
318 * it is abs(LONG_MIN), which we could write -(unsigned long)LONG_MIN.
319 * However, some other compilers warn about applying unary minus to an
320 * unsigned operand. Hence the weird "0-".
321 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000322#define PY_ABS_LONG_MIN (0-(unsigned long)LONG_MIN)
323#define PY_ABS_SSIZE_T_MIN (0-(size_t)PY_SSIZE_T_MIN)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000324
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000325/* Get a C long int from a long int object.
326 Returns -1 and sets an error condition if overflow occurs. */
327
328long
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +0000329PyLong_AsLongAndOverflow(PyObject *vv, int *overflow)
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000330{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000331 /* This version by Tim Peters */
332 register PyLongObject *v;
333 unsigned long x, prev;
334 long res;
335 Py_ssize_t i;
336 int sign;
337 int do_decref = 0; /* if nb_int was called */
Guido van Rossumf7531811998-05-26 14:33:37 +0000338
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000339 *overflow = 0;
340 if (vv == NULL) {
341 PyErr_BadInternalCall();
342 return -1;
343 }
Guido van Rossumddefaf32007-01-14 03:31:43 +0000344
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000345 if (!PyLong_Check(vv)) {
346 PyNumberMethods *nb;
347 nb = vv->ob_type->tp_as_number;
348 if (nb == NULL || nb->nb_int == NULL) {
349 PyErr_SetString(PyExc_TypeError,
350 "an integer is required");
351 return -1;
352 }
353 vv = (*nb->nb_int) (vv);
354 if (vv == NULL)
355 return -1;
356 do_decref = 1;
357 if (!PyLong_Check(vv)) {
358 Py_DECREF(vv);
359 PyErr_SetString(PyExc_TypeError,
360 "nb_int should return int object");
361 return -1;
362 }
363 }
Guido van Rossumddefaf32007-01-14 03:31:43 +0000364
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000365 res = -1;
366 v = (PyLongObject *)vv;
367 i = Py_SIZE(v);
Guido van Rossumf7531811998-05-26 14:33:37 +0000368
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000369 switch (i) {
370 case -1:
371 res = -(sdigit)v->ob_digit[0];
372 break;
373 case 0:
374 res = 0;
375 break;
376 case 1:
377 res = v->ob_digit[0];
378 break;
379 default:
380 sign = 1;
381 x = 0;
382 if (i < 0) {
383 sign = -1;
384 i = -(i);
385 }
386 while (--i >= 0) {
387 prev = x;
388 x = (x << PyLong_SHIFT) | v->ob_digit[i];
389 if ((x >> PyLong_SHIFT) != prev) {
390 *overflow = sign;
391 goto exit;
392 }
393 }
394 /* Haven't lost any bits, but casting to long requires extra
395 * care (see comment above).
396 */
397 if (x <= (unsigned long)LONG_MAX) {
398 res = (long)x * sign;
399 }
400 else if (sign < 0 && x == PY_ABS_LONG_MIN) {
401 res = LONG_MIN;
402 }
403 else {
404 *overflow = sign;
405 /* res is already set to -1 */
406 }
407 }
Mark Dickinson22b20182010-05-10 21:27:53 +0000408 exit:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000409 if (do_decref) {
410 Py_DECREF(vv);
411 }
412 return res;
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000413}
414
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000415long
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +0000416PyLong_AsLong(PyObject *obj)
417{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000418 int overflow;
419 long result = PyLong_AsLongAndOverflow(obj, &overflow);
420 if (overflow) {
421 /* XXX: could be cute and give a different
422 message for overflow == -1 */
423 PyErr_SetString(PyExc_OverflowError,
424 "Python int too large to convert to C long");
425 }
426 return result;
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +0000427}
428
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000429/* Get a Py_ssize_t from a long int object.
430 Returns -1 and sets an error condition if overflow occurs. */
431
432Py_ssize_t
Guido van Rossumddefaf32007-01-14 03:31:43 +0000433PyLong_AsSsize_t(PyObject *vv) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000434 register PyLongObject *v;
435 size_t x, prev;
436 Py_ssize_t i;
437 int sign;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000438
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000439 if (vv == NULL) {
440 PyErr_BadInternalCall();
441 return -1;
442 }
443 if (!PyLong_Check(vv)) {
444 PyErr_SetString(PyExc_TypeError, "an integer is required");
445 return -1;
446 }
Mark Dickinsond59b4162010-03-13 11:34:40 +0000447
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000448 v = (PyLongObject *)vv;
449 i = Py_SIZE(v);
450 switch (i) {
451 case -1: return -(sdigit)v->ob_digit[0];
452 case 0: return 0;
453 case 1: return v->ob_digit[0];
454 }
455 sign = 1;
456 x = 0;
457 if (i < 0) {
458 sign = -1;
459 i = -(i);
460 }
461 while (--i >= 0) {
462 prev = x;
463 x = (x << PyLong_SHIFT) | v->ob_digit[i];
464 if ((x >> PyLong_SHIFT) != prev)
465 goto overflow;
466 }
467 /* Haven't lost any bits, but casting to a signed type requires
468 * extra care (see comment above).
469 */
470 if (x <= (size_t)PY_SSIZE_T_MAX) {
471 return (Py_ssize_t)x * sign;
472 }
473 else if (sign < 0 && x == PY_ABS_SSIZE_T_MIN) {
474 return PY_SSIZE_T_MIN;
475 }
476 /* else overflow */
Martin v. Löwis18e16552006-02-15 17:27:45 +0000477
Mark Dickinson22b20182010-05-10 21:27:53 +0000478 overflow:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000479 PyErr_SetString(PyExc_OverflowError,
480 "Python int too large to convert to C ssize_t");
481 return -1;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000482}
483
Guido van Rossumd8c80482002-08-13 00:24:58 +0000484/* Get a C unsigned long int from a long int object.
Guido van Rossum53756b11997-01-03 17:14:46 +0000485 Returns -1 and sets an error condition if overflow occurs. */
486
487unsigned long
Tim Peters9f688bf2000-07-07 15:53:28 +0000488PyLong_AsUnsignedLong(PyObject *vv)
Guido van Rossum53756b11997-01-03 17:14:46 +0000489{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000490 register PyLongObject *v;
491 unsigned long x, prev;
492 Py_ssize_t i;
Tim Peters5af4e6c2002-08-12 02:31:19 +0000493
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000494 if (vv == NULL) {
495 PyErr_BadInternalCall();
496 return (unsigned long)-1;
497 }
498 if (!PyLong_Check(vv)) {
499 PyErr_SetString(PyExc_TypeError, "an integer is required");
500 return (unsigned long)-1;
501 }
Mark Dickinsond59b4162010-03-13 11:34:40 +0000502
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000503 v = (PyLongObject *)vv;
504 i = Py_SIZE(v);
505 x = 0;
506 if (i < 0) {
507 PyErr_SetString(PyExc_OverflowError,
Mark Dickinson22b20182010-05-10 21:27:53 +0000508 "can't convert negative value to unsigned int");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000509 return (unsigned long) -1;
510 }
511 switch (i) {
512 case 0: return 0;
513 case 1: return v->ob_digit[0];
514 }
515 while (--i >= 0) {
516 prev = x;
517 x = (x << PyLong_SHIFT) | v->ob_digit[i];
518 if ((x >> PyLong_SHIFT) != prev) {
519 PyErr_SetString(PyExc_OverflowError,
Mark Dickinson22b20182010-05-10 21:27:53 +0000520 "python int too large to convert "
521 "to C unsigned long");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000522 return (unsigned long) -1;
523 }
524 }
525 return x;
Guido van Rossumddefaf32007-01-14 03:31:43 +0000526}
527
528/* Get a C unsigned long int from a long int object.
529 Returns -1 and sets an error condition if overflow occurs. */
530
531size_t
532PyLong_AsSize_t(PyObject *vv)
533{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000534 register PyLongObject *v;
535 size_t x, prev;
536 Py_ssize_t i;
Guido van Rossumddefaf32007-01-14 03:31:43 +0000537
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000538 if (vv == NULL) {
539 PyErr_BadInternalCall();
540 return (size_t) -1;
541 }
542 if (!PyLong_Check(vv)) {
543 PyErr_SetString(PyExc_TypeError, "an integer is required");
544 return (size_t)-1;
545 }
Mark Dickinsond59b4162010-03-13 11:34:40 +0000546
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000547 v = (PyLongObject *)vv;
548 i = Py_SIZE(v);
549 x = 0;
550 if (i < 0) {
551 PyErr_SetString(PyExc_OverflowError,
552 "can't convert negative value to size_t");
553 return (size_t) -1;
554 }
555 switch (i) {
556 case 0: return 0;
557 case 1: return v->ob_digit[0];
558 }
559 while (--i >= 0) {
560 prev = x;
561 x = (x << PyLong_SHIFT) | v->ob_digit[i];
562 if ((x >> PyLong_SHIFT) != prev) {
563 PyErr_SetString(PyExc_OverflowError,
564 "Python int too large to convert to C size_t");
565 return (unsigned long) -1;
566 }
567 }
568 return x;
Guido van Rossum53756b11997-01-03 17:14:46 +0000569}
570
Thomas Hellera4ea6032003-04-17 18:55:45 +0000571/* Get a C unsigned long int from a long int object, ignoring the high bits.
572 Returns -1 and sets an error condition if an error occurs. */
573
Guido van Rossumddefaf32007-01-14 03:31:43 +0000574static unsigned long
575_PyLong_AsUnsignedLongMask(PyObject *vv)
Thomas Hellera4ea6032003-04-17 18:55:45 +0000576{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000577 register PyLongObject *v;
578 unsigned long x;
579 Py_ssize_t i;
580 int sign;
Thomas Hellera4ea6032003-04-17 18:55:45 +0000581
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000582 if (vv == NULL || !PyLong_Check(vv)) {
583 PyErr_BadInternalCall();
584 return (unsigned long) -1;
585 }
586 v = (PyLongObject *)vv;
587 i = Py_SIZE(v);
588 switch (i) {
589 case 0: return 0;
590 case 1: return v->ob_digit[0];
591 }
592 sign = 1;
593 x = 0;
594 if (i < 0) {
595 sign = -1;
596 i = -i;
597 }
598 while (--i >= 0) {
599 x = (x << PyLong_SHIFT) | v->ob_digit[i];
600 }
601 return x * sign;
Thomas Hellera4ea6032003-04-17 18:55:45 +0000602}
603
Guido van Rossumddefaf32007-01-14 03:31:43 +0000604unsigned long
605PyLong_AsUnsignedLongMask(register PyObject *op)
606{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000607 PyNumberMethods *nb;
608 PyLongObject *lo;
609 unsigned long val;
Guido van Rossumddefaf32007-01-14 03:31:43 +0000610
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000611 if (op && PyLong_Check(op))
612 return _PyLong_AsUnsignedLongMask(op);
Guido van Rossumddefaf32007-01-14 03:31:43 +0000613
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000614 if (op == NULL || (nb = op->ob_type->tp_as_number) == NULL ||
615 nb->nb_int == NULL) {
616 PyErr_SetString(PyExc_TypeError, "an integer is required");
617 return (unsigned long)-1;
618 }
Guido van Rossumddefaf32007-01-14 03:31:43 +0000619
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000620 lo = (PyLongObject*) (*nb->nb_int) (op);
621 if (lo == NULL)
622 return (unsigned long)-1;
623 if (PyLong_Check(lo)) {
624 val = _PyLong_AsUnsignedLongMask((PyObject *)lo);
625 Py_DECREF(lo);
626 if (PyErr_Occurred())
627 return (unsigned long)-1;
628 return val;
629 }
630 else
631 {
632 Py_DECREF(lo);
633 PyErr_SetString(PyExc_TypeError,
634 "nb_int should return int object");
635 return (unsigned long)-1;
636 }
Guido van Rossumddefaf32007-01-14 03:31:43 +0000637}
638
Tim Peters5b8132f2003-01-31 15:52:05 +0000639int
640_PyLong_Sign(PyObject *vv)
641{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000642 PyLongObject *v = (PyLongObject *)vv;
Tim Peters5b8132f2003-01-31 15:52:05 +0000643
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000644 assert(v != NULL);
645 assert(PyLong_Check(v));
Tim Peters5b8132f2003-01-31 15:52:05 +0000646
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000647 return Py_SIZE(v) == 0 ? 0 : (Py_SIZE(v) < 0 ? -1 : 1);
Tim Peters5b8132f2003-01-31 15:52:05 +0000648}
649
Tim Petersbaefd9e2003-01-28 20:37:45 +0000650size_t
651_PyLong_NumBits(PyObject *vv)
652{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000653 PyLongObject *v = (PyLongObject *)vv;
654 size_t result = 0;
655 Py_ssize_t ndigits;
Tim Petersbaefd9e2003-01-28 20:37:45 +0000656
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000657 assert(v != NULL);
658 assert(PyLong_Check(v));
659 ndigits = ABS(Py_SIZE(v));
660 assert(ndigits == 0 || v->ob_digit[ndigits - 1] != 0);
661 if (ndigits > 0) {
662 digit msd = v->ob_digit[ndigits - 1];
Tim Petersbaefd9e2003-01-28 20:37:45 +0000663
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000664 result = (ndigits - 1) * PyLong_SHIFT;
665 if (result / PyLong_SHIFT != (size_t)(ndigits - 1))
666 goto Overflow;
667 do {
668 ++result;
669 if (result == 0)
670 goto Overflow;
671 msd >>= 1;
672 } while (msd);
673 }
674 return result;
Tim Petersbaefd9e2003-01-28 20:37:45 +0000675
Mark Dickinson22b20182010-05-10 21:27:53 +0000676 Overflow:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000677 PyErr_SetString(PyExc_OverflowError, "int has too many bits "
678 "to express in a platform size_t");
679 return (size_t)-1;
Tim Petersbaefd9e2003-01-28 20:37:45 +0000680}
681
Tim Peters2a9b3672001-06-11 21:23:58 +0000682PyObject *
683_PyLong_FromByteArray(const unsigned char* bytes, size_t n,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000684 int little_endian, int is_signed)
Tim Peters2a9b3672001-06-11 21:23:58 +0000685{
Mark Dickinson22b20182010-05-10 21:27:53 +0000686 const unsigned char* pstartbyte; /* LSB of bytes */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000687 int incr; /* direction to move pstartbyte */
688 const unsigned char* pendbyte; /* MSB of bytes */
689 size_t numsignificantbytes; /* number of bytes that matter */
690 Py_ssize_t ndigits; /* number of Python long digits */
691 PyLongObject* v; /* result */
692 Py_ssize_t idigit = 0; /* next free index in v->ob_digit */
Tim Peters2a9b3672001-06-11 21:23:58 +0000693
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000694 if (n == 0)
695 return PyLong_FromLong(0L);
Tim Peters2a9b3672001-06-11 21:23:58 +0000696
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000697 if (little_endian) {
698 pstartbyte = bytes;
699 pendbyte = bytes + n - 1;
700 incr = 1;
701 }
702 else {
703 pstartbyte = bytes + n - 1;
704 pendbyte = bytes;
705 incr = -1;
706 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000707
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000708 if (is_signed)
709 is_signed = *pendbyte >= 0x80;
Tim Peters2a9b3672001-06-11 21:23:58 +0000710
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000711 /* Compute numsignificantbytes. This consists of finding the most
Ezio Melotti13925002011-03-16 11:05:33 +0200712 significant byte. Leading 0 bytes are insignificant if the number
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000713 is positive, and leading 0xff bytes if negative. */
714 {
715 size_t i;
716 const unsigned char* p = pendbyte;
717 const int pincr = -incr; /* search MSB to LSB */
718 const unsigned char insignficant = is_signed ? 0xff : 0x00;
Tim Peters2a9b3672001-06-11 21:23:58 +0000719
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000720 for (i = 0; i < n; ++i, p += pincr) {
721 if (*p != insignficant)
722 break;
723 }
724 numsignificantbytes = n - i;
725 /* 2's-comp is a bit tricky here, e.g. 0xff00 == -0x0100, so
726 actually has 2 significant bytes. OTOH, 0xff0001 ==
727 -0x00ffff, so we wouldn't *need* to bump it there; but we
728 do for 0xffff = -0x0001. To be safe without bothering to
729 check every case, bump it regardless. */
730 if (is_signed && numsignificantbytes < n)
731 ++numsignificantbytes;
732 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000733
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000734 /* How many Python long digits do we need? We have
735 8*numsignificantbytes bits, and each Python long digit has
736 PyLong_SHIFT bits, so it's the ceiling of the quotient. */
737 /* catch overflow before it happens */
738 if (numsignificantbytes > (PY_SSIZE_T_MAX - PyLong_SHIFT) / 8) {
739 PyErr_SetString(PyExc_OverflowError,
740 "byte array too long to convert to int");
741 return NULL;
742 }
743 ndigits = (numsignificantbytes * 8 + PyLong_SHIFT - 1) / PyLong_SHIFT;
744 v = _PyLong_New(ndigits);
745 if (v == NULL)
746 return NULL;
Tim Peters2a9b3672001-06-11 21:23:58 +0000747
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000748 /* Copy the bits over. The tricky parts are computing 2's-comp on
749 the fly for signed numbers, and dealing with the mismatch between
750 8-bit bytes and (probably) 15-bit Python digits.*/
751 {
752 size_t i;
753 twodigits carry = 1; /* for 2's-comp calculation */
754 twodigits accum = 0; /* sliding register */
755 unsigned int accumbits = 0; /* number of bits in accum */
756 const unsigned char* p = pstartbyte;
Tim Peters2a9b3672001-06-11 21:23:58 +0000757
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000758 for (i = 0; i < numsignificantbytes; ++i, p += incr) {
759 twodigits thisbyte = *p;
760 /* Compute correction for 2's comp, if needed. */
761 if (is_signed) {
762 thisbyte = (0xff ^ thisbyte) + carry;
763 carry = thisbyte >> 8;
764 thisbyte &= 0xff;
765 }
766 /* Because we're going LSB to MSB, thisbyte is
767 more significant than what's already in accum,
768 so needs to be prepended to accum. */
769 accum |= (twodigits)thisbyte << accumbits;
770 accumbits += 8;
771 if (accumbits >= PyLong_SHIFT) {
772 /* There's enough to fill a Python digit. */
773 assert(idigit < ndigits);
Mark Dickinson22b20182010-05-10 21:27:53 +0000774 v->ob_digit[idigit] = (digit)(accum & PyLong_MASK);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000775 ++idigit;
776 accum >>= PyLong_SHIFT;
777 accumbits -= PyLong_SHIFT;
778 assert(accumbits < PyLong_SHIFT);
779 }
780 }
781 assert(accumbits < PyLong_SHIFT);
782 if (accumbits) {
783 assert(idigit < ndigits);
784 v->ob_digit[idigit] = (digit)accum;
785 ++idigit;
786 }
787 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000788
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000789 Py_SIZE(v) = is_signed ? -idigit : idigit;
790 return (PyObject *)long_normalize(v);
Tim Peters2a9b3672001-06-11 21:23:58 +0000791}
792
793int
794_PyLong_AsByteArray(PyLongObject* v,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000795 unsigned char* bytes, size_t n,
796 int little_endian, int is_signed)
Tim Peters2a9b3672001-06-11 21:23:58 +0000797{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000798 Py_ssize_t i; /* index into v->ob_digit */
Mark Dickinson22b20182010-05-10 21:27:53 +0000799 Py_ssize_t ndigits; /* |v->ob_size| */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000800 twodigits accum; /* sliding register */
Mark Dickinson22b20182010-05-10 21:27:53 +0000801 unsigned int accumbits; /* # bits in accum */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000802 int do_twos_comp; /* store 2's-comp? is_signed and v < 0 */
803 digit carry; /* for computing 2's-comp */
804 size_t j; /* # bytes filled */
805 unsigned char* p; /* pointer to next byte in bytes */
806 int pincr; /* direction to move p */
Tim Peters2a9b3672001-06-11 21:23:58 +0000807
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000808 assert(v != NULL && PyLong_Check(v));
Tim Peters2a9b3672001-06-11 21:23:58 +0000809
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000810 if (Py_SIZE(v) < 0) {
811 ndigits = -(Py_SIZE(v));
812 if (!is_signed) {
813 PyErr_SetString(PyExc_OverflowError,
Mark Dickinson22b20182010-05-10 21:27:53 +0000814 "can't convert negative int to unsigned");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000815 return -1;
816 }
817 do_twos_comp = 1;
818 }
819 else {
820 ndigits = Py_SIZE(v);
821 do_twos_comp = 0;
822 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000823
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000824 if (little_endian) {
825 p = bytes;
826 pincr = 1;
827 }
828 else {
829 p = bytes + n - 1;
830 pincr = -1;
831 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000832
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000833 /* Copy over all the Python digits.
834 It's crucial that every Python digit except for the MSD contribute
835 exactly PyLong_SHIFT bits to the total, so first assert that the long is
836 normalized. */
837 assert(ndigits == 0 || v->ob_digit[ndigits - 1] != 0);
838 j = 0;
839 accum = 0;
840 accumbits = 0;
841 carry = do_twos_comp ? 1 : 0;
842 for (i = 0; i < ndigits; ++i) {
843 digit thisdigit = v->ob_digit[i];
844 if (do_twos_comp) {
845 thisdigit = (thisdigit ^ PyLong_MASK) + carry;
846 carry = thisdigit >> PyLong_SHIFT;
847 thisdigit &= PyLong_MASK;
848 }
849 /* Because we're going LSB to MSB, thisdigit is more
850 significant than what's already in accum, so needs to be
851 prepended to accum. */
852 accum |= (twodigits)thisdigit << accumbits;
Tim Peters8bc84b42001-06-12 19:17:03 +0000853
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000854 /* The most-significant digit may be (probably is) at least
855 partly empty. */
856 if (i == ndigits - 1) {
857 /* Count # of sign bits -- they needn't be stored,
858 * although for signed conversion we need later to
859 * make sure at least one sign bit gets stored. */
Mark Dickinson22b20182010-05-10 21:27:53 +0000860 digit s = do_twos_comp ? thisdigit ^ PyLong_MASK : thisdigit;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000861 while (s != 0) {
862 s >>= 1;
863 accumbits++;
864 }
865 }
866 else
867 accumbits += PyLong_SHIFT;
Tim Peters8bc84b42001-06-12 19:17:03 +0000868
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000869 /* Store as many bytes as possible. */
870 while (accumbits >= 8) {
871 if (j >= n)
872 goto Overflow;
873 ++j;
874 *p = (unsigned char)(accum & 0xff);
875 p += pincr;
876 accumbits -= 8;
877 accum >>= 8;
878 }
879 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000880
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000881 /* Store the straggler (if any). */
882 assert(accumbits < 8);
883 assert(carry == 0); /* else do_twos_comp and *every* digit was 0 */
884 if (accumbits > 0) {
885 if (j >= n)
886 goto Overflow;
887 ++j;
888 if (do_twos_comp) {
889 /* Fill leading bits of the byte with sign bits
890 (appropriately pretending that the long had an
891 infinite supply of sign bits). */
892 accum |= (~(twodigits)0) << accumbits;
893 }
894 *p = (unsigned char)(accum & 0xff);
895 p += pincr;
896 }
897 else if (j == n && n > 0 && is_signed) {
898 /* The main loop filled the byte array exactly, so the code
899 just above didn't get to ensure there's a sign bit, and the
900 loop below wouldn't add one either. Make sure a sign bit
901 exists. */
902 unsigned char msb = *(p - pincr);
903 int sign_bit_set = msb >= 0x80;
904 assert(accumbits == 0);
905 if (sign_bit_set == do_twos_comp)
906 return 0;
907 else
908 goto Overflow;
909 }
Tim Peters05607ad2001-06-13 21:01:27 +0000910
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000911 /* Fill remaining bytes with copies of the sign bit. */
912 {
913 unsigned char signbyte = do_twos_comp ? 0xffU : 0U;
914 for ( ; j < n; ++j, p += pincr)
915 *p = signbyte;
916 }
Tim Peters05607ad2001-06-13 21:01:27 +0000917
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000918 return 0;
Tim Peters2a9b3672001-06-11 21:23:58 +0000919
Mark Dickinson22b20182010-05-10 21:27:53 +0000920 Overflow:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000921 PyErr_SetString(PyExc_OverflowError, "int too big to convert");
922 return -1;
Tim Peters5af4e6c2002-08-12 02:31:19 +0000923
Tim Peters2a9b3672001-06-11 21:23:58 +0000924}
925
Guido van Rossum78694d91998-09-18 14:14:13 +0000926/* Create a new long (or int) object from a C pointer */
927
928PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +0000929PyLong_FromVoidPtr(void *p)
Guido van Rossum78694d91998-09-18 14:14:13 +0000930{
Tim Peters70128a12001-06-16 08:48:40 +0000931#ifndef HAVE_LONG_LONG
932# error "PyLong_FromVoidPtr: sizeof(void*) > sizeof(long), but no long long"
933#endif
934#if SIZEOF_LONG_LONG < SIZEOF_VOID_P
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000935# error "PyLong_FromVoidPtr: sizeof(PY_LONG_LONG) < sizeof(void*)"
Tim Peters70128a12001-06-16 08:48:40 +0000936#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000937 /* special-case null pointer */
938 if (!p)
939 return PyLong_FromLong(0);
940 return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG)(Py_uintptr_t)p);
Tim Peters70128a12001-06-16 08:48:40 +0000941
Guido van Rossum78694d91998-09-18 14:14:13 +0000942}
943
944/* Get a C pointer from a long object (or an int object in some cases) */
945
946void *
Tim Peters9f688bf2000-07-07 15:53:28 +0000947PyLong_AsVoidPtr(PyObject *vv)
Guido van Rossum78694d91998-09-18 14:14:13 +0000948{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000949 /* This function will allow int or long objects. If vv is neither,
950 then the PyLong_AsLong*() functions will raise the exception:
951 PyExc_SystemError, "bad argument to internal function"
952 */
Tim Peters70128a12001-06-16 08:48:40 +0000953#if SIZEOF_VOID_P <= SIZEOF_LONG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000954 long x;
Guido van Rossum78694d91998-09-18 14:14:13 +0000955
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000956 if (PyLong_Check(vv) && _PyLong_Sign(vv) < 0)
957 x = PyLong_AsLong(vv);
958 else
959 x = PyLong_AsUnsignedLong(vv);
Guido van Rossum78694d91998-09-18 14:14:13 +0000960#else
Tim Peters70128a12001-06-16 08:48:40 +0000961
962#ifndef HAVE_LONG_LONG
963# error "PyLong_AsVoidPtr: sizeof(void*) > sizeof(long), but no long long"
964#endif
965#if SIZEOF_LONG_LONG < SIZEOF_VOID_P
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000966# error "PyLong_AsVoidPtr: sizeof(PY_LONG_LONG) < sizeof(void*)"
Tim Peters70128a12001-06-16 08:48:40 +0000967#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000968 PY_LONG_LONG x;
Guido van Rossum78694d91998-09-18 14:14:13 +0000969
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000970 if (PyLong_Check(vv) && _PyLong_Sign(vv) < 0)
971 x = PyLong_AsLongLong(vv);
972 else
973 x = PyLong_AsUnsignedLongLong(vv);
Tim Peters70128a12001-06-16 08:48:40 +0000974
975#endif /* SIZEOF_VOID_P <= SIZEOF_LONG */
Guido van Rossum78694d91998-09-18 14:14:13 +0000976
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000977 if (x == -1 && PyErr_Occurred())
978 return NULL;
979 return (void *)x;
Guido van Rossum78694d91998-09-18 14:14:13 +0000980}
981
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000982#ifdef HAVE_LONG_LONG
Tim Petersd1a7da62001-06-13 00:35:57 +0000983
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000984/* Initial PY_LONG_LONG support by Chris Herborth (chrish@qnx.com), later
Tim Petersd1a7da62001-06-13 00:35:57 +0000985 * rewritten to use the newer PyLong_{As,From}ByteArray API.
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000986 */
987
Tim Peterscf37dfc2001-06-14 18:42:50 +0000988#define IS_LITTLE_ENDIAN (int)*(unsigned char*)&one
Mark Dickinson22b20182010-05-10 21:27:53 +0000989#define PY_ABS_LLONG_MIN (0-(unsigned PY_LONG_LONG)PY_LLONG_MIN)
Tim Petersd1a7da62001-06-13 00:35:57 +0000990
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000991/* Create a new long int object from a C PY_LONG_LONG int. */
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000992
993PyObject *
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000994PyLong_FromLongLong(PY_LONG_LONG ival)
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000995{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000996 PyLongObject *v;
997 unsigned PY_LONG_LONG abs_ival;
998 unsigned PY_LONG_LONG t; /* unsigned so >> doesn't propagate sign bit */
999 int ndigits = 0;
1000 int negative = 0;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001001
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001002 CHECK_SMALL_INT(ival);
1003 if (ival < 0) {
1004 /* avoid signed overflow on negation; see comments
1005 in PyLong_FromLong above. */
1006 abs_ival = (unsigned PY_LONG_LONG)(-1-ival) + 1;
1007 negative = 1;
1008 }
1009 else {
1010 abs_ival = (unsigned PY_LONG_LONG)ival;
1011 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00001012
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001013 /* Count the number of Python digits.
1014 We used to pick 5 ("big enough for anything"), but that's a
1015 waste of time and space given that 5*15 = 75 bits are rarely
1016 needed. */
1017 t = abs_ival;
1018 while (t) {
1019 ++ndigits;
1020 t >>= PyLong_SHIFT;
1021 }
1022 v = _PyLong_New(ndigits);
1023 if (v != NULL) {
1024 digit *p = v->ob_digit;
1025 Py_SIZE(v) = negative ? -ndigits : ndigits;
1026 t = abs_ival;
1027 while (t) {
1028 *p++ = (digit)(t & PyLong_MASK);
1029 t >>= PyLong_SHIFT;
1030 }
1031 }
1032 return (PyObject *)v;
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001033}
1034
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001035/* Create a new long int object from a C unsigned PY_LONG_LONG int. */
Tim Petersd1a7da62001-06-13 00:35:57 +00001036
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001037PyObject *
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001038PyLong_FromUnsignedLongLong(unsigned PY_LONG_LONG ival)
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001039{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001040 PyLongObject *v;
1041 unsigned PY_LONG_LONG t;
1042 int ndigits = 0;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001043
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001044 if (ival < PyLong_BASE)
1045 return PyLong_FromLong((long)ival);
1046 /* Count the number of Python digits. */
1047 t = (unsigned PY_LONG_LONG)ival;
1048 while (t) {
1049 ++ndigits;
1050 t >>= PyLong_SHIFT;
1051 }
1052 v = _PyLong_New(ndigits);
1053 if (v != NULL) {
1054 digit *p = v->ob_digit;
1055 Py_SIZE(v) = ndigits;
1056 while (ival) {
1057 *p++ = (digit)(ival & PyLong_MASK);
1058 ival >>= PyLong_SHIFT;
1059 }
1060 }
1061 return (PyObject *)v;
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001062}
1063
Martin v. Löwis18e16552006-02-15 17:27:45 +00001064/* Create a new long int object from a C Py_ssize_t. */
1065
1066PyObject *
Guido van Rossumddefaf32007-01-14 03:31:43 +00001067PyLong_FromSsize_t(Py_ssize_t ival)
Martin v. Löwis18e16552006-02-15 17:27:45 +00001068{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001069 PyLongObject *v;
1070 size_t abs_ival;
1071 size_t t; /* unsigned so >> doesn't propagate sign bit */
1072 int ndigits = 0;
1073 int negative = 0;
Mark Dickinson7ab6be22008-04-15 21:42:42 +00001074
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001075 CHECK_SMALL_INT(ival);
1076 if (ival < 0) {
1077 /* avoid signed overflow when ival = SIZE_T_MIN */
1078 abs_ival = (size_t)(-1-ival)+1;
1079 negative = 1;
1080 }
1081 else {
1082 abs_ival = (size_t)ival;
1083 }
Mark Dickinson7ab6be22008-04-15 21:42:42 +00001084
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001085 /* Count the number of Python digits. */
1086 t = abs_ival;
1087 while (t) {
1088 ++ndigits;
1089 t >>= PyLong_SHIFT;
1090 }
1091 v = _PyLong_New(ndigits);
1092 if (v != NULL) {
1093 digit *p = v->ob_digit;
1094 Py_SIZE(v) = negative ? -ndigits : ndigits;
1095 t = abs_ival;
1096 while (t) {
1097 *p++ = (digit)(t & PyLong_MASK);
1098 t >>= PyLong_SHIFT;
1099 }
1100 }
1101 return (PyObject *)v;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001102}
1103
1104/* Create a new long int object from a C size_t. */
1105
1106PyObject *
Guido van Rossumddefaf32007-01-14 03:31:43 +00001107PyLong_FromSize_t(size_t ival)
Martin v. Löwis18e16552006-02-15 17:27:45 +00001108{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001109 PyLongObject *v;
1110 size_t t;
1111 int ndigits = 0;
Mark Dickinson7ab6be22008-04-15 21:42:42 +00001112
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001113 if (ival < PyLong_BASE)
1114 return PyLong_FromLong((long)ival);
1115 /* Count the number of Python digits. */
1116 t = ival;
1117 while (t) {
1118 ++ndigits;
1119 t >>= PyLong_SHIFT;
1120 }
1121 v = _PyLong_New(ndigits);
1122 if (v != NULL) {
1123 digit *p = v->ob_digit;
1124 Py_SIZE(v) = ndigits;
1125 while (ival) {
1126 *p++ = (digit)(ival & PyLong_MASK);
1127 ival >>= PyLong_SHIFT;
1128 }
1129 }
1130 return (PyObject *)v;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001131}
1132
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001133/* Get a C PY_LONG_LONG int from a long int object.
Tim Petersd1a7da62001-06-13 00:35:57 +00001134 Return -1 and set an error if overflow occurs. */
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001135
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001136PY_LONG_LONG
Tim Peters9f688bf2000-07-07 15:53:28 +00001137PyLong_AsLongLong(PyObject *vv)
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001138{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001139 PyLongObject *v;
1140 PY_LONG_LONG bytes;
1141 int one = 1;
1142 int res;
Tim Petersd1a7da62001-06-13 00:35:57 +00001143
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001144 if (vv == NULL) {
1145 PyErr_BadInternalCall();
1146 return -1;
1147 }
1148 if (!PyLong_Check(vv)) {
1149 PyNumberMethods *nb;
1150 PyObject *io;
1151 if ((nb = vv->ob_type->tp_as_number) == NULL ||
1152 nb->nb_int == NULL) {
1153 PyErr_SetString(PyExc_TypeError, "an integer is required");
1154 return -1;
1155 }
1156 io = (*nb->nb_int) (vv);
1157 if (io == NULL)
1158 return -1;
1159 if (PyLong_Check(io)) {
1160 bytes = PyLong_AsLongLong(io);
1161 Py_DECREF(io);
1162 return bytes;
1163 }
1164 Py_DECREF(io);
1165 PyErr_SetString(PyExc_TypeError, "integer conversion failed");
1166 return -1;
1167 }
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001168
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001169 v = (PyLongObject*)vv;
1170 switch(Py_SIZE(v)) {
1171 case -1: return -(sdigit)v->ob_digit[0];
1172 case 0: return 0;
1173 case 1: return v->ob_digit[0];
1174 }
Mark Dickinson22b20182010-05-10 21:27:53 +00001175 res = _PyLong_AsByteArray((PyLongObject *)vv, (unsigned char *)&bytes,
1176 SIZEOF_LONG_LONG, IS_LITTLE_ENDIAN, 1);
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001177
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001178 /* Plan 9 can't handle PY_LONG_LONG in ? : expressions */
1179 if (res < 0)
1180 return (PY_LONG_LONG)-1;
1181 else
1182 return bytes;
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001183}
1184
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001185/* Get a C unsigned PY_LONG_LONG int from a long int object.
Tim Petersd1a7da62001-06-13 00:35:57 +00001186 Return -1 and set an error if overflow occurs. */
1187
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001188unsigned PY_LONG_LONG
Tim Peters9f688bf2000-07-07 15:53:28 +00001189PyLong_AsUnsignedLongLong(PyObject *vv)
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001190{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001191 PyLongObject *v;
1192 unsigned PY_LONG_LONG bytes;
1193 int one = 1;
1194 int res;
Tim Petersd1a7da62001-06-13 00:35:57 +00001195
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001196 if (vv == NULL || !PyLong_Check(vv)) {
1197 PyErr_BadInternalCall();
1198 return (unsigned PY_LONG_LONG)-1;
1199 }
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001200
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001201 v = (PyLongObject*)vv;
1202 switch(Py_SIZE(v)) {
1203 case 0: return 0;
1204 case 1: return v->ob_digit[0];
1205 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00001206
Mark Dickinson22b20182010-05-10 21:27:53 +00001207 res = _PyLong_AsByteArray((PyLongObject *)vv, (unsigned char *)&bytes,
1208 SIZEOF_LONG_LONG, IS_LITTLE_ENDIAN, 0);
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001209
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001210 /* Plan 9 can't handle PY_LONG_LONG in ? : expressions */
1211 if (res < 0)
1212 return (unsigned PY_LONG_LONG)res;
1213 else
1214 return bytes;
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001215}
Tim Petersd1a7da62001-06-13 00:35:57 +00001216
Thomas Hellera4ea6032003-04-17 18:55:45 +00001217/* Get a C unsigned long int from a long int object, ignoring the high bits.
1218 Returns -1 and sets an error condition if an error occurs. */
1219
Guido van Rossumddefaf32007-01-14 03:31:43 +00001220static unsigned PY_LONG_LONG
1221_PyLong_AsUnsignedLongLongMask(PyObject *vv)
Thomas Hellera4ea6032003-04-17 18:55:45 +00001222{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001223 register PyLongObject *v;
1224 unsigned PY_LONG_LONG x;
1225 Py_ssize_t i;
1226 int sign;
Thomas Hellera4ea6032003-04-17 18:55:45 +00001227
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001228 if (vv == NULL || !PyLong_Check(vv)) {
1229 PyErr_BadInternalCall();
1230 return (unsigned long) -1;
1231 }
1232 v = (PyLongObject *)vv;
1233 switch(Py_SIZE(v)) {
1234 case 0: return 0;
1235 case 1: return v->ob_digit[0];
1236 }
1237 i = Py_SIZE(v);
1238 sign = 1;
1239 x = 0;
1240 if (i < 0) {
1241 sign = -1;
1242 i = -i;
1243 }
1244 while (--i >= 0) {
1245 x = (x << PyLong_SHIFT) | v->ob_digit[i];
1246 }
1247 return x * sign;
Thomas Hellera4ea6032003-04-17 18:55:45 +00001248}
Guido van Rossumddefaf32007-01-14 03:31:43 +00001249
1250unsigned PY_LONG_LONG
1251PyLong_AsUnsignedLongLongMask(register PyObject *op)
1252{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001253 PyNumberMethods *nb;
1254 PyLongObject *lo;
1255 unsigned PY_LONG_LONG val;
Guido van Rossumddefaf32007-01-14 03:31:43 +00001256
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001257 if (op && PyLong_Check(op))
1258 return _PyLong_AsUnsignedLongLongMask(op);
Guido van Rossumddefaf32007-01-14 03:31:43 +00001259
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001260 if (op == NULL || (nb = op->ob_type->tp_as_number) == NULL ||
1261 nb->nb_int == NULL) {
1262 PyErr_SetString(PyExc_TypeError, "an integer is required");
1263 return (unsigned PY_LONG_LONG)-1;
1264 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00001265
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001266 lo = (PyLongObject*) (*nb->nb_int) (op);
1267 if (lo == NULL)
1268 return (unsigned PY_LONG_LONG)-1;
1269 if (PyLong_Check(lo)) {
1270 val = _PyLong_AsUnsignedLongLongMask((PyObject *)lo);
1271 Py_DECREF(lo);
1272 if (PyErr_Occurred())
1273 return (unsigned PY_LONG_LONG)-1;
1274 return val;
1275 }
1276 else
1277 {
1278 Py_DECREF(lo);
1279 PyErr_SetString(PyExc_TypeError,
1280 "nb_int should return int object");
1281 return (unsigned PY_LONG_LONG)-1;
1282 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00001283}
Tim Petersd1a7da62001-06-13 00:35:57 +00001284#undef IS_LITTLE_ENDIAN
1285
Mark Dickinson93f562c2010-01-30 10:30:15 +00001286/* Get a C long long int from a Python long or Python int object.
1287 On overflow, returns -1 and sets *overflow to 1 or -1 depending
1288 on the sign of the result. Otherwise *overflow is 0.
1289
1290 For other errors (e.g., type error), returns -1 and sets an error
1291 condition.
1292*/
1293
1294PY_LONG_LONG
1295PyLong_AsLongLongAndOverflow(PyObject *vv, int *overflow)
1296{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001297 /* This version by Tim Peters */
1298 register PyLongObject *v;
1299 unsigned PY_LONG_LONG x, prev;
1300 PY_LONG_LONG res;
1301 Py_ssize_t i;
1302 int sign;
1303 int do_decref = 0; /* if nb_int was called */
Mark Dickinson93f562c2010-01-30 10:30:15 +00001304
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001305 *overflow = 0;
1306 if (vv == NULL) {
1307 PyErr_BadInternalCall();
1308 return -1;
1309 }
Mark Dickinson93f562c2010-01-30 10:30:15 +00001310
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001311 if (!PyLong_Check(vv)) {
1312 PyNumberMethods *nb;
1313 nb = vv->ob_type->tp_as_number;
1314 if (nb == NULL || nb->nb_int == NULL) {
1315 PyErr_SetString(PyExc_TypeError,
1316 "an integer is required");
1317 return -1;
1318 }
1319 vv = (*nb->nb_int) (vv);
1320 if (vv == NULL)
1321 return -1;
1322 do_decref = 1;
1323 if (!PyLong_Check(vv)) {
1324 Py_DECREF(vv);
1325 PyErr_SetString(PyExc_TypeError,
1326 "nb_int should return int object");
1327 return -1;
1328 }
1329 }
Mark Dickinson93f562c2010-01-30 10:30:15 +00001330
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001331 res = -1;
1332 v = (PyLongObject *)vv;
1333 i = Py_SIZE(v);
Mark Dickinson93f562c2010-01-30 10:30:15 +00001334
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001335 switch (i) {
1336 case -1:
1337 res = -(sdigit)v->ob_digit[0];
1338 break;
1339 case 0:
1340 res = 0;
1341 break;
1342 case 1:
1343 res = v->ob_digit[0];
1344 break;
1345 default:
1346 sign = 1;
1347 x = 0;
1348 if (i < 0) {
1349 sign = -1;
1350 i = -(i);
1351 }
1352 while (--i >= 0) {
1353 prev = x;
1354 x = (x << PyLong_SHIFT) + v->ob_digit[i];
1355 if ((x >> PyLong_SHIFT) != prev) {
1356 *overflow = sign;
1357 goto exit;
1358 }
1359 }
1360 /* Haven't lost any bits, but casting to long requires extra
1361 * care (see comment above).
1362 */
1363 if (x <= (unsigned PY_LONG_LONG)PY_LLONG_MAX) {
1364 res = (PY_LONG_LONG)x * sign;
1365 }
1366 else if (sign < 0 && x == PY_ABS_LLONG_MIN) {
1367 res = PY_LLONG_MIN;
1368 }
1369 else {
1370 *overflow = sign;
1371 /* res is already set to -1 */
1372 }
1373 }
Mark Dickinson22b20182010-05-10 21:27:53 +00001374 exit:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001375 if (do_decref) {
1376 Py_DECREF(vv);
1377 }
1378 return res;
Mark Dickinson93f562c2010-01-30 10:30:15 +00001379}
1380
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001381#endif /* HAVE_LONG_LONG */
1382
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00001383#define CHECK_BINOP(v,w) \
1384 do { \
Brian Curtindfc80e32011-08-10 20:28:54 -05001385 if (!PyLong_Check(v) || !PyLong_Check(w)) \
1386 Py_RETURN_NOTIMPLEMENTED; \
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00001387 } while(0)
Neil Schemenauerba872e22001-01-04 01:46:03 +00001388
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001389/* bits_in_digit(d) returns the unique integer k such that 2**(k-1) <= d <
1390 2**k if d is nonzero, else 0. */
1391
1392static const unsigned char BitLengthTable[32] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001393 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
1394 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001395};
1396
1397static int
1398bits_in_digit(digit d)
1399{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001400 int d_bits = 0;
1401 while (d >= 32) {
1402 d_bits += 6;
1403 d >>= 6;
1404 }
1405 d_bits += (int)BitLengthTable[d];
1406 return d_bits;
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001407}
1408
Tim Peters877a2122002-08-12 05:09:36 +00001409/* x[0:m] and y[0:n] are digit vectors, LSD first, m >= n required. x[0:n]
1410 * is modified in place, by adding y to it. Carries are propagated as far as
1411 * x[m-1], and the remaining carry (0 or 1) is returned.
1412 */
1413static digit
Martin v. Löwis18e16552006-02-15 17:27:45 +00001414v_iadd(digit *x, Py_ssize_t m, digit *y, Py_ssize_t n)
Tim Peters877a2122002-08-12 05:09:36 +00001415{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001416 Py_ssize_t i;
1417 digit carry = 0;
Tim Peters877a2122002-08-12 05:09:36 +00001418
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001419 assert(m >= n);
1420 for (i = 0; i < n; ++i) {
1421 carry += x[i] + y[i];
1422 x[i] = carry & PyLong_MASK;
1423 carry >>= PyLong_SHIFT;
1424 assert((carry & 1) == carry);
1425 }
1426 for (; carry && i < m; ++i) {
1427 carry += x[i];
1428 x[i] = carry & PyLong_MASK;
1429 carry >>= PyLong_SHIFT;
1430 assert((carry & 1) == carry);
1431 }
1432 return carry;
Tim Peters877a2122002-08-12 05:09:36 +00001433}
1434
1435/* x[0:m] and y[0:n] are digit vectors, LSD first, m >= n required. x[0:n]
1436 * is modified in place, by subtracting y from it. Borrows are propagated as
1437 * far as x[m-1], and the remaining borrow (0 or 1) is returned.
1438 */
1439static digit
Martin v. Löwis18e16552006-02-15 17:27:45 +00001440v_isub(digit *x, Py_ssize_t m, digit *y, Py_ssize_t n)
Tim Peters877a2122002-08-12 05:09:36 +00001441{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001442 Py_ssize_t i;
1443 digit borrow = 0;
Tim Peters877a2122002-08-12 05:09:36 +00001444
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001445 assert(m >= n);
1446 for (i = 0; i < n; ++i) {
1447 borrow = x[i] - y[i] - borrow;
1448 x[i] = borrow & PyLong_MASK;
1449 borrow >>= PyLong_SHIFT;
1450 borrow &= 1; /* keep only 1 sign bit */
1451 }
1452 for (; borrow && i < m; ++i) {
1453 borrow = x[i] - borrow;
1454 x[i] = borrow & PyLong_MASK;
1455 borrow >>= PyLong_SHIFT;
1456 borrow &= 1;
1457 }
1458 return borrow;
Tim Peters877a2122002-08-12 05:09:36 +00001459}
Neil Schemenauerba872e22001-01-04 01:46:03 +00001460
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001461/* Shift digit vector a[0:m] d bits left, with 0 <= d < PyLong_SHIFT. Put
1462 * result in z[0:m], and return the d bits shifted out of the top.
1463 */
1464static digit
1465v_lshift(digit *z, digit *a, Py_ssize_t m, int d)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001466{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001467 Py_ssize_t i;
1468 digit carry = 0;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001469
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001470 assert(0 <= d && d < PyLong_SHIFT);
1471 for (i=0; i < m; i++) {
1472 twodigits acc = (twodigits)a[i] << d | carry;
1473 z[i] = (digit)acc & PyLong_MASK;
1474 carry = (digit)(acc >> PyLong_SHIFT);
1475 }
1476 return carry;
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001477}
1478
1479/* Shift digit vector a[0:m] d bits right, with 0 <= d < PyLong_SHIFT. Put
1480 * result in z[0:m], and return the d bits shifted out of the bottom.
1481 */
1482static digit
1483v_rshift(digit *z, digit *a, Py_ssize_t m, int d)
1484{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001485 Py_ssize_t i;
1486 digit carry = 0;
1487 digit mask = ((digit)1 << d) - 1U;
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001488
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001489 assert(0 <= d && d < PyLong_SHIFT);
1490 for (i=m; i-- > 0;) {
1491 twodigits acc = (twodigits)carry << PyLong_SHIFT | a[i];
1492 carry = (digit)acc & mask;
1493 z[i] = (digit)(acc >> d);
1494 }
1495 return carry;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001496}
1497
Tim Peters212e6142001-07-14 12:23:19 +00001498/* Divide long pin, w/ size digits, by non-zero digit n, storing quotient
1499 in pout, and returning the remainder. pin and pout point at the LSD.
1500 It's OK for pin == pout on entry, which saves oodles of mallocs/frees in
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001501 _PyLong_Format, but that should be done with great care since longs are
Tim Peters212e6142001-07-14 12:23:19 +00001502 immutable. */
1503
1504static digit
Martin v. Löwis18e16552006-02-15 17:27:45 +00001505inplace_divrem1(digit *pout, digit *pin, Py_ssize_t size, digit n)
Tim Peters212e6142001-07-14 12:23:19 +00001506{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001507 twodigits rem = 0;
Tim Peters212e6142001-07-14 12:23:19 +00001508
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001509 assert(n > 0 && n <= PyLong_MASK);
1510 pin += size;
1511 pout += size;
1512 while (--size >= 0) {
1513 digit hi;
1514 rem = (rem << PyLong_SHIFT) | *--pin;
1515 *--pout = hi = (digit)(rem / n);
1516 rem -= (twodigits)hi * n;
1517 }
1518 return (digit)rem;
Tim Peters212e6142001-07-14 12:23:19 +00001519}
1520
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001521/* Divide a long integer by a digit, returning both the quotient
1522 (as function result) and the remainder (through *prem).
1523 The sign of a is ignored; n should not be zero. */
1524
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001525static PyLongObject *
Tim Peters212e6142001-07-14 12:23:19 +00001526divrem1(PyLongObject *a, digit n, digit *prem)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001527{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001528 const Py_ssize_t size = ABS(Py_SIZE(a));
1529 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001530
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001531 assert(n > 0 && n <= PyLong_MASK);
1532 z = _PyLong_New(size);
1533 if (z == NULL)
1534 return NULL;
1535 *prem = inplace_divrem1(z->ob_digit, a->ob_digit, size, n);
1536 return long_normalize(z);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001537}
1538
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001539/* Convert a long integer to a base 10 string. Returns a new non-shared
1540 string. (Return value is non-shared so that callers can modify the
1541 returned value if necessary.) */
1542
1543static PyObject *
1544long_to_decimal_string(PyObject *aa)
1545{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001546 PyLongObject *scratch, *a;
1547 PyObject *str;
1548 Py_ssize_t size, strlen, size_a, i, j;
1549 digit *pout, *pin, rem, tenpow;
1550 Py_UNICODE *p;
1551 int negative;
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001552
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001553 a = (PyLongObject *)aa;
1554 if (a == NULL || !PyLong_Check(a)) {
1555 PyErr_BadInternalCall();
1556 return NULL;
1557 }
1558 size_a = ABS(Py_SIZE(a));
1559 negative = Py_SIZE(a) < 0;
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001560
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001561 /* quick and dirty upper bound for the number of digits
1562 required to express a in base _PyLong_DECIMAL_BASE:
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001563
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001564 #digits = 1 + floor(log2(a) / log2(_PyLong_DECIMAL_BASE))
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001565
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001566 But log2(a) < size_a * PyLong_SHIFT, and
1567 log2(_PyLong_DECIMAL_BASE) = log2(10) * _PyLong_DECIMAL_SHIFT
1568 > 3 * _PyLong_DECIMAL_SHIFT
1569 */
1570 if (size_a > PY_SSIZE_T_MAX / PyLong_SHIFT) {
1571 PyErr_SetString(PyExc_OverflowError,
1572 "long is too large to format");
1573 return NULL;
1574 }
1575 /* the expression size_a * PyLong_SHIFT is now safe from overflow */
1576 size = 1 + size_a * PyLong_SHIFT / (3 * _PyLong_DECIMAL_SHIFT);
1577 scratch = _PyLong_New(size);
1578 if (scratch == NULL)
1579 return NULL;
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001580
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001581 /* convert array of base _PyLong_BASE digits in pin to an array of
1582 base _PyLong_DECIMAL_BASE digits in pout, following Knuth (TAOCP,
1583 Volume 2 (3rd edn), section 4.4, Method 1b). */
1584 pin = a->ob_digit;
1585 pout = scratch->ob_digit;
1586 size = 0;
1587 for (i = size_a; --i >= 0; ) {
1588 digit hi = pin[i];
1589 for (j = 0; j < size; j++) {
1590 twodigits z = (twodigits)pout[j] << PyLong_SHIFT | hi;
1591 hi = (digit)(z / _PyLong_DECIMAL_BASE);
1592 pout[j] = (digit)(z - (twodigits)hi *
1593 _PyLong_DECIMAL_BASE);
1594 }
1595 while (hi) {
1596 pout[size++] = hi % _PyLong_DECIMAL_BASE;
1597 hi /= _PyLong_DECIMAL_BASE;
1598 }
1599 /* check for keyboard interrupt */
1600 SIGCHECK({
Mark Dickinson22b20182010-05-10 21:27:53 +00001601 Py_DECREF(scratch);
1602 return NULL;
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00001603 });
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001604 }
1605 /* pout should have at least one digit, so that the case when a = 0
1606 works correctly */
1607 if (size == 0)
1608 pout[size++] = 0;
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001609
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001610 /* calculate exact length of output string, and allocate */
1611 strlen = negative + 1 + (size - 1) * _PyLong_DECIMAL_SHIFT;
1612 tenpow = 10;
1613 rem = pout[size-1];
1614 while (rem >= tenpow) {
1615 tenpow *= 10;
1616 strlen++;
1617 }
1618 str = PyUnicode_FromUnicode(NULL, strlen);
1619 if (str == NULL) {
1620 Py_DECREF(scratch);
1621 return NULL;
1622 }
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001623
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001624 /* fill the string right-to-left */
1625 p = PyUnicode_AS_UNICODE(str) + strlen;
1626 *p = '\0';
1627 /* pout[0] through pout[size-2] contribute exactly
1628 _PyLong_DECIMAL_SHIFT digits each */
1629 for (i=0; i < size - 1; i++) {
1630 rem = pout[i];
1631 for (j = 0; j < _PyLong_DECIMAL_SHIFT; j++) {
1632 *--p = '0' + rem % 10;
1633 rem /= 10;
1634 }
1635 }
1636 /* pout[size-1]: always produce at least one decimal digit */
1637 rem = pout[i];
1638 do {
1639 *--p = '0' + rem % 10;
1640 rem /= 10;
1641 } while (rem != 0);
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001642
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001643 /* and sign */
1644 if (negative)
1645 *--p = '-';
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001646
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001647 /* check we've counted correctly */
1648 assert(p == PyUnicode_AS_UNICODE(str));
1649 Py_DECREF(scratch);
1650 return (PyObject *)str;
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001651}
1652
Mark Dickinsoncd068122009-09-18 14:53:08 +00001653/* Convert a long int object to a string, using a given conversion base,
1654 which should be one of 2, 8, 10 or 16. Return a string object.
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001655 If base is 2, 8 or 16, add the proper prefix '0b', '0o' or '0x'. */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001656
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001657PyObject *
1658_PyLong_Format(PyObject *aa, int base)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001659{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001660 register PyLongObject *a = (PyLongObject *)aa;
1661 PyObject *str;
1662 Py_ssize_t i, sz;
1663 Py_ssize_t size_a;
1664 Py_UNICODE *p, sign = '\0';
1665 int bits;
Guido van Rossume32e0141992-01-19 16:31:05 +00001666
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001667 assert(base == 2 || base == 8 || base == 10 || base == 16);
1668 if (base == 10)
1669 return long_to_decimal_string((PyObject *)a);
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001670
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001671 if (a == NULL || !PyLong_Check(a)) {
1672 PyErr_BadInternalCall();
1673 return NULL;
1674 }
1675 size_a = ABS(Py_SIZE(a));
Tim Peters5af4e6c2002-08-12 02:31:19 +00001676
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001677 /* Compute a rough upper bound for the length of the string */
1678 switch (base) {
1679 case 16:
1680 bits = 4;
1681 break;
1682 case 8:
1683 bits = 3;
1684 break;
1685 case 2:
1686 bits = 1;
1687 break;
1688 default:
1689 assert(0); /* shouldn't ever get here */
1690 bits = 0; /* to silence gcc warning */
1691 }
1692 /* compute length of output string: allow 2 characters for prefix and
1693 1 for possible '-' sign. */
1694 if (size_a > (PY_SSIZE_T_MAX - 3) / PyLong_SHIFT) {
1695 PyErr_SetString(PyExc_OverflowError,
1696 "int is too large to format");
1697 return NULL;
1698 }
1699 /* now size_a * PyLong_SHIFT + 3 <= PY_SSIZE_T_MAX, so the RHS below
1700 is safe from overflow */
1701 sz = 3 + (size_a * PyLong_SHIFT + (bits - 1)) / bits;
1702 assert(sz >= 0);
1703 str = PyUnicode_FromUnicode(NULL, sz);
1704 if (str == NULL)
1705 return NULL;
1706 p = PyUnicode_AS_UNICODE(str) + sz;
1707 *p = '\0';
1708 if (Py_SIZE(a) < 0)
1709 sign = '-';
Tim Peters5af4e6c2002-08-12 02:31:19 +00001710
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001711 if (Py_SIZE(a) == 0) {
1712 *--p = '0';
1713 }
1714 else {
1715 /* JRH: special case for power-of-2 bases */
1716 twodigits accum = 0;
1717 int accumbits = 0; /* # of bits in accum */
1718 for (i = 0; i < size_a; ++i) {
1719 accum |= (twodigits)a->ob_digit[i] << accumbits;
1720 accumbits += PyLong_SHIFT;
1721 assert(accumbits >= bits);
1722 do {
1723 Py_UNICODE cdigit;
1724 cdigit = (Py_UNICODE)(accum & (base - 1));
1725 cdigit += (cdigit < 10) ? '0' : 'a'-10;
1726 assert(p > PyUnicode_AS_UNICODE(str));
1727 *--p = cdigit;
1728 accumbits -= bits;
1729 accum >>= bits;
1730 } while (i < size_a-1 ? accumbits >= bits : accum > 0);
1731 }
1732 }
Mark Dickinson8accd6b2009-09-17 19:39:12 +00001733
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001734 if (base == 16)
1735 *--p = 'x';
1736 else if (base == 8)
1737 *--p = 'o';
1738 else /* (base == 2) */
1739 *--p = 'b';
1740 *--p = '0';
1741 if (sign)
1742 *--p = sign;
1743 if (p != PyUnicode_AS_UNICODE(str)) {
1744 Py_UNICODE *q = PyUnicode_AS_UNICODE(str);
1745 assert(p > q);
1746 do {
1747 } while ((*q++ = *p++) != '\0');
1748 q--;
1749 if (PyUnicode_Resize(&str,(Py_ssize_t) (q -
1750 PyUnicode_AS_UNICODE(str)))) {
1751 Py_DECREF(str);
1752 return NULL;
1753 }
1754 }
1755 return (PyObject *)str;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001756}
1757
Thomas Wouters477c8d52006-05-27 19:21:47 +00001758/* Table of digit values for 8-bit string -> integer conversion.
1759 * '0' maps to 0, ..., '9' maps to 9.
1760 * 'a' and 'A' map to 10, ..., 'z' and 'Z' map to 35.
1761 * All other indices map to 37.
1762 * Note that when converting a base B string, a char c is a legitimate
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00001763 * base B digit iff _PyLong_DigitValue[Py_CHARPyLong_MASK(c)] < B.
Thomas Wouters477c8d52006-05-27 19:21:47 +00001764 */
Raymond Hettinger35631532009-01-09 03:58:09 +00001765unsigned char _PyLong_DigitValue[256] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001766 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1767 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1768 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1769 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 37, 37, 37, 37, 37, 37,
1770 37, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1771 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 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, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1775 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 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,
Thomas Wouters477c8d52006-05-27 19:21:47 +00001782};
1783
1784/* *str points to the first digit in a string of base `base` digits. base
Tim Petersbf2674b2003-02-02 07:51:32 +00001785 * is a power of 2 (2, 4, 8, 16, or 32). *str is set to point to the first
1786 * non-digit (which may be *str!). A normalized long is returned.
1787 * The point to this routine is that it takes time linear in the number of
1788 * string characters.
1789 */
1790static PyLongObject *
1791long_from_binary_base(char **str, int base)
1792{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001793 char *p = *str;
1794 char *start = p;
1795 int bits_per_char;
1796 Py_ssize_t n;
1797 PyLongObject *z;
1798 twodigits accum;
1799 int bits_in_accum;
1800 digit *pdigit;
Tim Petersbf2674b2003-02-02 07:51:32 +00001801
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001802 assert(base >= 2 && base <= 32 && (base & (base - 1)) == 0);
1803 n = base;
1804 for (bits_per_char = -1; n; ++bits_per_char)
1805 n >>= 1;
1806 /* n <- total # of bits needed, while setting p to end-of-string */
1807 while (_PyLong_DigitValue[Py_CHARMASK(*p)] < base)
1808 ++p;
1809 *str = p;
1810 /* n <- # of Python digits needed, = ceiling(n/PyLong_SHIFT). */
1811 n = (p - start) * bits_per_char + PyLong_SHIFT - 1;
1812 if (n / bits_per_char < p - start) {
1813 PyErr_SetString(PyExc_ValueError,
1814 "int string too large to convert");
1815 return NULL;
1816 }
1817 n = n / PyLong_SHIFT;
1818 z = _PyLong_New(n);
1819 if (z == NULL)
1820 return NULL;
1821 /* Read string from right, and fill in long from left; i.e.,
1822 * from least to most significant in both.
1823 */
1824 accum = 0;
1825 bits_in_accum = 0;
1826 pdigit = z->ob_digit;
1827 while (--p >= start) {
1828 int k = (int)_PyLong_DigitValue[Py_CHARMASK(*p)];
1829 assert(k >= 0 && k < base);
1830 accum |= (twodigits)k << bits_in_accum;
1831 bits_in_accum += bits_per_char;
1832 if (bits_in_accum >= PyLong_SHIFT) {
1833 *pdigit++ = (digit)(accum & PyLong_MASK);
1834 assert(pdigit - z->ob_digit <= n);
1835 accum >>= PyLong_SHIFT;
1836 bits_in_accum -= PyLong_SHIFT;
1837 assert(bits_in_accum < PyLong_SHIFT);
1838 }
1839 }
1840 if (bits_in_accum) {
1841 assert(bits_in_accum <= PyLong_SHIFT);
1842 *pdigit++ = (digit)accum;
1843 assert(pdigit - z->ob_digit <= n);
1844 }
1845 while (pdigit - z->ob_digit < n)
1846 *pdigit++ = 0;
1847 return long_normalize(z);
Tim Petersbf2674b2003-02-02 07:51:32 +00001848}
1849
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001850PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00001851PyLong_FromString(char *str, char **pend, int base)
Guido van Rossumeb1fafc1994-08-29 12:47:19 +00001852{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001853 int sign = 1, error_if_nonzero = 0;
1854 char *start, *orig_str = str;
1855 PyLongObject *z = NULL;
1856 PyObject *strobj;
1857 Py_ssize_t slen;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001858
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001859 if ((base != 0 && base < 2) || base > 36) {
1860 PyErr_SetString(PyExc_ValueError,
1861 "int() arg 2 must be >= 2 and <= 36");
1862 return NULL;
1863 }
1864 while (*str != '\0' && isspace(Py_CHARMASK(*str)))
1865 str++;
1866 if (*str == '+')
1867 ++str;
1868 else if (*str == '-') {
1869 ++str;
1870 sign = -1;
1871 }
1872 if (base == 0) {
1873 if (str[0] != '0')
1874 base = 10;
1875 else if (str[1] == 'x' || str[1] == 'X')
1876 base = 16;
1877 else if (str[1] == 'o' || str[1] == 'O')
1878 base = 8;
1879 else if (str[1] == 'b' || str[1] == 'B')
1880 base = 2;
1881 else {
1882 /* "old" (C-style) octal literal, now invalid.
1883 it might still be zero though */
1884 error_if_nonzero = 1;
1885 base = 10;
1886 }
1887 }
1888 if (str[0] == '0' &&
1889 ((base == 16 && (str[1] == 'x' || str[1] == 'X')) ||
1890 (base == 8 && (str[1] == 'o' || str[1] == 'O')) ||
1891 (base == 2 && (str[1] == 'b' || str[1] == 'B'))))
1892 str += 2;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001893
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001894 start = str;
1895 if ((base & (base - 1)) == 0)
1896 z = long_from_binary_base(&str, base);
1897 else {
Thomas Wouters477c8d52006-05-27 19:21:47 +00001898/***
1899Binary bases can be converted in time linear in the number of digits, because
1900Python's representation base is binary. Other bases (including decimal!) use
1901the simple quadratic-time algorithm below, complicated by some speed tricks.
Tim Peters5af4e6c2002-08-12 02:31:19 +00001902
Thomas Wouters477c8d52006-05-27 19:21:47 +00001903First some math: the largest integer that can be expressed in N base-B digits
1904is B**N-1. Consequently, if we have an N-digit input in base B, the worst-
1905case number of Python digits needed to hold it is the smallest integer n s.t.
1906
1907 BASE**n-1 >= B**N-1 [or, adding 1 to both sides]
1908 BASE**n >= B**N [taking logs to base BASE]
1909 n >= log(B**N)/log(BASE) = N * log(B)/log(BASE)
1910
1911The static array log_base_BASE[base] == log(base)/log(BASE) so we can compute
1912this quickly. A Python long with that much space is reserved near the start,
1913and the result is computed into it.
1914
1915The input string is actually treated as being in base base**i (i.e., i digits
1916are processed at a time), where two more static arrays hold:
1917
1918 convwidth_base[base] = the largest integer i such that base**i <= BASE
1919 convmultmax_base[base] = base ** convwidth_base[base]
1920
1921The first of these is the largest i such that i consecutive input digits
1922must fit in a single Python digit. The second is effectively the input
1923base we're really using.
1924
1925Viewing the input as a sequence <c0, c1, ..., c_n-1> of digits in base
1926convmultmax_base[base], the result is "simply"
1927
1928 (((c0*B + c1)*B + c2)*B + c3)*B + ... ))) + c_n-1
1929
1930where B = convmultmax_base[base].
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001931
1932Error analysis: as above, the number of Python digits `n` needed is worst-
1933case
1934
1935 n >= N * log(B)/log(BASE)
1936
1937where `N` is the number of input digits in base `B`. This is computed via
1938
1939 size_z = (Py_ssize_t)((scan - str) * log_base_BASE[base]) + 1;
1940
1941below. Two numeric concerns are how much space this can waste, and whether
1942the computed result can be too small. To be concrete, assume BASE = 2**15,
1943which is the default (and it's unlikely anyone changes that).
1944
1945Waste isn't a problem: provided the first input digit isn't 0, the difference
1946between the worst-case input with N digits and the smallest input with N
1947digits is about a factor of B, but B is small compared to BASE so at most
1948one allocated Python digit can remain unused on that count. If
1949N*log(B)/log(BASE) is mathematically an exact integer, then truncating that
1950and adding 1 returns a result 1 larger than necessary. However, that can't
1951happen: whenever B is a power of 2, long_from_binary_base() is called
1952instead, and it's impossible for B**i to be an integer power of 2**15 when
1953B is not a power of 2 (i.e., it's impossible for N*log(B)/log(BASE) to be
1954an exact integer when B is not a power of 2, since B**i has a prime factor
1955other than 2 in that case, but (2**15)**j's only prime factor is 2).
1956
1957The computed result can be too small if the true value of N*log(B)/log(BASE)
1958is a little bit larger than an exact integer, but due to roundoff errors (in
1959computing log(B), log(BASE), their quotient, and/or multiplying that by N)
1960yields a numeric result a little less than that integer. Unfortunately, "how
1961close can a transcendental function get to an integer over some range?"
1962questions are generally theoretically intractable. Computer analysis via
1963continued fractions is practical: expand log(B)/log(BASE) via continued
1964fractions, giving a sequence i/j of "the best" rational approximations. Then
1965j*log(B)/log(BASE) is approximately equal to (the integer) i. This shows that
1966we can get very close to being in trouble, but very rarely. For example,
196776573 is a denominator in one of the continued-fraction approximations to
1968log(10)/log(2**15), and indeed:
1969
1970 >>> log(10)/log(2**15)*76573
1971 16958.000000654003
1972
1973is very close to an integer. If we were working with IEEE single-precision,
1974rounding errors could kill us. Finding worst cases in IEEE double-precision
1975requires better-than-double-precision log() functions, and Tim didn't bother.
1976Instead the code checks to see whether the allocated space is enough as each
1977new Python digit is added, and copies the whole thing to a larger long if not.
1978This should happen extremely rarely, and in fact I don't have a test case
1979that triggers it(!). Instead the code was tested by artificially allocating
1980just 1 digit at the start, so that the copying code was exercised for every
1981digit beyond the first.
Thomas Wouters477c8d52006-05-27 19:21:47 +00001982***/
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001983 register twodigits c; /* current input character */
1984 Py_ssize_t size_z;
1985 int i;
1986 int convwidth;
1987 twodigits convmultmax, convmult;
1988 digit *pz, *pzstop;
1989 char* scan;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001990
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001991 static double log_base_BASE[37] = {0.0e0,};
1992 static int convwidth_base[37] = {0,};
1993 static twodigits convmultmax_base[37] = {0,};
Thomas Wouters477c8d52006-05-27 19:21:47 +00001994
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001995 if (log_base_BASE[base] == 0.0) {
1996 twodigits convmax = base;
1997 int i = 1;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001998
Mark Dickinson22b20182010-05-10 21:27:53 +00001999 log_base_BASE[base] = (log((double)base) /
2000 log((double)PyLong_BASE));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002001 for (;;) {
2002 twodigits next = convmax * base;
2003 if (next > PyLong_BASE)
2004 break;
2005 convmax = next;
2006 ++i;
2007 }
2008 convmultmax_base[base] = convmax;
2009 assert(i > 0);
2010 convwidth_base[base] = i;
2011 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00002012
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002013 /* Find length of the string of numeric characters. */
2014 scan = str;
2015 while (_PyLong_DigitValue[Py_CHARMASK(*scan)] < base)
2016 ++scan;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002017
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002018 /* Create a long object that can contain the largest possible
2019 * integer with this base and length. Note that there's no
2020 * need to initialize z->ob_digit -- no slot is read up before
2021 * being stored into.
2022 */
2023 size_z = (Py_ssize_t)((scan - str) * log_base_BASE[base]) + 1;
2024 /* Uncomment next line to test exceedingly rare copy code */
2025 /* size_z = 1; */
2026 assert(size_z > 0);
2027 z = _PyLong_New(size_z);
2028 if (z == NULL)
2029 return NULL;
2030 Py_SIZE(z) = 0;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002031
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002032 /* `convwidth` consecutive input digits are treated as a single
2033 * digit in base `convmultmax`.
2034 */
2035 convwidth = convwidth_base[base];
2036 convmultmax = convmultmax_base[base];
Thomas Wouters477c8d52006-05-27 19:21:47 +00002037
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002038 /* Work ;-) */
2039 while (str < scan) {
2040 /* grab up to convwidth digits from the input string */
2041 c = (digit)_PyLong_DigitValue[Py_CHARMASK(*str++)];
2042 for (i = 1; i < convwidth && str != scan; ++i, ++str) {
2043 c = (twodigits)(c * base +
Mark Dickinson22b20182010-05-10 21:27:53 +00002044 (int)_PyLong_DigitValue[Py_CHARMASK(*str)]);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002045 assert(c < PyLong_BASE);
2046 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00002047
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002048 convmult = convmultmax;
2049 /* Calculate the shift only if we couldn't get
2050 * convwidth digits.
2051 */
2052 if (i != convwidth) {
2053 convmult = base;
2054 for ( ; i > 1; --i)
2055 convmult *= base;
2056 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00002057
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002058 /* Multiply z by convmult, and add c. */
2059 pz = z->ob_digit;
2060 pzstop = pz + Py_SIZE(z);
2061 for (; pz < pzstop; ++pz) {
2062 c += (twodigits)*pz * convmult;
2063 *pz = (digit)(c & PyLong_MASK);
2064 c >>= PyLong_SHIFT;
2065 }
2066 /* carry off the current end? */
2067 if (c) {
2068 assert(c < PyLong_BASE);
2069 if (Py_SIZE(z) < size_z) {
2070 *pz = (digit)c;
2071 ++Py_SIZE(z);
2072 }
2073 else {
2074 PyLongObject *tmp;
2075 /* Extremely rare. Get more space. */
2076 assert(Py_SIZE(z) == size_z);
2077 tmp = _PyLong_New(size_z + 1);
2078 if (tmp == NULL) {
2079 Py_DECREF(z);
2080 return NULL;
2081 }
2082 memcpy(tmp->ob_digit,
2083 z->ob_digit,
2084 sizeof(digit) * size_z);
2085 Py_DECREF(z);
2086 z = tmp;
2087 z->ob_digit[size_z] = (digit)c;
2088 ++size_z;
2089 }
2090 }
2091 }
2092 }
2093 if (z == NULL)
2094 return NULL;
2095 if (error_if_nonzero) {
2096 /* reset the base to 0, else the exception message
2097 doesn't make too much sense */
2098 base = 0;
2099 if (Py_SIZE(z) != 0)
2100 goto onError;
2101 /* there might still be other problems, therefore base
2102 remains zero here for the same reason */
2103 }
2104 if (str == start)
2105 goto onError;
2106 if (sign < 0)
2107 Py_SIZE(z) = -(Py_SIZE(z));
2108 while (*str && isspace(Py_CHARMASK(*str)))
2109 str++;
2110 if (*str != '\0')
2111 goto onError;
2112 if (pend)
2113 *pend = str;
2114 long_normalize(z);
2115 return (PyObject *) maybe_small_long(z);
Guido van Rossum9e896b32000-04-05 20:11:21 +00002116
Mark Dickinson22b20182010-05-10 21:27:53 +00002117 onError:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002118 Py_XDECREF(z);
2119 slen = strlen(orig_str) < 200 ? strlen(orig_str) : 200;
2120 strobj = PyUnicode_FromStringAndSize(orig_str, slen);
2121 if (strobj == NULL)
2122 return NULL;
2123 PyErr_Format(PyExc_ValueError,
2124 "invalid literal for int() with base %d: %R",
2125 base, strobj);
2126 Py_DECREF(strobj);
2127 return NULL;
Guido van Rossum9e896b32000-04-05 20:11:21 +00002128}
2129
2130PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00002131PyLong_FromUnicode(Py_UNICODE *u, Py_ssize_t length, int base)
Guido van Rossum9e896b32000-04-05 20:11:21 +00002132{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002133 PyObject *result;
Alexander Belopolsky942af5a2010-12-04 03:38:46 +00002134 PyObject *asciidig;
2135 char *buffer, *end;
2136 Py_ssize_t i, buflen;
2137 Py_UNICODE *ptr;
Guido van Rossum9e896b32000-04-05 20:11:21 +00002138
Alexander Belopolsky942af5a2010-12-04 03:38:46 +00002139 asciidig = PyUnicode_TransformDecimalToASCII(u, length);
2140 if (asciidig == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002141 return NULL;
Alexander Belopolsky942af5a2010-12-04 03:38:46 +00002142 /* Replace non-ASCII whitespace with ' ' */
2143 ptr = PyUnicode_AS_UNICODE(asciidig);
2144 for (i = 0; i < length; i++) {
Mark Dickinsonc9fb3c62010-12-04 11:06:25 +00002145 Py_UNICODE ch = ptr[i];
2146 if (ch > 127 && Py_UNICODE_ISSPACE(ch))
2147 ptr[i] = ' ';
Alexander Belopolsky942af5a2010-12-04 03:38:46 +00002148 }
2149 buffer = _PyUnicode_AsStringAndSize(asciidig, &buflen);
2150 if (buffer == NULL) {
2151 Py_DECREF(asciidig);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002152 return NULL;
2153 }
Alexander Belopolsky942af5a2010-12-04 03:38:46 +00002154 result = PyLong_FromString(buffer, &end, base);
2155 if (result != NULL && end != buffer + buflen) {
2156 PyErr_SetString(PyExc_ValueError,
2157 "null byte in argument for int()");
2158 Py_DECREF(result);
2159 result = NULL;
2160 }
2161 Py_DECREF(asciidig);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002162 return result;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002163}
2164
Tim Peters9f688bf2000-07-07 15:53:28 +00002165/* forward */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002166static PyLongObject *x_divrem
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002167 (PyLongObject *, PyLongObject *, PyLongObject **);
Guido van Rossumb43daf72007-08-01 18:08:08 +00002168static PyObject *long_long(PyObject *v);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002169
2170/* Long division with remainder, top-level routine */
2171
Guido van Rossume32e0141992-01-19 16:31:05 +00002172static int
Tim Peters9f688bf2000-07-07 15:53:28 +00002173long_divrem(PyLongObject *a, PyLongObject *b,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002174 PyLongObject **pdiv, PyLongObject **prem)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002175{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002176 Py_ssize_t size_a = ABS(Py_SIZE(a)), size_b = ABS(Py_SIZE(b));
2177 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002178
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002179 if (size_b == 0) {
2180 PyErr_SetString(PyExc_ZeroDivisionError,
2181 "integer division or modulo by zero");
2182 return -1;
2183 }
2184 if (size_a < size_b ||
2185 (size_a == size_b &&
2186 a->ob_digit[size_a-1] < b->ob_digit[size_b-1])) {
2187 /* |a| < |b|. */
2188 *pdiv = (PyLongObject*)PyLong_FromLong(0);
2189 if (*pdiv == NULL)
2190 return -1;
2191 Py_INCREF(a);
2192 *prem = (PyLongObject *) a;
2193 return 0;
2194 }
2195 if (size_b == 1) {
2196 digit rem = 0;
2197 z = divrem1(a, b->ob_digit[0], &rem);
2198 if (z == NULL)
2199 return -1;
2200 *prem = (PyLongObject *) PyLong_FromLong((long)rem);
2201 if (*prem == NULL) {
2202 Py_DECREF(z);
2203 return -1;
2204 }
2205 }
2206 else {
2207 z = x_divrem(a, b, prem);
2208 if (z == NULL)
2209 return -1;
2210 }
2211 /* Set the signs.
2212 The quotient z has the sign of a*b;
2213 the remainder r has the sign of a,
2214 so a = b*z + r. */
2215 if ((Py_SIZE(a) < 0) != (Py_SIZE(b) < 0))
2216 NEGATE(z);
2217 if (Py_SIZE(a) < 0 && Py_SIZE(*prem) != 0)
2218 NEGATE(*prem);
2219 *pdiv = maybe_small_long(z);
2220 return 0;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002221}
2222
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002223/* Unsigned long division with remainder -- the algorithm. The arguments v1
2224 and w1 should satisfy 2 <= ABS(Py_SIZE(w1)) <= ABS(Py_SIZE(v1)). */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002225
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002226static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00002227x_divrem(PyLongObject *v1, PyLongObject *w1, PyLongObject **prem)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002228{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002229 PyLongObject *v, *w, *a;
2230 Py_ssize_t i, k, size_v, size_w;
2231 int d;
2232 digit wm1, wm2, carry, q, r, vtop, *v0, *vk, *w0, *ak;
2233 twodigits vv;
2234 sdigit zhi;
2235 stwodigits z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002236
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002237 /* We follow Knuth [The Art of Computer Programming, Vol. 2 (3rd
2238 edn.), section 4.3.1, Algorithm D], except that we don't explicitly
2239 handle the special case when the initial estimate q for a quotient
2240 digit is >= PyLong_BASE: the max value for q is PyLong_BASE+1, and
2241 that won't overflow a digit. */
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002242
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002243 /* allocate space; w will also be used to hold the final remainder */
2244 size_v = ABS(Py_SIZE(v1));
2245 size_w = ABS(Py_SIZE(w1));
2246 assert(size_v >= size_w && size_w >= 2); /* Assert checks by div() */
2247 v = _PyLong_New(size_v+1);
2248 if (v == NULL) {
2249 *prem = NULL;
2250 return NULL;
2251 }
2252 w = _PyLong_New(size_w);
2253 if (w == NULL) {
2254 Py_DECREF(v);
2255 *prem = NULL;
2256 return NULL;
2257 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002258
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002259 /* normalize: shift w1 left so that its top digit is >= PyLong_BASE/2.
2260 shift v1 left by the same amount. Results go into w and v. */
2261 d = PyLong_SHIFT - bits_in_digit(w1->ob_digit[size_w-1]);
2262 carry = v_lshift(w->ob_digit, w1->ob_digit, size_w, d);
2263 assert(carry == 0);
2264 carry = v_lshift(v->ob_digit, v1->ob_digit, size_v, d);
2265 if (carry != 0 || v->ob_digit[size_v-1] >= w->ob_digit[size_w-1]) {
2266 v->ob_digit[size_v] = carry;
2267 size_v++;
2268 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002269
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002270 /* Now v->ob_digit[size_v-1] < w->ob_digit[size_w-1], so quotient has
2271 at most (and usually exactly) k = size_v - size_w digits. */
2272 k = size_v - size_w;
2273 assert(k >= 0);
2274 a = _PyLong_New(k);
2275 if (a == NULL) {
2276 Py_DECREF(w);
2277 Py_DECREF(v);
2278 *prem = NULL;
2279 return NULL;
2280 }
2281 v0 = v->ob_digit;
2282 w0 = w->ob_digit;
2283 wm1 = w0[size_w-1];
2284 wm2 = w0[size_w-2];
2285 for (vk = v0+k, ak = a->ob_digit + k; vk-- > v0;) {
2286 /* inner loop: divide vk[0:size_w+1] by w0[0:size_w], giving
2287 single-digit quotient q, remainder in vk[0:size_w]. */
Tim Peters5af4e6c2002-08-12 02:31:19 +00002288
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002289 SIGCHECK({
Mark Dickinson22b20182010-05-10 21:27:53 +00002290 Py_DECREF(a);
2291 Py_DECREF(w);
2292 Py_DECREF(v);
2293 *prem = NULL;
2294 return NULL;
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00002295 });
Tim Peters5af4e6c2002-08-12 02:31:19 +00002296
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002297 /* estimate quotient digit q; may overestimate by 1 (rare) */
2298 vtop = vk[size_w];
2299 assert(vtop <= wm1);
2300 vv = ((twodigits)vtop << PyLong_SHIFT) | vk[size_w-1];
2301 q = (digit)(vv / wm1);
2302 r = (digit)(vv - (twodigits)wm1 * q); /* r = vv % wm1 */
2303 while ((twodigits)wm2 * q > (((twodigits)r << PyLong_SHIFT)
2304 | vk[size_w-2])) {
2305 --q;
2306 r += wm1;
2307 if (r >= PyLong_BASE)
2308 break;
2309 }
2310 assert(q <= PyLong_BASE);
Tim Peters5af4e6c2002-08-12 02:31:19 +00002311
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002312 /* subtract q*w0[0:size_w] from vk[0:size_w+1] */
2313 zhi = 0;
2314 for (i = 0; i < size_w; ++i) {
2315 /* invariants: -PyLong_BASE <= -q <= zhi <= 0;
2316 -PyLong_BASE * q <= z < PyLong_BASE */
2317 z = (sdigit)vk[i] + zhi -
2318 (stwodigits)q * (stwodigits)w0[i];
2319 vk[i] = (digit)z & PyLong_MASK;
2320 zhi = (sdigit)Py_ARITHMETIC_RIGHT_SHIFT(stwodigits,
Mark Dickinson22b20182010-05-10 21:27:53 +00002321 z, PyLong_SHIFT);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002322 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002323
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002324 /* add w back if q was too large (this branch taken rarely) */
2325 assert((sdigit)vtop + zhi == -1 || (sdigit)vtop + zhi == 0);
2326 if ((sdigit)vtop + zhi < 0) {
2327 carry = 0;
2328 for (i = 0; i < size_w; ++i) {
2329 carry += vk[i] + w0[i];
2330 vk[i] = carry & PyLong_MASK;
2331 carry >>= PyLong_SHIFT;
2332 }
2333 --q;
2334 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002335
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002336 /* store quotient digit */
2337 assert(q < PyLong_BASE);
2338 *--ak = q;
2339 }
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002340
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002341 /* unshift remainder; we reuse w to store the result */
2342 carry = v_rshift(w0, v0, size_w, d);
2343 assert(carry==0);
2344 Py_DECREF(v);
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002345
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002346 *prem = long_normalize(w);
2347 return long_normalize(a);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002348}
2349
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002350/* For a nonzero PyLong a, express a in the form x * 2**e, with 0.5 <=
2351 abs(x) < 1.0 and e >= 0; return x and put e in *e. Here x is
2352 rounded to DBL_MANT_DIG significant bits using round-half-to-even.
2353 If a == 0, return 0.0 and set *e = 0. If the resulting exponent
2354 e is larger than PY_SSIZE_T_MAX, raise OverflowError and return
2355 -1.0. */
2356
2357/* attempt to define 2.0**DBL_MANT_DIG as a compile-time constant */
2358#if DBL_MANT_DIG == 53
2359#define EXP2_DBL_MANT_DIG 9007199254740992.0
2360#else
2361#define EXP2_DBL_MANT_DIG (ldexp(1.0, DBL_MANT_DIG))
2362#endif
2363
2364double
2365_PyLong_Frexp(PyLongObject *a, Py_ssize_t *e)
2366{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002367 Py_ssize_t a_size, a_bits, shift_digits, shift_bits, x_size;
2368 /* See below for why x_digits is always large enough. */
2369 digit rem, x_digits[2 + (DBL_MANT_DIG + 1) / PyLong_SHIFT];
2370 double dx;
2371 /* Correction term for round-half-to-even rounding. For a digit x,
2372 "x + half_even_correction[x & 7]" gives x rounded to the nearest
2373 multiple of 4, rounding ties to a multiple of 8. */
2374 static const int half_even_correction[8] = {0, -1, -2, 1, 0, -1, 2, 1};
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002375
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002376 a_size = ABS(Py_SIZE(a));
2377 if (a_size == 0) {
2378 /* Special case for 0: significand 0.0, exponent 0. */
2379 *e = 0;
2380 return 0.0;
2381 }
2382 a_bits = bits_in_digit(a->ob_digit[a_size-1]);
2383 /* The following is an overflow-free version of the check
2384 "if ((a_size - 1) * PyLong_SHIFT + a_bits > PY_SSIZE_T_MAX) ..." */
2385 if (a_size >= (PY_SSIZE_T_MAX - 1) / PyLong_SHIFT + 1 &&
2386 (a_size > (PY_SSIZE_T_MAX - 1) / PyLong_SHIFT + 1 ||
2387 a_bits > (PY_SSIZE_T_MAX - 1) % PyLong_SHIFT + 1))
Mark Dickinson22b20182010-05-10 21:27:53 +00002388 goto overflow;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002389 a_bits = (a_size - 1) * PyLong_SHIFT + a_bits;
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002390
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002391 /* Shift the first DBL_MANT_DIG + 2 bits of a into x_digits[0:x_size]
2392 (shifting left if a_bits <= DBL_MANT_DIG + 2).
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002393
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002394 Number of digits needed for result: write // for floor division.
2395 Then if shifting left, we end up using
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002396
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002397 1 + a_size + (DBL_MANT_DIG + 2 - a_bits) // PyLong_SHIFT
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002398
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002399 digits. If shifting right, we use
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002400
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002401 a_size - (a_bits - DBL_MANT_DIG - 2) // PyLong_SHIFT
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002402
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002403 digits. Using a_size = 1 + (a_bits - 1) // PyLong_SHIFT along with
2404 the inequalities
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002405
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002406 m // PyLong_SHIFT + n // PyLong_SHIFT <= (m + n) // PyLong_SHIFT
2407 m // PyLong_SHIFT - n // PyLong_SHIFT <=
2408 1 + (m - n - 1) // PyLong_SHIFT,
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002409
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002410 valid for any integers m and n, we find that x_size satisfies
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002411
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002412 x_size <= 2 + (DBL_MANT_DIG + 1) // PyLong_SHIFT
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002413
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002414 in both cases.
2415 */
2416 if (a_bits <= DBL_MANT_DIG + 2) {
2417 shift_digits = (DBL_MANT_DIG + 2 - a_bits) / PyLong_SHIFT;
2418 shift_bits = (DBL_MANT_DIG + 2 - a_bits) % PyLong_SHIFT;
2419 x_size = 0;
2420 while (x_size < shift_digits)
2421 x_digits[x_size++] = 0;
2422 rem = v_lshift(x_digits + x_size, a->ob_digit, a_size,
2423 (int)shift_bits);
2424 x_size += a_size;
2425 x_digits[x_size++] = rem;
2426 }
2427 else {
2428 shift_digits = (a_bits - DBL_MANT_DIG - 2) / PyLong_SHIFT;
2429 shift_bits = (a_bits - DBL_MANT_DIG - 2) % PyLong_SHIFT;
2430 rem = v_rshift(x_digits, a->ob_digit + shift_digits,
2431 a_size - shift_digits, (int)shift_bits);
2432 x_size = a_size - shift_digits;
2433 /* For correct rounding below, we need the least significant
2434 bit of x to be 'sticky' for this shift: if any of the bits
2435 shifted out was nonzero, we set the least significant bit
2436 of x. */
2437 if (rem)
2438 x_digits[0] |= 1;
2439 else
2440 while (shift_digits > 0)
2441 if (a->ob_digit[--shift_digits]) {
2442 x_digits[0] |= 1;
2443 break;
2444 }
2445 }
Mark Dickinson22b20182010-05-10 21:27:53 +00002446 assert(1 <= x_size &&
2447 x_size <= (Py_ssize_t)(sizeof(x_digits)/sizeof(digit)));
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002448
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002449 /* Round, and convert to double. */
2450 x_digits[0] += half_even_correction[x_digits[0] & 7];
2451 dx = x_digits[--x_size];
2452 while (x_size > 0)
2453 dx = dx * PyLong_BASE + x_digits[--x_size];
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002454
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002455 /* Rescale; make correction if result is 1.0. */
2456 dx /= 4.0 * EXP2_DBL_MANT_DIG;
2457 if (dx == 1.0) {
2458 if (a_bits == PY_SSIZE_T_MAX)
2459 goto overflow;
2460 dx = 0.5;
2461 a_bits += 1;
2462 }
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002463
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002464 *e = a_bits;
2465 return Py_SIZE(a) < 0 ? -dx : dx;
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002466
2467 overflow:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002468 /* exponent > PY_SSIZE_T_MAX */
2469 PyErr_SetString(PyExc_OverflowError,
2470 "huge integer: number of bits overflows a Py_ssize_t");
2471 *e = 0;
2472 return -1.0;
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002473}
2474
2475/* Get a C double from a long int object. Rounds to the nearest double,
2476 using the round-half-to-even rule in the case of a tie. */
2477
2478double
2479PyLong_AsDouble(PyObject *v)
2480{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002481 Py_ssize_t exponent;
2482 double x;
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002483
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002484 if (v == NULL || !PyLong_Check(v)) {
2485 PyErr_BadInternalCall();
2486 return -1.0;
2487 }
2488 x = _PyLong_Frexp((PyLongObject *)v, &exponent);
2489 if ((x == -1.0 && PyErr_Occurred()) || exponent > DBL_MAX_EXP) {
2490 PyErr_SetString(PyExc_OverflowError,
2491 "long int too large to convert to float");
2492 return -1.0;
2493 }
2494 return ldexp(x, (int)exponent);
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002495}
2496
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002497/* Methods */
2498
2499static void
Tim Peters9f688bf2000-07-07 15:53:28 +00002500long_dealloc(PyObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002501{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002502 Py_TYPE(v)->tp_free(v);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002503}
2504
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002505static int
Tim Peters9f688bf2000-07-07 15:53:28 +00002506long_compare(PyLongObject *a, PyLongObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002507{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002508 Py_ssize_t sign;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002509
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002510 if (Py_SIZE(a) != Py_SIZE(b)) {
2511 sign = Py_SIZE(a) - Py_SIZE(b);
2512 }
2513 else {
2514 Py_ssize_t i = ABS(Py_SIZE(a));
2515 while (--i >= 0 && a->ob_digit[i] == b->ob_digit[i])
2516 ;
2517 if (i < 0)
2518 sign = 0;
2519 else {
2520 sign = (sdigit)a->ob_digit[i] - (sdigit)b->ob_digit[i];
2521 if (Py_SIZE(a) < 0)
2522 sign = -sign;
2523 }
2524 }
2525 return sign < 0 ? -1 : sign > 0 ? 1 : 0;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002526}
2527
Antoine Pitrou51f3ef92008-12-20 13:14:23 +00002528#define TEST_COND(cond) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002529 ((cond) ? Py_True : Py_False)
Antoine Pitrou51f3ef92008-12-20 13:14:23 +00002530
Guido van Rossum47b9ff62006-08-24 00:41:19 +00002531static PyObject *
2532long_richcompare(PyObject *self, PyObject *other, int op)
2533{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002534 int result;
2535 PyObject *v;
2536 CHECK_BINOP(self, other);
2537 if (self == other)
2538 result = 0;
2539 else
2540 result = long_compare((PyLongObject*)self, (PyLongObject*)other);
2541 /* Convert the return value to a Boolean */
2542 switch (op) {
2543 case Py_EQ:
2544 v = TEST_COND(result == 0);
2545 break;
2546 case Py_NE:
2547 v = TEST_COND(result != 0);
2548 break;
2549 case Py_LE:
2550 v = TEST_COND(result <= 0);
2551 break;
2552 case Py_GE:
2553 v = TEST_COND(result >= 0);
2554 break;
2555 case Py_LT:
2556 v = TEST_COND(result == -1);
2557 break;
2558 case Py_GT:
2559 v = TEST_COND(result == 1);
2560 break;
2561 default:
2562 PyErr_BadArgument();
2563 return NULL;
2564 }
2565 Py_INCREF(v);
2566 return v;
Guido van Rossum47b9ff62006-08-24 00:41:19 +00002567}
2568
Benjamin Peterson8f67d082010-10-17 20:54:53 +00002569static Py_hash_t
Tim Peters9f688bf2000-07-07 15:53:28 +00002570long_hash(PyLongObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00002571{
Benjamin Peterson8035bc52010-10-23 16:20:50 +00002572 Py_uhash_t x;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002573 Py_ssize_t i;
2574 int sign;
Guido van Rossum9bfef441993-03-29 10:43:31 +00002575
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002576 i = Py_SIZE(v);
2577 switch(i) {
2578 case -1: return v->ob_digit[0]==1 ? -2 : -(sdigit)v->ob_digit[0];
2579 case 0: return 0;
2580 case 1: return v->ob_digit[0];
2581 }
2582 sign = 1;
2583 x = 0;
2584 if (i < 0) {
2585 sign = -1;
2586 i = -(i);
2587 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002588 while (--i >= 0) {
Mark Dickinsondc787d22010-05-23 13:33:13 +00002589 /* Here x is a quantity in the range [0, _PyHASH_MODULUS); we
2590 want to compute x * 2**PyLong_SHIFT + v->ob_digit[i] modulo
2591 _PyHASH_MODULUS.
2592
2593 The computation of x * 2**PyLong_SHIFT % _PyHASH_MODULUS
2594 amounts to a rotation of the bits of x. To see this, write
2595
2596 x * 2**PyLong_SHIFT = y * 2**_PyHASH_BITS + z
2597
2598 where y = x >> (_PyHASH_BITS - PyLong_SHIFT) gives the top
2599 PyLong_SHIFT bits of x (those that are shifted out of the
2600 original _PyHASH_BITS bits, and z = (x << PyLong_SHIFT) &
2601 _PyHASH_MODULUS gives the bottom _PyHASH_BITS - PyLong_SHIFT
2602 bits of x, shifted up. Then since 2**_PyHASH_BITS is
2603 congruent to 1 modulo _PyHASH_MODULUS, y*2**_PyHASH_BITS is
2604 congruent to y modulo _PyHASH_MODULUS. So
2605
2606 x * 2**PyLong_SHIFT = y + z (mod _PyHASH_MODULUS).
2607
2608 The right-hand side is just the result of rotating the
2609 _PyHASH_BITS bits of x left by PyLong_SHIFT places; since
2610 not all _PyHASH_BITS bits of x are 1s, the same is true
2611 after rotation, so 0 <= y+z < _PyHASH_MODULUS and y + z is
2612 the reduction of x*2**PyLong_SHIFT modulo
2613 _PyHASH_MODULUS. */
2614 x = ((x << PyLong_SHIFT) & _PyHASH_MODULUS) |
2615 (x >> (_PyHASH_BITS - PyLong_SHIFT));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002616 x += v->ob_digit[i];
Mark Dickinsondc787d22010-05-23 13:33:13 +00002617 if (x >= _PyHASH_MODULUS)
2618 x -= _PyHASH_MODULUS;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002619 }
2620 x = x * sign;
Benjamin Peterson8035bc52010-10-23 16:20:50 +00002621 if (x == (Py_uhash_t)-1)
2622 x = (Py_uhash_t)-2;
Benjamin Peterson8f67d082010-10-17 20:54:53 +00002623 return (Py_hash_t)x;
Guido van Rossum9bfef441993-03-29 10:43:31 +00002624}
2625
2626
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002627/* Add the absolute values of two long integers. */
2628
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002629static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00002630x_add(PyLongObject *a, PyLongObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002631{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002632 Py_ssize_t size_a = ABS(Py_SIZE(a)), size_b = ABS(Py_SIZE(b));
2633 PyLongObject *z;
2634 Py_ssize_t i;
2635 digit carry = 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 { PyLongObject *temp = a; a = b; b = temp; }
2640 { Py_ssize_t size_temp = size_a;
Mark Dickinson22b20182010-05-10 21:27:53 +00002641 size_a = size_b;
2642 size_b = size_temp; }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002643 }
2644 z = _PyLong_New(size_a+1);
2645 if (z == NULL)
2646 return NULL;
2647 for (i = 0; i < size_b; ++i) {
2648 carry += a->ob_digit[i] + b->ob_digit[i];
2649 z->ob_digit[i] = carry & PyLong_MASK;
2650 carry >>= PyLong_SHIFT;
2651 }
2652 for (; i < size_a; ++i) {
2653 carry += a->ob_digit[i];
2654 z->ob_digit[i] = carry & PyLong_MASK;
2655 carry >>= PyLong_SHIFT;
2656 }
2657 z->ob_digit[i] = carry;
2658 return long_normalize(z);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002659}
2660
2661/* Subtract the absolute values of two integers. */
2662
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002663static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00002664x_sub(PyLongObject *a, PyLongObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002665{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002666 Py_ssize_t size_a = ABS(Py_SIZE(a)), size_b = ABS(Py_SIZE(b));
2667 PyLongObject *z;
2668 Py_ssize_t i;
2669 int sign = 1;
2670 digit borrow = 0;
Tim Peters69c2de32001-09-11 22:31:33 +00002671
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002672 /* Ensure a is the larger of the two: */
2673 if (size_a < size_b) {
2674 sign = -1;
2675 { PyLongObject *temp = a; a = b; b = temp; }
2676 { Py_ssize_t size_temp = size_a;
Mark Dickinson22b20182010-05-10 21:27:53 +00002677 size_a = size_b;
2678 size_b = size_temp; }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002679 }
2680 else if (size_a == size_b) {
2681 /* Find highest digit where a and b differ: */
2682 i = size_a;
2683 while (--i >= 0 && a->ob_digit[i] == b->ob_digit[i])
2684 ;
2685 if (i < 0)
2686 return (PyLongObject *)PyLong_FromLong(0);
2687 if (a->ob_digit[i] < b->ob_digit[i]) {
2688 sign = -1;
2689 { PyLongObject *temp = a; a = b; b = temp; }
2690 }
2691 size_a = size_b = i+1;
2692 }
2693 z = _PyLong_New(size_a);
2694 if (z == NULL)
2695 return NULL;
2696 for (i = 0; i < size_b; ++i) {
2697 /* The following assumes unsigned arithmetic
2698 works module 2**N for some N>PyLong_SHIFT. */
2699 borrow = a->ob_digit[i] - b->ob_digit[i] - borrow;
2700 z->ob_digit[i] = borrow & PyLong_MASK;
2701 borrow >>= PyLong_SHIFT;
2702 borrow &= 1; /* Keep only one sign bit */
2703 }
2704 for (; i < size_a; ++i) {
2705 borrow = a->ob_digit[i] - borrow;
2706 z->ob_digit[i] = borrow & PyLong_MASK;
2707 borrow >>= PyLong_SHIFT;
2708 borrow &= 1; /* Keep only one sign bit */
2709 }
2710 assert(borrow == 0);
2711 if (sign < 0)
2712 NEGATE(z);
2713 return long_normalize(z);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002714}
2715
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002716static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00002717long_add(PyLongObject *a, PyLongObject *b)
Guido van Rossum4c260ff1992-01-14 18:36:43 +00002718{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002719 PyLongObject *z;
Tim Peters69c2de32001-09-11 22:31:33 +00002720
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002721 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00002722
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002723 if (ABS(Py_SIZE(a)) <= 1 && ABS(Py_SIZE(b)) <= 1) {
2724 PyObject *result = PyLong_FromLong(MEDIUM_VALUE(a) +
2725 MEDIUM_VALUE(b));
2726 return result;
2727 }
2728 if (Py_SIZE(a) < 0) {
2729 if (Py_SIZE(b) < 0) {
2730 z = x_add(a, b);
2731 if (z != NULL && Py_SIZE(z) != 0)
2732 Py_SIZE(z) = -(Py_SIZE(z));
2733 }
2734 else
2735 z = x_sub(b, a);
2736 }
2737 else {
2738 if (Py_SIZE(b) < 0)
2739 z = x_sub(a, b);
2740 else
2741 z = x_add(a, b);
2742 }
2743 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002744}
2745
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002746static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00002747long_sub(PyLongObject *a, PyLongObject *b)
Guido van Rossum4c260ff1992-01-14 18:36:43 +00002748{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002749 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002750
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002751 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00002752
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002753 if (ABS(Py_SIZE(a)) <= 1 && ABS(Py_SIZE(b)) <= 1) {
2754 PyObject* r;
2755 r = PyLong_FromLong(MEDIUM_VALUE(a)-MEDIUM_VALUE(b));
2756 return r;
2757 }
2758 if (Py_SIZE(a) < 0) {
2759 if (Py_SIZE(b) < 0)
2760 z = x_sub(a, b);
2761 else
2762 z = x_add(a, b);
2763 if (z != NULL && Py_SIZE(z) != 0)
2764 Py_SIZE(z) = -(Py_SIZE(z));
2765 }
2766 else {
2767 if (Py_SIZE(b) < 0)
2768 z = x_add(a, b);
2769 else
2770 z = x_sub(a, b);
2771 }
2772 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002773}
2774
Tim Peters5af4e6c2002-08-12 02:31:19 +00002775/* Grade school multiplication, ignoring the signs.
2776 * Returns the absolute value of the product, or NULL if error.
2777 */
2778static PyLongObject *
2779x_mul(PyLongObject *a, PyLongObject *b)
Neil Schemenauerba872e22001-01-04 01:46:03 +00002780{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002781 PyLongObject *z;
2782 Py_ssize_t size_a = ABS(Py_SIZE(a));
2783 Py_ssize_t size_b = ABS(Py_SIZE(b));
2784 Py_ssize_t i;
Neil Schemenauerba872e22001-01-04 01:46:03 +00002785
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002786 z = _PyLong_New(size_a + size_b);
2787 if (z == NULL)
2788 return NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002789
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002790 memset(z->ob_digit, 0, Py_SIZE(z) * sizeof(digit));
2791 if (a == b) {
2792 /* Efficient squaring per HAC, Algorithm 14.16:
2793 * http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf
2794 * Gives slightly less than a 2x speedup when a == b,
2795 * via exploiting that each entry in the multiplication
2796 * pyramid appears twice (except for the size_a squares).
2797 */
2798 for (i = 0; i < size_a; ++i) {
2799 twodigits carry;
2800 twodigits f = a->ob_digit[i];
2801 digit *pz = z->ob_digit + (i << 1);
2802 digit *pa = a->ob_digit + i + 1;
2803 digit *paend = a->ob_digit + size_a;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002804
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002805 SIGCHECK({
Mark Dickinson22b20182010-05-10 21:27:53 +00002806 Py_DECREF(z);
2807 return NULL;
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00002808 });
Tim Peters0973b992004-08-29 22:16:50 +00002809
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002810 carry = *pz + f * f;
2811 *pz++ = (digit)(carry & PyLong_MASK);
2812 carry >>= PyLong_SHIFT;
2813 assert(carry <= PyLong_MASK);
Tim Peters0973b992004-08-29 22:16:50 +00002814
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002815 /* Now f is added in twice in each column of the
2816 * pyramid it appears. Same as adding f<<1 once.
2817 */
2818 f <<= 1;
2819 while (pa < paend) {
2820 carry += *pz + *pa++ * f;
2821 *pz++ = (digit)(carry & PyLong_MASK);
2822 carry >>= PyLong_SHIFT;
2823 assert(carry <= (PyLong_MASK << 1));
2824 }
2825 if (carry) {
2826 carry += *pz;
2827 *pz++ = (digit)(carry & PyLong_MASK);
2828 carry >>= PyLong_SHIFT;
2829 }
2830 if (carry)
2831 *pz += (digit)(carry & PyLong_MASK);
2832 assert((carry >> PyLong_SHIFT) == 0);
2833 }
2834 }
2835 else { /* a is not the same as b -- gradeschool long mult */
2836 for (i = 0; i < size_a; ++i) {
2837 twodigits carry = 0;
2838 twodigits f = a->ob_digit[i];
2839 digit *pz = z->ob_digit + i;
2840 digit *pb = b->ob_digit;
2841 digit *pbend = b->ob_digit + size_b;
Tim Peters0973b992004-08-29 22:16:50 +00002842
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002843 SIGCHECK({
Mark Dickinson22b20182010-05-10 21:27:53 +00002844 Py_DECREF(z);
2845 return NULL;
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00002846 });
Tim Peters0973b992004-08-29 22:16:50 +00002847
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002848 while (pb < pbend) {
2849 carry += *pz + *pb++ * f;
2850 *pz++ = (digit)(carry & PyLong_MASK);
2851 carry >>= PyLong_SHIFT;
2852 assert(carry <= PyLong_MASK);
2853 }
2854 if (carry)
2855 *pz += (digit)(carry & PyLong_MASK);
2856 assert((carry >> PyLong_SHIFT) == 0);
2857 }
2858 }
2859 return long_normalize(z);
Tim Peters5af4e6c2002-08-12 02:31:19 +00002860}
2861
2862/* A helper for Karatsuba multiplication (k_mul).
2863 Takes a long "n" and an integer "size" representing the place to
2864 split, and sets low and high such that abs(n) == (high << size) + low,
2865 viewing the shift as being by digits. The sign bit is ignored, and
2866 the return values are >= 0.
2867 Returns 0 on success, -1 on failure.
2868*/
2869static int
Mark Dickinson22b20182010-05-10 21:27:53 +00002870kmul_split(PyLongObject *n,
2871 Py_ssize_t size,
2872 PyLongObject **high,
2873 PyLongObject **low)
Tim Peters5af4e6c2002-08-12 02:31:19 +00002874{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002875 PyLongObject *hi, *lo;
2876 Py_ssize_t size_lo, size_hi;
2877 const Py_ssize_t size_n = ABS(Py_SIZE(n));
Tim Peters5af4e6c2002-08-12 02:31:19 +00002878
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002879 size_lo = MIN(size_n, size);
2880 size_hi = size_n - size_lo;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002881
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002882 if ((hi = _PyLong_New(size_hi)) == NULL)
2883 return -1;
2884 if ((lo = _PyLong_New(size_lo)) == NULL) {
2885 Py_DECREF(hi);
2886 return -1;
2887 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002888
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002889 memcpy(lo->ob_digit, n->ob_digit, size_lo * sizeof(digit));
2890 memcpy(hi->ob_digit, n->ob_digit + size_lo, size_hi * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00002891
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002892 *high = long_normalize(hi);
2893 *low = long_normalize(lo);
2894 return 0;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002895}
2896
Tim Peters60004642002-08-12 22:01:34 +00002897static PyLongObject *k_lopsided_mul(PyLongObject *a, PyLongObject *b);
2898
Tim Peters5af4e6c2002-08-12 02:31:19 +00002899/* Karatsuba multiplication. Ignores the input signs, and returns the
2900 * absolute value of the product (or NULL if error).
2901 * See Knuth Vol. 2 Chapter 4.3.3 (Pp. 294-295).
2902 */
2903static PyLongObject *
2904k_mul(PyLongObject *a, PyLongObject *b)
2905{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002906 Py_ssize_t asize = ABS(Py_SIZE(a));
2907 Py_ssize_t bsize = ABS(Py_SIZE(b));
2908 PyLongObject *ah = NULL;
2909 PyLongObject *al = NULL;
2910 PyLongObject *bh = NULL;
2911 PyLongObject *bl = NULL;
2912 PyLongObject *ret = NULL;
2913 PyLongObject *t1, *t2, *t3;
2914 Py_ssize_t shift; /* the number of digits we split off */
2915 Py_ssize_t i;
Tim Peters738eda72002-08-12 15:08:20 +00002916
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002917 /* (ah*X+al)(bh*X+bl) = ah*bh*X*X + (ah*bl + al*bh)*X + al*bl
2918 * Let k = (ah+al)*(bh+bl) = ah*bl + al*bh + ah*bh + al*bl
2919 * Then the original product is
2920 * ah*bh*X*X + (k - ah*bh - al*bl)*X + al*bl
2921 * By picking X to be a power of 2, "*X" is just shifting, and it's
2922 * been reduced to 3 multiplies on numbers half the size.
2923 */
Tim Peters5af4e6c2002-08-12 02:31:19 +00002924
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002925 /* We want to split based on the larger number; fiddle so that b
2926 * is largest.
2927 */
2928 if (asize > bsize) {
2929 t1 = a;
2930 a = b;
2931 b = t1;
Tim Peters738eda72002-08-12 15:08:20 +00002932
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002933 i = asize;
2934 asize = bsize;
2935 bsize = i;
2936 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002937
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002938 /* Use gradeschool math when either number is too small. */
2939 i = a == b ? KARATSUBA_SQUARE_CUTOFF : KARATSUBA_CUTOFF;
2940 if (asize <= i) {
2941 if (asize == 0)
2942 return (PyLongObject *)PyLong_FromLong(0);
2943 else
2944 return x_mul(a, b);
2945 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002946
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002947 /* If a is small compared to b, splitting on b gives a degenerate
2948 * case with ah==0, and Karatsuba may be (even much) less efficient
2949 * than "grade school" then. However, we can still win, by viewing
2950 * b as a string of "big digits", each of width a->ob_size. That
2951 * leads to a sequence of balanced calls to k_mul.
2952 */
2953 if (2 * asize <= bsize)
2954 return k_lopsided_mul(a, b);
Tim Peters60004642002-08-12 22:01:34 +00002955
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002956 /* Split a & b into hi & lo pieces. */
2957 shift = bsize >> 1;
2958 if (kmul_split(a, shift, &ah, &al) < 0) goto fail;
2959 assert(Py_SIZE(ah) > 0); /* the split isn't degenerate */
Tim Petersd6974a52002-08-13 20:37:51 +00002960
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002961 if (a == b) {
2962 bh = ah;
2963 bl = al;
2964 Py_INCREF(bh);
2965 Py_INCREF(bl);
2966 }
2967 else if (kmul_split(b, shift, &bh, &bl) < 0) goto fail;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002968
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002969 /* The plan:
2970 * 1. Allocate result space (asize + bsize digits: that's always
2971 * enough).
2972 * 2. Compute ah*bh, and copy into result at 2*shift.
2973 * 3. Compute al*bl, and copy into result at 0. Note that this
2974 * can't overlap with #2.
2975 * 4. Subtract al*bl from the result, starting at shift. This may
2976 * underflow (borrow out of the high digit), but we don't care:
2977 * we're effectively doing unsigned arithmetic mod
2978 * BASE**(sizea + sizeb), and so long as the *final* result fits,
2979 * borrows and carries out of the high digit can be ignored.
2980 * 5. Subtract ah*bh from the result, starting at shift.
2981 * 6. Compute (ah+al)*(bh+bl), and add it into the result starting
2982 * at shift.
2983 */
Tim Petersd64c1de2002-08-12 17:36:03 +00002984
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002985 /* 1. Allocate result space. */
2986 ret = _PyLong_New(asize + bsize);
2987 if (ret == NULL) goto fail;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002988#ifdef Py_DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002989 /* Fill with trash, to catch reference to uninitialized digits. */
2990 memset(ret->ob_digit, 0xDF, Py_SIZE(ret) * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00002991#endif
Tim Peters44121a62002-08-12 06:17:58 +00002992
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002993 /* 2. t1 <- ah*bh, and copy into high digits of result. */
2994 if ((t1 = k_mul(ah, bh)) == NULL) goto fail;
2995 assert(Py_SIZE(t1) >= 0);
2996 assert(2*shift + Py_SIZE(t1) <= Py_SIZE(ret));
2997 memcpy(ret->ob_digit + 2*shift, t1->ob_digit,
2998 Py_SIZE(t1) * sizeof(digit));
Tim Peters738eda72002-08-12 15:08:20 +00002999
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003000 /* Zero-out the digits higher than the ah*bh copy. */
3001 i = Py_SIZE(ret) - 2*shift - Py_SIZE(t1);
3002 if (i)
3003 memset(ret->ob_digit + 2*shift + Py_SIZE(t1), 0,
3004 i * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00003005
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003006 /* 3. t2 <- al*bl, and copy into the low digits. */
3007 if ((t2 = k_mul(al, bl)) == NULL) {
3008 Py_DECREF(t1);
3009 goto fail;
3010 }
3011 assert(Py_SIZE(t2) >= 0);
3012 assert(Py_SIZE(t2) <= 2*shift); /* no overlap with high digits */
3013 memcpy(ret->ob_digit, t2->ob_digit, Py_SIZE(t2) * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00003014
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003015 /* Zero out remaining digits. */
3016 i = 2*shift - Py_SIZE(t2); /* number of uninitialized digits */
3017 if (i)
3018 memset(ret->ob_digit + Py_SIZE(t2), 0, i * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00003019
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003020 /* 4 & 5. Subtract ah*bh (t1) and al*bl (t2). We do al*bl first
3021 * because it's fresher in cache.
3022 */
3023 i = Py_SIZE(ret) - shift; /* # digits after shift */
3024 (void)v_isub(ret->ob_digit + shift, i, t2->ob_digit, Py_SIZE(t2));
3025 Py_DECREF(t2);
Tim Peters738eda72002-08-12 15:08:20 +00003026
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003027 (void)v_isub(ret->ob_digit + shift, i, t1->ob_digit, Py_SIZE(t1));
3028 Py_DECREF(t1);
Tim Peters738eda72002-08-12 15:08:20 +00003029
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003030 /* 6. t3 <- (ah+al)(bh+bl), and add into result. */
3031 if ((t1 = x_add(ah, al)) == NULL) goto fail;
3032 Py_DECREF(ah);
3033 Py_DECREF(al);
3034 ah = al = NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003035
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003036 if (a == b) {
3037 t2 = t1;
3038 Py_INCREF(t2);
3039 }
3040 else if ((t2 = x_add(bh, bl)) == NULL) {
3041 Py_DECREF(t1);
3042 goto fail;
3043 }
3044 Py_DECREF(bh);
3045 Py_DECREF(bl);
3046 bh = bl = NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003047
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003048 t3 = k_mul(t1, t2);
3049 Py_DECREF(t1);
3050 Py_DECREF(t2);
3051 if (t3 == NULL) goto fail;
3052 assert(Py_SIZE(t3) >= 0);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003053
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003054 /* Add t3. It's not obvious why we can't run out of room here.
3055 * See the (*) comment after this function.
3056 */
3057 (void)v_iadd(ret->ob_digit + shift, i, t3->ob_digit, Py_SIZE(t3));
3058 Py_DECREF(t3);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003059
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003060 return long_normalize(ret);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003061
Mark Dickinson22b20182010-05-10 21:27:53 +00003062 fail:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003063 Py_XDECREF(ret);
3064 Py_XDECREF(ah);
3065 Py_XDECREF(al);
3066 Py_XDECREF(bh);
3067 Py_XDECREF(bl);
3068 return NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003069}
3070
Tim Petersd6974a52002-08-13 20:37:51 +00003071/* (*) Why adding t3 can't "run out of room" above.
3072
Tim Petersab86c2b2002-08-15 20:06:00 +00003073Let f(x) mean the floor of x and c(x) mean the ceiling of x. Some facts
3074to start with:
Tim Petersd6974a52002-08-13 20:37:51 +00003075
Tim Petersab86c2b2002-08-15 20:06:00 +000030761. For any integer i, i = c(i/2) + f(i/2). In particular,
3077 bsize = c(bsize/2) + f(bsize/2).
30782. shift = f(bsize/2)
30793. asize <= bsize
30804. Since we call k_lopsided_mul if asize*2 <= bsize, asize*2 > bsize in this
3081 routine, so asize > bsize/2 >= f(bsize/2) in this routine.
Tim Petersd6974a52002-08-13 20:37:51 +00003082
Tim Petersab86c2b2002-08-15 20:06:00 +00003083We allocated asize + bsize result digits, and add t3 into them at an offset
3084of shift. This leaves asize+bsize-shift allocated digit positions for t3
3085to fit into, = (by #1 and #2) asize + f(bsize/2) + c(bsize/2) - f(bsize/2) =
3086asize + c(bsize/2) available digit positions.
Tim Petersd6974a52002-08-13 20:37:51 +00003087
Tim Petersab86c2b2002-08-15 20:06:00 +00003088bh has c(bsize/2) digits, and bl at most f(size/2) digits. So bh+hl has
3089at most c(bsize/2) digits + 1 bit.
Tim Petersd6974a52002-08-13 20:37:51 +00003090
Tim Petersab86c2b2002-08-15 20:06:00 +00003091If asize == bsize, ah has c(bsize/2) digits, else ah has at most f(bsize/2)
3092digits, and al has at most f(bsize/2) digits in any case. So ah+al has at
3093most (asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 1 bit.
Tim Petersd6974a52002-08-13 20:37:51 +00003094
Tim Petersab86c2b2002-08-15 20:06:00 +00003095The product (ah+al)*(bh+bl) therefore has at most
Tim Petersd6974a52002-08-13 20:37:51 +00003096
Tim Petersab86c2b2002-08-15 20:06:00 +00003097 c(bsize/2) + (asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 2 bits
Tim Petersd6974a52002-08-13 20:37:51 +00003098
Tim Petersab86c2b2002-08-15 20:06:00 +00003099and we have asize + c(bsize/2) available digit positions. We need to show
3100this is always enough. An instance of c(bsize/2) cancels out in both, so
3101the question reduces to whether asize digits is enough to hold
3102(asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 2 bits. If asize < bsize,
3103then we're asking whether asize digits >= f(bsize/2) digits + 2 bits. By #4,
3104asize 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 +00003105digit is enough to hold 2 bits. This is so since PyLong_SHIFT=15 >= 2. If
Tim Petersab86c2b2002-08-15 20:06:00 +00003106asize == bsize, then we're asking whether bsize digits is enough to hold
Tim Peterse417de02002-08-15 20:10:45 +00003107c(bsize/2) digits + 2 bits, or equivalently (by #1) whether f(bsize/2) digits
3108is enough to hold 2 bits. This is so if bsize >= 2, which holds because
3109bsize >= KARATSUBA_CUTOFF >= 2.
Tim Peters8e966ee2002-08-14 16:36:23 +00003110
Tim Peters48d52c02002-08-14 17:07:32 +00003111Note that since there's always enough room for (ah+al)*(bh+bl), and that's
3112clearly >= each of ah*bh and al*bl, there's always enough room to subtract
3113ah*bh and al*bl too.
Tim Petersd6974a52002-08-13 20:37:51 +00003114*/
3115
Tim Peters60004642002-08-12 22:01:34 +00003116/* b has at least twice the digits of a, and a is big enough that Karatsuba
3117 * would pay off *if* the inputs had balanced sizes. View b as a sequence
3118 * of slices, each with a->ob_size digits, and multiply the slices by a,
3119 * one at a time. This gives k_mul balanced inputs to work with, and is
3120 * also cache-friendly (we compute one double-width slice of the result
Ezio Melotti42da6632011-03-15 05:18:48 +02003121 * at a time, then move on, never backtracking except for the helpful
Tim Peters60004642002-08-12 22:01:34 +00003122 * single-width slice overlap between successive partial sums).
3123 */
3124static PyLongObject *
3125k_lopsided_mul(PyLongObject *a, PyLongObject *b)
3126{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003127 const Py_ssize_t asize = ABS(Py_SIZE(a));
3128 Py_ssize_t bsize = ABS(Py_SIZE(b));
3129 Py_ssize_t nbdone; /* # of b digits already multiplied */
3130 PyLongObject *ret;
3131 PyLongObject *bslice = NULL;
Tim Peters60004642002-08-12 22:01:34 +00003132
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003133 assert(asize > KARATSUBA_CUTOFF);
3134 assert(2 * asize <= bsize);
Tim Peters60004642002-08-12 22:01:34 +00003135
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003136 /* Allocate result space, and zero it out. */
3137 ret = _PyLong_New(asize + bsize);
3138 if (ret == NULL)
3139 return NULL;
3140 memset(ret->ob_digit, 0, Py_SIZE(ret) * sizeof(digit));
Tim Peters60004642002-08-12 22:01:34 +00003141
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003142 /* Successive slices of b are copied into bslice. */
3143 bslice = _PyLong_New(asize);
3144 if (bslice == NULL)
3145 goto fail;
Tim Peters60004642002-08-12 22:01:34 +00003146
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003147 nbdone = 0;
3148 while (bsize > 0) {
3149 PyLongObject *product;
3150 const Py_ssize_t nbtouse = MIN(bsize, asize);
Tim Peters60004642002-08-12 22:01:34 +00003151
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003152 /* Multiply the next slice of b by a. */
3153 memcpy(bslice->ob_digit, b->ob_digit + nbdone,
3154 nbtouse * sizeof(digit));
3155 Py_SIZE(bslice) = nbtouse;
3156 product = k_mul(a, bslice);
3157 if (product == NULL)
3158 goto fail;
Tim Peters60004642002-08-12 22:01:34 +00003159
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003160 /* Add into result. */
3161 (void)v_iadd(ret->ob_digit + nbdone, Py_SIZE(ret) - nbdone,
3162 product->ob_digit, Py_SIZE(product));
3163 Py_DECREF(product);
Tim Peters60004642002-08-12 22:01:34 +00003164
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003165 bsize -= nbtouse;
3166 nbdone += nbtouse;
3167 }
Tim Peters60004642002-08-12 22:01:34 +00003168
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003169 Py_DECREF(bslice);
3170 return long_normalize(ret);
Tim Peters60004642002-08-12 22:01:34 +00003171
Mark Dickinson22b20182010-05-10 21:27:53 +00003172 fail:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003173 Py_DECREF(ret);
3174 Py_XDECREF(bslice);
3175 return NULL;
Tim Peters60004642002-08-12 22:01:34 +00003176}
Tim Peters5af4e6c2002-08-12 02:31:19 +00003177
3178static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003179long_mul(PyLongObject *a, PyLongObject *b)
Tim Peters5af4e6c2002-08-12 02:31:19 +00003180{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003181 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003182
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003183 CHECK_BINOP(a, b);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003184
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003185 /* fast path for single-digit multiplication */
3186 if (ABS(Py_SIZE(a)) <= 1 && ABS(Py_SIZE(b)) <= 1) {
3187 stwodigits v = (stwodigits)(MEDIUM_VALUE(a)) * MEDIUM_VALUE(b);
Mark Dickinsonbd792642009-03-18 20:06:12 +00003188#ifdef HAVE_LONG_LONG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003189 return PyLong_FromLongLong((PY_LONG_LONG)v);
Mark Dickinsonbd792642009-03-18 20:06:12 +00003190#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003191 /* if we don't have long long then we're almost certainly
3192 using 15-bit digits, so v will fit in a long. In the
3193 unlikely event that we're using 30-bit digits on a platform
3194 without long long, a large v will just cause us to fall
3195 through to the general multiplication code below. */
3196 if (v >= LONG_MIN && v <= LONG_MAX)
3197 return PyLong_FromLong((long)v);
Mark Dickinsonbd792642009-03-18 20:06:12 +00003198#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003199 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00003200
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003201 z = k_mul(a, b);
3202 /* Negate if exactly one of the inputs is negative. */
3203 if (((Py_SIZE(a) ^ Py_SIZE(b)) < 0) && z)
3204 NEGATE(z);
3205 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003206}
3207
Guido van Rossume32e0141992-01-19 16:31:05 +00003208/* The / and % operators are now defined in terms of divmod().
3209 The expression a mod b has the value a - b*floor(a/b).
3210 The long_divrem function gives the remainder after division of
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003211 |a| by |b|, with the sign of a. This is also expressed
3212 as a - b*trunc(a/b), if trunc truncates towards zero.
3213 Some examples:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003214 a b a rem b a mod b
3215 13 10 3 3
3216 -13 10 -3 7
3217 13 -10 3 -7
3218 -13 -10 -3 -3
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003219 So, to get from rem to mod, we have to add b if a and b
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00003220 have different signs. We then subtract one from the 'div'
3221 part of the outcome to keep the invariant intact. */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003222
Tim Peters47e52ee2004-08-30 02:44:38 +00003223/* Compute
3224 * *pdiv, *pmod = divmod(v, w)
3225 * NULL can be passed for pdiv or pmod, in which case that part of
3226 * the result is simply thrown away. The caller owns a reference to
3227 * each of these it requests (does not pass NULL for).
3228 */
Guido van Rossume32e0141992-01-19 16:31:05 +00003229static int
Tim Peters5af4e6c2002-08-12 02:31:19 +00003230l_divmod(PyLongObject *v, PyLongObject *w,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003231 PyLongObject **pdiv, PyLongObject **pmod)
Guido van Rossume32e0141992-01-19 16:31:05 +00003232{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003233 PyLongObject *div, *mod;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003234
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003235 if (long_divrem(v, w, &div, &mod) < 0)
3236 return -1;
3237 if ((Py_SIZE(mod) < 0 && Py_SIZE(w) > 0) ||
3238 (Py_SIZE(mod) > 0 && Py_SIZE(w) < 0)) {
3239 PyLongObject *temp;
3240 PyLongObject *one;
3241 temp = (PyLongObject *) long_add(mod, w);
3242 Py_DECREF(mod);
3243 mod = temp;
3244 if (mod == NULL) {
3245 Py_DECREF(div);
3246 return -1;
3247 }
3248 one = (PyLongObject *) PyLong_FromLong(1L);
3249 if (one == NULL ||
3250 (temp = (PyLongObject *) long_sub(div, one)) == NULL) {
3251 Py_DECREF(mod);
3252 Py_DECREF(div);
3253 Py_XDECREF(one);
3254 return -1;
3255 }
3256 Py_DECREF(one);
3257 Py_DECREF(div);
3258 div = temp;
3259 }
3260 if (pdiv != NULL)
3261 *pdiv = div;
3262 else
3263 Py_DECREF(div);
Tim Peters47e52ee2004-08-30 02:44:38 +00003264
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003265 if (pmod != NULL)
3266 *pmod = mod;
3267 else
3268 Py_DECREF(mod);
Tim Peters47e52ee2004-08-30 02:44:38 +00003269
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003270 return 0;
Guido van Rossume32e0141992-01-19 16:31:05 +00003271}
3272
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003273static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003274long_div(PyObject *a, PyObject *b)
Guido van Rossume32e0141992-01-19 16:31:05 +00003275{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003276 PyLongObject *div;
Neil Schemenauerba872e22001-01-04 01:46:03 +00003277
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003278 CHECK_BINOP(a, b);
3279 if (l_divmod((PyLongObject*)a, (PyLongObject*)b, &div, NULL) < 0)
3280 div = NULL;
3281 return (PyObject *)div;
Guido van Rossume32e0141992-01-19 16:31:05 +00003282}
3283
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003284/* PyLong/PyLong -> float, with correctly rounded result. */
3285
3286#define MANT_DIG_DIGITS (DBL_MANT_DIG / PyLong_SHIFT)
3287#define MANT_DIG_BITS (DBL_MANT_DIG % PyLong_SHIFT)
3288
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003289static PyObject *
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003290long_true_divide(PyObject *v, PyObject *w)
Tim Peters20dab9f2001-09-04 05:31:47 +00003291{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003292 PyLongObject *a, *b, *x;
3293 Py_ssize_t a_size, b_size, shift, extra_bits, diff, x_size, x_bits;
3294 digit mask, low;
3295 int inexact, negate, a_is_small, b_is_small;
3296 double dx, result;
Tim Peterse2a60002001-09-04 06:17:36 +00003297
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003298 CHECK_BINOP(v, w);
3299 a = (PyLongObject *)v;
3300 b = (PyLongObject *)w;
Tim Peterse2a60002001-09-04 06:17:36 +00003301
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003302 /*
3303 Method in a nutshell:
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003304
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003305 0. reduce to case a, b > 0; filter out obvious underflow/overflow
3306 1. choose a suitable integer 'shift'
3307 2. use integer arithmetic to compute x = floor(2**-shift*a/b)
3308 3. adjust x for correct rounding
3309 4. convert x to a double dx with the same value
3310 5. return ldexp(dx, shift).
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003311
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003312 In more detail:
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003313
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003314 0. For any a, a/0 raises ZeroDivisionError; for nonzero b, 0/b
3315 returns either 0.0 or -0.0, depending on the sign of b. For a and
3316 b both nonzero, ignore signs of a and b, and add the sign back in
3317 at the end. Now write a_bits and b_bits for the bit lengths of a
3318 and b respectively (that is, a_bits = 1 + floor(log_2(a)); likewise
3319 for b). Then
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003320
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003321 2**(a_bits - b_bits - 1) < a/b < 2**(a_bits - b_bits + 1).
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003322
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003323 So if a_bits - b_bits > DBL_MAX_EXP then a/b > 2**DBL_MAX_EXP and
3324 so overflows. Similarly, if a_bits - b_bits < DBL_MIN_EXP -
3325 DBL_MANT_DIG - 1 then a/b underflows to 0. With these cases out of
3326 the way, we can assume that
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003327
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003328 DBL_MIN_EXP - DBL_MANT_DIG - 1 <= a_bits - b_bits <= DBL_MAX_EXP.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003329
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003330 1. The integer 'shift' is chosen so that x has the right number of
3331 bits for a double, plus two or three extra bits that will be used
3332 in the rounding decisions. Writing a_bits and b_bits for the
3333 number of significant bits in a and b respectively, a
3334 straightforward formula for shift is:
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003335
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003336 shift = a_bits - b_bits - DBL_MANT_DIG - 2
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003337
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003338 This is fine in the usual case, but if a/b is smaller than the
3339 smallest normal float then it can lead to double rounding on an
3340 IEEE 754 platform, giving incorrectly rounded results. So we
3341 adjust the formula slightly. The actual formula used is:
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003342
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003343 shift = MAX(a_bits - b_bits, DBL_MIN_EXP) - DBL_MANT_DIG - 2
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003344
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003345 2. The quantity x is computed by first shifting a (left -shift bits
3346 if shift <= 0, right shift bits if shift > 0) and then dividing by
3347 b. For both the shift and the division, we keep track of whether
3348 the result is inexact, in a flag 'inexact'; this information is
3349 needed at the rounding stage.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003350
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003351 With the choice of shift above, together with our assumption that
3352 a_bits - b_bits >= DBL_MIN_EXP - DBL_MANT_DIG - 1, it follows
3353 that x >= 1.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003354
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003355 3. Now x * 2**shift <= a/b < (x+1) * 2**shift. We want to replace
3356 this with an exactly representable float of the form
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003357
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003358 round(x/2**extra_bits) * 2**(extra_bits+shift).
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003359
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003360 For float representability, we need x/2**extra_bits <
3361 2**DBL_MANT_DIG and extra_bits + shift >= DBL_MIN_EXP -
3362 DBL_MANT_DIG. This translates to the condition:
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003363
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003364 extra_bits >= MAX(x_bits, DBL_MIN_EXP - shift) - DBL_MANT_DIG
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003365
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003366 To round, we just modify the bottom digit of x in-place; this can
3367 end up giving a digit with value > PyLONG_MASK, but that's not a
3368 problem since digits can hold values up to 2*PyLONG_MASK+1.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003369
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003370 With the original choices for shift above, extra_bits will always
3371 be 2 or 3. Then rounding under the round-half-to-even rule, we
3372 round up iff the most significant of the extra bits is 1, and
3373 either: (a) the computation of x in step 2 had an inexact result,
3374 or (b) at least one other of the extra bits is 1, or (c) the least
3375 significant bit of x (above those to be rounded) is 1.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003376
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003377 4. Conversion to a double is straightforward; all floating-point
3378 operations involved in the conversion are exact, so there's no
3379 danger of rounding errors.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003380
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003381 5. Use ldexp(x, shift) to compute x*2**shift, the final result.
3382 The result will always be exactly representable as a double, except
3383 in the case that it overflows. To avoid dependence on the exact
3384 behaviour of ldexp on overflow, we check for overflow before
3385 applying ldexp. The result of ldexp is adjusted for sign before
3386 returning.
3387 */
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003388
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003389 /* Reduce to case where a and b are both positive. */
3390 a_size = ABS(Py_SIZE(a));
3391 b_size = ABS(Py_SIZE(b));
3392 negate = (Py_SIZE(a) < 0) ^ (Py_SIZE(b) < 0);
3393 if (b_size == 0) {
3394 PyErr_SetString(PyExc_ZeroDivisionError,
3395 "division by zero");
3396 goto error;
3397 }
3398 if (a_size == 0)
3399 goto underflow_or_zero;
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003400
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003401 /* Fast path for a and b small (exactly representable in a double).
3402 Relies on floating-point division being correctly rounded; results
3403 may be subject to double rounding on x86 machines that operate with
3404 the x87 FPU set to 64-bit precision. */
3405 a_is_small = a_size <= MANT_DIG_DIGITS ||
3406 (a_size == MANT_DIG_DIGITS+1 &&
3407 a->ob_digit[MANT_DIG_DIGITS] >> MANT_DIG_BITS == 0);
3408 b_is_small = b_size <= MANT_DIG_DIGITS ||
3409 (b_size == MANT_DIG_DIGITS+1 &&
3410 b->ob_digit[MANT_DIG_DIGITS] >> MANT_DIG_BITS == 0);
3411 if (a_is_small && b_is_small) {
3412 double da, db;
3413 da = a->ob_digit[--a_size];
3414 while (a_size > 0)
3415 da = da * PyLong_BASE + a->ob_digit[--a_size];
3416 db = b->ob_digit[--b_size];
3417 while (b_size > 0)
3418 db = db * PyLong_BASE + b->ob_digit[--b_size];
3419 result = da / db;
3420 goto success;
3421 }
Tim Peterse2a60002001-09-04 06:17:36 +00003422
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003423 /* Catch obvious cases of underflow and overflow */
3424 diff = a_size - b_size;
3425 if (diff > PY_SSIZE_T_MAX/PyLong_SHIFT - 1)
3426 /* Extreme overflow */
3427 goto overflow;
3428 else if (diff < 1 - PY_SSIZE_T_MAX/PyLong_SHIFT)
3429 /* Extreme underflow */
3430 goto underflow_or_zero;
3431 /* Next line is now safe from overflowing a Py_ssize_t */
3432 diff = diff * PyLong_SHIFT + bits_in_digit(a->ob_digit[a_size - 1]) -
3433 bits_in_digit(b->ob_digit[b_size - 1]);
3434 /* Now diff = a_bits - b_bits. */
3435 if (diff > DBL_MAX_EXP)
3436 goto overflow;
3437 else if (diff < DBL_MIN_EXP - DBL_MANT_DIG - 1)
3438 goto underflow_or_zero;
Tim Peterse2a60002001-09-04 06:17:36 +00003439
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003440 /* Choose value for shift; see comments for step 1 above. */
3441 shift = MAX(diff, DBL_MIN_EXP) - DBL_MANT_DIG - 2;
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003442
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003443 inexact = 0;
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003444
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003445 /* x = abs(a * 2**-shift) */
3446 if (shift <= 0) {
3447 Py_ssize_t i, shift_digits = -shift / PyLong_SHIFT;
3448 digit rem;
3449 /* x = a << -shift */
3450 if (a_size >= PY_SSIZE_T_MAX - 1 - shift_digits) {
3451 /* In practice, it's probably impossible to end up
3452 here. Both a and b would have to be enormous,
3453 using close to SIZE_T_MAX bytes of memory each. */
3454 PyErr_SetString(PyExc_OverflowError,
Mark Dickinson22b20182010-05-10 21:27:53 +00003455 "intermediate overflow during division");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003456 goto error;
3457 }
3458 x = _PyLong_New(a_size + shift_digits + 1);
3459 if (x == NULL)
3460 goto error;
3461 for (i = 0; i < shift_digits; i++)
3462 x->ob_digit[i] = 0;
3463 rem = v_lshift(x->ob_digit + shift_digits, a->ob_digit,
3464 a_size, -shift % PyLong_SHIFT);
3465 x->ob_digit[a_size + shift_digits] = rem;
3466 }
3467 else {
3468 Py_ssize_t shift_digits = shift / PyLong_SHIFT;
3469 digit rem;
3470 /* x = a >> shift */
3471 assert(a_size >= shift_digits);
3472 x = _PyLong_New(a_size - shift_digits);
3473 if (x == NULL)
3474 goto error;
3475 rem = v_rshift(x->ob_digit, a->ob_digit + shift_digits,
3476 a_size - shift_digits, shift % PyLong_SHIFT);
3477 /* set inexact if any of the bits shifted out is nonzero */
3478 if (rem)
3479 inexact = 1;
3480 while (!inexact && shift_digits > 0)
3481 if (a->ob_digit[--shift_digits])
3482 inexact = 1;
3483 }
3484 long_normalize(x);
3485 x_size = Py_SIZE(x);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003486
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003487 /* x //= b. If the remainder is nonzero, set inexact. We own the only
3488 reference to x, so it's safe to modify it in-place. */
3489 if (b_size == 1) {
3490 digit rem = inplace_divrem1(x->ob_digit, x->ob_digit, x_size,
3491 b->ob_digit[0]);
3492 long_normalize(x);
3493 if (rem)
3494 inexact = 1;
3495 }
3496 else {
3497 PyLongObject *div, *rem;
3498 div = x_divrem(x, b, &rem);
3499 Py_DECREF(x);
3500 x = div;
3501 if (x == NULL)
3502 goto error;
3503 if (Py_SIZE(rem))
3504 inexact = 1;
3505 Py_DECREF(rem);
3506 }
3507 x_size = ABS(Py_SIZE(x));
3508 assert(x_size > 0); /* result of division is never zero */
3509 x_bits = (x_size-1)*PyLong_SHIFT+bits_in_digit(x->ob_digit[x_size-1]);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003510
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003511 /* The number of extra bits that have to be rounded away. */
3512 extra_bits = MAX(x_bits, DBL_MIN_EXP - shift) - DBL_MANT_DIG;
3513 assert(extra_bits == 2 || extra_bits == 3);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003514
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003515 /* Round by directly modifying the low digit of x. */
3516 mask = (digit)1 << (extra_bits - 1);
3517 low = x->ob_digit[0] | inexact;
3518 if (low & mask && low & (3*mask-1))
3519 low += mask;
3520 x->ob_digit[0] = low & ~(mask-1U);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003521
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003522 /* Convert x to a double dx; the conversion is exact. */
3523 dx = x->ob_digit[--x_size];
3524 while (x_size > 0)
3525 dx = dx * PyLong_BASE + x->ob_digit[--x_size];
3526 Py_DECREF(x);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003527
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003528 /* Check whether ldexp result will overflow a double. */
3529 if (shift + x_bits >= DBL_MAX_EXP &&
3530 (shift + x_bits > DBL_MAX_EXP || dx == ldexp(1.0, (int)x_bits)))
3531 goto overflow;
3532 result = ldexp(dx, (int)shift);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003533
3534 success:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003535 return PyFloat_FromDouble(negate ? -result : result);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003536
3537 underflow_or_zero:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003538 return PyFloat_FromDouble(negate ? -0.0 : 0.0);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003539
3540 overflow:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003541 PyErr_SetString(PyExc_OverflowError,
3542 "integer division result too large for a float");
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003543 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003544 return NULL;
Tim Peters20dab9f2001-09-04 05:31:47 +00003545}
3546
3547static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003548long_mod(PyObject *a, PyObject *b)
Guido van Rossume32e0141992-01-19 16:31:05 +00003549{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003550 PyLongObject *mod;
Neil Schemenauerba872e22001-01-04 01:46:03 +00003551
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003552 CHECK_BINOP(a, b);
3553
3554 if (l_divmod((PyLongObject*)a, (PyLongObject*)b, NULL, &mod) < 0)
3555 mod = NULL;
3556 return (PyObject *)mod;
Guido van Rossume32e0141992-01-19 16:31:05 +00003557}
3558
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003559static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003560long_divmod(PyObject *a, PyObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003561{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003562 PyLongObject *div, *mod;
3563 PyObject *z;
Neil Schemenauerba872e22001-01-04 01:46:03 +00003564
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003565 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003566
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003567 if (l_divmod((PyLongObject*)a, (PyLongObject*)b, &div, &mod) < 0) {
3568 return NULL;
3569 }
3570 z = PyTuple_New(2);
3571 if (z != NULL) {
3572 PyTuple_SetItem(z, 0, (PyObject *) div);
3573 PyTuple_SetItem(z, 1, (PyObject *) mod);
3574 }
3575 else {
3576 Py_DECREF(div);
3577 Py_DECREF(mod);
3578 }
3579 return z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003580}
3581
Tim Peters47e52ee2004-08-30 02:44:38 +00003582/* pow(v, w, x) */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003583static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00003584long_pow(PyObject *v, PyObject *w, PyObject *x)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003585{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003586 PyLongObject *a, *b, *c; /* a,b,c = v,w,x */
3587 int negativeOutput = 0; /* if x<0 return negative output */
Neil Schemenauerba872e22001-01-04 01:46:03 +00003588
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003589 PyLongObject *z = NULL; /* accumulated result */
3590 Py_ssize_t i, j, k; /* counters */
3591 PyLongObject *temp = NULL;
Tim Peters47e52ee2004-08-30 02:44:38 +00003592
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003593 /* 5-ary values. If the exponent is large enough, table is
3594 * precomputed so that table[i] == a**i % c for i in range(32).
3595 */
3596 PyLongObject *table[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3597 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
Tim Peters47e52ee2004-08-30 02:44:38 +00003598
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003599 /* a, b, c = v, w, x */
3600 CHECK_BINOP(v, w);
3601 a = (PyLongObject*)v; Py_INCREF(a);
3602 b = (PyLongObject*)w; Py_INCREF(b);
3603 if (PyLong_Check(x)) {
3604 c = (PyLongObject *)x;
3605 Py_INCREF(x);
3606 }
3607 else if (x == Py_None)
3608 c = NULL;
3609 else {
3610 Py_DECREF(a);
3611 Py_DECREF(b);
Brian Curtindfc80e32011-08-10 20:28:54 -05003612 Py_RETURN_NOTIMPLEMENTED;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003613 }
Tim Peters4c483c42001-09-05 06:24:58 +00003614
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003615 if (Py_SIZE(b) < 0) { /* if exponent is negative */
3616 if (c) {
3617 PyErr_SetString(PyExc_TypeError, "pow() 2nd argument "
Mark Dickinson22b20182010-05-10 21:27:53 +00003618 "cannot be negative when 3rd argument specified");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003619 goto Error;
3620 }
3621 else {
3622 /* else return a float. This works because we know
3623 that this calls float_pow() which converts its
3624 arguments to double. */
3625 Py_DECREF(a);
3626 Py_DECREF(b);
3627 return PyFloat_Type.tp_as_number->nb_power(v, w, x);
3628 }
3629 }
Tim Peters47e52ee2004-08-30 02:44:38 +00003630
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003631 if (c) {
3632 /* if modulus == 0:
3633 raise ValueError() */
3634 if (Py_SIZE(c) == 0) {
3635 PyErr_SetString(PyExc_ValueError,
3636 "pow() 3rd argument cannot be 0");
3637 goto Error;
3638 }
Tim Peters47e52ee2004-08-30 02:44:38 +00003639
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003640 /* if modulus < 0:
3641 negativeOutput = True
3642 modulus = -modulus */
3643 if (Py_SIZE(c) < 0) {
3644 negativeOutput = 1;
3645 temp = (PyLongObject *)_PyLong_Copy(c);
3646 if (temp == NULL)
3647 goto Error;
3648 Py_DECREF(c);
3649 c = temp;
3650 temp = NULL;
3651 NEGATE(c);
3652 }
Tim Peters47e52ee2004-08-30 02:44:38 +00003653
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003654 /* if modulus == 1:
3655 return 0 */
3656 if ((Py_SIZE(c) == 1) && (c->ob_digit[0] == 1)) {
3657 z = (PyLongObject *)PyLong_FromLong(0L);
3658 goto Done;
3659 }
Tim Peters47e52ee2004-08-30 02:44:38 +00003660
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003661 /* if base < 0:
3662 base = base % modulus
3663 Having the base positive just makes things easier. */
3664 if (Py_SIZE(a) < 0) {
3665 if (l_divmod(a, c, NULL, &temp) < 0)
3666 goto Error;
3667 Py_DECREF(a);
3668 a = temp;
3669 temp = NULL;
3670 }
3671 }
Tim Peters47e52ee2004-08-30 02:44:38 +00003672
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003673 /* At this point a, b, and c are guaranteed non-negative UNLESS
3674 c is NULL, in which case a may be negative. */
Tim Peters47e52ee2004-08-30 02:44:38 +00003675
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003676 z = (PyLongObject *)PyLong_FromLong(1L);
3677 if (z == NULL)
3678 goto Error;
Tim Peters47e52ee2004-08-30 02:44:38 +00003679
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003680 /* Perform a modular reduction, X = X % c, but leave X alone if c
3681 * is NULL.
3682 */
3683#define REDUCE(X) \
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00003684 do { \
3685 if (c != NULL) { \
3686 if (l_divmod(X, c, NULL, &temp) < 0) \
3687 goto Error; \
3688 Py_XDECREF(X); \
3689 X = temp; \
3690 temp = NULL; \
3691 } \
3692 } while(0)
Tim Peters47e52ee2004-08-30 02:44:38 +00003693
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003694 /* Multiply two values, then reduce the result:
3695 result = X*Y % c. If c is NULL, skip the mod. */
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00003696#define MULT(X, Y, result) \
3697 do { \
3698 temp = (PyLongObject *)long_mul(X, Y); \
3699 if (temp == NULL) \
3700 goto Error; \
3701 Py_XDECREF(result); \
3702 result = temp; \
3703 temp = NULL; \
3704 REDUCE(result); \
3705 } while(0)
Tim Peters47e52ee2004-08-30 02:44:38 +00003706
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003707 if (Py_SIZE(b) <= FIVEARY_CUTOFF) {
3708 /* Left-to-right binary exponentiation (HAC Algorithm 14.79) */
3709 /* http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf */
3710 for (i = Py_SIZE(b) - 1; i >= 0; --i) {
3711 digit bi = b->ob_digit[i];
Tim Peters47e52ee2004-08-30 02:44:38 +00003712
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003713 for (j = (digit)1 << (PyLong_SHIFT-1); j != 0; j >>= 1) {
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00003714 MULT(z, z, z);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003715 if (bi & j)
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00003716 MULT(z, a, z);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003717 }
3718 }
3719 }
3720 else {
3721 /* Left-to-right 5-ary exponentiation (HAC Algorithm 14.82) */
3722 Py_INCREF(z); /* still holds 1L */
3723 table[0] = z;
3724 for (i = 1; i < 32; ++i)
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00003725 MULT(table[i-1], a, table[i]);
Tim Peters47e52ee2004-08-30 02:44:38 +00003726
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003727 for (i = Py_SIZE(b) - 1; i >= 0; --i) {
3728 const digit bi = b->ob_digit[i];
Tim Peters47e52ee2004-08-30 02:44:38 +00003729
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003730 for (j = PyLong_SHIFT - 5; j >= 0; j -= 5) {
3731 const int index = (bi >> j) & 0x1f;
3732 for (k = 0; k < 5; ++k)
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00003733 MULT(z, z, z);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003734 if (index)
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00003735 MULT(z, table[index], z);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003736 }
3737 }
3738 }
Tim Peters47e52ee2004-08-30 02:44:38 +00003739
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003740 if (negativeOutput && (Py_SIZE(z) != 0)) {
3741 temp = (PyLongObject *)long_sub(z, c);
3742 if (temp == NULL)
3743 goto Error;
3744 Py_DECREF(z);
3745 z = temp;
3746 temp = NULL;
3747 }
3748 goto Done;
Tim Peters47e52ee2004-08-30 02:44:38 +00003749
Mark Dickinson22b20182010-05-10 21:27:53 +00003750 Error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003751 if (z != NULL) {
3752 Py_DECREF(z);
3753 z = NULL;
3754 }
3755 /* fall through */
Mark Dickinson22b20182010-05-10 21:27:53 +00003756 Done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003757 if (Py_SIZE(b) > FIVEARY_CUTOFF) {
3758 for (i = 0; i < 32; ++i)
3759 Py_XDECREF(table[i]);
3760 }
3761 Py_DECREF(a);
3762 Py_DECREF(b);
3763 Py_XDECREF(c);
3764 Py_XDECREF(temp);
3765 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003766}
3767
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003768static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003769long_invert(PyLongObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003770{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003771 /* Implement ~x as -(x+1) */
3772 PyLongObject *x;
3773 PyLongObject *w;
3774 if (ABS(Py_SIZE(v)) <=1)
3775 return PyLong_FromLong(-(MEDIUM_VALUE(v)+1));
3776 w = (PyLongObject *)PyLong_FromLong(1L);
3777 if (w == NULL)
3778 return NULL;
3779 x = (PyLongObject *) long_add(v, w);
3780 Py_DECREF(w);
3781 if (x == NULL)
3782 return NULL;
3783 Py_SIZE(x) = -(Py_SIZE(x));
3784 return (PyObject *)maybe_small_long(x);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003785}
3786
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003787static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003788long_neg(PyLongObject *v)
Guido van Rossumc6913e71991-11-19 20:26:46 +00003789{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003790 PyLongObject *z;
3791 if (ABS(Py_SIZE(v)) <= 1)
3792 return PyLong_FromLong(-MEDIUM_VALUE(v));
3793 z = (PyLongObject *)_PyLong_Copy(v);
3794 if (z != NULL)
3795 Py_SIZE(z) = -(Py_SIZE(v));
3796 return (PyObject *)z;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003797}
3798
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003799static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003800long_abs(PyLongObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003801{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003802 if (Py_SIZE(v) < 0)
3803 return long_neg(v);
3804 else
3805 return long_long((PyObject *)v);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003806}
3807
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00003808static int
Jack Diederich4dafcc42006-11-28 19:15:13 +00003809long_bool(PyLongObject *v)
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00003810{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003811 return Py_SIZE(v) != 0;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003812}
3813
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003814static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003815long_rshift(PyLongObject *a, PyLongObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00003816{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003817 PyLongObject *z = NULL;
3818 Py_ssize_t shiftby, newsize, wordshift, loshift, hishift, i, j;
3819 digit lomask, himask;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003820
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003821 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003822
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003823 if (Py_SIZE(a) < 0) {
3824 /* Right shifting negative numbers is harder */
3825 PyLongObject *a1, *a2;
3826 a1 = (PyLongObject *) long_invert(a);
3827 if (a1 == NULL)
3828 goto rshift_error;
3829 a2 = (PyLongObject *) long_rshift(a1, b);
3830 Py_DECREF(a1);
3831 if (a2 == NULL)
3832 goto rshift_error;
3833 z = (PyLongObject *) long_invert(a2);
3834 Py_DECREF(a2);
3835 }
3836 else {
3837 shiftby = PyLong_AsSsize_t((PyObject *)b);
3838 if (shiftby == -1L && PyErr_Occurred())
3839 goto rshift_error;
3840 if (shiftby < 0) {
3841 PyErr_SetString(PyExc_ValueError,
3842 "negative shift count");
3843 goto rshift_error;
3844 }
3845 wordshift = shiftby / PyLong_SHIFT;
3846 newsize = ABS(Py_SIZE(a)) - wordshift;
3847 if (newsize <= 0)
3848 return PyLong_FromLong(0);
3849 loshift = shiftby % PyLong_SHIFT;
3850 hishift = PyLong_SHIFT - loshift;
3851 lomask = ((digit)1 << hishift) - 1;
3852 himask = PyLong_MASK ^ lomask;
3853 z = _PyLong_New(newsize);
3854 if (z == NULL)
3855 goto rshift_error;
3856 if (Py_SIZE(a) < 0)
3857 Py_SIZE(z) = -(Py_SIZE(z));
3858 for (i = 0, j = wordshift; i < newsize; i++, j++) {
3859 z->ob_digit[i] = (a->ob_digit[j] >> loshift) & lomask;
3860 if (i+1 < newsize)
Mark Dickinson22b20182010-05-10 21:27:53 +00003861 z->ob_digit[i] |= (a->ob_digit[j+1] << hishift) & himask;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003862 }
3863 z = long_normalize(z);
3864 }
Mark Dickinson22b20182010-05-10 21:27:53 +00003865 rshift_error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003866 return (PyObject *) maybe_small_long(z);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003867
Guido van Rossumc6913e71991-11-19 20:26:46 +00003868}
3869
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003870static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00003871long_lshift(PyObject *v, PyObject *w)
Guido van Rossumc6913e71991-11-19 20:26:46 +00003872{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003873 /* This version due to Tim Peters */
3874 PyLongObject *a = (PyLongObject*)v;
3875 PyLongObject *b = (PyLongObject*)w;
3876 PyLongObject *z = NULL;
3877 Py_ssize_t shiftby, oldsize, newsize, wordshift, remshift, i, j;
3878 twodigits accum;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003879
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003880 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003881
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003882 shiftby = PyLong_AsSsize_t((PyObject *)b);
3883 if (shiftby == -1L && PyErr_Occurred())
3884 goto lshift_error;
3885 if (shiftby < 0) {
3886 PyErr_SetString(PyExc_ValueError, "negative shift count");
3887 goto lshift_error;
3888 }
3889 /* wordshift, remshift = divmod(shiftby, PyLong_SHIFT) */
3890 wordshift = shiftby / PyLong_SHIFT;
3891 remshift = shiftby - wordshift * PyLong_SHIFT;
Guido van Rossumf2e499b1997-03-16 00:37:59 +00003892
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003893 oldsize = ABS(Py_SIZE(a));
3894 newsize = oldsize + wordshift;
3895 if (remshift)
3896 ++newsize;
3897 z = _PyLong_New(newsize);
3898 if (z == NULL)
3899 goto lshift_error;
3900 if (Py_SIZE(a) < 0)
3901 NEGATE(z);
3902 for (i = 0; i < wordshift; i++)
3903 z->ob_digit[i] = 0;
3904 accum = 0;
3905 for (i = wordshift, j = 0; j < oldsize; i++, j++) {
3906 accum |= (twodigits)a->ob_digit[j] << remshift;
3907 z->ob_digit[i] = (digit)(accum & PyLong_MASK);
3908 accum >>= PyLong_SHIFT;
3909 }
3910 if (remshift)
3911 z->ob_digit[newsize-1] = (digit)accum;
3912 else
3913 assert(!accum);
3914 z = long_normalize(z);
Mark Dickinson22b20182010-05-10 21:27:53 +00003915 lshift_error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003916 return (PyObject *) maybe_small_long(z);
Guido van Rossumc6913e71991-11-19 20:26:46 +00003917}
3918
Mark Dickinson27a87a22009-10-25 20:43:34 +00003919/* Compute two's complement of digit vector a[0:m], writing result to
3920 z[0:m]. The digit vector a need not be normalized, but should not
3921 be entirely zero. a and z may point to the same digit vector. */
3922
3923static void
3924v_complement(digit *z, digit *a, Py_ssize_t m)
3925{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003926 Py_ssize_t i;
3927 digit carry = 1;
3928 for (i = 0; i < m; ++i) {
3929 carry += a[i] ^ PyLong_MASK;
3930 z[i] = carry & PyLong_MASK;
3931 carry >>= PyLong_SHIFT;
3932 }
3933 assert(carry == 0);
Mark Dickinson27a87a22009-10-25 20:43:34 +00003934}
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003935
3936/* Bitwise and/xor/or operations */
3937
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003938static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003939long_bitwise(PyLongObject *a,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003940 int op, /* '&', '|', '^' */
Mark Dickinson22b20182010-05-10 21:27:53 +00003941 PyLongObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00003942{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003943 int nega, negb, negz;
3944 Py_ssize_t size_a, size_b, size_z, i;
3945 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003946
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003947 /* Bitwise operations for negative numbers operate as though
3948 on a two's complement representation. So convert arguments
3949 from sign-magnitude to two's complement, and convert the
3950 result back to sign-magnitude at the end. */
Mark Dickinson27a87a22009-10-25 20:43:34 +00003951
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003952 /* If a is negative, replace it by its two's complement. */
3953 size_a = ABS(Py_SIZE(a));
3954 nega = Py_SIZE(a) < 0;
3955 if (nega) {
3956 z = _PyLong_New(size_a);
3957 if (z == NULL)
3958 return NULL;
3959 v_complement(z->ob_digit, a->ob_digit, size_a);
3960 a = z;
3961 }
3962 else
3963 /* Keep reference count consistent. */
3964 Py_INCREF(a);
Mark Dickinson27a87a22009-10-25 20:43:34 +00003965
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003966 /* Same for b. */
3967 size_b = ABS(Py_SIZE(b));
3968 negb = Py_SIZE(b) < 0;
3969 if (negb) {
3970 z = _PyLong_New(size_b);
3971 if (z == NULL) {
3972 Py_DECREF(a);
3973 return NULL;
3974 }
3975 v_complement(z->ob_digit, b->ob_digit, size_b);
3976 b = z;
3977 }
3978 else
3979 Py_INCREF(b);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003980
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003981 /* Swap a and b if necessary to ensure size_a >= size_b. */
3982 if (size_a < size_b) {
3983 z = a; a = b; b = z;
3984 size_z = size_a; size_a = size_b; size_b = size_z;
3985 negz = nega; nega = negb; negb = negz;
3986 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00003987
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003988 /* JRH: The original logic here was to allocate the result value (z)
3989 as the longer of the two operands. However, there are some cases
3990 where the result is guaranteed to be shorter than that: AND of two
3991 positives, OR of two negatives: use the shorter number. AND with
3992 mixed signs: use the positive number. OR with mixed signs: use the
3993 negative number.
3994 */
3995 switch (op) {
3996 case '^':
3997 negz = nega ^ negb;
3998 size_z = size_a;
3999 break;
4000 case '&':
4001 negz = nega & negb;
4002 size_z = negb ? size_a : size_b;
4003 break;
4004 case '|':
4005 negz = nega | negb;
4006 size_z = negb ? size_b : size_a;
4007 break;
4008 default:
4009 PyErr_BadArgument();
4010 return NULL;
4011 }
Guido van Rossumbd3a5271998-08-11 15:04:47 +00004012
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004013 /* We allow an extra digit if z is negative, to make sure that
4014 the final two's complement of z doesn't overflow. */
4015 z = _PyLong_New(size_z + negz);
4016 if (z == NULL) {
4017 Py_DECREF(a);
4018 Py_DECREF(b);
4019 return NULL;
4020 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00004021
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004022 /* Compute digits for overlap of a and b. */
4023 switch(op) {
4024 case '&':
4025 for (i = 0; i < size_b; ++i)
4026 z->ob_digit[i] = a->ob_digit[i] & b->ob_digit[i];
4027 break;
4028 case '|':
4029 for (i = 0; i < size_b; ++i)
4030 z->ob_digit[i] = a->ob_digit[i] | b->ob_digit[i];
4031 break;
4032 case '^':
4033 for (i = 0; i < size_b; ++i)
4034 z->ob_digit[i] = a->ob_digit[i] ^ b->ob_digit[i];
4035 break;
4036 default:
4037 PyErr_BadArgument();
4038 return NULL;
4039 }
Mark Dickinson27a87a22009-10-25 20:43:34 +00004040
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004041 /* Copy any remaining digits of a, inverting if necessary. */
4042 if (op == '^' && negb)
4043 for (; i < size_z; ++i)
4044 z->ob_digit[i] = a->ob_digit[i] ^ PyLong_MASK;
4045 else if (i < size_z)
4046 memcpy(&z->ob_digit[i], &a->ob_digit[i],
4047 (size_z-i)*sizeof(digit));
Mark Dickinson27a87a22009-10-25 20:43:34 +00004048
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004049 /* Complement result if negative. */
4050 if (negz) {
4051 Py_SIZE(z) = -(Py_SIZE(z));
4052 z->ob_digit[size_z] = PyLong_MASK;
4053 v_complement(z->ob_digit, z->ob_digit, size_z+1);
4054 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00004055
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004056 Py_DECREF(a);
4057 Py_DECREF(b);
4058 return (PyObject *)maybe_small_long(long_normalize(z));
Guido van Rossumc6913e71991-11-19 20:26:46 +00004059}
4060
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004061static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00004062long_and(PyObject *a, PyObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00004063{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004064 PyObject *c;
4065 CHECK_BINOP(a, b);
4066 c = long_bitwise((PyLongObject*)a, '&', (PyLongObject*)b);
4067 return c;
Guido van Rossumc6913e71991-11-19 20:26:46 +00004068}
4069
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004070static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00004071long_xor(PyObject *a, PyObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00004072{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004073 PyObject *c;
4074 CHECK_BINOP(a, b);
4075 c = long_bitwise((PyLongObject*)a, '^', (PyLongObject*)b);
4076 return c;
Guido van Rossumc6913e71991-11-19 20:26:46 +00004077}
4078
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004079static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00004080long_or(PyObject *a, PyObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00004081{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004082 PyObject *c;
4083 CHECK_BINOP(a, b);
4084 c = long_bitwise((PyLongObject*)a, '|', (PyLongObject*)b);
4085 return c;
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00004086}
4087
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004088static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00004089long_long(PyObject *v)
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004090{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004091 if (PyLong_CheckExact(v))
4092 Py_INCREF(v);
4093 else
4094 v = _PyLong_Copy((PyLongObject *)v);
4095 return v;
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004096}
4097
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004098static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00004099long_float(PyObject *v)
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004100{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004101 double result;
4102 result = PyLong_AsDouble(v);
4103 if (result == -1.0 && PyErr_Occurred())
4104 return NULL;
4105 return PyFloat_FromDouble(result);
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004106}
4107
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004108static PyObject *
Guido van Rossumbef14172001-08-29 15:47:46 +00004109long_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004110
Tim Peters6d6c1a32001-08-02 04:15:00 +00004111static PyObject *
4112long_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
4113{
Mark Dickinsonf9a5a8e2010-05-26 20:07:58 +00004114 PyObject *obase = NULL, *x = NULL;
4115 long base;
4116 int overflow;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004117 static char *kwlist[] = {"x", "base", 0};
Tim Peters6d6c1a32001-08-02 04:15:00 +00004118
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004119 if (type != &PyLong_Type)
4120 return long_subtype_new(type, args, kwds); /* Wimp out */
Mark Dickinsonf9a5a8e2010-05-26 20:07:58 +00004121 if (!PyArg_ParseTupleAndKeywords(args, kwds, "|OO:int", kwlist,
4122 &x, &obase))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004123 return NULL;
4124 if (x == NULL)
4125 return PyLong_FromLong(0L);
Mark Dickinsonf9a5a8e2010-05-26 20:07:58 +00004126 if (obase == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004127 return PyNumber_Long(x);
Mark Dickinsonf9a5a8e2010-05-26 20:07:58 +00004128
4129 base = PyLong_AsLongAndOverflow(obase, &overflow);
4130 if (base == -1 && PyErr_Occurred())
4131 return NULL;
4132 if (overflow || (base != 0 && base < 2) || base > 36) {
4133 PyErr_SetString(PyExc_ValueError,
4134 "int() arg 2 must be >= 2 and <= 36");
4135 return NULL;
4136 }
4137
4138 if (PyUnicode_Check(x))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004139 return PyLong_FromUnicode(PyUnicode_AS_UNICODE(x),
4140 PyUnicode_GET_SIZE(x),
Mark Dickinsonf9a5a8e2010-05-26 20:07:58 +00004141 (int)base);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004142 else if (PyByteArray_Check(x) || PyBytes_Check(x)) {
4143 /* Since PyLong_FromString doesn't have a length parameter,
4144 * check here for possible NULs in the string. */
4145 char *string;
4146 Py_ssize_t size = Py_SIZE(x);
4147 if (PyByteArray_Check(x))
4148 string = PyByteArray_AS_STRING(x);
4149 else
4150 string = PyBytes_AS_STRING(x);
4151 if (strlen(string) != (size_t)size) {
4152 /* We only see this if there's a null byte in x,
4153 x is a bytes or buffer, *and* a base is given. */
4154 PyErr_Format(PyExc_ValueError,
Mark Dickinson22b20182010-05-10 21:27:53 +00004155 "invalid literal for int() with base %d: %R",
Mark Dickinsonf9a5a8e2010-05-26 20:07:58 +00004156 (int)base, x);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004157 return NULL;
4158 }
Mark Dickinsonf9a5a8e2010-05-26 20:07:58 +00004159 return PyLong_FromString(string, NULL, (int)base);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004160 }
4161 else {
4162 PyErr_SetString(PyExc_TypeError,
Mark Dickinson22b20182010-05-10 21:27:53 +00004163 "int() can't convert non-string with explicit base");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004164 return NULL;
4165 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00004166}
4167
Guido van Rossumbef14172001-08-29 15:47:46 +00004168/* Wimpy, slow approach to tp_new calls for subtypes of long:
4169 first create a regular long from whatever arguments we got,
4170 then allocate a subtype instance and initialize it from
4171 the regular long. The regular long is then thrown away.
4172*/
4173static PyObject *
4174long_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
4175{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004176 PyLongObject *tmp, *newobj;
4177 Py_ssize_t i, n;
Guido van Rossumbef14172001-08-29 15:47:46 +00004178
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004179 assert(PyType_IsSubtype(type, &PyLong_Type));
4180 tmp = (PyLongObject *)long_new(&PyLong_Type, args, kwds);
4181 if (tmp == NULL)
4182 return NULL;
4183 assert(PyLong_CheckExact(tmp));
4184 n = Py_SIZE(tmp);
4185 if (n < 0)
4186 n = -n;
4187 newobj = (PyLongObject *)type->tp_alloc(type, n);
4188 if (newobj == NULL) {
4189 Py_DECREF(tmp);
4190 return NULL;
4191 }
4192 assert(PyLong_Check(newobj));
4193 Py_SIZE(newobj) = Py_SIZE(tmp);
4194 for (i = 0; i < n; i++)
4195 newobj->ob_digit[i] = tmp->ob_digit[i];
4196 Py_DECREF(tmp);
4197 return (PyObject *)newobj;
Guido van Rossumbef14172001-08-29 15:47:46 +00004198}
4199
Guido van Rossum5d9113d2003-01-29 17:58:45 +00004200static PyObject *
4201long_getnewargs(PyLongObject *v)
4202{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004203 return Py_BuildValue("(N)", _PyLong_Copy(v));
Guido van Rossum5d9113d2003-01-29 17:58:45 +00004204}
4205
Guido van Rossumb43daf72007-08-01 18:08:08 +00004206static PyObject *
Mark Dickinson6bf19002009-05-02 17:57:52 +00004207long_get0(PyLongObject *v, void *context) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004208 return PyLong_FromLong(0L);
Mark Dickinson6bf19002009-05-02 17:57:52 +00004209}
4210
4211static PyObject *
4212long_get1(PyLongObject *v, void *context) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004213 return PyLong_FromLong(1L);
Guido van Rossumb43daf72007-08-01 18:08:08 +00004214}
4215
Guido van Rossum2fa33db2007-08-23 22:07:24 +00004216static PyObject *
Eric Smith8c663262007-08-25 02:26:07 +00004217long__format__(PyObject *self, PyObject *args)
4218{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004219 PyObject *format_spec;
Eric Smith4a7d76d2008-05-30 18:10:19 +00004220
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004221 if (!PyArg_ParseTuple(args, "U:__format__", &format_spec))
4222 return NULL;
4223 return _PyLong_FormatAdvanced(self,
4224 PyUnicode_AS_UNICODE(format_spec),
4225 PyUnicode_GET_SIZE(format_spec));
Eric Smith8c663262007-08-25 02:26:07 +00004226}
4227
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004228/* Return a pair (q, r) such that a = b * q + r, and
4229 abs(r) <= abs(b)/2, with equality possible only if q is even.
4230 In other words, q == a / b, rounded to the nearest integer using
4231 round-half-to-even. */
4232
4233PyObject *
Mark Dickinsonfa68a612010-06-07 18:47:09 +00004234_PyLong_DivmodNear(PyObject *a, PyObject *b)
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004235{
4236 PyLongObject *quo = NULL, *rem = NULL;
4237 PyObject *one = NULL, *twice_rem, *result, *temp;
4238 int cmp, quo_is_odd, quo_is_neg;
4239
4240 /* Equivalent Python code:
4241
4242 def divmod_near(a, b):
4243 q, r = divmod(a, b)
4244 # round up if either r / b > 0.5, or r / b == 0.5 and q is odd.
4245 # The expression r / b > 0.5 is equivalent to 2 * r > b if b is
4246 # positive, 2 * r < b if b negative.
4247 greater_than_half = 2*r > b if b > 0 else 2*r < b
4248 exactly_half = 2*r == b
4249 if greater_than_half or exactly_half and q % 2 == 1:
4250 q += 1
4251 r -= b
4252 return q, r
4253
4254 */
4255 if (!PyLong_Check(a) || !PyLong_Check(b)) {
4256 PyErr_SetString(PyExc_TypeError,
4257 "non-integer arguments in division");
4258 return NULL;
4259 }
4260
4261 /* Do a and b have different signs? If so, quotient is negative. */
4262 quo_is_neg = (Py_SIZE(a) < 0) != (Py_SIZE(b) < 0);
4263
4264 one = PyLong_FromLong(1L);
4265 if (one == NULL)
4266 return NULL;
4267
4268 if (long_divrem((PyLongObject*)a, (PyLongObject*)b, &quo, &rem) < 0)
4269 goto error;
4270
4271 /* compare twice the remainder with the divisor, to see
4272 if we need to adjust the quotient and remainder */
4273 twice_rem = long_lshift((PyObject *)rem, one);
4274 if (twice_rem == NULL)
4275 goto error;
4276 if (quo_is_neg) {
4277 temp = long_neg((PyLongObject*)twice_rem);
4278 Py_DECREF(twice_rem);
4279 twice_rem = temp;
4280 if (twice_rem == NULL)
4281 goto error;
4282 }
4283 cmp = long_compare((PyLongObject *)twice_rem, (PyLongObject *)b);
4284 Py_DECREF(twice_rem);
4285
4286 quo_is_odd = Py_SIZE(quo) != 0 && ((quo->ob_digit[0] & 1) != 0);
4287 if ((Py_SIZE(b) < 0 ? cmp < 0 : cmp > 0) || (cmp == 0 && quo_is_odd)) {
4288 /* fix up quotient */
4289 if (quo_is_neg)
4290 temp = long_sub(quo, (PyLongObject *)one);
4291 else
4292 temp = long_add(quo, (PyLongObject *)one);
4293 Py_DECREF(quo);
4294 quo = (PyLongObject *)temp;
4295 if (quo == NULL)
4296 goto error;
4297 /* and remainder */
4298 if (quo_is_neg)
4299 temp = long_add(rem, (PyLongObject *)b);
4300 else
4301 temp = long_sub(rem, (PyLongObject *)b);
4302 Py_DECREF(rem);
4303 rem = (PyLongObject *)temp;
4304 if (rem == NULL)
4305 goto error;
4306 }
4307
4308 result = PyTuple_New(2);
4309 if (result == NULL)
4310 goto error;
4311
4312 /* PyTuple_SET_ITEM steals references */
4313 PyTuple_SET_ITEM(result, 0, (PyObject *)quo);
4314 PyTuple_SET_ITEM(result, 1, (PyObject *)rem);
4315 Py_DECREF(one);
4316 return result;
4317
4318 error:
4319 Py_XDECREF(quo);
4320 Py_XDECREF(rem);
4321 Py_XDECREF(one);
4322 return NULL;
4323}
4324
Eric Smith8c663262007-08-25 02:26:07 +00004325static PyObject *
Guido van Rossum2fa33db2007-08-23 22:07:24 +00004326long_round(PyObject *self, PyObject *args)
4327{
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004328 PyObject *o_ndigits=NULL, *temp, *result, *ndigits;
Guido van Rossum2fa33db2007-08-23 22:07:24 +00004329
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004330 /* To round an integer m to the nearest 10**n (n positive), we make use of
4331 * the divmod_near operation, defined by:
4332 *
4333 * divmod_near(a, b) = (q, r)
4334 *
4335 * where q is the nearest integer to the quotient a / b (the
4336 * nearest even integer in the case of a tie) and r == a - q * b.
4337 * Hence q * b = a - r is the nearest multiple of b to a,
4338 * preferring even multiples in the case of a tie.
4339 *
4340 * So the nearest multiple of 10**n to m is:
4341 *
4342 * m - divmod_near(m, 10**n)[1].
4343 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004344 if (!PyArg_ParseTuple(args, "|O", &o_ndigits))
4345 return NULL;
4346 if (o_ndigits == NULL)
4347 return long_long(self);
Guido van Rossum2fa33db2007-08-23 22:07:24 +00004348
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004349 ndigits = PyNumber_Index(o_ndigits);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004350 if (ndigits == NULL)
4351 return NULL;
Mark Dickinson1124e712009-01-28 21:25:58 +00004352
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004353 /* if ndigits >= 0 then no rounding is necessary; return self unchanged */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004354 if (Py_SIZE(ndigits) >= 0) {
4355 Py_DECREF(ndigits);
4356 return long_long(self);
4357 }
Mark Dickinson1124e712009-01-28 21:25:58 +00004358
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004359 /* result = self - divmod_near(self, 10 ** -ndigits)[1] */
4360 temp = long_neg((PyLongObject*)ndigits);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004361 Py_DECREF(ndigits);
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004362 ndigits = temp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004363 if (ndigits == NULL)
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004364 return NULL;
Mark Dickinson1124e712009-01-28 21:25:58 +00004365
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004366 result = PyLong_FromLong(10L);
4367 if (result == NULL) {
4368 Py_DECREF(ndigits);
4369 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004370 }
Mark Dickinson1124e712009-01-28 21:25:58 +00004371
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004372 temp = long_pow(result, ndigits, Py_None);
4373 Py_DECREF(ndigits);
4374 Py_DECREF(result);
4375 result = temp;
4376 if (result == NULL)
4377 return NULL;
4378
Mark Dickinsonfa68a612010-06-07 18:47:09 +00004379 temp = _PyLong_DivmodNear(self, result);
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004380 Py_DECREF(result);
4381 result = temp;
4382 if (result == NULL)
4383 return NULL;
4384
4385 temp = long_sub((PyLongObject *)self,
4386 (PyLongObject *)PyTuple_GET_ITEM(result, 1));
4387 Py_DECREF(result);
4388 result = temp;
4389
4390 return result;
Guido van Rossum2fa33db2007-08-23 22:07:24 +00004391}
4392
Martin v. Löwis00709aa2008-06-04 14:18:43 +00004393static PyObject *
4394long_sizeof(PyLongObject *v)
4395{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004396 Py_ssize_t res;
Martin v. Löwis00709aa2008-06-04 14:18:43 +00004397
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004398 res = offsetof(PyLongObject, ob_digit) + ABS(Py_SIZE(v))*sizeof(digit);
4399 return PyLong_FromSsize_t(res);
Martin v. Löwis00709aa2008-06-04 14:18:43 +00004400}
4401
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004402static PyObject *
4403long_bit_length(PyLongObject *v)
4404{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004405 PyLongObject *result, *x, *y;
4406 Py_ssize_t ndigits, msd_bits = 0;
4407 digit msd;
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004408
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004409 assert(v != NULL);
4410 assert(PyLong_Check(v));
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004411
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004412 ndigits = ABS(Py_SIZE(v));
4413 if (ndigits == 0)
4414 return PyLong_FromLong(0);
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004415
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004416 msd = v->ob_digit[ndigits-1];
4417 while (msd >= 32) {
4418 msd_bits += 6;
4419 msd >>= 6;
4420 }
4421 msd_bits += (long)(BitLengthTable[msd]);
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004422
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004423 if (ndigits <= PY_SSIZE_T_MAX/PyLong_SHIFT)
4424 return PyLong_FromSsize_t((ndigits-1)*PyLong_SHIFT + msd_bits);
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004425
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004426 /* expression above may overflow; use Python integers instead */
4427 result = (PyLongObject *)PyLong_FromSsize_t(ndigits - 1);
4428 if (result == NULL)
4429 return NULL;
4430 x = (PyLongObject *)PyLong_FromLong(PyLong_SHIFT);
4431 if (x == NULL)
4432 goto error;
4433 y = (PyLongObject *)long_mul(result, x);
4434 Py_DECREF(x);
4435 if (y == NULL)
4436 goto error;
4437 Py_DECREF(result);
4438 result = y;
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004439
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004440 x = (PyLongObject *)PyLong_FromLong((long)msd_bits);
4441 if (x == NULL)
4442 goto error;
4443 y = (PyLongObject *)long_add(result, x);
4444 Py_DECREF(x);
4445 if (y == NULL)
4446 goto error;
4447 Py_DECREF(result);
4448 result = y;
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004449
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004450 return (PyObject *)result;
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004451
Mark Dickinson22b20182010-05-10 21:27:53 +00004452 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004453 Py_DECREF(result);
4454 return NULL;
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004455}
4456
4457PyDoc_STRVAR(long_bit_length_doc,
4458"int.bit_length() -> int\n\
4459\n\
4460Number of bits necessary to represent self in binary.\n\
4461>>> bin(37)\n\
4462'0b100101'\n\
4463>>> (37).bit_length()\n\
44646");
4465
Christian Heimes53876d92008-04-19 00:31:39 +00004466#if 0
4467static PyObject *
4468long_is_finite(PyObject *v)
4469{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004470 Py_RETURN_TRUE;
Christian Heimes53876d92008-04-19 00:31:39 +00004471}
4472#endif
4473
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004474
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004475static PyObject *
4476long_to_bytes(PyLongObject *v, PyObject *args, PyObject *kwds)
4477{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004478 PyObject *byteorder_str;
4479 PyObject *is_signed_obj = NULL;
4480 Py_ssize_t length;
4481 int little_endian;
4482 int is_signed;
4483 PyObject *bytes;
4484 static char *kwlist[] = {"length", "byteorder", "signed", NULL};
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004485
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004486 if (!PyArg_ParseTupleAndKeywords(args, kwds, "nU|O:to_bytes", kwlist,
4487 &length, &byteorder_str,
4488 &is_signed_obj))
4489 return NULL;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004490
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004491 if (args != NULL && Py_SIZE(args) > 2) {
4492 PyErr_SetString(PyExc_TypeError,
4493 "'signed' is a keyword-only argument");
4494 return NULL;
4495 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004496
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004497 if (!PyUnicode_CompareWithASCIIString(byteorder_str, "little"))
4498 little_endian = 1;
4499 else if (!PyUnicode_CompareWithASCIIString(byteorder_str, "big"))
4500 little_endian = 0;
4501 else {
4502 PyErr_SetString(PyExc_ValueError,
4503 "byteorder must be either 'little' or 'big'");
4504 return NULL;
4505 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004506
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004507 if (is_signed_obj != NULL) {
4508 int cmp = PyObject_IsTrue(is_signed_obj);
4509 if (cmp < 0)
4510 return NULL;
4511 is_signed = cmp ? 1 : 0;
4512 }
4513 else {
4514 /* If the signed argument was omitted, use False as the
4515 default. */
4516 is_signed = 0;
4517 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004518
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004519 if (length < 0) {
4520 PyErr_SetString(PyExc_ValueError,
4521 "length argument must be non-negative");
4522 return NULL;
4523 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004524
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004525 bytes = PyBytes_FromStringAndSize(NULL, length);
4526 if (bytes == NULL)
4527 return NULL;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004528
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004529 if (_PyLong_AsByteArray(v, (unsigned char *)PyBytes_AS_STRING(bytes),
4530 length, little_endian, is_signed) < 0) {
4531 Py_DECREF(bytes);
4532 return NULL;
4533 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004534
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004535 return bytes;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004536}
4537
Mark Dickinson078c2532010-01-30 18:06:17 +00004538PyDoc_STRVAR(long_to_bytes_doc,
4539"int.to_bytes(length, byteorder, *, signed=False) -> bytes\n\
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004540\n\
Mark Dickinson078c2532010-01-30 18:06:17 +00004541Return an array of bytes representing an integer.\n\
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004542\n\
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004543The integer is represented using length bytes. An OverflowError is\n\
Mark Dickinson078c2532010-01-30 18:06:17 +00004544raised if the integer is not representable with the given number of\n\
4545bytes.\n\
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004546\n\
4547The byteorder argument determines the byte order used to represent the\n\
4548integer. If byteorder is 'big', the most significant byte is at the\n\
4549beginning of the byte array. If byteorder is 'little', the most\n\
4550significant byte is at the end of the byte array. To request the native\n\
4551byte order of the host system, use `sys.byteorder' as the byte order value.\n\
4552\n\
Mark Dickinson078c2532010-01-30 18:06:17 +00004553The signed keyword-only argument determines whether two's complement is\n\
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004554used to represent the integer. If signed is False and a negative integer\n\
Mark Dickinson078c2532010-01-30 18:06:17 +00004555is given, an OverflowError is raised.");
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004556
4557static PyObject *
4558long_from_bytes(PyTypeObject *type, PyObject *args, PyObject *kwds)
4559{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004560 PyObject *byteorder_str;
4561 PyObject *is_signed_obj = NULL;
4562 int little_endian;
4563 int is_signed;
4564 PyObject *obj;
4565 PyObject *bytes;
4566 PyObject *long_obj;
4567 static char *kwlist[] = {"bytes", "byteorder", "signed", NULL};
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004568
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004569 if (!PyArg_ParseTupleAndKeywords(args, kwds, "OU|O:from_bytes", kwlist,
4570 &obj, &byteorder_str,
4571 &is_signed_obj))
4572 return NULL;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004573
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004574 if (args != NULL && Py_SIZE(args) > 2) {
4575 PyErr_SetString(PyExc_TypeError,
4576 "'signed' is a keyword-only argument");
4577 return NULL;
4578 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004579
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004580 if (!PyUnicode_CompareWithASCIIString(byteorder_str, "little"))
4581 little_endian = 1;
4582 else if (!PyUnicode_CompareWithASCIIString(byteorder_str, "big"))
4583 little_endian = 0;
4584 else {
4585 PyErr_SetString(PyExc_ValueError,
4586 "byteorder must be either 'little' or 'big'");
4587 return NULL;
4588 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004589
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004590 if (is_signed_obj != NULL) {
4591 int cmp = PyObject_IsTrue(is_signed_obj);
4592 if (cmp < 0)
4593 return NULL;
4594 is_signed = cmp ? 1 : 0;
4595 }
4596 else {
4597 /* If the signed argument was omitted, use False as the
4598 default. */
4599 is_signed = 0;
4600 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004601
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004602 bytes = PyObject_Bytes(obj);
4603 if (bytes == NULL)
4604 return NULL;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004605
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004606 long_obj = _PyLong_FromByteArray(
4607 (unsigned char *)PyBytes_AS_STRING(bytes), Py_SIZE(bytes),
4608 little_endian, is_signed);
4609 Py_DECREF(bytes);
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004610
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004611 /* If from_bytes() was used on subclass, allocate new subclass
4612 * instance, initialize it with decoded long value and return it.
4613 */
4614 if (type != &PyLong_Type && PyType_IsSubtype(type, &PyLong_Type)) {
4615 PyLongObject *newobj;
4616 int i;
4617 Py_ssize_t n = ABS(Py_SIZE(long_obj));
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004618
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004619 newobj = (PyLongObject *)type->tp_alloc(type, n);
4620 if (newobj == NULL) {
4621 Py_DECREF(long_obj);
4622 return NULL;
4623 }
4624 assert(PyLong_Check(newobj));
4625 Py_SIZE(newobj) = Py_SIZE(long_obj);
4626 for (i = 0; i < n; i++) {
4627 newobj->ob_digit[i] =
4628 ((PyLongObject *)long_obj)->ob_digit[i];
4629 }
4630 Py_DECREF(long_obj);
4631 return (PyObject *)newobj;
4632 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004633
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004634 return long_obj;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004635}
4636
Mark Dickinson078c2532010-01-30 18:06:17 +00004637PyDoc_STRVAR(long_from_bytes_doc,
4638"int.from_bytes(bytes, byteorder, *, signed=False) -> int\n\
4639\n\
4640Return the integer represented by the given array of bytes.\n\
4641\n\
4642The bytes argument must either support the buffer protocol or be an\n\
4643iterable object producing bytes. Bytes and bytearray are examples of\n\
4644built-in objects that support the buffer protocol.\n\
4645\n\
4646The byteorder argument determines the byte order used to represent the\n\
4647integer. If byteorder is 'big', the most significant byte is at the\n\
4648beginning of the byte array. If byteorder is 'little', the most\n\
4649significant byte is at the end of the byte array. To request the native\n\
4650byte order of the host system, use `sys.byteorder' as the byte order value.\n\
4651\n\
4652The signed keyword-only argument indicates whether two's complement is\n\
4653used to represent the integer.");
4654
Guido van Rossum5d9113d2003-01-29 17:58:45 +00004655static PyMethodDef long_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004656 {"conjugate", (PyCFunction)long_long, METH_NOARGS,
4657 "Returns self, the complex conjugate of any int."},
4658 {"bit_length", (PyCFunction)long_bit_length, METH_NOARGS,
4659 long_bit_length_doc},
Christian Heimes53876d92008-04-19 00:31:39 +00004660#if 0
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004661 {"is_finite", (PyCFunction)long_is_finite, METH_NOARGS,
4662 "Returns always True."},
Christian Heimes53876d92008-04-19 00:31:39 +00004663#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004664 {"to_bytes", (PyCFunction)long_to_bytes,
4665 METH_VARARGS|METH_KEYWORDS, long_to_bytes_doc},
4666 {"from_bytes", (PyCFunction)long_from_bytes,
4667 METH_VARARGS|METH_KEYWORDS|METH_CLASS, long_from_bytes_doc},
4668 {"__trunc__", (PyCFunction)long_long, METH_NOARGS,
4669 "Truncating an Integral returns itself."},
4670 {"__floor__", (PyCFunction)long_long, METH_NOARGS,
4671 "Flooring an Integral returns itself."},
4672 {"__ceil__", (PyCFunction)long_long, METH_NOARGS,
4673 "Ceiling of an Integral returns itself."},
4674 {"__round__", (PyCFunction)long_round, METH_VARARGS,
4675 "Rounding an Integral returns itself.\n"
4676 "Rounding with an ndigits argument also returns an integer."},
4677 {"__getnewargs__", (PyCFunction)long_getnewargs, METH_NOARGS},
4678 {"__format__", (PyCFunction)long__format__, METH_VARARGS},
4679 {"__sizeof__", (PyCFunction)long_sizeof, METH_NOARGS,
4680 "Returns size in memory, in bytes"},
4681 {NULL, NULL} /* sentinel */
Guido van Rossum5d9113d2003-01-29 17:58:45 +00004682};
4683
Guido van Rossumb43daf72007-08-01 18:08:08 +00004684static PyGetSetDef long_getset[] = {
Mark Dickinson6bf19002009-05-02 17:57:52 +00004685 {"real",
Guido van Rossumb43daf72007-08-01 18:08:08 +00004686 (getter)long_long, (setter)NULL,
4687 "the real part of a complex number",
4688 NULL},
Mark Dickinson6bf19002009-05-02 17:57:52 +00004689 {"imag",
4690 (getter)long_get0, (setter)NULL,
Guido van Rossumb43daf72007-08-01 18:08:08 +00004691 "the imaginary part of a complex number",
Mark Dickinson6bf19002009-05-02 17:57:52 +00004692 NULL},
4693 {"numerator",
Guido van Rossumb43daf72007-08-01 18:08:08 +00004694 (getter)long_long, (setter)NULL,
4695 "the numerator of a rational number in lowest terms",
4696 NULL},
Mark Dickinson6bf19002009-05-02 17:57:52 +00004697 {"denominator",
4698 (getter)long_get1, (setter)NULL,
Guido van Rossumb43daf72007-08-01 18:08:08 +00004699 "the denominator of a rational number in lowest terms",
Mark Dickinson6bf19002009-05-02 17:57:52 +00004700 NULL},
Guido van Rossumb43daf72007-08-01 18:08:08 +00004701 {NULL} /* Sentinel */
4702};
4703
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004704PyDoc_STRVAR(long_doc,
Guido van Rossumddefaf32007-01-14 03:31:43 +00004705"int(x[, base]) -> integer\n\
Tim Peters6d6c1a32001-08-02 04:15:00 +00004706\n\
Guido van Rossumddefaf32007-01-14 03:31:43 +00004707Convert a string or number to an integer, if possible. A floating\n\
Tim Peters6d6c1a32001-08-02 04:15:00 +00004708point argument will be truncated towards zero (this does not include a\n\
4709string representation of a floating point number!) When converting a\n\
4710string, use the optional base. It is an error to supply a base when\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004711converting a non-string.");
Tim Peters6d6c1a32001-08-02 04:15:00 +00004712
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004713static PyNumberMethods long_as_number = {
Mark Dickinson22b20182010-05-10 21:27:53 +00004714 (binaryfunc)long_add, /*nb_add*/
4715 (binaryfunc)long_sub, /*nb_subtract*/
4716 (binaryfunc)long_mul, /*nb_multiply*/
4717 long_mod, /*nb_remainder*/
4718 long_divmod, /*nb_divmod*/
4719 long_pow, /*nb_power*/
4720 (unaryfunc)long_neg, /*nb_negative*/
4721 (unaryfunc)long_long, /*tp_positive*/
4722 (unaryfunc)long_abs, /*tp_absolute*/
4723 (inquiry)long_bool, /*tp_bool*/
4724 (unaryfunc)long_invert, /*nb_invert*/
4725 long_lshift, /*nb_lshift*/
4726 (binaryfunc)long_rshift, /*nb_rshift*/
4727 long_and, /*nb_and*/
4728 long_xor, /*nb_xor*/
4729 long_or, /*nb_or*/
4730 long_long, /*nb_int*/
4731 0, /*nb_reserved*/
4732 long_float, /*nb_float*/
4733 0, /* nb_inplace_add */
4734 0, /* nb_inplace_subtract */
4735 0, /* nb_inplace_multiply */
4736 0, /* nb_inplace_remainder */
4737 0, /* nb_inplace_power */
4738 0, /* nb_inplace_lshift */
4739 0, /* nb_inplace_rshift */
4740 0, /* nb_inplace_and */
4741 0, /* nb_inplace_xor */
4742 0, /* nb_inplace_or */
4743 long_div, /* nb_floor_divide */
4744 long_true_divide, /* nb_true_divide */
4745 0, /* nb_inplace_floor_divide */
4746 0, /* nb_inplace_true_divide */
4747 long_long, /* nb_index */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00004748};
4749
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004750PyTypeObject PyLong_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004751 PyVarObject_HEAD_INIT(&PyType_Type, 0)
4752 "int", /* tp_name */
4753 offsetof(PyLongObject, ob_digit), /* tp_basicsize */
4754 sizeof(digit), /* tp_itemsize */
4755 long_dealloc, /* tp_dealloc */
4756 0, /* tp_print */
4757 0, /* tp_getattr */
4758 0, /* tp_setattr */
4759 0, /* tp_reserved */
4760 long_to_decimal_string, /* tp_repr */
4761 &long_as_number, /* tp_as_number */
4762 0, /* tp_as_sequence */
4763 0, /* tp_as_mapping */
4764 (hashfunc)long_hash, /* tp_hash */
4765 0, /* tp_call */
4766 long_to_decimal_string, /* tp_str */
4767 PyObject_GenericGetAttr, /* tp_getattro */
4768 0, /* tp_setattro */
4769 0, /* tp_as_buffer */
4770 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE |
4771 Py_TPFLAGS_LONG_SUBCLASS, /* tp_flags */
4772 long_doc, /* tp_doc */
4773 0, /* tp_traverse */
4774 0, /* tp_clear */
4775 long_richcompare, /* tp_richcompare */
4776 0, /* tp_weaklistoffset */
4777 0, /* tp_iter */
4778 0, /* tp_iternext */
4779 long_methods, /* tp_methods */
4780 0, /* tp_members */
4781 long_getset, /* tp_getset */
4782 0, /* tp_base */
4783 0, /* tp_dict */
4784 0, /* tp_descr_get */
4785 0, /* tp_descr_set */
4786 0, /* tp_dictoffset */
4787 0, /* tp_init */
4788 0, /* tp_alloc */
4789 long_new, /* tp_new */
4790 PyObject_Del, /* tp_free */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00004791};
Guido van Rossumddefaf32007-01-14 03:31:43 +00004792
Mark Dickinsonbd792642009-03-18 20:06:12 +00004793static PyTypeObject Int_InfoType;
4794
4795PyDoc_STRVAR(int_info__doc__,
4796"sys.int_info\n\
4797\n\
4798A struct sequence that holds information about Python's\n\
4799internal representation of integers. The attributes are read only.");
4800
4801static PyStructSequence_Field int_info_fields[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004802 {"bits_per_digit", "size of a digit in bits"},
Mark Dickinson22b20182010-05-10 21:27:53 +00004803 {"sizeof_digit", "size in bytes of the C type used to represent a digit"},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004804 {NULL, NULL}
Mark Dickinsonbd792642009-03-18 20:06:12 +00004805};
4806
4807static PyStructSequence_Desc int_info_desc = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004808 "sys.int_info", /* name */
4809 int_info__doc__, /* doc */
4810 int_info_fields, /* fields */
4811 2 /* number of fields */
Mark Dickinsonbd792642009-03-18 20:06:12 +00004812};
4813
4814PyObject *
4815PyLong_GetInfo(void)
4816{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004817 PyObject* int_info;
4818 int field = 0;
4819 int_info = PyStructSequence_New(&Int_InfoType);
4820 if (int_info == NULL)
4821 return NULL;
4822 PyStructSequence_SET_ITEM(int_info, field++,
4823 PyLong_FromLong(PyLong_SHIFT));
4824 PyStructSequence_SET_ITEM(int_info, field++,
4825 PyLong_FromLong(sizeof(digit)));
4826 if (PyErr_Occurred()) {
4827 Py_CLEAR(int_info);
4828 return NULL;
4829 }
4830 return int_info;
Mark Dickinsonbd792642009-03-18 20:06:12 +00004831}
4832
Guido van Rossumddefaf32007-01-14 03:31:43 +00004833int
4834_PyLong_Init(void)
4835{
4836#if NSMALLNEGINTS + NSMALLPOSINTS > 0
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004837 int ival, size;
4838 PyLongObject *v = small_ints;
Christian Heimesdfc12ed2008-01-31 15:16:38 +00004839
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004840 for (ival = -NSMALLNEGINTS; ival < NSMALLPOSINTS; ival++, v++) {
4841 size = (ival < 0) ? -1 : ((ival == 0) ? 0 : 1);
4842 if (Py_TYPE(v) == &PyLong_Type) {
4843 /* The element is already initialized, most likely
4844 * the Python interpreter was initialized before.
4845 */
4846 Py_ssize_t refcnt;
4847 PyObject* op = (PyObject*)v;
Christian Heimesdfc12ed2008-01-31 15:16:38 +00004848
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004849 refcnt = Py_REFCNT(op) < 0 ? 0 : Py_REFCNT(op);
4850 _Py_NewReference(op);
4851 /* _Py_NewReference sets the ref count to 1 but
4852 * the ref count might be larger. Set the refcnt
4853 * to the original refcnt + 1 */
4854 Py_REFCNT(op) = refcnt + 1;
4855 assert(Py_SIZE(op) == size);
4856 assert(v->ob_digit[0] == abs(ival));
4857 }
4858 else {
4859 PyObject_INIT(v, &PyLong_Type);
4860 }
4861 Py_SIZE(v) = size;
4862 v->ob_digit[0] = abs(ival);
4863 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00004864#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004865 /* initialize int_info */
4866 if (Int_InfoType.tp_name == 0)
4867 PyStructSequence_InitType(&Int_InfoType, &int_info_desc);
Mark Dickinsonbd792642009-03-18 20:06:12 +00004868
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004869 return 1;
Guido van Rossumddefaf32007-01-14 03:31:43 +00004870}
4871
4872void
4873PyLong_Fini(void)
4874{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004875 /* Integers are currently statically allocated. Py_DECREF is not
4876 needed, but Python must forget about the reference or multiple
4877 reinitializations will fail. */
Guido van Rossumddefaf32007-01-14 03:31:43 +00004878#if NSMALLNEGINTS + NSMALLPOSINTS > 0
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004879 int i;
4880 PyLongObject *v = small_ints;
4881 for (i = 0; i < NSMALLNEGINTS + NSMALLPOSINTS; i++, v++) {
4882 _Py_DEC_REFTOTAL;
4883 _Py_ForgetReference((PyObject*)v);
4884 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00004885#endif
4886}