blob: 4ce947955a98baa57e1a7e1929d8435daec8d1ec [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
Guido van Rossum38fff8c2006-03-07 18:50:55 +0000243static Py_ssize_t
244_long_as_ssize_t(PyObject *vv) {
Martin v. Löwis18e16552006-02-15 17:27:45 +0000245 register PyLongObject *v;
246 size_t x, prev;
247 Py_ssize_t i;
248 int sign;
249
250 if (vv == NULL || !PyLong_Check(vv)) {
251 PyErr_BadInternalCall();
252 return -1;
253 }
254 v = (PyLongObject *)vv;
255 i = v->ob_size;
256 sign = 1;
257 x = 0;
258 if (i < 0) {
259 sign = -1;
260 i = -(i);
261 }
262 while (--i >= 0) {
263 prev = x;
264 x = (x << SHIFT) + v->ob_digit[i];
265 if ((x >> SHIFT) != prev)
266 goto overflow;
267 }
268 /* Haven't lost any bits, but if the sign bit is set we're in
269 * trouble *unless* this is the min negative number. So,
270 * trouble iff sign bit set && (positive || some bit set other
271 * than the sign bit).
272 */
273 if ((Py_ssize_t)x < 0 && (sign > 0 || (x << 1) != 0))
274 goto overflow;
275 return (Py_ssize_t)x * sign;
276
277 overflow:
278 PyErr_SetString(PyExc_OverflowError,
279 "long int too large to convert to int");
Tim Peters696cf432006-05-24 21:10:40 +0000280 if (sign > 0)
Guido van Rossum38fff8c2006-03-07 18:50:55 +0000281 return PY_SSIZE_T_MAX;
Tim Peters696cf432006-05-24 21:10:40 +0000282 else
Martin v. Löwisc48c8db2006-04-05 18:21:17 +0000283 return PY_SSIZE_T_MIN;
Guido van Rossum38fff8c2006-03-07 18:50:55 +0000284}
285
286/* Get a Py_ssize_t from a long int object.
287 Returns -1 and sets an error condition if overflow occurs. */
288
289Py_ssize_t
290_PyLong_AsSsize_t(PyObject *vv)
291{
292 Py_ssize_t x;
293
294 x = _long_as_ssize_t(vv);
295 if (PyErr_Occurred()) return -1;
296 return x;
297}
298
299
300/* Get a Py_ssize_t from a long int object.
301 Silently reduce values larger than PY_SSIZE_T_MAX to PY_SSIZE_T_MAX,
302 and silently boost values less than -PY_SSIZE_T_MAX-1 to -PY_SSIZE_T_MAX-1.
Armin Rigo12bec1b2006-03-28 19:27:56 +0000303 On error, return -1 with an exception set.
Guido van Rossum38fff8c2006-03-07 18:50:55 +0000304*/
305
306static Py_ssize_t
307long_index(PyObject *vv)
308{
309 Py_ssize_t x;
310
311 x = _long_as_ssize_t(vv);
312 if (PyErr_Occurred()) {
313 /* If overflow error, ignore the error */
314 if (x != -1) {
315 PyErr_Clear();
316 }
317 }
318 return x;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000319}
320
Guido van Rossumd8c80482002-08-13 00:24:58 +0000321/* Get a C unsigned long int from a long int object.
Guido van Rossum53756b11997-01-03 17:14:46 +0000322 Returns -1 and sets an error condition if overflow occurs. */
323
324unsigned long
Tim Peters9f688bf2000-07-07 15:53:28 +0000325PyLong_AsUnsignedLong(PyObject *vv)
Guido van Rossum53756b11997-01-03 17:14:46 +0000326{
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000327 register PyLongObject *v;
Guido van Rossum53756b11997-01-03 17:14:46 +0000328 unsigned long x, prev;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000329 Py_ssize_t i;
Tim Peters5af4e6c2002-08-12 02:31:19 +0000330
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000331 if (vv == NULL || !PyLong_Check(vv)) {
Martin v. Löwis729d47d2004-09-20 06:17:46 +0000332 if (vv != NULL && PyInt_Check(vv)) {
333 long val = PyInt_AsLong(vv);
334 if (val < 0) {
335 PyErr_SetString(PyExc_OverflowError,
336 "can't convert negative value to unsigned long");
337 return (unsigned long) -1;
338 }
339 return val;
340 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000341 PyErr_BadInternalCall();
Guido van Rossum53756b11997-01-03 17:14:46 +0000342 return (unsigned long) -1;
343 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000344 v = (PyLongObject *)vv;
Guido van Rossum53756b11997-01-03 17:14:46 +0000345 i = v->ob_size;
346 x = 0;
347 if (i < 0) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000348 PyErr_SetString(PyExc_OverflowError,
Guido van Rossum53756b11997-01-03 17:14:46 +0000349 "can't convert negative value to unsigned long");
350 return (unsigned long) -1;
351 }
352 while (--i >= 0) {
353 prev = x;
354 x = (x << SHIFT) + v->ob_digit[i];
355 if ((x >> SHIFT) != prev) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000356 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +0000357 "long int too large to convert");
Guido van Rossum53756b11997-01-03 17:14:46 +0000358 return (unsigned long) -1;
359 }
360 }
361 return x;
362}
363
Thomas Hellera4ea6032003-04-17 18:55:45 +0000364/* Get a C unsigned long int from a long int object, ignoring the high bits.
365 Returns -1 and sets an error condition if an error occurs. */
366
367unsigned long
368PyLong_AsUnsignedLongMask(PyObject *vv)
369{
370 register PyLongObject *v;
371 unsigned long x;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000372 Py_ssize_t i;
373 int sign;
Thomas Hellera4ea6032003-04-17 18:55:45 +0000374
375 if (vv == NULL || !PyLong_Check(vv)) {
Martin v. Löwis729d47d2004-09-20 06:17:46 +0000376 if (vv != NULL && PyInt_Check(vv))
377 return PyInt_AsUnsignedLongMask(vv);
Thomas Hellera4ea6032003-04-17 18:55:45 +0000378 PyErr_BadInternalCall();
379 return (unsigned long) -1;
380 }
381 v = (PyLongObject *)vv;
382 i = v->ob_size;
383 sign = 1;
384 x = 0;
385 if (i < 0) {
386 sign = -1;
387 i = -i;
388 }
389 while (--i >= 0) {
390 x = (x << SHIFT) + v->ob_digit[i];
391 }
392 return x * sign;
393}
394
Tim Peters5b8132f2003-01-31 15:52:05 +0000395int
396_PyLong_Sign(PyObject *vv)
397{
398 PyLongObject *v = (PyLongObject *)vv;
Tim Peters5b8132f2003-01-31 15:52:05 +0000399
400 assert(v != NULL);
401 assert(PyLong_Check(v));
Tim Peters5b8132f2003-01-31 15:52:05 +0000402
Tim Petersee1a53c2003-02-02 02:57:53 +0000403 return v->ob_size == 0 ? 0 : (v->ob_size < 0 ? -1 : 1);
Tim Peters5b8132f2003-01-31 15:52:05 +0000404}
405
Tim Petersbaefd9e2003-01-28 20:37:45 +0000406size_t
407_PyLong_NumBits(PyObject *vv)
408{
409 PyLongObject *v = (PyLongObject *)vv;
Tim Peters5b8132f2003-01-31 15:52:05 +0000410 size_t result = 0;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000411 Py_ssize_t ndigits;
Tim Petersbaefd9e2003-01-28 20:37:45 +0000412
413 assert(v != NULL);
414 assert(PyLong_Check(v));
Guido van Rossum004a65c2003-02-03 15:28:19 +0000415 ndigits = ABS(v->ob_size);
Tim Petersbaefd9e2003-01-28 20:37:45 +0000416 assert(ndigits == 0 || v->ob_digit[ndigits - 1] != 0);
417 if (ndigits > 0) {
Tim Petersbaefd9e2003-01-28 20:37:45 +0000418 digit msd = v->ob_digit[ndigits - 1];
419
Tim Peters5b8132f2003-01-31 15:52:05 +0000420 result = (ndigits - 1) * SHIFT;
Skip Montanaro429433b2006-04-18 00:35:43 +0000421 if (result / SHIFT != (size_t)(ndigits - 1))
Tim Petersbaefd9e2003-01-28 20:37:45 +0000422 goto Overflow;
423 do {
424 ++result;
425 if (result == 0)
426 goto Overflow;
427 msd >>= 1;
428 } while (msd);
429 }
430 return result;
431
432Overflow:
433 PyErr_SetString(PyExc_OverflowError, "long has too many bits "
434 "to express in a platform size_t");
435 return (size_t)-1;
436}
437
Tim Peters2a9b3672001-06-11 21:23:58 +0000438PyObject *
439_PyLong_FromByteArray(const unsigned char* bytes, size_t n,
440 int little_endian, int is_signed)
441{
442 const unsigned char* pstartbyte;/* LSB of bytes */
443 int incr; /* direction to move pstartbyte */
444 const unsigned char* pendbyte; /* MSB of bytes */
445 size_t numsignificantbytes; /* number of bytes that matter */
446 size_t ndigits; /* number of Python long digits */
447 PyLongObject* v; /* result */
448 int idigit = 0; /* next free index in v->ob_digit */
449
450 if (n == 0)
451 return PyLong_FromLong(0L);
452
453 if (little_endian) {
454 pstartbyte = bytes;
455 pendbyte = bytes + n - 1;
456 incr = 1;
457 }
458 else {
459 pstartbyte = bytes + n - 1;
460 pendbyte = bytes;
461 incr = -1;
462 }
463
464 if (is_signed)
465 is_signed = *pendbyte >= 0x80;
466
467 /* Compute numsignificantbytes. This consists of finding the most
468 significant byte. Leading 0 bytes are insignficant if the number
469 is positive, and leading 0xff bytes if negative. */
470 {
471 size_t i;
472 const unsigned char* p = pendbyte;
473 const int pincr = -incr; /* search MSB to LSB */
474 const unsigned char insignficant = is_signed ? 0xff : 0x00;
475
476 for (i = 0; i < n; ++i, p += pincr) {
477 if (*p != insignficant)
478 break;
479 }
480 numsignificantbytes = n - i;
481 /* 2's-comp is a bit tricky here, e.g. 0xff00 == -0x0100, so
482 actually has 2 significant bytes. OTOH, 0xff0001 ==
483 -0x00ffff, so we wouldn't *need* to bump it there; but we
484 do for 0xffff = -0x0001. To be safe without bothering to
485 check every case, bump it regardless. */
486 if (is_signed && numsignificantbytes < n)
487 ++numsignificantbytes;
488 }
489
490 /* How many Python long digits do we need? We have
491 8*numsignificantbytes bits, and each Python long digit has SHIFT
492 bits, so it's the ceiling of the quotient. */
493 ndigits = (numsignificantbytes * 8 + SHIFT - 1) / SHIFT;
494 if (ndigits > (size_t)INT_MAX)
495 return PyErr_NoMemory();
496 v = _PyLong_New((int)ndigits);
497 if (v == NULL)
498 return NULL;
499
500 /* Copy the bits over. The tricky parts are computing 2's-comp on
501 the fly for signed numbers, and dealing with the mismatch between
502 8-bit bytes and (probably) 15-bit Python digits.*/
503 {
504 size_t i;
Tim Petersf251d062001-06-13 21:09:15 +0000505 twodigits carry = 1; /* for 2's-comp calculation */
Tim Peters2a9b3672001-06-11 21:23:58 +0000506 twodigits accum = 0; /* sliding register */
507 unsigned int accumbits = 0; /* number of bits in accum */
508 const unsigned char* p = pstartbyte;
509
510 for (i = 0; i < numsignificantbytes; ++i, p += incr) {
Tim Peters8bc84b42001-06-12 19:17:03 +0000511 twodigits thisbyte = *p;
Tim Peters2a9b3672001-06-11 21:23:58 +0000512 /* Compute correction for 2's comp, if needed. */
513 if (is_signed) {
514 thisbyte = (0xff ^ thisbyte) + carry;
515 carry = thisbyte >> 8;
516 thisbyte &= 0xff;
517 }
518 /* Because we're going LSB to MSB, thisbyte is
519 more significant than what's already in accum,
520 so needs to be prepended to accum. */
521 accum |= thisbyte << accumbits;
522 accumbits += 8;
523 if (accumbits >= SHIFT) {
524 /* There's enough to fill a Python digit. */
525 assert(idigit < (int)ndigits);
526 v->ob_digit[idigit] = (digit)(accum & MASK);
527 ++idigit;
528 accum >>= SHIFT;
529 accumbits -= SHIFT;
530 assert(accumbits < SHIFT);
531 }
532 }
533 assert(accumbits < SHIFT);
534 if (accumbits) {
535 assert(idigit < (int)ndigits);
536 v->ob_digit[idigit] = (digit)accum;
537 ++idigit;
538 }
539 }
540
541 v->ob_size = is_signed ? -idigit : idigit;
542 return (PyObject *)long_normalize(v);
543}
544
545int
546_PyLong_AsByteArray(PyLongObject* v,
547 unsigned char* bytes, size_t n,
548 int little_endian, int is_signed)
549{
550 int i; /* index into v->ob_digit */
Martin v. Löwis18e16552006-02-15 17:27:45 +0000551 Py_ssize_t ndigits; /* |v->ob_size| */
Tim Peters2a9b3672001-06-11 21:23:58 +0000552 twodigits accum; /* sliding register */
553 unsigned int accumbits; /* # bits in accum */
554 int do_twos_comp; /* store 2's-comp? is_signed and v < 0 */
555 twodigits carry; /* for computing 2's-comp */
556 size_t j; /* # bytes filled */
557 unsigned char* p; /* pointer to next byte in bytes */
558 int pincr; /* direction to move p */
559
560 assert(v != NULL && PyLong_Check(v));
561
562 if (v->ob_size < 0) {
563 ndigits = -(v->ob_size);
564 if (!is_signed) {
565 PyErr_SetString(PyExc_TypeError,
566 "can't convert negative long to unsigned");
567 return -1;
568 }
569 do_twos_comp = 1;
570 }
571 else {
572 ndigits = v->ob_size;
573 do_twos_comp = 0;
574 }
575
576 if (little_endian) {
577 p = bytes;
578 pincr = 1;
579 }
580 else {
581 p = bytes + n - 1;
582 pincr = -1;
583 }
584
Tim Peters898cf852001-06-13 20:50:08 +0000585 /* Copy over all the Python digits.
586 It's crucial that every Python digit except for the MSD contribute
587 exactly SHIFT bits to the total, so first assert that the long is
588 normalized. */
589 assert(ndigits == 0 || v->ob_digit[ndigits - 1] != 0);
Tim Peters2a9b3672001-06-11 21:23:58 +0000590 j = 0;
591 accum = 0;
592 accumbits = 0;
593 carry = do_twos_comp ? 1 : 0;
594 for (i = 0; i < ndigits; ++i) {
595 twodigits thisdigit = v->ob_digit[i];
596 if (do_twos_comp) {
597 thisdigit = (thisdigit ^ MASK) + carry;
598 carry = thisdigit >> SHIFT;
599 thisdigit &= MASK;
600 }
Tim Peters8bc84b42001-06-12 19:17:03 +0000601 /* Because we're going LSB to MSB, thisdigit is more
602 significant than what's already in accum, so needs to be
603 prepended to accum. */
604 accum |= thisdigit << accumbits;
Tim Petersede05092001-06-14 08:53:38 +0000605 accumbits += SHIFT;
Tim Peters8bc84b42001-06-12 19:17:03 +0000606
Tim Petersede05092001-06-14 08:53:38 +0000607 /* The most-significant digit may be (probably is) at least
608 partly empty. */
Tim Peters8bc84b42001-06-12 19:17:03 +0000609 if (i == ndigits - 1) {
Tim Petersede05092001-06-14 08:53:38 +0000610 /* Count # of sign bits -- they needn't be stored,
611 * although for signed conversion we need later to
612 * make sure at least one sign bit gets stored.
613 * First shift conceptual sign bit to real sign bit.
614 */
615 stwodigits s = (stwodigits)(thisdigit <<
616 (8*sizeof(stwodigits) - SHIFT));
Tim Peters7a3bfc32001-06-12 01:22:22 +0000617 unsigned int nsignbits = 0;
Tim Petersede05092001-06-14 08:53:38 +0000618 while ((s < 0) == do_twos_comp && nsignbits < SHIFT) {
Tim Peters7a3bfc32001-06-12 01:22:22 +0000619 ++nsignbits;
Tim Petersede05092001-06-14 08:53:38 +0000620 s <<= 1;
Tim Peters7a3bfc32001-06-12 01:22:22 +0000621 }
Tim Petersede05092001-06-14 08:53:38 +0000622 accumbits -= nsignbits;
Tim Peters7a3bfc32001-06-12 01:22:22 +0000623 }
Tim Peters8bc84b42001-06-12 19:17:03 +0000624
Tim Peters2a9b3672001-06-11 21:23:58 +0000625 /* Store as many bytes as possible. */
Tim Peters7a3bfc32001-06-12 01:22:22 +0000626 while (accumbits >= 8) {
Tim Peters2a9b3672001-06-11 21:23:58 +0000627 if (j >= n)
628 goto Overflow;
629 ++j;
630 *p = (unsigned char)(accum & 0xff);
631 p += pincr;
632 accumbits -= 8;
633 accum >>= 8;
Tim Peters7a3bfc32001-06-12 01:22:22 +0000634 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000635 }
636
637 /* Store the straggler (if any). */
638 assert(accumbits < 8);
639 assert(carry == 0); /* else do_twos_comp and *every* digit was 0 */
Tim Peters7a3bfc32001-06-12 01:22:22 +0000640 if (accumbits > 0) {
Tim Peters2a9b3672001-06-11 21:23:58 +0000641 if (j >= n)
642 goto Overflow;
643 ++j;
644 if (do_twos_comp) {
645 /* Fill leading bits of the byte with sign bits
646 (appropriately pretending that the long had an
647 infinite supply of sign bits). */
648 accum |= (~(twodigits)0) << accumbits;
649 }
650 *p = (unsigned char)(accum & 0xff);
651 p += pincr;
652 }
Tim Peters05607ad2001-06-13 21:01:27 +0000653 else if (j == n && n > 0 && is_signed) {
654 /* The main loop filled the byte array exactly, so the code
655 just above didn't get to ensure there's a sign bit, and the
656 loop below wouldn't add one either. Make sure a sign bit
657 exists. */
Tim Peters2a9b3672001-06-11 21:23:58 +0000658 unsigned char msb = *(p - pincr);
Tim Peters05607ad2001-06-13 21:01:27 +0000659 int sign_bit_set = msb >= 0x80;
660 assert(accumbits == 0);
661 if (sign_bit_set == do_twos_comp)
662 return 0;
663 else
Tim Peters2a9b3672001-06-11 21:23:58 +0000664 goto Overflow;
665 }
Tim Peters05607ad2001-06-13 21:01:27 +0000666
667 /* Fill remaining bytes with copies of the sign bit. */
668 {
669 unsigned char signbyte = do_twos_comp ? 0xffU : 0U;
670 for ( ; j < n; ++j, p += pincr)
671 *p = signbyte;
672 }
673
Tim Peters2a9b3672001-06-11 21:23:58 +0000674 return 0;
675
676Overflow:
677 PyErr_SetString(PyExc_OverflowError, "long too big to convert");
678 return -1;
Tim Peters5af4e6c2002-08-12 02:31:19 +0000679
Tim Peters2a9b3672001-06-11 21:23:58 +0000680}
681
Tim Petersa1c1b0f2001-09-04 02:50:49 +0000682double
683_PyLong_AsScaledDouble(PyObject *vv, int *exponent)
684{
685/* NBITS_WANTED should be > the number of bits in a double's precision,
686 but small enough so that 2**NBITS_WANTED is within the normal double
687 range. nbitsneeded is set to 1 less than that because the most-significant
688 Python digit contains at least 1 significant bit, but we don't want to
689 bother counting them (catering to the worst case cheaply).
690
691 57 is one more than VAX-D double precision; I (Tim) don't know of a double
692 format with more precision than that; it's 1 larger so that we add in at
693 least one round bit to stand in for the ignored least-significant bits.
694*/
695#define NBITS_WANTED 57
696 PyLongObject *v;
697 double x;
698 const double multiplier = (double)(1L << SHIFT);
Martin v. Löwis18e16552006-02-15 17:27:45 +0000699 Py_ssize_t i;
700 int sign;
Tim Petersa1c1b0f2001-09-04 02:50:49 +0000701 int nbitsneeded;
702
703 if (vv == NULL || !PyLong_Check(vv)) {
704 PyErr_BadInternalCall();
705 return -1;
706 }
707 v = (PyLongObject *)vv;
708 i = v->ob_size;
709 sign = 1;
710 if (i < 0) {
711 sign = -1;
712 i = -(i);
713 }
714 else if (i == 0) {
715 *exponent = 0;
716 return 0.0;
717 }
718 --i;
719 x = (double)v->ob_digit[i];
720 nbitsneeded = NBITS_WANTED - 1;
721 /* Invariant: i Python digits remain unaccounted for. */
722 while (i > 0 && nbitsneeded > 0) {
723 --i;
724 x = x * multiplier + (double)v->ob_digit[i];
725 nbitsneeded -= SHIFT;
726 }
727 /* There are i digits we didn't shift in. Pretending they're all
728 zeroes, the true value is x * 2**(i*SHIFT). */
729 *exponent = i;
730 assert(x > 0.0);
731 return x * sign;
732#undef NBITS_WANTED
733}
734
Guido van Rossum09e6ad01997-02-14 22:54:21 +0000735/* Get a C double from a long int object. */
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000736
737double
Tim Peters9f688bf2000-07-07 15:53:28 +0000738PyLong_AsDouble(PyObject *vv)
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000739{
Thomas Wouters553489a2006-02-01 21:32:04 +0000740 int e = -1;
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000741 double x;
Tim Peters9fffa3e2001-09-04 05:14:19 +0000742
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000743 if (vv == NULL || !PyLong_Check(vv)) {
744 PyErr_BadInternalCall();
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000745 return -1;
746 }
Tim Peters9fffa3e2001-09-04 05:14:19 +0000747 x = _PyLong_AsScaledDouble(vv, &e);
748 if (x == -1.0 && PyErr_Occurred())
749 return -1.0;
Thomas Wouters553489a2006-02-01 21:32:04 +0000750 /* 'e' initialized to -1 to silence gcc-4.0.x, but it should be
751 set correctly after a successful _PyLong_AsScaledDouble() call */
752 assert(e >= 0);
Tim Peters9fffa3e2001-09-04 05:14:19 +0000753 if (e > INT_MAX / SHIFT)
754 goto overflow;
755 errno = 0;
756 x = ldexp(x, e * SHIFT);
Tim Peters57f282a2001-09-05 05:38:10 +0000757 if (Py_OVERFLOWED(x))
Tim Peters9fffa3e2001-09-04 05:14:19 +0000758 goto overflow;
759 return x;
760
761overflow:
762 PyErr_SetString(PyExc_OverflowError,
763 "long int too large to convert to float");
764 return -1.0;
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000765}
766
Guido van Rossum78694d91998-09-18 14:14:13 +0000767/* Create a new long (or int) object from a C pointer */
768
769PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +0000770PyLong_FromVoidPtr(void *p)
Guido van Rossum78694d91998-09-18 14:14:13 +0000771{
Tim Peters70128a12001-06-16 08:48:40 +0000772#if SIZEOF_VOID_P <= SIZEOF_LONG
Martin v. Löwis0bc2ab92006-04-10 20:28:17 +0000773 if ((long)p < 0)
774 return PyLong_FromUnsignedLong((unsigned long)p);
Guido van Rossum78694d91998-09-18 14:14:13 +0000775 return PyInt_FromLong((long)p);
776#else
Guido van Rossum78694d91998-09-18 14:14:13 +0000777
Tim Peters70128a12001-06-16 08:48:40 +0000778#ifndef HAVE_LONG_LONG
779# error "PyLong_FromVoidPtr: sizeof(void*) > sizeof(long), but no long long"
780#endif
781#if SIZEOF_LONG_LONG < SIZEOF_VOID_P
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000782# error "PyLong_FromVoidPtr: sizeof(PY_LONG_LONG) < sizeof(void*)"
Tim Peters70128a12001-06-16 08:48:40 +0000783#endif
784 /* optimize null pointers */
785 if (p == NULL)
786 return PyInt_FromLong(0);
Martin v. Löwis0bc2ab92006-04-10 20:28:17 +0000787 return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG)p);
Tim Peters70128a12001-06-16 08:48:40 +0000788
789#endif /* SIZEOF_VOID_P <= SIZEOF_LONG */
Guido van Rossum78694d91998-09-18 14:14:13 +0000790}
791
792/* Get a C pointer from a long object (or an int object in some cases) */
793
794void *
Tim Peters9f688bf2000-07-07 15:53:28 +0000795PyLong_AsVoidPtr(PyObject *vv)
Guido van Rossum78694d91998-09-18 14:14:13 +0000796{
797 /* This function will allow int or long objects. If vv is neither,
798 then the PyLong_AsLong*() functions will raise the exception:
799 PyExc_SystemError, "bad argument to internal function"
800 */
Tim Peters70128a12001-06-16 08:48:40 +0000801#if SIZEOF_VOID_P <= SIZEOF_LONG
Guido van Rossum78694d91998-09-18 14:14:13 +0000802 long x;
803
Tim Peters70128a12001-06-16 08:48:40 +0000804 if (PyInt_Check(vv))
Guido van Rossum78694d91998-09-18 14:14:13 +0000805 x = PyInt_AS_LONG(vv);
Martin v. Löwis0bc2ab92006-04-10 20:28:17 +0000806 else if (PyLong_Check(vv) && _PyLong_Sign(vv) < 0)
Guido van Rossum78694d91998-09-18 14:14:13 +0000807 x = PyLong_AsLong(vv);
Martin v. Löwis0bc2ab92006-04-10 20:28:17 +0000808 else
809 x = PyLong_AsUnsignedLong(vv);
Guido van Rossum78694d91998-09-18 14:14:13 +0000810#else
Tim Peters70128a12001-06-16 08:48:40 +0000811
812#ifndef HAVE_LONG_LONG
813# error "PyLong_AsVoidPtr: sizeof(void*) > sizeof(long), but no long long"
814#endif
815#if SIZEOF_LONG_LONG < SIZEOF_VOID_P
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000816# error "PyLong_AsVoidPtr: sizeof(PY_LONG_LONG) < sizeof(void*)"
Tim Peters70128a12001-06-16 08:48:40 +0000817#endif
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000818 PY_LONG_LONG x;
Guido van Rossum78694d91998-09-18 14:14:13 +0000819
Tim Peters70128a12001-06-16 08:48:40 +0000820 if (PyInt_Check(vv))
Guido van Rossum78694d91998-09-18 14:14:13 +0000821 x = PyInt_AS_LONG(vv);
Martin v. Löwis0bc2ab92006-04-10 20:28:17 +0000822 else if (PyLong_Check(vv) && _PyLong_Sign(vv) < 0)
Guido van Rossum78694d91998-09-18 14:14:13 +0000823 x = PyLong_AsLongLong(vv);
Martin v. Löwis0bc2ab92006-04-10 20:28:17 +0000824 else
825 x = PyLong_AsUnsignedLongLong(vv);
Tim Peters70128a12001-06-16 08:48:40 +0000826
827#endif /* SIZEOF_VOID_P <= SIZEOF_LONG */
Guido van Rossum78694d91998-09-18 14:14:13 +0000828
829 if (x == -1 && PyErr_Occurred())
830 return NULL;
831 return (void *)x;
832}
833
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000834#ifdef HAVE_LONG_LONG
Tim Petersd1a7da62001-06-13 00:35:57 +0000835
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000836/* Initial PY_LONG_LONG support by Chris Herborth (chrish@qnx.com), later
Tim Petersd1a7da62001-06-13 00:35:57 +0000837 * rewritten to use the newer PyLong_{As,From}ByteArray API.
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000838 */
839
Tim Peterscf37dfc2001-06-14 18:42:50 +0000840#define IS_LITTLE_ENDIAN (int)*(unsigned char*)&one
Tim Petersd1a7da62001-06-13 00:35:57 +0000841
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000842/* Create a new long int object from a C PY_LONG_LONG int. */
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000843
844PyObject *
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000845PyLong_FromLongLong(PY_LONG_LONG ival)
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000846{
Bob Ippolitoa85bf202006-05-25 18:20:23 +0000847 PyLongObject *v;
848 unsigned PY_LONG_LONG t; /* unsigned so >> doesn't propagate sign bit */
849 int ndigits = 0;
850 int negative = 0;
851
852 if (ival < 0) {
853 ival = -ival;
854 negative = 1;
855 }
856
857 /* Count the number of Python digits.
858 We used to pick 5 ("big enough for anything"), but that's a
859 waste of time and space given that 5*15 = 75 bits are rarely
860 needed. */
861 t = (unsigned PY_LONG_LONG)ival;
862 while (t) {
863 ++ndigits;
864 t >>= SHIFT;
865 }
866 v = _PyLong_New(ndigits);
867 if (v != NULL) {
868 digit *p = v->ob_digit;
869 v->ob_size = negative ? -ndigits : ndigits;
870 t = (unsigned PY_LONG_LONG)ival;
871 while (t) {
872 *p++ = (digit)(t & MASK);
873 t >>= SHIFT;
874 }
875 }
876 return (PyObject *)v;
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000877}
878
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000879/* Create a new long int object from a C unsigned PY_LONG_LONG int. */
Tim Petersd1a7da62001-06-13 00:35:57 +0000880
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000881PyObject *
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000882PyLong_FromUnsignedLongLong(unsigned PY_LONG_LONG ival)
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000883{
Bob Ippolitoa85bf202006-05-25 18:20:23 +0000884 PyLongObject *v;
885 unsigned PY_LONG_LONG t;
886 int ndigits = 0;
887
888 /* Count the number of Python digits. */
889 t = (unsigned PY_LONG_LONG)ival;
890 while (t) {
891 ++ndigits;
892 t >>= SHIFT;
893 }
894 v = _PyLong_New(ndigits);
895 if (v != NULL) {
896 digit *p = v->ob_digit;
897 v->ob_size = ndigits;
898 while (ival) {
899 *p++ = (digit)(ival & MASK);
900 ival >>= SHIFT;
901 }
902 }
903 return (PyObject *)v;
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000904}
905
Martin v. Löwis18e16552006-02-15 17:27:45 +0000906/* Create a new long int object from a C Py_ssize_t. */
907
908PyObject *
909_PyLong_FromSsize_t(Py_ssize_t ival)
910{
911 Py_ssize_t bytes = ival;
912 int one = 1;
913 return _PyLong_FromByteArray(
914 (unsigned char *)&bytes,
915 SIZEOF_SIZE_T, IS_LITTLE_ENDIAN, 0);
916}
917
918/* Create a new long int object from a C size_t. */
919
920PyObject *
921_PyLong_FromSize_t(size_t ival)
922{
923 size_t bytes = ival;
924 int one = 1;
925 return _PyLong_FromByteArray(
926 (unsigned char *)&bytes,
927 SIZEOF_SIZE_T, IS_LITTLE_ENDIAN, 0);
928}
929
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000930/* Get a C PY_LONG_LONG int from a long int object.
Tim Petersd1a7da62001-06-13 00:35:57 +0000931 Return -1 and set an error if overflow occurs. */
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000932
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000933PY_LONG_LONG
Tim Peters9f688bf2000-07-07 15:53:28 +0000934PyLong_AsLongLong(PyObject *vv)
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000935{
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000936 PY_LONG_LONG bytes;
Tim Petersd1a7da62001-06-13 00:35:57 +0000937 int one = 1;
938 int res;
939
Tim Petersd38b1c72001-09-30 05:09:37 +0000940 if (vv == NULL) {
941 PyErr_BadInternalCall();
942 return -1;
943 }
944 if (!PyLong_Check(vv)) {
Martin v. Löwis6ce7ed22005-03-03 12:26:35 +0000945 PyNumberMethods *nb;
946 PyObject *io;
Tim Petersd38b1c72001-09-30 05:09:37 +0000947 if (PyInt_Check(vv))
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000948 return (PY_LONG_LONG)PyInt_AsLong(vv);
Martin v. Löwis6ce7ed22005-03-03 12:26:35 +0000949 if ((nb = vv->ob_type->tp_as_number) == NULL ||
950 nb->nb_int == NULL) {
951 PyErr_SetString(PyExc_TypeError, "an integer is required");
952 return -1;
953 }
954 io = (*nb->nb_int) (vv);
955 if (io == NULL)
956 return -1;
957 if (PyInt_Check(io)) {
958 bytes = PyInt_AsLong(io);
959 Py_DECREF(io);
960 return bytes;
961 }
962 if (PyLong_Check(io)) {
963 bytes = PyLong_AsLongLong(io);
964 Py_DECREF(io);
965 return bytes;
966 }
967 Py_DECREF(io);
968 PyErr_SetString(PyExc_TypeError, "integer conversion failed");
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000969 return -1;
970 }
971
Tim Petersd1a7da62001-06-13 00:35:57 +0000972 res = _PyLong_AsByteArray(
973 (PyLongObject *)vv, (unsigned char *)&bytes,
974 SIZEOF_LONG_LONG, IS_LITTLE_ENDIAN, 1);
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000975
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000976 /* Plan 9 can't handle PY_LONG_LONG in ? : expressions */
Martin v. Löwisc8bb9eb2002-03-09 12:02:59 +0000977 if (res < 0)
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000978 return (PY_LONG_LONG)-1;
Martin v. Löwisc8bb9eb2002-03-09 12:02:59 +0000979 else
980 return bytes;
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000981}
982
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000983/* Get a C unsigned PY_LONG_LONG int from a long int object.
Tim Petersd1a7da62001-06-13 00:35:57 +0000984 Return -1 and set an error if overflow occurs. */
985
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000986unsigned PY_LONG_LONG
Tim Peters9f688bf2000-07-07 15:53:28 +0000987PyLong_AsUnsignedLongLong(PyObject *vv)
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000988{
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000989 unsigned PY_LONG_LONG bytes;
Tim Petersd1a7da62001-06-13 00:35:57 +0000990 int one = 1;
991 int res;
992
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000993 if (vv == NULL || !PyLong_Check(vv)) {
994 PyErr_BadInternalCall();
Skip Montanaro429433b2006-04-18 00:35:43 +0000995 return (unsigned PY_LONG_LONG)-1;
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000996 }
997
Tim Petersd1a7da62001-06-13 00:35:57 +0000998 res = _PyLong_AsByteArray(
999 (PyLongObject *)vv, (unsigned char *)&bytes,
1000 SIZEOF_LONG_LONG, IS_LITTLE_ENDIAN, 0);
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001001
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001002 /* Plan 9 can't handle PY_LONG_LONG in ? : expressions */
Martin v. Löwisc8bb9eb2002-03-09 12:02:59 +00001003 if (res < 0)
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001004 return (unsigned PY_LONG_LONG)res;
Martin v. Löwisc8bb9eb2002-03-09 12:02:59 +00001005 else
1006 return bytes;
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001007}
Tim Petersd1a7da62001-06-13 00:35:57 +00001008
Thomas Hellera4ea6032003-04-17 18:55:45 +00001009/* Get a C unsigned long int from a long int object, ignoring the high bits.
1010 Returns -1 and sets an error condition if an error occurs. */
1011
1012unsigned PY_LONG_LONG
1013PyLong_AsUnsignedLongLongMask(PyObject *vv)
1014{
1015 register PyLongObject *v;
1016 unsigned PY_LONG_LONG x;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001017 Py_ssize_t i;
1018 int sign;
Thomas Hellera4ea6032003-04-17 18:55:45 +00001019
1020 if (vv == NULL || !PyLong_Check(vv)) {
1021 PyErr_BadInternalCall();
1022 return (unsigned long) -1;
1023 }
1024 v = (PyLongObject *)vv;
1025 i = v->ob_size;
1026 sign = 1;
1027 x = 0;
1028 if (i < 0) {
1029 sign = -1;
1030 i = -i;
1031 }
1032 while (--i >= 0) {
1033 x = (x << SHIFT) + v->ob_digit[i];
1034 }
1035 return x * sign;
1036}
Tim Petersd1a7da62001-06-13 00:35:57 +00001037#undef IS_LITTLE_ENDIAN
1038
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001039#endif /* HAVE_LONG_LONG */
1040
Neil Schemenauerba872e22001-01-04 01:46:03 +00001041
1042static int
1043convert_binop(PyObject *v, PyObject *w, PyLongObject **a, PyLongObject **b) {
Tim Peters5af4e6c2002-08-12 02:31:19 +00001044 if (PyLong_Check(v)) {
Neil Schemenauerba872e22001-01-04 01:46:03 +00001045 *a = (PyLongObject *) v;
1046 Py_INCREF(v);
1047 }
1048 else if (PyInt_Check(v)) {
1049 *a = (PyLongObject *) PyLong_FromLong(PyInt_AS_LONG(v));
1050 }
1051 else {
1052 return 0;
1053 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00001054 if (PyLong_Check(w)) {
Neil Schemenauerba872e22001-01-04 01:46:03 +00001055 *b = (PyLongObject *) w;
1056 Py_INCREF(w);
1057 }
1058 else if (PyInt_Check(w)) {
1059 *b = (PyLongObject *) PyLong_FromLong(PyInt_AS_LONG(w));
1060 }
1061 else {
1062 Py_DECREF(*a);
1063 return 0;
1064 }
1065 return 1;
1066}
1067
1068#define CONVERT_BINOP(v, w, a, b) \
1069 if (!convert_binop(v, w, a, b)) { \
1070 Py_INCREF(Py_NotImplemented); \
1071 return Py_NotImplemented; \
1072 }
1073
Tim Peters877a2122002-08-12 05:09:36 +00001074/* x[0:m] and y[0:n] are digit vectors, LSD first, m >= n required. x[0:n]
1075 * is modified in place, by adding y to it. Carries are propagated as far as
1076 * x[m-1], and the remaining carry (0 or 1) is returned.
1077 */
1078static digit
Martin v. Löwis18e16552006-02-15 17:27:45 +00001079v_iadd(digit *x, Py_ssize_t m, digit *y, Py_ssize_t n)
Tim Peters877a2122002-08-12 05:09:36 +00001080{
1081 int i;
1082 digit carry = 0;
1083
1084 assert(m >= n);
1085 for (i = 0; i < n; ++i) {
1086 carry += x[i] + y[i];
1087 x[i] = carry & MASK;
1088 carry >>= SHIFT;
1089 assert((carry & 1) == carry);
1090 }
1091 for (; carry && i < m; ++i) {
1092 carry += x[i];
1093 x[i] = carry & MASK;
1094 carry >>= SHIFT;
1095 assert((carry & 1) == carry);
1096 }
1097 return carry;
1098}
1099
1100/* x[0:m] and y[0:n] are digit vectors, LSD first, m >= n required. x[0:n]
1101 * is modified in place, by subtracting y from it. Borrows are propagated as
1102 * far as x[m-1], and the remaining borrow (0 or 1) is returned.
1103 */
1104static digit
Martin v. Löwis18e16552006-02-15 17:27:45 +00001105v_isub(digit *x, Py_ssize_t m, digit *y, Py_ssize_t n)
Tim Peters877a2122002-08-12 05:09:36 +00001106{
1107 int i;
1108 digit borrow = 0;
1109
1110 assert(m >= n);
1111 for (i = 0; i < n; ++i) {
1112 borrow = x[i] - y[i] - borrow;
1113 x[i] = borrow & MASK;
1114 borrow >>= SHIFT;
1115 borrow &= 1; /* keep only 1 sign bit */
1116 }
1117 for (; borrow && i < m; ++i) {
1118 borrow = x[i] - borrow;
1119 x[i] = borrow & MASK;
1120 borrow >>= SHIFT;
1121 borrow &= 1;
1122 }
1123 return borrow;
1124}
Neil Schemenauerba872e22001-01-04 01:46:03 +00001125
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001126/* Multiply by a single digit, ignoring the sign. */
1127
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001128static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00001129mul1(PyLongObject *a, wdigit n)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001130{
1131 return muladd1(a, n, (digit)0);
1132}
1133
1134/* Multiply by a single digit and add a single digit, ignoring the sign. */
1135
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001136static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00001137muladd1(PyLongObject *a, wdigit n, wdigit extra)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001138{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001139 Py_ssize_t size_a = ABS(a->ob_size);
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001140 PyLongObject *z = _PyLong_New(size_a+1);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001141 twodigits carry = extra;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001142 Py_ssize_t i;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001143
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001144 if (z == NULL)
1145 return NULL;
1146 for (i = 0; i < size_a; ++i) {
1147 carry += (twodigits)a->ob_digit[i] * n;
Guido van Rossum2095d241997-04-09 19:41:24 +00001148 z->ob_digit[i] = (digit) (carry & MASK);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001149 carry >>= SHIFT;
1150 }
Guido van Rossum2095d241997-04-09 19:41:24 +00001151 z->ob_digit[i] = (digit) carry;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001152 return long_normalize(z);
1153}
1154
Tim Peters212e6142001-07-14 12:23:19 +00001155/* Divide long pin, w/ size digits, by non-zero digit n, storing quotient
1156 in pout, and returning the remainder. pin and pout point at the LSD.
1157 It's OK for pin == pout on entry, which saves oodles of mallocs/frees in
1158 long_format, but that should be done with great care since longs are
1159 immutable. */
1160
1161static digit
Martin v. Löwis18e16552006-02-15 17:27:45 +00001162inplace_divrem1(digit *pout, digit *pin, Py_ssize_t size, digit n)
Tim Peters212e6142001-07-14 12:23:19 +00001163{
1164 twodigits rem = 0;
1165
1166 assert(n > 0 && n <= MASK);
1167 pin += size;
1168 pout += size;
1169 while (--size >= 0) {
1170 digit hi;
1171 rem = (rem << SHIFT) + *--pin;
1172 *--pout = hi = (digit)(rem / n);
1173 rem -= hi * n;
1174 }
1175 return (digit)rem;
1176}
1177
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001178/* Divide a long integer by a digit, returning both the quotient
1179 (as function result) and the remainder (through *prem).
1180 The sign of a is ignored; n should not be zero. */
1181
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001182static PyLongObject *
Tim Peters212e6142001-07-14 12:23:19 +00001183divrem1(PyLongObject *a, digit n, digit *prem)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001184{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001185 const Py_ssize_t size = ABS(a->ob_size);
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001186 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001187
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001188 assert(n > 0 && n <= MASK);
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001189 z = _PyLong_New(size);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001190 if (z == NULL)
1191 return NULL;
Tim Peters212e6142001-07-14 12:23:19 +00001192 *prem = inplace_divrem1(z->ob_digit, a->ob_digit, size, n);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001193 return long_normalize(z);
1194}
1195
1196/* Convert a long int object to a string, using a given conversion base.
Guido van Rossum3d3037d1991-10-24 14:55:57 +00001197 Return a string object.
Fred Drake121ee271999-12-23 15:41:28 +00001198 If base is 8 or 16, add the proper prefix '0' or '0x'. */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001199
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001200static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00001201long_format(PyObject *aa, int base, int addL)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001202{
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001203 register PyLongObject *a = (PyLongObject *)aa;
1204 PyStringObject *str;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001205 Py_ssize_t i;
Neal Norwitzc09efa82006-07-23 07:53:14 +00001206 Py_ssize_t size_a;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001207 char *p;
1208 int bits;
1209 char sign = '\0';
Guido van Rossume32e0141992-01-19 16:31:05 +00001210
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001211 if (a == NULL || !PyLong_Check(a)) {
1212 PyErr_BadInternalCall();
Guido van Rossume32e0141992-01-19 16:31:05 +00001213 return NULL;
1214 }
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001215 assert(base >= 2 && base <= 36);
Neal Norwitzc09efa82006-07-23 07:53:14 +00001216 size_a = ABS(a->ob_size);
Tim Peters5af4e6c2002-08-12 02:31:19 +00001217
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001218 /* Compute a rough upper bound for the length of the string */
1219 i = base;
1220 bits = 0;
1221 while (i > 1) {
1222 ++bits;
1223 i >>= 1;
1224 }
Fred Drake121ee271999-12-23 15:41:28 +00001225 i = 5 + (addL ? 1 : 0) + (size_a*SHIFT + bits-1) / bits;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001226 str = (PyStringObject *) PyString_FromStringAndSize((char *)0, i);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001227 if (str == NULL)
1228 return NULL;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001229 p = PyString_AS_STRING(str) + i;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001230 *p = '\0';
Fred Drake121ee271999-12-23 15:41:28 +00001231 if (addL)
1232 *--p = 'L';
Guido van Rossum4c260ff1992-01-14 18:36:43 +00001233 if (a->ob_size < 0)
1234 sign = '-';
Tim Peters5af4e6c2002-08-12 02:31:19 +00001235
Guido van Rossumbd3a5271998-08-11 15:04:47 +00001236 if (a->ob_size == 0) {
1237 *--p = '0';
1238 }
1239 else if ((base & (base - 1)) == 0) {
1240 /* JRH: special case for power-of-2 bases */
Tim Peters586b2e32001-07-15 09:11:14 +00001241 twodigits accum = 0;
1242 int accumbits = 0; /* # of bits in accum */
1243 int basebits = 1; /* # of bits in base-1 */
Guido van Rossumbd3a5271998-08-11 15:04:47 +00001244 i = base;
Tim Peters7d3a5112000-07-08 04:17:21 +00001245 while ((i >>= 1) > 1)
1246 ++basebits;
Tim Peters586b2e32001-07-15 09:11:14 +00001247
1248 for (i = 0; i < size_a; ++i) {
Tim Peters0d2d87d2002-08-20 19:00:22 +00001249 accum |= (twodigits)a->ob_digit[i] << accumbits;
Tim Peters586b2e32001-07-15 09:11:14 +00001250 accumbits += SHIFT;
1251 assert(accumbits >= basebits);
1252 do {
Martin v. Löwisa5854c22002-02-16 23:39:10 +00001253 char cdigit = (char)(accum & (base - 1));
Raymond Hettinger3296e692005-06-29 23:29:56 +00001254 cdigit += (cdigit < 10) ? '0' : 'a'-10;
Guido van Rossumbd3a5271998-08-11 15:04:47 +00001255 assert(p > PyString_AS_STRING(str));
Martin v. Löwisa5854c22002-02-16 23:39:10 +00001256 *--p = cdigit;
Tim Peters586b2e32001-07-15 09:11:14 +00001257 accumbits -= basebits;
1258 accum >>= basebits;
1259 } while (i < size_a-1 ? accumbits >= basebits :
1260 accum > 0);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001261 }
Guido van Rossumbd3a5271998-08-11 15:04:47 +00001262 }
1263 else {
Tim Petersfad225f2001-07-13 02:59:26 +00001264 /* Not 0, and base not a power of 2. Divide repeatedly by
1265 base, but for speed use the highest power of base that
1266 fits in a digit. */
Martin v. Löwis18e16552006-02-15 17:27:45 +00001267 Py_ssize_t size = size_a;
Tim Peters212e6142001-07-14 12:23:19 +00001268 digit *pin = a->ob_digit;
1269 PyLongObject *scratch;
1270 /* powbasw <- largest power of base that fits in a digit. */
Tim Petersfad225f2001-07-13 02:59:26 +00001271 digit powbase = base; /* powbase == base ** power */
1272 int power = 1;
1273 for (;;) {
1274 unsigned long newpow = powbase * (unsigned long)base;
1275 if (newpow >> SHIFT) /* doesn't fit in a digit */
1276 break;
1277 powbase = (digit)newpow;
1278 ++power;
1279 }
Tim Peters212e6142001-07-14 12:23:19 +00001280
1281 /* Get a scratch area for repeated division. */
1282 scratch = _PyLong_New(size);
1283 if (scratch == NULL) {
1284 Py_DECREF(str);
1285 return NULL;
1286 }
1287
1288 /* Repeatedly divide by powbase. */
Guido van Rossumbd3a5271998-08-11 15:04:47 +00001289 do {
Tim Petersfad225f2001-07-13 02:59:26 +00001290 int ntostore = power;
Tim Peters212e6142001-07-14 12:23:19 +00001291 digit rem = inplace_divrem1(scratch->ob_digit,
1292 pin, size, powbase);
1293 pin = scratch->ob_digit; /* no need to use a again */
1294 if (pin[size - 1] == 0)
1295 --size;
Guido van Rossumbd3a5271998-08-11 15:04:47 +00001296 SIGCHECK({
Tim Peters212e6142001-07-14 12:23:19 +00001297 Py_DECREF(scratch);
Guido van Rossumbd3a5271998-08-11 15:04:47 +00001298 Py_DECREF(str);
1299 return NULL;
1300 })
Tim Peters212e6142001-07-14 12:23:19 +00001301
1302 /* Break rem into digits. */
Tim Petersc8a6b9b2001-07-14 11:01:28 +00001303 assert(ntostore > 0);
1304 do {
Tim Petersfad225f2001-07-13 02:59:26 +00001305 digit nextrem = (digit)(rem / base);
1306 char c = (char)(rem - nextrem * base);
1307 assert(p > PyString_AS_STRING(str));
Raymond Hettinger3296e692005-06-29 23:29:56 +00001308 c += (c < 10) ? '0' : 'a'-10;
Tim Petersfad225f2001-07-13 02:59:26 +00001309 *--p = c;
1310 rem = nextrem;
Tim Petersc8a6b9b2001-07-14 11:01:28 +00001311 --ntostore;
1312 /* Termination is a bit delicate: must not
1313 store leading zeroes, so must get out if
Tim Peters212e6142001-07-14 12:23:19 +00001314 remaining quotient and rem are both 0. */
1315 } while (ntostore && (size || rem));
1316 } while (size != 0);
1317 Py_DECREF(scratch);
Guido van Rossumbd3a5271998-08-11 15:04:47 +00001318 }
1319
Guido van Rossum2c475421992-08-14 15:13:07 +00001320 if (base == 8) {
1321 if (size_a != 0)
1322 *--p = '0';
1323 }
Guido van Rossum3d3037d1991-10-24 14:55:57 +00001324 else if (base == 16) {
1325 *--p = 'x';
1326 *--p = '0';
1327 }
Guido van Rossumc6913e71991-11-19 20:26:46 +00001328 else if (base != 10) {
1329 *--p = '#';
1330 *--p = '0' + base%10;
1331 if (base > 10)
1332 *--p = '0' + base/10;
1333 }
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001334 if (sign)
1335 *--p = sign;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001336 if (p != PyString_AS_STRING(str)) {
1337 char *q = PyString_AS_STRING(str);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001338 assert(p > q);
1339 do {
1340 } while ((*q++ = *p++) != '\0');
Guido van Rossumc7ec9c91991-05-28 21:58:16 +00001341 q--;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001342 _PyString_Resize((PyObject **)&str,
1343 (int) (q - PyString_AS_STRING(str)));
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001344 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001345 return (PyObject *)str;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001346}
1347
Tim Petersda53afa2006-05-25 17:34:03 +00001348/* Table of digit values for 8-bit string -> integer conversion.
1349 * '0' maps to 0, ..., '9' maps to 9.
1350 * 'a' and 'A' map to 10, ..., 'z' and 'Z' map to 35.
1351 * All other indices map to 37.
1352 * Note that when converting a base B string, a char c is a legitimate
1353 * base B digit iff _PyLong_DigitValue[Py_CHARMASK(c)] < B.
1354 */
1355int _PyLong_DigitValue[256] = {
Tim Peters696cf432006-05-24 21:10:40 +00001356 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1357 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1358 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1359 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 37, 37, 37, 37, 37, 37,
1360 37, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1361 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 37, 37, 37, 37, 37,
1362 37, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1363 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 37, 37, 37, 37, 37,
1364 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1365 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1366 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1367 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1368 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1369 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1370 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1371 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
Tim Peters696cf432006-05-24 21:10:40 +00001372};
1373
1374/* *str points to the first digit in a string of base `base` digits. base
Tim Petersbf2674b2003-02-02 07:51:32 +00001375 * is a power of 2 (2, 4, 8, 16, or 32). *str is set to point to the first
1376 * non-digit (which may be *str!). A normalized long is returned.
1377 * The point to this routine is that it takes time linear in the number of
1378 * string characters.
1379 */
1380static PyLongObject *
1381long_from_binary_base(char **str, int base)
1382{
1383 char *p = *str;
1384 char *start = p;
1385 int bits_per_char;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001386 Py_ssize_t n;
Tim Petersbf2674b2003-02-02 07:51:32 +00001387 PyLongObject *z;
1388 twodigits accum;
1389 int bits_in_accum;
1390 digit *pdigit;
1391
1392 assert(base >= 2 && base <= 32 && (base & (base - 1)) == 0);
1393 n = base;
1394 for (bits_per_char = -1; n; ++bits_per_char)
1395 n >>= 1;
1396 /* n <- total # of bits needed, while setting p to end-of-string */
1397 n = 0;
Tim Petersda53afa2006-05-25 17:34:03 +00001398 while (_PyLong_DigitValue[Py_CHARMASK(*p)] < base)
Tim Petersbf2674b2003-02-02 07:51:32 +00001399 ++p;
Tim Petersbf2674b2003-02-02 07:51:32 +00001400 *str = p;
Tim Peters1a3b19a2003-02-02 17:33:53 +00001401 n = (p - start) * bits_per_char;
1402 if (n / bits_per_char != p - start) {
1403 PyErr_SetString(PyExc_ValueError,
1404 "long string too large to convert");
1405 return NULL;
1406 }
Tim Petersbf2674b2003-02-02 07:51:32 +00001407 /* n <- # of Python digits needed, = ceiling(n/SHIFT). */
1408 n = (n + SHIFT - 1) / SHIFT;
1409 z = _PyLong_New(n);
1410 if (z == NULL)
1411 return NULL;
1412 /* Read string from right, and fill in long from left; i.e.,
1413 * from least to most significant in both.
1414 */
1415 accum = 0;
1416 bits_in_accum = 0;
1417 pdigit = z->ob_digit;
1418 while (--p >= start) {
Tim Petersda53afa2006-05-25 17:34:03 +00001419 int k = _PyLong_DigitValue[Py_CHARMASK(*p)];
Tim Petersc7bc0b92003-05-05 20:39:43 +00001420 assert(k >= 0 && k < base);
1421 accum |= (twodigits)(k << bits_in_accum);
Tim Petersbf2674b2003-02-02 07:51:32 +00001422 bits_in_accum += bits_per_char;
1423 if (bits_in_accum >= SHIFT) {
1424 *pdigit++ = (digit)(accum & MASK);
Martin v. Löwis18e16552006-02-15 17:27:45 +00001425 assert(pdigit - z->ob_digit <= (int)n);
Tim Petersbf2674b2003-02-02 07:51:32 +00001426 accum >>= SHIFT;
1427 bits_in_accum -= SHIFT;
1428 assert(bits_in_accum < SHIFT);
1429 }
1430 }
1431 if (bits_in_accum) {
1432 assert(bits_in_accum <= SHIFT);
1433 *pdigit++ = (digit)accum;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001434 assert(pdigit - z->ob_digit <= (int)n);
Tim Petersbf2674b2003-02-02 07:51:32 +00001435 }
1436 while (pdigit - z->ob_digit < n)
1437 *pdigit++ = 0;
1438 return long_normalize(z);
1439}
1440
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001441PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00001442PyLong_FromString(char *str, char **pend, int base)
Guido van Rossumeb1fafc1994-08-29 12:47:19 +00001443{
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001444 int sign = 1;
Guido van Rossum9e896b32000-04-05 20:11:21 +00001445 char *start, *orig_str = str;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001446 PyLongObject *z;
Thomas Wouters9cb28bea2006-04-11 23:50:33 +00001447 PyObject *strobj, *strrepr;
1448 Py_ssize_t slen;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001449
Guido van Rossum472c04f1996-12-05 21:57:21 +00001450 if ((base != 0 && base < 2) || base > 36) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001451 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +00001452 "long() arg 2 must be >= 2 and <= 36");
Guido van Rossumeb1fafc1994-08-29 12:47:19 +00001453 return NULL;
1454 }
Guido van Rossum9fa2c111995-02-10 17:00:37 +00001455 while (*str != '\0' && isspace(Py_CHARMASK(*str)))
Guido van Rossumeb1fafc1994-08-29 12:47:19 +00001456 str++;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001457 if (*str == '+')
1458 ++str;
1459 else if (*str == '-') {
1460 ++str;
1461 sign = -1;
1462 }
Guido van Rossum9fa2c111995-02-10 17:00:37 +00001463 while (*str != '\0' && isspace(Py_CHARMASK(*str)))
Guido van Rossumeb1fafc1994-08-29 12:47:19 +00001464 str++;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001465 if (base == 0) {
1466 if (str[0] != '0')
1467 base = 10;
1468 else if (str[1] == 'x' || str[1] == 'X')
1469 base = 16;
1470 else
1471 base = 8;
1472 }
1473 if (base == 16 && str[0] == '0' && (str[1] == 'x' || str[1] == 'X'))
1474 str += 2;
Tim Peters696cf432006-05-24 21:10:40 +00001475
Guido van Rossume6762971998-06-22 03:54:46 +00001476 start = str;
Tim Petersbf2674b2003-02-02 07:51:32 +00001477 if ((base & (base - 1)) == 0)
1478 z = long_from_binary_base(&str, base);
1479 else {
Tim Peters696cf432006-05-24 21:10:40 +00001480/***
1481Binary bases can be converted in time linear in the number of digits, because
1482Python's representation base is binary. Other bases (including decimal!) use
1483the simple quadratic-time algorithm below, complicated by some speed tricks.
Tim Peters5af4e6c2002-08-12 02:31:19 +00001484
Tim Peters696cf432006-05-24 21:10:40 +00001485First some math: the largest integer that can be expressed in N base-B digits
1486is B**N-1. Consequently, if we have an N-digit input in base B, the worst-
1487case number of Python digits needed to hold it is the smallest integer n s.t.
1488
1489 BASE**n-1 >= B**N-1 [or, adding 1 to both sides]
1490 BASE**n >= B**N [taking logs to base BASE]
1491 n >= log(B**N)/log(BASE) = N * log(B)/log(BASE)
1492
1493The static array log_base_BASE[base] == log(base)/log(BASE) so we can compute
1494this quickly. A Python long with that much space is reserved near the start,
1495and the result is computed into it.
1496
1497The input string is actually treated as being in base base**i (i.e., i digits
1498are processed at a time), where two more static arrays hold:
1499
1500 convwidth_base[base] = the largest integer i such that base**i <= BASE
1501 convmultmax_base[base] = base ** convwidth_base[base]
1502
1503The first of these is the largest i such that i consecutive input digits
1504must fit in a single Python digit. The second is effectively the input
1505base we're really using.
1506
1507Viewing the input as a sequence <c0, c1, ..., c_n-1> of digits in base
1508convmultmax_base[base], the result is "simply"
1509
1510 (((c0*B + c1)*B + c2)*B + c3)*B + ... ))) + c_n-1
1511
1512where B = convmultmax_base[base].
Tim Peters9faa3ed2006-05-30 15:53:34 +00001513
1514Error analysis: as above, the number of Python digits `n` needed is worst-
1515case
1516
1517 n >= N * log(B)/log(BASE)
1518
1519where `N` is the number of input digits in base `B`. This is computed via
1520
1521 size_z = (Py_ssize_t)((scan - str) * log_base_BASE[base]) + 1;
1522
1523below. Two numeric concerns are how much space this can waste, and whether
1524the computed result can be too small. To be concrete, assume BASE = 2**15,
1525which is the default (and it's unlikely anyone changes that).
1526
1527Waste isn't a problem: provided the first input digit isn't 0, the difference
1528between the worst-case input with N digits and the smallest input with N
1529digits is about a factor of B, but B is small compared to BASE so at most
1530one allocated Python digit can remain unused on that count. If
1531N*log(B)/log(BASE) is mathematically an exact integer, then truncating that
1532and adding 1 returns a result 1 larger than necessary. However, that can't
1533happen: whenever B is a power of 2, long_from_binary_base() is called
1534instead, and it's impossible for B**i to be an integer power of 2**15 when
1535B is not a power of 2 (i.e., it's impossible for N*log(B)/log(BASE) to be
1536an exact integer when B is not a power of 2, since B**i has a prime factor
1537other than 2 in that case, but (2**15)**j's only prime factor is 2).
1538
1539The computed result can be too small if the true value of N*log(B)/log(BASE)
1540is a little bit larger than an exact integer, but due to roundoff errors (in
1541computing log(B), log(BASE), their quotient, and/or multiplying that by N)
1542yields a numeric result a little less than that integer. Unfortunately, "how
1543close can a transcendental function get to an integer over some range?"
1544questions are generally theoretically intractable. Computer analysis via
1545continued fractions is practical: expand log(B)/log(BASE) via continued
1546fractions, giving a sequence i/j of "the best" rational approximations. Then
1547j*log(B)/log(BASE) is approximately equal to (the integer) i. This shows that
1548we can get very close to being in trouble, but very rarely. For example,
154976573 is a denominator in one of the continued-fraction approximations to
1550log(10)/log(2**15), and indeed:
1551
1552 >>> log(10)/log(2**15)*76573
1553 16958.000000654003
1554
1555is very close to an integer. If we were working with IEEE single-precision,
1556rounding errors could kill us. Finding worst cases in IEEE double-precision
1557requires better-than-double-precision log() functions, and Tim didn't bother.
1558Instead the code checks to see whether the allocated space is enough as each
1559new Python digit is added, and copies the whole thing to a larger long if not.
1560This should happen extremely rarely, and in fact I don't have a test case
1561that triggers it(!). Instead the code was tested by artificially allocating
1562just 1 digit at the start, so that the copying code was exercised for every
1563digit beyond the first.
Tim Peters696cf432006-05-24 21:10:40 +00001564***/
1565 register twodigits c; /* current input character */
1566 Py_ssize_t size_z;
1567 int i;
1568 int convwidth;
1569 twodigits convmultmax, convmult;
1570 digit *pz, *pzstop;
1571 char* scan;
1572
1573 static double log_base_BASE[37] = {0.0e0,};
1574 static int convwidth_base[37] = {0,};
1575 static twodigits convmultmax_base[37] = {0,};
1576
1577 if (log_base_BASE[base] == 0.0) {
1578 twodigits convmax = base;
1579 int i = 1;
1580
1581 log_base_BASE[base] = log((double)base) /
1582 log((double)BASE);
1583 for (;;) {
1584 twodigits next = convmax * base;
1585 if (next > BASE)
1586 break;
1587 convmax = next;
1588 ++i;
1589 }
1590 convmultmax_base[base] = convmax;
1591 assert(i > 0);
1592 convwidth_base[base] = i;
1593 }
1594
1595 /* Find length of the string of numeric characters. */
1596 scan = str;
Tim Petersda53afa2006-05-25 17:34:03 +00001597 while (_PyLong_DigitValue[Py_CHARMASK(*scan)] < base)
Tim Peters696cf432006-05-24 21:10:40 +00001598 ++scan;
1599
1600 /* Create a long object that can contain the largest possible
1601 * integer with this base and length. Note that there's no
1602 * need to initialize z->ob_digit -- no slot is read up before
1603 * being stored into.
1604 */
1605 size_z = (Py_ssize_t)((scan - str) * log_base_BASE[base]) + 1;
Tim Peters9faa3ed2006-05-30 15:53:34 +00001606 /* Uncomment next line to test exceedingly rare copy code */
1607 /* size_z = 1; */
Tim Peters696cf432006-05-24 21:10:40 +00001608 assert(size_z > 0);
1609 z = _PyLong_New(size_z);
1610 if (z == NULL)
1611 return NULL;
1612 z->ob_size = 0;
1613
1614 /* `convwidth` consecutive input digits are treated as a single
1615 * digit in base `convmultmax`.
1616 */
1617 convwidth = convwidth_base[base];
1618 convmultmax = convmultmax_base[base];
1619
1620 /* Work ;-) */
1621 while (str < scan) {
1622 /* grab up to convwidth digits from the input string */
Tim Petersda53afa2006-05-25 17:34:03 +00001623 c = (digit)_PyLong_DigitValue[Py_CHARMASK(*str++)];
Tim Peters696cf432006-05-24 21:10:40 +00001624 for (i = 1; i < convwidth && str != scan; ++i, ++str) {
1625 c = (twodigits)(c * base +
Tim Petersda53afa2006-05-25 17:34:03 +00001626 _PyLong_DigitValue[Py_CHARMASK(*str)]);
Tim Peters696cf432006-05-24 21:10:40 +00001627 assert(c < BASE);
1628 }
1629
1630 convmult = convmultmax;
1631 /* Calculate the shift only if we couldn't get
1632 * convwidth digits.
1633 */
1634 if (i != convwidth) {
1635 convmult = base;
1636 for ( ; i > 1; --i)
1637 convmult *= base;
1638 }
1639
1640 /* Multiply z by convmult, and add c. */
1641 pz = z->ob_digit;
1642 pzstop = pz + z->ob_size;
1643 for (; pz < pzstop; ++pz) {
1644 c += (twodigits)*pz * convmult;
1645 *pz = (digit)(c & MASK);
1646 c >>= SHIFT;
1647 }
1648 /* carry off the current end? */
1649 if (c) {
1650 assert(c < BASE);
Tim Peters9faa3ed2006-05-30 15:53:34 +00001651 if (z->ob_size < size_z) {
1652 *pz = (digit)c;
1653 ++z->ob_size;
1654 }
1655 else {
1656 PyLongObject *tmp;
1657 /* Extremely rare. Get more space. */
1658 assert(z->ob_size == size_z);
1659 tmp = _PyLong_New(size_z + 1);
1660 if (tmp == NULL) {
1661 Py_DECREF(z);
1662 return NULL;
1663 }
1664 memcpy(tmp->ob_digit,
1665 z->ob_digit,
1666 sizeof(digit) * size_z);
1667 Py_DECREF(z);
1668 z = tmp;
1669 z->ob_digit[size_z] = (digit)c;
1670 ++size_z;
1671 }
Tim Peters696cf432006-05-24 21:10:40 +00001672 }
Tim Petersbf2674b2003-02-02 07:51:32 +00001673 }
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001674 }
Guido van Rossumac6a37a1998-08-04 15:04:06 +00001675 if (z == NULL)
1676 return NULL;
Guido van Rossum9e896b32000-04-05 20:11:21 +00001677 if (str == start)
1678 goto onError;
Tim Peters696cf432006-05-24 21:10:40 +00001679 if (sign < 0)
Guido van Rossum4c260ff1992-01-14 18:36:43 +00001680 z->ob_size = -(z->ob_size);
Guido van Rossum9e896b32000-04-05 20:11:21 +00001681 if (*str == 'L' || *str == 'l')
1682 str++;
1683 while (*str && isspace(Py_CHARMASK(*str)))
1684 str++;
1685 if (*str != '\0')
1686 goto onError;
Guido van Rossumeb1fafc1994-08-29 12:47:19 +00001687 if (pend)
1688 *pend = str;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001689 return (PyObject *) z;
Guido van Rossum9e896b32000-04-05 20:11:21 +00001690
1691 onError:
Guido van Rossum9e896b32000-04-05 20:11:21 +00001692 Py_XDECREF(z);
Thomas Wouters9cb28bea2006-04-11 23:50:33 +00001693 slen = strlen(orig_str) < 200 ? strlen(orig_str) : 200;
1694 strobj = PyString_FromStringAndSize(orig_str, slen);
1695 if (strobj == NULL)
1696 return NULL;
1697 strrepr = PyObject_Repr(strobj);
1698 Py_DECREF(strobj);
1699 if (strrepr == NULL)
1700 return NULL;
1701 PyErr_Format(PyExc_ValueError,
1702 "invalid literal for long() with base %d: %s",
1703 base, PyString_AS_STRING(strrepr));
1704 Py_DECREF(strrepr);
Guido van Rossum9e896b32000-04-05 20:11:21 +00001705 return NULL;
1706}
1707
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001708#ifdef Py_USING_UNICODE
Guido van Rossum9e896b32000-04-05 20:11:21 +00001709PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00001710PyLong_FromUnicode(Py_UNICODE *u, Py_ssize_t length, int base)
Guido van Rossum9e896b32000-04-05 20:11:21 +00001711{
Walter Dörwald07e14762002-11-06 16:15:14 +00001712 PyObject *result;
Anthony Baxter377be112006-04-11 06:54:30 +00001713 char *buffer = (char *)PyMem_MALLOC(length+1);
Guido van Rossum9e896b32000-04-05 20:11:21 +00001714
Walter Dörwald07e14762002-11-06 16:15:14 +00001715 if (buffer == NULL)
1716 return NULL;
1717
1718 if (PyUnicode_EncodeDecimal(u, length, buffer, NULL)) {
1719 PyMem_FREE(buffer);
Guido van Rossum9e896b32000-04-05 20:11:21 +00001720 return NULL;
1721 }
Walter Dörwald07e14762002-11-06 16:15:14 +00001722 result = PyLong_FromString(buffer, NULL, base);
1723 PyMem_FREE(buffer);
1724 return result;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001725}
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001726#endif
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001727
Tim Peters9f688bf2000-07-07 15:53:28 +00001728/* forward */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001729static PyLongObject *x_divrem
Tim Peters9f688bf2000-07-07 15:53:28 +00001730 (PyLongObject *, PyLongObject *, PyLongObject **);
1731static PyObject *long_pos(PyLongObject *);
1732static int long_divrem(PyLongObject *, PyLongObject *,
1733 PyLongObject **, PyLongObject **);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001734
1735/* Long division with remainder, top-level routine */
1736
Guido van Rossume32e0141992-01-19 16:31:05 +00001737static int
Tim Peters9f688bf2000-07-07 15:53:28 +00001738long_divrem(PyLongObject *a, PyLongObject *b,
1739 PyLongObject **pdiv, PyLongObject **prem)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001740{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001741 Py_ssize_t size_a = ABS(a->ob_size), size_b = ABS(b->ob_size);
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001742 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001743
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001744 if (size_b == 0) {
Guido van Rossumbd3a5271998-08-11 15:04:47 +00001745 PyErr_SetString(PyExc_ZeroDivisionError,
Fred Drake661ea262000-10-24 19:57:45 +00001746 "long division or modulo by zero");
Guido van Rossume32e0141992-01-19 16:31:05 +00001747 return -1;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001748 }
1749 if (size_a < size_b ||
Guido van Rossum472c04f1996-12-05 21:57:21 +00001750 (size_a == size_b &&
1751 a->ob_digit[size_a-1] < b->ob_digit[size_b-1])) {
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001752 /* |a| < |b|. */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001753 *pdiv = _PyLong_New(0);
1754 Py_INCREF(a);
1755 *prem = (PyLongObject *) a;
Guido van Rossume32e0141992-01-19 16:31:05 +00001756 return 0;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001757 }
1758 if (size_b == 1) {
1759 digit rem = 0;
1760 z = divrem1(a, b->ob_digit[0], &rem);
Guido van Rossume32e0141992-01-19 16:31:05 +00001761 if (z == NULL)
1762 return -1;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001763 *prem = (PyLongObject *) PyLong_FromLong((long)rem);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001764 }
Guido van Rossume32e0141992-01-19 16:31:05 +00001765 else {
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001766 z = x_divrem(a, b, prem);
Guido van Rossume32e0141992-01-19 16:31:05 +00001767 if (z == NULL)
1768 return -1;
1769 }
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001770 /* Set the signs.
1771 The quotient z has the sign of a*b;
1772 the remainder r has the sign of a,
1773 so a = b*z + r. */
Guido van Rossume32e0141992-01-19 16:31:05 +00001774 if ((a->ob_size < 0) != (b->ob_size < 0))
1775 z->ob_size = -(z->ob_size);
1776 if (a->ob_size < 0 && (*prem)->ob_size != 0)
1777 (*prem)->ob_size = -((*prem)->ob_size);
1778 *pdiv = z;
1779 return 0;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001780}
1781
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00001782/* Unsigned long division with remainder -- the algorithm */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001783
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001784static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00001785x_divrem(PyLongObject *v1, PyLongObject *w1, PyLongObject **prem)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001786{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001787 Py_ssize_t size_v = ABS(v1->ob_size), size_w = ABS(w1->ob_size);
Guido van Rossum2095d241997-04-09 19:41:24 +00001788 digit d = (digit) ((twodigits)BASE / (w1->ob_digit[size_w-1] + 1));
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001789 PyLongObject *v = mul1(v1, d);
1790 PyLongObject *w = mul1(w1, d);
1791 PyLongObject *a;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001792 Py_ssize_t j, k;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001793
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001794 if (v == NULL || w == NULL) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001795 Py_XDECREF(v);
1796 Py_XDECREF(w);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001797 return NULL;
1798 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00001799
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001800 assert(size_v >= size_w && size_w > 1); /* Assert checks by div() */
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00001801 assert(v->ob_refcnt == 1); /* Since v will be used as accumulator! */
Guido van Rossum4c260ff1992-01-14 18:36:43 +00001802 assert(size_w == ABS(w->ob_size)); /* That's how d was calculated */
Tim Peters5af4e6c2002-08-12 02:31:19 +00001803
Guido van Rossum4c260ff1992-01-14 18:36:43 +00001804 size_v = ABS(v->ob_size);
Neal Norwitzc6a989a2006-05-10 06:57:58 +00001805 k = size_v - size_w;
1806 a = _PyLong_New(k + 1);
Tim Peters5af4e6c2002-08-12 02:31:19 +00001807
Neal Norwitzc6a989a2006-05-10 06:57:58 +00001808 for (j = size_v; a != NULL && k >= 0; --j, --k) {
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001809 digit vj = (j >= size_v) ? 0 : v->ob_digit[j];
1810 twodigits q;
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00001811 stwodigits carry = 0;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001812 int i;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001813
Guido van Rossumeb1fafc1994-08-29 12:47:19 +00001814 SIGCHECK({
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001815 Py_DECREF(a);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001816 a = NULL;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001817 break;
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00001818 })
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001819 if (vj == w->ob_digit[size_w-1])
1820 q = MASK;
1821 else
1822 q = (((twodigits)vj << SHIFT) + v->ob_digit[j-1]) /
1823 w->ob_digit[size_w-1];
Tim Peters5af4e6c2002-08-12 02:31:19 +00001824
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001825 while (w->ob_digit[size_w-2]*q >
1826 ((
1827 ((twodigits)vj << SHIFT)
1828 + v->ob_digit[j-1]
1829 - q*w->ob_digit[size_w-1]
1830 ) << SHIFT)
1831 + v->ob_digit[j-2])
1832 --q;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001833
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001834 for (i = 0; i < size_w && i+k < size_v; ++i) {
1835 twodigits z = w->ob_digit[i] * q;
Guido van Rossum2095d241997-04-09 19:41:24 +00001836 digit zz = (digit) (z >> SHIFT);
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001837 carry += v->ob_digit[i+k] - z
1838 + ((twodigits)zz << SHIFT);
Jeremy Hyltonfc61f9a2003-05-01 21:31:53 +00001839 v->ob_digit[i+k] = (digit)(carry & MASK);
Tim Peters7d3a5112000-07-08 04:17:21 +00001840 carry = Py_ARITHMETIC_RIGHT_SHIFT(BASE_TWODIGITS_TYPE,
1841 carry, SHIFT);
1842 carry -= zz;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001843 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00001844
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001845 if (i+k < size_v) {
1846 carry += v->ob_digit[i+k];
1847 v->ob_digit[i+k] = 0;
1848 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00001849
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001850 if (carry == 0)
Guido van Rossum2095d241997-04-09 19:41:24 +00001851 a->ob_digit[k] = (digit) q;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001852 else {
1853 assert(carry == -1);
Guido van Rossum2095d241997-04-09 19:41:24 +00001854 a->ob_digit[k] = (digit) q-1;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001855 carry = 0;
1856 for (i = 0; i < size_w && i+k < size_v; ++i) {
1857 carry += v->ob_digit[i+k] + w->ob_digit[i];
Jeremy Hyltonfc61f9a2003-05-01 21:31:53 +00001858 v->ob_digit[i+k] = (digit)(carry & MASK);
Tim Peters7d3a5112000-07-08 04:17:21 +00001859 carry = Py_ARITHMETIC_RIGHT_SHIFT(
1860 BASE_TWODIGITS_TYPE,
1861 carry, SHIFT);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001862 }
1863 }
1864 } /* for j, k */
Tim Peters5af4e6c2002-08-12 02:31:19 +00001865
Guido van Rossumc206c761995-01-10 15:23:19 +00001866 if (a == NULL)
1867 *prem = NULL;
1868 else {
Guido van Rossumc6913e71991-11-19 20:26:46 +00001869 a = long_normalize(a);
Guido van Rossume32e0141992-01-19 16:31:05 +00001870 *prem = divrem1(v, d, &d);
1871 /* d receives the (unused) remainder */
1872 if (*prem == NULL) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001873 Py_DECREF(a);
Guido van Rossume32e0141992-01-19 16:31:05 +00001874 a = NULL;
Guido van Rossumc6913e71991-11-19 20:26:46 +00001875 }
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001876 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001877 Py_DECREF(v);
1878 Py_DECREF(w);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001879 return a;
1880}
1881
1882/* Methods */
1883
1884static void
Tim Peters9f688bf2000-07-07 15:53:28 +00001885long_dealloc(PyObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001886{
Guido van Rossum9475a232001-10-05 20:51:39 +00001887 v->ob_type->tp_free(v);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001888}
1889
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001890static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00001891long_repr(PyObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001892{
Fred Drake121ee271999-12-23 15:41:28 +00001893 return long_format(v, 10, 1);
1894}
1895
1896static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00001897long_str(PyObject *v)
Fred Drake121ee271999-12-23 15:41:28 +00001898{
1899 return long_format(v, 10, 0);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001900}
1901
1902static int
Tim Peters9f688bf2000-07-07 15:53:28 +00001903long_compare(PyLongObject *a, PyLongObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001904{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001905 Py_ssize_t sign;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001906
Guido van Rossumc6913e71991-11-19 20:26:46 +00001907 if (a->ob_size != b->ob_size) {
Guido van Rossum4c260ff1992-01-14 18:36:43 +00001908 if (ABS(a->ob_size) == 0 && ABS(b->ob_size) == 0)
Guido van Rossumc6913e71991-11-19 20:26:46 +00001909 sign = 0;
1910 else
1911 sign = a->ob_size - b->ob_size;
1912 }
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001913 else {
Martin v. Löwis18e16552006-02-15 17:27:45 +00001914 Py_ssize_t i = ABS(a->ob_size);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001915 while (--i >= 0 && a->ob_digit[i] == b->ob_digit[i])
1916 ;
1917 if (i < 0)
1918 sign = 0;
Guido van Rossum0b0db8e1993-01-21 16:07:51 +00001919 else {
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001920 sign = (int)a->ob_digit[i] - (int)b->ob_digit[i];
Guido van Rossum0b0db8e1993-01-21 16:07:51 +00001921 if (a->ob_size < 0)
1922 sign = -sign;
1923 }
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001924 }
Guido van Rossumc6913e71991-11-19 20:26:46 +00001925 return sign < 0 ? -1 : sign > 0 ? 1 : 0;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001926}
1927
Guido van Rossum9bfef441993-03-29 10:43:31 +00001928static long
Tim Peters9f688bf2000-07-07 15:53:28 +00001929long_hash(PyLongObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001930{
1931 long x;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001932 Py_ssize_t i;
1933 int sign;
Guido van Rossum9bfef441993-03-29 10:43:31 +00001934
1935 /* This is designed so that Python ints and longs with the
1936 same value hash to the same value, otherwise comparisons
1937 of mapping keys will turn out weird */
1938 i = v->ob_size;
1939 sign = 1;
1940 x = 0;
1941 if (i < 0) {
1942 sign = -1;
1943 i = -(i);
1944 }
Neal Norwitzd5a65a72003-02-23 23:11:41 +00001945#define LONG_BIT_SHIFT (8*sizeof(long) - SHIFT)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001946 while (--i >= 0) {
Neal Norwitzd5a65a72003-02-23 23:11:41 +00001947 /* Force a native long #-bits (32 or 64) circular shift */
1948 x = ((x << SHIFT) & ~MASK) | ((x >> LONG_BIT_SHIFT) & MASK);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001949 x += v->ob_digit[i];
1950 }
Neal Norwitzd5a65a72003-02-23 23:11:41 +00001951#undef LONG_BIT_SHIFT
Guido van Rossum9bfef441993-03-29 10:43:31 +00001952 x = x * sign;
1953 if (x == -1)
1954 x = -2;
1955 return x;
1956}
1957
1958
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001959/* Add the absolute values of two long integers. */
1960
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001961static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00001962x_add(PyLongObject *a, PyLongObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001963{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001964 Py_ssize_t size_a = ABS(a->ob_size), size_b = ABS(b->ob_size);
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001965 PyLongObject *z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001966 int i;
1967 digit carry = 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) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001971 { PyLongObject *temp = a; a = b; b = temp; }
Martin v. Löwis18e16552006-02-15 17:27:45 +00001972 { Py_ssize_t size_temp = size_a;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001973 size_a = size_b;
1974 size_b = size_temp; }
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001975 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001976 z = _PyLong_New(size_a+1);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001977 if (z == NULL)
1978 return NULL;
1979 for (i = 0; i < size_b; ++i) {
1980 carry += a->ob_digit[i] + b->ob_digit[i];
1981 z->ob_digit[i] = carry & MASK;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001982 carry >>= SHIFT;
1983 }
1984 for (; i < size_a; ++i) {
1985 carry += a->ob_digit[i];
1986 z->ob_digit[i] = carry & MASK;
1987 carry >>= SHIFT;
1988 }
1989 z->ob_digit[i] = carry;
1990 return long_normalize(z);
1991}
1992
1993/* Subtract the absolute values of two integers. */
1994
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001995static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00001996x_sub(PyLongObject *a, PyLongObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001997{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001998 Py_ssize_t size_a = ABS(a->ob_size), size_b = ABS(b->ob_size);
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001999 PyLongObject *z;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002000 Py_ssize_t i;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002001 int sign = 1;
2002 digit borrow = 0;
Tim Peters69c2de32001-09-11 22:31:33 +00002003
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002004 /* Ensure a is the larger of the two: */
2005 if (size_a < size_b) {
2006 sign = -1;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002007 { PyLongObject *temp = a; a = b; b = temp; }
Martin v. Löwis18e16552006-02-15 17:27:45 +00002008 { Py_ssize_t size_temp = size_a;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002009 size_a = size_b;
2010 size_b = size_temp; }
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002011 }
2012 else if (size_a == size_b) {
2013 /* Find highest digit where a and b differ: */
2014 i = size_a;
2015 while (--i >= 0 && a->ob_digit[i] == b->ob_digit[i])
2016 ;
2017 if (i < 0)
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002018 return _PyLong_New(0);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002019 if (a->ob_digit[i] < b->ob_digit[i]) {
2020 sign = -1;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002021 { PyLongObject *temp = a; a = b; b = temp; }
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002022 }
2023 size_a = size_b = i+1;
2024 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002025 z = _PyLong_New(size_a);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002026 if (z == NULL)
2027 return NULL;
2028 for (i = 0; i < size_b; ++i) {
2029 /* The following assumes unsigned arithmetic
2030 works module 2**N for some N>SHIFT. */
Guido van Rossumeb1fafc1994-08-29 12:47:19 +00002031 borrow = a->ob_digit[i] - b->ob_digit[i] - borrow;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002032 z->ob_digit[i] = borrow & MASK;
2033 borrow >>= SHIFT;
2034 borrow &= 1; /* Keep only one sign bit */
2035 }
2036 for (; i < size_a; ++i) {
2037 borrow = a->ob_digit[i] - borrow;
2038 z->ob_digit[i] = borrow & MASK;
2039 borrow >>= SHIFT;
Tim Peters43f04a32000-07-08 02:26:47 +00002040 borrow &= 1; /* Keep only one sign bit */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002041 }
2042 assert(borrow == 0);
Guido van Rossumc6913e71991-11-19 20:26:46 +00002043 if (sign < 0)
Guido van Rossum4c260ff1992-01-14 18:36:43 +00002044 z->ob_size = -(z->ob_size);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002045 return long_normalize(z);
2046}
2047
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002048static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00002049long_add(PyLongObject *v, PyLongObject *w)
Guido van Rossum4c260ff1992-01-14 18:36:43 +00002050{
Neil Schemenauerba872e22001-01-04 01:46:03 +00002051 PyLongObject *a, *b, *z;
Tim Peters69c2de32001-09-11 22:31:33 +00002052
Neil Schemenauerba872e22001-01-04 01:46:03 +00002053 CONVERT_BINOP((PyObject *)v, (PyObject *)w, &a, &b);
2054
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002055 if (a->ob_size < 0) {
2056 if (b->ob_size < 0) {
2057 z = x_add(a, b);
Guido van Rossumc6913e71991-11-19 20:26:46 +00002058 if (z != NULL && z->ob_size != 0)
Guido van Rossum4c260ff1992-01-14 18:36:43 +00002059 z->ob_size = -(z->ob_size);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002060 }
2061 else
2062 z = x_sub(b, a);
2063 }
2064 else {
2065 if (b->ob_size < 0)
2066 z = x_sub(a, b);
2067 else
2068 z = x_add(a, b);
2069 }
Neil Schemenauerba872e22001-01-04 01:46:03 +00002070 Py_DECREF(a);
2071 Py_DECREF(b);
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002072 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002073}
2074
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002075static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00002076long_sub(PyLongObject *v, PyLongObject *w)
Guido van Rossum4c260ff1992-01-14 18:36:43 +00002077{
Neil Schemenauerba872e22001-01-04 01:46:03 +00002078 PyLongObject *a, *b, *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002079
Neil Schemenauerba872e22001-01-04 01:46:03 +00002080 CONVERT_BINOP((PyObject *)v, (PyObject *)w, &a, &b);
2081
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002082 if (a->ob_size < 0) {
2083 if (b->ob_size < 0)
2084 z = x_sub(a, b);
2085 else
2086 z = x_add(a, b);
Guido van Rossumc6913e71991-11-19 20:26:46 +00002087 if (z != NULL && z->ob_size != 0)
Guido van Rossum4c260ff1992-01-14 18:36:43 +00002088 z->ob_size = -(z->ob_size);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002089 }
2090 else {
2091 if (b->ob_size < 0)
2092 z = x_add(a, b);
2093 else
2094 z = x_sub(a, b);
2095 }
Neil Schemenauerba872e22001-01-04 01:46:03 +00002096 Py_DECREF(a);
2097 Py_DECREF(b);
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002098 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002099}
2100
Tim Peters5af4e6c2002-08-12 02:31:19 +00002101/* Grade school multiplication, ignoring the signs.
2102 * Returns the absolute value of the product, or NULL if error.
2103 */
2104static PyLongObject *
2105x_mul(PyLongObject *a, PyLongObject *b)
Neil Schemenauerba872e22001-01-04 01:46:03 +00002106{
Tim Peters5af4e6c2002-08-12 02:31:19 +00002107 PyLongObject *z;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002108 Py_ssize_t size_a = ABS(a->ob_size);
2109 Py_ssize_t size_b = ABS(b->ob_size);
2110 Py_ssize_t i;
Neil Schemenauerba872e22001-01-04 01:46:03 +00002111
Tim Peters5af4e6c2002-08-12 02:31:19 +00002112 z = _PyLong_New(size_a + size_b);
2113 if (z == NULL)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002114 return NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002115
2116 memset(z->ob_digit, 0, z->ob_size * sizeof(digit));
Tim Peters0973b992004-08-29 22:16:50 +00002117 if (a == b) {
2118 /* Efficient squaring per HAC, Algorithm 14.16:
2119 * http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf
2120 * Gives slightly less than a 2x speedup when a == b,
2121 * via exploiting that each entry in the multiplication
2122 * pyramid appears twice (except for the size_a squares).
2123 */
2124 for (i = 0; i < size_a; ++i) {
2125 twodigits carry;
2126 twodigits f = a->ob_digit[i];
2127 digit *pz = z->ob_digit + (i << 1);
2128 digit *pa = a->ob_digit + i + 1;
2129 digit *paend = a->ob_digit + size_a;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002130
Tim Peters0973b992004-08-29 22:16:50 +00002131 SIGCHECK({
2132 Py_DECREF(z);
2133 return NULL;
2134 })
2135
2136 carry = *pz + f * f;
2137 *pz++ = (digit)(carry & MASK);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002138 carry >>= SHIFT;
Tim Peters0973b992004-08-29 22:16:50 +00002139 assert(carry <= MASK);
2140
2141 /* Now f is added in twice in each column of the
2142 * pyramid it appears. Same as adding f<<1 once.
2143 */
2144 f <<= 1;
2145 while (pa < paend) {
2146 carry += *pz + *pa++ * f;
2147 *pz++ = (digit)(carry & MASK);
2148 carry >>= SHIFT;
2149 assert(carry <= (MASK << 1));
2150 }
2151 if (carry) {
2152 carry += *pz;
2153 *pz++ = (digit)(carry & MASK);
2154 carry >>= SHIFT;
2155 }
2156 if (carry)
2157 *pz += (digit)(carry & MASK);
2158 assert((carry >> SHIFT) == 0);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002159 }
Tim Peters0973b992004-08-29 22:16:50 +00002160 }
2161 else { /* a is not the same as b -- gradeschool long mult */
2162 for (i = 0; i < size_a; ++i) {
2163 twodigits carry = 0;
2164 twodigits f = a->ob_digit[i];
2165 digit *pz = z->ob_digit + i;
2166 digit *pb = b->ob_digit;
2167 digit *pbend = b->ob_digit + size_b;
2168
2169 SIGCHECK({
2170 Py_DECREF(z);
2171 return NULL;
2172 })
2173
2174 while (pb < pbend) {
2175 carry += *pz + *pb++ * f;
2176 *pz++ = (digit)(carry & MASK);
2177 carry >>= SHIFT;
2178 assert(carry <= MASK);
2179 }
2180 if (carry)
2181 *pz += (digit)(carry & MASK);
2182 assert((carry >> SHIFT) == 0);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002183 }
2184 }
Tim Peters44121a62002-08-12 06:17:58 +00002185 return long_normalize(z);
Tim Peters5af4e6c2002-08-12 02:31:19 +00002186}
2187
2188/* A helper for Karatsuba multiplication (k_mul).
2189 Takes a long "n" and an integer "size" representing the place to
2190 split, and sets low and high such that abs(n) == (high << size) + low,
2191 viewing the shift as being by digits. The sign bit is ignored, and
2192 the return values are >= 0.
2193 Returns 0 on success, -1 on failure.
2194*/
2195static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00002196kmul_split(PyLongObject *n, Py_ssize_t size, PyLongObject **high, PyLongObject **low)
Tim Peters5af4e6c2002-08-12 02:31:19 +00002197{
2198 PyLongObject *hi, *lo;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002199 Py_ssize_t size_lo, size_hi;
2200 const Py_ssize_t size_n = ABS(n->ob_size);
Tim Peters5af4e6c2002-08-12 02:31:19 +00002201
2202 size_lo = MIN(size_n, size);
2203 size_hi = size_n - size_lo;
2204
2205 if ((hi = _PyLong_New(size_hi)) == NULL)
2206 return -1;
2207 if ((lo = _PyLong_New(size_lo)) == NULL) {
2208 Py_DECREF(hi);
2209 return -1;
2210 }
2211
2212 memcpy(lo->ob_digit, n->ob_digit, size_lo * sizeof(digit));
2213 memcpy(hi->ob_digit, n->ob_digit + size_lo, size_hi * sizeof(digit));
2214
2215 *high = long_normalize(hi);
2216 *low = long_normalize(lo);
2217 return 0;
2218}
2219
Tim Peters60004642002-08-12 22:01:34 +00002220static PyLongObject *k_lopsided_mul(PyLongObject *a, PyLongObject *b);
2221
Tim Peters5af4e6c2002-08-12 02:31:19 +00002222/* Karatsuba multiplication. Ignores the input signs, and returns the
2223 * absolute value of the product (or NULL if error).
2224 * See Knuth Vol. 2 Chapter 4.3.3 (Pp. 294-295).
2225 */
2226static PyLongObject *
2227k_mul(PyLongObject *a, PyLongObject *b)
2228{
Martin v. Löwis18e16552006-02-15 17:27:45 +00002229 Py_ssize_t asize = ABS(a->ob_size);
2230 Py_ssize_t bsize = ABS(b->ob_size);
Tim Peters5af4e6c2002-08-12 02:31:19 +00002231 PyLongObject *ah = NULL;
2232 PyLongObject *al = NULL;
2233 PyLongObject *bh = NULL;
2234 PyLongObject *bl = NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002235 PyLongObject *ret = NULL;
Tim Peters738eda72002-08-12 15:08:20 +00002236 PyLongObject *t1, *t2, *t3;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002237 Py_ssize_t shift; /* the number of digits we split off */
2238 Py_ssize_t i;
Tim Peters738eda72002-08-12 15:08:20 +00002239
Tim Peters5af4e6c2002-08-12 02:31:19 +00002240 /* (ah*X+al)(bh*X+bl) = ah*bh*X*X + (ah*bl + al*bh)*X + al*bl
2241 * Let k = (ah+al)*(bh+bl) = ah*bl + al*bh + ah*bh + al*bl
2242 * Then the original product is
Tim Peters18c15b92002-08-12 02:43:58 +00002243 * ah*bh*X*X + (k - ah*bh - al*bl)*X + al*bl
Tim Peters5af4e6c2002-08-12 02:31:19 +00002244 * By picking X to be a power of 2, "*X" is just shifting, and it's
2245 * been reduced to 3 multiplies on numbers half the size.
2246 */
2247
Tim Petersfc07e562002-08-12 02:54:10 +00002248 /* We want to split based on the larger number; fiddle so that b
Tim Peters5af4e6c2002-08-12 02:31:19 +00002249 * is largest.
2250 */
Tim Peters738eda72002-08-12 15:08:20 +00002251 if (asize > bsize) {
Tim Peters5af4e6c2002-08-12 02:31:19 +00002252 t1 = a;
2253 a = b;
2254 b = t1;
Tim Peters738eda72002-08-12 15:08:20 +00002255
2256 i = asize;
2257 asize = bsize;
2258 bsize = i;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002259 }
2260
2261 /* Use gradeschool math when either number is too small. */
Tim Peters0973b992004-08-29 22:16:50 +00002262 i = a == b ? KARATSUBA_SQUARE_CUTOFF : KARATSUBA_CUTOFF;
2263 if (asize <= i) {
Tim Peters738eda72002-08-12 15:08:20 +00002264 if (asize == 0)
Tim Peters44121a62002-08-12 06:17:58 +00002265 return _PyLong_New(0);
2266 else
2267 return x_mul(a, b);
2268 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002269
Tim Peters60004642002-08-12 22:01:34 +00002270 /* If a is small compared to b, splitting on b gives a degenerate
2271 * case with ah==0, and Karatsuba may be (even much) less efficient
2272 * than "grade school" then. However, we can still win, by viewing
2273 * b as a string of "big digits", each of width a->ob_size. That
2274 * leads to a sequence of balanced calls to k_mul.
2275 */
2276 if (2 * asize <= bsize)
2277 return k_lopsided_mul(a, b);
2278
Tim Petersd6974a52002-08-13 20:37:51 +00002279 /* Split a & b into hi & lo pieces. */
Tim Peters738eda72002-08-12 15:08:20 +00002280 shift = bsize >> 1;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002281 if (kmul_split(a, shift, &ah, &al) < 0) goto fail;
Tim Petersd6974a52002-08-13 20:37:51 +00002282 assert(ah->ob_size > 0); /* the split isn't degenerate */
2283
Tim Peters0973b992004-08-29 22:16:50 +00002284 if (a == b) {
2285 bh = ah;
2286 bl = al;
2287 Py_INCREF(bh);
2288 Py_INCREF(bl);
2289 }
2290 else if (kmul_split(b, shift, &bh, &bl) < 0) goto fail;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002291
Tim Petersd64c1de2002-08-12 17:36:03 +00002292 /* The plan:
2293 * 1. Allocate result space (asize + bsize digits: that's always
2294 * enough).
2295 * 2. Compute ah*bh, and copy into result at 2*shift.
2296 * 3. Compute al*bl, and copy into result at 0. Note that this
2297 * can't overlap with #2.
2298 * 4. Subtract al*bl from the result, starting at shift. This may
2299 * underflow (borrow out of the high digit), but we don't care:
2300 * we're effectively doing unsigned arithmetic mod
2301 * BASE**(sizea + sizeb), and so long as the *final* result fits,
2302 * borrows and carries out of the high digit can be ignored.
2303 * 5. Subtract ah*bh from the result, starting at shift.
2304 * 6. Compute (ah+al)*(bh+bl), and add it into the result starting
2305 * at shift.
2306 */
2307
2308 /* 1. Allocate result space. */
Tim Peters70b041b2002-08-12 19:38:01 +00002309 ret = _PyLong_New(asize + bsize);
Tim Peters5af4e6c2002-08-12 02:31:19 +00002310 if (ret == NULL) goto fail;
2311#ifdef Py_DEBUG
2312 /* Fill with trash, to catch reference to uninitialized digits. */
2313 memset(ret->ob_digit, 0xDF, ret->ob_size * sizeof(digit));
2314#endif
Tim Peters44121a62002-08-12 06:17:58 +00002315
Tim Petersd64c1de2002-08-12 17:36:03 +00002316 /* 2. t1 <- ah*bh, and copy into high digits of result. */
Tim Peters738eda72002-08-12 15:08:20 +00002317 if ((t1 = k_mul(ah, bh)) == NULL) goto fail;
2318 assert(t1->ob_size >= 0);
2319 assert(2*shift + t1->ob_size <= ret->ob_size);
2320 memcpy(ret->ob_digit + 2*shift, t1->ob_digit,
2321 t1->ob_size * sizeof(digit));
2322
2323 /* Zero-out the digits higher than the ah*bh copy. */
2324 i = ret->ob_size - 2*shift - t1->ob_size;
Tim Peters44121a62002-08-12 06:17:58 +00002325 if (i)
Tim Peters738eda72002-08-12 15:08:20 +00002326 memset(ret->ob_digit + 2*shift + t1->ob_size, 0,
Tim Peters44121a62002-08-12 06:17:58 +00002327 i * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00002328
Tim Petersd64c1de2002-08-12 17:36:03 +00002329 /* 3. t2 <- al*bl, and copy into the low digits. */
Tim Peters738eda72002-08-12 15:08:20 +00002330 if ((t2 = k_mul(al, bl)) == NULL) {
2331 Py_DECREF(t1);
2332 goto fail;
2333 }
2334 assert(t2->ob_size >= 0);
2335 assert(t2->ob_size <= 2*shift); /* no overlap with high digits */
2336 memcpy(ret->ob_digit, t2->ob_digit, t2->ob_size * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00002337
2338 /* Zero out remaining digits. */
Tim Peters738eda72002-08-12 15:08:20 +00002339 i = 2*shift - t2->ob_size; /* number of uninitialized digits */
Tim Peters5af4e6c2002-08-12 02:31:19 +00002340 if (i)
Tim Peters738eda72002-08-12 15:08:20 +00002341 memset(ret->ob_digit + t2->ob_size, 0, i * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00002342
Tim Petersd64c1de2002-08-12 17:36:03 +00002343 /* 4 & 5. Subtract ah*bh (t1) and al*bl (t2). We do al*bl first
2344 * because it's fresher in cache.
2345 */
Tim Peters738eda72002-08-12 15:08:20 +00002346 i = ret->ob_size - shift; /* # digits after shift */
Tim Petersd64c1de2002-08-12 17:36:03 +00002347 (void)v_isub(ret->ob_digit + shift, i, t2->ob_digit, t2->ob_size);
Tim Peters738eda72002-08-12 15:08:20 +00002348 Py_DECREF(t2);
2349
Tim Petersd64c1de2002-08-12 17:36:03 +00002350 (void)v_isub(ret->ob_digit + shift, i, t1->ob_digit, t1->ob_size);
Tim Peters738eda72002-08-12 15:08:20 +00002351 Py_DECREF(t1);
2352
Tim Petersd64c1de2002-08-12 17:36:03 +00002353 /* 6. t3 <- (ah+al)(bh+bl), and add into result. */
Tim Peters5af4e6c2002-08-12 02:31:19 +00002354 if ((t1 = x_add(ah, al)) == NULL) goto fail;
2355 Py_DECREF(ah);
2356 Py_DECREF(al);
2357 ah = al = NULL;
2358
Tim Peters0973b992004-08-29 22:16:50 +00002359 if (a == b) {
2360 t2 = t1;
2361 Py_INCREF(t2);
2362 }
2363 else if ((t2 = x_add(bh, bl)) == NULL) {
Tim Peters5af4e6c2002-08-12 02:31:19 +00002364 Py_DECREF(t1);
2365 goto fail;
2366 }
2367 Py_DECREF(bh);
2368 Py_DECREF(bl);
2369 bh = bl = NULL;
2370
Tim Peters738eda72002-08-12 15:08:20 +00002371 t3 = k_mul(t1, t2);
Tim Peters5af4e6c2002-08-12 02:31:19 +00002372 Py_DECREF(t1);
2373 Py_DECREF(t2);
Tim Peters738eda72002-08-12 15:08:20 +00002374 if (t3 == NULL) goto fail;
Tim Peters547607c2002-08-12 19:43:49 +00002375 assert(t3->ob_size >= 0);
Tim Peters5af4e6c2002-08-12 02:31:19 +00002376
Tim Petersd6974a52002-08-13 20:37:51 +00002377 /* Add t3. It's not obvious why we can't run out of room here.
2378 * See the (*) comment after this function.
Tim Petersd8b21732002-08-12 19:30:26 +00002379 */
Tim Petersd64c1de2002-08-12 17:36:03 +00002380 (void)v_iadd(ret->ob_digit + shift, i, t3->ob_digit, t3->ob_size);
Tim Peters738eda72002-08-12 15:08:20 +00002381 Py_DECREF(t3);
Tim Peters5af4e6c2002-08-12 02:31:19 +00002382
Tim Peters5af4e6c2002-08-12 02:31:19 +00002383 return long_normalize(ret);
2384
2385 fail:
2386 Py_XDECREF(ret);
2387 Py_XDECREF(ah);
2388 Py_XDECREF(al);
2389 Py_XDECREF(bh);
2390 Py_XDECREF(bl);
Tim Peters5af4e6c2002-08-12 02:31:19 +00002391 return NULL;
2392}
2393
Tim Petersd6974a52002-08-13 20:37:51 +00002394/* (*) Why adding t3 can't "run out of room" above.
2395
Tim Petersab86c2b2002-08-15 20:06:00 +00002396Let f(x) mean the floor of x and c(x) mean the ceiling of x. Some facts
2397to start with:
Tim Petersd6974a52002-08-13 20:37:51 +00002398
Tim Petersab86c2b2002-08-15 20:06:00 +000023991. For any integer i, i = c(i/2) + f(i/2). In particular,
2400 bsize = c(bsize/2) + f(bsize/2).
24012. shift = f(bsize/2)
24023. asize <= bsize
24034. Since we call k_lopsided_mul if asize*2 <= bsize, asize*2 > bsize in this
2404 routine, so asize > bsize/2 >= f(bsize/2) in this routine.
Tim Petersd6974a52002-08-13 20:37:51 +00002405
Tim Petersab86c2b2002-08-15 20:06:00 +00002406We allocated asize + bsize result digits, and add t3 into them at an offset
2407of shift. This leaves asize+bsize-shift allocated digit positions for t3
2408to fit into, = (by #1 and #2) asize + f(bsize/2) + c(bsize/2) - f(bsize/2) =
2409asize + c(bsize/2) available digit positions.
Tim Petersd6974a52002-08-13 20:37:51 +00002410
Tim Petersab86c2b2002-08-15 20:06:00 +00002411bh has c(bsize/2) digits, and bl at most f(size/2) digits. So bh+hl has
2412at most c(bsize/2) digits + 1 bit.
Tim Petersd6974a52002-08-13 20:37:51 +00002413
Tim Petersab86c2b2002-08-15 20:06:00 +00002414If asize == bsize, ah has c(bsize/2) digits, else ah has at most f(bsize/2)
2415digits, and al has at most f(bsize/2) digits in any case. So ah+al has at
2416most (asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 1 bit.
Tim Petersd6974a52002-08-13 20:37:51 +00002417
Tim Petersab86c2b2002-08-15 20:06:00 +00002418The product (ah+al)*(bh+bl) therefore has at most
Tim Petersd6974a52002-08-13 20:37:51 +00002419
Tim Petersab86c2b2002-08-15 20:06:00 +00002420 c(bsize/2) + (asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 2 bits
Tim Petersd6974a52002-08-13 20:37:51 +00002421
Tim Petersab86c2b2002-08-15 20:06:00 +00002422and we have asize + c(bsize/2) available digit positions. We need to show
2423this is always enough. An instance of c(bsize/2) cancels out in both, so
2424the question reduces to whether asize digits is enough to hold
2425(asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 2 bits. If asize < bsize,
2426then we're asking whether asize digits >= f(bsize/2) digits + 2 bits. By #4,
2427asize is at least f(bsize/2)+1 digits, so this in turn reduces to whether 1
2428digit is enough to hold 2 bits. This is so since SHIFT=15 >= 2. If
2429asize == bsize, then we're asking whether bsize digits is enough to hold
Tim Peterse417de02002-08-15 20:10:45 +00002430c(bsize/2) digits + 2 bits, or equivalently (by #1) whether f(bsize/2) digits
2431is enough to hold 2 bits. This is so if bsize >= 2, which holds because
2432bsize >= KARATSUBA_CUTOFF >= 2.
Tim Peters8e966ee2002-08-14 16:36:23 +00002433
Tim Peters48d52c02002-08-14 17:07:32 +00002434Note that since there's always enough room for (ah+al)*(bh+bl), and that's
2435clearly >= each of ah*bh and al*bl, there's always enough room to subtract
2436ah*bh and al*bl too.
Tim Petersd6974a52002-08-13 20:37:51 +00002437*/
2438
Tim Peters60004642002-08-12 22:01:34 +00002439/* b has at least twice the digits of a, and a is big enough that Karatsuba
2440 * would pay off *if* the inputs had balanced sizes. View b as a sequence
2441 * of slices, each with a->ob_size digits, and multiply the slices by a,
2442 * one at a time. This gives k_mul balanced inputs to work with, and is
2443 * also cache-friendly (we compute one double-width slice of the result
2444 * at a time, then move on, never bactracking except for the helpful
2445 * single-width slice overlap between successive partial sums).
2446 */
2447static PyLongObject *
2448k_lopsided_mul(PyLongObject *a, PyLongObject *b)
2449{
Martin v. Löwis18e16552006-02-15 17:27:45 +00002450 const Py_ssize_t asize = ABS(a->ob_size);
2451 Py_ssize_t bsize = ABS(b->ob_size);
2452 Py_ssize_t nbdone; /* # of b digits already multiplied */
Tim Peters60004642002-08-12 22:01:34 +00002453 PyLongObject *ret;
2454 PyLongObject *bslice = NULL;
2455
2456 assert(asize > KARATSUBA_CUTOFF);
2457 assert(2 * asize <= bsize);
2458
2459 /* Allocate result space, and zero it out. */
2460 ret = _PyLong_New(asize + bsize);
2461 if (ret == NULL)
2462 return NULL;
2463 memset(ret->ob_digit, 0, ret->ob_size * sizeof(digit));
2464
2465 /* Successive slices of b are copied into bslice. */
Tim Peters12034032002-08-12 22:10:00 +00002466 bslice = _PyLong_New(asize);
Tim Peters60004642002-08-12 22:01:34 +00002467 if (bslice == NULL)
2468 goto fail;
2469
2470 nbdone = 0;
2471 while (bsize > 0) {
2472 PyLongObject *product;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002473 const Py_ssize_t nbtouse = MIN(bsize, asize);
Tim Peters60004642002-08-12 22:01:34 +00002474
2475 /* Multiply the next slice of b by a. */
2476 memcpy(bslice->ob_digit, b->ob_digit + nbdone,
2477 nbtouse * sizeof(digit));
2478 bslice->ob_size = nbtouse;
2479 product = k_mul(a, bslice);
2480 if (product == NULL)
2481 goto fail;
2482
2483 /* Add into result. */
2484 (void)v_iadd(ret->ob_digit + nbdone, ret->ob_size - nbdone,
2485 product->ob_digit, product->ob_size);
2486 Py_DECREF(product);
2487
2488 bsize -= nbtouse;
2489 nbdone += nbtouse;
2490 }
2491
2492 Py_DECREF(bslice);
2493 return long_normalize(ret);
2494
2495 fail:
2496 Py_DECREF(ret);
2497 Py_XDECREF(bslice);
2498 return NULL;
2499}
Tim Peters5af4e6c2002-08-12 02:31:19 +00002500
2501static PyObject *
2502long_mul(PyLongObject *v, PyLongObject *w)
2503{
2504 PyLongObject *a, *b, *z;
2505
2506 if (!convert_binop((PyObject *)v, (PyObject *)w, &a, &b)) {
Tim Peters5af4e6c2002-08-12 02:31:19 +00002507 Py_INCREF(Py_NotImplemented);
2508 return Py_NotImplemented;
2509 }
2510
Tim Petersd64c1de2002-08-12 17:36:03 +00002511 z = k_mul(a, b);
Tim Peters9973d742002-08-15 19:41:06 +00002512 /* Negate if exactly one of the inputs is negative. */
2513 if (((a->ob_size ^ b->ob_size) < 0) && z)
Guido van Rossum4c260ff1992-01-14 18:36:43 +00002514 z->ob_size = -(z->ob_size);
Neil Schemenauerba872e22001-01-04 01:46:03 +00002515 Py_DECREF(a);
2516 Py_DECREF(b);
Tim Peters9973d742002-08-15 19:41:06 +00002517 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002518}
2519
Guido van Rossume32e0141992-01-19 16:31:05 +00002520/* The / and % operators are now defined in terms of divmod().
2521 The expression a mod b has the value a - b*floor(a/b).
2522 The long_divrem function gives the remainder after division of
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002523 |a| by |b|, with the sign of a. This is also expressed
2524 as a - b*trunc(a/b), if trunc truncates towards zero.
2525 Some examples:
2526 a b a rem b a mod b
2527 13 10 3 3
2528 -13 10 -3 7
2529 13 -10 3 -7
2530 -13 -10 -3 -3
2531 So, to get from rem to mod, we have to add b if a and b
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00002532 have different signs. We then subtract one from the 'div'
2533 part of the outcome to keep the invariant intact. */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002534
Tim Peters47e52ee2004-08-30 02:44:38 +00002535/* Compute
2536 * *pdiv, *pmod = divmod(v, w)
2537 * NULL can be passed for pdiv or pmod, in which case that part of
2538 * the result is simply thrown away. The caller owns a reference to
2539 * each of these it requests (does not pass NULL for).
2540 */
Guido van Rossume32e0141992-01-19 16:31:05 +00002541static int
Tim Peters5af4e6c2002-08-12 02:31:19 +00002542l_divmod(PyLongObject *v, PyLongObject *w,
Tim Peters9f688bf2000-07-07 15:53:28 +00002543 PyLongObject **pdiv, PyLongObject **pmod)
Guido van Rossume32e0141992-01-19 16:31:05 +00002544{
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002545 PyLongObject *div, *mod;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002546
Guido van Rossume32e0141992-01-19 16:31:05 +00002547 if (long_divrem(v, w, &div, &mod) < 0)
2548 return -1;
Guido van Rossum472c04f1996-12-05 21:57:21 +00002549 if ((mod->ob_size < 0 && w->ob_size > 0) ||
2550 (mod->ob_size > 0 && w->ob_size < 0)) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002551 PyLongObject *temp;
2552 PyLongObject *one;
2553 temp = (PyLongObject *) long_add(mod, w);
2554 Py_DECREF(mod);
Guido van Rossume32e0141992-01-19 16:31:05 +00002555 mod = temp;
2556 if (mod == NULL) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002557 Py_DECREF(div);
Guido van Rossume32e0141992-01-19 16:31:05 +00002558 return -1;
2559 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002560 one = (PyLongObject *) PyLong_FromLong(1L);
Guido van Rossume32e0141992-01-19 16:31:05 +00002561 if (one == NULL ||
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002562 (temp = (PyLongObject *) long_sub(div, one)) == NULL) {
2563 Py_DECREF(mod);
2564 Py_DECREF(div);
2565 Py_XDECREF(one);
Guido van Rossume32e0141992-01-19 16:31:05 +00002566 return -1;
2567 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002568 Py_DECREF(one);
2569 Py_DECREF(div);
Guido van Rossume32e0141992-01-19 16:31:05 +00002570 div = temp;
2571 }
Tim Peters47e52ee2004-08-30 02:44:38 +00002572 if (pdiv != NULL)
2573 *pdiv = div;
2574 else
2575 Py_DECREF(div);
2576
2577 if (pmod != NULL)
2578 *pmod = mod;
2579 else
2580 Py_DECREF(mod);
2581
Guido van Rossume32e0141992-01-19 16:31:05 +00002582 return 0;
2583}
2584
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002585static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00002586long_div(PyObject *v, PyObject *w)
Guido van Rossume32e0141992-01-19 16:31:05 +00002587{
Tim Peters47e52ee2004-08-30 02:44:38 +00002588 PyLongObject *a, *b, *div;
Neil Schemenauerba872e22001-01-04 01:46:03 +00002589
2590 CONVERT_BINOP(v, w, &a, &b);
Tim Peters47e52ee2004-08-30 02:44:38 +00002591 if (l_divmod(a, b, &div, NULL) < 0)
2592 div = NULL;
Neil Schemenauerba872e22001-01-04 01:46:03 +00002593 Py_DECREF(a);
2594 Py_DECREF(b);
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002595 return (PyObject *)div;
Guido van Rossume32e0141992-01-19 16:31:05 +00002596}
2597
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002598static PyObject *
Guido van Rossum393661d2001-08-31 17:40:15 +00002599long_classic_div(PyObject *v, PyObject *w)
2600{
Tim Peters47e52ee2004-08-30 02:44:38 +00002601 PyLongObject *a, *b, *div;
Guido van Rossum393661d2001-08-31 17:40:15 +00002602
2603 CONVERT_BINOP(v, w, &a, &b);
Guido van Rossum393661d2001-08-31 17:40:15 +00002604 if (Py_DivisionWarningFlag &&
2605 PyErr_Warn(PyExc_DeprecationWarning, "classic long division") < 0)
2606 div = NULL;
Tim Peters47e52ee2004-08-30 02:44:38 +00002607 else if (l_divmod(a, b, &div, NULL) < 0)
Guido van Rossum393661d2001-08-31 17:40:15 +00002608 div = NULL;
Guido van Rossum393661d2001-08-31 17:40:15 +00002609 Py_DECREF(a);
2610 Py_DECREF(b);
2611 return (PyObject *)div;
2612}
2613
2614static PyObject *
Tim Peters20dab9f2001-09-04 05:31:47 +00002615long_true_divide(PyObject *v, PyObject *w)
2616{
Tim Peterse2a60002001-09-04 06:17:36 +00002617 PyLongObject *a, *b;
2618 double ad, bd;
Thomas Wouters553489a2006-02-01 21:32:04 +00002619 int failed, aexp = -1, bexp = -1;
Tim Peterse2a60002001-09-04 06:17:36 +00002620
2621 CONVERT_BINOP(v, w, &a, &b);
2622 ad = _PyLong_AsScaledDouble((PyObject *)a, &aexp);
2623 bd = _PyLong_AsScaledDouble((PyObject *)b, &bexp);
Tim Peters6f97e492001-11-04 23:09:40 +00002624 failed = (ad == -1.0 || bd == -1.0) && PyErr_Occurred();
2625 Py_DECREF(a);
2626 Py_DECREF(b);
2627 if (failed)
Tim Peterse2a60002001-09-04 06:17:36 +00002628 return NULL;
Thomas Wouters553489a2006-02-01 21:32:04 +00002629 /* 'aexp' and 'bexp' were initialized to -1 to silence gcc-4.0.x,
2630 but should really be set correctly after sucessful calls to
2631 _PyLong_AsScaledDouble() */
2632 assert(aexp >= 0 && bexp >= 0);
Tim Peterse2a60002001-09-04 06:17:36 +00002633
2634 if (bd == 0.0) {
2635 PyErr_SetString(PyExc_ZeroDivisionError,
2636 "long division or modulo by zero");
2637 return NULL;
2638 }
2639
2640 /* True value is very close to ad/bd * 2**(SHIFT*(aexp-bexp)) */
2641 ad /= bd; /* overflow/underflow impossible here */
2642 aexp -= bexp;
2643 if (aexp > INT_MAX / SHIFT)
2644 goto overflow;
Tim Peterse56ed9b2001-09-06 21:59:14 +00002645 else if (aexp < -(INT_MAX / SHIFT))
2646 return PyFloat_FromDouble(0.0); /* underflow to 0 */
Tim Peterse2a60002001-09-04 06:17:36 +00002647 errno = 0;
2648 ad = ldexp(ad, aexp * SHIFT);
Tim Peters57f282a2001-09-05 05:38:10 +00002649 if (Py_OVERFLOWED(ad)) /* ignore underflow to 0.0 */
Tim Peterse2a60002001-09-04 06:17:36 +00002650 goto overflow;
2651 return PyFloat_FromDouble(ad);
2652
2653overflow:
2654 PyErr_SetString(PyExc_OverflowError,
2655 "long/long too large for a float");
2656 return NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002657
Tim Peters20dab9f2001-09-04 05:31:47 +00002658}
2659
2660static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00002661long_mod(PyObject *v, PyObject *w)
Guido van Rossume32e0141992-01-19 16:31:05 +00002662{
Tim Peters47e52ee2004-08-30 02:44:38 +00002663 PyLongObject *a, *b, *mod;
Neil Schemenauerba872e22001-01-04 01:46:03 +00002664
2665 CONVERT_BINOP(v, w, &a, &b);
2666
Tim Peters47e52ee2004-08-30 02:44:38 +00002667 if (l_divmod(a, b, NULL, &mod) < 0)
2668 mod = NULL;
Neil Schemenauerba872e22001-01-04 01:46:03 +00002669 Py_DECREF(a);
2670 Py_DECREF(b);
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002671 return (PyObject *)mod;
Guido van Rossume32e0141992-01-19 16:31:05 +00002672}
2673
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002674static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00002675long_divmod(PyObject *v, PyObject *w)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002676{
Neil Schemenauerba872e22001-01-04 01:46:03 +00002677 PyLongObject *a, *b, *div, *mod;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002678 PyObject *z;
Neil Schemenauerba872e22001-01-04 01:46:03 +00002679
2680 CONVERT_BINOP(v, w, &a, &b);
2681
2682 if (l_divmod(a, b, &div, &mod) < 0) {
2683 Py_DECREF(a);
2684 Py_DECREF(b);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002685 return NULL;
Neil Schemenauerba872e22001-01-04 01:46:03 +00002686 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002687 z = PyTuple_New(2);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002688 if (z != NULL) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002689 PyTuple_SetItem(z, 0, (PyObject *) div);
2690 PyTuple_SetItem(z, 1, (PyObject *) mod);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002691 }
2692 else {
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002693 Py_DECREF(div);
2694 Py_DECREF(mod);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002695 }
Neil Schemenauerba872e22001-01-04 01:46:03 +00002696 Py_DECREF(a);
2697 Py_DECREF(b);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002698 return z;
2699}
2700
Tim Peters47e52ee2004-08-30 02:44:38 +00002701/* pow(v, w, x) */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002702static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00002703long_pow(PyObject *v, PyObject *w, PyObject *x)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002704{
Tim Peters47e52ee2004-08-30 02:44:38 +00002705 PyLongObject *a, *b, *c; /* a,b,c = v,w,x */
2706 int negativeOutput = 0; /* if x<0 return negative output */
Neil Schemenauerba872e22001-01-04 01:46:03 +00002707
Tim Peters47e52ee2004-08-30 02:44:38 +00002708 PyLongObject *z = NULL; /* accumulated result */
Martin v. Löwis18e16552006-02-15 17:27:45 +00002709 Py_ssize_t i, j, k; /* counters */
Tim Peters47e52ee2004-08-30 02:44:38 +00002710 PyLongObject *temp = NULL;
2711
2712 /* 5-ary values. If the exponent is large enough, table is
2713 * precomputed so that table[i] == a**i % c for i in range(32).
2714 */
2715 PyLongObject *table[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2716 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
2717
2718 /* a, b, c = v, w, x */
Neil Schemenauerba872e22001-01-04 01:46:03 +00002719 CONVERT_BINOP(v, w, &a, &b);
Tim Peters47e52ee2004-08-30 02:44:38 +00002720 if (PyLong_Check(x)) {
2721 c = (PyLongObject *)x;
Neil Schemenauerba872e22001-01-04 01:46:03 +00002722 Py_INCREF(x);
2723 }
Tim Petersde7990b2005-07-17 23:45:23 +00002724 else if (PyInt_Check(x)) {
Tim Peters47e52ee2004-08-30 02:44:38 +00002725 c = (PyLongObject *)PyLong_FromLong(PyInt_AS_LONG(x));
Tim Petersde7990b2005-07-17 23:45:23 +00002726 if (c == NULL)
2727 goto Error;
2728 }
Tim Peters47e52ee2004-08-30 02:44:38 +00002729 else if (x == Py_None)
2730 c = NULL;
Neil Schemenauerba872e22001-01-04 01:46:03 +00002731 else {
2732 Py_DECREF(a);
2733 Py_DECREF(b);
2734 Py_INCREF(Py_NotImplemented);
2735 return Py_NotImplemented;
2736 }
Tim Peters4c483c42001-09-05 06:24:58 +00002737
Tim Peters47e52ee2004-08-30 02:44:38 +00002738 if (b->ob_size < 0) { /* if exponent is negative */
2739 if (c) {
Tim Peters4c483c42001-09-05 06:24:58 +00002740 PyErr_SetString(PyExc_TypeError, "pow() 2nd argument "
Tim Peters47e52ee2004-08-30 02:44:38 +00002741 "cannot be negative when 3rd argument specified");
Tim Peterscd97da32004-08-30 02:58:59 +00002742 goto Error;
Tim Peters32f453e2001-09-03 08:35:41 +00002743 }
Guido van Rossum2c7b8fe1999-10-11 22:34:41 +00002744 else {
Tim Peters47e52ee2004-08-30 02:44:38 +00002745 /* else return a float. This works because we know
2746 that this calls float_pow() which converts its
2747 arguments to double. */
2748 Py_DECREF(a);
2749 Py_DECREF(b);
2750 return PyFloat_Type.tp_as_number->nb_power(v, w, x);
Guido van Rossum2c7b8fe1999-10-11 22:34:41 +00002751 }
Guido van Rossumeb1fafc1994-08-29 12:47:19 +00002752 }
Tim Peters47e52ee2004-08-30 02:44:38 +00002753
2754 if (c) {
2755 /* if modulus == 0:
2756 raise ValueError() */
2757 if (c->ob_size == 0) {
2758 PyErr_SetString(PyExc_ValueError,
2759 "pow() 3rd argument cannot be 0");
Tim Peterscd97da32004-08-30 02:58:59 +00002760 goto Error;
Tim Peters47e52ee2004-08-30 02:44:38 +00002761 }
2762
2763 /* if modulus < 0:
2764 negativeOutput = True
2765 modulus = -modulus */
2766 if (c->ob_size < 0) {
2767 negativeOutput = 1;
2768 temp = (PyLongObject *)_PyLong_Copy(c);
2769 if (temp == NULL)
2770 goto Error;
2771 Py_DECREF(c);
2772 c = temp;
2773 temp = NULL;
2774 c->ob_size = - c->ob_size;
2775 }
2776
2777 /* if modulus == 1:
2778 return 0 */
2779 if ((c->ob_size == 1) && (c->ob_digit[0] == 1)) {
2780 z = (PyLongObject *)PyLong_FromLong(0L);
2781 goto Done;
2782 }
2783
2784 /* if base < 0:
2785 base = base % modulus
2786 Having the base positive just makes things easier. */
2787 if (a->ob_size < 0) {
2788 if (l_divmod(a, c, NULL, &temp) < 0)
Tim Peterscd97da32004-08-30 02:58:59 +00002789 goto Error;
Tim Peters47e52ee2004-08-30 02:44:38 +00002790 Py_DECREF(a);
2791 a = temp;
2792 temp = NULL;
2793 }
2794 }
2795
2796 /* At this point a, b, and c are guaranteed non-negative UNLESS
2797 c is NULL, in which case a may be negative. */
2798
2799 z = (PyLongObject *)PyLong_FromLong(1L);
2800 if (z == NULL)
2801 goto Error;
2802
2803 /* Perform a modular reduction, X = X % c, but leave X alone if c
2804 * is NULL.
2805 */
2806#define REDUCE(X) \
2807 if (c != NULL) { \
2808 if (l_divmod(X, c, NULL, &temp) < 0) \
2809 goto Error; \
2810 Py_XDECREF(X); \
2811 X = temp; \
2812 temp = NULL; \
2813 }
2814
2815 /* Multiply two values, then reduce the result:
2816 result = X*Y % c. If c is NULL, skip the mod. */
2817#define MULT(X, Y, result) \
2818{ \
2819 temp = (PyLongObject *)long_mul(X, Y); \
2820 if (temp == NULL) \
2821 goto Error; \
2822 Py_XDECREF(result); \
2823 result = temp; \
2824 temp = NULL; \
2825 REDUCE(result) \
2826}
2827
2828 if (b->ob_size <= FIVEARY_CUTOFF) {
2829 /* Left-to-right binary exponentiation (HAC Algorithm 14.79) */
2830 /* http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf */
2831 for (i = b->ob_size - 1; i >= 0; --i) {
2832 digit bi = b->ob_digit[i];
2833
2834 for (j = 1 << (SHIFT-1); j != 0; j >>= 1) {
2835 MULT(z, z, z)
2836 if (bi & j)
2837 MULT(z, a, z)
2838 }
2839 }
2840 }
2841 else {
2842 /* Left-to-right 5-ary exponentiation (HAC Algorithm 14.82) */
2843 Py_INCREF(z); /* still holds 1L */
2844 table[0] = z;
2845 for (i = 1; i < 32; ++i)
2846 MULT(table[i-1], a, table[i])
2847
2848 for (i = b->ob_size - 1; i >= 0; --i) {
2849 const digit bi = b->ob_digit[i];
2850
2851 for (j = SHIFT - 5; j >= 0; j -= 5) {
2852 const int index = (bi >> j) & 0x1f;
2853 for (k = 0; k < 5; ++k)
2854 MULT(z, z, z)
2855 if (index)
2856 MULT(z, table[index], z)
2857 }
2858 }
2859 }
2860
2861 if (negativeOutput && (z->ob_size != 0)) {
2862 temp = (PyLongObject *)long_sub(z, c);
2863 if (temp == NULL)
2864 goto Error;
2865 Py_DECREF(z);
2866 z = temp;
2867 temp = NULL;
2868 }
2869 goto Done;
2870
2871 Error:
2872 if (z != NULL) {
2873 Py_DECREF(z);
2874 z = NULL;
2875 }
2876 /* fall through */
2877 Done:
Tim Peters47e52ee2004-08-30 02:44:38 +00002878 if (b->ob_size > FIVEARY_CUTOFF) {
2879 for (i = 0; i < 32; ++i)
2880 Py_XDECREF(table[i]);
2881 }
Tim Petersde7990b2005-07-17 23:45:23 +00002882 Py_DECREF(a);
2883 Py_DECREF(b);
2884 Py_XDECREF(c);
2885 Py_XDECREF(temp);
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002886 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002887}
2888
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002889static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00002890long_invert(PyLongObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002891{
Guido van Rossum4c260ff1992-01-14 18:36:43 +00002892 /* Implement ~x as -(x+1) */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002893 PyLongObject *x;
2894 PyLongObject *w;
2895 w = (PyLongObject *)PyLong_FromLong(1L);
Guido van Rossum4c260ff1992-01-14 18:36:43 +00002896 if (w == NULL)
2897 return NULL;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002898 x = (PyLongObject *) long_add(v, w);
2899 Py_DECREF(w);
Guido van Rossum4c260ff1992-01-14 18:36:43 +00002900 if (x == NULL)
2901 return NULL;
Tim Peters40c397d2001-09-11 23:24:22 +00002902 x->ob_size = -(x->ob_size);
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002903 return (PyObject *)x;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002904}
2905
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002906static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00002907long_pos(PyLongObject *v)
Guido van Rossumc6913e71991-11-19 20:26:46 +00002908{
Tim Peters69c2de32001-09-11 22:31:33 +00002909 if (PyLong_CheckExact(v)) {
2910 Py_INCREF(v);
2911 return (PyObject *)v;
2912 }
2913 else
2914 return _PyLong_Copy(v);
Guido van Rossumc6913e71991-11-19 20:26:46 +00002915}
2916
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002917static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00002918long_neg(PyLongObject *v)
Guido van Rossumc6913e71991-11-19 20:26:46 +00002919{
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002920 PyLongObject *z;
Tim Peters69c2de32001-09-11 22:31:33 +00002921 if (v->ob_size == 0 && PyLong_CheckExact(v)) {
Guido van Rossum4c260ff1992-01-14 18:36:43 +00002922 /* -0 == 0 */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002923 Py_INCREF(v);
2924 return (PyObject *) v;
Guido van Rossumc6913e71991-11-19 20:26:46 +00002925 }
Tim Peters69c2de32001-09-11 22:31:33 +00002926 z = (PyLongObject *)_PyLong_Copy(v);
2927 if (z != NULL)
2928 z->ob_size = -(v->ob_size);
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002929 return (PyObject *)z;
Guido van Rossumc6913e71991-11-19 20:26:46 +00002930}
2931
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002932static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00002933long_abs(PyLongObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002934{
2935 if (v->ob_size < 0)
Guido van Rossum4c260ff1992-01-14 18:36:43 +00002936 return long_neg(v);
Tim Peters69c2de32001-09-11 22:31:33 +00002937 else
2938 return long_pos(v);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002939}
2940
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00002941static int
Tim Peters9f688bf2000-07-07 15:53:28 +00002942long_nonzero(PyLongObject *v)
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00002943{
Guido van Rossum4c260ff1992-01-14 18:36:43 +00002944 return ABS(v->ob_size) != 0;
Guido van Rossumc6913e71991-11-19 20:26:46 +00002945}
2946
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002947static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00002948long_rshift(PyLongObject *v, PyLongObject *w)
Guido van Rossumc6913e71991-11-19 20:26:46 +00002949{
Neil Schemenauerba872e22001-01-04 01:46:03 +00002950 PyLongObject *a, *b;
2951 PyLongObject *z = NULL;
Guido van Rossumc6913e71991-11-19 20:26:46 +00002952 long shiftby;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002953 Py_ssize_t newsize, wordshift, loshift, hishift, i, j;
Guido van Rossumc6913e71991-11-19 20:26:46 +00002954 digit lomask, himask;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002955
Neil Schemenauerba872e22001-01-04 01:46:03 +00002956 CONVERT_BINOP((PyObject *)v, (PyObject *)w, &a, &b);
2957
Guido van Rossum4c260ff1992-01-14 18:36:43 +00002958 if (a->ob_size < 0) {
2959 /* Right shifting negative numbers is harder */
Neil Schemenauerba872e22001-01-04 01:46:03 +00002960 PyLongObject *a1, *a2;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002961 a1 = (PyLongObject *) long_invert(a);
Neil Schemenauerba872e22001-01-04 01:46:03 +00002962 if (a1 == NULL)
2963 goto rshift_error;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002964 a2 = (PyLongObject *) long_rshift(a1, b);
2965 Py_DECREF(a1);
Neil Schemenauerba872e22001-01-04 01:46:03 +00002966 if (a2 == NULL)
2967 goto rshift_error;
2968 z = (PyLongObject *) long_invert(a2);
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002969 Py_DECREF(a2);
Guido van Rossumc6913e71991-11-19 20:26:46 +00002970 }
Neil Schemenauerba872e22001-01-04 01:46:03 +00002971 else {
Tim Peters5af4e6c2002-08-12 02:31:19 +00002972
Neil Schemenauerba872e22001-01-04 01:46:03 +00002973 shiftby = PyLong_AsLong((PyObject *)b);
2974 if (shiftby == -1L && PyErr_Occurred())
2975 goto rshift_error;
2976 if (shiftby < 0) {
2977 PyErr_SetString(PyExc_ValueError,
2978 "negative shift count");
2979 goto rshift_error;
2980 }
2981 wordshift = shiftby / SHIFT;
2982 newsize = ABS(a->ob_size) - wordshift;
2983 if (newsize <= 0) {
2984 z = _PyLong_New(0);
2985 Py_DECREF(a);
2986 Py_DECREF(b);
2987 return (PyObject *)z;
2988 }
2989 loshift = shiftby % SHIFT;
2990 hishift = SHIFT - loshift;
2991 lomask = ((digit)1 << hishift) - 1;
2992 himask = MASK ^ lomask;
2993 z = _PyLong_New(newsize);
2994 if (z == NULL)
2995 goto rshift_error;
2996 if (a->ob_size < 0)
2997 z->ob_size = -(z->ob_size);
2998 for (i = 0, j = wordshift; i < newsize; i++, j++) {
2999 z->ob_digit[i] = (a->ob_digit[j] >> loshift) & lomask;
3000 if (i+1 < newsize)
3001 z->ob_digit[i] |=
3002 (a->ob_digit[j+1] << hishift) & himask;
3003 }
3004 z = long_normalize(z);
Guido van Rossumc6913e71991-11-19 20:26:46 +00003005 }
Neil Schemenauerba872e22001-01-04 01:46:03 +00003006rshift_error:
3007 Py_DECREF(a);
3008 Py_DECREF(b);
3009 return (PyObject *) z;
3010
Guido van Rossumc6913e71991-11-19 20:26:46 +00003011}
3012
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003013static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00003014long_lshift(PyObject *v, PyObject *w)
Guido van Rossumc6913e71991-11-19 20:26:46 +00003015{
Guido van Rossumf2e499b1997-03-16 00:37:59 +00003016 /* This version due to Tim Peters */
Neil Schemenauerba872e22001-01-04 01:46:03 +00003017 PyLongObject *a, *b;
3018 PyLongObject *z = NULL;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003019 long shiftby;
Martin v. Löwis18e16552006-02-15 17:27:45 +00003020 Py_ssize_t oldsize, newsize, wordshift, remshift, i, j;
Guido van Rossumf2e499b1997-03-16 00:37:59 +00003021 twodigits accum;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003022
Neil Schemenauerba872e22001-01-04 01:46:03 +00003023 CONVERT_BINOP(v, w, &a, &b);
3024
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003025 shiftby = PyLong_AsLong((PyObject *)b);
3026 if (shiftby == -1L && PyErr_Occurred())
Neil Schemenauerba872e22001-01-04 01:46:03 +00003027 goto lshift_error;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003028 if (shiftby < 0) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003029 PyErr_SetString(PyExc_ValueError, "negative shift count");
Neil Schemenauerba872e22001-01-04 01:46:03 +00003030 goto lshift_error;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003031 }
Guido van Rossumf2e499b1997-03-16 00:37:59 +00003032 if ((long)(int)shiftby != shiftby) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003033 PyErr_SetString(PyExc_ValueError,
3034 "outrageous left shift count");
Neil Schemenauerba872e22001-01-04 01:46:03 +00003035 goto lshift_error;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003036 }
Guido van Rossumf2e499b1997-03-16 00:37:59 +00003037 /* wordshift, remshift = divmod(shiftby, SHIFT) */
3038 wordshift = (int)shiftby / SHIFT;
3039 remshift = (int)shiftby - wordshift * SHIFT;
3040
3041 oldsize = ABS(a->ob_size);
3042 newsize = oldsize + wordshift;
3043 if (remshift)
3044 ++newsize;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003045 z = _PyLong_New(newsize);
Guido van Rossumc6913e71991-11-19 20:26:46 +00003046 if (z == NULL)
Neil Schemenauerba872e22001-01-04 01:46:03 +00003047 goto lshift_error;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003048 if (a->ob_size < 0)
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003049 z->ob_size = -(z->ob_size);
Guido van Rossumc6913e71991-11-19 20:26:46 +00003050 for (i = 0; i < wordshift; i++)
3051 z->ob_digit[i] = 0;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003052 accum = 0;
Guido van Rossumf2e499b1997-03-16 00:37:59 +00003053 for (i = wordshift, j = 0; j < oldsize; i++, j++) {
Tim Peters0d2d87d2002-08-20 19:00:22 +00003054 accum |= (twodigits)a->ob_digit[j] << remshift;
Guido van Rossumf2e499b1997-03-16 00:37:59 +00003055 z->ob_digit[i] = (digit)(accum & MASK);
3056 accum >>= SHIFT;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003057 }
Guido van Rossumf2e499b1997-03-16 00:37:59 +00003058 if (remshift)
3059 z->ob_digit[newsize-1] = (digit)accum;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003060 else
Guido van Rossumf2e499b1997-03-16 00:37:59 +00003061 assert(!accum);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003062 z = long_normalize(z);
3063lshift_error:
3064 Py_DECREF(a);
3065 Py_DECREF(b);
3066 return (PyObject *) z;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003067}
3068
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003069
3070/* Bitwise and/xor/or operations */
3071
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003072static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003073long_bitwise(PyLongObject *a,
3074 int op, /* '&', '|', '^' */
3075 PyLongObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00003076{
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003077 digit maska, maskb; /* 0 or MASK */
3078 int negz;
Martin v. Löwis18e16552006-02-15 17:27:45 +00003079 Py_ssize_t size_a, size_b, size_z;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003080 PyLongObject *z;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003081 int i;
Guido van Rossum8b27d921992-03-27 17:27:05 +00003082 digit diga, digb;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003083 PyObject *v;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003084
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003085 if (a->ob_size < 0) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003086 a = (PyLongObject *) long_invert(a);
Hye-Shik Chang4af5c8c2006-03-07 15:39:21 +00003087 if (a == NULL)
3088 return NULL;
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003089 maska = MASK;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003090 }
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003091 else {
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003092 Py_INCREF(a);
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003093 maska = 0;
Guido van Rossumafbb8db1991-12-31 13:14:13 +00003094 }
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003095 if (b->ob_size < 0) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003096 b = (PyLongObject *) long_invert(b);
Hye-Shik Chang4af5c8c2006-03-07 15:39:21 +00003097 if (b == NULL) {
3098 Py_DECREF(a);
3099 return NULL;
3100 }
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003101 maskb = MASK;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003102 }
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003103 else {
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003104 Py_INCREF(b);
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003105 maskb = 0;
3106 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00003107
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003108 negz = 0;
3109 switch (op) {
3110 case '^':
3111 if (maska != maskb) {
3112 maska ^= MASK;
3113 negz = -1;
3114 }
3115 break;
Guido van Rossumeb1fafc1994-08-29 12:47:19 +00003116 case '&':
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003117 if (maska && maskb) {
3118 op = '|';
3119 maska ^= MASK;
3120 maskb ^= MASK;
3121 negz = -1;
3122 }
3123 break;
3124 case '|':
3125 if (maska || maskb) {
3126 op = '&';
3127 maska ^= MASK;
3128 maskb ^= MASK;
3129 negz = -1;
3130 }
3131 break;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003132 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00003133
Guido van Rossumbd3a5271998-08-11 15:04:47 +00003134 /* JRH: The original logic here was to allocate the result value (z)
3135 as the longer of the two operands. However, there are some cases
3136 where the result is guaranteed to be shorter than that: AND of two
3137 positives, OR of two negatives: use the shorter number. AND with
3138 mixed signs: use the positive number. OR with mixed signs: use the
3139 negative number. After the transformations above, op will be '&'
3140 iff one of these cases applies, and mask will be non-0 for operands
3141 whose length should be ignored.
3142 */
3143
3144 size_a = a->ob_size;
3145 size_b = b->ob_size;
3146 size_z = op == '&'
3147 ? (maska
3148 ? size_b
3149 : (maskb ? size_a : MIN(size_a, size_b)))
3150 : MAX(size_a, size_b);
3151 z = _PyLong_New(size_z);
Hye-Shik Chang4af5c8c2006-03-07 15:39:21 +00003152 if (z == NULL) {
Neal Norwitzef02b9e2006-07-16 02:00:32 +00003153 Py_DECREF(a);
3154 Py_DECREF(b);
Guido van Rossumbd3a5271998-08-11 15:04:47 +00003155 return NULL;
3156 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00003157
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003158 for (i = 0; i < size_z; ++i) {
3159 diga = (i < size_a ? a->ob_digit[i] : 0) ^ maska;
3160 digb = (i < size_b ? b->ob_digit[i] : 0) ^ maskb;
3161 switch (op) {
3162 case '&': z->ob_digit[i] = diga & digb; break;
3163 case '|': z->ob_digit[i] = diga | digb; break;
3164 case '^': z->ob_digit[i] = diga ^ digb; break;
3165 }
Guido van Rossumafbb8db1991-12-31 13:14:13 +00003166 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00003167
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003168 Py_DECREF(a);
3169 Py_DECREF(b);
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003170 z = long_normalize(z);
3171 if (negz == 0)
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003172 return (PyObject *) z;
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003173 v = long_invert(z);
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003174 Py_DECREF(z);
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003175 return v;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003176}
3177
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003178static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00003179long_and(PyObject *v, PyObject *w)
Guido van Rossumc6913e71991-11-19 20:26:46 +00003180{
Neil Schemenauerba872e22001-01-04 01:46:03 +00003181 PyLongObject *a, *b;
3182 PyObject *c;
3183 CONVERT_BINOP(v, w, &a, &b);
3184 c = long_bitwise(a, '&', b);
3185 Py_DECREF(a);
3186 Py_DECREF(b);
3187 return c;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003188}
3189
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003190static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00003191long_xor(PyObject *v, PyObject *w)
Guido van Rossumc6913e71991-11-19 20:26:46 +00003192{
Neil Schemenauerba872e22001-01-04 01:46:03 +00003193 PyLongObject *a, *b;
3194 PyObject *c;
3195 CONVERT_BINOP(v, w, &a, &b);
3196 c = long_bitwise(a, '^', b);
3197 Py_DECREF(a);
3198 Py_DECREF(b);
3199 return c;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003200}
3201
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003202static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00003203long_or(PyObject *v, PyObject *w)
Guido van Rossumc6913e71991-11-19 20:26:46 +00003204{
Neil Schemenauerba872e22001-01-04 01:46:03 +00003205 PyLongObject *a, *b;
3206 PyObject *c;
3207 CONVERT_BINOP(v, w, &a, &b);
3208 c = long_bitwise(a, '|', b);
3209 Py_DECREF(a);
3210 Py_DECREF(b);
3211 return c;
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00003212}
3213
Guido van Rossum234f9421993-06-17 12:35:49 +00003214static int
Tim Peters9f688bf2000-07-07 15:53:28 +00003215long_coerce(PyObject **pv, PyObject **pw)
Guido van Rossume6eefc21992-08-14 12:06:52 +00003216{
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003217 if (PyInt_Check(*pw)) {
Neil Schemenauerba872e22001-01-04 01:46:03 +00003218 *pw = PyLong_FromLong(PyInt_AS_LONG(*pw));
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003219 Py_INCREF(*pv);
Guido van Rossume6eefc21992-08-14 12:06:52 +00003220 return 0;
3221 }
Guido van Rossum1952e382001-09-19 01:25:16 +00003222 else if (PyLong_Check(*pw)) {
3223 Py_INCREF(*pv);
3224 Py_INCREF(*pw);
3225 return 0;
3226 }
Guido van Rossume6eefc21992-08-14 12:06:52 +00003227 return 1; /* Can't do it */
3228}
3229
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003230static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003231long_long(PyObject *v)
Guido van Rossum1899c2e1992-09-12 11:09:23 +00003232{
Brett Cannonc3647ac2005-04-26 03:45:26 +00003233 if (PyLong_CheckExact(v))
3234 Py_INCREF(v);
3235 else
3236 v = _PyLong_Copy((PyLongObject *)v);
Guido van Rossum1899c2e1992-09-12 11:09:23 +00003237 return v;
3238}
3239
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003240static PyObject *
Walter Dörwaldf1715402002-11-19 20:49:15 +00003241long_int(PyObject *v)
3242{
3243 long x;
3244 x = PyLong_AsLong(v);
3245 if (PyErr_Occurred()) {
3246 if (PyErr_ExceptionMatches(PyExc_OverflowError)) {
3247 PyErr_Clear();
3248 if (PyLong_CheckExact(v)) {
3249 Py_INCREF(v);
3250 return v;
3251 }
3252 else
3253 return _PyLong_Copy((PyLongObject *)v);
3254 }
3255 else
3256 return NULL;
3257 }
3258 return PyInt_FromLong(x);
3259}
3260
3261static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003262long_float(PyObject *v)
Guido van Rossum1899c2e1992-09-12 11:09:23 +00003263{
Guido van Rossum09e6ad01997-02-14 22:54:21 +00003264 double result;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003265 result = PyLong_AsDouble(v);
Tim Peters9fffa3e2001-09-04 05:14:19 +00003266 if (result == -1.0 && PyErr_Occurred())
3267 return NULL;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003268 return PyFloat_FromDouble(result);
Guido van Rossum1899c2e1992-09-12 11:09:23 +00003269}
3270
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003271static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003272long_oct(PyObject *v)
Guido van Rossum1899c2e1992-09-12 11:09:23 +00003273{
Fred Drake121ee271999-12-23 15:41:28 +00003274 return long_format(v, 8, 1);
Guido van Rossum1899c2e1992-09-12 11:09:23 +00003275}
3276
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003277static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003278long_hex(PyObject *v)
Guido van Rossum1899c2e1992-09-12 11:09:23 +00003279{
Fred Drake121ee271999-12-23 15:41:28 +00003280 return long_format(v, 16, 1);
Guido van Rossum1899c2e1992-09-12 11:09:23 +00003281}
Jeremy Hylton938ace62002-07-17 16:30:39 +00003282
3283static PyObject *
Guido van Rossumbef14172001-08-29 15:47:46 +00003284long_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
Guido van Rossum1899c2e1992-09-12 11:09:23 +00003285
Tim Peters6d6c1a32001-08-02 04:15:00 +00003286static PyObject *
3287long_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
3288{
3289 PyObject *x = NULL;
3290 int base = -909; /* unlikely! */
Martin v. Löwis15e62742006-02-27 16:46:16 +00003291 static char *kwlist[] = {"x", "base", 0};
Tim Peters6d6c1a32001-08-02 04:15:00 +00003292
Guido van Rossumbef14172001-08-29 15:47:46 +00003293 if (type != &PyLong_Type)
3294 return long_subtype_new(type, args, kwds); /* Wimp out */
Tim Peters6d6c1a32001-08-02 04:15:00 +00003295 if (!PyArg_ParseTupleAndKeywords(args, kwds, "|Oi:long", kwlist,
3296 &x, &base))
3297 return NULL;
3298 if (x == NULL)
3299 return PyLong_FromLong(0L);
3300 if (base == -909)
3301 return PyNumber_Long(x);
3302 else if (PyString_Check(x))
3303 return PyLong_FromString(PyString_AS_STRING(x), NULL, base);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00003304#ifdef Py_USING_UNICODE
Tim Peters6d6c1a32001-08-02 04:15:00 +00003305 else if (PyUnicode_Check(x))
3306 return PyLong_FromUnicode(PyUnicode_AS_UNICODE(x),
3307 PyUnicode_GET_SIZE(x),
3308 base);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00003309#endif
Tim Peters6d6c1a32001-08-02 04:15:00 +00003310 else {
3311 PyErr_SetString(PyExc_TypeError,
3312 "long() can't convert non-string with explicit base");
3313 return NULL;
3314 }
3315}
3316
Guido van Rossumbef14172001-08-29 15:47:46 +00003317/* Wimpy, slow approach to tp_new calls for subtypes of long:
3318 first create a regular long from whatever arguments we got,
3319 then allocate a subtype instance and initialize it from
3320 the regular long. The regular long is then thrown away.
3321*/
3322static PyObject *
3323long_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
3324{
Anthony Baxter377be112006-04-11 06:54:30 +00003325 PyLongObject *tmp, *newobj;
Martin v. Löwis18e16552006-02-15 17:27:45 +00003326 Py_ssize_t i, n;
Guido van Rossumbef14172001-08-29 15:47:46 +00003327
3328 assert(PyType_IsSubtype(type, &PyLong_Type));
3329 tmp = (PyLongObject *)long_new(&PyLong_Type, args, kwds);
3330 if (tmp == NULL)
3331 return NULL;
Tim Peters64b5ce32001-09-10 20:52:51 +00003332 assert(PyLong_CheckExact(tmp));
Guido van Rossumbef14172001-08-29 15:47:46 +00003333 n = tmp->ob_size;
3334 if (n < 0)
3335 n = -n;
Anthony Baxter377be112006-04-11 06:54:30 +00003336 newobj = (PyLongObject *)type->tp_alloc(type, n);
3337 if (newobj == NULL) {
Raymond Hettingerf4667932003-06-28 20:04:25 +00003338 Py_DECREF(tmp);
Guido van Rossumbef14172001-08-29 15:47:46 +00003339 return NULL;
Raymond Hettingerf4667932003-06-28 20:04:25 +00003340 }
Anthony Baxter377be112006-04-11 06:54:30 +00003341 assert(PyLong_Check(newobj));
3342 newobj->ob_size = tmp->ob_size;
Guido van Rossumbef14172001-08-29 15:47:46 +00003343 for (i = 0; i < n; i++)
Anthony Baxter377be112006-04-11 06:54:30 +00003344 newobj->ob_digit[i] = tmp->ob_digit[i];
Guido van Rossumbef14172001-08-29 15:47:46 +00003345 Py_DECREF(tmp);
Anthony Baxter377be112006-04-11 06:54:30 +00003346 return (PyObject *)newobj;
Guido van Rossumbef14172001-08-29 15:47:46 +00003347}
3348
Guido van Rossum5d9113d2003-01-29 17:58:45 +00003349static PyObject *
3350long_getnewargs(PyLongObject *v)
3351{
3352 return Py_BuildValue("(N)", _PyLong_Copy(v));
3353}
3354
3355static PyMethodDef long_methods[] = {
3356 {"__getnewargs__", (PyCFunction)long_getnewargs, METH_NOARGS},
3357 {NULL, NULL} /* sentinel */
3358};
3359
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003360PyDoc_STRVAR(long_doc,
Tim Peters6d6c1a32001-08-02 04:15:00 +00003361"long(x[, base]) -> integer\n\
3362\n\
3363Convert a string or number to a long integer, if possible. A floating\n\
3364point argument will be truncated towards zero (this does not include a\n\
3365string representation of a floating point number!) When converting a\n\
3366string, use the optional base. It is an error to supply a base when\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003367converting a non-string.");
Tim Peters6d6c1a32001-08-02 04:15:00 +00003368
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003369static PyNumberMethods long_as_number = {
Tim Peters9f688bf2000-07-07 15:53:28 +00003370 (binaryfunc) long_add, /*nb_add*/
3371 (binaryfunc) long_sub, /*nb_subtract*/
3372 (binaryfunc) long_mul, /*nb_multiply*/
Georg Brandl347b3002006-03-30 11:57:00 +00003373 long_classic_div, /*nb_divide*/
3374 long_mod, /*nb_remainder*/
3375 long_divmod, /*nb_divmod*/
3376 long_pow, /*nb_power*/
Tim Peters9f688bf2000-07-07 15:53:28 +00003377 (unaryfunc) long_neg, /*nb_negative*/
3378 (unaryfunc) long_pos, /*tp_positive*/
3379 (unaryfunc) long_abs, /*tp_absolute*/
3380 (inquiry) long_nonzero, /*tp_nonzero*/
3381 (unaryfunc) long_invert, /*nb_invert*/
Georg Brandl347b3002006-03-30 11:57:00 +00003382 long_lshift, /*nb_lshift*/
Tim Peters9f688bf2000-07-07 15:53:28 +00003383 (binaryfunc) long_rshift, /*nb_rshift*/
Georg Brandl347b3002006-03-30 11:57:00 +00003384 long_and, /*nb_and*/
3385 long_xor, /*nb_xor*/
3386 long_or, /*nb_or*/
3387 long_coerce, /*nb_coerce*/
3388 long_int, /*nb_int*/
3389 long_long, /*nb_long*/
3390 long_float, /*nb_float*/
3391 long_oct, /*nb_oct*/
3392 long_hex, /*nb_hex*/
Guido van Rossum4668b002001-08-08 05:00:18 +00003393 0, /* nb_inplace_add */
3394 0, /* nb_inplace_subtract */
3395 0, /* nb_inplace_multiply */
3396 0, /* nb_inplace_divide */
3397 0, /* nb_inplace_remainder */
3398 0, /* nb_inplace_power */
3399 0, /* nb_inplace_lshift */
3400 0, /* nb_inplace_rshift */
3401 0, /* nb_inplace_and */
3402 0, /* nb_inplace_xor */
3403 0, /* nb_inplace_or */
Georg Brandl347b3002006-03-30 11:57:00 +00003404 long_div, /* nb_floor_divide */
Guido van Rossum4668b002001-08-08 05:00:18 +00003405 long_true_divide, /* nb_true_divide */
3406 0, /* nb_inplace_floor_divide */
3407 0, /* nb_inplace_true_divide */
Georg Brandl347b3002006-03-30 11:57:00 +00003408 long_index, /* nb_index */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003409};
3410
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003411PyTypeObject PyLong_Type = {
3412 PyObject_HEAD_INIT(&PyType_Type)
Tim Peters6d6c1a32001-08-02 04:15:00 +00003413 0, /* ob_size */
3414 "long", /* tp_name */
3415 sizeof(PyLongObject) - sizeof(digit), /* tp_basicsize */
3416 sizeof(digit), /* tp_itemsize */
Georg Brandl347b3002006-03-30 11:57:00 +00003417 long_dealloc, /* tp_dealloc */
Tim Peters6d6c1a32001-08-02 04:15:00 +00003418 0, /* tp_print */
3419 0, /* tp_getattr */
3420 0, /* tp_setattr */
3421 (cmpfunc)long_compare, /* tp_compare */
Georg Brandl347b3002006-03-30 11:57:00 +00003422 long_repr, /* tp_repr */
Tim Peters6d6c1a32001-08-02 04:15:00 +00003423 &long_as_number, /* tp_as_number */
3424 0, /* tp_as_sequence */
3425 0, /* tp_as_mapping */
3426 (hashfunc)long_hash, /* tp_hash */
3427 0, /* tp_call */
Georg Brandl347b3002006-03-30 11:57:00 +00003428 long_str, /* tp_str */
Tim Peters6d6c1a32001-08-02 04:15:00 +00003429 PyObject_GenericGetAttr, /* tp_getattro */
3430 0, /* tp_setattro */
3431 0, /* tp_as_buffer */
Guido van Rossumbef14172001-08-29 15:47:46 +00003432 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES |
3433 Py_TPFLAGS_BASETYPE, /* tp_flags */
Tim Peters6d6c1a32001-08-02 04:15:00 +00003434 long_doc, /* tp_doc */
3435 0, /* tp_traverse */
3436 0, /* tp_clear */
3437 0, /* tp_richcompare */
3438 0, /* tp_weaklistoffset */
3439 0, /* tp_iter */
3440 0, /* tp_iternext */
Guido van Rossum5d9113d2003-01-29 17:58:45 +00003441 long_methods, /* tp_methods */
Tim Peters6d6c1a32001-08-02 04:15:00 +00003442 0, /* tp_members */
3443 0, /* tp_getset */
3444 0, /* tp_base */
3445 0, /* tp_dict */
3446 0, /* tp_descr_get */
3447 0, /* tp_descr_set */
3448 0, /* tp_dictoffset */
3449 0, /* tp_init */
3450 0, /* tp_alloc */
3451 long_new, /* tp_new */
Neil Schemenaueraa769ae2002-04-12 02:44:10 +00003452 PyObject_Del, /* tp_free */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003453};