blob: 13e9721f361c62540793db3cb285148cd1350020 [file] [log] [blame]
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001/* Long (arbitrary precision) integer object implementation */
2
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00003/* XXX The functional organization of this file is terrible */
4
Guido van Rossumc0b618a1997-05-02 03:12:38 +00005#include "Python.h"
Guido van Rossumedcc38a1991-05-05 20:09:44 +00006#include "longintrepr.h"
Mark Dickinsonbd792642009-03-18 20:06:12 +00007#include "structseq.h"
Guido van Rossumc0b618a1997-05-02 03:12:38 +00008
Mark Dickinsonc6300392009-04-20 21:38:00 +00009#include <float.h>
Guido van Rossumeb1fafc1994-08-29 12:47:19 +000010#include <ctype.h>
Mark Dickinson5a74bf62009-02-15 11:04:38 +000011#include <stddef.h>
Guido van Rossumedcc38a1991-05-05 20:09:44 +000012
Guido van Rossumddefaf32007-01-14 03:31:43 +000013#ifndef NSMALLPOSINTS
14#define NSMALLPOSINTS 257
15#endif
16#ifndef NSMALLNEGINTS
17#define NSMALLNEGINTS 5
18#endif
Facundo Batista6e6f59b2008-07-24 18:57:11 +000019
Mark Dickinsone4416742009-02-15 15:14:57 +000020/* convert a PyLong of size 1, 0 or -1 to an sdigit */
21#define MEDIUM_VALUE(x) (Py_SIZE(x) < 0 ? -(sdigit)(x)->ob_digit[0] : \
22 (Py_SIZE(x) == 0 ? (sdigit)0 : \
23 (sdigit)(x)->ob_digit[0]))
Facundo Batista6e6f59b2008-07-24 18:57:11 +000024#define ABS(x) ((x) < 0 ? -(x) : (x))
25
Guido van Rossumddefaf32007-01-14 03:31:43 +000026#if NSMALLNEGINTS + NSMALLPOSINTS > 0
27/* Small integers are preallocated in this array so that they
28 can be shared.
29 The integers that are preallocated are those in the range
30 -NSMALLNEGINTS (inclusive) to NSMALLPOSINTS (not inclusive).
31*/
32static PyLongObject small_ints[NSMALLNEGINTS + NSMALLPOSINTS];
33#ifdef COUNT_ALLOCS
34int quick_int_allocs, quick_neg_int_allocs;
35#endif
36
Guido van Rossum7eaf8222007-06-18 17:58:50 +000037static PyObject *
Mark Dickinsone4416742009-02-15 15:14:57 +000038get_small_int(sdigit ival)
Guido van Rossumddefaf32007-01-14 03:31:43 +000039{
40 PyObject *v = (PyObject*)(small_ints + ival + NSMALLNEGINTS);
41 Py_INCREF(v);
42#ifdef COUNT_ALLOCS
43 if (ival >= 0)
44 quick_int_allocs++;
45 else
46 quick_neg_int_allocs++;
47#endif
48 return v;
49}
50#define CHECK_SMALL_INT(ival) \
51 do if (-NSMALLNEGINTS <= ival && ival < NSMALLPOSINTS) { \
Mark Dickinson0d4785b2009-02-15 17:27:41 +000052 return get_small_int((sdigit)ival); \
Guido van Rossumddefaf32007-01-14 03:31:43 +000053 } while(0)
54
Facundo Batista6e6f59b2008-07-24 18:57:11 +000055static PyLongObject *
56maybe_small_long(PyLongObject *v)
57{
58 if (v && ABS(Py_SIZE(v)) <= 1) {
Mark Dickinsone4416742009-02-15 15:14:57 +000059 sdigit ival = MEDIUM_VALUE(v);
Facundo Batista6e6f59b2008-07-24 18:57:11 +000060 if (-NSMALLNEGINTS <= ival && ival < NSMALLPOSINTS) {
61 Py_DECREF(v);
62 return (PyLongObject *)get_small_int(ival);
63 }
64 }
65 return v;
66}
Guido van Rossumddefaf32007-01-14 03:31:43 +000067#else
68#define CHECK_SMALL_INT(ival)
Facundo Batista6e6f59b2008-07-24 18:57:11 +000069#define maybe_small_long(val) (val)
Guido van Rossumddefaf32007-01-14 03:31:43 +000070#endif
71
Guido van Rossumddefaf32007-01-14 03:31:43 +000072/* If a freshly-allocated long is already shared, it must
73 be a small integer, so negating it must go to PyLong_FromLong */
74#define NEGATE(x) \
Christian Heimes90aa7642007-12-19 02:45:37 +000075 do if (Py_REFCNT(x) == 1) Py_SIZE(x) = -Py_SIZE(x); \
Christian Heimes217cfd12007-12-02 14:31:20 +000076 else { PyObject* tmp=PyLong_FromLong(-MEDIUM_VALUE(x)); \
Guido van Rossumddefaf32007-01-14 03:31:43 +000077 Py_DECREF(x); (x) = (PyLongObject*)tmp; } \
78 while(0)
Tim Peters5af4e6c2002-08-12 02:31:19 +000079/* For long multiplication, use the O(N**2) school algorithm unless
80 * both operands contain more than KARATSUBA_CUTOFF digits (this
81 * being an internal Python long digit, in base BASE).
82 */
Tim Peters0973b992004-08-29 22:16:50 +000083#define KARATSUBA_CUTOFF 70
84#define KARATSUBA_SQUARE_CUTOFF (2 * KARATSUBA_CUTOFF)
Tim Peters5af4e6c2002-08-12 02:31:19 +000085
Tim Peters47e52ee2004-08-30 02:44:38 +000086/* For exponentiation, use the binary left-to-right algorithm
87 * unless the exponent contains more than FIVEARY_CUTOFF digits.
88 * In that case, do 5 bits at a time. The potential drawback is that
89 * a table of 2**5 intermediate results is computed.
90 */
91#define FIVEARY_CUTOFF 8
92
Tim Peters5af4e6c2002-08-12 02:31:19 +000093#undef MIN
94#undef MAX
95#define MAX(x, y) ((x) < (y) ? (y) : (x))
96#define MIN(x, y) ((x) > (y) ? (y) : (x))
97
Guido van Rossumc0b618a1997-05-02 03:12:38 +000098#define SIGCHECK(PyTryBlock) \
Antoine Pitrou074e5ed2009-11-10 19:50:40 +000099 if (PyErr_CheckSignals()) PyTryBlock \
Guido van Rossum23d6f0e1991-05-14 12:06:49 +0000100
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000101/* Normalize (remove leading zeros from) a long int object.
102 Doesn't attempt to free the storage--in most cases, due to the nature
103 of the algorithms used, this could save at most be one word anyway. */
104
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000105static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +0000106long_normalize(register PyLongObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000107{
Christian Heimes90aa7642007-12-19 02:45:37 +0000108 Py_ssize_t j = ABS(Py_SIZE(v));
Martin v. Löwis18e16552006-02-15 17:27:45 +0000109 Py_ssize_t i = j;
Tim Peters5af4e6c2002-08-12 02:31:19 +0000110
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000111 while (i > 0 && v->ob_digit[i-1] == 0)
112 --i;
113 if (i != j)
Christian Heimes90aa7642007-12-19 02:45:37 +0000114 Py_SIZE(v) = (Py_SIZE(v) < 0) ? -(i) : i;
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000115 return v;
116}
117
118/* Allocate a new long int object with size digits.
119 Return NULL and set exception if we run out of memory. */
120
Mark Dickinson5a74bf62009-02-15 11:04:38 +0000121#define MAX_LONG_DIGITS \
122 ((PY_SSIZE_T_MAX - offsetof(PyLongObject, ob_digit))/sizeof(digit))
123
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000124PyLongObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +0000125_PyLong_New(Py_ssize_t size)
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000126{
Guido van Rossumddefaf32007-01-14 03:31:43 +0000127 PyLongObject *result;
Mark Dickinson5a74bf62009-02-15 11:04:38 +0000128 /* Number of bytes needed is: offsetof(PyLongObject, ob_digit) +
129 sizeof(digit)*size. Previous incarnations of this code used
130 sizeof(PyVarObject) instead of the offsetof, but this risks being
131 incorrect in the presence of padding between the PyVarObject header
132 and the digits. */
Mark Dickinsone4416742009-02-15 15:14:57 +0000133 if (size > (Py_ssize_t)MAX_LONG_DIGITS) {
Mark Dickinson5a74bf62009-02-15 11:04:38 +0000134 PyErr_SetString(PyExc_OverflowError,
135 "too many digits in integer");
136 return NULL;
137 }
138 result = PyObject_MALLOC(offsetof(PyLongObject, ob_digit) +
Guido van Rossumddefaf32007-01-14 03:31:43 +0000139 size*sizeof(digit));
140 if (!result) {
Martin v. Löwis18e16552006-02-15 17:27:45 +0000141 PyErr_NoMemory();
142 return NULL;
143 }
Guido van Rossumddefaf32007-01-14 03:31:43 +0000144 return (PyLongObject*)PyObject_INIT_VAR(result, &PyLong_Type, size);
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000145}
146
Tim Peters64b5ce32001-09-10 20:52:51 +0000147PyObject *
148_PyLong_Copy(PyLongObject *src)
149{
150 PyLongObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000151 Py_ssize_t i;
Tim Peters64b5ce32001-09-10 20:52:51 +0000152
153 assert(src != NULL);
Christian Heimes90aa7642007-12-19 02:45:37 +0000154 i = Py_SIZE(src);
Tim Peters64b5ce32001-09-10 20:52:51 +0000155 if (i < 0)
156 i = -(i);
Guido van Rossumddefaf32007-01-14 03:31:43 +0000157 if (i < 2) {
Mark Dickinsone4416742009-02-15 15:14:57 +0000158 sdigit ival = src->ob_digit[0];
Christian Heimes90aa7642007-12-19 02:45:37 +0000159 if (Py_SIZE(src) < 0)
Guido van Rossumddefaf32007-01-14 03:31:43 +0000160 ival = -ival;
161 CHECK_SMALL_INT(ival);
162 }
Tim Peters64b5ce32001-09-10 20:52:51 +0000163 result = _PyLong_New(i);
164 if (result != NULL) {
Christian Heimes90aa7642007-12-19 02:45:37 +0000165 Py_SIZE(result) = Py_SIZE(src);
Tim Peters64b5ce32001-09-10 20:52:51 +0000166 while (--i >= 0)
167 result->ob_digit[i] = src->ob_digit[i];
168 }
169 return (PyObject *)result;
170}
171
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000172/* Create a new long int object from a C long int */
173
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000174PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +0000175PyLong_FromLong(long ival)
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000176{
Tim Petersce9de2f2001-06-14 04:56:19 +0000177 PyLongObject *v;
Mark Dickinsond4624c32009-01-24 15:02:35 +0000178 unsigned long abs_ival;
Tim Petersce9de2f2001-06-14 04:56:19 +0000179 unsigned long t; /* unsigned so >> doesn't propagate sign bit */
180 int ndigits = 0;
Guido van Rossumddefaf32007-01-14 03:31:43 +0000181 int sign = 1;
182
183 CHECK_SMALL_INT(ival);
Tim Petersce9de2f2001-06-14 04:56:19 +0000184
185 if (ival < 0) {
Mark Dickinsond4624c32009-01-24 15:02:35 +0000186 /* negate: can't write this as abs_ival = -ival since that
187 invokes undefined behaviour when ival is LONG_MIN */
188 abs_ival = 0U-(unsigned long)ival;
Guido van Rossumddefaf32007-01-14 03:31:43 +0000189 sign = -1;
Tim Petersce9de2f2001-06-14 04:56:19 +0000190 }
Christian Heimesdae2a892008-04-19 00:55:37 +0000191 else {
192 abs_ival = (unsigned long)ival;
193 }
Tim Petersce9de2f2001-06-14 04:56:19 +0000194
Mark Dickinsond4624c32009-01-24 15:02:35 +0000195 /* Fast path for single-digit ints */
196 if (!(abs_ival >> PyLong_SHIFT)) {
Guido van Rossumddefaf32007-01-14 03:31:43 +0000197 v = _PyLong_New(1);
198 if (v) {
Christian Heimes90aa7642007-12-19 02:45:37 +0000199 Py_SIZE(v) = sign;
Mark Dickinsond4624c32009-01-24 15:02:35 +0000200 v->ob_digit[0] = Py_SAFE_DOWNCAST(
201 abs_ival, unsigned long, digit);
Guido van Rossumddefaf32007-01-14 03:31:43 +0000202 }
203 return (PyObject*)v;
204 }
205
Mark Dickinson249b8982009-04-27 19:41:00 +0000206#if PyLong_SHIFT==15
Guido van Rossumddefaf32007-01-14 03:31:43 +0000207 /* 2 digits */
Mark Dickinsond4624c32009-01-24 15:02:35 +0000208 if (!(abs_ival >> 2*PyLong_SHIFT)) {
Guido van Rossumddefaf32007-01-14 03:31:43 +0000209 v = _PyLong_New(2);
210 if (v) {
Christian Heimes90aa7642007-12-19 02:45:37 +0000211 Py_SIZE(v) = 2*sign;
Mark Dickinsond4624c32009-01-24 15:02:35 +0000212 v->ob_digit[0] = Py_SAFE_DOWNCAST(
213 abs_ival & PyLong_MASK, unsigned long, digit);
214 v->ob_digit[1] = Py_SAFE_DOWNCAST(
215 abs_ival >> PyLong_SHIFT, unsigned long, digit);
Guido van Rossumddefaf32007-01-14 03:31:43 +0000216 }
217 return (PyObject*)v;
218 }
Mark Dickinsonbd792642009-03-18 20:06:12 +0000219#endif
Guido van Rossumddefaf32007-01-14 03:31:43 +0000220
221 /* Larger numbers: loop to determine number of digits */
Christian Heimesdae2a892008-04-19 00:55:37 +0000222 t = abs_ival;
Tim Petersce9de2f2001-06-14 04:56:19 +0000223 while (t) {
224 ++ndigits;
Martin v. Löwis9f2e3462007-07-21 17:22:18 +0000225 t >>= PyLong_SHIFT;
Tim Petersce9de2f2001-06-14 04:56:19 +0000226 }
227 v = _PyLong_New(ndigits);
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000228 if (v != NULL) {
Tim Petersce9de2f2001-06-14 04:56:19 +0000229 digit *p = v->ob_digit;
Christian Heimes90aa7642007-12-19 02:45:37 +0000230 Py_SIZE(v) = ndigits*sign;
Christian Heimesdae2a892008-04-19 00:55:37 +0000231 t = abs_ival;
Tim Petersce9de2f2001-06-14 04:56:19 +0000232 while (t) {
Mark Dickinsond4624c32009-01-24 15:02:35 +0000233 *p++ = Py_SAFE_DOWNCAST(
234 t & PyLong_MASK, unsigned long, digit);
Martin v. Löwis9f2e3462007-07-21 17:22:18 +0000235 t >>= PyLong_SHIFT;
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000236 }
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000237 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000238 return (PyObject *)v;
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000239}
240
Guido van Rossum53756b11997-01-03 17:14:46 +0000241/* Create a new long int object from a C unsigned long int */
242
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000243PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +0000244PyLong_FromUnsignedLong(unsigned long ival)
Guido van Rossum53756b11997-01-03 17:14:46 +0000245{
Tim Petersce9de2f2001-06-14 04:56:19 +0000246 PyLongObject *v;
247 unsigned long t;
248 int ndigits = 0;
249
Martin v. Löwis9f2e3462007-07-21 17:22:18 +0000250 if (ival < PyLong_BASE)
Guido van Rossumddefaf32007-01-14 03:31:43 +0000251 return PyLong_FromLong(ival);
Tim Petersce9de2f2001-06-14 04:56:19 +0000252 /* Count the number of Python digits. */
253 t = (unsigned long)ival;
254 while (t) {
255 ++ndigits;
Martin v. Löwis9f2e3462007-07-21 17:22:18 +0000256 t >>= PyLong_SHIFT;
Tim Petersce9de2f2001-06-14 04:56:19 +0000257 }
258 v = _PyLong_New(ndigits);
Guido van Rossum53756b11997-01-03 17:14:46 +0000259 if (v != NULL) {
Tim Petersce9de2f2001-06-14 04:56:19 +0000260 digit *p = v->ob_digit;
Christian Heimes90aa7642007-12-19 02:45:37 +0000261 Py_SIZE(v) = ndigits;
Tim Petersce9de2f2001-06-14 04:56:19 +0000262 while (ival) {
Martin v. Löwis9f2e3462007-07-21 17:22:18 +0000263 *p++ = (digit)(ival & PyLong_MASK);
264 ival >>= PyLong_SHIFT;
Guido van Rossum53756b11997-01-03 17:14:46 +0000265 }
Guido van Rossum53756b11997-01-03 17:14:46 +0000266 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000267 return (PyObject *)v;
Guido van Rossum53756b11997-01-03 17:14:46 +0000268}
269
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000270/* Create a new long int object from a C double */
271
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000272PyObject *
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000273PyLong_FromDouble(double dval)
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000274{
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000275 PyLongObject *v;
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000276 double frac;
277 int i, ndig, expo, neg;
278 neg = 0;
Tim Peters39dce292000-08-15 03:34:48 +0000279 if (Py_IS_INFINITY(dval)) {
Guido van Rossum1a23c241999-09-27 17:11:52 +0000280 PyErr_SetString(PyExc_OverflowError,
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000281 "cannot convert float infinity to integer");
Guido van Rossum1a23c241999-09-27 17:11:52 +0000282 return NULL;
283 }
Christian Heimesa34706f2008-01-04 03:06:10 +0000284 if (Py_IS_NAN(dval)) {
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000285 PyErr_SetString(PyExc_ValueError,
286 "cannot convert float NaN to integer");
Christian Heimes386cd1e2008-01-15 02:01:20 +0000287 return NULL;
Christian Heimesa34706f2008-01-04 03:06:10 +0000288 }
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000289 if (dval < 0.0) {
290 neg = 1;
291 dval = -dval;
292 }
293 frac = frexp(dval, &expo); /* dval = frac*2**expo; 0.0 <= frac < 1.0 */
294 if (expo <= 0)
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000295 return PyLong_FromLong(0L);
Martin v. Löwis9f2e3462007-07-21 17:22:18 +0000296 ndig = (expo-1) / PyLong_SHIFT + 1; /* Number of 'digits' in result */
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000297 v = _PyLong_New(ndig);
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000298 if (v == NULL)
299 return NULL;
Martin v. Löwis9f2e3462007-07-21 17:22:18 +0000300 frac = ldexp(frac, (expo-1) % PyLong_SHIFT + 1);
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000301 for (i = ndig; --i >= 0; ) {
Mark Dickinson5a74bf62009-02-15 11:04:38 +0000302 digit bits = (digit)frac;
303 v->ob_digit[i] = bits;
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000304 frac = frac - (double)bits;
Martin v. Löwis9f2e3462007-07-21 17:22:18 +0000305 frac = ldexp(frac, PyLong_SHIFT);
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000306 }
307 if (neg)
Christian Heimes90aa7642007-12-19 02:45:37 +0000308 Py_SIZE(v) = -(Py_SIZE(v));
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000309 return (PyObject *)v;
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000310}
311
Thomas Wouters89f507f2006-12-13 04:49:30 +0000312/* Checking for overflow in PyLong_AsLong is a PITA since C doesn't define
313 * anything about what happens when a signed integer operation overflows,
314 * and some compilers think they're doing you a favor by being "clever"
315 * then. The bit pattern for the largest postive signed long is
316 * (unsigned long)LONG_MAX, and for the smallest negative signed long
317 * it is abs(LONG_MIN), which we could write -(unsigned long)LONG_MIN.
318 * However, some other compilers warn about applying unary minus to an
319 * unsigned operand. Hence the weird "0-".
320 */
321#define PY_ABS_LONG_MIN (0-(unsigned long)LONG_MIN)
322#define PY_ABS_SSIZE_T_MIN (0-(size_t)PY_SSIZE_T_MIN)
323
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000324/* Get a C long int from a long int object.
325 Returns -1 and sets an error condition if overflow occurs. */
326
327long
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +0000328PyLong_AsLongAndOverflow(PyObject *vv, int *overflow)
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000329{
Guido van Rossumf7531811998-05-26 14:33:37 +0000330 /* This version by Tim Peters */
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000331 register PyLongObject *v;
Guido van Rossumf7531811998-05-26 14:33:37 +0000332 unsigned long x, prev;
Georg Brandl61c31b02007-02-26 14:46:30 +0000333 long res;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000334 Py_ssize_t i;
335 int sign;
Guido van Rossumddefaf32007-01-14 03:31:43 +0000336 int do_decref = 0; /* if nb_int was called */
Guido van Rossumf7531811998-05-26 14:33:37 +0000337
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +0000338 *overflow = 0;
Guido van Rossumddefaf32007-01-14 03:31:43 +0000339 if (vv == NULL) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000340 PyErr_BadInternalCall();
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000341 return -1;
342 }
Guido van Rossumddefaf32007-01-14 03:31:43 +0000343
344 if (!PyLong_Check(vv)) {
345 PyNumberMethods *nb;
Mark Dickinson309aa2d2009-12-21 12:37:06 +0000346 nb = vv->ob_type->tp_as_number;
347 if (nb == NULL || nb->nb_int == NULL) {
348 PyErr_SetString(PyExc_TypeError,
349 "an integer is required");
Guido van Rossumddefaf32007-01-14 03:31:43 +0000350 return -1;
351 }
352 vv = (*nb->nb_int) (vv);
353 if (vv == NULL)
354 return -1;
355 do_decref = 1;
356 if (!PyLong_Check(vv)) {
357 Py_DECREF(vv);
358 PyErr_SetString(PyExc_TypeError,
359 "nb_int should return int object");
360 return -1;
361 }
362 }
363
Georg Brandl61c31b02007-02-26 14:46:30 +0000364 res = -1;
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000365 v = (PyLongObject *)vv;
Christian Heimes90aa7642007-12-19 02:45:37 +0000366 i = Py_SIZE(v);
Guido van Rossumf7531811998-05-26 14:33:37 +0000367
Georg Brandl61c31b02007-02-26 14:46:30 +0000368 switch (i) {
369 case -1:
Mark Dickinson0d4785b2009-02-15 17:27:41 +0000370 res = -(sdigit)v->ob_digit[0];
Georg Brandl61c31b02007-02-26 14:46:30 +0000371 break;
372 case 0:
373 res = 0;
374 break;
375 case 1:
376 res = v->ob_digit[0];
377 break;
378 default:
379 sign = 1;
380 x = 0;
381 if (i < 0) {
382 sign = -1;
383 i = -(i);
384 }
385 while (--i >= 0) {
386 prev = x;
Mark Dickinson24f57852009-09-28 17:54:52 +0000387 x = (x << PyLong_SHIFT) | v->ob_digit[i];
Martin v. Löwis9f2e3462007-07-21 17:22:18 +0000388 if ((x >> PyLong_SHIFT) != prev) {
Mark Dickinson309aa2d2009-12-21 12:37:06 +0000389 *overflow = sign;
Georg Brandl61c31b02007-02-26 14:46:30 +0000390 goto exit;
391 }
392 }
Mark Dickinson309aa2d2009-12-21 12:37:06 +0000393 /* Haven't lost any bits, but casting to long requires extra
394 * care (see comment above).
395 */
Georg Brandl61c31b02007-02-26 14:46:30 +0000396 if (x <= (unsigned long)LONG_MAX) {
397 res = (long)x * sign;
398 }
399 else if (sign < 0 && x == PY_ABS_LONG_MIN) {
400 res = LONG_MIN;
401 }
402 else {
Mark Dickinson309aa2d2009-12-21 12:37:06 +0000403 *overflow = sign;
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +0000404 /* res is already set to -1 */
Mark Dickinson309aa2d2009-12-21 12:37:06 +0000405 }
Georg Brandl61c31b02007-02-26 14:46:30 +0000406 }
407 exit:
Guido van Rossumddefaf32007-01-14 03:31:43 +0000408 if (do_decref) {
409 Py_DECREF(vv);
410 }
Georg Brandl61c31b02007-02-26 14:46:30 +0000411 return res;
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000412}
413
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +0000414long
415PyLong_AsLong(PyObject *obj)
416{
417 int overflow;
418 long result = PyLong_AsLongAndOverflow(obj, &overflow);
419 if (overflow) {
420 /* XXX: could be cute and give a different
421 message for overflow == -1 */
422 PyErr_SetString(PyExc_OverflowError,
423 "Python int too large to convert to C long");
424 }
425 return result;
426}
427
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000428/* Get a Py_ssize_t from a long int object.
429 Returns -1 and sets an error condition if overflow occurs. */
430
431Py_ssize_t
Guido van Rossumddefaf32007-01-14 03:31:43 +0000432PyLong_AsSsize_t(PyObject *vv) {
Martin v. Löwis18e16552006-02-15 17:27:45 +0000433 register PyLongObject *v;
434 size_t x, prev;
435 Py_ssize_t i;
436 int sign;
437
Mark Dickinsond59b4162010-03-13 11:34:40 +0000438 if (vv == NULL) {
Martin v. Löwis18e16552006-02-15 17:27:45 +0000439 PyErr_BadInternalCall();
440 return -1;
441 }
Mark Dickinsond59b4162010-03-13 11:34:40 +0000442 if (!PyLong_Check(vv)) {
443 PyErr_SetString(PyExc_TypeError, "an integer is required");
444 return -1;
445 }
446
Martin v. Löwis18e16552006-02-15 17:27:45 +0000447 v = (PyLongObject *)vv;
Christian Heimes90aa7642007-12-19 02:45:37 +0000448 i = Py_SIZE(v);
Guido van Rossumddefaf32007-01-14 03:31:43 +0000449 switch (i) {
Mark Dickinson0d4785b2009-02-15 17:27:41 +0000450 case -1: return -(sdigit)v->ob_digit[0];
Guido van Rossumddefaf32007-01-14 03:31:43 +0000451 case 0: return 0;
452 case 1: return v->ob_digit[0];
453 }
Martin v. Löwis18e16552006-02-15 17:27:45 +0000454 sign = 1;
455 x = 0;
456 if (i < 0) {
457 sign = -1;
458 i = -(i);
459 }
460 while (--i >= 0) {
461 prev = x;
Mark Dickinson24f57852009-09-28 17:54:52 +0000462 x = (x << PyLong_SHIFT) | v->ob_digit[i];
Martin v. Löwis9f2e3462007-07-21 17:22:18 +0000463 if ((x >> PyLong_SHIFT) != prev)
Martin v. Löwis18e16552006-02-15 17:27:45 +0000464 goto overflow;
465 }
Thomas Wouters89f507f2006-12-13 04:49:30 +0000466 /* Haven't lost any bits, but casting to a signed type requires
467 * extra care (see comment above).
Martin v. Löwis18e16552006-02-15 17:27:45 +0000468 */
Thomas Wouters89f507f2006-12-13 04:49:30 +0000469 if (x <= (size_t)PY_SSIZE_T_MAX) {
470 return (Py_ssize_t)x * sign;
471 }
472 else if (sign < 0 && x == PY_ABS_SSIZE_T_MIN) {
473 return PY_SSIZE_T_MIN;
474 }
475 /* else overflow */
Martin v. Löwis18e16552006-02-15 17:27:45 +0000476
477 overflow:
478 PyErr_SetString(PyExc_OverflowError,
Guido van Rossum523d4f92007-01-15 00:31:49 +0000479 "Python int too large to convert to C ssize_t");
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000480 return -1;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000481}
482
Guido van Rossumd8c80482002-08-13 00:24:58 +0000483/* Get a C unsigned long int from a long int object.
Guido van Rossum53756b11997-01-03 17:14:46 +0000484 Returns -1 and sets an error condition if overflow occurs. */
485
486unsigned long
Tim Peters9f688bf2000-07-07 15:53:28 +0000487PyLong_AsUnsignedLong(PyObject *vv)
Guido van Rossum53756b11997-01-03 17:14:46 +0000488{
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000489 register PyLongObject *v;
Guido van Rossum53756b11997-01-03 17:14:46 +0000490 unsigned long x, prev;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000491 Py_ssize_t i;
Tim Peters5af4e6c2002-08-12 02:31:19 +0000492
Mark Dickinsond59b4162010-03-13 11:34:40 +0000493 if (vv == NULL) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000494 PyErr_BadInternalCall();
Mark Dickinsond59b4162010-03-13 11:34:40 +0000495 return (unsigned long)-1;
Guido van Rossum53756b11997-01-03 17:14:46 +0000496 }
Mark Dickinsond59b4162010-03-13 11:34:40 +0000497 if (!PyLong_Check(vv)) {
498 PyErr_SetString(PyExc_TypeError, "an integer is required");
499 return (unsigned long)-1;
500 }
501
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000502 v = (PyLongObject *)vv;
Christian Heimes90aa7642007-12-19 02:45:37 +0000503 i = Py_SIZE(v);
Guido van Rossum53756b11997-01-03 17:14:46 +0000504 x = 0;
505 if (i < 0) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000506 PyErr_SetString(PyExc_OverflowError,
Guido van Rossumddefaf32007-01-14 03:31:43 +0000507 "can't convert negative value to unsigned int");
Guido van Rossum53756b11997-01-03 17:14:46 +0000508 return (unsigned long) -1;
509 }
Guido van Rossumddefaf32007-01-14 03:31:43 +0000510 switch (i) {
511 case 0: return 0;
512 case 1: return v->ob_digit[0];
513 }
Guido van Rossum53756b11997-01-03 17:14:46 +0000514 while (--i >= 0) {
515 prev = x;
Mark Dickinson24f57852009-09-28 17:54:52 +0000516 x = (x << PyLong_SHIFT) | v->ob_digit[i];
Martin v. Löwis9f2e3462007-07-21 17:22:18 +0000517 if ((x >> PyLong_SHIFT) != prev) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000518 PyErr_SetString(PyExc_OverflowError,
Guido van Rossum523d4f92007-01-15 00:31:49 +0000519 "python int too large to convert to C unsigned long");
Guido van Rossumddefaf32007-01-14 03:31:43 +0000520 return (unsigned long) -1;
521 }
522 }
523 return x;
524}
525
526/* Get a C unsigned long int from a long int object.
527 Returns -1 and sets an error condition if overflow occurs. */
528
529size_t
530PyLong_AsSize_t(PyObject *vv)
531{
532 register PyLongObject *v;
533 size_t x, prev;
534 Py_ssize_t i;
535
Mark Dickinsond59b4162010-03-13 11:34:40 +0000536 if (vv == NULL) {
Guido van Rossumddefaf32007-01-14 03:31:43 +0000537 PyErr_BadInternalCall();
Mark Dickinsond59b4162010-03-13 11:34:40 +0000538 return (size_t) -1;
Guido van Rossumddefaf32007-01-14 03:31:43 +0000539 }
Mark Dickinsond59b4162010-03-13 11:34:40 +0000540 if (!PyLong_Check(vv)) {
541 PyErr_SetString(PyExc_TypeError, "an integer is required");
542 return (size_t)-1;
543 }
544
Guido van Rossumddefaf32007-01-14 03:31:43 +0000545 v = (PyLongObject *)vv;
Christian Heimes90aa7642007-12-19 02:45:37 +0000546 i = Py_SIZE(v);
Guido van Rossumddefaf32007-01-14 03:31:43 +0000547 x = 0;
548 if (i < 0) {
549 PyErr_SetString(PyExc_OverflowError,
550 "can't convert negative value to size_t");
551 return (size_t) -1;
552 }
553 switch (i) {
554 case 0: return 0;
555 case 1: return v->ob_digit[0];
556 }
557 while (--i >= 0) {
558 prev = x;
Mark Dickinson24f57852009-09-28 17:54:52 +0000559 x = (x << PyLong_SHIFT) | v->ob_digit[i];
Martin v. Löwis9f2e3462007-07-21 17:22:18 +0000560 if ((x >> PyLong_SHIFT) != prev) {
Guido van Rossumddefaf32007-01-14 03:31:43 +0000561 PyErr_SetString(PyExc_OverflowError,
Guido van Rossum523d4f92007-01-15 00:31:49 +0000562 "Python int too large to convert to C size_t");
Guido van Rossum53756b11997-01-03 17:14:46 +0000563 return (unsigned long) -1;
564 }
565 }
566 return x;
567}
568
Thomas Hellera4ea6032003-04-17 18:55:45 +0000569/* Get a C unsigned long int from a long int object, ignoring the high bits.
570 Returns -1 and sets an error condition if an error occurs. */
571
Guido van Rossumddefaf32007-01-14 03:31:43 +0000572static unsigned long
573_PyLong_AsUnsignedLongMask(PyObject *vv)
Thomas Hellera4ea6032003-04-17 18:55:45 +0000574{
575 register PyLongObject *v;
576 unsigned long x;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000577 Py_ssize_t i;
578 int sign;
Thomas Hellera4ea6032003-04-17 18:55:45 +0000579
580 if (vv == NULL || !PyLong_Check(vv)) {
581 PyErr_BadInternalCall();
582 return (unsigned long) -1;
583 }
584 v = (PyLongObject *)vv;
Christian Heimes90aa7642007-12-19 02:45:37 +0000585 i = Py_SIZE(v);
Guido van Rossumddefaf32007-01-14 03:31:43 +0000586 switch (i) {
587 case 0: return 0;
588 case 1: return v->ob_digit[0];
589 }
Thomas Hellera4ea6032003-04-17 18:55:45 +0000590 sign = 1;
591 x = 0;
592 if (i < 0) {
593 sign = -1;
594 i = -i;
595 }
596 while (--i >= 0) {
Mark Dickinson24f57852009-09-28 17:54:52 +0000597 x = (x << PyLong_SHIFT) | v->ob_digit[i];
Thomas Hellera4ea6032003-04-17 18:55:45 +0000598 }
599 return x * sign;
600}
601
Guido van Rossumddefaf32007-01-14 03:31:43 +0000602unsigned long
603PyLong_AsUnsignedLongMask(register PyObject *op)
604{
605 PyNumberMethods *nb;
606 PyLongObject *lo;
607 unsigned long val;
608
609 if (op && PyLong_Check(op))
610 return _PyLong_AsUnsignedLongMask(op);
611
612 if (op == NULL || (nb = op->ob_type->tp_as_number) == NULL ||
613 nb->nb_int == NULL) {
614 PyErr_SetString(PyExc_TypeError, "an integer is required");
615 return (unsigned long)-1;
616 }
617
618 lo = (PyLongObject*) (*nb->nb_int) (op);
619 if (lo == NULL)
620 return (unsigned long)-1;
621 if (PyLong_Check(lo)) {
622 val = _PyLong_AsUnsignedLongMask((PyObject *)lo);
623 Py_DECREF(lo);
624 if (PyErr_Occurred())
625 return (unsigned long)-1;
626 return val;
627 }
628 else
629 {
630 Py_DECREF(lo);
631 PyErr_SetString(PyExc_TypeError,
632 "nb_int should return int object");
633 return (unsigned long)-1;
634 }
635}
636
Tim Peters5b8132f2003-01-31 15:52:05 +0000637int
638_PyLong_Sign(PyObject *vv)
639{
640 PyLongObject *v = (PyLongObject *)vv;
Tim Peters5b8132f2003-01-31 15:52:05 +0000641
642 assert(v != NULL);
643 assert(PyLong_Check(v));
Tim Peters5b8132f2003-01-31 15:52:05 +0000644
Christian Heimes90aa7642007-12-19 02:45:37 +0000645 return Py_SIZE(v) == 0 ? 0 : (Py_SIZE(v) < 0 ? -1 : 1);
Tim Peters5b8132f2003-01-31 15:52:05 +0000646}
647
Tim Petersbaefd9e2003-01-28 20:37:45 +0000648size_t
649_PyLong_NumBits(PyObject *vv)
650{
651 PyLongObject *v = (PyLongObject *)vv;
Tim Peters5b8132f2003-01-31 15:52:05 +0000652 size_t result = 0;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000653 Py_ssize_t ndigits;
Tim Petersbaefd9e2003-01-28 20:37:45 +0000654
655 assert(v != NULL);
656 assert(PyLong_Check(v));
Christian Heimes90aa7642007-12-19 02:45:37 +0000657 ndigits = ABS(Py_SIZE(v));
Tim Petersbaefd9e2003-01-28 20:37:45 +0000658 assert(ndigits == 0 || v->ob_digit[ndigits - 1] != 0);
659 if (ndigits > 0) {
Tim Petersbaefd9e2003-01-28 20:37:45 +0000660 digit msd = v->ob_digit[ndigits - 1];
661
Martin v. Löwis9f2e3462007-07-21 17:22:18 +0000662 result = (ndigits - 1) * PyLong_SHIFT;
663 if (result / PyLong_SHIFT != (size_t)(ndigits - 1))
Tim Petersbaefd9e2003-01-28 20:37:45 +0000664 goto Overflow;
665 do {
666 ++result;
667 if (result == 0)
668 goto Overflow;
669 msd >>= 1;
670 } while (msd);
671 }
672 return result;
673
674Overflow:
Guido van Rossumddefaf32007-01-14 03:31:43 +0000675 PyErr_SetString(PyExc_OverflowError, "int has too many bits "
Tim Petersbaefd9e2003-01-28 20:37:45 +0000676 "to express in a platform size_t");
677 return (size_t)-1;
678}
679
Tim Peters2a9b3672001-06-11 21:23:58 +0000680PyObject *
681_PyLong_FromByteArray(const unsigned char* bytes, size_t n,
682 int little_endian, int is_signed)
683{
684 const unsigned char* pstartbyte;/* LSB of bytes */
685 int incr; /* direction to move pstartbyte */
686 const unsigned char* pendbyte; /* MSB of bytes */
687 size_t numsignificantbytes; /* number of bytes that matter */
Mark Dickinson5a74bf62009-02-15 11:04:38 +0000688 Py_ssize_t ndigits; /* number of Python long digits */
Tim Peters2a9b3672001-06-11 21:23:58 +0000689 PyLongObject* v; /* result */
Mark Dickinson5a74bf62009-02-15 11:04:38 +0000690 Py_ssize_t idigit = 0; /* next free index in v->ob_digit */
Tim Peters2a9b3672001-06-11 21:23:58 +0000691
692 if (n == 0)
693 return PyLong_FromLong(0L);
694
695 if (little_endian) {
696 pstartbyte = bytes;
697 pendbyte = bytes + n - 1;
698 incr = 1;
699 }
700 else {
701 pstartbyte = bytes + n - 1;
702 pendbyte = bytes;
703 incr = -1;
704 }
705
706 if (is_signed)
707 is_signed = *pendbyte >= 0x80;
708
709 /* Compute numsignificantbytes. This consists of finding the most
710 significant byte. Leading 0 bytes are insignficant if the number
711 is positive, and leading 0xff bytes if negative. */
712 {
713 size_t i;
714 const unsigned char* p = pendbyte;
715 const int pincr = -incr; /* search MSB to LSB */
716 const unsigned char insignficant = is_signed ? 0xff : 0x00;
717
718 for (i = 0; i < n; ++i, p += pincr) {
719 if (*p != insignficant)
720 break;
721 }
722 numsignificantbytes = n - i;
723 /* 2's-comp is a bit tricky here, e.g. 0xff00 == -0x0100, so
724 actually has 2 significant bytes. OTOH, 0xff0001 ==
725 -0x00ffff, so we wouldn't *need* to bump it there; but we
726 do for 0xffff = -0x0001. To be safe without bothering to
727 check every case, bump it regardless. */
728 if (is_signed && numsignificantbytes < n)
729 ++numsignificantbytes;
730 }
731
732 /* How many Python long digits do we need? We have
Mark Dickinson5a74bf62009-02-15 11:04:38 +0000733 8*numsignificantbytes bits, and each Python long digit has
734 PyLong_SHIFT bits, so it's the ceiling of the quotient. */
735 /* catch overflow before it happens */
736 if (numsignificantbytes > (PY_SSIZE_T_MAX - PyLong_SHIFT) / 8) {
737 PyErr_SetString(PyExc_OverflowError,
738 "byte array too long to convert to int");
739 return NULL;
740 }
Martin v. Löwis9f2e3462007-07-21 17:22:18 +0000741 ndigits = (numsignificantbytes * 8 + PyLong_SHIFT - 1) / PyLong_SHIFT;
Mark Dickinson5a74bf62009-02-15 11:04:38 +0000742 v = _PyLong_New(ndigits);
Tim Peters2a9b3672001-06-11 21:23:58 +0000743 if (v == NULL)
744 return NULL;
745
746 /* Copy the bits over. The tricky parts are computing 2's-comp on
747 the fly for signed numbers, and dealing with the mismatch between
748 8-bit bytes and (probably) 15-bit Python digits.*/
749 {
750 size_t i;
Tim Petersf251d062001-06-13 21:09:15 +0000751 twodigits carry = 1; /* for 2's-comp calculation */
Tim Peters2a9b3672001-06-11 21:23:58 +0000752 twodigits accum = 0; /* sliding register */
753 unsigned int accumbits = 0; /* number of bits in accum */
754 const unsigned char* p = pstartbyte;
755
756 for (i = 0; i < numsignificantbytes; ++i, p += incr) {
Tim Peters8bc84b42001-06-12 19:17:03 +0000757 twodigits thisbyte = *p;
Tim Peters2a9b3672001-06-11 21:23:58 +0000758 /* Compute correction for 2's comp, if needed. */
759 if (is_signed) {
760 thisbyte = (0xff ^ thisbyte) + carry;
761 carry = thisbyte >> 8;
762 thisbyte &= 0xff;
763 }
764 /* Because we're going LSB to MSB, thisbyte is
765 more significant than what's already in accum,
766 so needs to be prepended to accum. */
Mark Dickinson17e55872009-01-24 15:56:57 +0000767 accum |= (twodigits)thisbyte << accumbits;
Tim Peters2a9b3672001-06-11 21:23:58 +0000768 accumbits += 8;
Martin v. Löwis9f2e3462007-07-21 17:22:18 +0000769 if (accumbits >= PyLong_SHIFT) {
Tim Peters2a9b3672001-06-11 21:23:58 +0000770 /* There's enough to fill a Python digit. */
Mark Dickinson5a74bf62009-02-15 11:04:38 +0000771 assert(idigit < ndigits);
772 v->ob_digit[idigit] = (digit)(accum &
773 PyLong_MASK);
Tim Peters2a9b3672001-06-11 21:23:58 +0000774 ++idigit;
Martin v. Löwis9f2e3462007-07-21 17:22:18 +0000775 accum >>= PyLong_SHIFT;
776 accumbits -= PyLong_SHIFT;
777 assert(accumbits < PyLong_SHIFT);
Tim Peters2a9b3672001-06-11 21:23:58 +0000778 }
779 }
Martin v. Löwis9f2e3462007-07-21 17:22:18 +0000780 assert(accumbits < PyLong_SHIFT);
Tim Peters2a9b3672001-06-11 21:23:58 +0000781 if (accumbits) {
Mark Dickinson5a74bf62009-02-15 11:04:38 +0000782 assert(idigit < ndigits);
Tim Peters2a9b3672001-06-11 21:23:58 +0000783 v->ob_digit[idigit] = (digit)accum;
784 ++idigit;
785 }
786 }
787
Christian Heimes90aa7642007-12-19 02:45:37 +0000788 Py_SIZE(v) = is_signed ? -idigit : idigit;
Tim Peters2a9b3672001-06-11 21:23:58 +0000789 return (PyObject *)long_normalize(v);
790}
791
792int
793_PyLong_AsByteArray(PyLongObject* v,
794 unsigned char* bytes, size_t n,
795 int little_endian, int is_signed)
796{
Mark Dickinson17e55872009-01-24 15:56:57 +0000797 Py_ssize_t i; /* index into v->ob_digit */
Martin v. Löwis18e16552006-02-15 17:27:45 +0000798 Py_ssize_t ndigits; /* |v->ob_size| */
Tim Peters2a9b3672001-06-11 21:23:58 +0000799 twodigits accum; /* sliding register */
800 unsigned int accumbits; /* # bits in accum */
801 int do_twos_comp; /* store 2's-comp? is_signed and v < 0 */
Mark Dickinson1e2d8702009-01-25 22:25:06 +0000802 digit carry; /* for computing 2's-comp */
Tim Peters2a9b3672001-06-11 21:23:58 +0000803 size_t j; /* # bytes filled */
804 unsigned char* p; /* pointer to next byte in bytes */
805 int pincr; /* direction to move p */
806
807 assert(v != NULL && PyLong_Check(v));
808
Christian Heimes90aa7642007-12-19 02:45:37 +0000809 if (Py_SIZE(v) < 0) {
810 ndigits = -(Py_SIZE(v));
Tim Peters2a9b3672001-06-11 21:23:58 +0000811 if (!is_signed) {
Mark Dickinson21776072009-02-10 16:13:25 +0000812 PyErr_SetString(PyExc_OverflowError,
Guido van Rossumddefaf32007-01-14 03:31:43 +0000813 "can't convert negative int to unsigned");
Tim Peters2a9b3672001-06-11 21:23:58 +0000814 return -1;
815 }
816 do_twos_comp = 1;
817 }
818 else {
Christian Heimes90aa7642007-12-19 02:45:37 +0000819 ndigits = Py_SIZE(v);
Tim Peters2a9b3672001-06-11 21:23:58 +0000820 do_twos_comp = 0;
821 }
822
823 if (little_endian) {
824 p = bytes;
825 pincr = 1;
826 }
827 else {
828 p = bytes + n - 1;
829 pincr = -1;
830 }
831
Tim Peters898cf852001-06-13 20:50:08 +0000832 /* Copy over all the Python digits.
833 It's crucial that every Python digit except for the MSD contribute
Martin v. Löwis9f2e3462007-07-21 17:22:18 +0000834 exactly PyLong_SHIFT bits to the total, so first assert that the long is
Tim Peters898cf852001-06-13 20:50:08 +0000835 normalized. */
836 assert(ndigits == 0 || v->ob_digit[ndigits - 1] != 0);
Tim Peters2a9b3672001-06-11 21:23:58 +0000837 j = 0;
838 accum = 0;
839 accumbits = 0;
840 carry = do_twos_comp ? 1 : 0;
841 for (i = 0; i < ndigits; ++i) {
Mark Dickinson17e55872009-01-24 15:56:57 +0000842 digit thisdigit = v->ob_digit[i];
Tim Peters2a9b3672001-06-11 21:23:58 +0000843 if (do_twos_comp) {
Martin v. Löwis9f2e3462007-07-21 17:22:18 +0000844 thisdigit = (thisdigit ^ PyLong_MASK) + carry;
845 carry = thisdigit >> PyLong_SHIFT;
846 thisdigit &= PyLong_MASK;
Tim Peters2a9b3672001-06-11 21:23:58 +0000847 }
Tim Peters8bc84b42001-06-12 19:17:03 +0000848 /* Because we're going LSB to MSB, thisdigit is more
849 significant than what's already in accum, so needs to be
850 prepended to accum. */
Mark Dickinson17e55872009-01-24 15:56:57 +0000851 accum |= (twodigits)thisdigit << accumbits;
Tim Peters8bc84b42001-06-12 19:17:03 +0000852
Tim Petersede05092001-06-14 08:53:38 +0000853 /* The most-significant digit may be (probably is) at least
854 partly empty. */
Tim Peters8bc84b42001-06-12 19:17:03 +0000855 if (i == ndigits - 1) {
Tim Petersede05092001-06-14 08:53:38 +0000856 /* Count # of sign bits -- they needn't be stored,
857 * although for signed conversion we need later to
Mark Dickinson17e55872009-01-24 15:56:57 +0000858 * make sure at least one sign bit gets stored. */
859 digit s = do_twos_comp ? thisdigit ^ PyLong_MASK :
860 thisdigit;
861 while (s != 0) {
862 s >>= 1;
863 accumbits++;
Tim Peters7a3bfc32001-06-12 01:22:22 +0000864 }
Tim Peters7a3bfc32001-06-12 01:22:22 +0000865 }
Mark Dickinson17e55872009-01-24 15:56:57 +0000866 else
867 accumbits += PyLong_SHIFT;
Tim Peters8bc84b42001-06-12 19:17:03 +0000868
Tim Peters2a9b3672001-06-11 21:23:58 +0000869 /* Store as many bytes as possible. */
Tim Peters7a3bfc32001-06-12 01:22:22 +0000870 while (accumbits >= 8) {
Tim Peters2a9b3672001-06-11 21:23:58 +0000871 if (j >= n)
872 goto Overflow;
873 ++j;
874 *p = (unsigned char)(accum & 0xff);
875 p += pincr;
876 accumbits -= 8;
877 accum >>= 8;
Tim Peters7a3bfc32001-06-12 01:22:22 +0000878 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000879 }
880
881 /* Store the straggler (if any). */
882 assert(accumbits < 8);
883 assert(carry == 0); /* else do_twos_comp and *every* digit was 0 */
Tim Peters7a3bfc32001-06-12 01:22:22 +0000884 if (accumbits > 0) {
Tim Peters2a9b3672001-06-11 21:23:58 +0000885 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 }
Tim Peters05607ad2001-06-13 21:01:27 +0000897 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. */
Tim Peters2a9b3672001-06-11 21:23:58 +0000902 unsigned char msb = *(p - pincr);
Tim Peters05607ad2001-06-13 21:01:27 +0000903 int sign_bit_set = msb >= 0x80;
904 assert(accumbits == 0);
905 if (sign_bit_set == do_twos_comp)
906 return 0;
907 else
Tim Peters2a9b3672001-06-11 21:23:58 +0000908 goto Overflow;
909 }
Tim Peters05607ad2001-06-13 21:01:27 +0000910
911 /* 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 }
917
Tim Peters2a9b3672001-06-11 21:23:58 +0000918 return 0;
919
920Overflow:
Guido van Rossumddefaf32007-01-14 03:31:43 +0000921 PyErr_SetString(PyExc_OverflowError, "int too big to convert");
Tim Peters2a9b3672001-06-11 21:23:58 +0000922 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
Guido van Rossumddefaf32007-01-14 03:31:43 +0000937 /* special-case null pointer */
938 if (!p)
Christian Heimes217cfd12007-12-02 14:31:20 +0000939 return PyLong_FromLong(0);
Guido van Rossumddefaf32007-01-14 03:31:43 +0000940 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{
949 /* 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
Guido van Rossum78694d91998-09-18 14:14:13 +0000954 long x;
955
Guido van Rossumddefaf32007-01-14 03:31:43 +0000956 if (PyLong_Check(vv) && _PyLong_Sign(vv) < 0)
Guido van Rossum78694d91998-09-18 14:14:13 +0000957 x = PyLong_AsLong(vv);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000958 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
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000968 PY_LONG_LONG x;
Guido van Rossum78694d91998-09-18 14:14:13 +0000969
Guido van Rossumddefaf32007-01-14 03:31:43 +0000970 if (PyLong_Check(vv) && _PyLong_Sign(vv) < 0)
Guido van Rossum78694d91998-09-18 14:14:13 +0000971 x = PyLong_AsLongLong(vv);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000972 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
977 if (x == -1 && PyErr_Occurred())
978 return NULL;
979 return (void *)x;
980}
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 Dickinson93f562c2010-01-30 10:30:15 +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{
Thomas Wouters477c8d52006-05-27 19:21:47 +0000996 PyLongObject *v;
Christian Heimesdae2a892008-04-19 00:55:37 +0000997 unsigned PY_LONG_LONG abs_ival;
Thomas Wouters477c8d52006-05-27 19:21:47 +0000998 unsigned PY_LONG_LONG t; /* unsigned so >> doesn't propagate sign bit */
999 int ndigits = 0;
1000 int negative = 0;
1001
Guido van Rossumddefaf32007-01-14 03:31:43 +00001002 CHECK_SMALL_INT(ival);
Thomas Wouters477c8d52006-05-27 19:21:47 +00001003 if (ival < 0) {
Christian Heimesdae2a892008-04-19 00:55:37 +00001004 /* avoid signed overflow on negation; see comments
1005 in PyLong_FromLong above. */
1006 abs_ival = (unsigned PY_LONG_LONG)(-1-ival) + 1;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001007 negative = 1;
1008 }
Christian Heimesdae2a892008-04-19 00:55:37 +00001009 else {
1010 abs_ival = (unsigned PY_LONG_LONG)ival;
1011 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00001012
1013 /* 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. */
Christian Heimesdae2a892008-04-19 00:55:37 +00001017 t = abs_ival;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001018 while (t) {
1019 ++ndigits;
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00001020 t >>= PyLong_SHIFT;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001021 }
1022 v = _PyLong_New(ndigits);
1023 if (v != NULL) {
1024 digit *p = v->ob_digit;
Christian Heimes90aa7642007-12-19 02:45:37 +00001025 Py_SIZE(v) = negative ? -ndigits : ndigits;
Christian Heimesdae2a892008-04-19 00:55:37 +00001026 t = abs_ival;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001027 while (t) {
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00001028 *p++ = (digit)(t & PyLong_MASK);
1029 t >>= PyLong_SHIFT;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001030 }
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{
Thomas Wouters477c8d52006-05-27 19:21:47 +00001040 PyLongObject *v;
1041 unsigned PY_LONG_LONG t;
1042 int ndigits = 0;
1043
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00001044 if (ival < PyLong_BASE)
Mark Dickinson50b2b6e2008-12-05 17:14:29 +00001045 return PyLong_FromLong((long)ival);
Thomas Wouters477c8d52006-05-27 19:21:47 +00001046 /* Count the number of Python digits. */
1047 t = (unsigned PY_LONG_LONG)ival;
1048 while (t) {
1049 ++ndigits;
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00001050 t >>= PyLong_SHIFT;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001051 }
1052 v = _PyLong_New(ndigits);
1053 if (v != NULL) {
1054 digit *p = v->ob_digit;
Christian Heimes90aa7642007-12-19 02:45:37 +00001055 Py_SIZE(v) = ndigits;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001056 while (ival) {
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00001057 *p++ = (digit)(ival & PyLong_MASK);
1058 ival >>= PyLong_SHIFT;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001059 }
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{
Mark Dickinson7ab6be22008-04-15 21:42:42 +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;
1074
1075 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 }
1084
1085 /* 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{
Mark Dickinson7ab6be22008-04-15 21:42:42 +00001109 PyLongObject *v;
1110 size_t t;
1111 int ndigits = 0;
1112
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00001113 if (ival < PyLong_BASE)
Stefan Krah0091e5e2010-04-07 08:49:55 +00001114 return PyLong_FromLong((long)ival);
Mark Dickinson7ab6be22008-04-15 21:42:42 +00001115 /* 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{
Guido van Rossumddefaf32007-01-14 03:31:43 +00001139 PyLongObject *v;
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001140 PY_LONG_LONG bytes;
Tim Petersd1a7da62001-06-13 00:35:57 +00001141 int one = 1;
1142 int res;
1143
Tim Petersd38b1c72001-09-30 05:09:37 +00001144 if (vv == NULL) {
1145 PyErr_BadInternalCall();
1146 return -1;
1147 }
1148 if (!PyLong_Check(vv)) {
Martin v. Löwis6ce7ed22005-03-03 12:26:35 +00001149 PyNumberMethods *nb;
1150 PyObject *io;
Martin v. Löwis6ce7ed22005-03-03 12:26:35 +00001151 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;
Martin v. Löwis6ce7ed22005-03-03 12:26:35 +00001159 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");
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001166 return -1;
1167 }
1168
Guido van Rossumddefaf32007-01-14 03:31:43 +00001169 v = (PyLongObject*)vv;
Christian Heimes90aa7642007-12-19 02:45:37 +00001170 switch(Py_SIZE(v)) {
Mark Dickinson0d4785b2009-02-15 17:27:41 +00001171 case -1: return -(sdigit)v->ob_digit[0];
Guido van Rossumddefaf32007-01-14 03:31:43 +00001172 case 0: return 0;
1173 case 1: return v->ob_digit[0];
1174 }
Tim Petersd1a7da62001-06-13 00:35:57 +00001175 res = _PyLong_AsByteArray(
1176 (PyLongObject *)vv, (unsigned char *)&bytes,
1177 SIZEOF_LONG_LONG, IS_LITTLE_ENDIAN, 1);
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001178
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001179 /* Plan 9 can't handle PY_LONG_LONG in ? : expressions */
Martin v. Löwisc8bb9eb2002-03-09 12:02:59 +00001180 if (res < 0)
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001181 return (PY_LONG_LONG)-1;
Martin v. Löwisc8bb9eb2002-03-09 12:02:59 +00001182 else
1183 return bytes;
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001184}
1185
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001186/* Get a C unsigned PY_LONG_LONG int from a long int object.
Tim Petersd1a7da62001-06-13 00:35:57 +00001187 Return -1 and set an error if overflow occurs. */
1188
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001189unsigned PY_LONG_LONG
Tim Peters9f688bf2000-07-07 15:53:28 +00001190PyLong_AsUnsignedLongLong(PyObject *vv)
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001191{
Guido van Rossumddefaf32007-01-14 03:31:43 +00001192 PyLongObject *v;
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001193 unsigned PY_LONG_LONG bytes;
Tim Petersd1a7da62001-06-13 00:35:57 +00001194 int one = 1;
1195 int res;
1196
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001197 if (vv == NULL || !PyLong_Check(vv)) {
1198 PyErr_BadInternalCall();
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001199 return (unsigned PY_LONG_LONG)-1;
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001200 }
1201
Guido van Rossumddefaf32007-01-14 03:31:43 +00001202 v = (PyLongObject*)vv;
Christian Heimes90aa7642007-12-19 02:45:37 +00001203 switch(Py_SIZE(v)) {
Guido van Rossumddefaf32007-01-14 03:31:43 +00001204 case 0: return 0;
1205 case 1: return v->ob_digit[0];
1206 }
1207
Tim Petersd1a7da62001-06-13 00:35:57 +00001208 res = _PyLong_AsByteArray(
1209 (PyLongObject *)vv, (unsigned char *)&bytes,
1210 SIZEOF_LONG_LONG, IS_LITTLE_ENDIAN, 0);
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001211
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001212 /* Plan 9 can't handle PY_LONG_LONG in ? : expressions */
Martin v. Löwisc8bb9eb2002-03-09 12:02:59 +00001213 if (res < 0)
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001214 return (unsigned PY_LONG_LONG)res;
Martin v. Löwisc8bb9eb2002-03-09 12:02:59 +00001215 else
1216 return bytes;
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001217}
Tim Petersd1a7da62001-06-13 00:35:57 +00001218
Thomas Hellera4ea6032003-04-17 18:55:45 +00001219/* Get a C unsigned long int from a long int object, ignoring the high bits.
1220 Returns -1 and sets an error condition if an error occurs. */
1221
Guido van Rossumddefaf32007-01-14 03:31:43 +00001222static unsigned PY_LONG_LONG
1223_PyLong_AsUnsignedLongLongMask(PyObject *vv)
Thomas Hellera4ea6032003-04-17 18:55:45 +00001224{
1225 register PyLongObject *v;
1226 unsigned PY_LONG_LONG x;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001227 Py_ssize_t i;
1228 int sign;
Thomas Hellera4ea6032003-04-17 18:55:45 +00001229
1230 if (vv == NULL || !PyLong_Check(vv)) {
1231 PyErr_BadInternalCall();
1232 return (unsigned long) -1;
1233 }
1234 v = (PyLongObject *)vv;
Christian Heimes90aa7642007-12-19 02:45:37 +00001235 switch(Py_SIZE(v)) {
Guido van Rossumddefaf32007-01-14 03:31:43 +00001236 case 0: return 0;
1237 case 1: return v->ob_digit[0];
1238 }
Christian Heimes90aa7642007-12-19 02:45:37 +00001239 i = Py_SIZE(v);
Thomas Hellera4ea6032003-04-17 18:55:45 +00001240 sign = 1;
1241 x = 0;
1242 if (i < 0) {
1243 sign = -1;
1244 i = -i;
1245 }
1246 while (--i >= 0) {
Mark Dickinson24f57852009-09-28 17:54:52 +00001247 x = (x << PyLong_SHIFT) | v->ob_digit[i];
Thomas Hellera4ea6032003-04-17 18:55:45 +00001248 }
1249 return x * sign;
1250}
Guido van Rossumddefaf32007-01-14 03:31:43 +00001251
1252unsigned PY_LONG_LONG
1253PyLong_AsUnsignedLongLongMask(register PyObject *op)
1254{
1255 PyNumberMethods *nb;
1256 PyLongObject *lo;
1257 unsigned PY_LONG_LONG val;
1258
1259 if (op && PyLong_Check(op))
1260 return _PyLong_AsUnsignedLongLongMask(op);
1261
1262 if (op == NULL || (nb = op->ob_type->tp_as_number) == NULL ||
1263 nb->nb_int == NULL) {
1264 PyErr_SetString(PyExc_TypeError, "an integer is required");
1265 return (unsigned PY_LONG_LONG)-1;
1266 }
1267
1268 lo = (PyLongObject*) (*nb->nb_int) (op);
1269 if (lo == NULL)
1270 return (unsigned PY_LONG_LONG)-1;
1271 if (PyLong_Check(lo)) {
1272 val = _PyLong_AsUnsignedLongLongMask((PyObject *)lo);
1273 Py_DECREF(lo);
1274 if (PyErr_Occurred())
1275 return (unsigned PY_LONG_LONG)-1;
1276 return val;
1277 }
1278 else
1279 {
1280 Py_DECREF(lo);
1281 PyErr_SetString(PyExc_TypeError,
1282 "nb_int should return int object");
1283 return (unsigned PY_LONG_LONG)-1;
1284 }
1285}
Tim Petersd1a7da62001-06-13 00:35:57 +00001286#undef IS_LITTLE_ENDIAN
1287
Mark Dickinson93f562c2010-01-30 10:30:15 +00001288/* Get a C long long int from a Python long or Python int object.
1289 On overflow, returns -1 and sets *overflow to 1 or -1 depending
1290 on the sign of the result. Otherwise *overflow is 0.
1291
1292 For other errors (e.g., type error), returns -1 and sets an error
1293 condition.
1294*/
1295
1296PY_LONG_LONG
1297PyLong_AsLongLongAndOverflow(PyObject *vv, int *overflow)
1298{
1299 /* This version by Tim Peters */
1300 register PyLongObject *v;
1301 unsigned PY_LONG_LONG x, prev;
1302 PY_LONG_LONG res;
1303 Py_ssize_t i;
1304 int sign;
1305 int do_decref = 0; /* if nb_int was called */
1306
1307 *overflow = 0;
1308 if (vv == NULL) {
1309 PyErr_BadInternalCall();
1310 return -1;
1311 }
1312
1313 if (!PyLong_Check(vv)) {
1314 PyNumberMethods *nb;
1315 nb = vv->ob_type->tp_as_number;
1316 if (nb == NULL || nb->nb_int == NULL) {
1317 PyErr_SetString(PyExc_TypeError,
1318 "an integer is required");
1319 return -1;
1320 }
1321 vv = (*nb->nb_int) (vv);
1322 if (vv == NULL)
1323 return -1;
1324 do_decref = 1;
1325 if (!PyLong_Check(vv)) {
1326 Py_DECREF(vv);
1327 PyErr_SetString(PyExc_TypeError,
1328 "nb_int should return int object");
1329 return -1;
1330 }
1331 }
1332
1333 res = -1;
1334 v = (PyLongObject *)vv;
1335 i = Py_SIZE(v);
1336
1337 switch (i) {
1338 case -1:
1339 res = -(sdigit)v->ob_digit[0];
1340 break;
1341 case 0:
1342 res = 0;
1343 break;
1344 case 1:
1345 res = v->ob_digit[0];
1346 break;
1347 default:
1348 sign = 1;
1349 x = 0;
1350 if (i < 0) {
1351 sign = -1;
1352 i = -(i);
1353 }
1354 while (--i >= 0) {
1355 prev = x;
1356 x = (x << PyLong_SHIFT) + v->ob_digit[i];
1357 if ((x >> PyLong_SHIFT) != prev) {
1358 *overflow = sign;
1359 goto exit;
1360 }
1361 }
1362 /* Haven't lost any bits, but casting to long requires extra
1363 * care (see comment above).
1364 */
1365 if (x <= (unsigned PY_LONG_LONG)PY_LLONG_MAX) {
1366 res = (PY_LONG_LONG)x * sign;
1367 }
1368 else if (sign < 0 && x == PY_ABS_LLONG_MIN) {
1369 res = PY_LLONG_MIN;
1370 }
1371 else {
1372 *overflow = sign;
1373 /* res is already set to -1 */
1374 }
1375 }
1376 exit:
1377 if (do_decref) {
1378 Py_DECREF(vv);
1379 }
1380 return res;
1381}
1382
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001383#endif /* HAVE_LONG_LONG */
1384
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00001385#define CHECK_BINOP(v,w) \
1386 if (!PyLong_Check(v) || !PyLong_Check(w)) { \
Neil Schemenauerba872e22001-01-04 01:46:03 +00001387 Py_INCREF(Py_NotImplemented); \
1388 return Py_NotImplemented; \
1389 }
1390
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001391/* bits_in_digit(d) returns the unique integer k such that 2**(k-1) <= d <
1392 2**k if d is nonzero, else 0. */
1393
1394static const unsigned char BitLengthTable[32] = {
1395 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
1396 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
1397};
1398
1399static int
1400bits_in_digit(digit d)
1401{
1402 int d_bits = 0;
1403 while (d >= 32) {
1404 d_bits += 6;
1405 d >>= 6;
1406 }
1407 d_bits += (int)BitLengthTable[d];
1408 return d_bits;
1409}
1410
Tim Peters877a2122002-08-12 05:09:36 +00001411/* x[0:m] and y[0:n] are digit vectors, LSD first, m >= n required. x[0:n]
1412 * is modified in place, by adding y to it. Carries are propagated as far as
1413 * x[m-1], and the remaining carry (0 or 1) is returned.
1414 */
1415static digit
Martin v. Löwis18e16552006-02-15 17:27:45 +00001416v_iadd(digit *x, Py_ssize_t m, digit *y, Py_ssize_t n)
Tim Peters877a2122002-08-12 05:09:36 +00001417{
Mark Dickinson17e55872009-01-24 15:56:57 +00001418 Py_ssize_t i;
Tim Peters877a2122002-08-12 05:09:36 +00001419 digit carry = 0;
1420
1421 assert(m >= n);
1422 for (i = 0; i < n; ++i) {
1423 carry += x[i] + y[i];
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00001424 x[i] = carry & PyLong_MASK;
1425 carry >>= PyLong_SHIFT;
Tim Peters877a2122002-08-12 05:09:36 +00001426 assert((carry & 1) == carry);
1427 }
1428 for (; carry && i < m; ++i) {
1429 carry += x[i];
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00001430 x[i] = carry & PyLong_MASK;
1431 carry >>= PyLong_SHIFT;
Tim Peters877a2122002-08-12 05:09:36 +00001432 assert((carry & 1) == carry);
1433 }
1434 return carry;
1435}
1436
1437/* x[0:m] and y[0:n] are digit vectors, LSD first, m >= n required. x[0:n]
1438 * is modified in place, by subtracting y from it. Borrows are propagated as
1439 * far as x[m-1], and the remaining borrow (0 or 1) is returned.
1440 */
1441static digit
Martin v. Löwis18e16552006-02-15 17:27:45 +00001442v_isub(digit *x, Py_ssize_t m, digit *y, Py_ssize_t n)
Tim Peters877a2122002-08-12 05:09:36 +00001443{
Mark Dickinson17e55872009-01-24 15:56:57 +00001444 Py_ssize_t i;
Tim Peters877a2122002-08-12 05:09:36 +00001445 digit borrow = 0;
1446
1447 assert(m >= n);
1448 for (i = 0; i < n; ++i) {
1449 borrow = x[i] - y[i] - borrow;
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00001450 x[i] = borrow & PyLong_MASK;
1451 borrow >>= PyLong_SHIFT;
Tim Peters877a2122002-08-12 05:09:36 +00001452 borrow &= 1; /* keep only 1 sign bit */
1453 }
1454 for (; borrow && i < m; ++i) {
1455 borrow = x[i] - borrow;
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00001456 x[i] = borrow & PyLong_MASK;
1457 borrow >>= PyLong_SHIFT;
Tim Peters877a2122002-08-12 05:09:36 +00001458 borrow &= 1;
1459 }
1460 return borrow;
1461}
Neil Schemenauerba872e22001-01-04 01:46:03 +00001462
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001463/* Shift digit vector a[0:m] d bits left, with 0 <= d < PyLong_SHIFT. Put
1464 * result in z[0:m], and return the d bits shifted out of the top.
1465 */
1466static digit
1467v_lshift(digit *z, digit *a, Py_ssize_t m, int d)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001468{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001469 Py_ssize_t i;
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001470 digit carry = 0;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001471
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001472 assert(0 <= d && d < PyLong_SHIFT);
1473 for (i=0; i < m; i++) {
1474 twodigits acc = (twodigits)a[i] << d | carry;
1475 z[i] = (digit)acc & PyLong_MASK;
1476 carry = (digit)(acc >> PyLong_SHIFT);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001477 }
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001478 return carry;
1479}
1480
1481/* Shift digit vector a[0:m] d bits right, with 0 <= d < PyLong_SHIFT. Put
1482 * result in z[0:m], and return the d bits shifted out of the bottom.
1483 */
1484static digit
1485v_rshift(digit *z, digit *a, Py_ssize_t m, int d)
1486{
1487 Py_ssize_t i;
1488 digit carry = 0;
1489 digit mask = ((digit)1 << d) - 1U;
1490
1491 assert(0 <= d && d < PyLong_SHIFT);
1492 for (i=m; i-- > 0;) {
1493 twodigits acc = (twodigits)carry << PyLong_SHIFT | a[i];
1494 carry = (digit)acc & mask;
1495 z[i] = (digit)(acc >> d);
1496 }
1497 return carry;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001498}
1499
Tim Peters212e6142001-07-14 12:23:19 +00001500/* Divide long pin, w/ size digits, by non-zero digit n, storing quotient
1501 in pout, and returning the remainder. pin and pout point at the LSD.
1502 It's OK for pin == pout on entry, which saves oodles of mallocs/frees in
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001503 _PyLong_Format, but that should be done with great care since longs are
Tim Peters212e6142001-07-14 12:23:19 +00001504 immutable. */
1505
1506static digit
Martin v. Löwis18e16552006-02-15 17:27:45 +00001507inplace_divrem1(digit *pout, digit *pin, Py_ssize_t size, digit n)
Tim Peters212e6142001-07-14 12:23:19 +00001508{
1509 twodigits rem = 0;
1510
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00001511 assert(n > 0 && n <= PyLong_MASK);
Tim Peters212e6142001-07-14 12:23:19 +00001512 pin += size;
1513 pout += size;
1514 while (--size >= 0) {
1515 digit hi;
Mark Dickinson24f57852009-09-28 17:54:52 +00001516 rem = (rem << PyLong_SHIFT) | *--pin;
Tim Peters212e6142001-07-14 12:23:19 +00001517 *--pout = hi = (digit)(rem / n);
Mark Dickinson17e55872009-01-24 15:56:57 +00001518 rem -= (twodigits)hi * n;
Tim Peters212e6142001-07-14 12:23:19 +00001519 }
1520 return (digit)rem;
1521}
1522
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001523/* Divide a long integer by a digit, returning both the quotient
1524 (as function result) and the remainder (through *prem).
1525 The sign of a is ignored; n should not be zero. */
1526
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001527static PyLongObject *
Tim Peters212e6142001-07-14 12:23:19 +00001528divrem1(PyLongObject *a, digit n, digit *prem)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001529{
Christian Heimes90aa7642007-12-19 02:45:37 +00001530 const Py_ssize_t size = ABS(Py_SIZE(a));
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001531 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001532
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00001533 assert(n > 0 && n <= PyLong_MASK);
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001534 z = _PyLong_New(size);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001535 if (z == NULL)
1536 return NULL;
Tim Peters212e6142001-07-14 12:23:19 +00001537 *prem = inplace_divrem1(z->ob_digit, a->ob_digit, size, n);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001538 return long_normalize(z);
1539}
1540
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001541/* Convert a long integer to a base 10 string. Returns a new non-shared
1542 string. (Return value is non-shared so that callers can modify the
1543 returned value if necessary.) */
1544
1545static PyObject *
1546long_to_decimal_string(PyObject *aa)
1547{
1548 PyLongObject *scratch, *a;
1549 PyObject *str;
1550 Py_ssize_t size, strlen, size_a, i, j;
1551 digit *pout, *pin, rem, tenpow;
1552 Py_UNICODE *p;
1553 int negative;
1554
1555 a = (PyLongObject *)aa;
1556 if (a == NULL || !PyLong_Check(a)) {
1557 PyErr_BadInternalCall();
1558 return NULL;
1559 }
1560 size_a = ABS(Py_SIZE(a));
1561 negative = Py_SIZE(a) < 0;
1562
1563 /* quick and dirty upper bound for the number of digits
1564 required to express a in base _PyLong_DECIMAL_BASE:
1565
1566 #digits = 1 + floor(log2(a) / log2(_PyLong_DECIMAL_BASE))
1567
1568 But log2(a) < size_a * PyLong_SHIFT, and
1569 log2(_PyLong_DECIMAL_BASE) = log2(10) * _PyLong_DECIMAL_SHIFT
1570 > 3 * _PyLong_DECIMAL_SHIFT
1571 */
1572 if (size_a > PY_SSIZE_T_MAX / PyLong_SHIFT) {
1573 PyErr_SetString(PyExc_OverflowError,
1574 "long is too large to format");
1575 return NULL;
1576 }
1577 /* the expression size_a * PyLong_SHIFT is now safe from overflow */
1578 size = 1 + size_a * PyLong_SHIFT / (3 * _PyLong_DECIMAL_SHIFT);
1579 scratch = _PyLong_New(size);
1580 if (scratch == NULL)
1581 return NULL;
1582
1583 /* convert array of base _PyLong_BASE digits in pin to an array of
1584 base _PyLong_DECIMAL_BASE digits in pout, following Knuth (TAOCP,
1585 Volume 2 (3rd edn), section 4.4, Method 1b). */
1586 pin = a->ob_digit;
1587 pout = scratch->ob_digit;
1588 size = 0;
1589 for (i = size_a; --i >= 0; ) {
1590 digit hi = pin[i];
1591 for (j = 0; j < size; j++) {
1592 twodigits z = (twodigits)pout[j] << PyLong_SHIFT | hi;
Mark Dickinson741984d2009-09-21 16:18:27 +00001593 hi = (digit)(z / _PyLong_DECIMAL_BASE);
1594 pout[j] = (digit)(z - (twodigits)hi *
1595 _PyLong_DECIMAL_BASE);
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001596 }
1597 while (hi) {
1598 pout[size++] = hi % _PyLong_DECIMAL_BASE;
1599 hi /= _PyLong_DECIMAL_BASE;
1600 }
1601 /* check for keyboard interrupt */
1602 SIGCHECK({
1603 Py_DECREF(scratch);
1604 return NULL;
1605 })
1606 }
1607 /* pout should have at least one digit, so that the case when a = 0
1608 works correctly */
1609 if (size == 0)
1610 pout[size++] = 0;
1611
1612 /* calculate exact length of output string, and allocate */
1613 strlen = negative + 1 + (size - 1) * _PyLong_DECIMAL_SHIFT;
1614 tenpow = 10;
1615 rem = pout[size-1];
1616 while (rem >= tenpow) {
1617 tenpow *= 10;
1618 strlen++;
1619 }
1620 str = PyUnicode_FromUnicode(NULL, strlen);
1621 if (str == NULL) {
1622 Py_DECREF(scratch);
1623 return NULL;
1624 }
1625
1626 /* fill the string right-to-left */
1627 p = PyUnicode_AS_UNICODE(str) + strlen;
1628 *p = '\0';
1629 /* pout[0] through pout[size-2] contribute exactly
1630 _PyLong_DECIMAL_SHIFT digits each */
1631 for (i=0; i < size - 1; i++) {
1632 rem = pout[i];
1633 for (j = 0; j < _PyLong_DECIMAL_SHIFT; j++) {
1634 *--p = '0' + rem % 10;
1635 rem /= 10;
1636 }
1637 }
1638 /* pout[size-1]: always produce at least one decimal digit */
1639 rem = pout[i];
1640 do {
1641 *--p = '0' + rem % 10;
1642 rem /= 10;
1643 } while (rem != 0);
1644
1645 /* and sign */
1646 if (negative)
1647 *--p = '-';
1648
1649 /* check we've counted correctly */
1650 assert(p == PyUnicode_AS_UNICODE(str));
1651 Py_DECREF(scratch);
1652 return (PyObject *)str;
1653}
1654
Mark Dickinsoncd068122009-09-18 14:53:08 +00001655/* Convert a long int object to a string, using a given conversion base,
1656 which should be one of 2, 8, 10 or 16. Return a string object.
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001657 If base is 2, 8 or 16, add the proper prefix '0b', '0o' or '0x'. */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001658
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001659PyObject *
1660_PyLong_Format(PyObject *aa, int base)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001661{
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001662 register PyLongObject *a = (PyLongObject *)aa;
Walter Dörwald1ab83302007-05-18 17:15:44 +00001663 PyObject *str;
Mark Dickinson659c7b12009-09-13 12:06:08 +00001664 Py_ssize_t i, sz;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001665 Py_ssize_t size_a;
Mark Dickinsoncd068122009-09-18 14:53:08 +00001666 Py_UNICODE *p, sign = '\0';
Mark Dickinson8accd6b2009-09-17 19:39:12 +00001667 int bits;
Guido van Rossume32e0141992-01-19 16:31:05 +00001668
Mark Dickinsoncd068122009-09-18 14:53:08 +00001669 assert(base == 2 || base == 8 || base == 10 || base == 16);
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001670 if (base == 10)
1671 return long_to_decimal_string((PyObject *)a);
1672
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001673 if (a == NULL || !PyLong_Check(a)) {
1674 PyErr_BadInternalCall();
Guido van Rossume32e0141992-01-19 16:31:05 +00001675 return NULL;
1676 }
Christian Heimes90aa7642007-12-19 02:45:37 +00001677 size_a = ABS(Py_SIZE(a));
Tim Peters5af4e6c2002-08-12 02:31:19 +00001678
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001679 /* Compute a rough upper bound for the length of the string */
Mark Dickinsoncd068122009-09-18 14:53:08 +00001680 switch (base) {
1681 case 16:
1682 bits = 4;
1683 break;
1684 case 8:
1685 bits = 3;
1686 break;
1687 case 2:
1688 bits = 1;
1689 break;
1690 default:
1691 assert(0); /* shouldn't ever get here */
1692 bits = 0; /* to silence gcc warning */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001693 }
Mark Dickinsoncd068122009-09-18 14:53:08 +00001694 /* compute length of output string: allow 2 characters for prefix and
1695 1 for possible '-' sign. */
1696 if (size_a > (PY_SSIZE_T_MAX - 3) / PyLong_SHIFT) {
Thomas Wouters89f507f2006-12-13 04:49:30 +00001697 PyErr_SetString(PyExc_OverflowError,
Guido van Rossumddefaf32007-01-14 03:31:43 +00001698 "int is too large to format");
Thomas Wouters89f507f2006-12-13 04:49:30 +00001699 return NULL;
1700 }
Mark Dickinsoncd068122009-09-18 14:53:08 +00001701 /* now size_a * PyLong_SHIFT + 3 <= PY_SSIZE_T_MAX, so the RHS below
1702 is safe from overflow */
1703 sz = 3 + (size_a * PyLong_SHIFT + (bits - 1)) / bits;
Mark Dickinson659c7b12009-09-13 12:06:08 +00001704 assert(sz >= 0);
Walter Dörwald1ab83302007-05-18 17:15:44 +00001705 str = PyUnicode_FromUnicode(NULL, sz);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001706 if (str == NULL)
1707 return NULL;
Walter Dörwald1ab83302007-05-18 17:15:44 +00001708 p = PyUnicode_AS_UNICODE(str) + sz;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001709 *p = '\0';
Mark Dickinson8accd6b2009-09-17 19:39:12 +00001710 if (Py_SIZE(a) < 0)
1711 sign = '-';
Tim Peters5af4e6c2002-08-12 02:31:19 +00001712
Christian Heimes90aa7642007-12-19 02:45:37 +00001713 if (Py_SIZE(a) == 0) {
Guido van Rossumbd3a5271998-08-11 15:04:47 +00001714 *--p = '0';
1715 }
Mark Dickinsoncd068122009-09-18 14:53:08 +00001716 else {
Mark Dickinson8accd6b2009-09-17 19:39:12 +00001717 /* JRH: special case for power-of-2 bases */
1718 twodigits accum = 0;
1719 int accumbits = 0; /* # of bits in accum */
Mark Dickinson8accd6b2009-09-17 19:39:12 +00001720 for (i = 0; i < size_a; ++i) {
1721 accum |= (twodigits)a->ob_digit[i] << accumbits;
1722 accumbits += PyLong_SHIFT;
Mark Dickinsoncd068122009-09-18 14:53:08 +00001723 assert(accumbits >= bits);
Mark Dickinson8accd6b2009-09-17 19:39:12 +00001724 do {
Mark Dickinson1f7e18c2009-09-24 18:31:17 +00001725 Py_UNICODE cdigit;
1726 cdigit = (Py_UNICODE)(accum & (base - 1));
Mark Dickinson8accd6b2009-09-17 19:39:12 +00001727 cdigit += (cdigit < 10) ? '0' : 'a'-10;
1728 assert(p > PyUnicode_AS_UNICODE(str));
1729 *--p = cdigit;
Mark Dickinsoncd068122009-09-18 14:53:08 +00001730 accumbits -= bits;
1731 accum >>= bits;
1732 } while (i < size_a-1 ? accumbits >= bits : accum > 0);
Mark Dickinson8accd6b2009-09-17 19:39:12 +00001733 }
1734 }
Mark Dickinson8accd6b2009-09-17 19:39:12 +00001735
Mark Dickinsoncd068122009-09-18 14:53:08 +00001736 if (base == 16)
Guido van Rossum3d3037d1991-10-24 14:55:57 +00001737 *--p = 'x';
Mark Dickinsoncd068122009-09-18 14:53:08 +00001738 else if (base == 8)
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001739 *--p = 'o';
Mark Dickinsoncd068122009-09-18 14:53:08 +00001740 else /* (base == 2) */
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001741 *--p = 'b';
Mark Dickinsoncd068122009-09-18 14:53:08 +00001742 *--p = '0';
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001743 if (sign)
1744 *--p = sign;
Walter Dörwald1ab83302007-05-18 17:15:44 +00001745 if (p != PyUnicode_AS_UNICODE(str)) {
1746 Py_UNICODE *q = PyUnicode_AS_UNICODE(str);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001747 assert(p > q);
1748 do {
1749 } while ((*q++ = *p++) != '\0');
Guido van Rossumc7ec9c91991-05-28 21:58:16 +00001750 q--;
Mark Dickinson659c7b12009-09-13 12:06:08 +00001751 if (PyUnicode_Resize(&str,(Py_ssize_t) (q -
1752 PyUnicode_AS_UNICODE(str)))) {
Walter Dörwald1ab83302007-05-18 17:15:44 +00001753 Py_DECREF(str);
1754 return NULL;
1755 }
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001756 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001757 return (PyObject *)str;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001758}
1759
Thomas Wouters477c8d52006-05-27 19:21:47 +00001760/* Table of digit values for 8-bit string -> integer conversion.
1761 * '0' maps to 0, ..., '9' maps to 9.
1762 * 'a' and 'A' map to 10, ..., 'z' and 'Z' map to 35.
1763 * All other indices map to 37.
1764 * Note that when converting a base B string, a char c is a legitimate
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00001765 * base B digit iff _PyLong_DigitValue[Py_CHARPyLong_MASK(c)] < B.
Thomas Wouters477c8d52006-05-27 19:21:47 +00001766 */
Raymond Hettinger35631532009-01-09 03:58:09 +00001767unsigned char _PyLong_DigitValue[256] = {
Thomas Wouters477c8d52006-05-27 19:21:47 +00001768 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1769 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1770 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1771 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 37, 37, 37, 37, 37, 37,
1772 37, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1773 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 37, 37, 37, 37, 37,
1774 37, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1775 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 37, 37, 37, 37, 37,
1776 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1777 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1778 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1779 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1780 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1781 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1782 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1783 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1784};
1785
1786/* *str points to the first digit in a string of base `base` digits. base
Tim Petersbf2674b2003-02-02 07:51:32 +00001787 * is a power of 2 (2, 4, 8, 16, or 32). *str is set to point to the first
1788 * non-digit (which may be *str!). A normalized long is returned.
1789 * The point to this routine is that it takes time linear in the number of
1790 * string characters.
1791 */
1792static PyLongObject *
1793long_from_binary_base(char **str, int base)
1794{
1795 char *p = *str;
1796 char *start = p;
1797 int bits_per_char;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001798 Py_ssize_t n;
Tim Petersbf2674b2003-02-02 07:51:32 +00001799 PyLongObject *z;
1800 twodigits accum;
1801 int bits_in_accum;
1802 digit *pdigit;
1803
1804 assert(base >= 2 && base <= 32 && (base & (base - 1)) == 0);
1805 n = base;
1806 for (bits_per_char = -1; n; ++bits_per_char)
1807 n >>= 1;
1808 /* n <- total # of bits needed, while setting p to end-of-string */
Christian Heimesbbe741d2008-03-28 10:53:29 +00001809 while (_PyLong_DigitValue[Py_CHARMASK(*p)] < base)
Tim Petersbf2674b2003-02-02 07:51:32 +00001810 ++p;
Tim Petersbf2674b2003-02-02 07:51:32 +00001811 *str = p;
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00001812 /* n <- # of Python digits needed, = ceiling(n/PyLong_SHIFT). */
1813 n = (p - start) * bits_per_char + PyLong_SHIFT - 1;
Thomas Wouters89f507f2006-12-13 04:49:30 +00001814 if (n / bits_per_char < p - start) {
Tim Peters1a3b19a2003-02-02 17:33:53 +00001815 PyErr_SetString(PyExc_ValueError,
Guido van Rossumddefaf32007-01-14 03:31:43 +00001816 "int string too large to convert");
Tim Peters1a3b19a2003-02-02 17:33:53 +00001817 return NULL;
1818 }
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00001819 n = n / PyLong_SHIFT;
Tim Petersbf2674b2003-02-02 07:51:32 +00001820 z = _PyLong_New(n);
1821 if (z == NULL)
1822 return NULL;
1823 /* Read string from right, and fill in long from left; i.e.,
1824 * from least to most significant in both.
1825 */
1826 accum = 0;
1827 bits_in_accum = 0;
1828 pdigit = z->ob_digit;
1829 while (--p >= start) {
Raymond Hettinger35631532009-01-09 03:58:09 +00001830 int k = (int)_PyLong_DigitValue[Py_CHARMASK(*p)];
Tim Petersc7bc0b92003-05-05 20:39:43 +00001831 assert(k >= 0 && k < base);
Mark Dickinson17e55872009-01-24 15:56:57 +00001832 accum |= (twodigits)k << bits_in_accum;
Tim Petersbf2674b2003-02-02 07:51:32 +00001833 bits_in_accum += bits_per_char;
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00001834 if (bits_in_accum >= PyLong_SHIFT) {
1835 *pdigit++ = (digit)(accum & PyLong_MASK);
Mark Dickinson17e55872009-01-24 15:56:57 +00001836 assert(pdigit - z->ob_digit <= n);
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00001837 accum >>= PyLong_SHIFT;
1838 bits_in_accum -= PyLong_SHIFT;
1839 assert(bits_in_accum < PyLong_SHIFT);
Tim Petersbf2674b2003-02-02 07:51:32 +00001840 }
1841 }
1842 if (bits_in_accum) {
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00001843 assert(bits_in_accum <= PyLong_SHIFT);
Tim Petersbf2674b2003-02-02 07:51:32 +00001844 *pdigit++ = (digit)accum;
Mark Dickinson17e55872009-01-24 15:56:57 +00001845 assert(pdigit - z->ob_digit <= n);
Tim Petersbf2674b2003-02-02 07:51:32 +00001846 }
1847 while (pdigit - z->ob_digit < n)
1848 *pdigit++ = 0;
1849 return long_normalize(z);
1850}
1851
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001852PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00001853PyLong_FromString(char *str, char **pend, int base)
Guido van Rossumeb1fafc1994-08-29 12:47:19 +00001854{
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001855 int sign = 1, error_if_nonzero = 0;
Guido van Rossum9e896b32000-04-05 20:11:21 +00001856 char *start, *orig_str = str;
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001857 PyLongObject *z = NULL;
Guido van Rossum25236212007-08-22 23:28:23 +00001858 PyObject *strobj;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001859 Py_ssize_t slen;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001860
Guido van Rossum472c04f1996-12-05 21:57:21 +00001861 if ((base != 0 && base < 2) || base > 36) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001862 PyErr_SetString(PyExc_ValueError,
Guido van Rossumddefaf32007-01-14 03:31:43 +00001863 "int() arg 2 must be >= 2 and <= 36");
Guido van Rossumeb1fafc1994-08-29 12:47:19 +00001864 return NULL;
1865 }
Guido van Rossum9fa2c111995-02-10 17:00:37 +00001866 while (*str != '\0' && isspace(Py_CHARMASK(*str)))
Guido van Rossumeb1fafc1994-08-29 12:47:19 +00001867 str++;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001868 if (*str == '+')
1869 ++str;
1870 else if (*str == '-') {
1871 ++str;
1872 sign = -1;
1873 }
1874 if (base == 0) {
1875 if (str[0] != '0')
1876 base = 10;
1877 else if (str[1] == 'x' || str[1] == 'X')
1878 base = 16;
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001879 else if (str[1] == 'o' || str[1] == 'O')
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001880 base = 8;
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001881 else if (str[1] == 'b' || str[1] == 'B')
1882 base = 2;
1883 else {
1884 /* "old" (C-style) octal literal, now invalid.
1885 it might still be zero though */
1886 error_if_nonzero = 1;
1887 base = 10;
1888 }
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001889 }
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001890 if (str[0] == '0' &&
1891 ((base == 16 && (str[1] == 'x' || str[1] == 'X')) ||
1892 (base == 8 && (str[1] == 'o' || str[1] == 'O')) ||
1893 (base == 2 && (str[1] == 'b' || str[1] == 'B'))))
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001894 str += 2;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001895
Guido van Rossume6762971998-06-22 03:54:46 +00001896 start = str;
Tim Petersbf2674b2003-02-02 07:51:32 +00001897 if ((base & (base - 1)) == 0)
1898 z = long_from_binary_base(&str, base);
1899 else {
Thomas Wouters477c8d52006-05-27 19:21:47 +00001900/***
1901Binary bases can be converted in time linear in the number of digits, because
1902Python's representation base is binary. Other bases (including decimal!) use
1903the simple quadratic-time algorithm below, complicated by some speed tricks.
Tim Peters5af4e6c2002-08-12 02:31:19 +00001904
Thomas Wouters477c8d52006-05-27 19:21:47 +00001905First some math: the largest integer that can be expressed in N base-B digits
1906is B**N-1. Consequently, if we have an N-digit input in base B, the worst-
1907case number of Python digits needed to hold it is the smallest integer n s.t.
1908
1909 BASE**n-1 >= B**N-1 [or, adding 1 to both sides]
1910 BASE**n >= B**N [taking logs to base BASE]
1911 n >= log(B**N)/log(BASE) = N * log(B)/log(BASE)
1912
1913The static array log_base_BASE[base] == log(base)/log(BASE) so we can compute
1914this quickly. A Python long with that much space is reserved near the start,
1915and the result is computed into it.
1916
1917The input string is actually treated as being in base base**i (i.e., i digits
1918are processed at a time), where two more static arrays hold:
1919
1920 convwidth_base[base] = the largest integer i such that base**i <= BASE
1921 convmultmax_base[base] = base ** convwidth_base[base]
1922
1923The first of these is the largest i such that i consecutive input digits
1924must fit in a single Python digit. The second is effectively the input
1925base we're really using.
1926
1927Viewing the input as a sequence <c0, c1, ..., c_n-1> of digits in base
1928convmultmax_base[base], the result is "simply"
1929
1930 (((c0*B + c1)*B + c2)*B + c3)*B + ... ))) + c_n-1
1931
1932where B = convmultmax_base[base].
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001933
1934Error analysis: as above, the number of Python digits `n` needed is worst-
1935case
1936
1937 n >= N * log(B)/log(BASE)
1938
1939where `N` is the number of input digits in base `B`. This is computed via
1940
1941 size_z = (Py_ssize_t)((scan - str) * log_base_BASE[base]) + 1;
1942
1943below. Two numeric concerns are how much space this can waste, and whether
1944the computed result can be too small. To be concrete, assume BASE = 2**15,
1945which is the default (and it's unlikely anyone changes that).
1946
1947Waste isn't a problem: provided the first input digit isn't 0, the difference
1948between the worst-case input with N digits and the smallest input with N
1949digits is about a factor of B, but B is small compared to BASE so at most
1950one allocated Python digit can remain unused on that count. If
1951N*log(B)/log(BASE) is mathematically an exact integer, then truncating that
1952and adding 1 returns a result 1 larger than necessary. However, that can't
1953happen: whenever B is a power of 2, long_from_binary_base() is called
1954instead, and it's impossible for B**i to be an integer power of 2**15 when
1955B is not a power of 2 (i.e., it's impossible for N*log(B)/log(BASE) to be
1956an exact integer when B is not a power of 2, since B**i has a prime factor
1957other than 2 in that case, but (2**15)**j's only prime factor is 2).
1958
1959The computed result can be too small if the true value of N*log(B)/log(BASE)
1960is a little bit larger than an exact integer, but due to roundoff errors (in
1961computing log(B), log(BASE), their quotient, and/or multiplying that by N)
1962yields a numeric result a little less than that integer. Unfortunately, "how
1963close can a transcendental function get to an integer over some range?"
1964questions are generally theoretically intractable. Computer analysis via
1965continued fractions is practical: expand log(B)/log(BASE) via continued
1966fractions, giving a sequence i/j of "the best" rational approximations. Then
1967j*log(B)/log(BASE) is approximately equal to (the integer) i. This shows that
1968we can get very close to being in trouble, but very rarely. For example,
196976573 is a denominator in one of the continued-fraction approximations to
1970log(10)/log(2**15), and indeed:
1971
1972 >>> log(10)/log(2**15)*76573
1973 16958.000000654003
1974
1975is very close to an integer. If we were working with IEEE single-precision,
1976rounding errors could kill us. Finding worst cases in IEEE double-precision
1977requires better-than-double-precision log() functions, and Tim didn't bother.
1978Instead the code checks to see whether the allocated space is enough as each
1979new Python digit is added, and copies the whole thing to a larger long if not.
1980This should happen extremely rarely, and in fact I don't have a test case
1981that triggers it(!). Instead the code was tested by artificially allocating
1982just 1 digit at the start, so that the copying code was exercised for every
1983digit beyond the first.
Thomas Wouters477c8d52006-05-27 19:21:47 +00001984***/
1985 register twodigits c; /* current input character */
1986 Py_ssize_t size_z;
1987 int i;
1988 int convwidth;
1989 twodigits convmultmax, convmult;
1990 digit *pz, *pzstop;
1991 char* scan;
1992
1993 static double log_base_BASE[37] = {0.0e0,};
1994 static int convwidth_base[37] = {0,};
1995 static twodigits convmultmax_base[37] = {0,};
1996
1997 if (log_base_BASE[base] == 0.0) {
1998 twodigits convmax = base;
1999 int i = 1;
2000
2001 log_base_BASE[base] = log((double)base) /
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00002002 log((double)PyLong_BASE);
Thomas Wouters477c8d52006-05-27 19:21:47 +00002003 for (;;) {
2004 twodigits next = convmax * base;
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00002005 if (next > PyLong_BASE)
Thomas Wouters477c8d52006-05-27 19:21:47 +00002006 break;
2007 convmax = next;
2008 ++i;
2009 }
2010 convmultmax_base[base] = convmax;
2011 assert(i > 0);
2012 convwidth_base[base] = i;
2013 }
2014
2015 /* Find length of the string of numeric characters. */
2016 scan = str;
Christian Heimesbbe741d2008-03-28 10:53:29 +00002017 while (_PyLong_DigitValue[Py_CHARMASK(*scan)] < base)
Thomas Wouters477c8d52006-05-27 19:21:47 +00002018 ++scan;
2019
2020 /* Create a long object that can contain the largest possible
2021 * integer with this base and length. Note that there's no
2022 * need to initialize z->ob_digit -- no slot is read up before
2023 * being stored into.
2024 */
2025 size_z = (Py_ssize_t)((scan - str) * log_base_BASE[base]) + 1;
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002026 /* Uncomment next line to test exceedingly rare copy code */
2027 /* size_z = 1; */
Thomas Wouters477c8d52006-05-27 19:21:47 +00002028 assert(size_z > 0);
2029 z = _PyLong_New(size_z);
2030 if (z == NULL)
2031 return NULL;
Christian Heimes90aa7642007-12-19 02:45:37 +00002032 Py_SIZE(z) = 0;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002033
2034 /* `convwidth` consecutive input digits are treated as a single
2035 * digit in base `convmultmax`.
2036 */
2037 convwidth = convwidth_base[base];
2038 convmultmax = convmultmax_base[base];
2039
2040 /* Work ;-) */
2041 while (str < scan) {
2042 /* grab up to convwidth digits from the input string */
Christian Heimesbbe741d2008-03-28 10:53:29 +00002043 c = (digit)_PyLong_DigitValue[Py_CHARMASK(*str++)];
Thomas Wouters477c8d52006-05-27 19:21:47 +00002044 for (i = 1; i < convwidth && str != scan; ++i, ++str) {
2045 c = (twodigits)(c * base +
Raymond Hettinger35631532009-01-09 03:58:09 +00002046 (int)_PyLong_DigitValue[Py_CHARMASK(*str)]);
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00002047 assert(c < PyLong_BASE);
Thomas Wouters477c8d52006-05-27 19:21:47 +00002048 }
2049
2050 convmult = convmultmax;
2051 /* Calculate the shift only if we couldn't get
2052 * convwidth digits.
2053 */
2054 if (i != convwidth) {
2055 convmult = base;
2056 for ( ; i > 1; --i)
2057 convmult *= base;
2058 }
2059
2060 /* Multiply z by convmult, and add c. */
2061 pz = z->ob_digit;
Christian Heimes90aa7642007-12-19 02:45:37 +00002062 pzstop = pz + Py_SIZE(z);
Thomas Wouters477c8d52006-05-27 19:21:47 +00002063 for (; pz < pzstop; ++pz) {
2064 c += (twodigits)*pz * convmult;
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00002065 *pz = (digit)(c & PyLong_MASK);
2066 c >>= PyLong_SHIFT;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002067 }
2068 /* carry off the current end? */
2069 if (c) {
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00002070 assert(c < PyLong_BASE);
Christian Heimes90aa7642007-12-19 02:45:37 +00002071 if (Py_SIZE(z) < size_z) {
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002072 *pz = (digit)c;
Christian Heimes90aa7642007-12-19 02:45:37 +00002073 ++Py_SIZE(z);
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002074 }
2075 else {
2076 PyLongObject *tmp;
2077 /* Extremely rare. Get more space. */
Christian Heimes90aa7642007-12-19 02:45:37 +00002078 assert(Py_SIZE(z) == size_z);
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002079 tmp = _PyLong_New(size_z + 1);
2080 if (tmp == NULL) {
2081 Py_DECREF(z);
2082 return NULL;
2083 }
2084 memcpy(tmp->ob_digit,
2085 z->ob_digit,
2086 sizeof(digit) * size_z);
2087 Py_DECREF(z);
2088 z = tmp;
2089 z->ob_digit[size_z] = (digit)c;
2090 ++size_z;
2091 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00002092 }
Tim Petersbf2674b2003-02-02 07:51:32 +00002093 }
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002094 }
Guido van Rossumac6a37a1998-08-04 15:04:06 +00002095 if (z == NULL)
2096 return NULL;
Guido van Rossumcd16bf62007-06-13 18:07:49 +00002097 if (error_if_nonzero) {
2098 /* reset the base to 0, else the exception message
2099 doesn't make too much sense */
2100 base = 0;
Christian Heimes90aa7642007-12-19 02:45:37 +00002101 if (Py_SIZE(z) != 0)
Guido van Rossumcd16bf62007-06-13 18:07:49 +00002102 goto onError;
2103 /* there might still be other problems, therefore base
2104 remains zero here for the same reason */
2105 }
Guido van Rossum9e896b32000-04-05 20:11:21 +00002106 if (str == start)
2107 goto onError;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002108 if (sign < 0)
Christian Heimes90aa7642007-12-19 02:45:37 +00002109 Py_SIZE(z) = -(Py_SIZE(z));
Guido van Rossum9e896b32000-04-05 20:11:21 +00002110 while (*str && isspace(Py_CHARMASK(*str)))
2111 str++;
2112 if (*str != '\0')
2113 goto onError;
Guido van Rossumeb1fafc1994-08-29 12:47:19 +00002114 if (pend)
2115 *pend = str;
Martin v. Löwis029656f2008-06-30 04:06:08 +00002116 long_normalize(z);
Facundo Batista6e6f59b2008-07-24 18:57:11 +00002117 return (PyObject *) maybe_small_long(z);
Guido van Rossum9e896b32000-04-05 20:11:21 +00002118
2119 onError:
Guido van Rossum9e896b32000-04-05 20:11:21 +00002120 Py_XDECREF(z);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002121 slen = strlen(orig_str) < 200 ? strlen(orig_str) : 200;
Guido van Rossum25236212007-08-22 23:28:23 +00002122 strobj = PyUnicode_FromStringAndSize(orig_str, slen);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002123 if (strobj == NULL)
2124 return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002125 PyErr_Format(PyExc_ValueError,
Guido van Rossum25236212007-08-22 23:28:23 +00002126 "invalid literal for int() with base %d: %R",
2127 base, strobj);
2128 Py_DECREF(strobj);
Guido van Rossum9e896b32000-04-05 20:11:21 +00002129 return NULL;
2130}
2131
2132PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00002133PyLong_FromUnicode(Py_UNICODE *u, Py_ssize_t length, int base)
Guido van Rossum9e896b32000-04-05 20:11:21 +00002134{
Walter Dörwald07e14762002-11-06 16:15:14 +00002135 PyObject *result;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002136 char *buffer = (char *)PyMem_MALLOC(length+1);
Guido van Rossum9e896b32000-04-05 20:11:21 +00002137
Walter Dörwald07e14762002-11-06 16:15:14 +00002138 if (buffer == NULL)
2139 return NULL;
2140
2141 if (PyUnicode_EncodeDecimal(u, length, buffer, NULL)) {
2142 PyMem_FREE(buffer);
Guido van Rossum9e896b32000-04-05 20:11:21 +00002143 return NULL;
2144 }
Walter Dörwald07e14762002-11-06 16:15:14 +00002145 result = PyLong_FromString(buffer, NULL, base);
2146 PyMem_FREE(buffer);
2147 return result;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002148}
2149
Tim Peters9f688bf2000-07-07 15:53:28 +00002150/* forward */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002151static PyLongObject *x_divrem
Tim Peters9f688bf2000-07-07 15:53:28 +00002152 (PyLongObject *, PyLongObject *, PyLongObject **);
Guido van Rossumb43daf72007-08-01 18:08:08 +00002153static PyObject *long_long(PyObject *v);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002154
2155/* Long division with remainder, top-level routine */
2156
Guido van Rossume32e0141992-01-19 16:31:05 +00002157static int
Tim Peters9f688bf2000-07-07 15:53:28 +00002158long_divrem(PyLongObject *a, PyLongObject *b,
2159 PyLongObject **pdiv, PyLongObject **prem)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002160{
Christian Heimes90aa7642007-12-19 02:45:37 +00002161 Py_ssize_t size_a = ABS(Py_SIZE(a)), size_b = ABS(Py_SIZE(b));
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002162 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002163
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002164 if (size_b == 0) {
Guido van Rossumbd3a5271998-08-11 15:04:47 +00002165 PyErr_SetString(PyExc_ZeroDivisionError,
Guido van Rossumddefaf32007-01-14 03:31:43 +00002166 "integer division or modulo by zero");
Guido van Rossume32e0141992-01-19 16:31:05 +00002167 return -1;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002168 }
2169 if (size_a < size_b ||
Guido van Rossum472c04f1996-12-05 21:57:21 +00002170 (size_a == size_b &&
2171 a->ob_digit[size_a-1] < b->ob_digit[size_b-1])) {
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002172 /* |a| < |b|. */
Guido van Rossumddefaf32007-01-14 03:31:43 +00002173 *pdiv = (PyLongObject*)PyLong_FromLong(0);
Guido van Rossumd8faa362007-04-27 19:54:29 +00002174 if (*pdiv == NULL)
2175 return -1;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002176 Py_INCREF(a);
2177 *prem = (PyLongObject *) a;
Guido van Rossume32e0141992-01-19 16:31:05 +00002178 return 0;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002179 }
2180 if (size_b == 1) {
2181 digit rem = 0;
2182 z = divrem1(a, b->ob_digit[0], &rem);
Guido van Rossume32e0141992-01-19 16:31:05 +00002183 if (z == NULL)
2184 return -1;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002185 *prem = (PyLongObject *) PyLong_FromLong((long)rem);
Guido van Rossumd8faa362007-04-27 19:54:29 +00002186 if (*prem == NULL) {
2187 Py_DECREF(z);
2188 return -1;
2189 }
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002190 }
Guido van Rossume32e0141992-01-19 16:31:05 +00002191 else {
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002192 z = x_divrem(a, b, prem);
Guido van Rossume32e0141992-01-19 16:31:05 +00002193 if (z == NULL)
2194 return -1;
2195 }
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002196 /* Set the signs.
2197 The quotient z has the sign of a*b;
2198 the remainder r has the sign of a,
2199 so a = b*z + r. */
Christian Heimes90aa7642007-12-19 02:45:37 +00002200 if ((Py_SIZE(a) < 0) != (Py_SIZE(b) < 0))
Guido van Rossumddefaf32007-01-14 03:31:43 +00002201 NEGATE(z);
Christian Heimes90aa7642007-12-19 02:45:37 +00002202 if (Py_SIZE(a) < 0 && Py_SIZE(*prem) != 0)
Guido van Rossumddefaf32007-01-14 03:31:43 +00002203 NEGATE(*prem);
Facundo Batista6e6f59b2008-07-24 18:57:11 +00002204 *pdiv = maybe_small_long(z);
Guido van Rossume32e0141992-01-19 16:31:05 +00002205 return 0;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002206}
2207
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002208/* Unsigned long division with remainder -- the algorithm. The arguments v1
2209 and w1 should satisfy 2 <= ABS(Py_SIZE(w1)) <= ABS(Py_SIZE(v1)). */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002210
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002211static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00002212x_divrem(PyLongObject *v1, PyLongObject *w1, PyLongObject **prem)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002213{
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002214 PyLongObject *v, *w, *a;
2215 Py_ssize_t i, k, size_v, size_w;
2216 int d;
2217 digit wm1, wm2, carry, q, r, vtop, *v0, *vk, *w0, *ak;
2218 twodigits vv;
2219 sdigit zhi;
2220 stwodigits z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002221
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002222 /* We follow Knuth [The Art of Computer Programming, Vol. 2 (3rd
2223 edn.), section 4.3.1, Algorithm D], except that we don't explicitly
2224 handle the special case when the initial estimate q for a quotient
2225 digit is >= PyLong_BASE: the max value for q is PyLong_BASE+1, and
2226 that won't overflow a digit. */
2227
2228 /* allocate space; w will also be used to hold the final remainder */
2229 size_v = ABS(Py_SIZE(v1));
2230 size_w = ABS(Py_SIZE(w1));
2231 assert(size_v >= size_w && size_w >= 2); /* Assert checks by div() */
2232 v = _PyLong_New(size_v+1);
2233 if (v == NULL) {
2234 *prem = NULL;
2235 return NULL;
2236 }
2237 w = _PyLong_New(size_w);
2238 if (w == NULL) {
2239 Py_DECREF(v);
2240 *prem = NULL;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002241 return NULL;
2242 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002243
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002244 /* normalize: shift w1 left so that its top digit is >= PyLong_BASE/2.
2245 shift v1 left by the same amount. Results go into w and v. */
2246 d = PyLong_SHIFT - bits_in_digit(w1->ob_digit[size_w-1]);
2247 carry = v_lshift(w->ob_digit, w1->ob_digit, size_w, d);
2248 assert(carry == 0);
2249 carry = v_lshift(v->ob_digit, v1->ob_digit, size_v, d);
2250 if (carry != 0 || v->ob_digit[size_v-1] >= w->ob_digit[size_w-1]) {
2251 v->ob_digit[size_v] = carry;
2252 size_v++;
2253 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002254
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002255 /* Now v->ob_digit[size_v-1] < w->ob_digit[size_w-1], so quotient has
2256 at most (and usually exactly) k = size_v - size_w digits. */
Thomas Wouters477c8d52006-05-27 19:21:47 +00002257 k = size_v - size_w;
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002258 assert(k >= 0);
2259 a = _PyLong_New(k);
2260 if (a == NULL) {
2261 Py_DECREF(w);
2262 Py_DECREF(v);
2263 *prem = NULL;
2264 return NULL;
2265 }
2266 v0 = v->ob_digit;
2267 w0 = w->ob_digit;
2268 wm1 = w0[size_w-1];
2269 wm2 = w0[size_w-2];
2270 for (vk = v0+k, ak = a->ob_digit + k; vk-- > v0;) {
2271 /* inner loop: divide vk[0:size_w+1] by w0[0:size_w], giving
2272 single-digit quotient q, remainder in vk[0:size_w]. */
Tim Peters5af4e6c2002-08-12 02:31:19 +00002273
Guido van Rossumeb1fafc1994-08-29 12:47:19 +00002274 SIGCHECK({
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002275 Py_DECREF(a);
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002276 Py_DECREF(w);
2277 Py_DECREF(v);
2278 *prem = NULL;
2279 return NULL;
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00002280 })
Tim Peters5af4e6c2002-08-12 02:31:19 +00002281
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002282 /* estimate quotient digit q; may overestimate by 1 (rare) */
2283 vtop = vk[size_w];
2284 assert(vtop <= wm1);
2285 vv = ((twodigits)vtop << PyLong_SHIFT) | vk[size_w-1];
2286 q = (digit)(vv / wm1);
2287 r = (digit)(vv - (twodigits)wm1 * q); /* r = vv % wm1 */
2288 while ((twodigits)wm2 * q > (((twodigits)r << PyLong_SHIFT)
2289 | vk[size_w-2])) {
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002290 --q;
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002291 r += wm1;
2292 if (r >= PyLong_BASE)
2293 break;
2294 }
2295 assert(q <= PyLong_BASE);
Tim Peters5af4e6c2002-08-12 02:31:19 +00002296
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002297 /* subtract q*w0[0:size_w] from vk[0:size_w+1] */
2298 zhi = 0;
2299 for (i = 0; i < size_w; ++i) {
2300 /* invariants: -PyLong_BASE <= -q <= zhi <= 0;
2301 -PyLong_BASE * q <= z < PyLong_BASE */
2302 z = (sdigit)vk[i] + zhi -
2303 (stwodigits)q * (stwodigits)w0[i];
2304 vk[i] = (digit)z & PyLong_MASK;
2305 zhi = (sdigit)Py_ARITHMETIC_RIGHT_SHIFT(stwodigits,
2306 z, PyLong_SHIFT);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002307 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002308
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002309 /* add w back if q was too large (this branch taken rarely) */
2310 assert((sdigit)vtop + zhi == -1 || (sdigit)vtop + zhi == 0);
2311 if ((sdigit)vtop + zhi < 0) {
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002312 carry = 0;
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002313 for (i = 0; i < size_w; ++i) {
2314 carry += vk[i] + w0[i];
2315 vk[i] = carry & PyLong_MASK;
2316 carry >>= PyLong_SHIFT;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002317 }
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002318 --q;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002319 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002320
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002321 /* store quotient digit */
2322 assert(q < PyLong_BASE);
2323 *--ak = q;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002324 }
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002325
2326 /* unshift remainder; we reuse w to store the result */
2327 carry = v_rshift(w0, v0, size_w, d);
2328 assert(carry==0);
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002329 Py_DECREF(v);
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002330
2331 *prem = long_normalize(w);
2332 return long_normalize(a);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002333}
2334
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002335/* For a nonzero PyLong a, express a in the form x * 2**e, with 0.5 <=
2336 abs(x) < 1.0 and e >= 0; return x and put e in *e. Here x is
2337 rounded to DBL_MANT_DIG significant bits using round-half-to-even.
2338 If a == 0, return 0.0 and set *e = 0. If the resulting exponent
2339 e is larger than PY_SSIZE_T_MAX, raise OverflowError and return
2340 -1.0. */
2341
2342/* attempt to define 2.0**DBL_MANT_DIG as a compile-time constant */
2343#if DBL_MANT_DIG == 53
2344#define EXP2_DBL_MANT_DIG 9007199254740992.0
2345#else
2346#define EXP2_DBL_MANT_DIG (ldexp(1.0, DBL_MANT_DIG))
2347#endif
2348
2349double
2350_PyLong_Frexp(PyLongObject *a, Py_ssize_t *e)
2351{
2352 Py_ssize_t a_size, a_bits, shift_digits, shift_bits, x_size;
2353 /* See below for why x_digits is always large enough. */
2354 digit rem, x_digits[2 + (DBL_MANT_DIG + 1) / PyLong_SHIFT];
2355 double dx;
2356 /* Correction term for round-half-to-even rounding. For a digit x,
2357 "x + half_even_correction[x & 7]" gives x rounded to the nearest
2358 multiple of 4, rounding ties to a multiple of 8. */
2359 static const int half_even_correction[8] = {0, -1, -2, 1, 0, -1, 2, 1};
2360
2361 a_size = ABS(Py_SIZE(a));
2362 if (a_size == 0) {
2363 /* Special case for 0: significand 0.0, exponent 0. */
2364 *e = 0;
2365 return 0.0;
2366 }
2367 a_bits = bits_in_digit(a->ob_digit[a_size-1]);
2368 /* The following is an overflow-free version of the check
2369 "if ((a_size - 1) * PyLong_SHIFT + a_bits > PY_SSIZE_T_MAX) ..." */
2370 if (a_size >= (PY_SSIZE_T_MAX - 1) / PyLong_SHIFT + 1 &&
2371 (a_size > (PY_SSIZE_T_MAX - 1) / PyLong_SHIFT + 1 ||
2372 a_bits > (PY_SSIZE_T_MAX - 1) % PyLong_SHIFT + 1))
2373 goto overflow;
2374 a_bits = (a_size - 1) * PyLong_SHIFT + a_bits;
2375
2376 /* Shift the first DBL_MANT_DIG + 2 bits of a into x_digits[0:x_size]
2377 (shifting left if a_bits <= DBL_MANT_DIG + 2).
2378
2379 Number of digits needed for result: write // for floor division.
2380 Then if shifting left, we end up using
2381
2382 1 + a_size + (DBL_MANT_DIG + 2 - a_bits) // PyLong_SHIFT
2383
2384 digits. If shifting right, we use
2385
2386 a_size - (a_bits - DBL_MANT_DIG - 2) // PyLong_SHIFT
2387
2388 digits. Using a_size = 1 + (a_bits - 1) // PyLong_SHIFT along with
2389 the inequalities
2390
2391 m // PyLong_SHIFT + n // PyLong_SHIFT <= (m + n) // PyLong_SHIFT
2392 m // PyLong_SHIFT - n // PyLong_SHIFT <=
2393 1 + (m - n - 1) // PyLong_SHIFT,
2394
2395 valid for any integers m and n, we find that x_size satisfies
2396
2397 x_size <= 2 + (DBL_MANT_DIG + 1) // PyLong_SHIFT
2398
2399 in both cases.
2400 */
2401 if (a_bits <= DBL_MANT_DIG + 2) {
2402 shift_digits = (DBL_MANT_DIG + 2 - a_bits) / PyLong_SHIFT;
2403 shift_bits = (DBL_MANT_DIG + 2 - a_bits) % PyLong_SHIFT;
2404 x_size = 0;
2405 while (x_size < shift_digits)
2406 x_digits[x_size++] = 0;
2407 rem = v_lshift(x_digits + x_size, a->ob_digit, a_size,
Stefan Krah0091e5e2010-04-07 08:49:55 +00002408 (int)shift_bits);
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002409 x_size += a_size;
2410 x_digits[x_size++] = rem;
2411 }
2412 else {
2413 shift_digits = (a_bits - DBL_MANT_DIG - 2) / PyLong_SHIFT;
2414 shift_bits = (a_bits - DBL_MANT_DIG - 2) % PyLong_SHIFT;
2415 rem = v_rshift(x_digits, a->ob_digit + shift_digits,
Stefan Krah0091e5e2010-04-07 08:49:55 +00002416 a_size - shift_digits, (int)shift_bits);
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002417 x_size = a_size - shift_digits;
2418 /* For correct rounding below, we need the least significant
2419 bit of x to be 'sticky' for this shift: if any of the bits
2420 shifted out was nonzero, we set the least significant bit
2421 of x. */
2422 if (rem)
2423 x_digits[0] |= 1;
2424 else
2425 while (shift_digits > 0)
2426 if (a->ob_digit[--shift_digits]) {
2427 x_digits[0] |= 1;
2428 break;
2429 }
2430 }
Mark Dickinson49a519c2010-04-06 19:02:54 +00002431 assert(1 <= x_size && x_size <= (Py_ssize_t)(sizeof(x_digits)/sizeof(digit)));
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002432
2433 /* Round, and convert to double. */
2434 x_digits[0] += half_even_correction[x_digits[0] & 7];
2435 dx = x_digits[--x_size];
2436 while (x_size > 0)
2437 dx = dx * PyLong_BASE + x_digits[--x_size];
2438
2439 /* Rescale; make correction if result is 1.0. */
2440 dx /= 4.0 * EXP2_DBL_MANT_DIG;
2441 if (dx == 1.0) {
2442 if (a_bits == PY_SSIZE_T_MAX)
2443 goto overflow;
2444 dx = 0.5;
2445 a_bits += 1;
2446 }
2447
2448 *e = a_bits;
2449 return Py_SIZE(a) < 0 ? -dx : dx;
2450
2451 overflow:
2452 /* exponent > PY_SSIZE_T_MAX */
2453 PyErr_SetString(PyExc_OverflowError,
2454 "huge integer: number of bits overflows a Py_ssize_t");
2455 *e = 0;
2456 return -1.0;
2457}
2458
2459/* Get a C double from a long int object. Rounds to the nearest double,
2460 using the round-half-to-even rule in the case of a tie. */
2461
2462double
2463PyLong_AsDouble(PyObject *v)
2464{
2465 Py_ssize_t exponent;
2466 double x;
2467
2468 if (v == NULL || !PyLong_Check(v)) {
2469 PyErr_BadInternalCall();
2470 return -1.0;
2471 }
2472 x = _PyLong_Frexp((PyLongObject *)v, &exponent);
2473 if ((x == -1.0 && PyErr_Occurred()) || exponent > DBL_MAX_EXP) {
2474 PyErr_SetString(PyExc_OverflowError,
2475 "long int too large to convert to float");
2476 return -1.0;
2477 }
Stefan Krah0091e5e2010-04-07 08:49:55 +00002478 return ldexp(x, (int)exponent);
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002479}
2480
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002481/* Methods */
2482
2483static void
Tim Peters9f688bf2000-07-07 15:53:28 +00002484long_dealloc(PyObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002485{
Christian Heimes90aa7642007-12-19 02:45:37 +00002486 Py_TYPE(v)->tp_free(v);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002487}
2488
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002489static int
Tim Peters9f688bf2000-07-07 15:53:28 +00002490long_compare(PyLongObject *a, PyLongObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002491{
Martin v. Löwis18e16552006-02-15 17:27:45 +00002492 Py_ssize_t sign;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002493
Christian Heimes90aa7642007-12-19 02:45:37 +00002494 if (Py_SIZE(a) != Py_SIZE(b)) {
2495 if (ABS(Py_SIZE(a)) == 0 && ABS(Py_SIZE(b)) == 0)
Guido van Rossumc6913e71991-11-19 20:26:46 +00002496 sign = 0;
2497 else
Christian Heimes90aa7642007-12-19 02:45:37 +00002498 sign = Py_SIZE(a) - Py_SIZE(b);
Guido van Rossumc6913e71991-11-19 20:26:46 +00002499 }
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002500 else {
Christian Heimes90aa7642007-12-19 02:45:37 +00002501 Py_ssize_t i = ABS(Py_SIZE(a));
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002502 while (--i >= 0 && a->ob_digit[i] == b->ob_digit[i])
2503 ;
2504 if (i < 0)
2505 sign = 0;
Guido van Rossum0b0db8e1993-01-21 16:07:51 +00002506 else {
Mark Dickinsone4416742009-02-15 15:14:57 +00002507 sign = (sdigit)a->ob_digit[i] - (sdigit)b->ob_digit[i];
Christian Heimes90aa7642007-12-19 02:45:37 +00002508 if (Py_SIZE(a) < 0)
Guido van Rossum0b0db8e1993-01-21 16:07:51 +00002509 sign = -sign;
2510 }
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002511 }
Guido van Rossumc6913e71991-11-19 20:26:46 +00002512 return sign < 0 ? -1 : sign > 0 ? 1 : 0;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002513}
2514
Antoine Pitrou51f3ef92008-12-20 13:14:23 +00002515#define TEST_COND(cond) \
2516 ((cond) ? Py_True : Py_False)
2517
Guido van Rossum47b9ff62006-08-24 00:41:19 +00002518static PyObject *
2519long_richcompare(PyObject *self, PyObject *other, int op)
2520{
Antoine Pitrou51f3ef92008-12-20 13:14:23 +00002521 int result;
2522 PyObject *v;
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00002523 CHECK_BINOP(self, other);
Antoine Pitrou51f3ef92008-12-20 13:14:23 +00002524 if (self == other)
2525 result = 0;
2526 else
2527 result = long_compare((PyLongObject*)self, (PyLongObject*)other);
2528 /* Convert the return value to a Boolean */
2529 switch (op) {
2530 case Py_EQ:
2531 v = TEST_COND(result == 0);
2532 break;
2533 case Py_NE:
2534 v = TEST_COND(result != 0);
2535 break;
2536 case Py_LE:
2537 v = TEST_COND(result <= 0);
2538 break;
2539 case Py_GE:
2540 v = TEST_COND(result >= 0);
2541 break;
2542 case Py_LT:
2543 v = TEST_COND(result == -1);
2544 break;
2545 case Py_GT:
2546 v = TEST_COND(result == 1);
2547 break;
2548 default:
2549 PyErr_BadArgument();
2550 return NULL;
2551 }
2552 Py_INCREF(v);
2553 return v;
Guido van Rossum47b9ff62006-08-24 00:41:19 +00002554}
2555
Guido van Rossum9bfef441993-03-29 10:43:31 +00002556static long
Tim Peters9f688bf2000-07-07 15:53:28 +00002557long_hash(PyLongObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00002558{
Mark Dickinsona5cafdf2009-01-26 21:56:07 +00002559 unsigned long x;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002560 Py_ssize_t i;
2561 int sign;
Guido van Rossum9bfef441993-03-29 10:43:31 +00002562
Christian Heimes90aa7642007-12-19 02:45:37 +00002563 i = Py_SIZE(v);
Guido van Rossumddefaf32007-01-14 03:31:43 +00002564 switch(i) {
Mark Dickinson0d4785b2009-02-15 17:27:41 +00002565 case -1: return v->ob_digit[0]==1 ? -2 : -(sdigit)v->ob_digit[0];
Guido van Rossumddefaf32007-01-14 03:31:43 +00002566 case 0: return 0;
2567 case 1: return v->ob_digit[0];
2568 }
Guido van Rossum9bfef441993-03-29 10:43:31 +00002569 sign = 1;
2570 x = 0;
2571 if (i < 0) {
2572 sign = -1;
2573 i = -(i);
2574 }
Mark Dickinsona5cafdf2009-01-26 21:56:07 +00002575 /* The following loop produces a C unsigned long x such that x is
2576 congruent to the absolute value of v modulo ULONG_MAX. The
Thomas Woutersce272b62007-09-19 21:19:28 +00002577 resulting x is nonzero if and only if v is. */
Guido van Rossum9bfef441993-03-29 10:43:31 +00002578 while (--i >= 0) {
Neal Norwitzd5a65a72003-02-23 23:11:41 +00002579 /* Force a native long #-bits (32 or 64) circular shift */
Mark Dickinson5a74bf62009-02-15 11:04:38 +00002580 x = (x >> (8*SIZEOF_LONG-PyLong_SHIFT)) | (x << PyLong_SHIFT);
Guido van Rossum9bfef441993-03-29 10:43:31 +00002581 x += v->ob_digit[i];
Mark Dickinsona5cafdf2009-01-26 21:56:07 +00002582 /* If the addition above overflowed we compensate by
2583 incrementing. This preserves the value modulo
2584 ULONG_MAX. */
2585 if (x < v->ob_digit[i])
Thomas Woutersce272b62007-09-19 21:19:28 +00002586 x++;
Guido van Rossum9bfef441993-03-29 10:43:31 +00002587 }
2588 x = x * sign;
Mark Dickinson5a74bf62009-02-15 11:04:38 +00002589 if (x == (unsigned long)-1)
2590 x = (unsigned long)-2;
2591 return (long)x;
Guido van Rossum9bfef441993-03-29 10:43:31 +00002592}
2593
2594
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002595/* Add the absolute values of two long integers. */
2596
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002597static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00002598x_add(PyLongObject *a, PyLongObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002599{
Christian Heimes90aa7642007-12-19 02:45:37 +00002600 Py_ssize_t size_a = ABS(Py_SIZE(a)), size_b = ABS(Py_SIZE(b));
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002601 PyLongObject *z;
Mark Dickinson17e55872009-01-24 15:56:57 +00002602 Py_ssize_t i;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002603 digit carry = 0;
Tim Peters69c2de32001-09-11 22:31:33 +00002604
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002605 /* Ensure a is the larger of the two: */
2606 if (size_a < size_b) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002607 { PyLongObject *temp = a; a = b; b = temp; }
Martin v. Löwis18e16552006-02-15 17:27:45 +00002608 { Py_ssize_t size_temp = size_a;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002609 size_a = size_b;
2610 size_b = size_temp; }
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002611 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002612 z = _PyLong_New(size_a+1);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002613 if (z == NULL)
2614 return NULL;
2615 for (i = 0; i < size_b; ++i) {
2616 carry += a->ob_digit[i] + b->ob_digit[i];
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00002617 z->ob_digit[i] = carry & PyLong_MASK;
2618 carry >>= PyLong_SHIFT;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002619 }
2620 for (; i < size_a; ++i) {
2621 carry += a->ob_digit[i];
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00002622 z->ob_digit[i] = carry & PyLong_MASK;
2623 carry >>= PyLong_SHIFT;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002624 }
2625 z->ob_digit[i] = carry;
2626 return long_normalize(z);
2627}
2628
2629/* Subtract the absolute values of two integers. */
2630
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002631static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00002632x_sub(PyLongObject *a, PyLongObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002633{
Christian Heimes90aa7642007-12-19 02:45:37 +00002634 Py_ssize_t size_a = ABS(Py_SIZE(a)), size_b = ABS(Py_SIZE(b));
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002635 PyLongObject *z;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002636 Py_ssize_t i;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002637 int sign = 1;
2638 digit borrow = 0;
Tim Peters69c2de32001-09-11 22:31:33 +00002639
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002640 /* Ensure a is the larger of the two: */
2641 if (size_a < size_b) {
2642 sign = -1;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002643 { PyLongObject *temp = a; a = b; b = temp; }
Martin v. Löwis18e16552006-02-15 17:27:45 +00002644 { Py_ssize_t size_temp = size_a;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002645 size_a = size_b;
2646 size_b = size_temp; }
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002647 }
2648 else if (size_a == size_b) {
2649 /* Find highest digit where a and b differ: */
2650 i = size_a;
2651 while (--i >= 0 && a->ob_digit[i] == b->ob_digit[i])
2652 ;
2653 if (i < 0)
Facundo Batista6e6f59b2008-07-24 18:57:11 +00002654 return (PyLongObject *)PyLong_FromLong(0);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002655 if (a->ob_digit[i] < b->ob_digit[i]) {
2656 sign = -1;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002657 { PyLongObject *temp = a; a = b; b = temp; }
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002658 }
2659 size_a = size_b = i+1;
2660 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002661 z = _PyLong_New(size_a);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002662 if (z == NULL)
2663 return NULL;
2664 for (i = 0; i < size_b; ++i) {
2665 /* The following assumes unsigned arithmetic
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00002666 works module 2**N for some N>PyLong_SHIFT. */
Guido van Rossumeb1fafc1994-08-29 12:47:19 +00002667 borrow = a->ob_digit[i] - b->ob_digit[i] - borrow;
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00002668 z->ob_digit[i] = borrow & PyLong_MASK;
2669 borrow >>= PyLong_SHIFT;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002670 borrow &= 1; /* Keep only one sign bit */
2671 }
2672 for (; i < size_a; ++i) {
2673 borrow = a->ob_digit[i] - borrow;
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00002674 z->ob_digit[i] = borrow & PyLong_MASK;
2675 borrow >>= PyLong_SHIFT;
Tim Peters43f04a32000-07-08 02:26:47 +00002676 borrow &= 1; /* Keep only one sign bit */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002677 }
2678 assert(borrow == 0);
Guido van Rossumc6913e71991-11-19 20:26:46 +00002679 if (sign < 0)
Guido van Rossumddefaf32007-01-14 03:31:43 +00002680 NEGATE(z);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002681 return long_normalize(z);
2682}
2683
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002684static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00002685long_add(PyLongObject *a, PyLongObject *b)
Guido van Rossum4c260ff1992-01-14 18:36:43 +00002686{
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00002687 PyLongObject *z;
Tim Peters69c2de32001-09-11 22:31:33 +00002688
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00002689 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00002690
Christian Heimes90aa7642007-12-19 02:45:37 +00002691 if (ABS(Py_SIZE(a)) <= 1 && ABS(Py_SIZE(b)) <= 1) {
Christian Heimes217cfd12007-12-02 14:31:20 +00002692 PyObject *result = PyLong_FromLong(MEDIUM_VALUE(a) +
Martin v. Löwis14b6d922007-02-06 21:05:30 +00002693 MEDIUM_VALUE(b));
Martin v. Löwis14b6d922007-02-06 21:05:30 +00002694 return result;
2695 }
Christian Heimes90aa7642007-12-19 02:45:37 +00002696 if (Py_SIZE(a) < 0) {
2697 if (Py_SIZE(b) < 0) {
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002698 z = x_add(a, b);
Christian Heimes90aa7642007-12-19 02:45:37 +00002699 if (z != NULL && Py_SIZE(z) != 0)
2700 Py_SIZE(z) = -(Py_SIZE(z));
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002701 }
2702 else
2703 z = x_sub(b, a);
2704 }
2705 else {
Christian Heimes90aa7642007-12-19 02:45:37 +00002706 if (Py_SIZE(b) < 0)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002707 z = x_sub(a, b);
2708 else
2709 z = x_add(a, b);
2710 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002711 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002712}
2713
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002714static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00002715long_sub(PyLongObject *a, PyLongObject *b)
Guido van Rossum4c260ff1992-01-14 18:36:43 +00002716{
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00002717 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002718
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00002719 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00002720
Christian Heimes90aa7642007-12-19 02:45:37 +00002721 if (ABS(Py_SIZE(a)) <= 1 && ABS(Py_SIZE(b)) <= 1) {
Martin v. Löwis14b6d922007-02-06 21:05:30 +00002722 PyObject* r;
2723 r = PyLong_FromLong(MEDIUM_VALUE(a)-MEDIUM_VALUE(b));
Martin v. Löwis14b6d922007-02-06 21:05:30 +00002724 return r;
2725 }
Christian Heimes90aa7642007-12-19 02:45:37 +00002726 if (Py_SIZE(a) < 0) {
2727 if (Py_SIZE(b) < 0)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002728 z = x_sub(a, b);
2729 else
2730 z = x_add(a, b);
Christian Heimes90aa7642007-12-19 02:45:37 +00002731 if (z != NULL && Py_SIZE(z) != 0)
2732 Py_SIZE(z) = -(Py_SIZE(z));
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002733 }
2734 else {
Christian Heimes90aa7642007-12-19 02:45:37 +00002735 if (Py_SIZE(b) < 0)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002736 z = x_add(a, b);
2737 else
2738 z = x_sub(a, b);
2739 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002740 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002741}
2742
Tim Peters5af4e6c2002-08-12 02:31:19 +00002743/* Grade school multiplication, ignoring the signs.
2744 * Returns the absolute value of the product, or NULL if error.
2745 */
2746static PyLongObject *
2747x_mul(PyLongObject *a, PyLongObject *b)
Neil Schemenauerba872e22001-01-04 01:46:03 +00002748{
Tim Peters5af4e6c2002-08-12 02:31:19 +00002749 PyLongObject *z;
Christian Heimes90aa7642007-12-19 02:45:37 +00002750 Py_ssize_t size_a = ABS(Py_SIZE(a));
2751 Py_ssize_t size_b = ABS(Py_SIZE(b));
Martin v. Löwis18e16552006-02-15 17:27:45 +00002752 Py_ssize_t i;
Neil Schemenauerba872e22001-01-04 01:46:03 +00002753
Tim Peters5af4e6c2002-08-12 02:31:19 +00002754 z = _PyLong_New(size_a + size_b);
2755 if (z == NULL)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002756 return NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002757
Christian Heimes90aa7642007-12-19 02:45:37 +00002758 memset(z->ob_digit, 0, Py_SIZE(z) * sizeof(digit));
Tim Peters0973b992004-08-29 22:16:50 +00002759 if (a == b) {
2760 /* Efficient squaring per HAC, Algorithm 14.16:
2761 * http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf
2762 * Gives slightly less than a 2x speedup when a == b,
2763 * via exploiting that each entry in the multiplication
2764 * pyramid appears twice (except for the size_a squares).
2765 */
2766 for (i = 0; i < size_a; ++i) {
2767 twodigits carry;
2768 twodigits f = a->ob_digit[i];
2769 digit *pz = z->ob_digit + (i << 1);
2770 digit *pa = a->ob_digit + i + 1;
2771 digit *paend = a->ob_digit + size_a;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002772
Tim Peters0973b992004-08-29 22:16:50 +00002773 SIGCHECK({
2774 Py_DECREF(z);
2775 return NULL;
2776 })
2777
2778 carry = *pz + f * f;
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00002779 *pz++ = (digit)(carry & PyLong_MASK);
2780 carry >>= PyLong_SHIFT;
2781 assert(carry <= PyLong_MASK);
Tim Peters0973b992004-08-29 22:16:50 +00002782
2783 /* Now f is added in twice in each column of the
2784 * pyramid it appears. Same as adding f<<1 once.
2785 */
2786 f <<= 1;
2787 while (pa < paend) {
2788 carry += *pz + *pa++ * f;
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00002789 *pz++ = (digit)(carry & PyLong_MASK);
2790 carry >>= PyLong_SHIFT;
2791 assert(carry <= (PyLong_MASK << 1));
Tim Peters0973b992004-08-29 22:16:50 +00002792 }
2793 if (carry) {
2794 carry += *pz;
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00002795 *pz++ = (digit)(carry & PyLong_MASK);
2796 carry >>= PyLong_SHIFT;
Tim Peters0973b992004-08-29 22:16:50 +00002797 }
2798 if (carry)
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00002799 *pz += (digit)(carry & PyLong_MASK);
2800 assert((carry >> PyLong_SHIFT) == 0);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002801 }
Tim Peters0973b992004-08-29 22:16:50 +00002802 }
2803 else { /* a is not the same as b -- gradeschool long mult */
2804 for (i = 0; i < size_a; ++i) {
2805 twodigits carry = 0;
2806 twodigits f = a->ob_digit[i];
2807 digit *pz = z->ob_digit + i;
2808 digit *pb = b->ob_digit;
2809 digit *pbend = b->ob_digit + size_b;
2810
2811 SIGCHECK({
2812 Py_DECREF(z);
2813 return NULL;
2814 })
2815
2816 while (pb < pbend) {
2817 carry += *pz + *pb++ * f;
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00002818 *pz++ = (digit)(carry & PyLong_MASK);
2819 carry >>= PyLong_SHIFT;
2820 assert(carry <= PyLong_MASK);
Tim Peters0973b992004-08-29 22:16:50 +00002821 }
2822 if (carry)
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00002823 *pz += (digit)(carry & PyLong_MASK);
2824 assert((carry >> PyLong_SHIFT) == 0);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002825 }
2826 }
Tim Peters44121a62002-08-12 06:17:58 +00002827 return long_normalize(z);
Tim Peters5af4e6c2002-08-12 02:31:19 +00002828}
2829
2830/* A helper for Karatsuba multiplication (k_mul).
2831 Takes a long "n" and an integer "size" representing the place to
2832 split, and sets low and high such that abs(n) == (high << size) + low,
2833 viewing the shift as being by digits. The sign bit is ignored, and
2834 the return values are >= 0.
2835 Returns 0 on success, -1 on failure.
2836*/
2837static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00002838kmul_split(PyLongObject *n, Py_ssize_t size, PyLongObject **high, PyLongObject **low)
Tim Peters5af4e6c2002-08-12 02:31:19 +00002839{
2840 PyLongObject *hi, *lo;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002841 Py_ssize_t size_lo, size_hi;
Christian Heimes90aa7642007-12-19 02:45:37 +00002842 const Py_ssize_t size_n = ABS(Py_SIZE(n));
Tim Peters5af4e6c2002-08-12 02:31:19 +00002843
2844 size_lo = MIN(size_n, size);
2845 size_hi = size_n - size_lo;
2846
2847 if ((hi = _PyLong_New(size_hi)) == NULL)
2848 return -1;
2849 if ((lo = _PyLong_New(size_lo)) == NULL) {
2850 Py_DECREF(hi);
2851 return -1;
2852 }
2853
2854 memcpy(lo->ob_digit, n->ob_digit, size_lo * sizeof(digit));
2855 memcpy(hi->ob_digit, n->ob_digit + size_lo, size_hi * sizeof(digit));
2856
2857 *high = long_normalize(hi);
2858 *low = long_normalize(lo);
2859 return 0;
2860}
2861
Tim Peters60004642002-08-12 22:01:34 +00002862static PyLongObject *k_lopsided_mul(PyLongObject *a, PyLongObject *b);
2863
Tim Peters5af4e6c2002-08-12 02:31:19 +00002864/* Karatsuba multiplication. Ignores the input signs, and returns the
2865 * absolute value of the product (or NULL if error).
2866 * See Knuth Vol. 2 Chapter 4.3.3 (Pp. 294-295).
2867 */
2868static PyLongObject *
2869k_mul(PyLongObject *a, PyLongObject *b)
2870{
Christian Heimes90aa7642007-12-19 02:45:37 +00002871 Py_ssize_t asize = ABS(Py_SIZE(a));
2872 Py_ssize_t bsize = ABS(Py_SIZE(b));
Tim Peters5af4e6c2002-08-12 02:31:19 +00002873 PyLongObject *ah = NULL;
2874 PyLongObject *al = NULL;
2875 PyLongObject *bh = NULL;
2876 PyLongObject *bl = NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002877 PyLongObject *ret = NULL;
Tim Peters738eda72002-08-12 15:08:20 +00002878 PyLongObject *t1, *t2, *t3;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002879 Py_ssize_t shift; /* the number of digits we split off */
2880 Py_ssize_t i;
Tim Peters738eda72002-08-12 15:08:20 +00002881
Tim Peters5af4e6c2002-08-12 02:31:19 +00002882 /* (ah*X+al)(bh*X+bl) = ah*bh*X*X + (ah*bl + al*bh)*X + al*bl
2883 * Let k = (ah+al)*(bh+bl) = ah*bl + al*bh + ah*bh + al*bl
2884 * Then the original product is
Tim Peters18c15b92002-08-12 02:43:58 +00002885 * ah*bh*X*X + (k - ah*bh - al*bl)*X + al*bl
Tim Peters5af4e6c2002-08-12 02:31:19 +00002886 * By picking X to be a power of 2, "*X" is just shifting, and it's
2887 * been reduced to 3 multiplies on numbers half the size.
2888 */
2889
Tim Petersfc07e562002-08-12 02:54:10 +00002890 /* We want to split based on the larger number; fiddle so that b
Tim Peters5af4e6c2002-08-12 02:31:19 +00002891 * is largest.
2892 */
Tim Peters738eda72002-08-12 15:08:20 +00002893 if (asize > bsize) {
Tim Peters5af4e6c2002-08-12 02:31:19 +00002894 t1 = a;
2895 a = b;
2896 b = t1;
Tim Peters738eda72002-08-12 15:08:20 +00002897
2898 i = asize;
2899 asize = bsize;
2900 bsize = i;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002901 }
2902
2903 /* Use gradeschool math when either number is too small. */
Tim Peters0973b992004-08-29 22:16:50 +00002904 i = a == b ? KARATSUBA_SQUARE_CUTOFF : KARATSUBA_CUTOFF;
2905 if (asize <= i) {
Tim Peters738eda72002-08-12 15:08:20 +00002906 if (asize == 0)
Facundo Batista6e6f59b2008-07-24 18:57:11 +00002907 return (PyLongObject *)PyLong_FromLong(0);
Tim Peters44121a62002-08-12 06:17:58 +00002908 else
2909 return x_mul(a, b);
2910 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002911
Tim Peters60004642002-08-12 22:01:34 +00002912 /* If a is small compared to b, splitting on b gives a degenerate
2913 * case with ah==0, and Karatsuba may be (even much) less efficient
2914 * than "grade school" then. However, we can still win, by viewing
2915 * b as a string of "big digits", each of width a->ob_size. That
2916 * leads to a sequence of balanced calls to k_mul.
2917 */
2918 if (2 * asize <= bsize)
2919 return k_lopsided_mul(a, b);
2920
Tim Petersd6974a52002-08-13 20:37:51 +00002921 /* Split a & b into hi & lo pieces. */
Tim Peters738eda72002-08-12 15:08:20 +00002922 shift = bsize >> 1;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002923 if (kmul_split(a, shift, &ah, &al) < 0) goto fail;
Christian Heimes90aa7642007-12-19 02:45:37 +00002924 assert(Py_SIZE(ah) > 0); /* the split isn't degenerate */
Tim Petersd6974a52002-08-13 20:37:51 +00002925
Tim Peters0973b992004-08-29 22:16:50 +00002926 if (a == b) {
2927 bh = ah;
2928 bl = al;
2929 Py_INCREF(bh);
2930 Py_INCREF(bl);
2931 }
2932 else if (kmul_split(b, shift, &bh, &bl) < 0) goto fail;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002933
Tim Petersd64c1de2002-08-12 17:36:03 +00002934 /* The plan:
2935 * 1. Allocate result space (asize + bsize digits: that's always
2936 * enough).
2937 * 2. Compute ah*bh, and copy into result at 2*shift.
2938 * 3. Compute al*bl, and copy into result at 0. Note that this
2939 * can't overlap with #2.
2940 * 4. Subtract al*bl from the result, starting at shift. This may
2941 * underflow (borrow out of the high digit), but we don't care:
2942 * we're effectively doing unsigned arithmetic mod
2943 * BASE**(sizea + sizeb), and so long as the *final* result fits,
2944 * borrows and carries out of the high digit can be ignored.
2945 * 5. Subtract ah*bh from the result, starting at shift.
2946 * 6. Compute (ah+al)*(bh+bl), and add it into the result starting
2947 * at shift.
2948 */
2949
2950 /* 1. Allocate result space. */
Tim Peters70b041b2002-08-12 19:38:01 +00002951 ret = _PyLong_New(asize + bsize);
Tim Peters5af4e6c2002-08-12 02:31:19 +00002952 if (ret == NULL) goto fail;
2953#ifdef Py_DEBUG
2954 /* Fill with trash, to catch reference to uninitialized digits. */
Christian Heimes90aa7642007-12-19 02:45:37 +00002955 memset(ret->ob_digit, 0xDF, Py_SIZE(ret) * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00002956#endif
Tim Peters44121a62002-08-12 06:17:58 +00002957
Tim Petersd64c1de2002-08-12 17:36:03 +00002958 /* 2. t1 <- ah*bh, and copy into high digits of result. */
Tim Peters738eda72002-08-12 15:08:20 +00002959 if ((t1 = k_mul(ah, bh)) == NULL) goto fail;
Christian Heimes90aa7642007-12-19 02:45:37 +00002960 assert(Py_SIZE(t1) >= 0);
2961 assert(2*shift + Py_SIZE(t1) <= Py_SIZE(ret));
Tim Peters738eda72002-08-12 15:08:20 +00002962 memcpy(ret->ob_digit + 2*shift, t1->ob_digit,
Christian Heimes90aa7642007-12-19 02:45:37 +00002963 Py_SIZE(t1) * sizeof(digit));
Tim Peters738eda72002-08-12 15:08:20 +00002964
2965 /* Zero-out the digits higher than the ah*bh copy. */
Christian Heimes90aa7642007-12-19 02:45:37 +00002966 i = Py_SIZE(ret) - 2*shift - Py_SIZE(t1);
Tim Peters44121a62002-08-12 06:17:58 +00002967 if (i)
Christian Heimes90aa7642007-12-19 02:45:37 +00002968 memset(ret->ob_digit + 2*shift + Py_SIZE(t1), 0,
Tim Peters44121a62002-08-12 06:17:58 +00002969 i * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00002970
Tim Petersd64c1de2002-08-12 17:36:03 +00002971 /* 3. t2 <- al*bl, and copy into the low digits. */
Tim Peters738eda72002-08-12 15:08:20 +00002972 if ((t2 = k_mul(al, bl)) == NULL) {
2973 Py_DECREF(t1);
2974 goto fail;
2975 }
Christian Heimes90aa7642007-12-19 02:45:37 +00002976 assert(Py_SIZE(t2) >= 0);
2977 assert(Py_SIZE(t2) <= 2*shift); /* no overlap with high digits */
2978 memcpy(ret->ob_digit, t2->ob_digit, Py_SIZE(t2) * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00002979
2980 /* Zero out remaining digits. */
Christian Heimes90aa7642007-12-19 02:45:37 +00002981 i = 2*shift - Py_SIZE(t2); /* number of uninitialized digits */
Tim Peters5af4e6c2002-08-12 02:31:19 +00002982 if (i)
Christian Heimes90aa7642007-12-19 02:45:37 +00002983 memset(ret->ob_digit + Py_SIZE(t2), 0, i * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00002984
Tim Petersd64c1de2002-08-12 17:36:03 +00002985 /* 4 & 5. Subtract ah*bh (t1) and al*bl (t2). We do al*bl first
2986 * because it's fresher in cache.
2987 */
Christian Heimes90aa7642007-12-19 02:45:37 +00002988 i = Py_SIZE(ret) - shift; /* # digits after shift */
2989 (void)v_isub(ret->ob_digit + shift, i, t2->ob_digit, Py_SIZE(t2));
Tim Peters738eda72002-08-12 15:08:20 +00002990 Py_DECREF(t2);
2991
Christian Heimes90aa7642007-12-19 02:45:37 +00002992 (void)v_isub(ret->ob_digit + shift, i, t1->ob_digit, Py_SIZE(t1));
Tim Peters738eda72002-08-12 15:08:20 +00002993 Py_DECREF(t1);
2994
Tim Petersd64c1de2002-08-12 17:36:03 +00002995 /* 6. t3 <- (ah+al)(bh+bl), and add into result. */
Tim Peters5af4e6c2002-08-12 02:31:19 +00002996 if ((t1 = x_add(ah, al)) == NULL) goto fail;
2997 Py_DECREF(ah);
2998 Py_DECREF(al);
2999 ah = al = NULL;
3000
Tim Peters0973b992004-08-29 22:16:50 +00003001 if (a == b) {
3002 t2 = t1;
3003 Py_INCREF(t2);
3004 }
3005 else if ((t2 = x_add(bh, bl)) == NULL) {
Tim Peters5af4e6c2002-08-12 02:31:19 +00003006 Py_DECREF(t1);
3007 goto fail;
3008 }
3009 Py_DECREF(bh);
3010 Py_DECREF(bl);
3011 bh = bl = NULL;
3012
Tim Peters738eda72002-08-12 15:08:20 +00003013 t3 = k_mul(t1, t2);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003014 Py_DECREF(t1);
3015 Py_DECREF(t2);
Tim Peters738eda72002-08-12 15:08:20 +00003016 if (t3 == NULL) goto fail;
Christian Heimes90aa7642007-12-19 02:45:37 +00003017 assert(Py_SIZE(t3) >= 0);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003018
Tim Petersd6974a52002-08-13 20:37:51 +00003019 /* Add t3. It's not obvious why we can't run out of room here.
3020 * See the (*) comment after this function.
Tim Petersd8b21732002-08-12 19:30:26 +00003021 */
Christian Heimes90aa7642007-12-19 02:45:37 +00003022 (void)v_iadd(ret->ob_digit + shift, i, t3->ob_digit, Py_SIZE(t3));
Tim Peters738eda72002-08-12 15:08:20 +00003023 Py_DECREF(t3);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003024
Tim Peters5af4e6c2002-08-12 02:31:19 +00003025 return long_normalize(ret);
3026
3027 fail:
3028 Py_XDECREF(ret);
3029 Py_XDECREF(ah);
3030 Py_XDECREF(al);
3031 Py_XDECREF(bh);
3032 Py_XDECREF(bl);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003033 return NULL;
3034}
3035
Tim Petersd6974a52002-08-13 20:37:51 +00003036/* (*) Why adding t3 can't "run out of room" above.
3037
Tim Petersab86c2b2002-08-15 20:06:00 +00003038Let f(x) mean the floor of x and c(x) mean the ceiling of x. Some facts
3039to start with:
Tim Petersd6974a52002-08-13 20:37:51 +00003040
Tim Petersab86c2b2002-08-15 20:06:00 +000030411. For any integer i, i = c(i/2) + f(i/2). In particular,
3042 bsize = c(bsize/2) + f(bsize/2).
30432. shift = f(bsize/2)
30443. asize <= bsize
30454. Since we call k_lopsided_mul if asize*2 <= bsize, asize*2 > bsize in this
3046 routine, so asize > bsize/2 >= f(bsize/2) in this routine.
Tim Petersd6974a52002-08-13 20:37:51 +00003047
Tim Petersab86c2b2002-08-15 20:06:00 +00003048We allocated asize + bsize result digits, and add t3 into them at an offset
3049of shift. This leaves asize+bsize-shift allocated digit positions for t3
3050to fit into, = (by #1 and #2) asize + f(bsize/2) + c(bsize/2) - f(bsize/2) =
3051asize + c(bsize/2) available digit positions.
Tim Petersd6974a52002-08-13 20:37:51 +00003052
Tim Petersab86c2b2002-08-15 20:06:00 +00003053bh has c(bsize/2) digits, and bl at most f(size/2) digits. So bh+hl has
3054at most c(bsize/2) digits + 1 bit.
Tim Petersd6974a52002-08-13 20:37:51 +00003055
Tim Petersab86c2b2002-08-15 20:06:00 +00003056If asize == bsize, ah has c(bsize/2) digits, else ah has at most f(bsize/2)
3057digits, and al has at most f(bsize/2) digits in any case. So ah+al has at
3058most (asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 1 bit.
Tim Petersd6974a52002-08-13 20:37:51 +00003059
Tim Petersab86c2b2002-08-15 20:06:00 +00003060The product (ah+al)*(bh+bl) therefore has at most
Tim Petersd6974a52002-08-13 20:37:51 +00003061
Tim Petersab86c2b2002-08-15 20:06:00 +00003062 c(bsize/2) + (asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 2 bits
Tim Petersd6974a52002-08-13 20:37:51 +00003063
Tim Petersab86c2b2002-08-15 20:06:00 +00003064and we have asize + c(bsize/2) available digit positions. We need to show
3065this is always enough. An instance of c(bsize/2) cancels out in both, so
3066the question reduces to whether asize digits is enough to hold
3067(asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 2 bits. If asize < bsize,
3068then we're asking whether asize digits >= f(bsize/2) digits + 2 bits. By #4,
3069asize 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 +00003070digit is enough to hold 2 bits. This is so since PyLong_SHIFT=15 >= 2. If
Tim Petersab86c2b2002-08-15 20:06:00 +00003071asize == bsize, then we're asking whether bsize digits is enough to hold
Tim Peterse417de02002-08-15 20:10:45 +00003072c(bsize/2) digits + 2 bits, or equivalently (by #1) whether f(bsize/2) digits
3073is enough to hold 2 bits. This is so if bsize >= 2, which holds because
3074bsize >= KARATSUBA_CUTOFF >= 2.
Tim Peters8e966ee2002-08-14 16:36:23 +00003075
Tim Peters48d52c02002-08-14 17:07:32 +00003076Note that since there's always enough room for (ah+al)*(bh+bl), and that's
3077clearly >= each of ah*bh and al*bl, there's always enough room to subtract
3078ah*bh and al*bl too.
Tim Petersd6974a52002-08-13 20:37:51 +00003079*/
3080
Tim Peters60004642002-08-12 22:01:34 +00003081/* b has at least twice the digits of a, and a is big enough that Karatsuba
3082 * would pay off *if* the inputs had balanced sizes. View b as a sequence
3083 * of slices, each with a->ob_size digits, and multiply the slices by a,
3084 * one at a time. This gives k_mul balanced inputs to work with, and is
3085 * also cache-friendly (we compute one double-width slice of the result
3086 * at a time, then move on, never bactracking except for the helpful
3087 * single-width slice overlap between successive partial sums).
3088 */
3089static PyLongObject *
3090k_lopsided_mul(PyLongObject *a, PyLongObject *b)
3091{
Christian Heimes90aa7642007-12-19 02:45:37 +00003092 const Py_ssize_t asize = ABS(Py_SIZE(a));
3093 Py_ssize_t bsize = ABS(Py_SIZE(b));
Martin v. Löwis18e16552006-02-15 17:27:45 +00003094 Py_ssize_t nbdone; /* # of b digits already multiplied */
Tim Peters60004642002-08-12 22:01:34 +00003095 PyLongObject *ret;
3096 PyLongObject *bslice = NULL;
3097
3098 assert(asize > KARATSUBA_CUTOFF);
3099 assert(2 * asize <= bsize);
3100
3101 /* Allocate result space, and zero it out. */
3102 ret = _PyLong_New(asize + bsize);
3103 if (ret == NULL)
3104 return NULL;
Christian Heimes90aa7642007-12-19 02:45:37 +00003105 memset(ret->ob_digit, 0, Py_SIZE(ret) * sizeof(digit));
Tim Peters60004642002-08-12 22:01:34 +00003106
3107 /* Successive slices of b are copied into bslice. */
Tim Peters12034032002-08-12 22:10:00 +00003108 bslice = _PyLong_New(asize);
Tim Peters60004642002-08-12 22:01:34 +00003109 if (bslice == NULL)
3110 goto fail;
3111
3112 nbdone = 0;
3113 while (bsize > 0) {
3114 PyLongObject *product;
Martin v. Löwis18e16552006-02-15 17:27:45 +00003115 const Py_ssize_t nbtouse = MIN(bsize, asize);
Tim Peters60004642002-08-12 22:01:34 +00003116
3117 /* Multiply the next slice of b by a. */
3118 memcpy(bslice->ob_digit, b->ob_digit + nbdone,
3119 nbtouse * sizeof(digit));
Christian Heimes90aa7642007-12-19 02:45:37 +00003120 Py_SIZE(bslice) = nbtouse;
Tim Peters60004642002-08-12 22:01:34 +00003121 product = k_mul(a, bslice);
3122 if (product == NULL)
3123 goto fail;
3124
3125 /* Add into result. */
Christian Heimes90aa7642007-12-19 02:45:37 +00003126 (void)v_iadd(ret->ob_digit + nbdone, Py_SIZE(ret) - nbdone,
3127 product->ob_digit, Py_SIZE(product));
Tim Peters60004642002-08-12 22:01:34 +00003128 Py_DECREF(product);
3129
3130 bsize -= nbtouse;
3131 nbdone += nbtouse;
3132 }
3133
3134 Py_DECREF(bslice);
3135 return long_normalize(ret);
3136
3137 fail:
3138 Py_DECREF(ret);
3139 Py_XDECREF(bslice);
3140 return NULL;
3141}
Tim Peters5af4e6c2002-08-12 02:31:19 +00003142
3143static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003144long_mul(PyLongObject *a, PyLongObject *b)
Tim Peters5af4e6c2002-08-12 02:31:19 +00003145{
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003146 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003147
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003148 CHECK_BINOP(a, b);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003149
Mark Dickinsonbd792642009-03-18 20:06:12 +00003150 /* fast path for single-digit multiplication */
Christian Heimes90aa7642007-12-19 02:45:37 +00003151 if (ABS(Py_SIZE(a)) <= 1 && ABS(Py_SIZE(b)) <= 1) {
Mark Dickinsonbd792642009-03-18 20:06:12 +00003152 stwodigits v = (stwodigits)(MEDIUM_VALUE(a)) * MEDIUM_VALUE(b);
3153#ifdef HAVE_LONG_LONG
3154 return PyLong_FromLongLong((PY_LONG_LONG)v);
3155#else
3156 /* if we don't have long long then we're almost certainly
3157 using 15-bit digits, so v will fit in a long. In the
3158 unlikely event that we're using 30-bit digits on a platform
3159 without long long, a large v will just cause us to fall
3160 through to the general multiplication code below. */
3161 if (v >= LONG_MIN && v <= LONG_MAX)
3162 return PyLong_FromLong((long)v);
3163#endif
Martin v. Löwis14b6d922007-02-06 21:05:30 +00003164 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00003165
Tim Petersd64c1de2002-08-12 17:36:03 +00003166 z = k_mul(a, b);
Tim Peters9973d742002-08-15 19:41:06 +00003167 /* Negate if exactly one of the inputs is negative. */
Christian Heimes90aa7642007-12-19 02:45:37 +00003168 if (((Py_SIZE(a) ^ Py_SIZE(b)) < 0) && z)
Guido van Rossumddefaf32007-01-14 03:31:43 +00003169 NEGATE(z);
Tim Peters9973d742002-08-15 19:41:06 +00003170 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003171}
3172
Guido van Rossume32e0141992-01-19 16:31:05 +00003173/* The / and % operators are now defined in terms of divmod().
3174 The expression a mod b has the value a - b*floor(a/b).
3175 The long_divrem function gives the remainder after division of
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003176 |a| by |b|, with the sign of a. This is also expressed
3177 as a - b*trunc(a/b), if trunc truncates towards zero.
3178 Some examples:
3179 a b a rem b a mod b
3180 13 10 3 3
3181 -13 10 -3 7
3182 13 -10 3 -7
3183 -13 -10 -3 -3
3184 So, to get from rem to mod, we have to add b if a and b
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00003185 have different signs. We then subtract one from the 'div'
3186 part of the outcome to keep the invariant intact. */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003187
Tim Peters47e52ee2004-08-30 02:44:38 +00003188/* Compute
3189 * *pdiv, *pmod = divmod(v, w)
3190 * NULL can be passed for pdiv or pmod, in which case that part of
3191 * the result is simply thrown away. The caller owns a reference to
3192 * each of these it requests (does not pass NULL for).
3193 */
Guido van Rossume32e0141992-01-19 16:31:05 +00003194static int
Tim Peters5af4e6c2002-08-12 02:31:19 +00003195l_divmod(PyLongObject *v, PyLongObject *w,
Tim Peters9f688bf2000-07-07 15:53:28 +00003196 PyLongObject **pdiv, PyLongObject **pmod)
Guido van Rossume32e0141992-01-19 16:31:05 +00003197{
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003198 PyLongObject *div, *mod;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003199
Guido van Rossume32e0141992-01-19 16:31:05 +00003200 if (long_divrem(v, w, &div, &mod) < 0)
3201 return -1;
Christian Heimes90aa7642007-12-19 02:45:37 +00003202 if ((Py_SIZE(mod) < 0 && Py_SIZE(w) > 0) ||
3203 (Py_SIZE(mod) > 0 && Py_SIZE(w) < 0)) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003204 PyLongObject *temp;
3205 PyLongObject *one;
3206 temp = (PyLongObject *) long_add(mod, w);
3207 Py_DECREF(mod);
Guido van Rossume32e0141992-01-19 16:31:05 +00003208 mod = temp;
3209 if (mod == NULL) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003210 Py_DECREF(div);
Guido van Rossume32e0141992-01-19 16:31:05 +00003211 return -1;
3212 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003213 one = (PyLongObject *) PyLong_FromLong(1L);
Guido van Rossume32e0141992-01-19 16:31:05 +00003214 if (one == NULL ||
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003215 (temp = (PyLongObject *) long_sub(div, one)) == NULL) {
3216 Py_DECREF(mod);
3217 Py_DECREF(div);
3218 Py_XDECREF(one);
Guido van Rossume32e0141992-01-19 16:31:05 +00003219 return -1;
3220 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003221 Py_DECREF(one);
3222 Py_DECREF(div);
Guido van Rossume32e0141992-01-19 16:31:05 +00003223 div = temp;
3224 }
Tim Peters47e52ee2004-08-30 02:44:38 +00003225 if (pdiv != NULL)
3226 *pdiv = div;
3227 else
3228 Py_DECREF(div);
3229
3230 if (pmod != NULL)
3231 *pmod = mod;
3232 else
3233 Py_DECREF(mod);
3234
Guido van Rossume32e0141992-01-19 16:31:05 +00003235 return 0;
3236}
3237
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003238static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003239long_div(PyObject *a, PyObject *b)
Guido van Rossume32e0141992-01-19 16:31:05 +00003240{
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003241 PyLongObject *div;
Neil Schemenauerba872e22001-01-04 01:46:03 +00003242
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003243 CHECK_BINOP(a, b);
3244 if (l_divmod((PyLongObject*)a, (PyLongObject*)b, &div, NULL) < 0)
Tim Peters47e52ee2004-08-30 02:44:38 +00003245 div = NULL;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003246 return (PyObject *)div;
Guido van Rossume32e0141992-01-19 16:31:05 +00003247}
3248
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003249/* PyLong/PyLong -> float, with correctly rounded result. */
3250
3251#define MANT_DIG_DIGITS (DBL_MANT_DIG / PyLong_SHIFT)
3252#define MANT_DIG_BITS (DBL_MANT_DIG % PyLong_SHIFT)
3253
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003254static PyObject *
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003255long_true_divide(PyObject *v, PyObject *w)
Tim Peters20dab9f2001-09-04 05:31:47 +00003256{
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003257 PyLongObject *a, *b, *x;
3258 Py_ssize_t a_size, b_size, shift, extra_bits, diff, x_size, x_bits;
3259 digit mask, low;
3260 int inexact, negate, a_is_small, b_is_small;
3261 double dx, result;
Tim Peterse2a60002001-09-04 06:17:36 +00003262
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003263 CHECK_BINOP(v, w);
3264 a = (PyLongObject *)v;
3265 b = (PyLongObject *)w;
Tim Peterse2a60002001-09-04 06:17:36 +00003266
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003267 /*
3268 Method in a nutshell:
3269
3270 0. reduce to case a, b > 0; filter out obvious underflow/overflow
3271 1. choose a suitable integer 'shift'
3272 2. use integer arithmetic to compute x = floor(2**-shift*a/b)
3273 3. adjust x for correct rounding
3274 4. convert x to a double dx with the same value
3275 5. return ldexp(dx, shift).
3276
3277 In more detail:
3278
3279 0. For any a, a/0 raises ZeroDivisionError; for nonzero b, 0/b
3280 returns either 0.0 or -0.0, depending on the sign of b. For a and
3281 b both nonzero, ignore signs of a and b, and add the sign back in
3282 at the end. Now write a_bits and b_bits for the bit lengths of a
3283 and b respectively (that is, a_bits = 1 + floor(log_2(a)); likewise
3284 for b). Then
3285
3286 2**(a_bits - b_bits - 1) < a/b < 2**(a_bits - b_bits + 1).
3287
3288 So if a_bits - b_bits > DBL_MAX_EXP then a/b > 2**DBL_MAX_EXP and
3289 so overflows. Similarly, if a_bits - b_bits < DBL_MIN_EXP -
3290 DBL_MANT_DIG - 1 then a/b underflows to 0. With these cases out of
3291 the way, we can assume that
3292
3293 DBL_MIN_EXP - DBL_MANT_DIG - 1 <= a_bits - b_bits <= DBL_MAX_EXP.
3294
3295 1. The integer 'shift' is chosen so that x has the right number of
3296 bits for a double, plus two or three extra bits that will be used
3297 in the rounding decisions. Writing a_bits and b_bits for the
3298 number of significant bits in a and b respectively, a
3299 straightforward formula for shift is:
3300
3301 shift = a_bits - b_bits - DBL_MANT_DIG - 2
3302
3303 This is fine in the usual case, but if a/b is smaller than the
3304 smallest normal float then it can lead to double rounding on an
3305 IEEE 754 platform, giving incorrectly rounded results. So we
3306 adjust the formula slightly. The actual formula used is:
3307
3308 shift = MAX(a_bits - b_bits, DBL_MIN_EXP) - DBL_MANT_DIG - 2
3309
3310 2. The quantity x is computed by first shifting a (left -shift bits
3311 if shift <= 0, right shift bits if shift > 0) and then dividing by
3312 b. For both the shift and the division, we keep track of whether
3313 the result is inexact, in a flag 'inexact'; this information is
3314 needed at the rounding stage.
3315
3316 With the choice of shift above, together with our assumption that
3317 a_bits - b_bits >= DBL_MIN_EXP - DBL_MANT_DIG - 1, it follows
3318 that x >= 1.
3319
3320 3. Now x * 2**shift <= a/b < (x+1) * 2**shift. We want to replace
3321 this with an exactly representable float of the form
3322
3323 round(x/2**extra_bits) * 2**(extra_bits+shift).
3324
3325 For float representability, we need x/2**extra_bits <
3326 2**DBL_MANT_DIG and extra_bits + shift >= DBL_MIN_EXP -
3327 DBL_MANT_DIG. This translates to the condition:
3328
3329 extra_bits >= MAX(x_bits, DBL_MIN_EXP - shift) - DBL_MANT_DIG
3330
3331 To round, we just modify the bottom digit of x in-place; this can
3332 end up giving a digit with value > PyLONG_MASK, but that's not a
3333 problem since digits can hold values up to 2*PyLONG_MASK+1.
3334
3335 With the original choices for shift above, extra_bits will always
3336 be 2 or 3. Then rounding under the round-half-to-even rule, we
3337 round up iff the most significant of the extra bits is 1, and
3338 either: (a) the computation of x in step 2 had an inexact result,
3339 or (b) at least one other of the extra bits is 1, or (c) the least
3340 significant bit of x (above those to be rounded) is 1.
3341
3342 4. Conversion to a double is straightforward; all floating-point
3343 operations involved in the conversion are exact, so there's no
3344 danger of rounding errors.
3345
3346 5. Use ldexp(x, shift) to compute x*2**shift, the final result.
3347 The result will always be exactly representable as a double, except
3348 in the case that it overflows. To avoid dependence on the exact
3349 behaviour of ldexp on overflow, we check for overflow before
3350 applying ldexp. The result of ldexp is adjusted for sign before
3351 returning.
3352 */
3353
3354 /* Reduce to case where a and b are both positive. */
3355 a_size = ABS(Py_SIZE(a));
3356 b_size = ABS(Py_SIZE(b));
3357 negate = (Py_SIZE(a) < 0) ^ (Py_SIZE(b) < 0);
3358 if (b_size == 0) {
Tim Peterse2a60002001-09-04 06:17:36 +00003359 PyErr_SetString(PyExc_ZeroDivisionError,
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003360 "division by zero");
3361 goto error;
3362 }
3363 if (a_size == 0)
3364 goto underflow_or_zero;
3365
3366 /* Fast path for a and b small (exactly representable in a double).
3367 Relies on floating-point division being correctly rounded; results
3368 may be subject to double rounding on x86 machines that operate with
3369 the x87 FPU set to 64-bit precision. */
3370 a_is_small = a_size <= MANT_DIG_DIGITS ||
3371 (a_size == MANT_DIG_DIGITS+1 &&
3372 a->ob_digit[MANT_DIG_DIGITS] >> MANT_DIG_BITS == 0);
3373 b_is_small = b_size <= MANT_DIG_DIGITS ||
3374 (b_size == MANT_DIG_DIGITS+1 &&
3375 b->ob_digit[MANT_DIG_DIGITS] >> MANT_DIG_BITS == 0);
3376 if (a_is_small && b_is_small) {
3377 double da, db;
3378 da = a->ob_digit[--a_size];
3379 while (a_size > 0)
3380 da = da * PyLong_BASE + a->ob_digit[--a_size];
3381 db = b->ob_digit[--b_size];
3382 while (b_size > 0)
3383 db = db * PyLong_BASE + b->ob_digit[--b_size];
3384 result = da / db;
3385 goto success;
Tim Peterse2a60002001-09-04 06:17:36 +00003386 }
3387
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003388 /* Catch obvious cases of underflow and overflow */
3389 diff = a_size - b_size;
3390 if (diff > PY_SSIZE_T_MAX/PyLong_SHIFT - 1)
3391 /* Extreme overflow */
Tim Peterse2a60002001-09-04 06:17:36 +00003392 goto overflow;
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003393 else if (diff < 1 - PY_SSIZE_T_MAX/PyLong_SHIFT)
3394 /* Extreme underflow */
3395 goto underflow_or_zero;
3396 /* Next line is now safe from overflowing a Py_ssize_t */
3397 diff = diff * PyLong_SHIFT + bits_in_digit(a->ob_digit[a_size - 1]) -
3398 bits_in_digit(b->ob_digit[b_size - 1]);
3399 /* Now diff = a_bits - b_bits. */
3400 if (diff > DBL_MAX_EXP)
Tim Peterse2a60002001-09-04 06:17:36 +00003401 goto overflow;
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003402 else if (diff < DBL_MIN_EXP - DBL_MANT_DIG - 1)
3403 goto underflow_or_zero;
Tim Peterse2a60002001-09-04 06:17:36 +00003404
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003405 /* Choose value for shift; see comments for step 1 above. */
3406 shift = MAX(diff, DBL_MIN_EXP) - DBL_MANT_DIG - 2;
3407
3408 inexact = 0;
3409
3410 /* x = abs(a * 2**-shift) */
3411 if (shift <= 0) {
3412 Py_ssize_t i, shift_digits = -shift / PyLong_SHIFT;
3413 digit rem;
3414 /* x = a << -shift */
3415 if (a_size >= PY_SSIZE_T_MAX - 1 - shift_digits) {
3416 /* In practice, it's probably impossible to end up
3417 here. Both a and b would have to be enormous,
3418 using close to SIZE_T_MAX bytes of memory each. */
3419 PyErr_SetString(PyExc_OverflowError,
3420 "intermediate overflow during division");
3421 goto error;
3422 }
3423 x = _PyLong_New(a_size + shift_digits + 1);
3424 if (x == NULL)
3425 goto error;
3426 for (i = 0; i < shift_digits; i++)
3427 x->ob_digit[i] = 0;
3428 rem = v_lshift(x->ob_digit + shift_digits, a->ob_digit,
3429 a_size, -shift % PyLong_SHIFT);
3430 x->ob_digit[a_size + shift_digits] = rem;
3431 }
3432 else {
3433 Py_ssize_t shift_digits = shift / PyLong_SHIFT;
3434 digit rem;
3435 /* x = a >> shift */
3436 assert(a_size >= shift_digits);
3437 x = _PyLong_New(a_size - shift_digits);
3438 if (x == NULL)
3439 goto error;
3440 rem = v_rshift(x->ob_digit, a->ob_digit + shift_digits,
3441 a_size - shift_digits, shift % PyLong_SHIFT);
3442 /* set inexact if any of the bits shifted out is nonzero */
3443 if (rem)
3444 inexact = 1;
3445 while (!inexact && shift_digits > 0)
3446 if (a->ob_digit[--shift_digits])
3447 inexact = 1;
3448 }
3449 long_normalize(x);
3450 x_size = Py_SIZE(x);
3451
3452 /* x //= b. If the remainder is nonzero, set inexact. We own the only
3453 reference to x, so it's safe to modify it in-place. */
3454 if (b_size == 1) {
3455 digit rem = inplace_divrem1(x->ob_digit, x->ob_digit, x_size,
3456 b->ob_digit[0]);
3457 long_normalize(x);
3458 if (rem)
3459 inexact = 1;
3460 }
3461 else {
3462 PyLongObject *div, *rem;
3463 div = x_divrem(x, b, &rem);
3464 Py_DECREF(x);
3465 x = div;
3466 if (x == NULL)
3467 goto error;
3468 if (Py_SIZE(rem))
3469 inexact = 1;
3470 Py_DECREF(rem);
3471 }
3472 x_size = ABS(Py_SIZE(x));
3473 assert(x_size > 0); /* result of division is never zero */
3474 x_bits = (x_size-1)*PyLong_SHIFT+bits_in_digit(x->ob_digit[x_size-1]);
3475
3476 /* The number of extra bits that have to be rounded away. */
3477 extra_bits = MAX(x_bits, DBL_MIN_EXP - shift) - DBL_MANT_DIG;
3478 assert(extra_bits == 2 || extra_bits == 3);
3479
3480 /* Round by directly modifying the low digit of x. */
3481 mask = (digit)1 << (extra_bits - 1);
3482 low = x->ob_digit[0] | inexact;
3483 if (low & mask && low & (3*mask-1))
3484 low += mask;
3485 x->ob_digit[0] = low & ~(mask-1U);
3486
3487 /* Convert x to a double dx; the conversion is exact. */
3488 dx = x->ob_digit[--x_size];
3489 while (x_size > 0)
3490 dx = dx * PyLong_BASE + x->ob_digit[--x_size];
3491 Py_DECREF(x);
3492
3493 /* Check whether ldexp result will overflow a double. */
3494 if (shift + x_bits >= DBL_MAX_EXP &&
Stefan Krah0091e5e2010-04-07 08:49:55 +00003495 (shift + x_bits > DBL_MAX_EXP || dx == ldexp(1.0, (int)x_bits)))
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003496 goto overflow;
Stefan Krah0091e5e2010-04-07 08:49:55 +00003497 result = ldexp(dx, (int)shift);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003498
3499 success:
3500 return PyFloat_FromDouble(negate ? -result : result);
3501
3502 underflow_or_zero:
3503 return PyFloat_FromDouble(negate ? -0.0 : 0.0);
3504
3505 overflow:
Tim Peterse2a60002001-09-04 06:17:36 +00003506 PyErr_SetString(PyExc_OverflowError,
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003507 "integer division result too large for a float");
3508 error:
Tim Peterse2a60002001-09-04 06:17:36 +00003509 return NULL;
Tim Peters20dab9f2001-09-04 05:31:47 +00003510}
3511
3512static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003513long_mod(PyObject *a, PyObject *b)
Guido van Rossume32e0141992-01-19 16:31:05 +00003514{
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003515 PyLongObject *mod;
3516
3517 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003518
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003519 if (l_divmod((PyLongObject*)a, (PyLongObject*)b, NULL, &mod) < 0)
Tim Peters47e52ee2004-08-30 02:44:38 +00003520 mod = NULL;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003521 return (PyObject *)mod;
Guido van Rossume32e0141992-01-19 16:31:05 +00003522}
3523
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003524static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003525long_divmod(PyObject *a, PyObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003526{
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003527 PyLongObject *div, *mod;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003528 PyObject *z;
Neil Schemenauerba872e22001-01-04 01:46:03 +00003529
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003530 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003531
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003532 if (l_divmod((PyLongObject*)a, (PyLongObject*)b, &div, &mod) < 0) {
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003533 return NULL;
Neil Schemenauerba872e22001-01-04 01:46:03 +00003534 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003535 z = PyTuple_New(2);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003536 if (z != NULL) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003537 PyTuple_SetItem(z, 0, (PyObject *) div);
3538 PyTuple_SetItem(z, 1, (PyObject *) mod);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003539 }
3540 else {
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003541 Py_DECREF(div);
3542 Py_DECREF(mod);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003543 }
3544 return z;
3545}
3546
Tim Peters47e52ee2004-08-30 02:44:38 +00003547/* pow(v, w, x) */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003548static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00003549long_pow(PyObject *v, PyObject *w, PyObject *x)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003550{
Tim Peters47e52ee2004-08-30 02:44:38 +00003551 PyLongObject *a, *b, *c; /* a,b,c = v,w,x */
3552 int negativeOutput = 0; /* if x<0 return negative output */
Neil Schemenauerba872e22001-01-04 01:46:03 +00003553
Tim Peters47e52ee2004-08-30 02:44:38 +00003554 PyLongObject *z = NULL; /* accumulated result */
Martin v. Löwis18e16552006-02-15 17:27:45 +00003555 Py_ssize_t i, j, k; /* counters */
Tim Peters47e52ee2004-08-30 02:44:38 +00003556 PyLongObject *temp = NULL;
3557
3558 /* 5-ary values. If the exponent is large enough, table is
3559 * precomputed so that table[i] == a**i % c for i in range(32).
3560 */
3561 PyLongObject *table[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3562 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
3563
3564 /* a, b, c = v, w, x */
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003565 CHECK_BINOP(v, w);
3566 a = (PyLongObject*)v; Py_INCREF(a);
3567 b = (PyLongObject*)w; Py_INCREF(b);
Tim Peters47e52ee2004-08-30 02:44:38 +00003568 if (PyLong_Check(x)) {
3569 c = (PyLongObject *)x;
Neil Schemenauerba872e22001-01-04 01:46:03 +00003570 Py_INCREF(x);
3571 }
Tim Peters47e52ee2004-08-30 02:44:38 +00003572 else if (x == Py_None)
3573 c = NULL;
Neil Schemenauerba872e22001-01-04 01:46:03 +00003574 else {
3575 Py_DECREF(a);
3576 Py_DECREF(b);
3577 Py_INCREF(Py_NotImplemented);
3578 return Py_NotImplemented;
3579 }
Tim Peters4c483c42001-09-05 06:24:58 +00003580
Christian Heimes90aa7642007-12-19 02:45:37 +00003581 if (Py_SIZE(b) < 0) { /* if exponent is negative */
Tim Peters47e52ee2004-08-30 02:44:38 +00003582 if (c) {
Tim Peters4c483c42001-09-05 06:24:58 +00003583 PyErr_SetString(PyExc_TypeError, "pow() 2nd argument "
Tim Peters47e52ee2004-08-30 02:44:38 +00003584 "cannot be negative when 3rd argument specified");
Tim Peterscd97da32004-08-30 02:58:59 +00003585 goto Error;
Tim Peters32f453e2001-09-03 08:35:41 +00003586 }
Guido van Rossum2c7b8fe1999-10-11 22:34:41 +00003587 else {
Tim Peters47e52ee2004-08-30 02:44:38 +00003588 /* else return a float. This works because we know
3589 that this calls float_pow() which converts its
3590 arguments to double. */
3591 Py_DECREF(a);
3592 Py_DECREF(b);
3593 return PyFloat_Type.tp_as_number->nb_power(v, w, x);
Guido van Rossum2c7b8fe1999-10-11 22:34:41 +00003594 }
Guido van Rossumeb1fafc1994-08-29 12:47:19 +00003595 }
Tim Peters47e52ee2004-08-30 02:44:38 +00003596
3597 if (c) {
3598 /* if modulus == 0:
3599 raise ValueError() */
Christian Heimes90aa7642007-12-19 02:45:37 +00003600 if (Py_SIZE(c) == 0) {
Tim Peters47e52ee2004-08-30 02:44:38 +00003601 PyErr_SetString(PyExc_ValueError,
3602 "pow() 3rd argument cannot be 0");
Tim Peterscd97da32004-08-30 02:58:59 +00003603 goto Error;
Tim Peters47e52ee2004-08-30 02:44:38 +00003604 }
3605
3606 /* if modulus < 0:
3607 negativeOutput = True
3608 modulus = -modulus */
Christian Heimes90aa7642007-12-19 02:45:37 +00003609 if (Py_SIZE(c) < 0) {
Tim Peters47e52ee2004-08-30 02:44:38 +00003610 negativeOutput = 1;
3611 temp = (PyLongObject *)_PyLong_Copy(c);
3612 if (temp == NULL)
3613 goto Error;
3614 Py_DECREF(c);
3615 c = temp;
3616 temp = NULL;
Guido van Rossumddefaf32007-01-14 03:31:43 +00003617 NEGATE(c);
Tim Peters47e52ee2004-08-30 02:44:38 +00003618 }
3619
3620 /* if modulus == 1:
3621 return 0 */
Christian Heimes90aa7642007-12-19 02:45:37 +00003622 if ((Py_SIZE(c) == 1) && (c->ob_digit[0] == 1)) {
Tim Peters47e52ee2004-08-30 02:44:38 +00003623 z = (PyLongObject *)PyLong_FromLong(0L);
3624 goto Done;
3625 }
3626
3627 /* if base < 0:
3628 base = base % modulus
3629 Having the base positive just makes things easier. */
Christian Heimes90aa7642007-12-19 02:45:37 +00003630 if (Py_SIZE(a) < 0) {
Tim Peters47e52ee2004-08-30 02:44:38 +00003631 if (l_divmod(a, c, NULL, &temp) < 0)
Tim Peterscd97da32004-08-30 02:58:59 +00003632 goto Error;
Tim Peters47e52ee2004-08-30 02:44:38 +00003633 Py_DECREF(a);
3634 a = temp;
3635 temp = NULL;
3636 }
3637 }
3638
3639 /* At this point a, b, and c are guaranteed non-negative UNLESS
3640 c is NULL, in which case a may be negative. */
3641
3642 z = (PyLongObject *)PyLong_FromLong(1L);
3643 if (z == NULL)
3644 goto Error;
3645
3646 /* Perform a modular reduction, X = X % c, but leave X alone if c
3647 * is NULL.
3648 */
3649#define REDUCE(X) \
3650 if (c != NULL) { \
3651 if (l_divmod(X, c, NULL, &temp) < 0) \
3652 goto Error; \
3653 Py_XDECREF(X); \
3654 X = temp; \
3655 temp = NULL; \
3656 }
3657
3658 /* Multiply two values, then reduce the result:
3659 result = X*Y % c. If c is NULL, skip the mod. */
3660#define MULT(X, Y, result) \
3661{ \
3662 temp = (PyLongObject *)long_mul(X, Y); \
3663 if (temp == NULL) \
3664 goto Error; \
3665 Py_XDECREF(result); \
3666 result = temp; \
3667 temp = NULL; \
3668 REDUCE(result) \
3669}
3670
Christian Heimes90aa7642007-12-19 02:45:37 +00003671 if (Py_SIZE(b) <= FIVEARY_CUTOFF) {
Tim Peters47e52ee2004-08-30 02:44:38 +00003672 /* Left-to-right binary exponentiation (HAC Algorithm 14.79) */
3673 /* http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf */
Christian Heimes90aa7642007-12-19 02:45:37 +00003674 for (i = Py_SIZE(b) - 1; i >= 0; --i) {
Tim Peters47e52ee2004-08-30 02:44:38 +00003675 digit bi = b->ob_digit[i];
3676
Mark Dickinsone4416742009-02-15 15:14:57 +00003677 for (j = (digit)1 << (PyLong_SHIFT-1); j != 0; j >>= 1) {
Tim Peters47e52ee2004-08-30 02:44:38 +00003678 MULT(z, z, z)
3679 if (bi & j)
3680 MULT(z, a, z)
3681 }
3682 }
3683 }
3684 else {
3685 /* Left-to-right 5-ary exponentiation (HAC Algorithm 14.82) */
3686 Py_INCREF(z); /* still holds 1L */
3687 table[0] = z;
3688 for (i = 1; i < 32; ++i)
3689 MULT(table[i-1], a, table[i])
3690
Christian Heimes90aa7642007-12-19 02:45:37 +00003691 for (i = Py_SIZE(b) - 1; i >= 0; --i) {
Tim Peters47e52ee2004-08-30 02:44:38 +00003692 const digit bi = b->ob_digit[i];
3693
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00003694 for (j = PyLong_SHIFT - 5; j >= 0; j -= 5) {
Tim Peters47e52ee2004-08-30 02:44:38 +00003695 const int index = (bi >> j) & 0x1f;
3696 for (k = 0; k < 5; ++k)
3697 MULT(z, z, z)
3698 if (index)
3699 MULT(z, table[index], z)
3700 }
3701 }
3702 }
3703
Christian Heimes90aa7642007-12-19 02:45:37 +00003704 if (negativeOutput && (Py_SIZE(z) != 0)) {
Tim Peters47e52ee2004-08-30 02:44:38 +00003705 temp = (PyLongObject *)long_sub(z, c);
3706 if (temp == NULL)
3707 goto Error;
3708 Py_DECREF(z);
3709 z = temp;
3710 temp = NULL;
3711 }
3712 goto Done;
3713
3714 Error:
3715 if (z != NULL) {
3716 Py_DECREF(z);
3717 z = NULL;
3718 }
3719 /* fall through */
3720 Done:
Christian Heimes90aa7642007-12-19 02:45:37 +00003721 if (Py_SIZE(b) > FIVEARY_CUTOFF) {
Tim Peters47e52ee2004-08-30 02:44:38 +00003722 for (i = 0; i < 32; ++i)
3723 Py_XDECREF(table[i]);
3724 }
Tim Petersde7990b2005-07-17 23:45:23 +00003725 Py_DECREF(a);
3726 Py_DECREF(b);
3727 Py_XDECREF(c);
3728 Py_XDECREF(temp);
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003729 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003730}
3731
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003732static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003733long_invert(PyLongObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003734{
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003735 /* Implement ~x as -(x+1) */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003736 PyLongObject *x;
3737 PyLongObject *w;
Christian Heimes90aa7642007-12-19 02:45:37 +00003738 if (ABS(Py_SIZE(v)) <=1)
Guido van Rossumddefaf32007-01-14 03:31:43 +00003739 return PyLong_FromLong(-(MEDIUM_VALUE(v)+1));
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003740 w = (PyLongObject *)PyLong_FromLong(1L);
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003741 if (w == NULL)
3742 return NULL;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003743 x = (PyLongObject *) long_add(v, w);
3744 Py_DECREF(w);
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003745 if (x == NULL)
3746 return NULL;
Christian Heimes90aa7642007-12-19 02:45:37 +00003747 Py_SIZE(x) = -(Py_SIZE(x));
Facundo Batista6e6f59b2008-07-24 18:57:11 +00003748 return (PyObject *)maybe_small_long(x);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003749}
3750
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003751static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003752long_neg(PyLongObject *v)
Guido van Rossumc6913e71991-11-19 20:26:46 +00003753{
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003754 PyLongObject *z;
Christian Heimes90aa7642007-12-19 02:45:37 +00003755 if (ABS(Py_SIZE(v)) <= 1)
Guido van Rossumddefaf32007-01-14 03:31:43 +00003756 return PyLong_FromLong(-MEDIUM_VALUE(v));
Tim Peters69c2de32001-09-11 22:31:33 +00003757 z = (PyLongObject *)_PyLong_Copy(v);
3758 if (z != NULL)
Christian Heimes90aa7642007-12-19 02:45:37 +00003759 Py_SIZE(z) = -(Py_SIZE(v));
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003760 return (PyObject *)z;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003761}
3762
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003763static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003764long_abs(PyLongObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003765{
Christian Heimes90aa7642007-12-19 02:45:37 +00003766 if (Py_SIZE(v) < 0)
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003767 return long_neg(v);
Tim Peters69c2de32001-09-11 22:31:33 +00003768 else
Guido van Rossumb43daf72007-08-01 18:08:08 +00003769 return long_long((PyObject *)v);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003770}
3771
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00003772static int
Jack Diederich4dafcc42006-11-28 19:15:13 +00003773long_bool(PyLongObject *v)
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00003774{
Christian Heimes90aa7642007-12-19 02:45:37 +00003775 return ABS(Py_SIZE(v)) != 0;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003776}
3777
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003778static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003779long_rshift(PyLongObject *a, PyLongObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00003780{
Neil Schemenauerba872e22001-01-04 01:46:03 +00003781 PyLongObject *z = NULL;
Mark Dickinson3318d292010-04-06 16:53:17 +00003782 Py_ssize_t shiftby, newsize, wordshift, loshift, hishift, i, j;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003783 digit lomask, himask;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003784
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003785 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003786
Christian Heimes90aa7642007-12-19 02:45:37 +00003787 if (Py_SIZE(a) < 0) {
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003788 /* Right shifting negative numbers is harder */
Neil Schemenauerba872e22001-01-04 01:46:03 +00003789 PyLongObject *a1, *a2;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003790 a1 = (PyLongObject *) long_invert(a);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003791 if (a1 == NULL)
3792 goto rshift_error;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003793 a2 = (PyLongObject *) long_rshift(a1, b);
3794 Py_DECREF(a1);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003795 if (a2 == NULL)
3796 goto rshift_error;
3797 z = (PyLongObject *) long_invert(a2);
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003798 Py_DECREF(a2);
Guido van Rossumc6913e71991-11-19 20:26:46 +00003799 }
Neil Schemenauerba872e22001-01-04 01:46:03 +00003800 else {
Mark Dickinson3318d292010-04-06 16:53:17 +00003801 shiftby = PyLong_AsSsize_t((PyObject *)b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003802 if (shiftby == -1L && PyErr_Occurred())
3803 goto rshift_error;
3804 if (shiftby < 0) {
3805 PyErr_SetString(PyExc_ValueError,
3806 "negative shift count");
3807 goto rshift_error;
3808 }
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00003809 wordshift = shiftby / PyLong_SHIFT;
Christian Heimes90aa7642007-12-19 02:45:37 +00003810 newsize = ABS(Py_SIZE(a)) - wordshift;
Facundo Batista6e6f59b2008-07-24 18:57:11 +00003811 if (newsize <= 0)
3812 return PyLong_FromLong(0);
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00003813 loshift = shiftby % PyLong_SHIFT;
3814 hishift = PyLong_SHIFT - loshift;
Neil Schemenauerba872e22001-01-04 01:46:03 +00003815 lomask = ((digit)1 << hishift) - 1;
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00003816 himask = PyLong_MASK ^ lomask;
Neil Schemenauerba872e22001-01-04 01:46:03 +00003817 z = _PyLong_New(newsize);
3818 if (z == NULL)
3819 goto rshift_error;
Christian Heimes90aa7642007-12-19 02:45:37 +00003820 if (Py_SIZE(a) < 0)
3821 Py_SIZE(z) = -(Py_SIZE(z));
Neil Schemenauerba872e22001-01-04 01:46:03 +00003822 for (i = 0, j = wordshift; i < newsize; i++, j++) {
3823 z->ob_digit[i] = (a->ob_digit[j] >> loshift) & lomask;
3824 if (i+1 < newsize)
3825 z->ob_digit[i] |=
3826 (a->ob_digit[j+1] << hishift) & himask;
3827 }
3828 z = long_normalize(z);
Guido van Rossumc6913e71991-11-19 20:26:46 +00003829 }
Neil Schemenauerba872e22001-01-04 01:46:03 +00003830rshift_error:
Facundo Batista6e6f59b2008-07-24 18:57:11 +00003831 return (PyObject *) maybe_small_long(z);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003832
Guido van Rossumc6913e71991-11-19 20:26:46 +00003833}
3834
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003835static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00003836long_lshift(PyObject *v, PyObject *w)
Guido van Rossumc6913e71991-11-19 20:26:46 +00003837{
Guido van Rossumf2e499b1997-03-16 00:37:59 +00003838 /* This version due to Tim Peters */
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003839 PyLongObject *a = (PyLongObject*)v;
3840 PyLongObject *b = (PyLongObject*)w;
Neil Schemenauerba872e22001-01-04 01:46:03 +00003841 PyLongObject *z = NULL;
Mark Dickinson3318d292010-04-06 16:53:17 +00003842 Py_ssize_t shiftby, oldsize, newsize, wordshift, remshift, i, j;
Guido van Rossumf2e499b1997-03-16 00:37:59 +00003843 twodigits accum;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003844
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003845 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003846
Mark Dickinson3318d292010-04-06 16:53:17 +00003847 shiftby = PyLong_AsSsize_t((PyObject *)b);
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003848 if (shiftby == -1L && PyErr_Occurred())
Neil Schemenauerba872e22001-01-04 01:46:03 +00003849 goto lshift_error;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003850 if (shiftby < 0) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003851 PyErr_SetString(PyExc_ValueError, "negative shift count");
Neil Schemenauerba872e22001-01-04 01:46:03 +00003852 goto lshift_error;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003853 }
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00003854 /* wordshift, remshift = divmod(shiftby, PyLong_SHIFT) */
Mark Dickinson3318d292010-04-06 16:53:17 +00003855 wordshift = shiftby / PyLong_SHIFT;
3856 remshift = shiftby - wordshift * PyLong_SHIFT;
Guido van Rossumf2e499b1997-03-16 00:37:59 +00003857
Christian Heimes90aa7642007-12-19 02:45:37 +00003858 oldsize = ABS(Py_SIZE(a));
Guido van Rossumf2e499b1997-03-16 00:37:59 +00003859 newsize = oldsize + wordshift;
3860 if (remshift)
3861 ++newsize;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003862 z = _PyLong_New(newsize);
Guido van Rossumc6913e71991-11-19 20:26:46 +00003863 if (z == NULL)
Neil Schemenauerba872e22001-01-04 01:46:03 +00003864 goto lshift_error;
Christian Heimes90aa7642007-12-19 02:45:37 +00003865 if (Py_SIZE(a) < 0)
Guido van Rossumddefaf32007-01-14 03:31:43 +00003866 NEGATE(z);
Guido van Rossumc6913e71991-11-19 20:26:46 +00003867 for (i = 0; i < wordshift; i++)
3868 z->ob_digit[i] = 0;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003869 accum = 0;
Guido van Rossumf2e499b1997-03-16 00:37:59 +00003870 for (i = wordshift, j = 0; j < oldsize; i++, j++) {
Tim Peters0d2d87d2002-08-20 19:00:22 +00003871 accum |= (twodigits)a->ob_digit[j] << remshift;
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00003872 z->ob_digit[i] = (digit)(accum & PyLong_MASK);
3873 accum >>= PyLong_SHIFT;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003874 }
Guido van Rossumf2e499b1997-03-16 00:37:59 +00003875 if (remshift)
3876 z->ob_digit[newsize-1] = (digit)accum;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003877 else
Guido van Rossumf2e499b1997-03-16 00:37:59 +00003878 assert(!accum);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003879 z = long_normalize(z);
3880lshift_error:
Facundo Batista6e6f59b2008-07-24 18:57:11 +00003881 return (PyObject *) maybe_small_long(z);
Guido van Rossumc6913e71991-11-19 20:26:46 +00003882}
3883
Mark Dickinson27a87a22009-10-25 20:43:34 +00003884/* Compute two's complement of digit vector a[0:m], writing result to
3885 z[0:m]. The digit vector a need not be normalized, but should not
3886 be entirely zero. a and z may point to the same digit vector. */
3887
3888static void
3889v_complement(digit *z, digit *a, Py_ssize_t m)
3890{
3891 Py_ssize_t i;
3892 digit carry = 1;
3893 for (i = 0; i < m; ++i) {
3894 carry += a[i] ^ PyLong_MASK;
3895 z[i] = carry & PyLong_MASK;
3896 carry >>= PyLong_SHIFT;
3897 }
3898 assert(carry == 0);
3899}
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003900
3901/* Bitwise and/xor/or operations */
3902
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003903static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003904long_bitwise(PyLongObject *a,
3905 int op, /* '&', '|', '^' */
3906 PyLongObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00003907{
Mark Dickinson27a87a22009-10-25 20:43:34 +00003908 int nega, negb, negz;
Mark Dickinsone4416742009-02-15 15:14:57 +00003909 Py_ssize_t size_a, size_b, size_z, i;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003910 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003911
Mark Dickinson27a87a22009-10-25 20:43:34 +00003912 /* Bitwise operations for negative numbers operate as though
3913 on a two's complement representation. So convert arguments
3914 from sign-magnitude to two's complement, and convert the
3915 result back to sign-magnitude at the end. */
3916
3917 /* If a is negative, replace it by its two's complement. */
3918 size_a = ABS(Py_SIZE(a));
3919 nega = Py_SIZE(a) < 0;
3920 if (nega) {
3921 z = _PyLong_New(size_a);
3922 if (z == NULL)
Hye-Shik Chang4af5c8c2006-03-07 15:39:21 +00003923 return NULL;
Mark Dickinson27a87a22009-10-25 20:43:34 +00003924 v_complement(z->ob_digit, a->ob_digit, size_a);
3925 a = z;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003926 }
Mark Dickinson27a87a22009-10-25 20:43:34 +00003927 else
3928 /* Keep reference count consistent. */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003929 Py_INCREF(a);
Mark Dickinson27a87a22009-10-25 20:43:34 +00003930
3931 /* Same for b. */
3932 size_b = ABS(Py_SIZE(b));
3933 negb = Py_SIZE(b) < 0;
3934 if (negb) {
3935 z = _PyLong_New(size_b);
3936 if (z == NULL) {
Hye-Shik Chang4af5c8c2006-03-07 15:39:21 +00003937 Py_DECREF(a);
3938 return NULL;
3939 }
Mark Dickinson27a87a22009-10-25 20:43:34 +00003940 v_complement(z->ob_digit, b->ob_digit, size_b);
3941 b = z;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003942 }
Mark Dickinson27a87a22009-10-25 20:43:34 +00003943 else
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003944 Py_INCREF(b);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003945
Mark Dickinson27a87a22009-10-25 20:43:34 +00003946 /* Swap a and b if necessary to ensure size_a >= size_b. */
3947 if (size_a < size_b) {
3948 z = a; a = b; b = z;
3949 size_z = size_a; size_a = size_b; size_b = size_z;
3950 negz = nega; nega = negb; negb = negz;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003951 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00003952
Guido van Rossumbd3a5271998-08-11 15:04:47 +00003953 /* JRH: The original logic here was to allocate the result value (z)
3954 as the longer of the two operands. However, there are some cases
3955 where the result is guaranteed to be shorter than that: AND of two
3956 positives, OR of two negatives: use the shorter number. AND with
3957 mixed signs: use the positive number. OR with mixed signs: use the
Mark Dickinson27a87a22009-10-25 20:43:34 +00003958 negative number.
Guido van Rossumbd3a5271998-08-11 15:04:47 +00003959 */
Mark Dickinson27a87a22009-10-25 20:43:34 +00003960 switch (op) {
3961 case '^':
3962 negz = nega ^ negb;
3963 size_z = size_a;
3964 break;
3965 case '&':
3966 negz = nega & negb;
3967 size_z = negb ? size_a : size_b;
3968 break;
3969 case '|':
3970 negz = nega | negb;
3971 size_z = negb ? size_b : size_a;
3972 break;
3973 default:
3974 PyErr_BadArgument();
3975 return NULL;
3976 }
Guido van Rossumbd3a5271998-08-11 15:04:47 +00003977
Mark Dickinson27a87a22009-10-25 20:43:34 +00003978 /* We allow an extra digit if z is negative, to make sure that
3979 the final two's complement of z doesn't overflow. */
3980 z = _PyLong_New(size_z + negz);
Hye-Shik Chang4af5c8c2006-03-07 15:39:21 +00003981 if (z == NULL) {
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003982 Py_DECREF(a);
3983 Py_DECREF(b);
Guido van Rossumbd3a5271998-08-11 15:04:47 +00003984 return NULL;
3985 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00003986
Mark Dickinson27a87a22009-10-25 20:43:34 +00003987 /* Compute digits for overlap of a and b. */
3988 switch(op) {
3989 case '&':
3990 for (i = 0; i < size_b; ++i)
3991 z->ob_digit[i] = a->ob_digit[i] & b->ob_digit[i];
3992 break;
3993 case '|':
3994 for (i = 0; i < size_b; ++i)
3995 z->ob_digit[i] = a->ob_digit[i] | b->ob_digit[i];
3996 break;
3997 case '^':
3998 for (i = 0; i < size_b; ++i)
3999 z->ob_digit[i] = a->ob_digit[i] ^ b->ob_digit[i];
4000 break;
4001 default:
4002 PyErr_BadArgument();
4003 return NULL;
4004 }
4005
4006 /* Copy any remaining digits of a, inverting if necessary. */
4007 if (op == '^' && negb)
4008 for (; i < size_z; ++i)
4009 z->ob_digit[i] = a->ob_digit[i] ^ PyLong_MASK;
4010 else if (i < size_z)
4011 memcpy(&z->ob_digit[i], &a->ob_digit[i],
4012 (size_z-i)*sizeof(digit));
4013
4014 /* Complement result if negative. */
4015 if (negz) {
4016 Py_SIZE(z) = -(Py_SIZE(z));
4017 z->ob_digit[size_z] = PyLong_MASK;
4018 v_complement(z->ob_digit, z->ob_digit, size_z+1);
Guido van Rossumafbb8db1991-12-31 13:14:13 +00004019 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00004020
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004021 Py_DECREF(a);
4022 Py_DECREF(b);
Mark Dickinson27a87a22009-10-25 20:43:34 +00004023 return (PyObject *)maybe_small_long(long_normalize(z));
Guido van Rossumc6913e71991-11-19 20:26:46 +00004024}
4025
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004026static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00004027long_and(PyObject *a, PyObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00004028{
Neil Schemenauerba872e22001-01-04 01:46:03 +00004029 PyObject *c;
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00004030 CHECK_BINOP(a, b);
4031 c = long_bitwise((PyLongObject*)a, '&', (PyLongObject*)b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00004032 return c;
Guido van Rossumc6913e71991-11-19 20:26:46 +00004033}
4034
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004035static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00004036long_xor(PyObject *a, PyObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00004037{
Neil Schemenauerba872e22001-01-04 01:46:03 +00004038 PyObject *c;
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00004039 CHECK_BINOP(a, b);
4040 c = long_bitwise((PyLongObject*)a, '^', (PyLongObject*)b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00004041 return c;
Guido van Rossumc6913e71991-11-19 20:26:46 +00004042}
4043
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004044static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00004045long_or(PyObject *a, PyObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00004046{
Neil Schemenauerba872e22001-01-04 01:46:03 +00004047 PyObject *c;
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00004048 CHECK_BINOP(a, b);
4049 c = long_bitwise((PyLongObject*)a, '|', (PyLongObject*)b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00004050 return c;
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00004051}
4052
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004053static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00004054long_long(PyObject *v)
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004055{
Brett Cannonc3647ac2005-04-26 03:45:26 +00004056 if (PyLong_CheckExact(v))
4057 Py_INCREF(v);
4058 else
4059 v = _PyLong_Copy((PyLongObject *)v);
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004060 return v;
4061}
4062
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004063static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00004064long_float(PyObject *v)
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004065{
Guido van Rossum09e6ad01997-02-14 22:54:21 +00004066 double result;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004067 result = PyLong_AsDouble(v);
Tim Peters9fffa3e2001-09-04 05:14:19 +00004068 if (result == -1.0 && PyErr_Occurred())
4069 return NULL;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004070 return PyFloat_FromDouble(result);
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004071}
4072
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004073static PyObject *
Guido van Rossumbef14172001-08-29 15:47:46 +00004074long_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004075
Tim Peters6d6c1a32001-08-02 04:15:00 +00004076static PyObject *
4077long_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
4078{
4079 PyObject *x = NULL;
4080 int base = -909; /* unlikely! */
Martin v. Löwis15e62742006-02-27 16:46:16 +00004081 static char *kwlist[] = {"x", "base", 0};
Tim Peters6d6c1a32001-08-02 04:15:00 +00004082
Guido van Rossumbef14172001-08-29 15:47:46 +00004083 if (type != &PyLong_Type)
4084 return long_subtype_new(type, args, kwds); /* Wimp out */
Guido van Rossumddefaf32007-01-14 03:31:43 +00004085 if (!PyArg_ParseTupleAndKeywords(args, kwds, "|Oi:int", kwlist,
Tim Peters6d6c1a32001-08-02 04:15:00 +00004086 &x, &base))
4087 return NULL;
4088 if (x == NULL)
4089 return PyLong_FromLong(0L);
4090 if (base == -909)
4091 return PyNumber_Long(x);
Guido van Rossum98297ee2007-11-06 21:34:58 +00004092 else if (PyUnicode_Check(x))
4093 return PyLong_FromUnicode(PyUnicode_AS_UNICODE(x),
4094 PyUnicode_GET_SIZE(x),
4095 base);
Christian Heimes72b710a2008-05-26 13:28:38 +00004096 else if (PyByteArray_Check(x) || PyBytes_Check(x)) {
Guido van Rossumd8faa362007-04-27 19:54:29 +00004097 /* Since PyLong_FromString doesn't have a length parameter,
4098 * check here for possible NULs in the string. */
Guido van Rossum98297ee2007-11-06 21:34:58 +00004099 char *string;
Mark Dickinson5a74bf62009-02-15 11:04:38 +00004100 Py_ssize_t size = Py_SIZE(x);
Christian Heimes9c4756e2008-05-26 13:22:05 +00004101 if (PyByteArray_Check(x))
4102 string = PyByteArray_AS_STRING(x);
Guido van Rossum98297ee2007-11-06 21:34:58 +00004103 else
Christian Heimes72b710a2008-05-26 13:28:38 +00004104 string = PyBytes_AS_STRING(x);
Mark Dickinson5a74bf62009-02-15 11:04:38 +00004105 if (strlen(string) != (size_t)size) {
Guido van Rossum25236212007-08-22 23:28:23 +00004106 /* We only see this if there's a null byte in x,
Guido van Rossum98297ee2007-11-06 21:34:58 +00004107 x is a bytes or buffer, *and* a base is given. */
Guido van Rossumd8faa362007-04-27 19:54:29 +00004108 PyErr_Format(PyExc_ValueError,
Guido van Rossum25236212007-08-22 23:28:23 +00004109 "invalid literal for int() with base %d: %R",
4110 base, x);
Guido van Rossumd8faa362007-04-27 19:54:29 +00004111 return NULL;
Guido van Rossumddefaf32007-01-14 03:31:43 +00004112 }
Guido van Rossum4581ae52007-05-22 21:56:47 +00004113 return PyLong_FromString(string, NULL, base);
Guido van Rossumddefaf32007-01-14 03:31:43 +00004114 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00004115 else {
4116 PyErr_SetString(PyExc_TypeError,
Guido van Rossumddefaf32007-01-14 03:31:43 +00004117 "int() can't convert non-string with explicit base");
Tim Peters6d6c1a32001-08-02 04:15:00 +00004118 return NULL;
4119 }
4120}
4121
Guido van Rossumbef14172001-08-29 15:47:46 +00004122/* Wimpy, slow approach to tp_new calls for subtypes of long:
4123 first create a regular long from whatever arguments we got,
4124 then allocate a subtype instance and initialize it from
4125 the regular long. The regular long is then thrown away.
4126*/
4127static PyObject *
4128long_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
4129{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004130 PyLongObject *tmp, *newobj;
Martin v. Löwis18e16552006-02-15 17:27:45 +00004131 Py_ssize_t i, n;
Guido van Rossumbef14172001-08-29 15:47:46 +00004132
4133 assert(PyType_IsSubtype(type, &PyLong_Type));
4134 tmp = (PyLongObject *)long_new(&PyLong_Type, args, kwds);
4135 if (tmp == NULL)
4136 return NULL;
Tim Peters64b5ce32001-09-10 20:52:51 +00004137 assert(PyLong_CheckExact(tmp));
Christian Heimes90aa7642007-12-19 02:45:37 +00004138 n = Py_SIZE(tmp);
Guido van Rossumbef14172001-08-29 15:47:46 +00004139 if (n < 0)
4140 n = -n;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004141 newobj = (PyLongObject *)type->tp_alloc(type, n);
4142 if (newobj == NULL) {
Raymond Hettingerf4667932003-06-28 20:04:25 +00004143 Py_DECREF(tmp);
Guido van Rossumbef14172001-08-29 15:47:46 +00004144 return NULL;
Raymond Hettingerf4667932003-06-28 20:04:25 +00004145 }
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004146 assert(PyLong_Check(newobj));
Christian Heimes90aa7642007-12-19 02:45:37 +00004147 Py_SIZE(newobj) = Py_SIZE(tmp);
Guido van Rossumbef14172001-08-29 15:47:46 +00004148 for (i = 0; i < n; i++)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004149 newobj->ob_digit[i] = tmp->ob_digit[i];
Guido van Rossumbef14172001-08-29 15:47:46 +00004150 Py_DECREF(tmp);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004151 return (PyObject *)newobj;
Guido van Rossumbef14172001-08-29 15:47:46 +00004152}
4153
Guido van Rossum5d9113d2003-01-29 17:58:45 +00004154static PyObject *
4155long_getnewargs(PyLongObject *v)
4156{
4157 return Py_BuildValue("(N)", _PyLong_Copy(v));
4158}
4159
Guido van Rossumb43daf72007-08-01 18:08:08 +00004160static PyObject *
Mark Dickinson6bf19002009-05-02 17:57:52 +00004161long_get0(PyLongObject *v, void *context) {
4162 return PyLong_FromLong(0L);
4163}
4164
4165static PyObject *
4166long_get1(PyLongObject *v, void *context) {
4167 return PyLong_FromLong(1L);
Guido van Rossumb43daf72007-08-01 18:08:08 +00004168}
4169
Guido van Rossum2fa33db2007-08-23 22:07:24 +00004170static PyObject *
Eric Smith8c663262007-08-25 02:26:07 +00004171long__format__(PyObject *self, PyObject *args)
4172{
Eric Smith4a7d76d2008-05-30 18:10:19 +00004173 PyObject *format_spec;
4174
4175 if (!PyArg_ParseTuple(args, "U:__format__", &format_spec))
4176 return NULL;
4177 return _PyLong_FormatAdvanced(self,
4178 PyUnicode_AS_UNICODE(format_spec),
4179 PyUnicode_GET_SIZE(format_spec));
Eric Smith8c663262007-08-25 02:26:07 +00004180}
4181
Eric Smith8c663262007-08-25 02:26:07 +00004182static PyObject *
Guido van Rossum2fa33db2007-08-23 22:07:24 +00004183long_round(PyObject *self, PyObject *args)
4184{
Mark Dickinson1124e712009-01-28 21:25:58 +00004185 PyObject *o_ndigits=NULL, *temp;
4186 PyLongObject *pow=NULL, *q=NULL, *r=NULL, *ndigits=NULL, *one;
4187 int errcode;
4188 digit q_mod_4;
Guido van Rossum2fa33db2007-08-23 22:07:24 +00004189
Mark Dickinson1124e712009-01-28 21:25:58 +00004190 /* Notes on the algorithm: to round to the nearest 10**n (n positive),
4191 the straightforward method is:
4192
4193 (1) divide by 10**n
4194 (2) round to nearest integer (round to even in case of tie)
4195 (3) multiply result by 10**n.
4196
4197 But the rounding step involves examining the fractional part of the
4198 quotient to see whether it's greater than 0.5 or not. Since we
4199 want to do the whole calculation in integer arithmetic, it's
4200 simpler to do:
4201
4202 (1) divide by (10**n)/2
4203 (2) round to nearest multiple of 2 (multiple of 4 in case of tie)
4204 (3) multiply result by (10**n)/2.
4205
4206 Then all we need to know about the fractional part of the quotient
4207 arising in step (2) is whether it's zero or not.
4208
4209 Doing both a multiplication and division is wasteful, and is easily
4210 avoided if we just figure out how much to adjust the original input
4211 by to do the rounding.
4212
4213 Here's the whole algorithm expressed in Python.
4214
4215 def round(self, ndigits = None):
4216 """round(int, int) -> int"""
4217 if ndigits is None or ndigits >= 0:
4218 return self
4219 pow = 10**-ndigits >> 1
4220 q, r = divmod(self, pow)
4221 self -= r
4222 if (q & 1 != 0):
4223 if (q & 2 == r == 0):
4224 self -= pow
4225 else:
4226 self += pow
4227 return self
4228
4229 */
4230 if (!PyArg_ParseTuple(args, "|O", &o_ndigits))
4231 return NULL;
4232 if (o_ndigits == NULL)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00004233 return long_long(self);
4234
Mark Dickinson1124e712009-01-28 21:25:58 +00004235 ndigits = (PyLongObject *)PyNumber_Index(o_ndigits);
4236 if (ndigits == NULL)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00004237 return NULL;
Mark Dickinson1124e712009-01-28 21:25:58 +00004238
4239 if (Py_SIZE(ndigits) >= 0) {
4240 Py_DECREF(ndigits);
4241 return long_long(self);
4242 }
4243
4244 Py_INCREF(self); /* to keep refcounting simple */
4245 /* we now own references to self, ndigits */
4246
4247 /* pow = 10 ** -ndigits >> 1 */
4248 pow = (PyLongObject *)PyLong_FromLong(10L);
4249 if (pow == NULL)
4250 goto error;
4251 temp = long_neg(ndigits);
4252 Py_DECREF(ndigits);
4253 ndigits = (PyLongObject *)temp;
4254 if (ndigits == NULL)
4255 goto error;
4256 temp = long_pow((PyObject *)pow, (PyObject *)ndigits, Py_None);
4257 Py_DECREF(pow);
4258 pow = (PyLongObject *)temp;
4259 if (pow == NULL)
4260 goto error;
4261 assert(PyLong_Check(pow)); /* check long_pow returned a long */
4262 one = (PyLongObject *)PyLong_FromLong(1L);
4263 if (one == NULL)
4264 goto error;
4265 temp = long_rshift(pow, one);
4266 Py_DECREF(one);
4267 Py_DECREF(pow);
4268 pow = (PyLongObject *)temp;
4269 if (pow == NULL)
4270 goto error;
4271
4272 /* q, r = divmod(self, pow) */
4273 errcode = l_divmod((PyLongObject *)self, pow, &q, &r);
4274 if (errcode == -1)
4275 goto error;
4276
4277 /* self -= r */
4278 temp = long_sub((PyLongObject *)self, r);
Guido van Rossum2fa33db2007-08-23 22:07:24 +00004279 Py_DECREF(self);
Mark Dickinson1124e712009-01-28 21:25:58 +00004280 self = temp;
4281 if (self == NULL)
4282 goto error;
4283
4284 /* get value of quotient modulo 4 */
4285 if (Py_SIZE(q) == 0)
4286 q_mod_4 = 0;
4287 else if (Py_SIZE(q) > 0)
4288 q_mod_4 = q->ob_digit[0] & 3;
4289 else
4290 q_mod_4 = (PyLong_BASE-q->ob_digit[0]) & 3;
4291
4292 if ((q_mod_4 & 1) == 1) {
4293 /* q is odd; round self up or down by adding or subtracting pow */
4294 if (q_mod_4 == 1 && Py_SIZE(r) == 0)
4295 temp = (PyObject *)long_sub((PyLongObject *)self, pow);
4296 else
4297 temp = (PyObject *)long_add((PyLongObject *)self, pow);
4298 Py_DECREF(self);
4299 self = temp;
4300 if (self == NULL)
4301 goto error;
4302 }
4303 Py_DECREF(q);
4304 Py_DECREF(r);
4305 Py_DECREF(pow);
4306 Py_DECREF(ndigits);
4307 return self;
4308
4309 error:
4310 Py_XDECREF(q);
4311 Py_XDECREF(r);
4312 Py_XDECREF(pow);
4313 Py_XDECREF(self);
4314 Py_XDECREF(ndigits);
4315 return NULL;
Guido van Rossum2fa33db2007-08-23 22:07:24 +00004316}
4317
Martin v. Löwis00709aa2008-06-04 14:18:43 +00004318static PyObject *
4319long_sizeof(PyLongObject *v)
4320{
4321 Py_ssize_t res;
4322
Mark Dickinson5a74bf62009-02-15 11:04:38 +00004323 res = offsetof(PyLongObject, ob_digit) + ABS(Py_SIZE(v))*sizeof(digit);
Martin v. Löwis00709aa2008-06-04 14:18:43 +00004324 return PyLong_FromSsize_t(res);
4325}
4326
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004327static PyObject *
4328long_bit_length(PyLongObject *v)
4329{
4330 PyLongObject *result, *x, *y;
4331 Py_ssize_t ndigits, msd_bits = 0;
4332 digit msd;
4333
4334 assert(v != NULL);
4335 assert(PyLong_Check(v));
4336
4337 ndigits = ABS(Py_SIZE(v));
4338 if (ndigits == 0)
4339 return PyLong_FromLong(0);
4340
4341 msd = v->ob_digit[ndigits-1];
4342 while (msd >= 32) {
4343 msd_bits += 6;
4344 msd >>= 6;
4345 }
4346 msd_bits += (long)(BitLengthTable[msd]);
4347
4348 if (ndigits <= PY_SSIZE_T_MAX/PyLong_SHIFT)
4349 return PyLong_FromSsize_t((ndigits-1)*PyLong_SHIFT + msd_bits);
4350
4351 /* expression above may overflow; use Python integers instead */
4352 result = (PyLongObject *)PyLong_FromSsize_t(ndigits - 1);
4353 if (result == NULL)
4354 return NULL;
4355 x = (PyLongObject *)PyLong_FromLong(PyLong_SHIFT);
4356 if (x == NULL)
4357 goto error;
4358 y = (PyLongObject *)long_mul(result, x);
4359 Py_DECREF(x);
4360 if (y == NULL)
4361 goto error;
4362 Py_DECREF(result);
4363 result = y;
4364
Stefan Krah0091e5e2010-04-07 08:49:55 +00004365 x = (PyLongObject *)PyLong_FromLong((long)msd_bits);
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004366 if (x == NULL)
4367 goto error;
4368 y = (PyLongObject *)long_add(result, x);
4369 Py_DECREF(x);
4370 if (y == NULL)
4371 goto error;
4372 Py_DECREF(result);
4373 result = y;
4374
4375 return (PyObject *)result;
4376
4377error:
4378 Py_DECREF(result);
4379 return NULL;
4380}
4381
4382PyDoc_STRVAR(long_bit_length_doc,
4383"int.bit_length() -> int\n\
4384\n\
4385Number of bits necessary to represent self in binary.\n\
4386>>> bin(37)\n\
4387'0b100101'\n\
4388>>> (37).bit_length()\n\
43896");
4390
Christian Heimes53876d92008-04-19 00:31:39 +00004391#if 0
4392static PyObject *
4393long_is_finite(PyObject *v)
4394{
4395 Py_RETURN_TRUE;
4396}
4397#endif
4398
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004399
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004400static PyObject *
4401long_to_bytes(PyLongObject *v, PyObject *args, PyObject *kwds)
4402{
4403 PyObject *byteorder_str;
4404 PyObject *is_signed_obj = NULL;
4405 Py_ssize_t length;
4406 int little_endian;
4407 int is_signed;
4408 PyObject *bytes;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004409 static char *kwlist[] = {"length", "byteorder", "signed", NULL};
4410
Benjamin Peterson0c0e2292010-01-09 21:50:11 +00004411 if (!PyArg_ParseTupleAndKeywords(args, kwds, "nU|O:to_bytes", kwlist,
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004412 &length, &byteorder_str,
4413 &is_signed_obj))
4414 return NULL;
4415
4416 if (args != NULL && Py_SIZE(args) > 2) {
4417 PyErr_SetString(PyExc_TypeError,
4418 "'signed' is a keyword-only argument");
4419 return NULL;
4420 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004421
Benjamin Peterson0c0e2292010-01-09 21:50:11 +00004422 if (!PyUnicode_CompareWithASCIIString(byteorder_str, "little"))
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004423 little_endian = 1;
Benjamin Peterson0c0e2292010-01-09 21:50:11 +00004424 else if (!PyUnicode_CompareWithASCIIString(byteorder_str, "big"))
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004425 little_endian = 0;
4426 else {
4427 PyErr_SetString(PyExc_ValueError,
4428 "byteorder must be either 'little' or 'big'");
4429 return NULL;
4430 }
4431
4432 if (is_signed_obj != NULL) {
4433 int cmp = PyObject_IsTrue(is_signed_obj);
4434 if (cmp < 0)
4435 return NULL;
4436 is_signed = cmp ? 1 : 0;
4437 }
4438 else {
4439 /* If the signed argument was omitted, use False as the
4440 default. */
4441 is_signed = 0;
4442 }
4443
4444 if (length < 0) {
4445 PyErr_SetString(PyExc_ValueError,
4446 "length argument must be non-negative");
4447 return NULL;
4448 }
4449
4450 bytes = PyBytes_FromStringAndSize(NULL, length);
4451 if (bytes == NULL)
4452 return NULL;
4453
4454 if (_PyLong_AsByteArray(v, (unsigned char *)PyBytes_AS_STRING(bytes),
4455 length, little_endian, is_signed) < 0) {
4456 Py_DECREF(bytes);
4457 return NULL;
4458 }
4459
4460 return bytes;
4461}
4462
Mark Dickinson078c2532010-01-30 18:06:17 +00004463PyDoc_STRVAR(long_to_bytes_doc,
4464"int.to_bytes(length, byteorder, *, signed=False) -> bytes\n\
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004465\n\
Mark Dickinson078c2532010-01-30 18:06:17 +00004466Return an array of bytes representing an integer.\n\
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004467\n\
Mark Dickinson078c2532010-01-30 18:06:17 +00004468The integer is represented using length bytes. An OverflowError is\n\
4469raised if the integer is not representable with the given number of\n\
4470bytes.\n\
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004471\n\
4472The byteorder argument determines the byte order used to represent the\n\
4473integer. If byteorder is 'big', the most significant byte is at the\n\
4474beginning of the byte array. If byteorder is 'little', the most\n\
4475significant byte is at the end of the byte array. To request the native\n\
4476byte order of the host system, use `sys.byteorder' as the byte order value.\n\
4477\n\
Mark Dickinson078c2532010-01-30 18:06:17 +00004478The signed keyword-only argument determines whether two's complement is\n\
4479used to represent the integer. If signed is False and a negative integer\n\
4480is given, an OverflowError is raised.");
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004481
4482static PyObject *
4483long_from_bytes(PyTypeObject *type, PyObject *args, PyObject *kwds)
4484{
4485 PyObject *byteorder_str;
4486 PyObject *is_signed_obj = NULL;
4487 int little_endian;
4488 int is_signed;
4489 PyObject *obj;
4490 PyObject *bytes;
4491 PyObject *long_obj;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004492 static char *kwlist[] = {"bytes", "byteorder", "signed", NULL};
4493
Benjamin Peterson0c0e2292010-01-09 21:50:11 +00004494 if (!PyArg_ParseTupleAndKeywords(args, kwds, "OU|O:from_bytes", kwlist,
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004495 &obj, &byteorder_str,
4496 &is_signed_obj))
4497 return NULL;
4498
4499 if (args != NULL && Py_SIZE(args) > 2) {
4500 PyErr_SetString(PyExc_TypeError,
4501 "'signed' is a keyword-only argument");
4502 return NULL;
4503 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004504
Benjamin Peterson0c0e2292010-01-09 21:50:11 +00004505 if (!PyUnicode_CompareWithASCIIString(byteorder_str, "little"))
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004506 little_endian = 1;
Benjamin Peterson0c0e2292010-01-09 21:50:11 +00004507 else if (!PyUnicode_CompareWithASCIIString(byteorder_str, "big"))
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004508 little_endian = 0;
4509 else {
4510 PyErr_SetString(PyExc_ValueError,
4511 "byteorder must be either 'little' or 'big'");
4512 return NULL;
4513 }
4514
4515 if (is_signed_obj != NULL) {
4516 int cmp = PyObject_IsTrue(is_signed_obj);
4517 if (cmp < 0)
4518 return NULL;
4519 is_signed = cmp ? 1 : 0;
4520 }
4521 else {
4522 /* If the signed argument was omitted, use False as the
4523 default. */
4524 is_signed = 0;
4525 }
4526
4527 bytes = PyObject_Bytes(obj);
4528 if (bytes == NULL)
4529 return NULL;
4530
4531 long_obj = _PyLong_FromByteArray(
4532 (unsigned char *)PyBytes_AS_STRING(bytes), Py_SIZE(bytes),
4533 little_endian, is_signed);
4534 Py_DECREF(bytes);
4535
4536 /* If from_bytes() was used on subclass, allocate new subclass
4537 * instance, initialize it with decoded long value and return it.
4538 */
4539 if (type != &PyLong_Type && PyType_IsSubtype(type, &PyLong_Type)) {
4540 PyLongObject *newobj;
4541 int i;
4542 Py_ssize_t n = ABS(Py_SIZE(long_obj));
4543
4544 newobj = (PyLongObject *)type->tp_alloc(type, n);
4545 if (newobj == NULL) {
4546 Py_DECREF(long_obj);
4547 return NULL;
4548 }
4549 assert(PyLong_Check(newobj));
4550 Py_SIZE(newobj) = Py_SIZE(long_obj);
4551 for (i = 0; i < n; i++) {
4552 newobj->ob_digit[i] =
4553 ((PyLongObject *)long_obj)->ob_digit[i];
4554 }
4555 Py_DECREF(long_obj);
4556 return (PyObject *)newobj;
4557 }
4558
4559 return long_obj;
4560}
4561
Mark Dickinson078c2532010-01-30 18:06:17 +00004562PyDoc_STRVAR(long_from_bytes_doc,
4563"int.from_bytes(bytes, byteorder, *, signed=False) -> int\n\
4564\n\
4565Return the integer represented by the given array of bytes.\n\
4566\n\
4567The bytes argument must either support the buffer protocol or be an\n\
4568iterable object producing bytes. Bytes and bytearray are examples of\n\
4569built-in objects that support the buffer protocol.\n\
4570\n\
4571The byteorder argument determines the byte order used to represent the\n\
4572integer. If byteorder is 'big', the most significant byte is at the\n\
4573beginning of the byte array. If byteorder is 'little', the most\n\
4574significant byte is at the end of the byte array. To request the native\n\
4575byte order of the host system, use `sys.byteorder' as the byte order value.\n\
4576\n\
4577The signed keyword-only argument indicates whether two's complement is\n\
4578used to represent the integer.");
4579
Guido van Rossum5d9113d2003-01-29 17:58:45 +00004580static PyMethodDef long_methods[] = {
Guido van Rossumb43daf72007-08-01 18:08:08 +00004581 {"conjugate", (PyCFunction)long_long, METH_NOARGS,
4582 "Returns self, the complex conjugate of any int."},
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004583 {"bit_length", (PyCFunction)long_bit_length, METH_NOARGS,
4584 long_bit_length_doc},
Christian Heimes53876d92008-04-19 00:31:39 +00004585#if 0
4586 {"is_finite", (PyCFunction)long_is_finite, METH_NOARGS,
4587 "Returns always True."},
4588#endif
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004589 {"to_bytes", (PyCFunction)long_to_bytes,
4590 METH_VARARGS|METH_KEYWORDS, long_to_bytes_doc},
4591 {"from_bytes", (PyCFunction)long_from_bytes,
4592 METH_VARARGS|METH_KEYWORDS|METH_CLASS, long_from_bytes_doc},
Guido van Rossum2fa33db2007-08-23 22:07:24 +00004593 {"__trunc__", (PyCFunction)long_long, METH_NOARGS,
4594 "Truncating an Integral returns itself."},
4595 {"__floor__", (PyCFunction)long_long, METH_NOARGS,
4596 "Flooring an Integral returns itself."},
4597 {"__ceil__", (PyCFunction)long_long, METH_NOARGS,
4598 "Ceiling of an Integral returns itself."},
4599 {"__round__", (PyCFunction)long_round, METH_VARARGS,
Mark Dickinson1124e712009-01-28 21:25:58 +00004600 "Rounding an Integral returns itself.\n"
4601 "Rounding with an ndigits argument also returns an integer."},
Guido van Rossum5d9113d2003-01-29 17:58:45 +00004602 {"__getnewargs__", (PyCFunction)long_getnewargs, METH_NOARGS},
Eric Smith8c663262007-08-25 02:26:07 +00004603 {"__format__", (PyCFunction)long__format__, METH_VARARGS},
Martin v. Löwis00709aa2008-06-04 14:18:43 +00004604 {"__sizeof__", (PyCFunction)long_sizeof, METH_NOARGS,
4605 "Returns size in memory, in bytes"},
Guido van Rossum5d9113d2003-01-29 17:58:45 +00004606 {NULL, NULL} /* sentinel */
4607};
4608
Guido van Rossumb43daf72007-08-01 18:08:08 +00004609static PyGetSetDef long_getset[] = {
Mark Dickinson6bf19002009-05-02 17:57:52 +00004610 {"real",
Guido van Rossumb43daf72007-08-01 18:08:08 +00004611 (getter)long_long, (setter)NULL,
4612 "the real part of a complex number",
4613 NULL},
Mark Dickinson6bf19002009-05-02 17:57:52 +00004614 {"imag",
4615 (getter)long_get0, (setter)NULL,
Guido van Rossumb43daf72007-08-01 18:08:08 +00004616 "the imaginary part of a complex number",
Mark Dickinson6bf19002009-05-02 17:57:52 +00004617 NULL},
4618 {"numerator",
Guido van Rossumb43daf72007-08-01 18:08:08 +00004619 (getter)long_long, (setter)NULL,
4620 "the numerator of a rational number in lowest terms",
4621 NULL},
Mark Dickinson6bf19002009-05-02 17:57:52 +00004622 {"denominator",
4623 (getter)long_get1, (setter)NULL,
Guido van Rossumb43daf72007-08-01 18:08:08 +00004624 "the denominator of a rational number in lowest terms",
Mark Dickinson6bf19002009-05-02 17:57:52 +00004625 NULL},
Guido van Rossumb43daf72007-08-01 18:08:08 +00004626 {NULL} /* Sentinel */
4627};
4628
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004629PyDoc_STRVAR(long_doc,
Guido van Rossumddefaf32007-01-14 03:31:43 +00004630"int(x[, base]) -> integer\n\
Tim Peters6d6c1a32001-08-02 04:15:00 +00004631\n\
Guido van Rossumddefaf32007-01-14 03:31:43 +00004632Convert a string or number to an integer, if possible. A floating\n\
Tim Peters6d6c1a32001-08-02 04:15:00 +00004633point argument will be truncated towards zero (this does not include a\n\
4634string representation of a floating point number!) When converting a\n\
4635string, use the optional base. It is an error to supply a base when\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004636converting a non-string.");
Tim Peters6d6c1a32001-08-02 04:15:00 +00004637
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004638static PyNumberMethods long_as_number = {
Tim Peters9f688bf2000-07-07 15:53:28 +00004639 (binaryfunc) long_add, /*nb_add*/
4640 (binaryfunc) long_sub, /*nb_subtract*/
4641 (binaryfunc) long_mul, /*nb_multiply*/
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004642 long_mod, /*nb_remainder*/
4643 long_divmod, /*nb_divmod*/
4644 long_pow, /*nb_power*/
Tim Peters9f688bf2000-07-07 15:53:28 +00004645 (unaryfunc) long_neg, /*nb_negative*/
Guido van Rossumb43daf72007-08-01 18:08:08 +00004646 (unaryfunc) long_long, /*tp_positive*/
Tim Peters9f688bf2000-07-07 15:53:28 +00004647 (unaryfunc) long_abs, /*tp_absolute*/
Jack Diederich4dafcc42006-11-28 19:15:13 +00004648 (inquiry) long_bool, /*tp_bool*/
Tim Peters9f688bf2000-07-07 15:53:28 +00004649 (unaryfunc) long_invert, /*nb_invert*/
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004650 long_lshift, /*nb_lshift*/
Tim Peters9f688bf2000-07-07 15:53:28 +00004651 (binaryfunc) long_rshift, /*nb_rshift*/
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004652 long_and, /*nb_and*/
4653 long_xor, /*nb_xor*/
4654 long_or, /*nb_or*/
Guido van Rossumb43daf72007-08-01 18:08:08 +00004655 long_long, /*nb_int*/
Mark Dickinson8055afd2009-01-17 10:04:45 +00004656 0, /*nb_reserved*/
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004657 long_float, /*nb_float*/
Guido van Rossum4668b002001-08-08 05:00:18 +00004658 0, /* nb_inplace_add */
4659 0, /* nb_inplace_subtract */
4660 0, /* nb_inplace_multiply */
Guido van Rossum4668b002001-08-08 05:00:18 +00004661 0, /* nb_inplace_remainder */
4662 0, /* nb_inplace_power */
4663 0, /* nb_inplace_lshift */
4664 0, /* nb_inplace_rshift */
4665 0, /* nb_inplace_and */
4666 0, /* nb_inplace_xor */
4667 0, /* nb_inplace_or */
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004668 long_div, /* nb_floor_divide */
Guido van Rossum4668b002001-08-08 05:00:18 +00004669 long_true_divide, /* nb_true_divide */
4670 0, /* nb_inplace_floor_divide */
4671 0, /* nb_inplace_true_divide */
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00004672 long_long, /* nb_index */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00004673};
4674
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004675PyTypeObject PyLong_Type = {
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00004676 PyVarObject_HEAD_INIT(&PyType_Type, 0)
Guido van Rossumddefaf32007-01-14 03:31:43 +00004677 "int", /* tp_name */
Mark Dickinson5a74bf62009-02-15 11:04:38 +00004678 offsetof(PyLongObject, ob_digit), /* tp_basicsize */
Tim Peters6d6c1a32001-08-02 04:15:00 +00004679 sizeof(digit), /* tp_itemsize */
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004680 long_dealloc, /* tp_dealloc */
Tim Peters6d6c1a32001-08-02 04:15:00 +00004681 0, /* tp_print */
4682 0, /* tp_getattr */
4683 0, /* tp_setattr */
Mark Dickinsone94c6792009-02-02 20:36:42 +00004684 0, /* tp_reserved */
Mark Dickinson2031d132009-09-17 00:17:48 +00004685 long_to_decimal_string, /* tp_repr */
Tim Peters6d6c1a32001-08-02 04:15:00 +00004686 &long_as_number, /* tp_as_number */
4687 0, /* tp_as_sequence */
4688 0, /* tp_as_mapping */
4689 (hashfunc)long_hash, /* tp_hash */
Mark Dickinson5a74bf62009-02-15 11:04:38 +00004690 0, /* tp_call */
Mark Dickinson2031d132009-09-17 00:17:48 +00004691 long_to_decimal_string, /* tp_str */
Tim Peters6d6c1a32001-08-02 04:15:00 +00004692 PyObject_GenericGetAttr, /* tp_getattro */
4693 0, /* tp_setattro */
4694 0, /* tp_as_buffer */
Thomas Wouters27d517b2007-02-25 20:39:11 +00004695 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE |
4696 Py_TPFLAGS_LONG_SUBCLASS, /* tp_flags */
Tim Peters6d6c1a32001-08-02 04:15:00 +00004697 long_doc, /* tp_doc */
4698 0, /* tp_traverse */
4699 0, /* tp_clear */
Guido van Rossum47b9ff62006-08-24 00:41:19 +00004700 long_richcompare, /* tp_richcompare */
Tim Peters6d6c1a32001-08-02 04:15:00 +00004701 0, /* tp_weaklistoffset */
4702 0, /* tp_iter */
4703 0, /* tp_iternext */
Guido van Rossum5d9113d2003-01-29 17:58:45 +00004704 long_methods, /* tp_methods */
Tim Peters6d6c1a32001-08-02 04:15:00 +00004705 0, /* tp_members */
Guido van Rossumb43daf72007-08-01 18:08:08 +00004706 long_getset, /* tp_getset */
Tim Peters6d6c1a32001-08-02 04:15:00 +00004707 0, /* tp_base */
4708 0, /* tp_dict */
4709 0, /* tp_descr_get */
4710 0, /* tp_descr_set */
4711 0, /* tp_dictoffset */
4712 0, /* tp_init */
4713 0, /* tp_alloc */
4714 long_new, /* tp_new */
Mark Dickinson5a74bf62009-02-15 11:04:38 +00004715 PyObject_Del, /* tp_free */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00004716};
Guido van Rossumddefaf32007-01-14 03:31:43 +00004717
Mark Dickinsonbd792642009-03-18 20:06:12 +00004718static PyTypeObject Int_InfoType;
4719
4720PyDoc_STRVAR(int_info__doc__,
4721"sys.int_info\n\
4722\n\
4723A struct sequence that holds information about Python's\n\
4724internal representation of integers. The attributes are read only.");
4725
4726static PyStructSequence_Field int_info_fields[] = {
4727 {"bits_per_digit", "size of a digit in bits"},
4728 {"sizeof_digit", "size in bytes of the C type used to "
4729 "represent a digit"},
4730 {NULL, NULL}
4731};
4732
4733static PyStructSequence_Desc int_info_desc = {
4734 "sys.int_info", /* name */
4735 int_info__doc__, /* doc */
4736 int_info_fields, /* fields */
4737 2 /* number of fields */
4738};
4739
4740PyObject *
4741PyLong_GetInfo(void)
4742{
4743 PyObject* int_info;
4744 int field = 0;
4745 int_info = PyStructSequence_New(&Int_InfoType);
4746 if (int_info == NULL)
4747 return NULL;
Mark Dickinson0bdab682009-04-02 18:41:40 +00004748 PyStructSequence_SET_ITEM(int_info, field++,
4749 PyLong_FromLong(PyLong_SHIFT));
4750 PyStructSequence_SET_ITEM(int_info, field++,
4751 PyLong_FromLong(sizeof(digit)));
Mark Dickinsonbd792642009-03-18 20:06:12 +00004752 if (PyErr_Occurred()) {
4753 Py_CLEAR(int_info);
4754 return NULL;
4755 }
4756 return int_info;
4757}
4758
Guido van Rossumddefaf32007-01-14 03:31:43 +00004759int
4760_PyLong_Init(void)
4761{
4762#if NSMALLNEGINTS + NSMALLPOSINTS > 0
Christian Heimesdfc12ed2008-01-31 15:16:38 +00004763 int ival, size;
Guido van Rossumddefaf32007-01-14 03:31:43 +00004764 PyLongObject *v = small_ints;
Christian Heimesdfc12ed2008-01-31 15:16:38 +00004765
4766 for (ival = -NSMALLNEGINTS; ival < NSMALLPOSINTS; ival++, v++) {
4767 size = (ival < 0) ? -1 : ((ival == 0) ? 0 : 1);
4768 if (Py_TYPE(v) == &PyLong_Type) {
4769 /* The element is already initialized, most likely
4770 * the Python interpreter was initialized before.
4771 */
Christian Heimes48aa4b12008-02-01 16:56:30 +00004772 Py_ssize_t refcnt;
Christian Heimesdfc12ed2008-01-31 15:16:38 +00004773 PyObject* op = (PyObject*)v;
Christian Heimesdfc12ed2008-01-31 15:16:38 +00004774
Christian Heimes48aa4b12008-02-01 16:56:30 +00004775 refcnt = Py_REFCNT(op) < 0 ? 0 : Py_REFCNT(op);
4776 _Py_NewReference(op);
4777 /* _Py_NewReference sets the ref count to 1 but
4778 * the ref count might be larger. Set the refcnt
4779 * to the original refcnt + 1 */
4780 Py_REFCNT(op) = refcnt + 1;
Christian Heimesdfc12ed2008-01-31 15:16:38 +00004781 assert(Py_SIZE(op) == size);
4782 assert(v->ob_digit[0] == abs(ival));
4783 }
4784 else {
4785 PyObject_INIT(v, &PyLong_Type);
4786 }
4787 Py_SIZE(v) = size;
4788 v->ob_digit[0] = abs(ival);
Guido van Rossumddefaf32007-01-14 03:31:43 +00004789 }
4790#endif
Mark Dickinsonbd792642009-03-18 20:06:12 +00004791 /* initialize int_info */
4792 if (Int_InfoType.tp_name == 0)
4793 PyStructSequence_InitType(&Int_InfoType, &int_info_desc);
4794
Guido van Rossumddefaf32007-01-14 03:31:43 +00004795 return 1;
4796}
4797
4798void
4799PyLong_Fini(void)
4800{
Christian Heimesdfc12ed2008-01-31 15:16:38 +00004801 /* Integers are currently statically allocated. Py_DECREF is not
4802 needed, but Python must forget about the reference or multiple
4803 reinitializations will fail. */
Guido van Rossumddefaf32007-01-14 03:31:43 +00004804#if NSMALLNEGINTS + NSMALLPOSINTS > 0
Christian Heimesdfc12ed2008-01-31 15:16:38 +00004805 int i;
4806 PyLongObject *v = small_ints;
4807 for (i = 0; i < NSMALLNEGINTS + NSMALLPOSINTS; i++, v++) {
4808 _Py_DEC_REFTOTAL;
4809 _Py_ForgetReference((PyObject*)v);
4810 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00004811#endif
4812}