blob: e32c42566eb24cbf25497751db16702fed06d0f2 [file] [log] [blame]
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00002
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003/* Long (arbitrary precision) integer object implementation */
4
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00005/* XXX The functional organization of this file is terrible */
6
Guido van Rossumc0b618a1997-05-02 03:12:38 +00007#include "Python.h"
Guido van Rossumedcc38a1991-05-05 20:09:44 +00008#include "longintrepr.h"
Guido van Rossumc0b618a1997-05-02 03:12:38 +00009
Guido van Rossumeb1fafc1994-08-29 12:47:19 +000010#include <ctype.h>
Guido van Rossumedcc38a1991-05-05 20:09:44 +000011
Tim Peters5af4e6c2002-08-12 02:31:19 +000012/* For long multiplication, use the O(N**2) school algorithm unless
13 * both operands contain more than KARATSUBA_CUTOFF digits (this
14 * being an internal Python long digit, in base BASE).
15 */
Tim Peters0973b992004-08-29 22:16:50 +000016#define KARATSUBA_CUTOFF 70
17#define KARATSUBA_SQUARE_CUTOFF (2 * KARATSUBA_CUTOFF)
Tim Peters5af4e6c2002-08-12 02:31:19 +000018
Tim Peters47e52ee2004-08-30 02:44:38 +000019/* For exponentiation, use the binary left-to-right algorithm
20 * unless the exponent contains more than FIVEARY_CUTOFF digits.
21 * In that case, do 5 bits at a time. The potential drawback is that
22 * a table of 2**5 intermediate results is computed.
23 */
24#define FIVEARY_CUTOFF 8
25
Guido van Rossume32e0141992-01-19 16:31:05 +000026#define ABS(x) ((x) < 0 ? -(x) : (x))
27
Tim Peters5af4e6c2002-08-12 02:31:19 +000028#undef MIN
29#undef MAX
30#define MAX(x, y) ((x) < (y) ? (y) : (x))
31#define MIN(x, y) ((x) > (y) ? (y) : (x))
32
Guido van Rossume32e0141992-01-19 16:31:05 +000033/* Forward */
Tim Peters9f688bf2000-07-07 15:53:28 +000034static PyLongObject *long_normalize(PyLongObject *);
35static PyLongObject *mul1(PyLongObject *, wdigit);
36static PyLongObject *muladd1(PyLongObject *, wdigit, wdigit);
Tim Peters212e6142001-07-14 12:23:19 +000037static PyLongObject *divrem1(PyLongObject *, digit, digit *);
Tim Peters9f688bf2000-07-07 15:53:28 +000038static PyObject *long_format(PyObject *aa, int base, int addL);
Guido van Rossume32e0141992-01-19 16:31:05 +000039
Guido van Rossumc0b618a1997-05-02 03:12:38 +000040#define SIGCHECK(PyTryBlock) \
Skip Montanarod581d772002-09-03 20:10:45 +000041 if (--_Py_Ticker < 0) { \
42 _Py_Ticker = _Py_CheckInterval; \
Tim Petersd89fc222006-05-25 22:28:46 +000043 if (PyErr_CheckSignals()) PyTryBlock \
Guido van Rossum23d6f0e1991-05-14 12:06:49 +000044 }
45
Guido van Rossumedcc38a1991-05-05 20:09:44 +000046/* Normalize (remove leading zeros from) a long int object.
47 Doesn't attempt to free the storage--in most cases, due to the nature
48 of the algorithms used, this could save at most be one word anyway. */
49
Guido van Rossumc0b618a1997-05-02 03:12:38 +000050static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +000051long_normalize(register PyLongObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +000052{
Martin v. Löwis18e16552006-02-15 17:27:45 +000053 Py_ssize_t j = ABS(v->ob_size);
54 Py_ssize_t i = j;
Tim Peters5af4e6c2002-08-12 02:31:19 +000055
Guido van Rossumedcc38a1991-05-05 20:09:44 +000056 while (i > 0 && v->ob_digit[i-1] == 0)
57 --i;
58 if (i != j)
Guido van Rossum4c260ff1992-01-14 18:36:43 +000059 v->ob_size = (v->ob_size < 0) ? -(i) : i;
Guido van Rossumedcc38a1991-05-05 20:09:44 +000060 return v;
61}
62
63/* Allocate a new long int object with size digits.
64 Return NULL and set exception if we run out of memory. */
65
Guido van Rossumc0b618a1997-05-02 03:12:38 +000066PyLongObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +000067_PyLong_New(Py_ssize_t size)
Guido van Rossumedcc38a1991-05-05 20:09:44 +000068{
Neal Norwitzc6a989a2006-05-10 06:57:58 +000069 if (size > PY_SSIZE_T_MAX) {
Martin v. Löwis18e16552006-02-15 17:27:45 +000070 PyErr_NoMemory();
71 return NULL;
72 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +000073 return PyObject_NEW_VAR(PyLongObject, &PyLong_Type, size);
Guido van Rossumedcc38a1991-05-05 20:09:44 +000074}
75
Tim Peters64b5ce32001-09-10 20:52:51 +000076PyObject *
77_PyLong_Copy(PyLongObject *src)
78{
79 PyLongObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +000080 Py_ssize_t i;
Tim Peters64b5ce32001-09-10 20:52:51 +000081
82 assert(src != NULL);
83 i = src->ob_size;
84 if (i < 0)
85 i = -(i);
86 result = _PyLong_New(i);
87 if (result != NULL) {
Tim Peters5329cdb2002-03-02 04:18:04 +000088 result->ob_size = src->ob_size;
Tim Peters64b5ce32001-09-10 20:52:51 +000089 while (--i >= 0)
90 result->ob_digit[i] = src->ob_digit[i];
91 }
92 return (PyObject *)result;
93}
94
Guido van Rossumedcc38a1991-05-05 20:09:44 +000095/* Create a new long int object from a C long int */
96
Guido van Rossumc0b618a1997-05-02 03:12:38 +000097PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +000098PyLong_FromLong(long ival)
Guido van Rossumedcc38a1991-05-05 20:09:44 +000099{
Tim Petersce9de2f2001-06-14 04:56:19 +0000100 PyLongObject *v;
101 unsigned long t; /* unsigned so >> doesn't propagate sign bit */
102 int ndigits = 0;
103 int negative = 0;
104
105 if (ival < 0) {
106 ival = -ival;
107 negative = 1;
108 }
109
110 /* Count the number of Python digits.
111 We used to pick 5 ("big enough for anything"), but that's a
112 waste of time and space given that 5*15 = 75 bits are rarely
113 needed. */
114 t = (unsigned long)ival;
115 while (t) {
116 ++ndigits;
117 t >>= SHIFT;
118 }
119 v = _PyLong_New(ndigits);
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000120 if (v != NULL) {
Tim Petersce9de2f2001-06-14 04:56:19 +0000121 digit *p = v->ob_digit;
122 v->ob_size = negative ? -ndigits : ndigits;
123 t = (unsigned long)ival;
124 while (t) {
125 *p++ = (digit)(t & MASK);
Guido van Rossum472c04f1996-12-05 21:57:21 +0000126 t >>= SHIFT;
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000127 }
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000128 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000129 return (PyObject *)v;
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000130}
131
Guido van Rossum53756b11997-01-03 17:14:46 +0000132/* Create a new long int object from a C unsigned long int */
133
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000134PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +0000135PyLong_FromUnsignedLong(unsigned long ival)
Guido van Rossum53756b11997-01-03 17:14:46 +0000136{
Tim Petersce9de2f2001-06-14 04:56:19 +0000137 PyLongObject *v;
138 unsigned long t;
139 int ndigits = 0;
140
141 /* Count the number of Python digits. */
142 t = (unsigned long)ival;
143 while (t) {
144 ++ndigits;
145 t >>= SHIFT;
146 }
147 v = _PyLong_New(ndigits);
Guido van Rossum53756b11997-01-03 17:14:46 +0000148 if (v != NULL) {
Tim Petersce9de2f2001-06-14 04:56:19 +0000149 digit *p = v->ob_digit;
150 v->ob_size = ndigits;
151 while (ival) {
152 *p++ = (digit)(ival & MASK);
153 ival >>= SHIFT;
Guido van Rossum53756b11997-01-03 17:14:46 +0000154 }
Guido van Rossum53756b11997-01-03 17:14:46 +0000155 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000156 return (PyObject *)v;
Guido van Rossum53756b11997-01-03 17:14:46 +0000157}
158
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000159/* Create a new long int object from a C double */
160
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000161PyObject *
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000162PyLong_FromDouble(double dval)
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000163{
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000164 PyLongObject *v;
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000165 double frac;
166 int i, ndig, expo, neg;
167 neg = 0;
Tim Peters39dce292000-08-15 03:34:48 +0000168 if (Py_IS_INFINITY(dval)) {
Guido van Rossum1a23c241999-09-27 17:11:52 +0000169 PyErr_SetString(PyExc_OverflowError,
170 "cannot convert float infinity to long");
171 return NULL;
172 }
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000173 if (dval < 0.0) {
174 neg = 1;
175 dval = -dval;
176 }
177 frac = frexp(dval, &expo); /* dval = frac*2**expo; 0.0 <= frac < 1.0 */
178 if (expo <= 0)
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000179 return PyLong_FromLong(0L);
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000180 ndig = (expo-1) / SHIFT + 1; /* Number of 'digits' in result */
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000181 v = _PyLong_New(ndig);
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000182 if (v == NULL)
183 return NULL;
184 frac = ldexp(frac, (expo-1) % SHIFT + 1);
185 for (i = ndig; --i >= 0; ) {
186 long bits = (long)frac;
Guido van Rossum2095d241997-04-09 19:41:24 +0000187 v->ob_digit[i] = (digit) bits;
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000188 frac = frac - (double)bits;
189 frac = ldexp(frac, SHIFT);
190 }
191 if (neg)
Guido van Rossum4c260ff1992-01-14 18:36:43 +0000192 v->ob_size = -(v->ob_size);
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000193 return (PyObject *)v;
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000194}
195
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000196/* Get a C long int from a long int object.
197 Returns -1 and sets an error condition if overflow occurs. */
198
199long
Tim Peters9f688bf2000-07-07 15:53:28 +0000200PyLong_AsLong(PyObject *vv)
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000201{
Guido van Rossumf7531811998-05-26 14:33:37 +0000202 /* This version by Tim Peters */
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000203 register PyLongObject *v;
Guido van Rossumf7531811998-05-26 14:33:37 +0000204 unsigned long x, prev;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000205 Py_ssize_t i;
206 int sign;
Guido van Rossumf7531811998-05-26 14:33:37 +0000207
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000208 if (vv == NULL || !PyLong_Check(vv)) {
Guido van Rossum7e35d572001-09-15 03:14:32 +0000209 if (vv != NULL && PyInt_Check(vv))
210 return PyInt_AsLong(vv);
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000211 PyErr_BadInternalCall();
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000212 return -1;
213 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000214 v = (PyLongObject *)vv;
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000215 i = v->ob_size;
216 sign = 1;
217 x = 0;
218 if (i < 0) {
219 sign = -1;
Guido van Rossum4c260ff1992-01-14 18:36:43 +0000220 i = -(i);
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000221 }
222 while (--i >= 0) {
223 prev = x;
224 x = (x << SHIFT) + v->ob_digit[i];
Guido van Rossumf7531811998-05-26 14:33:37 +0000225 if ((x >> SHIFT) != prev)
226 goto overflow;
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000227 }
Guido van Rossumf7531811998-05-26 14:33:37 +0000228 /* Haven't lost any bits, but if the sign bit is set we're in
229 * trouble *unless* this is the min negative number. So,
230 * trouble iff sign bit set && (positive || some bit set other
231 * than the sign bit).
232 */
233 if ((long)x < 0 && (sign > 0 || (x << 1) != 0))
234 goto overflow;
235 return (long)x * sign;
236
237 overflow:
238 PyErr_SetString(PyExc_OverflowError,
Skip Montanarobafedec2001-09-13 19:05:30 +0000239 "long int too large to convert to int");
Guido van Rossumf7531811998-05-26 14:33:37 +0000240 return -1;
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000241}
242
Neal Norwitz8a87f5d2006-08-12 17:03:09 +0000243/* Get a Py_ssize_t from a long int object.
244 Returns -1 and sets an error condition if overflow occurs. */
245
246Py_ssize_t
247_PyLong_AsSsize_t(PyObject *vv) {
Martin v. Löwis18e16552006-02-15 17:27:45 +0000248 register PyLongObject *v;
249 size_t x, prev;
250 Py_ssize_t i;
251 int sign;
252
253 if (vv == NULL || !PyLong_Check(vv)) {
254 PyErr_BadInternalCall();
255 return -1;
256 }
257 v = (PyLongObject *)vv;
258 i = v->ob_size;
259 sign = 1;
260 x = 0;
261 if (i < 0) {
262 sign = -1;
263 i = -(i);
264 }
265 while (--i >= 0) {
266 prev = x;
267 x = (x << SHIFT) + v->ob_digit[i];
268 if ((x >> SHIFT) != prev)
269 goto overflow;
270 }
271 /* Haven't lost any bits, but if the sign bit is set we're in
272 * trouble *unless* this is the min negative number. So,
273 * trouble iff sign bit set && (positive || some bit set other
274 * than the sign bit).
275 */
276 if ((Py_ssize_t)x < 0 && (sign > 0 || (x << 1) != 0))
277 goto overflow;
278 return (Py_ssize_t)x * sign;
279
280 overflow:
281 PyErr_SetString(PyExc_OverflowError,
282 "long int too large to convert to int");
Neal Norwitz8a87f5d2006-08-12 17:03:09 +0000283 return -1;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000284}
285
Guido van Rossumd8c80482002-08-13 00:24:58 +0000286/* Get a C unsigned long int from a long int object.
Guido van Rossum53756b11997-01-03 17:14:46 +0000287 Returns -1 and sets an error condition if overflow occurs. */
288
289unsigned long
Tim Peters9f688bf2000-07-07 15:53:28 +0000290PyLong_AsUnsignedLong(PyObject *vv)
Guido van Rossum53756b11997-01-03 17:14:46 +0000291{
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000292 register PyLongObject *v;
Guido van Rossum53756b11997-01-03 17:14:46 +0000293 unsigned long x, prev;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000294 Py_ssize_t i;
Tim Peters5af4e6c2002-08-12 02:31:19 +0000295
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000296 if (vv == NULL || !PyLong_Check(vv)) {
Martin v. Löwis729d47d2004-09-20 06:17:46 +0000297 if (vv != NULL && PyInt_Check(vv)) {
298 long val = PyInt_AsLong(vv);
299 if (val < 0) {
300 PyErr_SetString(PyExc_OverflowError,
301 "can't convert negative value to unsigned long");
302 return (unsigned long) -1;
303 }
304 return val;
305 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000306 PyErr_BadInternalCall();
Guido van Rossum53756b11997-01-03 17:14:46 +0000307 return (unsigned long) -1;
308 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000309 v = (PyLongObject *)vv;
Guido van Rossum53756b11997-01-03 17:14:46 +0000310 i = v->ob_size;
311 x = 0;
312 if (i < 0) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000313 PyErr_SetString(PyExc_OverflowError,
Guido van Rossum53756b11997-01-03 17:14:46 +0000314 "can't convert negative value to unsigned long");
315 return (unsigned long) -1;
316 }
317 while (--i >= 0) {
318 prev = x;
319 x = (x << SHIFT) + v->ob_digit[i];
320 if ((x >> SHIFT) != prev) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000321 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +0000322 "long int too large to convert");
Guido van Rossum53756b11997-01-03 17:14:46 +0000323 return (unsigned long) -1;
324 }
325 }
326 return x;
327}
328
Thomas Hellera4ea6032003-04-17 18:55:45 +0000329/* Get a C unsigned long int from a long int object, ignoring the high bits.
330 Returns -1 and sets an error condition if an error occurs. */
331
332unsigned long
333PyLong_AsUnsignedLongMask(PyObject *vv)
334{
335 register PyLongObject *v;
336 unsigned long x;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000337 Py_ssize_t i;
338 int sign;
Thomas Hellera4ea6032003-04-17 18:55:45 +0000339
340 if (vv == NULL || !PyLong_Check(vv)) {
Martin v. Löwis729d47d2004-09-20 06:17:46 +0000341 if (vv != NULL && PyInt_Check(vv))
342 return PyInt_AsUnsignedLongMask(vv);
Thomas Hellera4ea6032003-04-17 18:55:45 +0000343 PyErr_BadInternalCall();
344 return (unsigned long) -1;
345 }
346 v = (PyLongObject *)vv;
347 i = v->ob_size;
348 sign = 1;
349 x = 0;
350 if (i < 0) {
351 sign = -1;
352 i = -i;
353 }
354 while (--i >= 0) {
355 x = (x << SHIFT) + v->ob_digit[i];
356 }
357 return x * sign;
358}
359
Tim Peters5b8132f2003-01-31 15:52:05 +0000360int
361_PyLong_Sign(PyObject *vv)
362{
363 PyLongObject *v = (PyLongObject *)vv;
Tim Peters5b8132f2003-01-31 15:52:05 +0000364
365 assert(v != NULL);
366 assert(PyLong_Check(v));
Tim Peters5b8132f2003-01-31 15:52:05 +0000367
Tim Petersee1a53c2003-02-02 02:57:53 +0000368 return v->ob_size == 0 ? 0 : (v->ob_size < 0 ? -1 : 1);
Tim Peters5b8132f2003-01-31 15:52:05 +0000369}
370
Tim Petersbaefd9e2003-01-28 20:37:45 +0000371size_t
372_PyLong_NumBits(PyObject *vv)
373{
374 PyLongObject *v = (PyLongObject *)vv;
Tim Peters5b8132f2003-01-31 15:52:05 +0000375 size_t result = 0;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000376 Py_ssize_t ndigits;
Tim Petersbaefd9e2003-01-28 20:37:45 +0000377
378 assert(v != NULL);
379 assert(PyLong_Check(v));
Guido van Rossum004a65c2003-02-03 15:28:19 +0000380 ndigits = ABS(v->ob_size);
Tim Petersbaefd9e2003-01-28 20:37:45 +0000381 assert(ndigits == 0 || v->ob_digit[ndigits - 1] != 0);
382 if (ndigits > 0) {
Tim Petersbaefd9e2003-01-28 20:37:45 +0000383 digit msd = v->ob_digit[ndigits - 1];
384
Tim Peters5b8132f2003-01-31 15:52:05 +0000385 result = (ndigits - 1) * SHIFT;
Skip Montanaro429433b2006-04-18 00:35:43 +0000386 if (result / SHIFT != (size_t)(ndigits - 1))
Tim Petersbaefd9e2003-01-28 20:37:45 +0000387 goto Overflow;
388 do {
389 ++result;
390 if (result == 0)
391 goto Overflow;
392 msd >>= 1;
393 } while (msd);
394 }
395 return result;
396
397Overflow:
398 PyErr_SetString(PyExc_OverflowError, "long has too many bits "
399 "to express in a platform size_t");
400 return (size_t)-1;
401}
402
Tim Peters2a9b3672001-06-11 21:23:58 +0000403PyObject *
404_PyLong_FromByteArray(const unsigned char* bytes, size_t n,
405 int little_endian, int is_signed)
406{
407 const unsigned char* pstartbyte;/* LSB of bytes */
408 int incr; /* direction to move pstartbyte */
409 const unsigned char* pendbyte; /* MSB of bytes */
410 size_t numsignificantbytes; /* number of bytes that matter */
411 size_t ndigits; /* number of Python long digits */
412 PyLongObject* v; /* result */
413 int idigit = 0; /* next free index in v->ob_digit */
414
415 if (n == 0)
416 return PyLong_FromLong(0L);
417
418 if (little_endian) {
419 pstartbyte = bytes;
420 pendbyte = bytes + n - 1;
421 incr = 1;
422 }
423 else {
424 pstartbyte = bytes + n - 1;
425 pendbyte = bytes;
426 incr = -1;
427 }
428
429 if (is_signed)
430 is_signed = *pendbyte >= 0x80;
431
432 /* Compute numsignificantbytes. This consists of finding the most
433 significant byte. Leading 0 bytes are insignficant if the number
434 is positive, and leading 0xff bytes if negative. */
435 {
436 size_t i;
437 const unsigned char* p = pendbyte;
438 const int pincr = -incr; /* search MSB to LSB */
439 const unsigned char insignficant = is_signed ? 0xff : 0x00;
440
441 for (i = 0; i < n; ++i, p += pincr) {
442 if (*p != insignficant)
443 break;
444 }
445 numsignificantbytes = n - i;
446 /* 2's-comp is a bit tricky here, e.g. 0xff00 == -0x0100, so
447 actually has 2 significant bytes. OTOH, 0xff0001 ==
448 -0x00ffff, so we wouldn't *need* to bump it there; but we
449 do for 0xffff = -0x0001. To be safe without bothering to
450 check every case, bump it regardless. */
451 if (is_signed && numsignificantbytes < n)
452 ++numsignificantbytes;
453 }
454
455 /* How many Python long digits do we need? We have
456 8*numsignificantbytes bits, and each Python long digit has SHIFT
457 bits, so it's the ceiling of the quotient. */
458 ndigits = (numsignificantbytes * 8 + SHIFT - 1) / SHIFT;
459 if (ndigits > (size_t)INT_MAX)
460 return PyErr_NoMemory();
461 v = _PyLong_New((int)ndigits);
462 if (v == NULL)
463 return NULL;
464
465 /* Copy the bits over. The tricky parts are computing 2's-comp on
466 the fly for signed numbers, and dealing with the mismatch between
467 8-bit bytes and (probably) 15-bit Python digits.*/
468 {
469 size_t i;
Tim Petersf251d062001-06-13 21:09:15 +0000470 twodigits carry = 1; /* for 2's-comp calculation */
Tim Peters2a9b3672001-06-11 21:23:58 +0000471 twodigits accum = 0; /* sliding register */
472 unsigned int accumbits = 0; /* number of bits in accum */
473 const unsigned char* p = pstartbyte;
474
475 for (i = 0; i < numsignificantbytes; ++i, p += incr) {
Tim Peters8bc84b42001-06-12 19:17:03 +0000476 twodigits thisbyte = *p;
Tim Peters2a9b3672001-06-11 21:23:58 +0000477 /* Compute correction for 2's comp, if needed. */
478 if (is_signed) {
479 thisbyte = (0xff ^ thisbyte) + carry;
480 carry = thisbyte >> 8;
481 thisbyte &= 0xff;
482 }
483 /* Because we're going LSB to MSB, thisbyte is
484 more significant than what's already in accum,
485 so needs to be prepended to accum. */
486 accum |= thisbyte << accumbits;
487 accumbits += 8;
488 if (accumbits >= SHIFT) {
489 /* There's enough to fill a Python digit. */
490 assert(idigit < (int)ndigits);
491 v->ob_digit[idigit] = (digit)(accum & MASK);
492 ++idigit;
493 accum >>= SHIFT;
494 accumbits -= SHIFT;
495 assert(accumbits < SHIFT);
496 }
497 }
498 assert(accumbits < SHIFT);
499 if (accumbits) {
500 assert(idigit < (int)ndigits);
501 v->ob_digit[idigit] = (digit)accum;
502 ++idigit;
503 }
504 }
505
506 v->ob_size = is_signed ? -idigit : idigit;
507 return (PyObject *)long_normalize(v);
508}
509
510int
511_PyLong_AsByteArray(PyLongObject* v,
512 unsigned char* bytes, size_t n,
513 int little_endian, int is_signed)
514{
515 int i; /* index into v->ob_digit */
Martin v. Löwis18e16552006-02-15 17:27:45 +0000516 Py_ssize_t ndigits; /* |v->ob_size| */
Tim Peters2a9b3672001-06-11 21:23:58 +0000517 twodigits accum; /* sliding register */
518 unsigned int accumbits; /* # bits in accum */
519 int do_twos_comp; /* store 2's-comp? is_signed and v < 0 */
520 twodigits carry; /* for computing 2's-comp */
521 size_t j; /* # bytes filled */
522 unsigned char* p; /* pointer to next byte in bytes */
523 int pincr; /* direction to move p */
524
525 assert(v != NULL && PyLong_Check(v));
526
527 if (v->ob_size < 0) {
528 ndigits = -(v->ob_size);
529 if (!is_signed) {
530 PyErr_SetString(PyExc_TypeError,
531 "can't convert negative long to unsigned");
532 return -1;
533 }
534 do_twos_comp = 1;
535 }
536 else {
537 ndigits = v->ob_size;
538 do_twos_comp = 0;
539 }
540
541 if (little_endian) {
542 p = bytes;
543 pincr = 1;
544 }
545 else {
546 p = bytes + n - 1;
547 pincr = -1;
548 }
549
Tim Peters898cf852001-06-13 20:50:08 +0000550 /* Copy over all the Python digits.
551 It's crucial that every Python digit except for the MSD contribute
552 exactly SHIFT bits to the total, so first assert that the long is
553 normalized. */
554 assert(ndigits == 0 || v->ob_digit[ndigits - 1] != 0);
Tim Peters2a9b3672001-06-11 21:23:58 +0000555 j = 0;
556 accum = 0;
557 accumbits = 0;
558 carry = do_twos_comp ? 1 : 0;
559 for (i = 0; i < ndigits; ++i) {
560 twodigits thisdigit = v->ob_digit[i];
561 if (do_twos_comp) {
562 thisdigit = (thisdigit ^ MASK) + carry;
563 carry = thisdigit >> SHIFT;
564 thisdigit &= MASK;
565 }
Tim Peters8bc84b42001-06-12 19:17:03 +0000566 /* Because we're going LSB to MSB, thisdigit is more
567 significant than what's already in accum, so needs to be
568 prepended to accum. */
569 accum |= thisdigit << accumbits;
Tim Petersede05092001-06-14 08:53:38 +0000570 accumbits += SHIFT;
Tim Peters8bc84b42001-06-12 19:17:03 +0000571
Tim Petersede05092001-06-14 08:53:38 +0000572 /* The most-significant digit may be (probably is) at least
573 partly empty. */
Tim Peters8bc84b42001-06-12 19:17:03 +0000574 if (i == ndigits - 1) {
Tim Petersede05092001-06-14 08:53:38 +0000575 /* Count # of sign bits -- they needn't be stored,
576 * although for signed conversion we need later to
577 * make sure at least one sign bit gets stored.
578 * First shift conceptual sign bit to real sign bit.
579 */
580 stwodigits s = (stwodigits)(thisdigit <<
581 (8*sizeof(stwodigits) - SHIFT));
Tim Peters7a3bfc32001-06-12 01:22:22 +0000582 unsigned int nsignbits = 0;
Tim Petersede05092001-06-14 08:53:38 +0000583 while ((s < 0) == do_twos_comp && nsignbits < SHIFT) {
Tim Peters7a3bfc32001-06-12 01:22:22 +0000584 ++nsignbits;
Tim Petersede05092001-06-14 08:53:38 +0000585 s <<= 1;
Tim Peters7a3bfc32001-06-12 01:22:22 +0000586 }
Tim Petersede05092001-06-14 08:53:38 +0000587 accumbits -= nsignbits;
Tim Peters7a3bfc32001-06-12 01:22:22 +0000588 }
Tim Peters8bc84b42001-06-12 19:17:03 +0000589
Tim Peters2a9b3672001-06-11 21:23:58 +0000590 /* Store as many bytes as possible. */
Tim Peters7a3bfc32001-06-12 01:22:22 +0000591 while (accumbits >= 8) {
Tim Peters2a9b3672001-06-11 21:23:58 +0000592 if (j >= n)
593 goto Overflow;
594 ++j;
595 *p = (unsigned char)(accum & 0xff);
596 p += pincr;
597 accumbits -= 8;
598 accum >>= 8;
Tim Peters7a3bfc32001-06-12 01:22:22 +0000599 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000600 }
601
602 /* Store the straggler (if any). */
603 assert(accumbits < 8);
604 assert(carry == 0); /* else do_twos_comp and *every* digit was 0 */
Tim Peters7a3bfc32001-06-12 01:22:22 +0000605 if (accumbits > 0) {
Tim Peters2a9b3672001-06-11 21:23:58 +0000606 if (j >= n)
607 goto Overflow;
608 ++j;
609 if (do_twos_comp) {
610 /* Fill leading bits of the byte with sign bits
611 (appropriately pretending that the long had an
612 infinite supply of sign bits). */
613 accum |= (~(twodigits)0) << accumbits;
614 }
615 *p = (unsigned char)(accum & 0xff);
616 p += pincr;
617 }
Tim Peters05607ad2001-06-13 21:01:27 +0000618 else if (j == n && n > 0 && is_signed) {
619 /* The main loop filled the byte array exactly, so the code
620 just above didn't get to ensure there's a sign bit, and the
621 loop below wouldn't add one either. Make sure a sign bit
622 exists. */
Tim Peters2a9b3672001-06-11 21:23:58 +0000623 unsigned char msb = *(p - pincr);
Tim Peters05607ad2001-06-13 21:01:27 +0000624 int sign_bit_set = msb >= 0x80;
625 assert(accumbits == 0);
626 if (sign_bit_set == do_twos_comp)
627 return 0;
628 else
Tim Peters2a9b3672001-06-11 21:23:58 +0000629 goto Overflow;
630 }
Tim Peters05607ad2001-06-13 21:01:27 +0000631
632 /* Fill remaining bytes with copies of the sign bit. */
633 {
634 unsigned char signbyte = do_twos_comp ? 0xffU : 0U;
635 for ( ; j < n; ++j, p += pincr)
636 *p = signbyte;
637 }
638
Tim Peters2a9b3672001-06-11 21:23:58 +0000639 return 0;
640
641Overflow:
642 PyErr_SetString(PyExc_OverflowError, "long too big to convert");
643 return -1;
Tim Peters5af4e6c2002-08-12 02:31:19 +0000644
Tim Peters2a9b3672001-06-11 21:23:58 +0000645}
646
Tim Petersa1c1b0f2001-09-04 02:50:49 +0000647double
648_PyLong_AsScaledDouble(PyObject *vv, int *exponent)
649{
650/* NBITS_WANTED should be > the number of bits in a double's precision,
651 but small enough so that 2**NBITS_WANTED is within the normal double
652 range. nbitsneeded is set to 1 less than that because the most-significant
653 Python digit contains at least 1 significant bit, but we don't want to
654 bother counting them (catering to the worst case cheaply).
655
656 57 is one more than VAX-D double precision; I (Tim) don't know of a double
657 format with more precision than that; it's 1 larger so that we add in at
658 least one round bit to stand in for the ignored least-significant bits.
659*/
660#define NBITS_WANTED 57
661 PyLongObject *v;
662 double x;
663 const double multiplier = (double)(1L << SHIFT);
Martin v. Löwis18e16552006-02-15 17:27:45 +0000664 Py_ssize_t i;
665 int sign;
Tim Petersa1c1b0f2001-09-04 02:50:49 +0000666 int nbitsneeded;
667
668 if (vv == NULL || !PyLong_Check(vv)) {
669 PyErr_BadInternalCall();
670 return -1;
671 }
672 v = (PyLongObject *)vv;
673 i = v->ob_size;
674 sign = 1;
675 if (i < 0) {
676 sign = -1;
677 i = -(i);
678 }
679 else if (i == 0) {
680 *exponent = 0;
681 return 0.0;
682 }
683 --i;
684 x = (double)v->ob_digit[i];
685 nbitsneeded = NBITS_WANTED - 1;
686 /* Invariant: i Python digits remain unaccounted for. */
687 while (i > 0 && nbitsneeded > 0) {
688 --i;
689 x = x * multiplier + (double)v->ob_digit[i];
690 nbitsneeded -= SHIFT;
691 }
692 /* There are i digits we didn't shift in. Pretending they're all
693 zeroes, the true value is x * 2**(i*SHIFT). */
694 *exponent = i;
695 assert(x > 0.0);
696 return x * sign;
697#undef NBITS_WANTED
698}
699
Guido van Rossum09e6ad01997-02-14 22:54:21 +0000700/* Get a C double from a long int object. */
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000701
702double
Tim Peters9f688bf2000-07-07 15:53:28 +0000703PyLong_AsDouble(PyObject *vv)
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000704{
Thomas Wouters553489a2006-02-01 21:32:04 +0000705 int e = -1;
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000706 double x;
Tim Peters9fffa3e2001-09-04 05:14:19 +0000707
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000708 if (vv == NULL || !PyLong_Check(vv)) {
709 PyErr_BadInternalCall();
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000710 return -1;
711 }
Tim Peters9fffa3e2001-09-04 05:14:19 +0000712 x = _PyLong_AsScaledDouble(vv, &e);
713 if (x == -1.0 && PyErr_Occurred())
714 return -1.0;
Thomas Wouters553489a2006-02-01 21:32:04 +0000715 /* 'e' initialized to -1 to silence gcc-4.0.x, but it should be
716 set correctly after a successful _PyLong_AsScaledDouble() call */
717 assert(e >= 0);
Tim Peters9fffa3e2001-09-04 05:14:19 +0000718 if (e > INT_MAX / SHIFT)
719 goto overflow;
720 errno = 0;
721 x = ldexp(x, e * SHIFT);
Tim Peters57f282a2001-09-05 05:38:10 +0000722 if (Py_OVERFLOWED(x))
Tim Peters9fffa3e2001-09-04 05:14:19 +0000723 goto overflow;
724 return x;
725
726overflow:
727 PyErr_SetString(PyExc_OverflowError,
728 "long int too large to convert to float");
729 return -1.0;
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000730}
731
Guido van Rossum78694d91998-09-18 14:14:13 +0000732/* Create a new long (or int) object from a C pointer */
733
734PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +0000735PyLong_FromVoidPtr(void *p)
Guido van Rossum78694d91998-09-18 14:14:13 +0000736{
Tim Peters70128a12001-06-16 08:48:40 +0000737#if SIZEOF_VOID_P <= SIZEOF_LONG
Martin v. Löwis0bc2ab92006-04-10 20:28:17 +0000738 if ((long)p < 0)
739 return PyLong_FromUnsignedLong((unsigned long)p);
Guido van Rossum78694d91998-09-18 14:14:13 +0000740 return PyInt_FromLong((long)p);
741#else
Guido van Rossum78694d91998-09-18 14:14:13 +0000742
Tim Peters70128a12001-06-16 08:48:40 +0000743#ifndef HAVE_LONG_LONG
744# error "PyLong_FromVoidPtr: sizeof(void*) > sizeof(long), but no long long"
745#endif
746#if SIZEOF_LONG_LONG < SIZEOF_VOID_P
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000747# error "PyLong_FromVoidPtr: sizeof(PY_LONG_LONG) < sizeof(void*)"
Tim Peters70128a12001-06-16 08:48:40 +0000748#endif
749 /* optimize null pointers */
750 if (p == NULL)
751 return PyInt_FromLong(0);
Martin v. Löwis0bc2ab92006-04-10 20:28:17 +0000752 return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG)p);
Tim Peters70128a12001-06-16 08:48:40 +0000753
754#endif /* SIZEOF_VOID_P <= SIZEOF_LONG */
Guido van Rossum78694d91998-09-18 14:14:13 +0000755}
756
757/* Get a C pointer from a long object (or an int object in some cases) */
758
759void *
Tim Peters9f688bf2000-07-07 15:53:28 +0000760PyLong_AsVoidPtr(PyObject *vv)
Guido van Rossum78694d91998-09-18 14:14:13 +0000761{
762 /* This function will allow int or long objects. If vv is neither,
763 then the PyLong_AsLong*() functions will raise the exception:
764 PyExc_SystemError, "bad argument to internal function"
765 */
Tim Peters70128a12001-06-16 08:48:40 +0000766#if SIZEOF_VOID_P <= SIZEOF_LONG
Guido van Rossum78694d91998-09-18 14:14:13 +0000767 long x;
768
Tim Peters70128a12001-06-16 08:48:40 +0000769 if (PyInt_Check(vv))
Guido van Rossum78694d91998-09-18 14:14:13 +0000770 x = PyInt_AS_LONG(vv);
Martin v. Löwis0bc2ab92006-04-10 20:28:17 +0000771 else if (PyLong_Check(vv) && _PyLong_Sign(vv) < 0)
Guido van Rossum78694d91998-09-18 14:14:13 +0000772 x = PyLong_AsLong(vv);
Martin v. Löwis0bc2ab92006-04-10 20:28:17 +0000773 else
774 x = PyLong_AsUnsignedLong(vv);
Guido van Rossum78694d91998-09-18 14:14:13 +0000775#else
Tim Peters70128a12001-06-16 08:48:40 +0000776
777#ifndef HAVE_LONG_LONG
778# error "PyLong_AsVoidPtr: sizeof(void*) > sizeof(long), but no long long"
779#endif
780#if SIZEOF_LONG_LONG < SIZEOF_VOID_P
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000781# error "PyLong_AsVoidPtr: sizeof(PY_LONG_LONG) < sizeof(void*)"
Tim Peters70128a12001-06-16 08:48:40 +0000782#endif
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000783 PY_LONG_LONG x;
Guido van Rossum78694d91998-09-18 14:14:13 +0000784
Tim Peters70128a12001-06-16 08:48:40 +0000785 if (PyInt_Check(vv))
Guido van Rossum78694d91998-09-18 14:14:13 +0000786 x = PyInt_AS_LONG(vv);
Martin v. Löwis0bc2ab92006-04-10 20:28:17 +0000787 else if (PyLong_Check(vv) && _PyLong_Sign(vv) < 0)
Guido van Rossum78694d91998-09-18 14:14:13 +0000788 x = PyLong_AsLongLong(vv);
Martin v. Löwis0bc2ab92006-04-10 20:28:17 +0000789 else
790 x = PyLong_AsUnsignedLongLong(vv);
Tim Peters70128a12001-06-16 08:48:40 +0000791
792#endif /* SIZEOF_VOID_P <= SIZEOF_LONG */
Guido van Rossum78694d91998-09-18 14:14:13 +0000793
794 if (x == -1 && PyErr_Occurred())
795 return NULL;
796 return (void *)x;
797}
798
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000799#ifdef HAVE_LONG_LONG
Tim Petersd1a7da62001-06-13 00:35:57 +0000800
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000801/* Initial PY_LONG_LONG support by Chris Herborth (chrish@qnx.com), later
Tim Petersd1a7da62001-06-13 00:35:57 +0000802 * rewritten to use the newer PyLong_{As,From}ByteArray API.
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000803 */
804
Tim Peterscf37dfc2001-06-14 18:42:50 +0000805#define IS_LITTLE_ENDIAN (int)*(unsigned char*)&one
Tim Petersd1a7da62001-06-13 00:35:57 +0000806
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000807/* Create a new long int object from a C PY_LONG_LONG int. */
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000808
809PyObject *
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000810PyLong_FromLongLong(PY_LONG_LONG ival)
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000811{
Bob Ippolitoa85bf202006-05-25 18:20:23 +0000812 PyLongObject *v;
813 unsigned PY_LONG_LONG t; /* unsigned so >> doesn't propagate sign bit */
814 int ndigits = 0;
815 int negative = 0;
816
817 if (ival < 0) {
818 ival = -ival;
819 negative = 1;
820 }
821
822 /* Count the number of Python digits.
823 We used to pick 5 ("big enough for anything"), but that's a
824 waste of time and space given that 5*15 = 75 bits are rarely
825 needed. */
826 t = (unsigned PY_LONG_LONG)ival;
827 while (t) {
828 ++ndigits;
829 t >>= SHIFT;
830 }
831 v = _PyLong_New(ndigits);
832 if (v != NULL) {
833 digit *p = v->ob_digit;
834 v->ob_size = negative ? -ndigits : ndigits;
835 t = (unsigned PY_LONG_LONG)ival;
836 while (t) {
837 *p++ = (digit)(t & MASK);
838 t >>= SHIFT;
839 }
840 }
841 return (PyObject *)v;
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000842}
843
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000844/* Create a new long int object from a C unsigned PY_LONG_LONG int. */
Tim Petersd1a7da62001-06-13 00:35:57 +0000845
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000846PyObject *
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000847PyLong_FromUnsignedLongLong(unsigned PY_LONG_LONG ival)
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000848{
Bob Ippolitoa85bf202006-05-25 18:20:23 +0000849 PyLongObject *v;
850 unsigned PY_LONG_LONG t;
851 int ndigits = 0;
852
853 /* Count the number of Python digits. */
854 t = (unsigned PY_LONG_LONG)ival;
855 while (t) {
856 ++ndigits;
857 t >>= SHIFT;
858 }
859 v = _PyLong_New(ndigits);
860 if (v != NULL) {
861 digit *p = v->ob_digit;
862 v->ob_size = ndigits;
863 while (ival) {
864 *p++ = (digit)(ival & MASK);
865 ival >>= SHIFT;
866 }
867 }
868 return (PyObject *)v;
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000869}
870
Martin v. Löwis18e16552006-02-15 17:27:45 +0000871/* Create a new long int object from a C Py_ssize_t. */
872
873PyObject *
874_PyLong_FromSsize_t(Py_ssize_t ival)
875{
876 Py_ssize_t bytes = ival;
877 int one = 1;
878 return _PyLong_FromByteArray(
879 (unsigned char *)&bytes,
880 SIZEOF_SIZE_T, IS_LITTLE_ENDIAN, 0);
881}
882
883/* Create a new long int object from a C size_t. */
884
885PyObject *
886_PyLong_FromSize_t(size_t ival)
887{
888 size_t bytes = ival;
889 int one = 1;
890 return _PyLong_FromByteArray(
891 (unsigned char *)&bytes,
892 SIZEOF_SIZE_T, IS_LITTLE_ENDIAN, 0);
893}
894
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000895/* Get a C PY_LONG_LONG int from a long int object.
Tim Petersd1a7da62001-06-13 00:35:57 +0000896 Return -1 and set an error if overflow occurs. */
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000897
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000898PY_LONG_LONG
Tim Peters9f688bf2000-07-07 15:53:28 +0000899PyLong_AsLongLong(PyObject *vv)
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000900{
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000901 PY_LONG_LONG bytes;
Tim Petersd1a7da62001-06-13 00:35:57 +0000902 int one = 1;
903 int res;
904
Tim Petersd38b1c72001-09-30 05:09:37 +0000905 if (vv == NULL) {
906 PyErr_BadInternalCall();
907 return -1;
908 }
909 if (!PyLong_Check(vv)) {
Martin v. Löwis6ce7ed22005-03-03 12:26:35 +0000910 PyNumberMethods *nb;
911 PyObject *io;
Tim Petersd38b1c72001-09-30 05:09:37 +0000912 if (PyInt_Check(vv))
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000913 return (PY_LONG_LONG)PyInt_AsLong(vv);
Martin v. Löwis6ce7ed22005-03-03 12:26:35 +0000914 if ((nb = vv->ob_type->tp_as_number) == NULL ||
915 nb->nb_int == NULL) {
916 PyErr_SetString(PyExc_TypeError, "an integer is required");
917 return -1;
918 }
919 io = (*nb->nb_int) (vv);
920 if (io == NULL)
921 return -1;
922 if (PyInt_Check(io)) {
923 bytes = PyInt_AsLong(io);
924 Py_DECREF(io);
925 return bytes;
926 }
927 if (PyLong_Check(io)) {
928 bytes = PyLong_AsLongLong(io);
929 Py_DECREF(io);
930 return bytes;
931 }
932 Py_DECREF(io);
933 PyErr_SetString(PyExc_TypeError, "integer conversion failed");
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000934 return -1;
935 }
936
Tim Petersd1a7da62001-06-13 00:35:57 +0000937 res = _PyLong_AsByteArray(
938 (PyLongObject *)vv, (unsigned char *)&bytes,
939 SIZEOF_LONG_LONG, IS_LITTLE_ENDIAN, 1);
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000940
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000941 /* Plan 9 can't handle PY_LONG_LONG in ? : expressions */
Martin v. Löwisc8bb9eb2002-03-09 12:02:59 +0000942 if (res < 0)
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000943 return (PY_LONG_LONG)-1;
Martin v. Löwisc8bb9eb2002-03-09 12:02:59 +0000944 else
945 return bytes;
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000946}
947
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000948/* Get a C unsigned PY_LONG_LONG int from a long int object.
Tim Petersd1a7da62001-06-13 00:35:57 +0000949 Return -1 and set an error if overflow occurs. */
950
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000951unsigned PY_LONG_LONG
Tim Peters9f688bf2000-07-07 15:53:28 +0000952PyLong_AsUnsignedLongLong(PyObject *vv)
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000953{
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000954 unsigned PY_LONG_LONG bytes;
Tim Petersd1a7da62001-06-13 00:35:57 +0000955 int one = 1;
956 int res;
957
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000958 if (vv == NULL || !PyLong_Check(vv)) {
959 PyErr_BadInternalCall();
Skip Montanaro429433b2006-04-18 00:35:43 +0000960 return (unsigned PY_LONG_LONG)-1;
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000961 }
962
Tim Petersd1a7da62001-06-13 00:35:57 +0000963 res = _PyLong_AsByteArray(
964 (PyLongObject *)vv, (unsigned char *)&bytes,
965 SIZEOF_LONG_LONG, IS_LITTLE_ENDIAN, 0);
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000966
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000967 /* Plan 9 can't handle PY_LONG_LONG in ? : expressions */
Martin v. Löwisc8bb9eb2002-03-09 12:02:59 +0000968 if (res < 0)
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000969 return (unsigned PY_LONG_LONG)res;
Martin v. Löwisc8bb9eb2002-03-09 12:02:59 +0000970 else
971 return bytes;
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000972}
Tim Petersd1a7da62001-06-13 00:35:57 +0000973
Thomas Hellera4ea6032003-04-17 18:55:45 +0000974/* Get a C unsigned long int from a long int object, ignoring the high bits.
975 Returns -1 and sets an error condition if an error occurs. */
976
977unsigned PY_LONG_LONG
978PyLong_AsUnsignedLongLongMask(PyObject *vv)
979{
980 register PyLongObject *v;
981 unsigned PY_LONG_LONG x;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000982 Py_ssize_t i;
983 int sign;
Thomas Hellera4ea6032003-04-17 18:55:45 +0000984
985 if (vv == NULL || !PyLong_Check(vv)) {
986 PyErr_BadInternalCall();
987 return (unsigned long) -1;
988 }
989 v = (PyLongObject *)vv;
990 i = v->ob_size;
991 sign = 1;
992 x = 0;
993 if (i < 0) {
994 sign = -1;
995 i = -i;
996 }
997 while (--i >= 0) {
998 x = (x << SHIFT) + v->ob_digit[i];
999 }
1000 return x * sign;
1001}
Tim Petersd1a7da62001-06-13 00:35:57 +00001002#undef IS_LITTLE_ENDIAN
1003
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001004#endif /* HAVE_LONG_LONG */
1005
Neil Schemenauerba872e22001-01-04 01:46:03 +00001006
1007static int
1008convert_binop(PyObject *v, PyObject *w, PyLongObject **a, PyLongObject **b) {
Tim Peters5af4e6c2002-08-12 02:31:19 +00001009 if (PyLong_Check(v)) {
Neil Schemenauerba872e22001-01-04 01:46:03 +00001010 *a = (PyLongObject *) v;
1011 Py_INCREF(v);
1012 }
1013 else if (PyInt_Check(v)) {
1014 *a = (PyLongObject *) PyLong_FromLong(PyInt_AS_LONG(v));
1015 }
1016 else {
1017 return 0;
1018 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00001019 if (PyLong_Check(w)) {
Neil Schemenauerba872e22001-01-04 01:46:03 +00001020 *b = (PyLongObject *) w;
1021 Py_INCREF(w);
1022 }
1023 else if (PyInt_Check(w)) {
1024 *b = (PyLongObject *) PyLong_FromLong(PyInt_AS_LONG(w));
1025 }
1026 else {
1027 Py_DECREF(*a);
1028 return 0;
1029 }
1030 return 1;
1031}
1032
1033#define CONVERT_BINOP(v, w, a, b) \
1034 if (!convert_binop(v, w, a, b)) { \
1035 Py_INCREF(Py_NotImplemented); \
1036 return Py_NotImplemented; \
1037 }
1038
Tim Peters877a2122002-08-12 05:09:36 +00001039/* x[0:m] and y[0:n] are digit vectors, LSD first, m >= n required. x[0:n]
1040 * is modified in place, by adding y to it. Carries are propagated as far as
1041 * x[m-1], and the remaining carry (0 or 1) is returned.
1042 */
1043static digit
Martin v. Löwis18e16552006-02-15 17:27:45 +00001044v_iadd(digit *x, Py_ssize_t m, digit *y, Py_ssize_t n)
Tim Peters877a2122002-08-12 05:09:36 +00001045{
1046 int i;
1047 digit carry = 0;
1048
1049 assert(m >= n);
1050 for (i = 0; i < n; ++i) {
1051 carry += x[i] + y[i];
1052 x[i] = carry & MASK;
1053 carry >>= SHIFT;
1054 assert((carry & 1) == carry);
1055 }
1056 for (; carry && i < m; ++i) {
1057 carry += x[i];
1058 x[i] = carry & MASK;
1059 carry >>= SHIFT;
1060 assert((carry & 1) == carry);
1061 }
1062 return carry;
1063}
1064
1065/* x[0:m] and y[0:n] are digit vectors, LSD first, m >= n required. x[0:n]
1066 * is modified in place, by subtracting y from it. Borrows are propagated as
1067 * far as x[m-1], and the remaining borrow (0 or 1) is returned.
1068 */
1069static digit
Martin v. Löwis18e16552006-02-15 17:27:45 +00001070v_isub(digit *x, Py_ssize_t m, digit *y, Py_ssize_t n)
Tim Peters877a2122002-08-12 05:09:36 +00001071{
1072 int i;
1073 digit borrow = 0;
1074
1075 assert(m >= n);
1076 for (i = 0; i < n; ++i) {
1077 borrow = x[i] - y[i] - borrow;
1078 x[i] = borrow & MASK;
1079 borrow >>= SHIFT;
1080 borrow &= 1; /* keep only 1 sign bit */
1081 }
1082 for (; borrow && i < m; ++i) {
1083 borrow = x[i] - borrow;
1084 x[i] = borrow & MASK;
1085 borrow >>= SHIFT;
1086 borrow &= 1;
1087 }
1088 return borrow;
1089}
Neil Schemenauerba872e22001-01-04 01:46:03 +00001090
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001091/* Multiply by a single digit, ignoring the sign. */
1092
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001093static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00001094mul1(PyLongObject *a, wdigit n)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001095{
1096 return muladd1(a, n, (digit)0);
1097}
1098
1099/* Multiply by a single digit and add a single digit, ignoring the sign. */
1100
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001101static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00001102muladd1(PyLongObject *a, wdigit n, wdigit extra)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001103{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001104 Py_ssize_t size_a = ABS(a->ob_size);
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001105 PyLongObject *z = _PyLong_New(size_a+1);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001106 twodigits carry = extra;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001107 Py_ssize_t i;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001108
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001109 if (z == NULL)
1110 return NULL;
1111 for (i = 0; i < size_a; ++i) {
1112 carry += (twodigits)a->ob_digit[i] * n;
Guido van Rossum2095d241997-04-09 19:41:24 +00001113 z->ob_digit[i] = (digit) (carry & MASK);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001114 carry >>= SHIFT;
1115 }
Guido van Rossum2095d241997-04-09 19:41:24 +00001116 z->ob_digit[i] = (digit) carry;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001117 return long_normalize(z);
1118}
1119
Tim Peters212e6142001-07-14 12:23:19 +00001120/* Divide long pin, w/ size digits, by non-zero digit n, storing quotient
1121 in pout, and returning the remainder. pin and pout point at the LSD.
1122 It's OK for pin == pout on entry, which saves oodles of mallocs/frees in
1123 long_format, but that should be done with great care since longs are
1124 immutable. */
1125
1126static digit
Martin v. Löwis18e16552006-02-15 17:27:45 +00001127inplace_divrem1(digit *pout, digit *pin, Py_ssize_t size, digit n)
Tim Peters212e6142001-07-14 12:23:19 +00001128{
1129 twodigits rem = 0;
1130
1131 assert(n > 0 && n <= MASK);
1132 pin += size;
1133 pout += size;
1134 while (--size >= 0) {
1135 digit hi;
1136 rem = (rem << SHIFT) + *--pin;
1137 *--pout = hi = (digit)(rem / n);
1138 rem -= hi * n;
1139 }
1140 return (digit)rem;
1141}
1142
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001143/* Divide a long integer by a digit, returning both the quotient
1144 (as function result) and the remainder (through *prem).
1145 The sign of a is ignored; n should not be zero. */
1146
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001147static PyLongObject *
Tim Peters212e6142001-07-14 12:23:19 +00001148divrem1(PyLongObject *a, digit n, digit *prem)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001149{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001150 const Py_ssize_t size = ABS(a->ob_size);
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001151 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001152
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001153 assert(n > 0 && n <= MASK);
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001154 z = _PyLong_New(size);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001155 if (z == NULL)
1156 return NULL;
Tim Peters212e6142001-07-14 12:23:19 +00001157 *prem = inplace_divrem1(z->ob_digit, a->ob_digit, size, n);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001158 return long_normalize(z);
1159}
1160
1161/* Convert a long int object to a string, using a given conversion base.
Guido van Rossum3d3037d1991-10-24 14:55:57 +00001162 Return a string object.
Fred Drake121ee271999-12-23 15:41:28 +00001163 If base is 8 or 16, add the proper prefix '0' or '0x'. */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001164
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001165static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00001166long_format(PyObject *aa, int base, int addL)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001167{
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001168 register PyLongObject *a = (PyLongObject *)aa;
1169 PyStringObject *str;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001170 Py_ssize_t i;
Neal Norwitzc09efa82006-07-23 07:53:14 +00001171 Py_ssize_t size_a;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001172 char *p;
1173 int bits;
1174 char sign = '\0';
Guido van Rossume32e0141992-01-19 16:31:05 +00001175
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001176 if (a == NULL || !PyLong_Check(a)) {
1177 PyErr_BadInternalCall();
Guido van Rossume32e0141992-01-19 16:31:05 +00001178 return NULL;
1179 }
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001180 assert(base >= 2 && base <= 36);
Neal Norwitzc09efa82006-07-23 07:53:14 +00001181 size_a = ABS(a->ob_size);
Tim Peters5af4e6c2002-08-12 02:31:19 +00001182
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001183 /* Compute a rough upper bound for the length of the string */
1184 i = base;
1185 bits = 0;
1186 while (i > 1) {
1187 ++bits;
1188 i >>= 1;
1189 }
Fred Drake121ee271999-12-23 15:41:28 +00001190 i = 5 + (addL ? 1 : 0) + (size_a*SHIFT + bits-1) / bits;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001191 str = (PyStringObject *) PyString_FromStringAndSize((char *)0, i);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001192 if (str == NULL)
1193 return NULL;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001194 p = PyString_AS_STRING(str) + i;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001195 *p = '\0';
Fred Drake121ee271999-12-23 15:41:28 +00001196 if (addL)
1197 *--p = 'L';
Guido van Rossum4c260ff1992-01-14 18:36:43 +00001198 if (a->ob_size < 0)
1199 sign = '-';
Tim Peters5af4e6c2002-08-12 02:31:19 +00001200
Guido van Rossumbd3a5271998-08-11 15:04:47 +00001201 if (a->ob_size == 0) {
1202 *--p = '0';
1203 }
1204 else if ((base & (base - 1)) == 0) {
1205 /* JRH: special case for power-of-2 bases */
Tim Peters586b2e32001-07-15 09:11:14 +00001206 twodigits accum = 0;
1207 int accumbits = 0; /* # of bits in accum */
1208 int basebits = 1; /* # of bits in base-1 */
Guido van Rossumbd3a5271998-08-11 15:04:47 +00001209 i = base;
Tim Peters7d3a5112000-07-08 04:17:21 +00001210 while ((i >>= 1) > 1)
1211 ++basebits;
Tim Peters586b2e32001-07-15 09:11:14 +00001212
1213 for (i = 0; i < size_a; ++i) {
Tim Peters0d2d87d2002-08-20 19:00:22 +00001214 accum |= (twodigits)a->ob_digit[i] << accumbits;
Tim Peters586b2e32001-07-15 09:11:14 +00001215 accumbits += SHIFT;
1216 assert(accumbits >= basebits);
1217 do {
Martin v. Löwisa5854c22002-02-16 23:39:10 +00001218 char cdigit = (char)(accum & (base - 1));
Raymond Hettinger3296e692005-06-29 23:29:56 +00001219 cdigit += (cdigit < 10) ? '0' : 'a'-10;
Guido van Rossumbd3a5271998-08-11 15:04:47 +00001220 assert(p > PyString_AS_STRING(str));
Martin v. Löwisa5854c22002-02-16 23:39:10 +00001221 *--p = cdigit;
Tim Peters586b2e32001-07-15 09:11:14 +00001222 accumbits -= basebits;
1223 accum >>= basebits;
1224 } while (i < size_a-1 ? accumbits >= basebits :
1225 accum > 0);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001226 }
Guido van Rossumbd3a5271998-08-11 15:04:47 +00001227 }
1228 else {
Tim Petersfad225f2001-07-13 02:59:26 +00001229 /* Not 0, and base not a power of 2. Divide repeatedly by
1230 base, but for speed use the highest power of base that
1231 fits in a digit. */
Martin v. Löwis18e16552006-02-15 17:27:45 +00001232 Py_ssize_t size = size_a;
Tim Peters212e6142001-07-14 12:23:19 +00001233 digit *pin = a->ob_digit;
1234 PyLongObject *scratch;
1235 /* powbasw <- largest power of base that fits in a digit. */
Tim Petersfad225f2001-07-13 02:59:26 +00001236 digit powbase = base; /* powbase == base ** power */
1237 int power = 1;
1238 for (;;) {
1239 unsigned long newpow = powbase * (unsigned long)base;
1240 if (newpow >> SHIFT) /* doesn't fit in a digit */
1241 break;
1242 powbase = (digit)newpow;
1243 ++power;
1244 }
Tim Peters212e6142001-07-14 12:23:19 +00001245
1246 /* Get a scratch area for repeated division. */
1247 scratch = _PyLong_New(size);
1248 if (scratch == NULL) {
1249 Py_DECREF(str);
1250 return NULL;
1251 }
1252
1253 /* Repeatedly divide by powbase. */
Guido van Rossumbd3a5271998-08-11 15:04:47 +00001254 do {
Tim Petersfad225f2001-07-13 02:59:26 +00001255 int ntostore = power;
Tim Peters212e6142001-07-14 12:23:19 +00001256 digit rem = inplace_divrem1(scratch->ob_digit,
1257 pin, size, powbase);
1258 pin = scratch->ob_digit; /* no need to use a again */
1259 if (pin[size - 1] == 0)
1260 --size;
Guido van Rossumbd3a5271998-08-11 15:04:47 +00001261 SIGCHECK({
Tim Peters212e6142001-07-14 12:23:19 +00001262 Py_DECREF(scratch);
Guido van Rossumbd3a5271998-08-11 15:04:47 +00001263 Py_DECREF(str);
1264 return NULL;
1265 })
Tim Peters212e6142001-07-14 12:23:19 +00001266
1267 /* Break rem into digits. */
Tim Petersc8a6b9b2001-07-14 11:01:28 +00001268 assert(ntostore > 0);
1269 do {
Tim Petersfad225f2001-07-13 02:59:26 +00001270 digit nextrem = (digit)(rem / base);
1271 char c = (char)(rem - nextrem * base);
1272 assert(p > PyString_AS_STRING(str));
Raymond Hettinger3296e692005-06-29 23:29:56 +00001273 c += (c < 10) ? '0' : 'a'-10;
Tim Petersfad225f2001-07-13 02:59:26 +00001274 *--p = c;
1275 rem = nextrem;
Tim Petersc8a6b9b2001-07-14 11:01:28 +00001276 --ntostore;
1277 /* Termination is a bit delicate: must not
1278 store leading zeroes, so must get out if
Tim Peters212e6142001-07-14 12:23:19 +00001279 remaining quotient and rem are both 0. */
1280 } while (ntostore && (size || rem));
1281 } while (size != 0);
1282 Py_DECREF(scratch);
Guido van Rossumbd3a5271998-08-11 15:04:47 +00001283 }
1284
Guido van Rossum2c475421992-08-14 15:13:07 +00001285 if (base == 8) {
1286 if (size_a != 0)
1287 *--p = '0';
1288 }
Guido van Rossum3d3037d1991-10-24 14:55:57 +00001289 else if (base == 16) {
1290 *--p = 'x';
1291 *--p = '0';
1292 }
Guido van Rossumc6913e71991-11-19 20:26:46 +00001293 else if (base != 10) {
1294 *--p = '#';
1295 *--p = '0' + base%10;
1296 if (base > 10)
1297 *--p = '0' + base/10;
1298 }
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001299 if (sign)
1300 *--p = sign;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001301 if (p != PyString_AS_STRING(str)) {
1302 char *q = PyString_AS_STRING(str);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001303 assert(p > q);
1304 do {
1305 } while ((*q++ = *p++) != '\0');
Guido van Rossumc7ec9c91991-05-28 21:58:16 +00001306 q--;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001307 _PyString_Resize((PyObject **)&str,
1308 (int) (q - PyString_AS_STRING(str)));
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001309 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001310 return (PyObject *)str;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001311}
1312
Tim Petersda53afa2006-05-25 17:34:03 +00001313/* Table of digit values for 8-bit string -> integer conversion.
1314 * '0' maps to 0, ..., '9' maps to 9.
1315 * 'a' and 'A' map to 10, ..., 'z' and 'Z' map to 35.
1316 * All other indices map to 37.
1317 * Note that when converting a base B string, a char c is a legitimate
1318 * base B digit iff _PyLong_DigitValue[Py_CHARMASK(c)] < B.
1319 */
1320int _PyLong_DigitValue[256] = {
Tim Peters696cf432006-05-24 21:10:40 +00001321 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1322 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1323 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1324 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 37, 37, 37, 37, 37, 37,
1325 37, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1326 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 37, 37, 37, 37, 37,
1327 37, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1328 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 37, 37, 37, 37, 37,
1329 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1330 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1331 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1332 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1333 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1334 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1335 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1336 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
Tim Peters696cf432006-05-24 21:10:40 +00001337};
1338
1339/* *str points to the first digit in a string of base `base` digits. base
Tim Petersbf2674b2003-02-02 07:51:32 +00001340 * is a power of 2 (2, 4, 8, 16, or 32). *str is set to point to the first
1341 * non-digit (which may be *str!). A normalized long is returned.
1342 * The point to this routine is that it takes time linear in the number of
1343 * string characters.
1344 */
1345static PyLongObject *
1346long_from_binary_base(char **str, int base)
1347{
1348 char *p = *str;
1349 char *start = p;
1350 int bits_per_char;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001351 Py_ssize_t n;
Tim Petersbf2674b2003-02-02 07:51:32 +00001352 PyLongObject *z;
1353 twodigits accum;
1354 int bits_in_accum;
1355 digit *pdigit;
1356
1357 assert(base >= 2 && base <= 32 && (base & (base - 1)) == 0);
1358 n = base;
1359 for (bits_per_char = -1; n; ++bits_per_char)
1360 n >>= 1;
1361 /* n <- total # of bits needed, while setting p to end-of-string */
1362 n = 0;
Tim Petersda53afa2006-05-25 17:34:03 +00001363 while (_PyLong_DigitValue[Py_CHARMASK(*p)] < base)
Tim Petersbf2674b2003-02-02 07:51:32 +00001364 ++p;
Tim Petersbf2674b2003-02-02 07:51:32 +00001365 *str = p;
Tim Peters1a3b19a2003-02-02 17:33:53 +00001366 n = (p - start) * bits_per_char;
1367 if (n / bits_per_char != p - start) {
1368 PyErr_SetString(PyExc_ValueError,
1369 "long string too large to convert");
1370 return NULL;
1371 }
Tim Petersbf2674b2003-02-02 07:51:32 +00001372 /* n <- # of Python digits needed, = ceiling(n/SHIFT). */
1373 n = (n + SHIFT - 1) / SHIFT;
1374 z = _PyLong_New(n);
1375 if (z == NULL)
1376 return NULL;
1377 /* Read string from right, and fill in long from left; i.e.,
1378 * from least to most significant in both.
1379 */
1380 accum = 0;
1381 bits_in_accum = 0;
1382 pdigit = z->ob_digit;
1383 while (--p >= start) {
Tim Petersda53afa2006-05-25 17:34:03 +00001384 int k = _PyLong_DigitValue[Py_CHARMASK(*p)];
Tim Petersc7bc0b92003-05-05 20:39:43 +00001385 assert(k >= 0 && k < base);
1386 accum |= (twodigits)(k << bits_in_accum);
Tim Petersbf2674b2003-02-02 07:51:32 +00001387 bits_in_accum += bits_per_char;
1388 if (bits_in_accum >= SHIFT) {
1389 *pdigit++ = (digit)(accum & MASK);
Martin v. Löwis18e16552006-02-15 17:27:45 +00001390 assert(pdigit - z->ob_digit <= (int)n);
Tim Petersbf2674b2003-02-02 07:51:32 +00001391 accum >>= SHIFT;
1392 bits_in_accum -= SHIFT;
1393 assert(bits_in_accum < SHIFT);
1394 }
1395 }
1396 if (bits_in_accum) {
1397 assert(bits_in_accum <= SHIFT);
1398 *pdigit++ = (digit)accum;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001399 assert(pdigit - z->ob_digit <= (int)n);
Tim Petersbf2674b2003-02-02 07:51:32 +00001400 }
1401 while (pdigit - z->ob_digit < n)
1402 *pdigit++ = 0;
1403 return long_normalize(z);
1404}
1405
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001406PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00001407PyLong_FromString(char *str, char **pend, int base)
Guido van Rossumeb1fafc1994-08-29 12:47:19 +00001408{
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001409 int sign = 1;
Guido van Rossum9e896b32000-04-05 20:11:21 +00001410 char *start, *orig_str = str;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001411 PyLongObject *z;
Thomas Wouters9cb28bea2006-04-11 23:50:33 +00001412 PyObject *strobj, *strrepr;
1413 Py_ssize_t slen;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001414
Guido van Rossum472c04f1996-12-05 21:57:21 +00001415 if ((base != 0 && base < 2) || base > 36) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001416 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +00001417 "long() arg 2 must be >= 2 and <= 36");
Guido van Rossumeb1fafc1994-08-29 12:47:19 +00001418 return NULL;
1419 }
Guido van Rossum9fa2c111995-02-10 17:00:37 +00001420 while (*str != '\0' && isspace(Py_CHARMASK(*str)))
Guido van Rossumeb1fafc1994-08-29 12:47:19 +00001421 str++;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001422 if (*str == '+')
1423 ++str;
1424 else if (*str == '-') {
1425 ++str;
1426 sign = -1;
1427 }
Guido van Rossum9fa2c111995-02-10 17:00:37 +00001428 while (*str != '\0' && isspace(Py_CHARMASK(*str)))
Guido van Rossumeb1fafc1994-08-29 12:47:19 +00001429 str++;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001430 if (base == 0) {
1431 if (str[0] != '0')
1432 base = 10;
1433 else if (str[1] == 'x' || str[1] == 'X')
1434 base = 16;
1435 else
1436 base = 8;
1437 }
1438 if (base == 16 && str[0] == '0' && (str[1] == 'x' || str[1] == 'X'))
1439 str += 2;
Tim Peters696cf432006-05-24 21:10:40 +00001440
Guido van Rossume6762971998-06-22 03:54:46 +00001441 start = str;
Tim Petersbf2674b2003-02-02 07:51:32 +00001442 if ((base & (base - 1)) == 0)
1443 z = long_from_binary_base(&str, base);
1444 else {
Tim Peters696cf432006-05-24 21:10:40 +00001445/***
1446Binary bases can be converted in time linear in the number of digits, because
1447Python's representation base is binary. Other bases (including decimal!) use
1448the simple quadratic-time algorithm below, complicated by some speed tricks.
Tim Peters5af4e6c2002-08-12 02:31:19 +00001449
Tim Peters696cf432006-05-24 21:10:40 +00001450First some math: the largest integer that can be expressed in N base-B digits
1451is B**N-1. Consequently, if we have an N-digit input in base B, the worst-
1452case number of Python digits needed to hold it is the smallest integer n s.t.
1453
1454 BASE**n-1 >= B**N-1 [or, adding 1 to both sides]
1455 BASE**n >= B**N [taking logs to base BASE]
1456 n >= log(B**N)/log(BASE) = N * log(B)/log(BASE)
1457
1458The static array log_base_BASE[base] == log(base)/log(BASE) so we can compute
1459this quickly. A Python long with that much space is reserved near the start,
1460and the result is computed into it.
1461
1462The input string is actually treated as being in base base**i (i.e., i digits
1463are processed at a time), where two more static arrays hold:
1464
1465 convwidth_base[base] = the largest integer i such that base**i <= BASE
1466 convmultmax_base[base] = base ** convwidth_base[base]
1467
1468The first of these is the largest i such that i consecutive input digits
1469must fit in a single Python digit. The second is effectively the input
1470base we're really using.
1471
1472Viewing the input as a sequence <c0, c1, ..., c_n-1> of digits in base
1473convmultmax_base[base], the result is "simply"
1474
1475 (((c0*B + c1)*B + c2)*B + c3)*B + ... ))) + c_n-1
1476
1477where B = convmultmax_base[base].
Tim Peters9faa3ed2006-05-30 15:53:34 +00001478
1479Error analysis: as above, the number of Python digits `n` needed is worst-
1480case
1481
1482 n >= N * log(B)/log(BASE)
1483
1484where `N` is the number of input digits in base `B`. This is computed via
1485
1486 size_z = (Py_ssize_t)((scan - str) * log_base_BASE[base]) + 1;
1487
1488below. Two numeric concerns are how much space this can waste, and whether
1489the computed result can be too small. To be concrete, assume BASE = 2**15,
1490which is the default (and it's unlikely anyone changes that).
1491
1492Waste isn't a problem: provided the first input digit isn't 0, the difference
1493between the worst-case input with N digits and the smallest input with N
1494digits is about a factor of B, but B is small compared to BASE so at most
1495one allocated Python digit can remain unused on that count. If
1496N*log(B)/log(BASE) is mathematically an exact integer, then truncating that
1497and adding 1 returns a result 1 larger than necessary. However, that can't
1498happen: whenever B is a power of 2, long_from_binary_base() is called
1499instead, and it's impossible for B**i to be an integer power of 2**15 when
1500B is not a power of 2 (i.e., it's impossible for N*log(B)/log(BASE) to be
1501an exact integer when B is not a power of 2, since B**i has a prime factor
1502other than 2 in that case, but (2**15)**j's only prime factor is 2).
1503
1504The computed result can be too small if the true value of N*log(B)/log(BASE)
1505is a little bit larger than an exact integer, but due to roundoff errors (in
1506computing log(B), log(BASE), their quotient, and/or multiplying that by N)
1507yields a numeric result a little less than that integer. Unfortunately, "how
1508close can a transcendental function get to an integer over some range?"
1509questions are generally theoretically intractable. Computer analysis via
1510continued fractions is practical: expand log(B)/log(BASE) via continued
1511fractions, giving a sequence i/j of "the best" rational approximations. Then
1512j*log(B)/log(BASE) is approximately equal to (the integer) i. This shows that
1513we can get very close to being in trouble, but very rarely. For example,
151476573 is a denominator in one of the continued-fraction approximations to
1515log(10)/log(2**15), and indeed:
1516
1517 >>> log(10)/log(2**15)*76573
1518 16958.000000654003
1519
1520is very close to an integer. If we were working with IEEE single-precision,
1521rounding errors could kill us. Finding worst cases in IEEE double-precision
1522requires better-than-double-precision log() functions, and Tim didn't bother.
1523Instead the code checks to see whether the allocated space is enough as each
1524new Python digit is added, and copies the whole thing to a larger long if not.
1525This should happen extremely rarely, and in fact I don't have a test case
1526that triggers it(!). Instead the code was tested by artificially allocating
1527just 1 digit at the start, so that the copying code was exercised for every
1528digit beyond the first.
Tim Peters696cf432006-05-24 21:10:40 +00001529***/
1530 register twodigits c; /* current input character */
1531 Py_ssize_t size_z;
1532 int i;
1533 int convwidth;
1534 twodigits convmultmax, convmult;
1535 digit *pz, *pzstop;
1536 char* scan;
1537
1538 static double log_base_BASE[37] = {0.0e0,};
1539 static int convwidth_base[37] = {0,};
1540 static twodigits convmultmax_base[37] = {0,};
1541
1542 if (log_base_BASE[base] == 0.0) {
1543 twodigits convmax = base;
1544 int i = 1;
1545
1546 log_base_BASE[base] = log((double)base) /
1547 log((double)BASE);
1548 for (;;) {
1549 twodigits next = convmax * base;
1550 if (next > BASE)
1551 break;
1552 convmax = next;
1553 ++i;
1554 }
1555 convmultmax_base[base] = convmax;
1556 assert(i > 0);
1557 convwidth_base[base] = i;
1558 }
1559
1560 /* Find length of the string of numeric characters. */
1561 scan = str;
Tim Petersda53afa2006-05-25 17:34:03 +00001562 while (_PyLong_DigitValue[Py_CHARMASK(*scan)] < base)
Tim Peters696cf432006-05-24 21:10:40 +00001563 ++scan;
1564
1565 /* Create a long object that can contain the largest possible
1566 * integer with this base and length. Note that there's no
1567 * need to initialize z->ob_digit -- no slot is read up before
1568 * being stored into.
1569 */
1570 size_z = (Py_ssize_t)((scan - str) * log_base_BASE[base]) + 1;
Tim Peters9faa3ed2006-05-30 15:53:34 +00001571 /* Uncomment next line to test exceedingly rare copy code */
1572 /* size_z = 1; */
Tim Peters696cf432006-05-24 21:10:40 +00001573 assert(size_z > 0);
1574 z = _PyLong_New(size_z);
1575 if (z == NULL)
1576 return NULL;
1577 z->ob_size = 0;
1578
1579 /* `convwidth` consecutive input digits are treated as a single
1580 * digit in base `convmultmax`.
1581 */
1582 convwidth = convwidth_base[base];
1583 convmultmax = convmultmax_base[base];
1584
1585 /* Work ;-) */
1586 while (str < scan) {
1587 /* grab up to convwidth digits from the input string */
Tim Petersda53afa2006-05-25 17:34:03 +00001588 c = (digit)_PyLong_DigitValue[Py_CHARMASK(*str++)];
Tim Peters696cf432006-05-24 21:10:40 +00001589 for (i = 1; i < convwidth && str != scan; ++i, ++str) {
1590 c = (twodigits)(c * base +
Tim Petersda53afa2006-05-25 17:34:03 +00001591 _PyLong_DigitValue[Py_CHARMASK(*str)]);
Tim Peters696cf432006-05-24 21:10:40 +00001592 assert(c < BASE);
1593 }
1594
1595 convmult = convmultmax;
1596 /* Calculate the shift only if we couldn't get
1597 * convwidth digits.
1598 */
1599 if (i != convwidth) {
1600 convmult = base;
1601 for ( ; i > 1; --i)
1602 convmult *= base;
1603 }
1604
1605 /* Multiply z by convmult, and add c. */
1606 pz = z->ob_digit;
1607 pzstop = pz + z->ob_size;
1608 for (; pz < pzstop; ++pz) {
1609 c += (twodigits)*pz * convmult;
1610 *pz = (digit)(c & MASK);
1611 c >>= SHIFT;
1612 }
1613 /* carry off the current end? */
1614 if (c) {
1615 assert(c < BASE);
Tim Peters9faa3ed2006-05-30 15:53:34 +00001616 if (z->ob_size < size_z) {
1617 *pz = (digit)c;
1618 ++z->ob_size;
1619 }
1620 else {
1621 PyLongObject *tmp;
1622 /* Extremely rare. Get more space. */
1623 assert(z->ob_size == size_z);
1624 tmp = _PyLong_New(size_z + 1);
1625 if (tmp == NULL) {
1626 Py_DECREF(z);
1627 return NULL;
1628 }
1629 memcpy(tmp->ob_digit,
1630 z->ob_digit,
1631 sizeof(digit) * size_z);
1632 Py_DECREF(z);
1633 z = tmp;
1634 z->ob_digit[size_z] = (digit)c;
1635 ++size_z;
1636 }
Tim Peters696cf432006-05-24 21:10:40 +00001637 }
Tim Petersbf2674b2003-02-02 07:51:32 +00001638 }
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001639 }
Guido van Rossumac6a37a1998-08-04 15:04:06 +00001640 if (z == NULL)
1641 return NULL;
Guido van Rossum9e896b32000-04-05 20:11:21 +00001642 if (str == start)
1643 goto onError;
Tim Peters696cf432006-05-24 21:10:40 +00001644 if (sign < 0)
Guido van Rossum4c260ff1992-01-14 18:36:43 +00001645 z->ob_size = -(z->ob_size);
Guido van Rossum9e896b32000-04-05 20:11:21 +00001646 if (*str == 'L' || *str == 'l')
1647 str++;
1648 while (*str && isspace(Py_CHARMASK(*str)))
1649 str++;
1650 if (*str != '\0')
1651 goto onError;
Guido van Rossumeb1fafc1994-08-29 12:47:19 +00001652 if (pend)
1653 *pend = str;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001654 return (PyObject *) z;
Guido van Rossum9e896b32000-04-05 20:11:21 +00001655
1656 onError:
Guido van Rossum9e896b32000-04-05 20:11:21 +00001657 Py_XDECREF(z);
Thomas Wouters9cb28bea2006-04-11 23:50:33 +00001658 slen = strlen(orig_str) < 200 ? strlen(orig_str) : 200;
1659 strobj = PyString_FromStringAndSize(orig_str, slen);
1660 if (strobj == NULL)
1661 return NULL;
1662 strrepr = PyObject_Repr(strobj);
1663 Py_DECREF(strobj);
1664 if (strrepr == NULL)
1665 return NULL;
1666 PyErr_Format(PyExc_ValueError,
1667 "invalid literal for long() with base %d: %s",
1668 base, PyString_AS_STRING(strrepr));
1669 Py_DECREF(strrepr);
Guido van Rossum9e896b32000-04-05 20:11:21 +00001670 return NULL;
1671}
1672
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001673#ifdef Py_USING_UNICODE
Guido van Rossum9e896b32000-04-05 20:11:21 +00001674PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00001675PyLong_FromUnicode(Py_UNICODE *u, Py_ssize_t length, int base)
Guido van Rossum9e896b32000-04-05 20:11:21 +00001676{
Walter Dörwald07e14762002-11-06 16:15:14 +00001677 PyObject *result;
Anthony Baxter377be112006-04-11 06:54:30 +00001678 char *buffer = (char *)PyMem_MALLOC(length+1);
Guido van Rossum9e896b32000-04-05 20:11:21 +00001679
Walter Dörwald07e14762002-11-06 16:15:14 +00001680 if (buffer == NULL)
1681 return NULL;
1682
1683 if (PyUnicode_EncodeDecimal(u, length, buffer, NULL)) {
1684 PyMem_FREE(buffer);
Guido van Rossum9e896b32000-04-05 20:11:21 +00001685 return NULL;
1686 }
Walter Dörwald07e14762002-11-06 16:15:14 +00001687 result = PyLong_FromString(buffer, NULL, base);
1688 PyMem_FREE(buffer);
1689 return result;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001690}
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001691#endif
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001692
Tim Peters9f688bf2000-07-07 15:53:28 +00001693/* forward */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001694static PyLongObject *x_divrem
Tim Peters9f688bf2000-07-07 15:53:28 +00001695 (PyLongObject *, PyLongObject *, PyLongObject **);
1696static PyObject *long_pos(PyLongObject *);
1697static int long_divrem(PyLongObject *, PyLongObject *,
1698 PyLongObject **, PyLongObject **);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001699
1700/* Long division with remainder, top-level routine */
1701
Guido van Rossume32e0141992-01-19 16:31:05 +00001702static int
Tim Peters9f688bf2000-07-07 15:53:28 +00001703long_divrem(PyLongObject *a, PyLongObject *b,
1704 PyLongObject **pdiv, PyLongObject **prem)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001705{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001706 Py_ssize_t size_a = ABS(a->ob_size), size_b = ABS(b->ob_size);
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001707 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001708
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001709 if (size_b == 0) {
Guido van Rossumbd3a5271998-08-11 15:04:47 +00001710 PyErr_SetString(PyExc_ZeroDivisionError,
Fred Drake661ea262000-10-24 19:57:45 +00001711 "long division or modulo by zero");
Guido van Rossume32e0141992-01-19 16:31:05 +00001712 return -1;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001713 }
1714 if (size_a < size_b ||
Guido van Rossum472c04f1996-12-05 21:57:21 +00001715 (size_a == size_b &&
1716 a->ob_digit[size_a-1] < b->ob_digit[size_b-1])) {
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001717 /* |a| < |b|. */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001718 *pdiv = _PyLong_New(0);
1719 Py_INCREF(a);
1720 *prem = (PyLongObject *) a;
Guido van Rossume32e0141992-01-19 16:31:05 +00001721 return 0;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001722 }
1723 if (size_b == 1) {
1724 digit rem = 0;
1725 z = divrem1(a, b->ob_digit[0], &rem);
Guido van Rossume32e0141992-01-19 16:31:05 +00001726 if (z == NULL)
1727 return -1;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001728 *prem = (PyLongObject *) PyLong_FromLong((long)rem);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001729 }
Guido van Rossume32e0141992-01-19 16:31:05 +00001730 else {
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001731 z = x_divrem(a, b, prem);
Guido van Rossume32e0141992-01-19 16:31:05 +00001732 if (z == NULL)
1733 return -1;
1734 }
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001735 /* Set the signs.
1736 The quotient z has the sign of a*b;
1737 the remainder r has the sign of a,
1738 so a = b*z + r. */
Guido van Rossume32e0141992-01-19 16:31:05 +00001739 if ((a->ob_size < 0) != (b->ob_size < 0))
1740 z->ob_size = -(z->ob_size);
1741 if (a->ob_size < 0 && (*prem)->ob_size != 0)
1742 (*prem)->ob_size = -((*prem)->ob_size);
1743 *pdiv = z;
1744 return 0;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001745}
1746
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00001747/* Unsigned long division with remainder -- the algorithm */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001748
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001749static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00001750x_divrem(PyLongObject *v1, PyLongObject *w1, PyLongObject **prem)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001751{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001752 Py_ssize_t size_v = ABS(v1->ob_size), size_w = ABS(w1->ob_size);
Guido van Rossum2095d241997-04-09 19:41:24 +00001753 digit d = (digit) ((twodigits)BASE / (w1->ob_digit[size_w-1] + 1));
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001754 PyLongObject *v = mul1(v1, d);
1755 PyLongObject *w = mul1(w1, d);
1756 PyLongObject *a;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001757 Py_ssize_t j, k;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001758
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001759 if (v == NULL || w == NULL) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001760 Py_XDECREF(v);
1761 Py_XDECREF(w);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001762 return NULL;
1763 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00001764
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001765 assert(size_v >= size_w && size_w > 1); /* Assert checks by div() */
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00001766 assert(v->ob_refcnt == 1); /* Since v will be used as accumulator! */
Guido van Rossum4c260ff1992-01-14 18:36:43 +00001767 assert(size_w == ABS(w->ob_size)); /* That's how d was calculated */
Tim Peters5af4e6c2002-08-12 02:31:19 +00001768
Guido van Rossum4c260ff1992-01-14 18:36:43 +00001769 size_v = ABS(v->ob_size);
Neal Norwitzc6a989a2006-05-10 06:57:58 +00001770 k = size_v - size_w;
1771 a = _PyLong_New(k + 1);
Tim Peters5af4e6c2002-08-12 02:31:19 +00001772
Neal Norwitzc6a989a2006-05-10 06:57:58 +00001773 for (j = size_v; a != NULL && k >= 0; --j, --k) {
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001774 digit vj = (j >= size_v) ? 0 : v->ob_digit[j];
1775 twodigits q;
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00001776 stwodigits carry = 0;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001777 int i;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001778
Guido van Rossumeb1fafc1994-08-29 12:47:19 +00001779 SIGCHECK({
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001780 Py_DECREF(a);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001781 a = NULL;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001782 break;
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00001783 })
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001784 if (vj == w->ob_digit[size_w-1])
1785 q = MASK;
1786 else
1787 q = (((twodigits)vj << SHIFT) + v->ob_digit[j-1]) /
1788 w->ob_digit[size_w-1];
Tim Peters5af4e6c2002-08-12 02:31:19 +00001789
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001790 while (w->ob_digit[size_w-2]*q >
1791 ((
1792 ((twodigits)vj << SHIFT)
1793 + v->ob_digit[j-1]
1794 - q*w->ob_digit[size_w-1]
1795 ) << SHIFT)
1796 + v->ob_digit[j-2])
1797 --q;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001798
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001799 for (i = 0; i < size_w && i+k < size_v; ++i) {
1800 twodigits z = w->ob_digit[i] * q;
Guido van Rossum2095d241997-04-09 19:41:24 +00001801 digit zz = (digit) (z >> SHIFT);
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001802 carry += v->ob_digit[i+k] - z
1803 + ((twodigits)zz << SHIFT);
Jeremy Hyltonfc61f9a2003-05-01 21:31:53 +00001804 v->ob_digit[i+k] = (digit)(carry & MASK);
Tim Peters7d3a5112000-07-08 04:17:21 +00001805 carry = Py_ARITHMETIC_RIGHT_SHIFT(BASE_TWODIGITS_TYPE,
1806 carry, SHIFT);
1807 carry -= zz;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001808 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00001809
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001810 if (i+k < size_v) {
1811 carry += v->ob_digit[i+k];
1812 v->ob_digit[i+k] = 0;
1813 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00001814
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001815 if (carry == 0)
Guido van Rossum2095d241997-04-09 19:41:24 +00001816 a->ob_digit[k] = (digit) q;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001817 else {
1818 assert(carry == -1);
Guido van Rossum2095d241997-04-09 19:41:24 +00001819 a->ob_digit[k] = (digit) q-1;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001820 carry = 0;
1821 for (i = 0; i < size_w && i+k < size_v; ++i) {
1822 carry += v->ob_digit[i+k] + w->ob_digit[i];
Jeremy Hyltonfc61f9a2003-05-01 21:31:53 +00001823 v->ob_digit[i+k] = (digit)(carry & MASK);
Tim Peters7d3a5112000-07-08 04:17:21 +00001824 carry = Py_ARITHMETIC_RIGHT_SHIFT(
1825 BASE_TWODIGITS_TYPE,
1826 carry, SHIFT);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001827 }
1828 }
1829 } /* for j, k */
Tim Peters5af4e6c2002-08-12 02:31:19 +00001830
Guido van Rossumc206c761995-01-10 15:23:19 +00001831 if (a == NULL)
1832 *prem = NULL;
1833 else {
Guido van Rossumc6913e71991-11-19 20:26:46 +00001834 a = long_normalize(a);
Guido van Rossume32e0141992-01-19 16:31:05 +00001835 *prem = divrem1(v, d, &d);
1836 /* d receives the (unused) remainder */
1837 if (*prem == NULL) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001838 Py_DECREF(a);
Guido van Rossume32e0141992-01-19 16:31:05 +00001839 a = NULL;
Guido van Rossumc6913e71991-11-19 20:26:46 +00001840 }
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001841 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001842 Py_DECREF(v);
1843 Py_DECREF(w);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001844 return a;
1845}
1846
1847/* Methods */
1848
1849static void
Tim Peters9f688bf2000-07-07 15:53:28 +00001850long_dealloc(PyObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001851{
Guido van Rossum9475a232001-10-05 20:51:39 +00001852 v->ob_type->tp_free(v);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001853}
1854
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001855static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00001856long_repr(PyObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001857{
Fred Drake121ee271999-12-23 15:41:28 +00001858 return long_format(v, 10, 1);
1859}
1860
1861static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00001862long_str(PyObject *v)
Fred Drake121ee271999-12-23 15:41:28 +00001863{
1864 return long_format(v, 10, 0);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001865}
1866
1867static int
Tim Peters9f688bf2000-07-07 15:53:28 +00001868long_compare(PyLongObject *a, PyLongObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001869{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001870 Py_ssize_t sign;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001871
Guido van Rossumc6913e71991-11-19 20:26:46 +00001872 if (a->ob_size != b->ob_size) {
Guido van Rossum4c260ff1992-01-14 18:36:43 +00001873 if (ABS(a->ob_size) == 0 && ABS(b->ob_size) == 0)
Guido van Rossumc6913e71991-11-19 20:26:46 +00001874 sign = 0;
1875 else
1876 sign = a->ob_size - b->ob_size;
1877 }
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001878 else {
Martin v. Löwis18e16552006-02-15 17:27:45 +00001879 Py_ssize_t i = ABS(a->ob_size);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001880 while (--i >= 0 && a->ob_digit[i] == b->ob_digit[i])
1881 ;
1882 if (i < 0)
1883 sign = 0;
Guido van Rossum0b0db8e1993-01-21 16:07:51 +00001884 else {
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001885 sign = (int)a->ob_digit[i] - (int)b->ob_digit[i];
Guido van Rossum0b0db8e1993-01-21 16:07:51 +00001886 if (a->ob_size < 0)
1887 sign = -sign;
1888 }
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001889 }
Guido van Rossumc6913e71991-11-19 20:26:46 +00001890 return sign < 0 ? -1 : sign > 0 ? 1 : 0;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001891}
1892
Guido van Rossum9bfef441993-03-29 10:43:31 +00001893static long
Tim Peters9f688bf2000-07-07 15:53:28 +00001894long_hash(PyLongObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001895{
1896 long x;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001897 Py_ssize_t i;
1898 int sign;
Guido van Rossum9bfef441993-03-29 10:43:31 +00001899
1900 /* This is designed so that Python ints and longs with the
1901 same value hash to the same value, otherwise comparisons
1902 of mapping keys will turn out weird */
1903 i = v->ob_size;
1904 sign = 1;
1905 x = 0;
1906 if (i < 0) {
1907 sign = -1;
1908 i = -(i);
1909 }
Neal Norwitzd5a65a72003-02-23 23:11:41 +00001910#define LONG_BIT_SHIFT (8*sizeof(long) - SHIFT)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001911 while (--i >= 0) {
Neal Norwitzd5a65a72003-02-23 23:11:41 +00001912 /* Force a native long #-bits (32 or 64) circular shift */
1913 x = ((x << SHIFT) & ~MASK) | ((x >> LONG_BIT_SHIFT) & MASK);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001914 x += v->ob_digit[i];
1915 }
Neal Norwitzd5a65a72003-02-23 23:11:41 +00001916#undef LONG_BIT_SHIFT
Guido van Rossum9bfef441993-03-29 10:43:31 +00001917 x = x * sign;
1918 if (x == -1)
1919 x = -2;
1920 return x;
1921}
1922
1923
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001924/* Add the absolute values of two long integers. */
1925
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001926static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00001927x_add(PyLongObject *a, PyLongObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001928{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001929 Py_ssize_t size_a = ABS(a->ob_size), size_b = ABS(b->ob_size);
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001930 PyLongObject *z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001931 int i;
1932 digit carry = 0;
Tim Peters69c2de32001-09-11 22:31:33 +00001933
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001934 /* Ensure a is the larger of the two: */
1935 if (size_a < size_b) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001936 { PyLongObject *temp = a; a = b; b = temp; }
Martin v. Löwis18e16552006-02-15 17:27:45 +00001937 { Py_ssize_t size_temp = size_a;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001938 size_a = size_b;
1939 size_b = size_temp; }
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001940 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001941 z = _PyLong_New(size_a+1);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001942 if (z == NULL)
1943 return NULL;
1944 for (i = 0; i < size_b; ++i) {
1945 carry += a->ob_digit[i] + b->ob_digit[i];
1946 z->ob_digit[i] = carry & MASK;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001947 carry >>= SHIFT;
1948 }
1949 for (; i < size_a; ++i) {
1950 carry += a->ob_digit[i];
1951 z->ob_digit[i] = carry & MASK;
1952 carry >>= SHIFT;
1953 }
1954 z->ob_digit[i] = carry;
1955 return long_normalize(z);
1956}
1957
1958/* Subtract the absolute values of two integers. */
1959
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001960static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00001961x_sub(PyLongObject *a, PyLongObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001962{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001963 Py_ssize_t size_a = ABS(a->ob_size), size_b = ABS(b->ob_size);
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001964 PyLongObject *z;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001965 Py_ssize_t i;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001966 int sign = 1;
1967 digit borrow = 0;
Tim Peters69c2de32001-09-11 22:31:33 +00001968
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001969 /* Ensure a is the larger of the two: */
1970 if (size_a < size_b) {
1971 sign = -1;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001972 { PyLongObject *temp = a; a = b; b = temp; }
Martin v. Löwis18e16552006-02-15 17:27:45 +00001973 { Py_ssize_t size_temp = size_a;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001974 size_a = size_b;
1975 size_b = size_temp; }
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001976 }
1977 else if (size_a == size_b) {
1978 /* Find highest digit where a and b differ: */
1979 i = size_a;
1980 while (--i >= 0 && a->ob_digit[i] == b->ob_digit[i])
1981 ;
1982 if (i < 0)
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001983 return _PyLong_New(0);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001984 if (a->ob_digit[i] < b->ob_digit[i]) {
1985 sign = -1;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001986 { PyLongObject *temp = a; a = b; b = temp; }
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001987 }
1988 size_a = size_b = i+1;
1989 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001990 z = _PyLong_New(size_a);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001991 if (z == NULL)
1992 return NULL;
1993 for (i = 0; i < size_b; ++i) {
1994 /* The following assumes unsigned arithmetic
1995 works module 2**N for some N>SHIFT. */
Guido van Rossumeb1fafc1994-08-29 12:47:19 +00001996 borrow = a->ob_digit[i] - b->ob_digit[i] - borrow;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001997 z->ob_digit[i] = borrow & MASK;
1998 borrow >>= SHIFT;
1999 borrow &= 1; /* Keep only one sign bit */
2000 }
2001 for (; i < size_a; ++i) {
2002 borrow = a->ob_digit[i] - borrow;
2003 z->ob_digit[i] = borrow & MASK;
2004 borrow >>= SHIFT;
Tim Peters43f04a32000-07-08 02:26:47 +00002005 borrow &= 1; /* Keep only one sign bit */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002006 }
2007 assert(borrow == 0);
Guido van Rossumc6913e71991-11-19 20:26:46 +00002008 if (sign < 0)
Guido van Rossum4c260ff1992-01-14 18:36:43 +00002009 z->ob_size = -(z->ob_size);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002010 return long_normalize(z);
2011}
2012
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002013static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00002014long_add(PyLongObject *v, PyLongObject *w)
Guido van Rossum4c260ff1992-01-14 18:36:43 +00002015{
Neil Schemenauerba872e22001-01-04 01:46:03 +00002016 PyLongObject *a, *b, *z;
Tim Peters69c2de32001-09-11 22:31:33 +00002017
Neil Schemenauerba872e22001-01-04 01:46:03 +00002018 CONVERT_BINOP((PyObject *)v, (PyObject *)w, &a, &b);
2019
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002020 if (a->ob_size < 0) {
2021 if (b->ob_size < 0) {
2022 z = x_add(a, b);
Guido van Rossumc6913e71991-11-19 20:26:46 +00002023 if (z != NULL && z->ob_size != 0)
Guido van Rossum4c260ff1992-01-14 18:36:43 +00002024 z->ob_size = -(z->ob_size);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002025 }
2026 else
2027 z = x_sub(b, a);
2028 }
2029 else {
2030 if (b->ob_size < 0)
2031 z = x_sub(a, b);
2032 else
2033 z = x_add(a, b);
2034 }
Neil Schemenauerba872e22001-01-04 01:46:03 +00002035 Py_DECREF(a);
2036 Py_DECREF(b);
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002037 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002038}
2039
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002040static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00002041long_sub(PyLongObject *v, PyLongObject *w)
Guido van Rossum4c260ff1992-01-14 18:36:43 +00002042{
Neil Schemenauerba872e22001-01-04 01:46:03 +00002043 PyLongObject *a, *b, *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002044
Neil Schemenauerba872e22001-01-04 01:46:03 +00002045 CONVERT_BINOP((PyObject *)v, (PyObject *)w, &a, &b);
2046
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002047 if (a->ob_size < 0) {
2048 if (b->ob_size < 0)
2049 z = x_sub(a, b);
2050 else
2051 z = x_add(a, b);
Guido van Rossumc6913e71991-11-19 20:26:46 +00002052 if (z != NULL && z->ob_size != 0)
Guido van Rossum4c260ff1992-01-14 18:36:43 +00002053 z->ob_size = -(z->ob_size);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002054 }
2055 else {
2056 if (b->ob_size < 0)
2057 z = x_add(a, b);
2058 else
2059 z = x_sub(a, b);
2060 }
Neil Schemenauerba872e22001-01-04 01:46:03 +00002061 Py_DECREF(a);
2062 Py_DECREF(b);
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002063 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002064}
2065
Tim Peters5af4e6c2002-08-12 02:31:19 +00002066/* Grade school multiplication, ignoring the signs.
2067 * Returns the absolute value of the product, or NULL if error.
2068 */
2069static PyLongObject *
2070x_mul(PyLongObject *a, PyLongObject *b)
Neil Schemenauerba872e22001-01-04 01:46:03 +00002071{
Tim Peters5af4e6c2002-08-12 02:31:19 +00002072 PyLongObject *z;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002073 Py_ssize_t size_a = ABS(a->ob_size);
2074 Py_ssize_t size_b = ABS(b->ob_size);
2075 Py_ssize_t i;
Neil Schemenauerba872e22001-01-04 01:46:03 +00002076
Tim Peters5af4e6c2002-08-12 02:31:19 +00002077 z = _PyLong_New(size_a + size_b);
2078 if (z == NULL)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002079 return NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002080
2081 memset(z->ob_digit, 0, z->ob_size * sizeof(digit));
Tim Peters0973b992004-08-29 22:16:50 +00002082 if (a == b) {
2083 /* Efficient squaring per HAC, Algorithm 14.16:
2084 * http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf
2085 * Gives slightly less than a 2x speedup when a == b,
2086 * via exploiting that each entry in the multiplication
2087 * pyramid appears twice (except for the size_a squares).
2088 */
2089 for (i = 0; i < size_a; ++i) {
2090 twodigits carry;
2091 twodigits f = a->ob_digit[i];
2092 digit *pz = z->ob_digit + (i << 1);
2093 digit *pa = a->ob_digit + i + 1;
2094 digit *paend = a->ob_digit + size_a;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002095
Tim Peters0973b992004-08-29 22:16:50 +00002096 SIGCHECK({
2097 Py_DECREF(z);
2098 return NULL;
2099 })
2100
2101 carry = *pz + f * f;
2102 *pz++ = (digit)(carry & MASK);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002103 carry >>= SHIFT;
Tim Peters0973b992004-08-29 22:16:50 +00002104 assert(carry <= MASK);
2105
2106 /* Now f is added in twice in each column of the
2107 * pyramid it appears. Same as adding f<<1 once.
2108 */
2109 f <<= 1;
2110 while (pa < paend) {
2111 carry += *pz + *pa++ * f;
2112 *pz++ = (digit)(carry & MASK);
2113 carry >>= SHIFT;
2114 assert(carry <= (MASK << 1));
2115 }
2116 if (carry) {
2117 carry += *pz;
2118 *pz++ = (digit)(carry & MASK);
2119 carry >>= SHIFT;
2120 }
2121 if (carry)
2122 *pz += (digit)(carry & MASK);
2123 assert((carry >> SHIFT) == 0);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002124 }
Tim Peters0973b992004-08-29 22:16:50 +00002125 }
2126 else { /* a is not the same as b -- gradeschool long mult */
2127 for (i = 0; i < size_a; ++i) {
2128 twodigits carry = 0;
2129 twodigits f = a->ob_digit[i];
2130 digit *pz = z->ob_digit + i;
2131 digit *pb = b->ob_digit;
2132 digit *pbend = b->ob_digit + size_b;
2133
2134 SIGCHECK({
2135 Py_DECREF(z);
2136 return NULL;
2137 })
2138
2139 while (pb < pbend) {
2140 carry += *pz + *pb++ * f;
2141 *pz++ = (digit)(carry & MASK);
2142 carry >>= SHIFT;
2143 assert(carry <= MASK);
2144 }
2145 if (carry)
2146 *pz += (digit)(carry & MASK);
2147 assert((carry >> SHIFT) == 0);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002148 }
2149 }
Tim Peters44121a62002-08-12 06:17:58 +00002150 return long_normalize(z);
Tim Peters5af4e6c2002-08-12 02:31:19 +00002151}
2152
2153/* A helper for Karatsuba multiplication (k_mul).
2154 Takes a long "n" and an integer "size" representing the place to
2155 split, and sets low and high such that abs(n) == (high << size) + low,
2156 viewing the shift as being by digits. The sign bit is ignored, and
2157 the return values are >= 0.
2158 Returns 0 on success, -1 on failure.
2159*/
2160static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00002161kmul_split(PyLongObject *n, Py_ssize_t size, PyLongObject **high, PyLongObject **low)
Tim Peters5af4e6c2002-08-12 02:31:19 +00002162{
2163 PyLongObject *hi, *lo;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002164 Py_ssize_t size_lo, size_hi;
2165 const Py_ssize_t size_n = ABS(n->ob_size);
Tim Peters5af4e6c2002-08-12 02:31:19 +00002166
2167 size_lo = MIN(size_n, size);
2168 size_hi = size_n - size_lo;
2169
2170 if ((hi = _PyLong_New(size_hi)) == NULL)
2171 return -1;
2172 if ((lo = _PyLong_New(size_lo)) == NULL) {
2173 Py_DECREF(hi);
2174 return -1;
2175 }
2176
2177 memcpy(lo->ob_digit, n->ob_digit, size_lo * sizeof(digit));
2178 memcpy(hi->ob_digit, n->ob_digit + size_lo, size_hi * sizeof(digit));
2179
2180 *high = long_normalize(hi);
2181 *low = long_normalize(lo);
2182 return 0;
2183}
2184
Tim Peters60004642002-08-12 22:01:34 +00002185static PyLongObject *k_lopsided_mul(PyLongObject *a, PyLongObject *b);
2186
Tim Peters5af4e6c2002-08-12 02:31:19 +00002187/* Karatsuba multiplication. Ignores the input signs, and returns the
2188 * absolute value of the product (or NULL if error).
2189 * See Knuth Vol. 2 Chapter 4.3.3 (Pp. 294-295).
2190 */
2191static PyLongObject *
2192k_mul(PyLongObject *a, PyLongObject *b)
2193{
Martin v. Löwis18e16552006-02-15 17:27:45 +00002194 Py_ssize_t asize = ABS(a->ob_size);
2195 Py_ssize_t bsize = ABS(b->ob_size);
Tim Peters5af4e6c2002-08-12 02:31:19 +00002196 PyLongObject *ah = NULL;
2197 PyLongObject *al = NULL;
2198 PyLongObject *bh = NULL;
2199 PyLongObject *bl = NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002200 PyLongObject *ret = NULL;
Tim Peters738eda72002-08-12 15:08:20 +00002201 PyLongObject *t1, *t2, *t3;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002202 Py_ssize_t shift; /* the number of digits we split off */
2203 Py_ssize_t i;
Tim Peters738eda72002-08-12 15:08:20 +00002204
Tim Peters5af4e6c2002-08-12 02:31:19 +00002205 /* (ah*X+al)(bh*X+bl) = ah*bh*X*X + (ah*bl + al*bh)*X + al*bl
2206 * Let k = (ah+al)*(bh+bl) = ah*bl + al*bh + ah*bh + al*bl
2207 * Then the original product is
Tim Peters18c15b92002-08-12 02:43:58 +00002208 * ah*bh*X*X + (k - ah*bh - al*bl)*X + al*bl
Tim Peters5af4e6c2002-08-12 02:31:19 +00002209 * By picking X to be a power of 2, "*X" is just shifting, and it's
2210 * been reduced to 3 multiplies on numbers half the size.
2211 */
2212
Tim Petersfc07e562002-08-12 02:54:10 +00002213 /* We want to split based on the larger number; fiddle so that b
Tim Peters5af4e6c2002-08-12 02:31:19 +00002214 * is largest.
2215 */
Tim Peters738eda72002-08-12 15:08:20 +00002216 if (asize > bsize) {
Tim Peters5af4e6c2002-08-12 02:31:19 +00002217 t1 = a;
2218 a = b;
2219 b = t1;
Tim Peters738eda72002-08-12 15:08:20 +00002220
2221 i = asize;
2222 asize = bsize;
2223 bsize = i;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002224 }
2225
2226 /* Use gradeschool math when either number is too small. */
Tim Peters0973b992004-08-29 22:16:50 +00002227 i = a == b ? KARATSUBA_SQUARE_CUTOFF : KARATSUBA_CUTOFF;
2228 if (asize <= i) {
Tim Peters738eda72002-08-12 15:08:20 +00002229 if (asize == 0)
Tim Peters44121a62002-08-12 06:17:58 +00002230 return _PyLong_New(0);
2231 else
2232 return x_mul(a, b);
2233 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002234
Tim Peters60004642002-08-12 22:01:34 +00002235 /* If a is small compared to b, splitting on b gives a degenerate
2236 * case with ah==0, and Karatsuba may be (even much) less efficient
2237 * than "grade school" then. However, we can still win, by viewing
2238 * b as a string of "big digits", each of width a->ob_size. That
2239 * leads to a sequence of balanced calls to k_mul.
2240 */
2241 if (2 * asize <= bsize)
2242 return k_lopsided_mul(a, b);
2243
Tim Petersd6974a52002-08-13 20:37:51 +00002244 /* Split a & b into hi & lo pieces. */
Tim Peters738eda72002-08-12 15:08:20 +00002245 shift = bsize >> 1;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002246 if (kmul_split(a, shift, &ah, &al) < 0) goto fail;
Tim Petersd6974a52002-08-13 20:37:51 +00002247 assert(ah->ob_size > 0); /* the split isn't degenerate */
2248
Tim Peters0973b992004-08-29 22:16:50 +00002249 if (a == b) {
2250 bh = ah;
2251 bl = al;
2252 Py_INCREF(bh);
2253 Py_INCREF(bl);
2254 }
2255 else if (kmul_split(b, shift, &bh, &bl) < 0) goto fail;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002256
Tim Petersd64c1de2002-08-12 17:36:03 +00002257 /* The plan:
2258 * 1. Allocate result space (asize + bsize digits: that's always
2259 * enough).
2260 * 2. Compute ah*bh, and copy into result at 2*shift.
2261 * 3. Compute al*bl, and copy into result at 0. Note that this
2262 * can't overlap with #2.
2263 * 4. Subtract al*bl from the result, starting at shift. This may
2264 * underflow (borrow out of the high digit), but we don't care:
2265 * we're effectively doing unsigned arithmetic mod
2266 * BASE**(sizea + sizeb), and so long as the *final* result fits,
2267 * borrows and carries out of the high digit can be ignored.
2268 * 5. Subtract ah*bh from the result, starting at shift.
2269 * 6. Compute (ah+al)*(bh+bl), and add it into the result starting
2270 * at shift.
2271 */
2272
2273 /* 1. Allocate result space. */
Tim Peters70b041b2002-08-12 19:38:01 +00002274 ret = _PyLong_New(asize + bsize);
Tim Peters5af4e6c2002-08-12 02:31:19 +00002275 if (ret == NULL) goto fail;
2276#ifdef Py_DEBUG
2277 /* Fill with trash, to catch reference to uninitialized digits. */
2278 memset(ret->ob_digit, 0xDF, ret->ob_size * sizeof(digit));
2279#endif
Tim Peters44121a62002-08-12 06:17:58 +00002280
Tim Petersd64c1de2002-08-12 17:36:03 +00002281 /* 2. t1 <- ah*bh, and copy into high digits of result. */
Tim Peters738eda72002-08-12 15:08:20 +00002282 if ((t1 = k_mul(ah, bh)) == NULL) goto fail;
2283 assert(t1->ob_size >= 0);
2284 assert(2*shift + t1->ob_size <= ret->ob_size);
2285 memcpy(ret->ob_digit + 2*shift, t1->ob_digit,
2286 t1->ob_size * sizeof(digit));
2287
2288 /* Zero-out the digits higher than the ah*bh copy. */
2289 i = ret->ob_size - 2*shift - t1->ob_size;
Tim Peters44121a62002-08-12 06:17:58 +00002290 if (i)
Tim Peters738eda72002-08-12 15:08:20 +00002291 memset(ret->ob_digit + 2*shift + t1->ob_size, 0,
Tim Peters44121a62002-08-12 06:17:58 +00002292 i * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00002293
Tim Petersd64c1de2002-08-12 17:36:03 +00002294 /* 3. t2 <- al*bl, and copy into the low digits. */
Tim Peters738eda72002-08-12 15:08:20 +00002295 if ((t2 = k_mul(al, bl)) == NULL) {
2296 Py_DECREF(t1);
2297 goto fail;
2298 }
2299 assert(t2->ob_size >= 0);
2300 assert(t2->ob_size <= 2*shift); /* no overlap with high digits */
2301 memcpy(ret->ob_digit, t2->ob_digit, t2->ob_size * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00002302
2303 /* Zero out remaining digits. */
Tim Peters738eda72002-08-12 15:08:20 +00002304 i = 2*shift - t2->ob_size; /* number of uninitialized digits */
Tim Peters5af4e6c2002-08-12 02:31:19 +00002305 if (i)
Tim Peters738eda72002-08-12 15:08:20 +00002306 memset(ret->ob_digit + t2->ob_size, 0, i * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00002307
Tim Petersd64c1de2002-08-12 17:36:03 +00002308 /* 4 & 5. Subtract ah*bh (t1) and al*bl (t2). We do al*bl first
2309 * because it's fresher in cache.
2310 */
Tim Peters738eda72002-08-12 15:08:20 +00002311 i = ret->ob_size - shift; /* # digits after shift */
Tim Petersd64c1de2002-08-12 17:36:03 +00002312 (void)v_isub(ret->ob_digit + shift, i, t2->ob_digit, t2->ob_size);
Tim Peters738eda72002-08-12 15:08:20 +00002313 Py_DECREF(t2);
2314
Tim Petersd64c1de2002-08-12 17:36:03 +00002315 (void)v_isub(ret->ob_digit + shift, i, t1->ob_digit, t1->ob_size);
Tim Peters738eda72002-08-12 15:08:20 +00002316 Py_DECREF(t1);
2317
Tim Petersd64c1de2002-08-12 17:36:03 +00002318 /* 6. t3 <- (ah+al)(bh+bl), and add into result. */
Tim Peters5af4e6c2002-08-12 02:31:19 +00002319 if ((t1 = x_add(ah, al)) == NULL) goto fail;
2320 Py_DECREF(ah);
2321 Py_DECREF(al);
2322 ah = al = NULL;
2323
Tim Peters0973b992004-08-29 22:16:50 +00002324 if (a == b) {
2325 t2 = t1;
2326 Py_INCREF(t2);
2327 }
2328 else if ((t2 = x_add(bh, bl)) == NULL) {
Tim Peters5af4e6c2002-08-12 02:31:19 +00002329 Py_DECREF(t1);
2330 goto fail;
2331 }
2332 Py_DECREF(bh);
2333 Py_DECREF(bl);
2334 bh = bl = NULL;
2335
Tim Peters738eda72002-08-12 15:08:20 +00002336 t3 = k_mul(t1, t2);
Tim Peters5af4e6c2002-08-12 02:31:19 +00002337 Py_DECREF(t1);
2338 Py_DECREF(t2);
Tim Peters738eda72002-08-12 15:08:20 +00002339 if (t3 == NULL) goto fail;
Tim Peters547607c2002-08-12 19:43:49 +00002340 assert(t3->ob_size >= 0);
Tim Peters5af4e6c2002-08-12 02:31:19 +00002341
Tim Petersd6974a52002-08-13 20:37:51 +00002342 /* Add t3. It's not obvious why we can't run out of room here.
2343 * See the (*) comment after this function.
Tim Petersd8b21732002-08-12 19:30:26 +00002344 */
Tim Petersd64c1de2002-08-12 17:36:03 +00002345 (void)v_iadd(ret->ob_digit + shift, i, t3->ob_digit, t3->ob_size);
Tim Peters738eda72002-08-12 15:08:20 +00002346 Py_DECREF(t3);
Tim Peters5af4e6c2002-08-12 02:31:19 +00002347
Tim Peters5af4e6c2002-08-12 02:31:19 +00002348 return long_normalize(ret);
2349
2350 fail:
2351 Py_XDECREF(ret);
2352 Py_XDECREF(ah);
2353 Py_XDECREF(al);
2354 Py_XDECREF(bh);
2355 Py_XDECREF(bl);
Tim Peters5af4e6c2002-08-12 02:31:19 +00002356 return NULL;
2357}
2358
Tim Petersd6974a52002-08-13 20:37:51 +00002359/* (*) Why adding t3 can't "run out of room" above.
2360
Tim Petersab86c2b2002-08-15 20:06:00 +00002361Let f(x) mean the floor of x and c(x) mean the ceiling of x. Some facts
2362to start with:
Tim Petersd6974a52002-08-13 20:37:51 +00002363
Tim Petersab86c2b2002-08-15 20:06:00 +000023641. For any integer i, i = c(i/2) + f(i/2). In particular,
2365 bsize = c(bsize/2) + f(bsize/2).
23662. shift = f(bsize/2)
23673. asize <= bsize
23684. Since we call k_lopsided_mul if asize*2 <= bsize, asize*2 > bsize in this
2369 routine, so asize > bsize/2 >= f(bsize/2) in this routine.
Tim Petersd6974a52002-08-13 20:37:51 +00002370
Tim Petersab86c2b2002-08-15 20:06:00 +00002371We allocated asize + bsize result digits, and add t3 into them at an offset
2372of shift. This leaves asize+bsize-shift allocated digit positions for t3
2373to fit into, = (by #1 and #2) asize + f(bsize/2) + c(bsize/2) - f(bsize/2) =
2374asize + c(bsize/2) available digit positions.
Tim Petersd6974a52002-08-13 20:37:51 +00002375
Tim Petersab86c2b2002-08-15 20:06:00 +00002376bh has c(bsize/2) digits, and bl at most f(size/2) digits. So bh+hl has
2377at most c(bsize/2) digits + 1 bit.
Tim Petersd6974a52002-08-13 20:37:51 +00002378
Tim Petersab86c2b2002-08-15 20:06:00 +00002379If asize == bsize, ah has c(bsize/2) digits, else ah has at most f(bsize/2)
2380digits, and al has at most f(bsize/2) digits in any case. So ah+al has at
2381most (asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 1 bit.
Tim Petersd6974a52002-08-13 20:37:51 +00002382
Tim Petersab86c2b2002-08-15 20:06:00 +00002383The product (ah+al)*(bh+bl) therefore has at most
Tim Petersd6974a52002-08-13 20:37:51 +00002384
Tim Petersab86c2b2002-08-15 20:06:00 +00002385 c(bsize/2) + (asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 2 bits
Tim Petersd6974a52002-08-13 20:37:51 +00002386
Tim Petersab86c2b2002-08-15 20:06:00 +00002387and we have asize + c(bsize/2) available digit positions. We need to show
2388this is always enough. An instance of c(bsize/2) cancels out in both, so
2389the question reduces to whether asize digits is enough to hold
2390(asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 2 bits. If asize < bsize,
2391then we're asking whether asize digits >= f(bsize/2) digits + 2 bits. By #4,
2392asize is at least f(bsize/2)+1 digits, so this in turn reduces to whether 1
2393digit is enough to hold 2 bits. This is so since SHIFT=15 >= 2. If
2394asize == bsize, then we're asking whether bsize digits is enough to hold
Tim Peterse417de02002-08-15 20:10:45 +00002395c(bsize/2) digits + 2 bits, or equivalently (by #1) whether f(bsize/2) digits
2396is enough to hold 2 bits. This is so if bsize >= 2, which holds because
2397bsize >= KARATSUBA_CUTOFF >= 2.
Tim Peters8e966ee2002-08-14 16:36:23 +00002398
Tim Peters48d52c02002-08-14 17:07:32 +00002399Note that since there's always enough room for (ah+al)*(bh+bl), and that's
2400clearly >= each of ah*bh and al*bl, there's always enough room to subtract
2401ah*bh and al*bl too.
Tim Petersd6974a52002-08-13 20:37:51 +00002402*/
2403
Tim Peters60004642002-08-12 22:01:34 +00002404/* b has at least twice the digits of a, and a is big enough that Karatsuba
2405 * would pay off *if* the inputs had balanced sizes. View b as a sequence
2406 * of slices, each with a->ob_size digits, and multiply the slices by a,
2407 * one at a time. This gives k_mul balanced inputs to work with, and is
2408 * also cache-friendly (we compute one double-width slice of the result
2409 * at a time, then move on, never bactracking except for the helpful
2410 * single-width slice overlap between successive partial sums).
2411 */
2412static PyLongObject *
2413k_lopsided_mul(PyLongObject *a, PyLongObject *b)
2414{
Martin v. Löwis18e16552006-02-15 17:27:45 +00002415 const Py_ssize_t asize = ABS(a->ob_size);
2416 Py_ssize_t bsize = ABS(b->ob_size);
2417 Py_ssize_t nbdone; /* # of b digits already multiplied */
Tim Peters60004642002-08-12 22:01:34 +00002418 PyLongObject *ret;
2419 PyLongObject *bslice = NULL;
2420
2421 assert(asize > KARATSUBA_CUTOFF);
2422 assert(2 * asize <= bsize);
2423
2424 /* Allocate result space, and zero it out. */
2425 ret = _PyLong_New(asize + bsize);
2426 if (ret == NULL)
2427 return NULL;
2428 memset(ret->ob_digit, 0, ret->ob_size * sizeof(digit));
2429
2430 /* Successive slices of b are copied into bslice. */
Tim Peters12034032002-08-12 22:10:00 +00002431 bslice = _PyLong_New(asize);
Tim Peters60004642002-08-12 22:01:34 +00002432 if (bslice == NULL)
2433 goto fail;
2434
2435 nbdone = 0;
2436 while (bsize > 0) {
2437 PyLongObject *product;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002438 const Py_ssize_t nbtouse = MIN(bsize, asize);
Tim Peters60004642002-08-12 22:01:34 +00002439
2440 /* Multiply the next slice of b by a. */
2441 memcpy(bslice->ob_digit, b->ob_digit + nbdone,
2442 nbtouse * sizeof(digit));
2443 bslice->ob_size = nbtouse;
2444 product = k_mul(a, bslice);
2445 if (product == NULL)
2446 goto fail;
2447
2448 /* Add into result. */
2449 (void)v_iadd(ret->ob_digit + nbdone, ret->ob_size - nbdone,
2450 product->ob_digit, product->ob_size);
2451 Py_DECREF(product);
2452
2453 bsize -= nbtouse;
2454 nbdone += nbtouse;
2455 }
2456
2457 Py_DECREF(bslice);
2458 return long_normalize(ret);
2459
2460 fail:
2461 Py_DECREF(ret);
2462 Py_XDECREF(bslice);
2463 return NULL;
2464}
Tim Peters5af4e6c2002-08-12 02:31:19 +00002465
2466static PyObject *
2467long_mul(PyLongObject *v, PyLongObject *w)
2468{
2469 PyLongObject *a, *b, *z;
2470
2471 if (!convert_binop((PyObject *)v, (PyObject *)w, &a, &b)) {
Tim Peters5af4e6c2002-08-12 02:31:19 +00002472 Py_INCREF(Py_NotImplemented);
2473 return Py_NotImplemented;
2474 }
2475
Tim Petersd64c1de2002-08-12 17:36:03 +00002476 z = k_mul(a, b);
Tim Peters9973d742002-08-15 19:41:06 +00002477 /* Negate if exactly one of the inputs is negative. */
2478 if (((a->ob_size ^ b->ob_size) < 0) && z)
Guido van Rossum4c260ff1992-01-14 18:36:43 +00002479 z->ob_size = -(z->ob_size);
Neil Schemenauerba872e22001-01-04 01:46:03 +00002480 Py_DECREF(a);
2481 Py_DECREF(b);
Tim Peters9973d742002-08-15 19:41:06 +00002482 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002483}
2484
Guido van Rossume32e0141992-01-19 16:31:05 +00002485/* The / and % operators are now defined in terms of divmod().
2486 The expression a mod b has the value a - b*floor(a/b).
2487 The long_divrem function gives the remainder after division of
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002488 |a| by |b|, with the sign of a. This is also expressed
2489 as a - b*trunc(a/b), if trunc truncates towards zero.
2490 Some examples:
2491 a b a rem b a mod b
2492 13 10 3 3
2493 -13 10 -3 7
2494 13 -10 3 -7
2495 -13 -10 -3 -3
2496 So, to get from rem to mod, we have to add b if a and b
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00002497 have different signs. We then subtract one from the 'div'
2498 part of the outcome to keep the invariant intact. */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002499
Tim Peters47e52ee2004-08-30 02:44:38 +00002500/* Compute
2501 * *pdiv, *pmod = divmod(v, w)
2502 * NULL can be passed for pdiv or pmod, in which case that part of
2503 * the result is simply thrown away. The caller owns a reference to
2504 * each of these it requests (does not pass NULL for).
2505 */
Guido van Rossume32e0141992-01-19 16:31:05 +00002506static int
Tim Peters5af4e6c2002-08-12 02:31:19 +00002507l_divmod(PyLongObject *v, PyLongObject *w,
Tim Peters9f688bf2000-07-07 15:53:28 +00002508 PyLongObject **pdiv, PyLongObject **pmod)
Guido van Rossume32e0141992-01-19 16:31:05 +00002509{
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002510 PyLongObject *div, *mod;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002511
Guido van Rossume32e0141992-01-19 16:31:05 +00002512 if (long_divrem(v, w, &div, &mod) < 0)
2513 return -1;
Guido van Rossum472c04f1996-12-05 21:57:21 +00002514 if ((mod->ob_size < 0 && w->ob_size > 0) ||
2515 (mod->ob_size > 0 && w->ob_size < 0)) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002516 PyLongObject *temp;
2517 PyLongObject *one;
2518 temp = (PyLongObject *) long_add(mod, w);
2519 Py_DECREF(mod);
Guido van Rossume32e0141992-01-19 16:31:05 +00002520 mod = temp;
2521 if (mod == NULL) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002522 Py_DECREF(div);
Guido van Rossume32e0141992-01-19 16:31:05 +00002523 return -1;
2524 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002525 one = (PyLongObject *) PyLong_FromLong(1L);
Guido van Rossume32e0141992-01-19 16:31:05 +00002526 if (one == NULL ||
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002527 (temp = (PyLongObject *) long_sub(div, one)) == NULL) {
2528 Py_DECREF(mod);
2529 Py_DECREF(div);
2530 Py_XDECREF(one);
Guido van Rossume32e0141992-01-19 16:31:05 +00002531 return -1;
2532 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002533 Py_DECREF(one);
2534 Py_DECREF(div);
Guido van Rossume32e0141992-01-19 16:31:05 +00002535 div = temp;
2536 }
Tim Peters47e52ee2004-08-30 02:44:38 +00002537 if (pdiv != NULL)
2538 *pdiv = div;
2539 else
2540 Py_DECREF(div);
2541
2542 if (pmod != NULL)
2543 *pmod = mod;
2544 else
2545 Py_DECREF(mod);
2546
Guido van Rossume32e0141992-01-19 16:31:05 +00002547 return 0;
2548}
2549
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002550static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00002551long_div(PyObject *v, PyObject *w)
Guido van Rossume32e0141992-01-19 16:31:05 +00002552{
Tim Peters47e52ee2004-08-30 02:44:38 +00002553 PyLongObject *a, *b, *div;
Neil Schemenauerba872e22001-01-04 01:46:03 +00002554
2555 CONVERT_BINOP(v, w, &a, &b);
Tim Peters47e52ee2004-08-30 02:44:38 +00002556 if (l_divmod(a, b, &div, NULL) < 0)
2557 div = NULL;
Neil Schemenauerba872e22001-01-04 01:46:03 +00002558 Py_DECREF(a);
2559 Py_DECREF(b);
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002560 return (PyObject *)div;
Guido van Rossume32e0141992-01-19 16:31:05 +00002561}
2562
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002563static PyObject *
Guido van Rossum393661d2001-08-31 17:40:15 +00002564long_classic_div(PyObject *v, PyObject *w)
2565{
Tim Peters47e52ee2004-08-30 02:44:38 +00002566 PyLongObject *a, *b, *div;
Guido van Rossum393661d2001-08-31 17:40:15 +00002567
2568 CONVERT_BINOP(v, w, &a, &b);
Guido van Rossum393661d2001-08-31 17:40:15 +00002569 if (Py_DivisionWarningFlag &&
2570 PyErr_Warn(PyExc_DeprecationWarning, "classic long division") < 0)
2571 div = NULL;
Tim Peters47e52ee2004-08-30 02:44:38 +00002572 else if (l_divmod(a, b, &div, NULL) < 0)
Guido van Rossum393661d2001-08-31 17:40:15 +00002573 div = NULL;
Guido van Rossum393661d2001-08-31 17:40:15 +00002574 Py_DECREF(a);
2575 Py_DECREF(b);
2576 return (PyObject *)div;
2577}
2578
2579static PyObject *
Tim Peters20dab9f2001-09-04 05:31:47 +00002580long_true_divide(PyObject *v, PyObject *w)
2581{
Tim Peterse2a60002001-09-04 06:17:36 +00002582 PyLongObject *a, *b;
2583 double ad, bd;
Thomas Wouters553489a2006-02-01 21:32:04 +00002584 int failed, aexp = -1, bexp = -1;
Tim Peterse2a60002001-09-04 06:17:36 +00002585
2586 CONVERT_BINOP(v, w, &a, &b);
2587 ad = _PyLong_AsScaledDouble((PyObject *)a, &aexp);
2588 bd = _PyLong_AsScaledDouble((PyObject *)b, &bexp);
Tim Peters6f97e492001-11-04 23:09:40 +00002589 failed = (ad == -1.0 || bd == -1.0) && PyErr_Occurred();
2590 Py_DECREF(a);
2591 Py_DECREF(b);
2592 if (failed)
Tim Peterse2a60002001-09-04 06:17:36 +00002593 return NULL;
Thomas Wouters553489a2006-02-01 21:32:04 +00002594 /* 'aexp' and 'bexp' were initialized to -1 to silence gcc-4.0.x,
2595 but should really be set correctly after sucessful calls to
2596 _PyLong_AsScaledDouble() */
2597 assert(aexp >= 0 && bexp >= 0);
Tim Peterse2a60002001-09-04 06:17:36 +00002598
2599 if (bd == 0.0) {
2600 PyErr_SetString(PyExc_ZeroDivisionError,
2601 "long division or modulo by zero");
2602 return NULL;
2603 }
2604
2605 /* True value is very close to ad/bd * 2**(SHIFT*(aexp-bexp)) */
2606 ad /= bd; /* overflow/underflow impossible here */
2607 aexp -= bexp;
2608 if (aexp > INT_MAX / SHIFT)
2609 goto overflow;
Tim Peterse56ed9b2001-09-06 21:59:14 +00002610 else if (aexp < -(INT_MAX / SHIFT))
2611 return PyFloat_FromDouble(0.0); /* underflow to 0 */
Tim Peterse2a60002001-09-04 06:17:36 +00002612 errno = 0;
2613 ad = ldexp(ad, aexp * SHIFT);
Tim Peters57f282a2001-09-05 05:38:10 +00002614 if (Py_OVERFLOWED(ad)) /* ignore underflow to 0.0 */
Tim Peterse2a60002001-09-04 06:17:36 +00002615 goto overflow;
2616 return PyFloat_FromDouble(ad);
2617
2618overflow:
2619 PyErr_SetString(PyExc_OverflowError,
2620 "long/long too large for a float");
2621 return NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002622
Tim Peters20dab9f2001-09-04 05:31:47 +00002623}
2624
2625static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00002626long_mod(PyObject *v, PyObject *w)
Guido van Rossume32e0141992-01-19 16:31:05 +00002627{
Tim Peters47e52ee2004-08-30 02:44:38 +00002628 PyLongObject *a, *b, *mod;
Neil Schemenauerba872e22001-01-04 01:46:03 +00002629
2630 CONVERT_BINOP(v, w, &a, &b);
2631
Tim Peters47e52ee2004-08-30 02:44:38 +00002632 if (l_divmod(a, b, NULL, &mod) < 0)
2633 mod = NULL;
Neil Schemenauerba872e22001-01-04 01:46:03 +00002634 Py_DECREF(a);
2635 Py_DECREF(b);
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002636 return (PyObject *)mod;
Guido van Rossume32e0141992-01-19 16:31:05 +00002637}
2638
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002639static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00002640long_divmod(PyObject *v, PyObject *w)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002641{
Neil Schemenauerba872e22001-01-04 01:46:03 +00002642 PyLongObject *a, *b, *div, *mod;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002643 PyObject *z;
Neil Schemenauerba872e22001-01-04 01:46:03 +00002644
2645 CONVERT_BINOP(v, w, &a, &b);
2646
2647 if (l_divmod(a, b, &div, &mod) < 0) {
2648 Py_DECREF(a);
2649 Py_DECREF(b);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002650 return NULL;
Neil Schemenauerba872e22001-01-04 01:46:03 +00002651 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002652 z = PyTuple_New(2);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002653 if (z != NULL) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002654 PyTuple_SetItem(z, 0, (PyObject *) div);
2655 PyTuple_SetItem(z, 1, (PyObject *) mod);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002656 }
2657 else {
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002658 Py_DECREF(div);
2659 Py_DECREF(mod);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002660 }
Neil Schemenauerba872e22001-01-04 01:46:03 +00002661 Py_DECREF(a);
2662 Py_DECREF(b);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002663 return z;
2664}
2665
Tim Peters47e52ee2004-08-30 02:44:38 +00002666/* pow(v, w, x) */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002667static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00002668long_pow(PyObject *v, PyObject *w, PyObject *x)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002669{
Tim Peters47e52ee2004-08-30 02:44:38 +00002670 PyLongObject *a, *b, *c; /* a,b,c = v,w,x */
2671 int negativeOutput = 0; /* if x<0 return negative output */
Neil Schemenauerba872e22001-01-04 01:46:03 +00002672
Tim Peters47e52ee2004-08-30 02:44:38 +00002673 PyLongObject *z = NULL; /* accumulated result */
Martin v. Löwis18e16552006-02-15 17:27:45 +00002674 Py_ssize_t i, j, k; /* counters */
Tim Peters47e52ee2004-08-30 02:44:38 +00002675 PyLongObject *temp = NULL;
2676
2677 /* 5-ary values. If the exponent is large enough, table is
2678 * precomputed so that table[i] == a**i % c for i in range(32).
2679 */
2680 PyLongObject *table[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2681 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
2682
2683 /* a, b, c = v, w, x */
Neil Schemenauerba872e22001-01-04 01:46:03 +00002684 CONVERT_BINOP(v, w, &a, &b);
Tim Peters47e52ee2004-08-30 02:44:38 +00002685 if (PyLong_Check(x)) {
2686 c = (PyLongObject *)x;
Neil Schemenauerba872e22001-01-04 01:46:03 +00002687 Py_INCREF(x);
2688 }
Tim Petersde7990b2005-07-17 23:45:23 +00002689 else if (PyInt_Check(x)) {
Tim Peters47e52ee2004-08-30 02:44:38 +00002690 c = (PyLongObject *)PyLong_FromLong(PyInt_AS_LONG(x));
Tim Petersde7990b2005-07-17 23:45:23 +00002691 if (c == NULL)
2692 goto Error;
2693 }
Tim Peters47e52ee2004-08-30 02:44:38 +00002694 else if (x == Py_None)
2695 c = NULL;
Neil Schemenauerba872e22001-01-04 01:46:03 +00002696 else {
2697 Py_DECREF(a);
2698 Py_DECREF(b);
2699 Py_INCREF(Py_NotImplemented);
2700 return Py_NotImplemented;
2701 }
Tim Peters4c483c42001-09-05 06:24:58 +00002702
Tim Peters47e52ee2004-08-30 02:44:38 +00002703 if (b->ob_size < 0) { /* if exponent is negative */
2704 if (c) {
Tim Peters4c483c42001-09-05 06:24:58 +00002705 PyErr_SetString(PyExc_TypeError, "pow() 2nd argument "
Tim Peters47e52ee2004-08-30 02:44:38 +00002706 "cannot be negative when 3rd argument specified");
Tim Peterscd97da32004-08-30 02:58:59 +00002707 goto Error;
Tim Peters32f453e2001-09-03 08:35:41 +00002708 }
Guido van Rossum2c7b8fe1999-10-11 22:34:41 +00002709 else {
Tim Peters47e52ee2004-08-30 02:44:38 +00002710 /* else return a float. This works because we know
2711 that this calls float_pow() which converts its
2712 arguments to double. */
2713 Py_DECREF(a);
2714 Py_DECREF(b);
2715 return PyFloat_Type.tp_as_number->nb_power(v, w, x);
Guido van Rossum2c7b8fe1999-10-11 22:34:41 +00002716 }
Guido van Rossumeb1fafc1994-08-29 12:47:19 +00002717 }
Tim Peters47e52ee2004-08-30 02:44:38 +00002718
2719 if (c) {
2720 /* if modulus == 0:
2721 raise ValueError() */
2722 if (c->ob_size == 0) {
2723 PyErr_SetString(PyExc_ValueError,
2724 "pow() 3rd argument cannot be 0");
Tim Peterscd97da32004-08-30 02:58:59 +00002725 goto Error;
Tim Peters47e52ee2004-08-30 02:44:38 +00002726 }
2727
2728 /* if modulus < 0:
2729 negativeOutput = True
2730 modulus = -modulus */
2731 if (c->ob_size < 0) {
2732 negativeOutput = 1;
2733 temp = (PyLongObject *)_PyLong_Copy(c);
2734 if (temp == NULL)
2735 goto Error;
2736 Py_DECREF(c);
2737 c = temp;
2738 temp = NULL;
2739 c->ob_size = - c->ob_size;
2740 }
2741
2742 /* if modulus == 1:
2743 return 0 */
2744 if ((c->ob_size == 1) && (c->ob_digit[0] == 1)) {
2745 z = (PyLongObject *)PyLong_FromLong(0L);
2746 goto Done;
2747 }
2748
2749 /* if base < 0:
2750 base = base % modulus
2751 Having the base positive just makes things easier. */
2752 if (a->ob_size < 0) {
2753 if (l_divmod(a, c, NULL, &temp) < 0)
Tim Peterscd97da32004-08-30 02:58:59 +00002754 goto Error;
Tim Peters47e52ee2004-08-30 02:44:38 +00002755 Py_DECREF(a);
2756 a = temp;
2757 temp = NULL;
2758 }
2759 }
2760
2761 /* At this point a, b, and c are guaranteed non-negative UNLESS
2762 c is NULL, in which case a may be negative. */
2763
2764 z = (PyLongObject *)PyLong_FromLong(1L);
2765 if (z == NULL)
2766 goto Error;
2767
2768 /* Perform a modular reduction, X = X % c, but leave X alone if c
2769 * is NULL.
2770 */
2771#define REDUCE(X) \
2772 if (c != NULL) { \
2773 if (l_divmod(X, c, NULL, &temp) < 0) \
2774 goto Error; \
2775 Py_XDECREF(X); \
2776 X = temp; \
2777 temp = NULL; \
2778 }
2779
2780 /* Multiply two values, then reduce the result:
2781 result = X*Y % c. If c is NULL, skip the mod. */
2782#define MULT(X, Y, result) \
2783{ \
2784 temp = (PyLongObject *)long_mul(X, Y); \
2785 if (temp == NULL) \
2786 goto Error; \
2787 Py_XDECREF(result); \
2788 result = temp; \
2789 temp = NULL; \
2790 REDUCE(result) \
2791}
2792
2793 if (b->ob_size <= FIVEARY_CUTOFF) {
2794 /* Left-to-right binary exponentiation (HAC Algorithm 14.79) */
2795 /* http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf */
2796 for (i = b->ob_size - 1; i >= 0; --i) {
2797 digit bi = b->ob_digit[i];
2798
2799 for (j = 1 << (SHIFT-1); j != 0; j >>= 1) {
2800 MULT(z, z, z)
2801 if (bi & j)
2802 MULT(z, a, z)
2803 }
2804 }
2805 }
2806 else {
2807 /* Left-to-right 5-ary exponentiation (HAC Algorithm 14.82) */
2808 Py_INCREF(z); /* still holds 1L */
2809 table[0] = z;
2810 for (i = 1; i < 32; ++i)
2811 MULT(table[i-1], a, table[i])
2812
2813 for (i = b->ob_size - 1; i >= 0; --i) {
2814 const digit bi = b->ob_digit[i];
2815
2816 for (j = SHIFT - 5; j >= 0; j -= 5) {
2817 const int index = (bi >> j) & 0x1f;
2818 for (k = 0; k < 5; ++k)
2819 MULT(z, z, z)
2820 if (index)
2821 MULT(z, table[index], z)
2822 }
2823 }
2824 }
2825
2826 if (negativeOutput && (z->ob_size != 0)) {
2827 temp = (PyLongObject *)long_sub(z, c);
2828 if (temp == NULL)
2829 goto Error;
2830 Py_DECREF(z);
2831 z = temp;
2832 temp = NULL;
2833 }
2834 goto Done;
2835
2836 Error:
2837 if (z != NULL) {
2838 Py_DECREF(z);
2839 z = NULL;
2840 }
2841 /* fall through */
2842 Done:
Tim Peters47e52ee2004-08-30 02:44:38 +00002843 if (b->ob_size > FIVEARY_CUTOFF) {
2844 for (i = 0; i < 32; ++i)
2845 Py_XDECREF(table[i]);
2846 }
Tim Petersde7990b2005-07-17 23:45:23 +00002847 Py_DECREF(a);
2848 Py_DECREF(b);
2849 Py_XDECREF(c);
2850 Py_XDECREF(temp);
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002851 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002852}
2853
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002854static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00002855long_invert(PyLongObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002856{
Guido van Rossum4c260ff1992-01-14 18:36:43 +00002857 /* Implement ~x as -(x+1) */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002858 PyLongObject *x;
2859 PyLongObject *w;
2860 w = (PyLongObject *)PyLong_FromLong(1L);
Guido van Rossum4c260ff1992-01-14 18:36:43 +00002861 if (w == NULL)
2862 return NULL;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002863 x = (PyLongObject *) long_add(v, w);
2864 Py_DECREF(w);
Guido van Rossum4c260ff1992-01-14 18:36:43 +00002865 if (x == NULL)
2866 return NULL;
Tim Peters40c397d2001-09-11 23:24:22 +00002867 x->ob_size = -(x->ob_size);
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002868 return (PyObject *)x;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002869}
2870
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002871static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00002872long_pos(PyLongObject *v)
Guido van Rossumc6913e71991-11-19 20:26:46 +00002873{
Tim Peters69c2de32001-09-11 22:31:33 +00002874 if (PyLong_CheckExact(v)) {
2875 Py_INCREF(v);
2876 return (PyObject *)v;
2877 }
2878 else
2879 return _PyLong_Copy(v);
Guido van Rossumc6913e71991-11-19 20:26:46 +00002880}
2881
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002882static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00002883long_neg(PyLongObject *v)
Guido van Rossumc6913e71991-11-19 20:26:46 +00002884{
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002885 PyLongObject *z;
Tim Peters69c2de32001-09-11 22:31:33 +00002886 if (v->ob_size == 0 && PyLong_CheckExact(v)) {
Guido van Rossum4c260ff1992-01-14 18:36:43 +00002887 /* -0 == 0 */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002888 Py_INCREF(v);
2889 return (PyObject *) v;
Guido van Rossumc6913e71991-11-19 20:26:46 +00002890 }
Tim Peters69c2de32001-09-11 22:31:33 +00002891 z = (PyLongObject *)_PyLong_Copy(v);
2892 if (z != NULL)
2893 z->ob_size = -(v->ob_size);
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002894 return (PyObject *)z;
Guido van Rossumc6913e71991-11-19 20:26:46 +00002895}
2896
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002897static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00002898long_abs(PyLongObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002899{
2900 if (v->ob_size < 0)
Guido van Rossum4c260ff1992-01-14 18:36:43 +00002901 return long_neg(v);
Tim Peters69c2de32001-09-11 22:31:33 +00002902 else
2903 return long_pos(v);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002904}
2905
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00002906static int
Tim Peters9f688bf2000-07-07 15:53:28 +00002907long_nonzero(PyLongObject *v)
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00002908{
Guido van Rossum4c260ff1992-01-14 18:36:43 +00002909 return ABS(v->ob_size) != 0;
Guido van Rossumc6913e71991-11-19 20:26:46 +00002910}
2911
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002912static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00002913long_rshift(PyLongObject *v, PyLongObject *w)
Guido van Rossumc6913e71991-11-19 20:26:46 +00002914{
Neil Schemenauerba872e22001-01-04 01:46:03 +00002915 PyLongObject *a, *b;
2916 PyLongObject *z = NULL;
Guido van Rossumc6913e71991-11-19 20:26:46 +00002917 long shiftby;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002918 Py_ssize_t newsize, wordshift, loshift, hishift, i, j;
Guido van Rossumc6913e71991-11-19 20:26:46 +00002919 digit lomask, himask;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002920
Neil Schemenauerba872e22001-01-04 01:46:03 +00002921 CONVERT_BINOP((PyObject *)v, (PyObject *)w, &a, &b);
2922
Guido van Rossum4c260ff1992-01-14 18:36:43 +00002923 if (a->ob_size < 0) {
2924 /* Right shifting negative numbers is harder */
Neil Schemenauerba872e22001-01-04 01:46:03 +00002925 PyLongObject *a1, *a2;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002926 a1 = (PyLongObject *) long_invert(a);
Neil Schemenauerba872e22001-01-04 01:46:03 +00002927 if (a1 == NULL)
2928 goto rshift_error;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002929 a2 = (PyLongObject *) long_rshift(a1, b);
2930 Py_DECREF(a1);
Neil Schemenauerba872e22001-01-04 01:46:03 +00002931 if (a2 == NULL)
2932 goto rshift_error;
2933 z = (PyLongObject *) long_invert(a2);
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002934 Py_DECREF(a2);
Guido van Rossumc6913e71991-11-19 20:26:46 +00002935 }
Neil Schemenauerba872e22001-01-04 01:46:03 +00002936 else {
Tim Peters5af4e6c2002-08-12 02:31:19 +00002937
Neil Schemenauerba872e22001-01-04 01:46:03 +00002938 shiftby = PyLong_AsLong((PyObject *)b);
2939 if (shiftby == -1L && PyErr_Occurred())
2940 goto rshift_error;
2941 if (shiftby < 0) {
2942 PyErr_SetString(PyExc_ValueError,
2943 "negative shift count");
2944 goto rshift_error;
2945 }
2946 wordshift = shiftby / SHIFT;
2947 newsize = ABS(a->ob_size) - wordshift;
2948 if (newsize <= 0) {
2949 z = _PyLong_New(0);
2950 Py_DECREF(a);
2951 Py_DECREF(b);
2952 return (PyObject *)z;
2953 }
2954 loshift = shiftby % SHIFT;
2955 hishift = SHIFT - loshift;
2956 lomask = ((digit)1 << hishift) - 1;
2957 himask = MASK ^ lomask;
2958 z = _PyLong_New(newsize);
2959 if (z == NULL)
2960 goto rshift_error;
2961 if (a->ob_size < 0)
2962 z->ob_size = -(z->ob_size);
2963 for (i = 0, j = wordshift; i < newsize; i++, j++) {
2964 z->ob_digit[i] = (a->ob_digit[j] >> loshift) & lomask;
2965 if (i+1 < newsize)
2966 z->ob_digit[i] |=
2967 (a->ob_digit[j+1] << hishift) & himask;
2968 }
2969 z = long_normalize(z);
Guido van Rossumc6913e71991-11-19 20:26:46 +00002970 }
Neil Schemenauerba872e22001-01-04 01:46:03 +00002971rshift_error:
2972 Py_DECREF(a);
2973 Py_DECREF(b);
2974 return (PyObject *) z;
2975
Guido van Rossumc6913e71991-11-19 20:26:46 +00002976}
2977
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002978static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00002979long_lshift(PyObject *v, PyObject *w)
Guido van Rossumc6913e71991-11-19 20:26:46 +00002980{
Guido van Rossumf2e499b1997-03-16 00:37:59 +00002981 /* This version due to Tim Peters */
Neil Schemenauerba872e22001-01-04 01:46:03 +00002982 PyLongObject *a, *b;
2983 PyLongObject *z = NULL;
Guido van Rossumc6913e71991-11-19 20:26:46 +00002984 long shiftby;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002985 Py_ssize_t oldsize, newsize, wordshift, remshift, i, j;
Guido van Rossumf2e499b1997-03-16 00:37:59 +00002986 twodigits accum;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002987
Neil Schemenauerba872e22001-01-04 01:46:03 +00002988 CONVERT_BINOP(v, w, &a, &b);
2989
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002990 shiftby = PyLong_AsLong((PyObject *)b);
2991 if (shiftby == -1L && PyErr_Occurred())
Neil Schemenauerba872e22001-01-04 01:46:03 +00002992 goto lshift_error;
Guido van Rossumc6913e71991-11-19 20:26:46 +00002993 if (shiftby < 0) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002994 PyErr_SetString(PyExc_ValueError, "negative shift count");
Neil Schemenauerba872e22001-01-04 01:46:03 +00002995 goto lshift_error;
Guido van Rossumc6913e71991-11-19 20:26:46 +00002996 }
Guido van Rossumf2e499b1997-03-16 00:37:59 +00002997 if ((long)(int)shiftby != shiftby) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002998 PyErr_SetString(PyExc_ValueError,
2999 "outrageous left shift count");
Neil Schemenauerba872e22001-01-04 01:46:03 +00003000 goto lshift_error;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003001 }
Guido van Rossumf2e499b1997-03-16 00:37:59 +00003002 /* wordshift, remshift = divmod(shiftby, SHIFT) */
3003 wordshift = (int)shiftby / SHIFT;
3004 remshift = (int)shiftby - wordshift * SHIFT;
3005
3006 oldsize = ABS(a->ob_size);
3007 newsize = oldsize + wordshift;
3008 if (remshift)
3009 ++newsize;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003010 z = _PyLong_New(newsize);
Guido van Rossumc6913e71991-11-19 20:26:46 +00003011 if (z == NULL)
Neil Schemenauerba872e22001-01-04 01:46:03 +00003012 goto lshift_error;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003013 if (a->ob_size < 0)
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003014 z->ob_size = -(z->ob_size);
Guido van Rossumc6913e71991-11-19 20:26:46 +00003015 for (i = 0; i < wordshift; i++)
3016 z->ob_digit[i] = 0;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003017 accum = 0;
Guido van Rossumf2e499b1997-03-16 00:37:59 +00003018 for (i = wordshift, j = 0; j < oldsize; i++, j++) {
Tim Peters0d2d87d2002-08-20 19:00:22 +00003019 accum |= (twodigits)a->ob_digit[j] << remshift;
Guido van Rossumf2e499b1997-03-16 00:37:59 +00003020 z->ob_digit[i] = (digit)(accum & MASK);
3021 accum >>= SHIFT;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003022 }
Guido van Rossumf2e499b1997-03-16 00:37:59 +00003023 if (remshift)
3024 z->ob_digit[newsize-1] = (digit)accum;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003025 else
Guido van Rossumf2e499b1997-03-16 00:37:59 +00003026 assert(!accum);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003027 z = long_normalize(z);
3028lshift_error:
3029 Py_DECREF(a);
3030 Py_DECREF(b);
3031 return (PyObject *) z;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003032}
3033
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003034
3035/* Bitwise and/xor/or operations */
3036
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003037static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003038long_bitwise(PyLongObject *a,
3039 int op, /* '&', '|', '^' */
3040 PyLongObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00003041{
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003042 digit maska, maskb; /* 0 or MASK */
3043 int negz;
Martin v. Löwis18e16552006-02-15 17:27:45 +00003044 Py_ssize_t size_a, size_b, size_z;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003045 PyLongObject *z;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003046 int i;
Guido van Rossum8b27d921992-03-27 17:27:05 +00003047 digit diga, digb;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003048 PyObject *v;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003049
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003050 if (a->ob_size < 0) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003051 a = (PyLongObject *) long_invert(a);
Hye-Shik Chang4af5c8c2006-03-07 15:39:21 +00003052 if (a == NULL)
3053 return NULL;
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003054 maska = MASK;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003055 }
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003056 else {
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003057 Py_INCREF(a);
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003058 maska = 0;
Guido van Rossumafbb8db1991-12-31 13:14:13 +00003059 }
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003060 if (b->ob_size < 0) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003061 b = (PyLongObject *) long_invert(b);
Hye-Shik Chang4af5c8c2006-03-07 15:39:21 +00003062 if (b == NULL) {
3063 Py_DECREF(a);
3064 return NULL;
3065 }
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003066 maskb = MASK;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003067 }
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003068 else {
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003069 Py_INCREF(b);
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003070 maskb = 0;
3071 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00003072
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003073 negz = 0;
3074 switch (op) {
3075 case '^':
3076 if (maska != maskb) {
3077 maska ^= MASK;
3078 negz = -1;
3079 }
3080 break;
Guido van Rossumeb1fafc1994-08-29 12:47:19 +00003081 case '&':
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003082 if (maska && maskb) {
3083 op = '|';
3084 maska ^= MASK;
3085 maskb ^= MASK;
3086 negz = -1;
3087 }
3088 break;
3089 case '|':
3090 if (maska || maskb) {
3091 op = '&';
3092 maska ^= MASK;
3093 maskb ^= MASK;
3094 negz = -1;
3095 }
3096 break;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003097 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00003098
Guido van Rossumbd3a5271998-08-11 15:04:47 +00003099 /* JRH: The original logic here was to allocate the result value (z)
3100 as the longer of the two operands. However, there are some cases
3101 where the result is guaranteed to be shorter than that: AND of two
3102 positives, OR of two negatives: use the shorter number. AND with
3103 mixed signs: use the positive number. OR with mixed signs: use the
3104 negative number. After the transformations above, op will be '&'
3105 iff one of these cases applies, and mask will be non-0 for operands
3106 whose length should be ignored.
3107 */
3108
3109 size_a = a->ob_size;
3110 size_b = b->ob_size;
3111 size_z = op == '&'
3112 ? (maska
3113 ? size_b
3114 : (maskb ? size_a : MIN(size_a, size_b)))
3115 : MAX(size_a, size_b);
3116 z = _PyLong_New(size_z);
Hye-Shik Chang4af5c8c2006-03-07 15:39:21 +00003117 if (z == NULL) {
Neal Norwitzef02b9e2006-07-16 02:00:32 +00003118 Py_DECREF(a);
3119 Py_DECREF(b);
Guido van Rossumbd3a5271998-08-11 15:04:47 +00003120 return NULL;
3121 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00003122
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003123 for (i = 0; i < size_z; ++i) {
3124 diga = (i < size_a ? a->ob_digit[i] : 0) ^ maska;
3125 digb = (i < size_b ? b->ob_digit[i] : 0) ^ maskb;
3126 switch (op) {
3127 case '&': z->ob_digit[i] = diga & digb; break;
3128 case '|': z->ob_digit[i] = diga | digb; break;
3129 case '^': z->ob_digit[i] = diga ^ digb; break;
3130 }
Guido van Rossumafbb8db1991-12-31 13:14:13 +00003131 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00003132
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003133 Py_DECREF(a);
3134 Py_DECREF(b);
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003135 z = long_normalize(z);
3136 if (negz == 0)
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003137 return (PyObject *) z;
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003138 v = long_invert(z);
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003139 Py_DECREF(z);
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003140 return v;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003141}
3142
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003143static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00003144long_and(PyObject *v, PyObject *w)
Guido van Rossumc6913e71991-11-19 20:26:46 +00003145{
Neil Schemenauerba872e22001-01-04 01:46:03 +00003146 PyLongObject *a, *b;
3147 PyObject *c;
3148 CONVERT_BINOP(v, w, &a, &b);
3149 c = long_bitwise(a, '&', b);
3150 Py_DECREF(a);
3151 Py_DECREF(b);
3152 return c;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003153}
3154
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003155static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00003156long_xor(PyObject *v, PyObject *w)
Guido van Rossumc6913e71991-11-19 20:26:46 +00003157{
Neil Schemenauerba872e22001-01-04 01:46:03 +00003158 PyLongObject *a, *b;
3159 PyObject *c;
3160 CONVERT_BINOP(v, w, &a, &b);
3161 c = long_bitwise(a, '^', b);
3162 Py_DECREF(a);
3163 Py_DECREF(b);
3164 return c;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003165}
3166
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003167static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00003168long_or(PyObject *v, PyObject *w)
Guido van Rossumc6913e71991-11-19 20:26:46 +00003169{
Neil Schemenauerba872e22001-01-04 01:46:03 +00003170 PyLongObject *a, *b;
3171 PyObject *c;
3172 CONVERT_BINOP(v, w, &a, &b);
3173 c = long_bitwise(a, '|', b);
3174 Py_DECREF(a);
3175 Py_DECREF(b);
3176 return c;
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00003177}
3178
Guido van Rossum234f9421993-06-17 12:35:49 +00003179static int
Tim Peters9f688bf2000-07-07 15:53:28 +00003180long_coerce(PyObject **pv, PyObject **pw)
Guido van Rossume6eefc21992-08-14 12:06:52 +00003181{
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003182 if (PyInt_Check(*pw)) {
Neil Schemenauerba872e22001-01-04 01:46:03 +00003183 *pw = PyLong_FromLong(PyInt_AS_LONG(*pw));
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003184 Py_INCREF(*pv);
Guido van Rossume6eefc21992-08-14 12:06:52 +00003185 return 0;
3186 }
Guido van Rossum1952e382001-09-19 01:25:16 +00003187 else if (PyLong_Check(*pw)) {
3188 Py_INCREF(*pv);
3189 Py_INCREF(*pw);
3190 return 0;
3191 }
Guido van Rossume6eefc21992-08-14 12:06:52 +00003192 return 1; /* Can't do it */
3193}
3194
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003195static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003196long_long(PyObject *v)
Guido van Rossum1899c2e1992-09-12 11:09:23 +00003197{
Brett Cannonc3647ac2005-04-26 03:45:26 +00003198 if (PyLong_CheckExact(v))
3199 Py_INCREF(v);
3200 else
3201 v = _PyLong_Copy((PyLongObject *)v);
Guido van Rossum1899c2e1992-09-12 11:09:23 +00003202 return v;
3203}
3204
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003205static PyObject *
Walter Dörwaldf1715402002-11-19 20:49:15 +00003206long_int(PyObject *v)
3207{
3208 long x;
3209 x = PyLong_AsLong(v);
3210 if (PyErr_Occurred()) {
3211 if (PyErr_ExceptionMatches(PyExc_OverflowError)) {
3212 PyErr_Clear();
3213 if (PyLong_CheckExact(v)) {
3214 Py_INCREF(v);
3215 return v;
3216 }
3217 else
3218 return _PyLong_Copy((PyLongObject *)v);
3219 }
3220 else
3221 return NULL;
3222 }
3223 return PyInt_FromLong(x);
3224}
3225
3226static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003227long_float(PyObject *v)
Guido van Rossum1899c2e1992-09-12 11:09:23 +00003228{
Guido van Rossum09e6ad01997-02-14 22:54:21 +00003229 double result;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003230 result = PyLong_AsDouble(v);
Tim Peters9fffa3e2001-09-04 05:14:19 +00003231 if (result == -1.0 && PyErr_Occurred())
3232 return NULL;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003233 return PyFloat_FromDouble(result);
Guido van Rossum1899c2e1992-09-12 11:09:23 +00003234}
3235
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003236static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003237long_oct(PyObject *v)
Guido van Rossum1899c2e1992-09-12 11:09:23 +00003238{
Fred Drake121ee271999-12-23 15:41:28 +00003239 return long_format(v, 8, 1);
Guido van Rossum1899c2e1992-09-12 11:09:23 +00003240}
3241
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003242static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003243long_hex(PyObject *v)
Guido van Rossum1899c2e1992-09-12 11:09:23 +00003244{
Fred Drake121ee271999-12-23 15:41:28 +00003245 return long_format(v, 16, 1);
Guido van Rossum1899c2e1992-09-12 11:09:23 +00003246}
Jeremy Hylton938ace62002-07-17 16:30:39 +00003247
3248static PyObject *
Guido van Rossumbef14172001-08-29 15:47:46 +00003249long_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
Guido van Rossum1899c2e1992-09-12 11:09:23 +00003250
Tim Peters6d6c1a32001-08-02 04:15:00 +00003251static PyObject *
3252long_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
3253{
3254 PyObject *x = NULL;
3255 int base = -909; /* unlikely! */
Martin v. Löwis15e62742006-02-27 16:46:16 +00003256 static char *kwlist[] = {"x", "base", 0};
Tim Peters6d6c1a32001-08-02 04:15:00 +00003257
Guido van Rossumbef14172001-08-29 15:47:46 +00003258 if (type != &PyLong_Type)
3259 return long_subtype_new(type, args, kwds); /* Wimp out */
Tim Peters6d6c1a32001-08-02 04:15:00 +00003260 if (!PyArg_ParseTupleAndKeywords(args, kwds, "|Oi:long", kwlist,
3261 &x, &base))
3262 return NULL;
3263 if (x == NULL)
3264 return PyLong_FromLong(0L);
3265 if (base == -909)
3266 return PyNumber_Long(x);
3267 else if (PyString_Check(x))
3268 return PyLong_FromString(PyString_AS_STRING(x), NULL, base);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00003269#ifdef Py_USING_UNICODE
Tim Peters6d6c1a32001-08-02 04:15:00 +00003270 else if (PyUnicode_Check(x))
3271 return PyLong_FromUnicode(PyUnicode_AS_UNICODE(x),
3272 PyUnicode_GET_SIZE(x),
3273 base);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00003274#endif
Tim Peters6d6c1a32001-08-02 04:15:00 +00003275 else {
3276 PyErr_SetString(PyExc_TypeError,
3277 "long() can't convert non-string with explicit base");
3278 return NULL;
3279 }
3280}
3281
Guido van Rossumbef14172001-08-29 15:47:46 +00003282/* Wimpy, slow approach to tp_new calls for subtypes of long:
3283 first create a regular long from whatever arguments we got,
3284 then allocate a subtype instance and initialize it from
3285 the regular long. The regular long is then thrown away.
3286*/
3287static PyObject *
3288long_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
3289{
Anthony Baxter377be112006-04-11 06:54:30 +00003290 PyLongObject *tmp, *newobj;
Martin v. Löwis18e16552006-02-15 17:27:45 +00003291 Py_ssize_t i, n;
Guido van Rossumbef14172001-08-29 15:47:46 +00003292
3293 assert(PyType_IsSubtype(type, &PyLong_Type));
3294 tmp = (PyLongObject *)long_new(&PyLong_Type, args, kwds);
3295 if (tmp == NULL)
3296 return NULL;
Tim Peters64b5ce32001-09-10 20:52:51 +00003297 assert(PyLong_CheckExact(tmp));
Guido van Rossumbef14172001-08-29 15:47:46 +00003298 n = tmp->ob_size;
3299 if (n < 0)
3300 n = -n;
Anthony Baxter377be112006-04-11 06:54:30 +00003301 newobj = (PyLongObject *)type->tp_alloc(type, n);
3302 if (newobj == NULL) {
Raymond Hettingerf4667932003-06-28 20:04:25 +00003303 Py_DECREF(tmp);
Guido van Rossumbef14172001-08-29 15:47:46 +00003304 return NULL;
Raymond Hettingerf4667932003-06-28 20:04:25 +00003305 }
Anthony Baxter377be112006-04-11 06:54:30 +00003306 assert(PyLong_Check(newobj));
3307 newobj->ob_size = tmp->ob_size;
Guido van Rossumbef14172001-08-29 15:47:46 +00003308 for (i = 0; i < n; i++)
Anthony Baxter377be112006-04-11 06:54:30 +00003309 newobj->ob_digit[i] = tmp->ob_digit[i];
Guido van Rossumbef14172001-08-29 15:47:46 +00003310 Py_DECREF(tmp);
Anthony Baxter377be112006-04-11 06:54:30 +00003311 return (PyObject *)newobj;
Guido van Rossumbef14172001-08-29 15:47:46 +00003312}
3313
Guido van Rossum5d9113d2003-01-29 17:58:45 +00003314static PyObject *
3315long_getnewargs(PyLongObject *v)
3316{
3317 return Py_BuildValue("(N)", _PyLong_Copy(v));
3318}
3319
3320static PyMethodDef long_methods[] = {
3321 {"__getnewargs__", (PyCFunction)long_getnewargs, METH_NOARGS},
3322 {NULL, NULL} /* sentinel */
3323};
3324
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003325PyDoc_STRVAR(long_doc,
Tim Peters6d6c1a32001-08-02 04:15:00 +00003326"long(x[, base]) -> integer\n\
3327\n\
3328Convert a string or number to a long integer, if possible. A floating\n\
3329point argument will be truncated towards zero (this does not include a\n\
3330string representation of a floating point number!) When converting a\n\
3331string, use the optional base. It is an error to supply a base when\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003332converting a non-string.");
Tim Peters6d6c1a32001-08-02 04:15:00 +00003333
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003334static PyNumberMethods long_as_number = {
Tim Peters9f688bf2000-07-07 15:53:28 +00003335 (binaryfunc) long_add, /*nb_add*/
3336 (binaryfunc) long_sub, /*nb_subtract*/
3337 (binaryfunc) long_mul, /*nb_multiply*/
Georg Brandl347b3002006-03-30 11:57:00 +00003338 long_classic_div, /*nb_divide*/
3339 long_mod, /*nb_remainder*/
3340 long_divmod, /*nb_divmod*/
3341 long_pow, /*nb_power*/
Tim Peters9f688bf2000-07-07 15:53:28 +00003342 (unaryfunc) long_neg, /*nb_negative*/
3343 (unaryfunc) long_pos, /*tp_positive*/
3344 (unaryfunc) long_abs, /*tp_absolute*/
3345 (inquiry) long_nonzero, /*tp_nonzero*/
3346 (unaryfunc) long_invert, /*nb_invert*/
Georg Brandl347b3002006-03-30 11:57:00 +00003347 long_lshift, /*nb_lshift*/
Tim Peters9f688bf2000-07-07 15:53:28 +00003348 (binaryfunc) long_rshift, /*nb_rshift*/
Georg Brandl347b3002006-03-30 11:57:00 +00003349 long_and, /*nb_and*/
3350 long_xor, /*nb_xor*/
3351 long_or, /*nb_or*/
3352 long_coerce, /*nb_coerce*/
3353 long_int, /*nb_int*/
3354 long_long, /*nb_long*/
3355 long_float, /*nb_float*/
3356 long_oct, /*nb_oct*/
3357 long_hex, /*nb_hex*/
Guido van Rossum4668b002001-08-08 05:00:18 +00003358 0, /* nb_inplace_add */
3359 0, /* nb_inplace_subtract */
3360 0, /* nb_inplace_multiply */
3361 0, /* nb_inplace_divide */
3362 0, /* nb_inplace_remainder */
3363 0, /* nb_inplace_power */
3364 0, /* nb_inplace_lshift */
3365 0, /* nb_inplace_rshift */
3366 0, /* nb_inplace_and */
3367 0, /* nb_inplace_xor */
3368 0, /* nb_inplace_or */
Georg Brandl347b3002006-03-30 11:57:00 +00003369 long_div, /* nb_floor_divide */
Guido van Rossum4668b002001-08-08 05:00:18 +00003370 long_true_divide, /* nb_true_divide */
3371 0, /* nb_inplace_floor_divide */
3372 0, /* nb_inplace_true_divide */
Neal Norwitz8a87f5d2006-08-12 17:03:09 +00003373 long_long, /* nb_index */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003374};
3375
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003376PyTypeObject PyLong_Type = {
3377 PyObject_HEAD_INIT(&PyType_Type)
Tim Peters6d6c1a32001-08-02 04:15:00 +00003378 0, /* ob_size */
3379 "long", /* tp_name */
3380 sizeof(PyLongObject) - sizeof(digit), /* tp_basicsize */
3381 sizeof(digit), /* tp_itemsize */
Georg Brandl347b3002006-03-30 11:57:00 +00003382 long_dealloc, /* tp_dealloc */
Tim Peters6d6c1a32001-08-02 04:15:00 +00003383 0, /* tp_print */
3384 0, /* tp_getattr */
3385 0, /* tp_setattr */
3386 (cmpfunc)long_compare, /* tp_compare */
Georg Brandl347b3002006-03-30 11:57:00 +00003387 long_repr, /* tp_repr */
Tim Peters6d6c1a32001-08-02 04:15:00 +00003388 &long_as_number, /* tp_as_number */
3389 0, /* tp_as_sequence */
3390 0, /* tp_as_mapping */
3391 (hashfunc)long_hash, /* tp_hash */
3392 0, /* tp_call */
Georg Brandl347b3002006-03-30 11:57:00 +00003393 long_str, /* tp_str */
Tim Peters6d6c1a32001-08-02 04:15:00 +00003394 PyObject_GenericGetAttr, /* tp_getattro */
3395 0, /* tp_setattro */
3396 0, /* tp_as_buffer */
Guido van Rossumbef14172001-08-29 15:47:46 +00003397 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES |
3398 Py_TPFLAGS_BASETYPE, /* tp_flags */
Tim Peters6d6c1a32001-08-02 04:15:00 +00003399 long_doc, /* tp_doc */
3400 0, /* tp_traverse */
3401 0, /* tp_clear */
3402 0, /* tp_richcompare */
3403 0, /* tp_weaklistoffset */
3404 0, /* tp_iter */
3405 0, /* tp_iternext */
Guido van Rossum5d9113d2003-01-29 17:58:45 +00003406 long_methods, /* tp_methods */
Tim Peters6d6c1a32001-08-02 04:15:00 +00003407 0, /* tp_members */
3408 0, /* tp_getset */
3409 0, /* tp_base */
3410 0, /* tp_dict */
3411 0, /* tp_descr_get */
3412 0, /* tp_descr_set */
3413 0, /* tp_dictoffset */
3414 0, /* tp_init */
3415 0, /* tp_alloc */
3416 long_new, /* tp_new */
Neil Schemenaueraa769ae2002-04-12 02:44:10 +00003417 PyObject_Del, /* tp_free */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003418};