]> git.proxmox.com Git - mirror_edk2.git/blame - AppPkg/Applications/Python/PyMod-2.7.2/Objects/longobject.c
AppPkg|Python: Files from the Python 2.7.2 distribution that must be modified to...
[mirror_edk2.git] / AppPkg / Applications / Python / PyMod-2.7.2 / Objects / longobject.c
CommitLineData
6c0ebd5f 1/* Long (arbitrary precision) integer object implementation */\r
2\r
3/* XXX The functional organization of this file is terrible */\r
4\r
5#include "Python.h"\r
6#include "longintrepr.h"\r
7#include "structseq.h"\r
8\r
9#include <float.h>\r
10#include <ctype.h>\r
11#include <stddef.h>\r
12\r
13/* For long multiplication, use the O(N**2) school algorithm unless\r
14 * both operands contain more than KARATSUBA_CUTOFF digits (this\r
15 * being an internal Python long digit, in base PyLong_BASE).\r
16 */\r
17#define KARATSUBA_CUTOFF 70\r
18#define KARATSUBA_SQUARE_CUTOFF (2 * KARATSUBA_CUTOFF)\r
19\r
20/* For exponentiation, use the binary left-to-right algorithm\r
21 * unless the exponent contains more than FIVEARY_CUTOFF digits.\r
22 * In that case, do 5 bits at a time. The potential drawback is that\r
23 * a table of 2**5 intermediate results is computed.\r
24 */\r
25#define FIVEARY_CUTOFF 8\r
26\r
27#ifndef ABS\r
28 #define ABS(x) ((x) < 0 ? -(x) : (x))\r
29#endif\r
30\r
31#ifndef MAX\r
32 #define MAX(x, y) ((x) < (y) ? (y) : (x))\r
33#endif\r
34\r
35#ifndef MIN\r
36 #define MIN(x, y) ((x) > (y) ? (y) : (x))\r
37#endif\r
38\r
39#define SIGCHECK(PyTryBlock) \\r
40 do { \\r
41 if (--_Py_Ticker < 0) { \\r
42 _Py_Ticker = _Py_CheckInterval; \\r
43 if (PyErr_CheckSignals()) PyTryBlock \\r
44 } \\r
45 } while(0)\r
46\r
47/* Normalize (remove leading zeros from) a long int object.\r
48 Doesn't attempt to free the storage--in most cases, due to the nature\r
49 of the algorithms used, this could save at most be one word anyway. */\r
50\r
51static PyLongObject *\r
52long_normalize(register PyLongObject *v)\r
53{\r
54 Py_ssize_t j = ABS(Py_SIZE(v));\r
55 Py_ssize_t i = j;\r
56\r
57 while (i > 0 && v->ob_digit[i-1] == 0)\r
58 --i;\r
59 if (i != j)\r
60 Py_SIZE(v) = (Py_SIZE(v) < 0) ? -(i) : i;\r
61 return v;\r
62}\r
63\r
64/* Allocate a new long int object with size digits.\r
65 Return NULL and set exception if we run out of memory. */\r
66\r
67#define MAX_LONG_DIGITS \\r
68 ((PY_SSIZE_T_MAX - offsetof(PyLongObject, ob_digit))/sizeof(digit))\r
69\r
70PyLongObject *\r
71_PyLong_New(Py_ssize_t size)\r
72{\r
73 if (size > (Py_ssize_t)MAX_LONG_DIGITS) {\r
74 PyErr_SetString(PyExc_OverflowError,\r
75 "too many digits in integer");\r
76 return NULL;\r
77 }\r
78 /* coverity[ampersand_in_size] */\r
79 /* XXX(nnorwitz): PyObject_NEW_VAR / _PyObject_VAR_SIZE need to detect\r
80 overflow */\r
81 return PyObject_NEW_VAR(PyLongObject, &PyLong_Type, size);\r
82}\r
83\r
84PyObject *\r
85_PyLong_Copy(PyLongObject *src)\r
86{\r
87 PyLongObject *result;\r
88 Py_ssize_t i;\r
89\r
90 assert(src != NULL);\r
91 i = src->ob_size;\r
92 if (i < 0)\r
93 i = -(i);\r
94 result = _PyLong_New(i);\r
95 if (result != NULL) {\r
96 result->ob_size = src->ob_size;\r
97 while (--i >= 0)\r
98 result->ob_digit[i] = src->ob_digit[i];\r
99 }\r
100 return (PyObject *)result;\r
101}\r
102\r
103/* Create a new long int object from a C long int */\r
104\r
105PyObject *\r
106PyLong_FromLong(long ival)\r
107{\r
108 PyLongObject *v;\r
109 unsigned long abs_ival;\r
110 unsigned long t; /* unsigned so >> doesn't propagate sign bit */\r
111 int ndigits = 0;\r
112 int negative = 0;\r
113\r
114 if (ival < 0) {\r
115 /* if LONG_MIN == -LONG_MAX-1 (true on most platforms) then\r
116 ANSI C says that the result of -ival is undefined when ival\r
117 == LONG_MIN. Hence the following workaround. */\r
118 abs_ival = (unsigned long)(-1-ival) + 1;\r
119 negative = 1;\r
120 }\r
121 else {\r
122 abs_ival = (unsigned long)ival;\r
123 }\r
124\r
125 /* Count the number of Python digits.\r
126 We used to pick 5 ("big enough for anything"), but that's a\r
127 waste of time and space given that 5*15 = 75 bits are rarely\r
128 needed. */\r
129 t = abs_ival;\r
130 while (t) {\r
131 ++ndigits;\r
132 t >>= PyLong_SHIFT;\r
133 }\r
134 v = _PyLong_New(ndigits);\r
135 if (v != NULL) {\r
136 digit *p = v->ob_digit;\r
137 v->ob_size = negative ? -ndigits : ndigits;\r
138 t = abs_ival;\r
139 while (t) {\r
140 *p++ = (digit)(t & PyLong_MASK);\r
141 t >>= PyLong_SHIFT;\r
142 }\r
143 }\r
144 return (PyObject *)v;\r
145}\r
146\r
147/* Create a new long int object from a C unsigned long int */\r
148\r
149PyObject *\r
150PyLong_FromUnsignedLong(unsigned long ival)\r
151{\r
152 PyLongObject *v;\r
153 unsigned long t;\r
154 int ndigits = 0;\r
155\r
156 /* Count the number of Python digits. */\r
157 t = (unsigned long)ival;\r
158 while (t) {\r
159 ++ndigits;\r
160 t >>= PyLong_SHIFT;\r
161 }\r
162 v = _PyLong_New(ndigits);\r
163 if (v != NULL) {\r
164 digit *p = v->ob_digit;\r
165 Py_SIZE(v) = ndigits;\r
166 while (ival) {\r
167 *p++ = (digit)(ival & PyLong_MASK);\r
168 ival >>= PyLong_SHIFT;\r
169 }\r
170 }\r
171 return (PyObject *)v;\r
172}\r
173\r
174/* Create a new long int object from a C double */\r
175\r
176PyObject *\r
177PyLong_FromDouble(double dval)\r
178{\r
179 PyLongObject *v;\r
180 double frac;\r
181 int i, ndig, expo, neg;\r
182 neg = 0;\r
183 if (Py_IS_INFINITY(dval)) {\r
184 PyErr_SetString(PyExc_OverflowError,\r
185 "cannot convert float infinity to integer");\r
186 return NULL;\r
187 }\r
188 if (Py_IS_NAN(dval)) {\r
189 PyErr_SetString(PyExc_ValueError,\r
190 "cannot convert float NaN to integer");\r
191 return NULL;\r
192 }\r
193 if (dval < 0.0) {\r
194 neg = 1;\r
195 dval = -dval;\r
196 }\r
197 frac = frexp(dval, &expo); /* dval = frac*2**expo; 0.0 <= frac < 1.0 */\r
198 if (expo <= 0)\r
199 return PyLong_FromLong(0L);\r
200 ndig = (expo-1) / PyLong_SHIFT + 1; /* Number of 'digits' in result */\r
201 v = _PyLong_New(ndig);\r
202 if (v == NULL)\r
203 return NULL;\r
204 frac = ldexp(frac, (expo-1) % PyLong_SHIFT + 1);\r
205 for (i = ndig; --i >= 0; ) {\r
206 digit bits = (digit)frac;\r
207 v->ob_digit[i] = bits;\r
208 frac = frac - (double)bits;\r
209 frac = ldexp(frac, PyLong_SHIFT);\r
210 }\r
211 if (neg)\r
212 Py_SIZE(v) = -(Py_SIZE(v));\r
213 return (PyObject *)v;\r
214}\r
215\r
216/* Checking for overflow in PyLong_AsLong is a PITA since C doesn't define\r
217 * anything about what happens when a signed integer operation overflows,\r
218 * and some compilers think they're doing you a favor by being "clever"\r
219 * then. The bit pattern for the largest postive signed long is\r
220 * (unsigned long)LONG_MAX, and for the smallest negative signed long\r
221 * it is abs(LONG_MIN), which we could write -(unsigned long)LONG_MIN.\r
222 * However, some other compilers warn about applying unary minus to an\r
223 * unsigned operand. Hence the weird "0-".\r
224 */\r
225#define PY_ABS_LONG_MIN (0-(unsigned long)LONG_MIN)\r
226#define PY_ABS_SSIZE_T_MIN (0-(size_t)PY_SSIZE_T_MIN)\r
227\r
228/* Get a C long int from a Python long or Python int object.\r
229 On overflow, returns -1 and sets *overflow to 1 or -1 depending\r
230 on the sign of the result. Otherwise *overflow is 0.\r
231\r
232 For other errors (e.g., type error), returns -1 and sets an error\r
233 condition.\r
234*/\r
235\r
236long\r
237PyLong_AsLongAndOverflow(PyObject *vv, int *overflow)\r
238{\r
239 /* This version by Tim Peters */\r
240 register PyLongObject *v;\r
241 unsigned long x, prev;\r
242 long res;\r
243 Py_ssize_t i;\r
244 int sign;\r
245 int do_decref = 0; /* if nb_int was called */\r
246\r
247 *overflow = 0;\r
248 if (vv == NULL) {\r
249 PyErr_BadInternalCall();\r
250 return -1;\r
251 }\r
252\r
253 if(PyInt_Check(vv))\r
254 return PyInt_AsLong(vv);\r
255\r
256 if (!PyLong_Check(vv)) {\r
257 PyNumberMethods *nb;\r
258 nb = vv->ob_type->tp_as_number;\r
259 if (nb == NULL || nb->nb_int == NULL) {\r
260 PyErr_SetString(PyExc_TypeError,\r
261 "an integer is required");\r
262 return -1;\r
263 }\r
264 vv = (*nb->nb_int) (vv);\r
265 if (vv == NULL)\r
266 return -1;\r
267 do_decref = 1;\r
268 if(PyInt_Check(vv)) {\r
269 res = PyInt_AsLong(vv);\r
270 goto exit;\r
271 }\r
272 if (!PyLong_Check(vv)) {\r
273 Py_DECREF(vv);\r
274 PyErr_SetString(PyExc_TypeError,\r
275 "nb_int should return int object");\r
276 return -1;\r
277 }\r
278 }\r
279\r
280 res = -1;\r
281 v = (PyLongObject *)vv;\r
282 i = Py_SIZE(v);\r
283\r
284 switch (i) {\r
285 case -1:\r
286 res = -(sdigit)v->ob_digit[0];\r
287 break;\r
288 case 0:\r
289 res = 0;\r
290 break;\r
291 case 1:\r
292 res = v->ob_digit[0];\r
293 break;\r
294 default:\r
295 sign = 1;\r
296 x = 0;\r
297 if (i < 0) {\r
298 sign = -1;\r
299 i = -(i);\r
300 }\r
301 while (--i >= 0) {\r
302 prev = x;\r
303 x = (x << PyLong_SHIFT) + v->ob_digit[i];\r
304 if ((x >> PyLong_SHIFT) != prev) {\r
305 *overflow = sign;\r
306 goto exit;\r
307 }\r
308 }\r
309 /* Haven't lost any bits, but casting to long requires extra\r
310 * care (see comment above).\r
311 */\r
312 if (x <= (unsigned long)LONG_MAX) {\r
313 res = (long)x * sign;\r
314 }\r
315 else if (sign < 0 && x == PY_ABS_LONG_MIN) {\r
316 res = LONG_MIN;\r
317 }\r
318 else {\r
319 *overflow = sign;\r
320 /* res is already set to -1 */\r
321 }\r
322 }\r
323 exit:\r
324 if (do_decref) {\r
325 Py_DECREF(vv);\r
326 }\r
327 return res;\r
328}\r
329\r
330/* Get a C long int from a long int object.\r
331 Returns -1 and sets an error condition if overflow occurs. */\r
332\r
333long\r
334PyLong_AsLong(PyObject *obj)\r
335{\r
336 int overflow;\r
337 long result = PyLong_AsLongAndOverflow(obj, &overflow);\r
338 if (overflow) {\r
339 /* XXX: could be cute and give a different\r
340 message for overflow == -1 */\r
341 PyErr_SetString(PyExc_OverflowError,\r
342 "Python int too large to convert to C long");\r
343 }\r
344 return result;\r
345}\r
346\r
347/* Get a Py_ssize_t from a long int object.\r
348 Returns -1 and sets an error condition if overflow occurs. */\r
349\r
350Py_ssize_t\r
351PyLong_AsSsize_t(PyObject *vv) {\r
352 register PyLongObject *v;\r
353 size_t x, prev;\r
354 Py_ssize_t i;\r
355 int sign;\r
356\r
357 if (vv == NULL || !PyLong_Check(vv)) {\r
358 PyErr_BadInternalCall();\r
359 return -1;\r
360 }\r
361 v = (PyLongObject *)vv;\r
362 i = v->ob_size;\r
363 sign = 1;\r
364 x = 0;\r
365 if (i < 0) {\r
366 sign = -1;\r
367 i = -(i);\r
368 }\r
369 while (--i >= 0) {\r
370 prev = x;\r
371 x = (x << PyLong_SHIFT) | v->ob_digit[i];\r
372 if ((x >> PyLong_SHIFT) != prev)\r
373 goto overflow;\r
374 }\r
375 /* Haven't lost any bits, but casting to a signed type requires\r
376 * extra care (see comment above).\r
377 */\r
378 if (x <= (size_t)PY_SSIZE_T_MAX) {\r
379 return (Py_ssize_t)x * sign;\r
380 }\r
381 else if (sign < 0 && x == PY_ABS_SSIZE_T_MIN) {\r
382 return PY_SSIZE_T_MIN;\r
383 }\r
384 /* else overflow */\r
385\r
386 overflow:\r
387 PyErr_SetString(PyExc_OverflowError,\r
388 "long int too large to convert to int");\r
389 return -1;\r
390}\r
391\r
392/* Get a C unsigned long int from a long int object.\r
393 Returns -1 and sets an error condition if overflow occurs. */\r
394\r
395unsigned long\r
396PyLong_AsUnsignedLong(PyObject *vv)\r
397{\r
398 register PyLongObject *v;\r
399 unsigned long x, prev;\r
400 Py_ssize_t i;\r
401\r
402 if (vv == NULL || !PyLong_Check(vv)) {\r
403 if (vv != NULL && PyInt_Check(vv)) {\r
404 long val = PyInt_AsLong(vv);\r
405 if (val < 0) {\r
406 PyErr_SetString(PyExc_OverflowError,\r
407 "can't convert negative value "\r
408 "to unsigned long");\r
409 return (unsigned long) -1;\r
410 }\r
411 return val;\r
412 }\r
413 PyErr_BadInternalCall();\r
414 return (unsigned long) -1;\r
415 }\r
416 v = (PyLongObject *)vv;\r
417 i = Py_SIZE(v);\r
418 x = 0;\r
419 if (i < 0) {\r
420 PyErr_SetString(PyExc_OverflowError,\r
421 "can't convert negative value to unsigned long");\r
422 return (unsigned long) -1;\r
423 }\r
424 while (--i >= 0) {\r
425 prev = x;\r
426 x = (x << PyLong_SHIFT) | v->ob_digit[i];\r
427 if ((x >> PyLong_SHIFT) != prev) {\r
428 PyErr_SetString(PyExc_OverflowError,\r
429 "long int too large to convert");\r
430 return (unsigned long) -1;\r
431 }\r
432 }\r
433 return x;\r
434}\r
435\r
436/* Get a C unsigned long int from a long int object, ignoring the high bits.\r
437 Returns -1 and sets an error condition if an error occurs. */\r
438\r
439unsigned long\r
440PyLong_AsUnsignedLongMask(PyObject *vv)\r
441{\r
442 register PyLongObject *v;\r
443 unsigned long x;\r
444 Py_ssize_t i;\r
445 int sign;\r
446\r
447 if (vv == NULL || !PyLong_Check(vv)) {\r
448 if (vv != NULL && PyInt_Check(vv))\r
449 return PyInt_AsUnsignedLongMask(vv);\r
450 PyErr_BadInternalCall();\r
451 return (unsigned long) -1;\r
452 }\r
453 v = (PyLongObject *)vv;\r
454 i = v->ob_size;\r
455 sign = 1;\r
456 x = 0;\r
457 if (i < 0) {\r
458 sign = -1;\r
459 i = -i;\r
460 }\r
461 while (--i >= 0) {\r
462 x = (x << PyLong_SHIFT) | v->ob_digit[i];\r
463 }\r
464 return x * sign;\r
465}\r
466\r
467int\r
468_PyLong_Sign(PyObject *vv)\r
469{\r
470 PyLongObject *v = (PyLongObject *)vv;\r
471\r
472 assert(v != NULL);\r
473 assert(PyLong_Check(v));\r
474\r
475 return Py_SIZE(v) == 0 ? 0 : (Py_SIZE(v) < 0 ? -1 : 1);\r
476}\r
477\r
478size_t\r
479_PyLong_NumBits(PyObject *vv)\r
480{\r
481 PyLongObject *v = (PyLongObject *)vv;\r
482 size_t result = 0;\r
483 Py_ssize_t ndigits;\r
484\r
485 assert(v != NULL);\r
486 assert(PyLong_Check(v));\r
487 ndigits = ABS(Py_SIZE(v));\r
488 assert(ndigits == 0 || v->ob_digit[ndigits - 1] != 0);\r
489 if (ndigits > 0) {\r
490 digit msd = v->ob_digit[ndigits - 1];\r
491\r
492 result = (ndigits - 1) * PyLong_SHIFT;\r
493 if (result / PyLong_SHIFT != (size_t)(ndigits - 1))\r
494 goto Overflow;\r
495 do {\r
496 ++result;\r
497 if (result == 0)\r
498 goto Overflow;\r
499 msd >>= 1;\r
500 } while (msd);\r
501 }\r
502 return result;\r
503\r
504 Overflow:\r
505 PyErr_SetString(PyExc_OverflowError, "long has too many bits "\r
506 "to express in a platform size_t");\r
507 return (size_t)-1;\r
508}\r
509\r
510PyObject *\r
511_PyLong_FromByteArray(const unsigned char* bytes, size_t n,\r
512 int little_endian, int is_signed)\r
513{\r
514 const unsigned char* pstartbyte; /* LSB of bytes */\r
515 int incr; /* direction to move pstartbyte */\r
516 const unsigned char* pendbyte; /* MSB of bytes */\r
517 size_t numsignificantbytes; /* number of bytes that matter */\r
518 Py_ssize_t ndigits; /* number of Python long digits */\r
519 PyLongObject* v; /* result */\r
520 Py_ssize_t idigit = 0; /* next free index in v->ob_digit */\r
521\r
522 if (n == 0)\r
523 return PyLong_FromLong(0L);\r
524\r
525 if (little_endian) {\r
526 pstartbyte = bytes;\r
527 pendbyte = bytes + n - 1;\r
528 incr = 1;\r
529 }\r
530 else {\r
531 pstartbyte = bytes + n - 1;\r
532 pendbyte = bytes;\r
533 incr = -1;\r
534 }\r
535\r
536 if (is_signed)\r
537 is_signed = *pendbyte >= 0x80;\r
538\r
539 /* Compute numsignificantbytes. This consists of finding the most\r
540 significant byte. Leading 0 bytes are insignificant if the number\r
541 is positive, and leading 0xff bytes if negative. */\r
542 {\r
543 size_t i;\r
544 const unsigned char* p = pendbyte;\r
545 const int pincr = -incr; /* search MSB to LSB */\r
546 const unsigned char insignficant = is_signed ? 0xff : 0x00;\r
547\r
548 for (i = 0; i < n; ++i, p += pincr) {\r
549 if (*p != insignficant)\r
550 break;\r
551 }\r
552 numsignificantbytes = n - i;\r
553 /* 2's-comp is a bit tricky here, e.g. 0xff00 == -0x0100, so\r
554 actually has 2 significant bytes. OTOH, 0xff0001 ==\r
555 -0x00ffff, so we wouldn't *need* to bump it there; but we\r
556 do for 0xffff = -0x0001. To be safe without bothering to\r
557 check every case, bump it regardless. */\r
558 if (is_signed && numsignificantbytes < n)\r
559 ++numsignificantbytes;\r
560 }\r
561\r
562 /* How many Python long digits do we need? We have\r
563 8*numsignificantbytes bits, and each Python long digit has\r
564 PyLong_SHIFT bits, so it's the ceiling of the quotient. */\r
565 /* catch overflow before it happens */\r
566 if (numsignificantbytes > (PY_SSIZE_T_MAX - PyLong_SHIFT) / 8) {\r
567 PyErr_SetString(PyExc_OverflowError,\r
568 "byte array too long to convert to int");\r
569 return NULL;\r
570 }\r
571 ndigits = (numsignificantbytes * 8 + PyLong_SHIFT - 1) / PyLong_SHIFT;\r
572 v = _PyLong_New(ndigits);\r
573 if (v == NULL)\r
574 return NULL;\r
575\r
576 /* Copy the bits over. The tricky parts are computing 2's-comp on\r
577 the fly for signed numbers, and dealing with the mismatch between\r
578 8-bit bytes and (probably) 15-bit Python digits.*/\r
579 {\r
580 size_t i;\r
581 twodigits carry = 1; /* for 2's-comp calculation */\r
582 twodigits accum = 0; /* sliding register */\r
583 unsigned int accumbits = 0; /* number of bits in accum */\r
584 const unsigned char* p = pstartbyte;\r
585\r
586 for (i = 0; i < numsignificantbytes; ++i, p += incr) {\r
587 twodigits thisbyte = *p;\r
588 /* Compute correction for 2's comp, if needed. */\r
589 if (is_signed) {\r
590 thisbyte = (0xff ^ thisbyte) + carry;\r
591 carry = thisbyte >> 8;\r
592 thisbyte &= 0xff;\r
593 }\r
594 /* Because we're going LSB to MSB, thisbyte is\r
595 more significant than what's already in accum,\r
596 so needs to be prepended to accum. */\r
597 accum |= (twodigits)thisbyte << accumbits;\r
598 accumbits += 8;\r
599 if (accumbits >= PyLong_SHIFT) {\r
600 /* There's enough to fill a Python digit. */\r
601 assert(idigit < ndigits);\r
602 v->ob_digit[idigit] = (digit)(accum & PyLong_MASK);\r
603 ++idigit;\r
604 accum >>= PyLong_SHIFT;\r
605 accumbits -= PyLong_SHIFT;\r
606 assert(accumbits < PyLong_SHIFT);\r
607 }\r
608 }\r
609 assert(accumbits < PyLong_SHIFT);\r
610 if (accumbits) {\r
611 assert(idigit < ndigits);\r
612 v->ob_digit[idigit] = (digit)accum;\r
613 ++idigit;\r
614 }\r
615 }\r
616\r
617 Py_SIZE(v) = is_signed ? -idigit : idigit;\r
618 return (PyObject *)long_normalize(v);\r
619}\r
620\r
621int\r
622_PyLong_AsByteArray(PyLongObject* v,\r
623 unsigned char* bytes, size_t n,\r
624 int little_endian, int is_signed)\r
625{\r
626 Py_ssize_t i; /* index into v->ob_digit */\r
627 Py_ssize_t ndigits; /* |v->ob_size| */\r
628 twodigits accum; /* sliding register */\r
629 unsigned int accumbits; /* # bits in accum */\r
630 int do_twos_comp; /* store 2's-comp? is_signed and v < 0 */\r
631 digit carry; /* for computing 2's-comp */\r
632 size_t j; /* # bytes filled */\r
633 unsigned char* p; /* pointer to next byte in bytes */\r
634 int pincr; /* direction to move p */\r
635\r
636 assert(v != NULL && PyLong_Check(v));\r
637\r
638 if (Py_SIZE(v) < 0) {\r
639 ndigits = -(Py_SIZE(v));\r
640 if (!is_signed) {\r
641 PyErr_SetString(PyExc_OverflowError,\r
642 "can't convert negative long to unsigned");\r
643 return -1;\r
644 }\r
645 do_twos_comp = 1;\r
646 }\r
647 else {\r
648 ndigits = Py_SIZE(v);\r
649 do_twos_comp = 0;\r
650 }\r
651\r
652 if (little_endian) {\r
653 p = bytes;\r
654 pincr = 1;\r
655 }\r
656 else {\r
657 p = bytes + n - 1;\r
658 pincr = -1;\r
659 }\r
660\r
661 /* Copy over all the Python digits.\r
662 It's crucial that every Python digit except for the MSD contribute\r
663 exactly PyLong_SHIFT bits to the total, so first assert that the long is\r
664 normalized. */\r
665 assert(ndigits == 0 || v->ob_digit[ndigits - 1] != 0);\r
666 j = 0;\r
667 accum = 0;\r
668 accumbits = 0;\r
669 carry = do_twos_comp ? 1 : 0;\r
670 for (i = 0; i < ndigits; ++i) {\r
671 digit thisdigit = v->ob_digit[i];\r
672 if (do_twos_comp) {\r
673 thisdigit = (thisdigit ^ PyLong_MASK) + carry;\r
674 carry = thisdigit >> PyLong_SHIFT;\r
675 thisdigit &= PyLong_MASK;\r
676 }\r
677 /* Because we're going LSB to MSB, thisdigit is more\r
678 significant than what's already in accum, so needs to be\r
679 prepended to accum. */\r
680 accum |= (twodigits)thisdigit << accumbits;\r
681\r
682 /* The most-significant digit may be (probably is) at least\r
683 partly empty. */\r
684 if (i == ndigits - 1) {\r
685 /* Count # of sign bits -- they needn't be stored,\r
686 * although for signed conversion we need later to\r
687 * make sure at least one sign bit gets stored. */\r
688 digit s = do_twos_comp ? thisdigit ^ PyLong_MASK : thisdigit;\r
689 while (s != 0) {\r
690 s >>= 1;\r
691 accumbits++;\r
692 }\r
693 }\r
694 else\r
695 accumbits += PyLong_SHIFT;\r
696\r
697 /* Store as many bytes as possible. */\r
698 while (accumbits >= 8) {\r
699 if (j >= n)\r
700 goto Overflow;\r
701 ++j;\r
702 *p = (unsigned char)(accum & 0xff);\r
703 p += pincr;\r
704 accumbits -= 8;\r
705 accum >>= 8;\r
706 }\r
707 }\r
708\r
709 /* Store the straggler (if any). */\r
710 assert(accumbits < 8);\r
711 assert(carry == 0); /* else do_twos_comp and *every* digit was 0 */\r
712 if (accumbits > 0) {\r
713 if (j >= n)\r
714 goto Overflow;\r
715 ++j;\r
716 if (do_twos_comp) {\r
717 /* Fill leading bits of the byte with sign bits\r
718 (appropriately pretending that the long had an\r
719 infinite supply of sign bits). */\r
720 accum |= (~(twodigits)0) << accumbits;\r
721 }\r
722 *p = (unsigned char)(accum & 0xff);\r
723 p += pincr;\r
724 }\r
725 else if (j == n && n > 0 && is_signed) {\r
726 /* The main loop filled the byte array exactly, so the code\r
727 just above didn't get to ensure there's a sign bit, and the\r
728 loop below wouldn't add one either. Make sure a sign bit\r
729 exists. */\r
730 unsigned char msb = *(p - pincr);\r
731 int sign_bit_set = msb >= 0x80;\r
732 assert(accumbits == 0);\r
733 if (sign_bit_set == do_twos_comp)\r
734 return 0;\r
735 else\r
736 goto Overflow;\r
737 }\r
738\r
739 /* Fill remaining bytes with copies of the sign bit. */\r
740 {\r
741 unsigned char signbyte = do_twos_comp ? 0xffU : 0U;\r
742 for ( ; j < n; ++j, p += pincr)\r
743 *p = signbyte;\r
744 }\r
745\r
746 return 0;\r
747\r
748 Overflow:\r
749 PyErr_SetString(PyExc_OverflowError, "long too big to convert");\r
750 return -1;\r
751\r
752}\r
753\r
754/* Create a new long (or int) object from a C pointer */\r
755\r
756PyObject *\r
757PyLong_FromVoidPtr(void *p)\r
758{\r
759#if SIZEOF_VOID_P <= SIZEOF_LONG\r
760 if ((long)p < 0)\r
761 return PyLong_FromUnsignedLong((unsigned long)p);\r
762 return PyInt_FromLong((long)p);\r
763#else\r
764\r
765#ifndef HAVE_LONG_LONG\r
766# error "PyLong_FromVoidPtr: sizeof(void*) > sizeof(long), but no long long"\r
767#endif\r
768#if SIZEOF_LONG_LONG < SIZEOF_VOID_P\r
769# error "PyLong_FromVoidPtr: sizeof(PY_LONG_LONG) < sizeof(void*)"\r
770#endif\r
771 /* optimize null pointers */\r
772 if (p == NULL)\r
773 return PyInt_FromLong(0);\r
774 return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG)p);\r
775\r
776#endif /* SIZEOF_VOID_P <= SIZEOF_LONG */\r
777}\r
778\r
779/* Get a C pointer from a long object (or an int object in some cases) */\r
780\r
781void *\r
782PyLong_AsVoidPtr(PyObject *vv)\r
783{\r
784 /* This function will allow int or long objects. If vv is neither,\r
785 then the PyLong_AsLong*() functions will raise the exception:\r
786 PyExc_SystemError, "bad argument to internal function"\r
787 */\r
788#if SIZEOF_VOID_P <= SIZEOF_LONG\r
789 long x;\r
790\r
791 if (PyInt_Check(vv))\r
792 x = PyInt_AS_LONG(vv);\r
793 else if (PyLong_Check(vv) && _PyLong_Sign(vv) < 0)\r
794 x = PyLong_AsLong(vv);\r
795 else\r
796 x = PyLong_AsUnsignedLong(vv);\r
797#else\r
798\r
799#ifndef HAVE_LONG_LONG\r
800# error "PyLong_AsVoidPtr: sizeof(void*) > sizeof(long), but no long long"\r
801#endif\r
802#if SIZEOF_LONG_LONG < SIZEOF_VOID_P\r
803# error "PyLong_AsVoidPtr: sizeof(PY_LONG_LONG) < sizeof(void*)"\r
804#endif\r
805 PY_LONG_LONG x;\r
806\r
807 if (PyInt_Check(vv))\r
808 x = PyInt_AS_LONG(vv);\r
809 else if (PyLong_Check(vv) && _PyLong_Sign(vv) < 0)\r
810 x = PyLong_AsLongLong(vv);\r
811 else\r
812 x = PyLong_AsUnsignedLongLong(vv);\r
813\r
814#endif /* SIZEOF_VOID_P <= SIZEOF_LONG */\r
815\r
816 if (x == -1 && PyErr_Occurred())\r
817 return NULL;\r
818 return (void *)x;\r
819}\r
820\r
821#ifdef HAVE_LONG_LONG\r
822\r
823/* Initial PY_LONG_LONG support by Chris Herborth (chrish@qnx.com), later\r
824 * rewritten to use the newer PyLong_{As,From}ByteArray API.\r
825 */\r
826\r
827#define IS_LITTLE_ENDIAN (int)*(unsigned char*)&one\r
828#define PY_ABS_LLONG_MIN (0-(unsigned PY_LONG_LONG)PY_LLONG_MIN)\r
829\r
830/* Create a new long int object from a C PY_LONG_LONG int. */\r
831\r
832PyObject *\r
833PyLong_FromLongLong(PY_LONG_LONG ival)\r
834{\r
835 PyLongObject *v;\r
836 unsigned PY_LONG_LONG abs_ival;\r
837 unsigned PY_LONG_LONG t; /* unsigned so >> doesn't propagate sign bit */\r
838 int ndigits = 0;\r
839 int negative = 0;\r
840\r
841 if (ival < 0) {\r
842 /* avoid signed overflow on negation; see comments\r
843 in PyLong_FromLong above. */\r
844 abs_ival = (unsigned PY_LONG_LONG)(-1-ival) + 1;\r
845 negative = 1;\r
846 }\r
847 else {\r
848 abs_ival = (unsigned PY_LONG_LONG)ival;\r
849 }\r
850\r
851 /* Count the number of Python digits.\r
852 We used to pick 5 ("big enough for anything"), but that's a\r
853 waste of time and space given that 5*15 = 75 bits are rarely\r
854 needed. */\r
855 t = abs_ival;\r
856 while (t) {\r
857 ++ndigits;\r
858 t >>= PyLong_SHIFT;\r
859 }\r
860 v = _PyLong_New(ndigits);\r
861 if (v != NULL) {\r
862 digit *p = v->ob_digit;\r
863 Py_SIZE(v) = negative ? -ndigits : ndigits;\r
864 t = abs_ival;\r
865 while (t) {\r
866 *p++ = (digit)(t & PyLong_MASK);\r
867 t >>= PyLong_SHIFT;\r
868 }\r
869 }\r
870 return (PyObject *)v;\r
871}\r
872\r
873/* Create a new long int object from a C unsigned PY_LONG_LONG int. */\r
874\r
875PyObject *\r
876PyLong_FromUnsignedLongLong(unsigned PY_LONG_LONG ival)\r
877{\r
878 PyLongObject *v;\r
879 unsigned PY_LONG_LONG t;\r
880 int ndigits = 0;\r
881\r
882 /* Count the number of Python digits. */\r
883 t = (unsigned PY_LONG_LONG)ival;\r
884 while (t) {\r
885 ++ndigits;\r
886 t >>= PyLong_SHIFT;\r
887 }\r
888 v = _PyLong_New(ndigits);\r
889 if (v != NULL) {\r
890 digit *p = v->ob_digit;\r
891 Py_SIZE(v) = ndigits;\r
892 while (ival) {\r
893 *p++ = (digit)(ival & PyLong_MASK);\r
894 ival >>= PyLong_SHIFT;\r
895 }\r
896 }\r
897 return (PyObject *)v;\r
898}\r
899\r
900/* Create a new long int object from a C Py_ssize_t. */\r
901\r
902PyObject *\r
903PyLong_FromSsize_t(Py_ssize_t ival)\r
904{\r
905 Py_ssize_t bytes = ival;\r
906 int one = 1;\r
907 return _PyLong_FromByteArray((unsigned char *)&bytes,\r
908 SIZEOF_SIZE_T, IS_LITTLE_ENDIAN, 1);\r
909}\r
910\r
911/* Create a new long int object from a C size_t. */\r
912\r
913PyObject *\r
914PyLong_FromSize_t(size_t ival)\r
915{\r
916 size_t bytes = ival;\r
917 int one = 1;\r
918 return _PyLong_FromByteArray((unsigned char *)&bytes,\r
919 SIZEOF_SIZE_T, IS_LITTLE_ENDIAN, 0);\r
920}\r
921\r
922/* Get a C PY_LONG_LONG int from a long int object.\r
923 Return -1 and set an error if overflow occurs. */\r
924\r
925PY_LONG_LONG\r
926PyLong_AsLongLong(PyObject *vv)\r
927{\r
928 PY_LONG_LONG bytes;\r
929 int one = 1;\r
930 int res;\r
931\r
932 if (vv == NULL) {\r
933 PyErr_BadInternalCall();\r
934 return -1;\r
935 }\r
936 if (!PyLong_Check(vv)) {\r
937 PyNumberMethods *nb;\r
938 PyObject *io;\r
939 if (PyInt_Check(vv))\r
940 return (PY_LONG_LONG)PyInt_AsLong(vv);\r
941 if ((nb = vv->ob_type->tp_as_number) == NULL ||\r
942 nb->nb_int == NULL) {\r
943 PyErr_SetString(PyExc_TypeError, "an integer is required");\r
944 return -1;\r
945 }\r
946 io = (*nb->nb_int) (vv);\r
947 if (io == NULL)\r
948 return -1;\r
949 if (PyInt_Check(io)) {\r
950 bytes = PyInt_AsLong(io);\r
951 Py_DECREF(io);\r
952 return bytes;\r
953 }\r
954 if (PyLong_Check(io)) {\r
955 bytes = PyLong_AsLongLong(io);\r
956 Py_DECREF(io);\r
957 return bytes;\r
958 }\r
959 Py_DECREF(io);\r
960 PyErr_SetString(PyExc_TypeError, "integer conversion failed");\r
961 return -1;\r
962 }\r
963\r
964 res = _PyLong_AsByteArray((PyLongObject *)vv, (unsigned char *)&bytes,\r
965 SIZEOF_LONG_LONG, IS_LITTLE_ENDIAN, 1);\r
966\r
967 /* Plan 9 can't handle PY_LONG_LONG in ? : expressions */\r
968 if (res < 0)\r
969 return (PY_LONG_LONG)-1;\r
970 else\r
971 return bytes;\r
972}\r
973\r
974/* Get a C unsigned PY_LONG_LONG int from a long int object.\r
975 Return -1 and set an error if overflow occurs. */\r
976\r
977unsigned PY_LONG_LONG\r
978PyLong_AsUnsignedLongLong(PyObject *vv)\r
979{\r
980 unsigned PY_LONG_LONG bytes;\r
981 int one = 1;\r
982 int res;\r
983\r
984 if (vv == NULL || !PyLong_Check(vv)) {\r
985 PyErr_BadInternalCall();\r
986 return (unsigned PY_LONG_LONG)-1;\r
987 }\r
988\r
989 res = _PyLong_AsByteArray((PyLongObject *)vv, (unsigned char *)&bytes,\r
990 SIZEOF_LONG_LONG, IS_LITTLE_ENDIAN, 0);\r
991\r
992 /* Plan 9 can't handle PY_LONG_LONG in ? : expressions */\r
993 if (res < 0)\r
994 return (unsigned PY_LONG_LONG)res;\r
995 else\r
996 return bytes;\r
997}\r
998\r
999/* Get a C unsigned long int from a long int object, ignoring the high bits.\r
1000 Returns -1 and sets an error condition if an error occurs. */\r
1001\r
1002unsigned PY_LONG_LONG\r
1003PyLong_AsUnsignedLongLongMask(PyObject *vv)\r
1004{\r
1005 register PyLongObject *v;\r
1006 unsigned PY_LONG_LONG x;\r
1007 Py_ssize_t i;\r
1008 int sign;\r
1009\r
1010 if (vv == NULL || !PyLong_Check(vv)) {\r
1011 PyErr_BadInternalCall();\r
1012 return (unsigned long) -1;\r
1013 }\r
1014 v = (PyLongObject *)vv;\r
1015 i = v->ob_size;\r
1016 sign = 1;\r
1017 x = 0;\r
1018 if (i < 0) {\r
1019 sign = -1;\r
1020 i = -i;\r
1021 }\r
1022 while (--i >= 0) {\r
1023 x = (x << PyLong_SHIFT) | v->ob_digit[i];\r
1024 }\r
1025 return x * sign;\r
1026}\r
1027\r
1028/* Get a C long long int from a Python long or Python int object.\r
1029 On overflow, returns -1 and sets *overflow to 1 or -1 depending\r
1030 on the sign of the result. Otherwise *overflow is 0.\r
1031\r
1032 For other errors (e.g., type error), returns -1 and sets an error\r
1033 condition.\r
1034*/\r
1035\r
1036PY_LONG_LONG\r
1037PyLong_AsLongLongAndOverflow(PyObject *vv, int *overflow)\r
1038{\r
1039 /* This version by Tim Peters */\r
1040 register PyLongObject *v;\r
1041 unsigned PY_LONG_LONG x, prev;\r
1042 PY_LONG_LONG res;\r
1043 Py_ssize_t i;\r
1044 int sign;\r
1045 int do_decref = 0; /* if nb_int was called */\r
1046\r
1047 *overflow = 0;\r
1048 if (vv == NULL) {\r
1049 PyErr_BadInternalCall();\r
1050 return -1;\r
1051 }\r
1052\r
1053 if (PyInt_Check(vv))\r
1054 return PyInt_AsLong(vv);\r
1055\r
1056 if (!PyLong_Check(vv)) {\r
1057 PyNumberMethods *nb;\r
1058 nb = vv->ob_type->tp_as_number;\r
1059 if (nb == NULL || nb->nb_int == NULL) {\r
1060 PyErr_SetString(PyExc_TypeError,\r
1061 "an integer is required");\r
1062 return -1;\r
1063 }\r
1064 vv = (*nb->nb_int) (vv);\r
1065 if (vv == NULL)\r
1066 return -1;\r
1067 do_decref = 1;\r
1068 if(PyInt_Check(vv)) {\r
1069 res = PyInt_AsLong(vv);\r
1070 goto exit;\r
1071 }\r
1072 if (!PyLong_Check(vv)) {\r
1073 Py_DECREF(vv);\r
1074 PyErr_SetString(PyExc_TypeError,\r
1075 "nb_int should return int object");\r
1076 return -1;\r
1077 }\r
1078 }\r
1079\r
1080 res = -1;\r
1081 v = (PyLongObject *)vv;\r
1082 i = Py_SIZE(v);\r
1083\r
1084 switch (i) {\r
1085 case -1:\r
1086 res = -(sdigit)v->ob_digit[0];\r
1087 break;\r
1088 case 0:\r
1089 res = 0;\r
1090 break;\r
1091 case 1:\r
1092 res = v->ob_digit[0];\r
1093 break;\r
1094 default:\r
1095 sign = 1;\r
1096 x = 0;\r
1097 if (i < 0) {\r
1098 sign = -1;\r
1099 i = -(i);\r
1100 }\r
1101 while (--i >= 0) {\r
1102 prev = x;\r
1103 x = (x << PyLong_SHIFT) + v->ob_digit[i];\r
1104 if ((x >> PyLong_SHIFT) != prev) {\r
1105 *overflow = sign;\r
1106 goto exit;\r
1107 }\r
1108 }\r
1109 /* Haven't lost any bits, but casting to long requires extra\r
1110 * care (see comment above).\r
1111 */\r
1112 if (x <= (unsigned PY_LONG_LONG)PY_LLONG_MAX) {\r
1113 res = (PY_LONG_LONG)x * sign;\r
1114 }\r
1115 else if (sign < 0 && x == PY_ABS_LLONG_MIN) {\r
1116 res = PY_LLONG_MIN;\r
1117 }\r
1118 else {\r
1119 *overflow = sign;\r
1120 /* res is already set to -1 */\r
1121 }\r
1122 }\r
1123 exit:\r
1124 if (do_decref) {\r
1125 Py_DECREF(vv);\r
1126 }\r
1127 return res;\r
1128}\r
1129\r
1130#undef IS_LITTLE_ENDIAN\r
1131\r
1132#endif /* HAVE_LONG_LONG */\r
1133\r
1134\r
1135static int\r
1136convert_binop(PyObject *v, PyObject *w, PyLongObject **a, PyLongObject **b) {\r
1137 if (PyLong_Check(v)) {\r
1138 *a = (PyLongObject *) v;\r
1139 Py_INCREF(v);\r
1140 }\r
1141 else if (PyInt_Check(v)) {\r
1142 *a = (PyLongObject *) PyLong_FromLong(PyInt_AS_LONG(v));\r
1143 }\r
1144 else {\r
1145 return 0;\r
1146 }\r
1147 if (PyLong_Check(w)) {\r
1148 *b = (PyLongObject *) w;\r
1149 Py_INCREF(w);\r
1150 }\r
1151 else if (PyInt_Check(w)) {\r
1152 *b = (PyLongObject *) PyLong_FromLong(PyInt_AS_LONG(w));\r
1153 }\r
1154 else {\r
1155 Py_DECREF(*a);\r
1156 return 0;\r
1157 }\r
1158 return 1;\r
1159}\r
1160\r
1161#define CONVERT_BINOP(v, w, a, b) \\r
1162 do { \\r
1163 if (!convert_binop(v, w, a, b)) { \\r
1164 Py_INCREF(Py_NotImplemented); \\r
1165 return Py_NotImplemented; \\r
1166 } \\r
1167 } while(0) \\r
1168\r
1169/* bits_in_digit(d) returns the unique integer k such that 2**(k-1) <= d <\r
1170 2**k if d is nonzero, else 0. */\r
1171\r
1172static const unsigned char BitLengthTable[32] = {\r
1173 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,\r
1174 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5\r
1175};\r
1176\r
1177static int\r
1178bits_in_digit(digit d)\r
1179{\r
1180 int d_bits = 0;\r
1181 while (d >= 32) {\r
1182 d_bits += 6;\r
1183 d >>= 6;\r
1184 }\r
1185 d_bits += (int)BitLengthTable[d];\r
1186 return d_bits;\r
1187}\r
1188\r
1189/* x[0:m] and y[0:n] are digit vectors, LSD first, m >= n required. x[0:n]\r
1190 * is modified in place, by adding y to it. Carries are propagated as far as\r
1191 * x[m-1], and the remaining carry (0 or 1) is returned.\r
1192 */\r
1193static digit\r
1194v_iadd(digit *x, Py_ssize_t m, digit *y, Py_ssize_t n)\r
1195{\r
1196 Py_ssize_t i;\r
1197 digit carry = 0;\r
1198\r
1199 assert(m >= n);\r
1200 for (i = 0; i < n; ++i) {\r
1201 carry += x[i] + y[i];\r
1202 x[i] = carry & PyLong_MASK;\r
1203 carry >>= PyLong_SHIFT;\r
1204 assert((carry & 1) == carry);\r
1205 }\r
1206 for (; carry && i < m; ++i) {\r
1207 carry += x[i];\r
1208 x[i] = carry & PyLong_MASK;\r
1209 carry >>= PyLong_SHIFT;\r
1210 assert((carry & 1) == carry);\r
1211 }\r
1212 return carry;\r
1213}\r
1214\r
1215/* x[0:m] and y[0:n] are digit vectors, LSD first, m >= n required. x[0:n]\r
1216 * is modified in place, by subtracting y from it. Borrows are propagated as\r
1217 * far as x[m-1], and the remaining borrow (0 or 1) is returned.\r
1218 */\r
1219static digit\r
1220v_isub(digit *x, Py_ssize_t m, digit *y, Py_ssize_t n)\r
1221{\r
1222 Py_ssize_t i;\r
1223 digit borrow = 0;\r
1224\r
1225 assert(m >= n);\r
1226 for (i = 0; i < n; ++i) {\r
1227 borrow = x[i] - y[i] - borrow;\r
1228 x[i] = borrow & PyLong_MASK;\r
1229 borrow >>= PyLong_SHIFT;\r
1230 borrow &= 1; /* keep only 1 sign bit */\r
1231 }\r
1232 for (; borrow && i < m; ++i) {\r
1233 borrow = x[i] - borrow;\r
1234 x[i] = borrow & PyLong_MASK;\r
1235 borrow >>= PyLong_SHIFT;\r
1236 borrow &= 1;\r
1237 }\r
1238 return borrow;\r
1239}\r
1240\r
1241/* Shift digit vector a[0:m] d bits left, with 0 <= d < PyLong_SHIFT. Put\r
1242 * result in z[0:m], and return the d bits shifted out of the top.\r
1243 */\r
1244static digit\r
1245v_lshift(digit *z, digit *a, Py_ssize_t m, int d)\r
1246{\r
1247 Py_ssize_t i;\r
1248 digit carry = 0;\r
1249\r
1250 assert(0 <= d && d < PyLong_SHIFT);\r
1251 for (i=0; i < m; i++) {\r
1252 twodigits acc = (twodigits)a[i] << d | carry;\r
1253 z[i] = (digit)acc & PyLong_MASK;\r
1254 carry = (digit)(acc >> PyLong_SHIFT);\r
1255 }\r
1256 return carry;\r
1257}\r
1258\r
1259/* Shift digit vector a[0:m] d bits right, with 0 <= d < PyLong_SHIFT. Put\r
1260 * result in z[0:m], and return the d bits shifted out of the bottom.\r
1261 */\r
1262static digit\r
1263v_rshift(digit *z, digit *a, Py_ssize_t m, int d)\r
1264{\r
1265 Py_ssize_t i;\r
1266 digit carry = 0;\r
1267 digit mask = ((digit)1 << d) - 1U;\r
1268\r
1269 assert(0 <= d && d < PyLong_SHIFT);\r
1270 for (i=m; i-- > 0;) {\r
1271 twodigits acc = (twodigits)carry << PyLong_SHIFT | a[i];\r
1272 carry = (digit)acc & mask;\r
1273 z[i] = (digit)(acc >> d);\r
1274 }\r
1275 return carry;\r
1276}\r
1277\r
1278/* Divide long pin, w/ size digits, by non-zero digit n, storing quotient\r
1279 in pout, and returning the remainder. pin and pout point at the LSD.\r
1280 It's OK for pin == pout on entry, which saves oodles of mallocs/frees in\r
1281 _PyLong_Format, but that should be done with great care since longs are\r
1282 immutable. */\r
1283\r
1284static digit\r
1285inplace_divrem1(digit *pout, digit *pin, Py_ssize_t size, digit n)\r
1286{\r
1287 twodigits rem = 0;\r
1288\r
1289 assert(n > 0 && n <= PyLong_MASK);\r
1290 pin += size;\r
1291 pout += size;\r
1292 while (--size >= 0) {\r
1293 digit hi;\r
1294 rem = (rem << PyLong_SHIFT) | *--pin;\r
1295 *--pout = hi = (digit)(rem / n);\r
1296 rem -= (twodigits)hi * n;\r
1297 }\r
1298 return (digit)rem;\r
1299}\r
1300\r
1301/* Divide a long integer by a digit, returning both the quotient\r
1302 (as function result) and the remainder (through *prem).\r
1303 The sign of a is ignored; n should not be zero. */\r
1304\r
1305static PyLongObject *\r
1306divrem1(PyLongObject *a, digit n, digit *prem)\r
1307{\r
1308 const Py_ssize_t size = ABS(Py_SIZE(a));\r
1309 PyLongObject *z;\r
1310\r
1311 assert(n > 0 && n <= PyLong_MASK);\r
1312 z = _PyLong_New(size);\r
1313 if (z == NULL)\r
1314 return NULL;\r
1315 *prem = inplace_divrem1(z->ob_digit, a->ob_digit, size, n);\r
1316 return long_normalize(z);\r
1317}\r
1318\r
1319/* Convert a long integer to a base 10 string. Returns a new non-shared\r
1320 string. (Return value is non-shared so that callers can modify the\r
1321 returned value if necessary.) */\r
1322\r
1323static PyObject *\r
1324long_to_decimal_string(PyObject *aa, int addL)\r
1325{\r
1326 PyLongObject *scratch, *a;\r
1327 PyObject *str;\r
1328 Py_ssize_t size, strlen, size_a, i, j;\r
1329 digit *pout, *pin, rem, tenpow;\r
1330 char *p;\r
1331 int negative;\r
1332\r
1333 a = (PyLongObject *)aa;\r
1334 if (a == NULL || !PyLong_Check(a)) {\r
1335 PyErr_BadInternalCall();\r
1336 return NULL;\r
1337 }\r
1338 size_a = ABS(Py_SIZE(a));\r
1339 negative = Py_SIZE(a) < 0;\r
1340\r
1341 /* quick and dirty upper bound for the number of digits\r
1342 required to express a in base _PyLong_DECIMAL_BASE:\r
1343\r
1344 #digits = 1 + floor(log2(a) / log2(_PyLong_DECIMAL_BASE))\r
1345\r
1346 But log2(a) < size_a * PyLong_SHIFT, and\r
1347 log2(_PyLong_DECIMAL_BASE) = log2(10) * _PyLong_DECIMAL_SHIFT\r
1348 > 3 * _PyLong_DECIMAL_SHIFT\r
1349 */\r
1350 if (size_a > PY_SSIZE_T_MAX / PyLong_SHIFT) {\r
1351 PyErr_SetString(PyExc_OverflowError,\r
1352 "long is too large to format");\r
1353 return NULL;\r
1354 }\r
1355 /* the expression size_a * PyLong_SHIFT is now safe from overflow */\r
1356 size = 1 + size_a * PyLong_SHIFT / (3 * _PyLong_DECIMAL_SHIFT);\r
1357 scratch = _PyLong_New(size);\r
1358 if (scratch == NULL)\r
1359 return NULL;\r
1360\r
1361 /* convert array of base _PyLong_BASE digits in pin to an array of\r
1362 base _PyLong_DECIMAL_BASE digits in pout, following Knuth (TAOCP,\r
1363 Volume 2 (3rd edn), section 4.4, Method 1b). */\r
1364 pin = a->ob_digit;\r
1365 pout = scratch->ob_digit;\r
1366 size = 0;\r
1367 for (i = size_a; --i >= 0; ) {\r
1368 digit hi = pin[i];\r
1369 for (j = 0; j < size; j++) {\r
1370 twodigits z = (twodigits)pout[j] << PyLong_SHIFT | hi;\r
1371 hi = (digit)(z / _PyLong_DECIMAL_BASE);\r
1372 pout[j] = (digit)(z - (twodigits)hi *\r
1373 _PyLong_DECIMAL_BASE);\r
1374 }\r
1375 while (hi) {\r
1376 pout[size++] = hi % _PyLong_DECIMAL_BASE;\r
1377 hi /= _PyLong_DECIMAL_BASE;\r
1378 }\r
1379 /* check for keyboard interrupt */\r
1380 SIGCHECK({\r
1381 Py_DECREF(scratch);\r
1382 return NULL;\r
1383 });\r
1384 }\r
1385 /* pout should have at least one digit, so that the case when a = 0\r
1386 works correctly */\r
1387 if (size == 0)\r
1388 pout[size++] = 0;\r
1389\r
1390 /* calculate exact length of output string, and allocate */\r
1391 strlen = (addL != 0) + negative +\r
1392 1 + (size - 1) * _PyLong_DECIMAL_SHIFT;\r
1393 tenpow = 10;\r
1394 rem = pout[size-1];\r
1395 while (rem >= tenpow) {\r
1396 tenpow *= 10;\r
1397 strlen++;\r
1398 }\r
1399 str = PyString_FromStringAndSize(NULL, strlen);\r
1400 if (str == NULL) {\r
1401 Py_DECREF(scratch);\r
1402 return NULL;\r
1403 }\r
1404\r
1405 /* fill the string right-to-left */\r
1406 p = PyString_AS_STRING(str) + strlen;\r
1407 *p = '\0';\r
1408 if (addL)\r
1409 *--p = 'L';\r
1410 /* pout[0] through pout[size-2] contribute exactly\r
1411 _PyLong_DECIMAL_SHIFT digits each */\r
1412 for (i=0; i < size - 1; i++) {\r
1413 rem = pout[i];\r
1414 for (j = 0; j < _PyLong_DECIMAL_SHIFT; j++) {\r
1415 *--p = '0' + rem % 10;\r
1416 rem /= 10;\r
1417 }\r
1418 }\r
1419 /* pout[size-1]: always produce at least one decimal digit */\r
1420 rem = pout[i];\r
1421 do {\r
1422 *--p = '0' + rem % 10;\r
1423 rem /= 10;\r
1424 } while (rem != 0);\r
1425\r
1426 /* and sign */\r
1427 if (negative)\r
1428 *--p = '-';\r
1429\r
1430 /* check we've counted correctly */\r
1431 assert(p == PyString_AS_STRING(str));\r
1432 Py_DECREF(scratch);\r
1433 return (PyObject *)str;\r
1434}\r
1435\r
1436/* Convert the long to a string object with given base,\r
1437 appending a base prefix of 0[box] if base is 2, 8 or 16.\r
1438 Add a trailing "L" if addL is non-zero.\r
1439 If newstyle is zero, then use the pre-2.6 behavior of octal having\r
1440 a leading "0", instead of the prefix "0o" */\r
1441PyAPI_FUNC(PyObject *)\r
1442_PyLong_Format(PyObject *aa, int base, int addL, int newstyle)\r
1443{\r
1444 register PyLongObject *a = (PyLongObject *)aa;\r
1445 PyStringObject *str;\r
1446 Py_ssize_t i, sz;\r
1447 Py_ssize_t size_a;\r
1448 char *p;\r
1449 int bits;\r
1450 char sign = '\0';\r
1451\r
1452 if (base == 10)\r
1453 return long_to_decimal_string((PyObject *)a, addL);\r
1454\r
1455 if (a == NULL || !PyLong_Check(a)) {\r
1456 PyErr_BadInternalCall();\r
1457 return NULL;\r
1458 }\r
1459 assert(base >= 2 && base <= 36);\r
1460 size_a = ABS(Py_SIZE(a));\r
1461\r
1462 /* Compute a rough upper bound for the length of the string */\r
1463 i = base;\r
1464 bits = 0;\r
1465 while (i > 1) {\r
1466 ++bits;\r
1467 i >>= 1;\r
1468 }\r
1469 i = 5 + (addL ? 1 : 0);\r
1470 /* ensure we don't get signed overflow in sz calculation */\r
1471 if (size_a > (PY_SSIZE_T_MAX - i) / PyLong_SHIFT) {\r
1472 PyErr_SetString(PyExc_OverflowError,\r
1473 "long is too large to format");\r
1474 return NULL;\r
1475 }\r
1476 sz = i + 1 + (size_a * PyLong_SHIFT - 1) / bits;\r
1477 assert(sz >= 0);\r
1478 str = (PyStringObject *) PyString_FromStringAndSize((char *)0, sz);\r
1479 if (str == NULL)\r
1480 return NULL;\r
1481 p = PyString_AS_STRING(str) + sz;\r
1482 *p = '\0';\r
1483 if (addL)\r
1484 *--p = 'L';\r
1485 if (a->ob_size < 0)\r
1486 sign = '-';\r
1487\r
1488 if (a->ob_size == 0) {\r
1489 *--p = '0';\r
1490 }\r
1491 else if ((base & (base - 1)) == 0) {\r
1492 /* JRH: special case for power-of-2 bases */\r
1493 twodigits accum = 0;\r
1494 int accumbits = 0; /* # of bits in accum */\r
1495 int basebits = 1; /* # of bits in base-1 */\r
1496 i = base;\r
1497 while ((i >>= 1) > 1)\r
1498 ++basebits;\r
1499\r
1500 for (i = 0; i < size_a; ++i) {\r
1501 accum |= (twodigits)a->ob_digit[i] << accumbits;\r
1502 accumbits += PyLong_SHIFT;\r
1503 assert(accumbits >= basebits);\r
1504 do {\r
1505 char cdigit = (char)(accum & (base - 1));\r
1506 cdigit += (cdigit < 10) ? '0' : 'a'-10;\r
1507 assert(p > PyString_AS_STRING(str));\r
1508 *--p = cdigit;\r
1509 accumbits -= basebits;\r
1510 accum >>= basebits;\r
1511 } while (i < size_a-1 ? accumbits >= basebits : accum > 0);\r
1512 }\r
1513 }\r
1514 else {\r
1515 /* Not 0, and base not a power of 2. Divide repeatedly by\r
1516 base, but for speed use the highest power of base that\r
1517 fits in a digit. */\r
1518 Py_ssize_t size = size_a;\r
1519 digit *pin = a->ob_digit;\r
1520 PyLongObject *scratch;\r
1521 /* powbasw <- largest power of base that fits in a digit. */\r
1522 digit powbase = base; /* powbase == base ** power */\r
1523 int power = 1;\r
1524 for (;;) {\r
1525 twodigits newpow = powbase * (twodigits)base;\r
1526 if (newpow >> PyLong_SHIFT)\r
1527 /* doesn't fit in a digit */\r
1528 break;\r
1529 powbase = (digit)newpow;\r
1530 ++power;\r
1531 }\r
1532\r
1533 /* Get a scratch area for repeated division. */\r
1534 scratch = _PyLong_New(size);\r
1535 if (scratch == NULL) {\r
1536 Py_DECREF(str);\r
1537 return NULL;\r
1538 }\r
1539\r
1540 /* Repeatedly divide by powbase. */\r
1541 do {\r
1542 int ntostore = power;\r
1543 digit rem = inplace_divrem1(scratch->ob_digit,\r
1544 pin, size, powbase);\r
1545 pin = scratch->ob_digit; /* no need to use a again */\r
1546 if (pin[size - 1] == 0)\r
1547 --size;\r
1548 SIGCHECK({\r
1549 Py_DECREF(scratch);\r
1550 Py_DECREF(str);\r
1551 return NULL;\r
1552 });\r
1553\r
1554 /* Break rem into digits. */\r
1555 assert(ntostore > 0);\r
1556 do {\r
1557 digit nextrem = (digit)(rem / base);\r
1558 char c = (char)(rem - nextrem * base);\r
1559 assert(p > PyString_AS_STRING(str));\r
1560 c += (c < 10) ? '0' : 'a'-10;\r
1561 *--p = c;\r
1562 rem = nextrem;\r
1563 --ntostore;\r
1564 /* Termination is a bit delicate: must not\r
1565 store leading zeroes, so must get out if\r
1566 remaining quotient and rem are both 0. */\r
1567 } while (ntostore && (size || rem));\r
1568 } while (size != 0);\r
1569 Py_DECREF(scratch);\r
1570 }\r
1571\r
1572 if (base == 2) {\r
1573 *--p = 'b';\r
1574 *--p = '0';\r
1575 }\r
1576 else if (base == 8) {\r
1577 if (newstyle) {\r
1578 *--p = 'o';\r
1579 *--p = '0';\r
1580 }\r
1581 else\r
1582 if (size_a != 0)\r
1583 *--p = '0';\r
1584 }\r
1585 else if (base == 16) {\r
1586 *--p = 'x';\r
1587 *--p = '0';\r
1588 }\r
1589 else if (base != 10) {\r
1590 *--p = '#';\r
1591 *--p = '0' + base%10;\r
1592 if (base > 10)\r
1593 *--p = '0' + base/10;\r
1594 }\r
1595 if (sign)\r
1596 *--p = sign;\r
1597 if (p != PyString_AS_STRING(str)) {\r
1598 char *q = PyString_AS_STRING(str);\r
1599 assert(p > q);\r
1600 do {\r
1601 } while ((*q++ = *p++) != '\0');\r
1602 q--;\r
1603 _PyString_Resize((PyObject **)&str,\r
1604 (Py_ssize_t) (q - PyString_AS_STRING(str)));\r
1605 }\r
1606 return (PyObject *)str;\r
1607}\r
1608\r
1609/* Table of digit values for 8-bit string -> integer conversion.\r
1610 * '0' maps to 0, ..., '9' maps to 9.\r
1611 * 'a' and 'A' map to 10, ..., 'z' and 'Z' map to 35.\r
1612 * All other indices map to 37.\r
1613 * Note that when converting a base B string, a char c is a legitimate\r
1614 * base B digit iff _PyLong_DigitValue[Py_CHARMASK(c)] < B.\r
1615 */\r
1616int _PyLong_DigitValue[256] = {\r
1617 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,\r
1618 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,\r
1619 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,\r
1620 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 37, 37, 37, 37, 37, 37,\r
1621 37, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,\r
1622 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 37, 37, 37, 37, 37,\r
1623 37, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,\r
1624 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 37, 37, 37, 37, 37,\r
1625 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,\r
1626 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,\r
1627 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,\r
1628 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,\r
1629 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,\r
1630 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,\r
1631 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,\r
1632 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,\r
1633};\r
1634\r
1635/* *str points to the first digit in a string of base `base` digits. base\r
1636 * is a power of 2 (2, 4, 8, 16, or 32). *str is set to point to the first\r
1637 * non-digit (which may be *str!). A normalized long is returned.\r
1638 * The point to this routine is that it takes time linear in the number of\r
1639 * string characters.\r
1640 */\r
1641static PyLongObject *\r
1642long_from_binary_base(char **str, int base)\r
1643{\r
1644 char *p = *str;\r
1645 char *start = p;\r
1646 int bits_per_char;\r
1647 Py_ssize_t n;\r
1648 PyLongObject *z;\r
1649 twodigits accum;\r
1650 int bits_in_accum;\r
1651 digit *pdigit;\r
1652\r
1653 assert(base >= 2 && base <= 32 && (base & (base - 1)) == 0);\r
1654 n = base;\r
1655 for (bits_per_char = -1; n; ++bits_per_char)\r
1656 n >>= 1;\r
1657 /* n <- total # of bits needed, while setting p to end-of-string */\r
1658 while (_PyLong_DigitValue[Py_CHARMASK(*p)] < base)\r
1659 ++p;\r
1660 *str = p;\r
1661 /* n <- # of Python digits needed, = ceiling(n/PyLong_SHIFT). */\r
1662 n = (p - start) * bits_per_char + PyLong_SHIFT - 1;\r
1663 if (n / bits_per_char < p - start) {\r
1664 PyErr_SetString(PyExc_ValueError,\r
1665 "long string too large to convert");\r
1666 return NULL;\r
1667 }\r
1668 n = n / PyLong_SHIFT;\r
1669 z = _PyLong_New(n);\r
1670 if (z == NULL)\r
1671 return NULL;\r
1672 /* Read string from right, and fill in long from left; i.e.,\r
1673 * from least to most significant in both.\r
1674 */\r
1675 accum = 0;\r
1676 bits_in_accum = 0;\r
1677 pdigit = z->ob_digit;\r
1678 while (--p >= start) {\r
1679 int k = _PyLong_DigitValue[Py_CHARMASK(*p)];\r
1680 assert(k >= 0 && k < base);\r
1681 accum |= (twodigits)k << bits_in_accum;\r
1682 bits_in_accum += bits_per_char;\r
1683 if (bits_in_accum >= PyLong_SHIFT) {\r
1684 *pdigit++ = (digit)(accum & PyLong_MASK);\r
1685 assert(pdigit - z->ob_digit <= n);\r
1686 accum >>= PyLong_SHIFT;\r
1687 bits_in_accum -= PyLong_SHIFT;\r
1688 assert(bits_in_accum < PyLong_SHIFT);\r
1689 }\r
1690 }\r
1691 if (bits_in_accum) {\r
1692 assert(bits_in_accum <= PyLong_SHIFT);\r
1693 *pdigit++ = (digit)accum;\r
1694 assert(pdigit - z->ob_digit <= n);\r
1695 }\r
1696 while (pdigit - z->ob_digit < n)\r
1697 *pdigit++ = 0;\r
1698 return long_normalize(z);\r
1699}\r
1700\r
1701PyObject *\r
1702PyLong_FromString(char *str, char **pend, int base)\r
1703{\r
1704 int sign = 1;\r
1705 char *start, *orig_str = str;\r
1706 PyLongObject *z;\r
1707 PyObject *strobj, *strrepr;\r
1708 Py_ssize_t slen;\r
1709\r
1710 if ((base != 0 && base < 2) || base > 36) {\r
1711 PyErr_SetString(PyExc_ValueError,\r
1712 "long() arg 2 must be >= 2 and <= 36");\r
1713 return NULL;\r
1714 }\r
1715 while (*str != '\0' && isspace(Py_CHARMASK(*str)))\r
1716 str++;\r
1717 if (*str == '+')\r
1718 ++str;\r
1719 else if (*str == '-') {\r
1720 ++str;\r
1721 sign = -1;\r
1722 }\r
1723 while (*str != '\0' && isspace(Py_CHARMASK(*str)))\r
1724 str++;\r
1725 if (base == 0) {\r
1726 /* No base given. Deduce the base from the contents\r
1727 of the string */\r
1728 if (str[0] != '0')\r
1729 base = 10;\r
1730 else if (str[1] == 'x' || str[1] == 'X')\r
1731 base = 16;\r
1732 else if (str[1] == 'o' || str[1] == 'O')\r
1733 base = 8;\r
1734 else if (str[1] == 'b' || str[1] == 'B')\r
1735 base = 2;\r
1736 else\r
1737 /* "old" (C-style) octal literal, still valid in\r
1738 2.x, although illegal in 3.x */\r
1739 base = 8;\r
1740 }\r
1741 /* Whether or not we were deducing the base, skip leading chars\r
1742 as needed */\r
1743 if (str[0] == '0' &&\r
1744 ((base == 16 && (str[1] == 'x' || str[1] == 'X')) ||\r
1745 (base == 8 && (str[1] == 'o' || str[1] == 'O')) ||\r
1746 (base == 2 && (str[1] == 'b' || str[1] == 'B'))))\r
1747 str += 2;\r
1748\r
1749 start = str;\r
1750 if ((base & (base - 1)) == 0)\r
1751 z = long_from_binary_base(&str, base);\r
1752 else {\r
1753/***\r
1754Binary bases can be converted in time linear in the number of digits, because\r
1755Python's representation base is binary. Other bases (including decimal!) use\r
1756the simple quadratic-time algorithm below, complicated by some speed tricks.\r
1757\r
1758First some math: the largest integer that can be expressed in N base-B digits\r
1759is B**N-1. Consequently, if we have an N-digit input in base B, the worst-\r
1760case number of Python digits needed to hold it is the smallest integer n s.t.\r
1761\r
1762 PyLong_BASE**n-1 >= B**N-1 [or, adding 1 to both sides]\r
1763 PyLong_BASE**n >= B**N [taking logs to base PyLong_BASE]\r
1764 n >= log(B**N)/log(PyLong_BASE) = N * log(B)/log(PyLong_BASE)\r
1765\r
1766The static array log_base_PyLong_BASE[base] == log(base)/log(PyLong_BASE) so\r
1767we can compute this quickly. A Python long with that much space is reserved\r
1768near the start, and the result is computed into it.\r
1769\r
1770The input string is actually treated as being in base base**i (i.e., i digits\r
1771are processed at a time), where two more static arrays hold:\r
1772\r
1773 convwidth_base[base] = the largest integer i such that\r
1774 base**i <= PyLong_BASE\r
1775 convmultmax_base[base] = base ** convwidth_base[base]\r
1776\r
1777The first of these is the largest i such that i consecutive input digits\r
1778must fit in a single Python digit. The second is effectively the input\r
1779base we're really using.\r
1780\r
1781Viewing the input as a sequence <c0, c1, ..., c_n-1> of digits in base\r
1782convmultmax_base[base], the result is "simply"\r
1783\r
1784 (((c0*B + c1)*B + c2)*B + c3)*B + ... ))) + c_n-1\r
1785\r
1786where B = convmultmax_base[base].\r
1787\r
1788Error analysis: as above, the number of Python digits `n` needed is worst-\r
1789case\r
1790\r
1791 n >= N * log(B)/log(PyLong_BASE)\r
1792\r
1793where `N` is the number of input digits in base `B`. This is computed via\r
1794\r
1795 size_z = (Py_ssize_t)((scan - str) * log_base_PyLong_BASE[base]) + 1;\r
1796\r
1797below. Two numeric concerns are how much space this can waste, and whether\r
1798the computed result can be too small. To be concrete, assume PyLong_BASE =\r
17992**15, which is the default (and it's unlikely anyone changes that).\r
1800\r
1801Waste isn't a problem: provided the first input digit isn't 0, the difference\r
1802between the worst-case input with N digits and the smallest input with N\r
1803digits is about a factor of B, but B is small compared to PyLong_BASE so at\r
1804most one allocated Python digit can remain unused on that count. If\r
1805N*log(B)/log(PyLong_BASE) is mathematically an exact integer, then truncating\r
1806that and adding 1 returns a result 1 larger than necessary. However, that\r
1807can't happen: whenever B is a power of 2, long_from_binary_base() is called\r
1808instead, and it's impossible for B**i to be an integer power of 2**15 when B\r
1809is not a power of 2 (i.e., it's impossible for N*log(B)/log(PyLong_BASE) to be\r
1810an exact integer when B is not a power of 2, since B**i has a prime factor\r
1811other than 2 in that case, but (2**15)**j's only prime factor is 2).\r
1812\r
1813The computed result can be too small if the true value of\r
1814N*log(B)/log(PyLong_BASE) is a little bit larger than an exact integer, but\r
1815due to roundoff errors (in computing log(B), log(PyLong_BASE), their quotient,\r
1816and/or multiplying that by N) yields a numeric result a little less than that\r
1817integer. Unfortunately, "how close can a transcendental function get to an\r
1818integer over some range?" questions are generally theoretically intractable.\r
1819Computer analysis via continued fractions is practical: expand\r
1820log(B)/log(PyLong_BASE) via continued fractions, giving a sequence i/j of "the\r
1821best" rational approximations. Then j*log(B)/log(PyLong_BASE) is\r
1822approximately equal to (the integer) i. This shows that we can get very close\r
1823to being in trouble, but very rarely. For example, 76573 is a denominator in\r
1824one of the continued-fraction approximations to log(10)/log(2**15), and\r
1825indeed:\r
1826\r
1827 >>> log(10)/log(2**15)*76573\r
1828 16958.000000654003\r
1829\r
1830is very close to an integer. If we were working with IEEE single-precision,\r
1831rounding errors could kill us. Finding worst cases in IEEE double-precision\r
1832requires better-than-double-precision log() functions, and Tim didn't bother.\r
1833Instead the code checks to see whether the allocated space is enough as each\r
1834new Python digit is added, and copies the whole thing to a larger long if not.\r
1835This should happen extremely rarely, and in fact I don't have a test case\r
1836that triggers it(!). Instead the code was tested by artificially allocating\r
1837just 1 digit at the start, so that the copying code was exercised for every\r
1838digit beyond the first.\r
1839***/\r
1840 register twodigits c; /* current input character */\r
1841 Py_ssize_t size_z;\r
1842 int i;\r
1843 int convwidth;\r
1844 twodigits convmultmax, convmult;\r
1845 digit *pz, *pzstop;\r
1846 char* scan;\r
1847\r
1848 static double log_base_PyLong_BASE[37] = {0.0e0,};\r
1849 static int convwidth_base[37] = {0,};\r
1850 static twodigits convmultmax_base[37] = {0,};\r
1851\r
1852 if (log_base_PyLong_BASE[base] == 0.0) {\r
1853 twodigits convmax = base;\r
1854 int i = 1;\r
1855\r
1856 log_base_PyLong_BASE[base] = (log((double)base) /\r
1857 log((double)PyLong_BASE));\r
1858 for (;;) {\r
1859 twodigits next = convmax * base;\r
1860 if (next > PyLong_BASE)\r
1861 break;\r
1862 convmax = next;\r
1863 ++i;\r
1864 }\r
1865 convmultmax_base[base] = convmax;\r
1866 assert(i > 0);\r
1867 convwidth_base[base] = i;\r
1868 }\r
1869\r
1870 /* Find length of the string of numeric characters. */\r
1871 scan = str;\r
1872 while (_PyLong_DigitValue[Py_CHARMASK(*scan)] < base)\r
1873 ++scan;\r
1874\r
1875 /* Create a long object that can contain the largest possible\r
1876 * integer with this base and length. Note that there's no\r
1877 * need to initialize z->ob_digit -- no slot is read up before\r
1878 * being stored into.\r
1879 */\r
1880 size_z = (Py_ssize_t)((scan - str) * log_base_PyLong_BASE[base]) + 1;\r
1881 /* Uncomment next line to test exceedingly rare copy code */\r
1882 /* size_z = 1; */\r
1883 assert(size_z > 0);\r
1884 z = _PyLong_New(size_z);\r
1885 if (z == NULL)\r
1886 return NULL;\r
1887 Py_SIZE(z) = 0;\r
1888\r
1889 /* `convwidth` consecutive input digits are treated as a single\r
1890 * digit in base `convmultmax`.\r
1891 */\r
1892 convwidth = convwidth_base[base];\r
1893 convmultmax = convmultmax_base[base];\r
1894\r
1895 /* Work ;-) */\r
1896 while (str < scan) {\r
1897 /* grab up to convwidth digits from the input string */\r
1898 c = (digit)_PyLong_DigitValue[Py_CHARMASK(*str++)];\r
1899 for (i = 1; i < convwidth && str != scan; ++i, ++str) {\r
1900 c = (twodigits)(c * base +\r
1901 _PyLong_DigitValue[Py_CHARMASK(*str)]);\r
1902 assert(c < PyLong_BASE);\r
1903 }\r
1904\r
1905 convmult = convmultmax;\r
1906 /* Calculate the shift only if we couldn't get\r
1907 * convwidth digits.\r
1908 */\r
1909 if (i != convwidth) {\r
1910 convmult = base;\r
1911 for ( ; i > 1; --i)\r
1912 convmult *= base;\r
1913 }\r
1914\r
1915 /* Multiply z by convmult, and add c. */\r
1916 pz = z->ob_digit;\r
1917 pzstop = pz + Py_SIZE(z);\r
1918 for (; pz < pzstop; ++pz) {\r
1919 c += (twodigits)*pz * convmult;\r
1920 *pz = (digit)(c & PyLong_MASK);\r
1921 c >>= PyLong_SHIFT;\r
1922 }\r
1923 /* carry off the current end? */\r
1924 if (c) {\r
1925 assert(c < PyLong_BASE);\r
1926 if (Py_SIZE(z) < size_z) {\r
1927 *pz = (digit)c;\r
1928 ++Py_SIZE(z);\r
1929 }\r
1930 else {\r
1931 PyLongObject *tmp;\r
1932 /* Extremely rare. Get more space. */\r
1933 assert(Py_SIZE(z) == size_z);\r
1934 tmp = _PyLong_New(size_z + 1);\r
1935 if (tmp == NULL) {\r
1936 Py_DECREF(z);\r
1937 return NULL;\r
1938 }\r
1939 memcpy(tmp->ob_digit,\r
1940 z->ob_digit,\r
1941 sizeof(digit) * size_z);\r
1942 Py_DECREF(z);\r
1943 z = tmp;\r
1944 z->ob_digit[size_z] = (digit)c;\r
1945 ++size_z;\r
1946 }\r
1947 }\r
1948 }\r
1949 }\r
1950 if (z == NULL)\r
1951 return NULL;\r
1952 if (str == start)\r
1953 goto onError;\r
1954 if (sign < 0)\r
1955 Py_SIZE(z) = -(Py_SIZE(z));\r
1956 if (*str == 'L' || *str == 'l')\r
1957 str++;\r
1958 while (*str && isspace(Py_CHARMASK(*str)))\r
1959 str++;\r
1960 if (*str != '\0')\r
1961 goto onError;\r
1962 if (pend)\r
1963 *pend = str;\r
1964 return (PyObject *) z;\r
1965\r
1966 onError:\r
1967 Py_XDECREF(z);\r
1968 slen = strlen(orig_str) < 200 ? strlen(orig_str) : 200;\r
1969 strobj = PyString_FromStringAndSize(orig_str, slen);\r
1970 if (strobj == NULL)\r
1971 return NULL;\r
1972 strrepr = PyObject_Repr(strobj);\r
1973 Py_DECREF(strobj);\r
1974 if (strrepr == NULL)\r
1975 return NULL;\r
1976 PyErr_Format(PyExc_ValueError,\r
1977 "invalid literal for long() with base %d: %s",\r
1978 base, PyString_AS_STRING(strrepr));\r
1979 Py_DECREF(strrepr);\r
1980 return NULL;\r
1981}\r
1982\r
1983#ifdef Py_USING_UNICODE\r
1984PyObject *\r
1985PyLong_FromUnicode(Py_UNICODE *u, Py_ssize_t length, int base)\r
1986{\r
1987 PyObject *result;\r
1988 char *buffer = (char *)PyMem_MALLOC(length+1);\r
1989\r
1990 if (buffer == NULL)\r
1991 return NULL;\r
1992\r
1993 if (PyUnicode_EncodeDecimal(u, length, buffer, NULL)) {\r
1994 PyMem_FREE(buffer);\r
1995 return NULL;\r
1996 }\r
1997 result = PyLong_FromString(buffer, NULL, base);\r
1998 PyMem_FREE(buffer);\r
1999 return result;\r
2000}\r
2001#endif\r
2002\r
2003/* forward */\r
2004static PyLongObject *x_divrem\r
2005 (PyLongObject *, PyLongObject *, PyLongObject **);\r
2006static PyObject *long_long(PyObject *v);\r
2007\r
2008/* Long division with remainder, top-level routine */\r
2009\r
2010static int\r
2011long_divrem(PyLongObject *a, PyLongObject *b,\r
2012 PyLongObject **pdiv, PyLongObject **prem)\r
2013{\r
2014 Py_ssize_t size_a = ABS(Py_SIZE(a)), size_b = ABS(Py_SIZE(b));\r
2015 PyLongObject *z;\r
2016\r
2017 if (size_b == 0) {\r
2018 PyErr_SetString(PyExc_ZeroDivisionError,\r
2019 "long division or modulo by zero");\r
2020 return -1;\r
2021 }\r
2022 if (size_a < size_b ||\r
2023 (size_a == size_b &&\r
2024 a->ob_digit[size_a-1] < b->ob_digit[size_b-1])) {\r
2025 /* |a| < |b|. */\r
2026 *pdiv = _PyLong_New(0);\r
2027 if (*pdiv == NULL)\r
2028 return -1;\r
2029 Py_INCREF(a);\r
2030 *prem = (PyLongObject *) a;\r
2031 return 0;\r
2032 }\r
2033 if (size_b == 1) {\r
2034 digit rem = 0;\r
2035 z = divrem1(a, b->ob_digit[0], &rem);\r
2036 if (z == NULL)\r
2037 return -1;\r
2038 *prem = (PyLongObject *) PyLong_FromLong((long)rem);\r
2039 if (*prem == NULL) {\r
2040 Py_DECREF(z);\r
2041 return -1;\r
2042 }\r
2043 }\r
2044 else {\r
2045 z = x_divrem(a, b, prem);\r
2046 if (z == NULL)\r
2047 return -1;\r
2048 }\r
2049 /* Set the signs.\r
2050 The quotient z has the sign of a*b;\r
2051 the remainder r has the sign of a,\r
2052 so a = b*z + r. */\r
2053 if ((a->ob_size < 0) != (b->ob_size < 0))\r
2054 z->ob_size = -(z->ob_size);\r
2055 if (a->ob_size < 0 && (*prem)->ob_size != 0)\r
2056 (*prem)->ob_size = -((*prem)->ob_size);\r
2057 *pdiv = z;\r
2058 return 0;\r
2059}\r
2060\r
2061/* Unsigned long division with remainder -- the algorithm. The arguments v1\r
2062 and w1 should satisfy 2 <= ABS(Py_SIZE(w1)) <= ABS(Py_SIZE(v1)). */\r
2063\r
2064static PyLongObject *\r
2065x_divrem(PyLongObject *v1, PyLongObject *w1, PyLongObject **prem)\r
2066{\r
2067 PyLongObject *v, *w, *a;\r
2068 Py_ssize_t i, k, size_v, size_w;\r
2069 int d;\r
2070 digit wm1, wm2, carry, q, r, vtop, *v0, *vk, *w0, *ak;\r
2071 twodigits vv;\r
2072 sdigit zhi;\r
2073 stwodigits z;\r
2074\r
2075 /* We follow Knuth [The Art of Computer Programming, Vol. 2 (3rd\r
2076 edn.), section 4.3.1, Algorithm D], except that we don't explicitly\r
2077 handle the special case when the initial estimate q for a quotient\r
2078 digit is >= PyLong_BASE: the max value for q is PyLong_BASE+1, and\r
2079 that won't overflow a digit. */\r
2080\r
2081 /* allocate space; w will also be used to hold the final remainder */\r
2082 size_v = ABS(Py_SIZE(v1));\r
2083 size_w = ABS(Py_SIZE(w1));\r
2084 assert(size_v >= size_w && size_w >= 2); /* Assert checks by div() */\r
2085 v = _PyLong_New(size_v+1);\r
2086 if (v == NULL) {\r
2087 *prem = NULL;\r
2088 return NULL;\r
2089 }\r
2090 w = _PyLong_New(size_w);\r
2091 if (w == NULL) {\r
2092 Py_DECREF(v);\r
2093 *prem = NULL;\r
2094 return NULL;\r
2095 }\r
2096\r
2097 /* normalize: shift w1 left so that its top digit is >= PyLong_BASE/2.\r
2098 shift v1 left by the same amount. Results go into w and v. */\r
2099 d = PyLong_SHIFT - bits_in_digit(w1->ob_digit[size_w-1]);\r
2100 carry = v_lshift(w->ob_digit, w1->ob_digit, size_w, d);\r
2101 assert(carry == 0);\r
2102 carry = v_lshift(v->ob_digit, v1->ob_digit, size_v, d);\r
2103 if (carry != 0 || v->ob_digit[size_v-1] >= w->ob_digit[size_w-1]) {\r
2104 v->ob_digit[size_v] = carry;\r
2105 size_v++;\r
2106 }\r
2107\r
2108 /* Now v->ob_digit[size_v-1] < w->ob_digit[size_w-1], so quotient has\r
2109 at most (and usually exactly) k = size_v - size_w digits. */\r
2110 k = size_v - size_w;\r
2111 assert(k >= 0);\r
2112 a = _PyLong_New(k);\r
2113 if (a == NULL) {\r
2114 Py_DECREF(w);\r
2115 Py_DECREF(v);\r
2116 *prem = NULL;\r
2117 return NULL;\r
2118 }\r
2119 v0 = v->ob_digit;\r
2120 w0 = w->ob_digit;\r
2121 wm1 = w0[size_w-1];\r
2122 wm2 = w0[size_w-2];\r
2123 for (vk = v0+k, ak = a->ob_digit + k; vk-- > v0;) {\r
2124 /* inner loop: divide vk[0:size_w+1] by w0[0:size_w], giving\r
2125 single-digit quotient q, remainder in vk[0:size_w]. */\r
2126\r
2127 SIGCHECK({\r
2128 Py_DECREF(a);\r
2129 Py_DECREF(w);\r
2130 Py_DECREF(v);\r
2131 *prem = NULL;\r
2132 return NULL;\r
2133 });\r
2134\r
2135 /* estimate quotient digit q; may overestimate by 1 (rare) */\r
2136 vtop = vk[size_w];\r
2137 assert(vtop <= wm1);\r
2138 vv = ((twodigits)vtop << PyLong_SHIFT) | vk[size_w-1];\r
2139 q = (digit)(vv / wm1);\r
2140 r = (digit)(vv - (twodigits)wm1 * q); /* r = vv % wm1 */\r
2141 while ((twodigits)wm2 * q > (((twodigits)r << PyLong_SHIFT)\r
2142 | vk[size_w-2])) {\r
2143 --q;\r
2144 r += wm1;\r
2145 if (r >= PyLong_BASE)\r
2146 break;\r
2147 }\r
2148 assert(q <= PyLong_BASE);\r
2149\r
2150 /* subtract q*w0[0:size_w] from vk[0:size_w+1] */\r
2151 zhi = 0;\r
2152 for (i = 0; i < size_w; ++i) {\r
2153 /* invariants: -PyLong_BASE <= -q <= zhi <= 0;\r
2154 -PyLong_BASE * q <= z < PyLong_BASE */\r
2155 z = (sdigit)vk[i] + zhi -\r
2156 (stwodigits)q * (stwodigits)w0[i];\r
2157 vk[i] = (digit)z & PyLong_MASK;\r
2158 zhi = (sdigit)Py_ARITHMETIC_RIGHT_SHIFT(stwodigits,\r
2159 z, PyLong_SHIFT);\r
2160 }\r
2161\r
2162 /* add w back if q was too large (this branch taken rarely) */\r
2163 assert((sdigit)vtop + zhi == -1 || (sdigit)vtop + zhi == 0);\r
2164 if ((sdigit)vtop + zhi < 0) {\r
2165 carry = 0;\r
2166 for (i = 0; i < size_w; ++i) {\r
2167 carry += vk[i] + w0[i];\r
2168 vk[i] = carry & PyLong_MASK;\r
2169 carry >>= PyLong_SHIFT;\r
2170 }\r
2171 --q;\r
2172 }\r
2173\r
2174 /* store quotient digit */\r
2175 assert(q < PyLong_BASE);\r
2176 *--ak = q;\r
2177 }\r
2178\r
2179 /* unshift remainder; we reuse w to store the result */\r
2180 carry = v_rshift(w0, v0, size_w, d);\r
2181 assert(carry==0);\r
2182 Py_DECREF(v);\r
2183\r
2184 *prem = long_normalize(w);\r
2185 return long_normalize(a);\r
2186}\r
2187\r
2188/* For a nonzero PyLong a, express a in the form x * 2**e, with 0.5 <=\r
2189 abs(x) < 1.0 and e >= 0; return x and put e in *e. Here x is\r
2190 rounded to DBL_MANT_DIG significant bits using round-half-to-even.\r
2191 If a == 0, return 0.0 and set *e = 0. If the resulting exponent\r
2192 e is larger than PY_SSIZE_T_MAX, raise OverflowError and return\r
2193 -1.0. */\r
2194\r
2195/* attempt to define 2.0**DBL_MANT_DIG as a compile-time constant */\r
2196#if DBL_MANT_DIG == 53\r
2197#define EXP2_DBL_MANT_DIG 9007199254740992.0\r
2198#else\r
2199#define EXP2_DBL_MANT_DIG (ldexp(1.0, DBL_MANT_DIG))\r
2200#endif\r
2201\r
2202double\r
2203_PyLong_Frexp(PyLongObject *a, Py_ssize_t *e)\r
2204{\r
2205 Py_ssize_t a_size, a_bits, shift_digits, shift_bits, x_size;\r
2206 /* See below for why x_digits is always large enough. */\r
2207 digit rem, x_digits[2 + (DBL_MANT_DIG + 1) / PyLong_SHIFT];\r
2208 double dx;\r
2209 /* Correction term for round-half-to-even rounding. For a digit x,\r
2210 "x + half_even_correction[x & 7]" gives x rounded to the nearest\r
2211 multiple of 4, rounding ties to a multiple of 8. */\r
2212 static const int half_even_correction[8] = {0, -1, -2, 1, 0, -1, 2, 1};\r
2213\r
2214 a_size = ABS(Py_SIZE(a));\r
2215 if (a_size == 0) {\r
2216 /* Special case for 0: significand 0.0, exponent 0. */\r
2217 *e = 0;\r
2218 return 0.0;\r
2219 }\r
2220 a_bits = bits_in_digit(a->ob_digit[a_size-1]);\r
2221 /* The following is an overflow-free version of the check\r
2222 "if ((a_size - 1) * PyLong_SHIFT + a_bits > PY_SSIZE_T_MAX) ..." */\r
2223 if (a_size >= (PY_SSIZE_T_MAX - 1) / PyLong_SHIFT + 1 &&\r
2224 (a_size > (PY_SSIZE_T_MAX - 1) / PyLong_SHIFT + 1 ||\r
2225 a_bits > (PY_SSIZE_T_MAX - 1) % PyLong_SHIFT + 1))\r
2226 goto overflow;\r
2227 a_bits = (a_size - 1) * PyLong_SHIFT + a_bits;\r
2228\r
2229 /* Shift the first DBL_MANT_DIG + 2 bits of a into x_digits[0:x_size]\r
2230 (shifting left if a_bits <= DBL_MANT_DIG + 2).\r
2231\r
2232 Number of digits needed for result: write // for floor division.\r
2233 Then if shifting left, we end up using\r
2234\r
2235 1 + a_size + (DBL_MANT_DIG + 2 - a_bits) // PyLong_SHIFT\r
2236\r
2237 digits. If shifting right, we use\r
2238\r
2239 a_size - (a_bits - DBL_MANT_DIG - 2) // PyLong_SHIFT\r
2240\r
2241 digits. Using a_size = 1 + (a_bits - 1) // PyLong_SHIFT along with\r
2242 the inequalities\r
2243\r
2244 m // PyLong_SHIFT + n // PyLong_SHIFT <= (m + n) // PyLong_SHIFT\r
2245 m // PyLong_SHIFT - n // PyLong_SHIFT <=\r
2246 1 + (m - n - 1) // PyLong_SHIFT,\r
2247\r
2248 valid for any integers m and n, we find that x_size satisfies\r
2249\r
2250 x_size <= 2 + (DBL_MANT_DIG + 1) // PyLong_SHIFT\r
2251\r
2252 in both cases.\r
2253 */\r
2254 if (a_bits <= DBL_MANT_DIG + 2) {\r
2255 shift_digits = (DBL_MANT_DIG + 2 - a_bits) / PyLong_SHIFT;\r
2256 shift_bits = (DBL_MANT_DIG + 2 - a_bits) % PyLong_SHIFT;\r
2257 x_size = 0;\r
2258 while (x_size < shift_digits)\r
2259 x_digits[x_size++] = 0;\r
2260 rem = v_lshift(x_digits + x_size, a->ob_digit, a_size,\r
2261 (int)shift_bits);\r
2262 x_size += a_size;\r
2263 x_digits[x_size++] = rem;\r
2264 }\r
2265 else {\r
2266 shift_digits = (a_bits - DBL_MANT_DIG - 2) / PyLong_SHIFT;\r
2267 shift_bits = (a_bits - DBL_MANT_DIG - 2) % PyLong_SHIFT;\r
2268 rem = v_rshift(x_digits, a->ob_digit + shift_digits,\r
2269 a_size - shift_digits, (int)shift_bits);\r
2270 x_size = a_size - shift_digits;\r
2271 /* For correct rounding below, we need the least significant\r
2272 bit of x to be 'sticky' for this shift: if any of the bits\r
2273 shifted out was nonzero, we set the least significant bit\r
2274 of x. */\r
2275 if (rem)\r
2276 x_digits[0] |= 1;\r
2277 else\r
2278 while (shift_digits > 0)\r
2279 if (a->ob_digit[--shift_digits]) {\r
2280 x_digits[0] |= 1;\r
2281 break;\r
2282 }\r
2283 }\r
2284 assert(1 <= x_size &&\r
2285 x_size <= (Py_ssize_t)(sizeof(x_digits)/sizeof(digit)));\r
2286\r
2287 /* Round, and convert to double. */\r
2288 x_digits[0] += half_even_correction[x_digits[0] & 7];\r
2289 dx = x_digits[--x_size];\r
2290 while (x_size > 0)\r
2291 dx = dx * PyLong_BASE + x_digits[--x_size];\r
2292\r
2293 /* Rescale; make correction if result is 1.0. */\r
2294 dx /= 4.0 * EXP2_DBL_MANT_DIG;\r
2295 if (dx == 1.0) {\r
2296 if (a_bits == PY_SSIZE_T_MAX)\r
2297 goto overflow;\r
2298 dx = 0.5;\r
2299 a_bits += 1;\r
2300 }\r
2301\r
2302 *e = a_bits;\r
2303 return Py_SIZE(a) < 0 ? -dx : dx;\r
2304\r
2305 overflow:\r
2306 /* exponent > PY_SSIZE_T_MAX */\r
2307 PyErr_SetString(PyExc_OverflowError,\r
2308 "huge integer: number of bits overflows a Py_ssize_t");\r
2309 *e = 0;\r
2310 return -1.0;\r
2311}\r
2312\r
2313/* Get a C double from a long int object. Rounds to the nearest double,\r
2314 using the round-half-to-even rule in the case of a tie. */\r
2315\r
2316double\r
2317PyLong_AsDouble(PyObject *v)\r
2318{\r
2319 Py_ssize_t exponent;\r
2320 double x;\r
2321\r
2322 if (v == NULL || !PyLong_Check(v)) {\r
2323 PyErr_BadInternalCall();\r
2324 return -1.0;\r
2325 }\r
2326 x = _PyLong_Frexp((PyLongObject *)v, &exponent);\r
2327 if ((x == -1.0 && PyErr_Occurred()) || exponent > DBL_MAX_EXP) {\r
2328 PyErr_SetString(PyExc_OverflowError,\r
2329 "long int too large to convert to float");\r
2330 return -1.0;\r
2331 }\r
2332 return ldexp(x, (int)exponent);\r
2333}\r
2334\r
2335/* Methods */\r
2336\r
2337static void\r
2338long_dealloc(PyObject *v)\r
2339{\r
2340 Py_TYPE(v)->tp_free(v);\r
2341}\r
2342\r
2343static PyObject *\r
2344long_repr(PyObject *v)\r
2345{\r
2346 return _PyLong_Format(v, 10, 1, 0);\r
2347}\r
2348\r
2349static PyObject *\r
2350long_str(PyObject *v)\r
2351{\r
2352 return _PyLong_Format(v, 10, 0, 0);\r
2353}\r
2354\r
2355static int\r
2356long_compare(PyLongObject *a, PyLongObject *b)\r
2357{\r
2358 Py_ssize_t sign;\r
2359\r
2360 if (Py_SIZE(a) != Py_SIZE(b)) {\r
2361 sign = Py_SIZE(a) - Py_SIZE(b);\r
2362 }\r
2363 else {\r
2364 Py_ssize_t i = ABS(Py_SIZE(a));\r
2365 while (--i >= 0 && a->ob_digit[i] == b->ob_digit[i])\r
2366 ;\r
2367 if (i < 0)\r
2368 sign = 0;\r
2369 else {\r
2370 sign = (sdigit)a->ob_digit[i] - (sdigit)b->ob_digit[i];\r
2371 if (Py_SIZE(a) < 0)\r
2372 sign = -sign;\r
2373 }\r
2374 }\r
2375 return sign < 0 ? -1 : sign > 0 ? 1 : 0;\r
2376}\r
2377\r
2378static long\r
2379long_hash(PyLongObject *v)\r
2380{\r
2381 unsigned long x;\r
2382 Py_ssize_t i;\r
2383 int sign;\r
2384\r
2385 /* This is designed so that Python ints and longs with the\r
2386 same value hash to the same value, otherwise comparisons\r
2387 of mapping keys will turn out weird */\r
2388 i = v->ob_size;\r
2389 sign = 1;\r
2390 x = 0;\r
2391 if (i < 0) {\r
2392 sign = -1;\r
2393 i = -(i);\r
2394 }\r
2395 /* The following loop produces a C unsigned long x such that x is\r
2396 congruent to the absolute value of v modulo ULONG_MAX. The\r
2397 resulting x is nonzero if and only if v is. */\r
2398 while (--i >= 0) {\r
2399 /* Force a native long #-bits (32 or 64) circular shift */\r
2400 x = (x >> (8*SIZEOF_LONG-PyLong_SHIFT)) | (x << PyLong_SHIFT);\r
2401 x += v->ob_digit[i];\r
2402 /* If the addition above overflowed we compensate by\r
2403 incrementing. This preserves the value modulo\r
2404 ULONG_MAX. */\r
2405 if (x < v->ob_digit[i])\r
2406 x++;\r
2407 }\r
2408 x = x * sign;\r
2409 if (x == (unsigned long)-1)\r
2410 x = (unsigned long)-2;\r
2411 return (long)x;\r
2412}\r
2413\r
2414\r
2415/* Add the absolute values of two long integers. */\r
2416\r
2417static PyLongObject *\r
2418x_add(PyLongObject *a, PyLongObject *b)\r
2419{\r
2420 Py_ssize_t size_a = ABS(Py_SIZE(a)), size_b = ABS(Py_SIZE(b));\r
2421 PyLongObject *z;\r
2422 Py_ssize_t i;\r
2423 digit carry = 0;\r
2424\r
2425 /* Ensure a is the larger of the two: */\r
2426 if (size_a < size_b) {\r
2427 { PyLongObject *temp = a; a = b; b = temp; }\r
2428 { Py_ssize_t size_temp = size_a;\r
2429 size_a = size_b;\r
2430 size_b = size_temp; }\r
2431 }\r
2432 z = _PyLong_New(size_a+1);\r
2433 if (z == NULL)\r
2434 return NULL;\r
2435 for (i = 0; i < size_b; ++i) {\r
2436 carry += a->ob_digit[i] + b->ob_digit[i];\r
2437 z->ob_digit[i] = carry & PyLong_MASK;\r
2438 carry >>= PyLong_SHIFT;\r
2439 }\r
2440 for (; i < size_a; ++i) {\r
2441 carry += a->ob_digit[i];\r
2442 z->ob_digit[i] = carry & PyLong_MASK;\r
2443 carry >>= PyLong_SHIFT;\r
2444 }\r
2445 z->ob_digit[i] = carry;\r
2446 return long_normalize(z);\r
2447}\r
2448\r
2449/* Subtract the absolute values of two integers. */\r
2450\r
2451static PyLongObject *\r
2452x_sub(PyLongObject *a, PyLongObject *b)\r
2453{\r
2454 Py_ssize_t size_a = ABS(Py_SIZE(a)), size_b = ABS(Py_SIZE(b));\r
2455 PyLongObject *z;\r
2456 Py_ssize_t i;\r
2457 int sign = 1;\r
2458 digit borrow = 0;\r
2459\r
2460 /* Ensure a is the larger of the two: */\r
2461 if (size_a < size_b) {\r
2462 sign = -1;\r
2463 { PyLongObject *temp = a; a = b; b = temp; }\r
2464 { Py_ssize_t size_temp = size_a;\r
2465 size_a = size_b;\r
2466 size_b = size_temp; }\r
2467 }\r
2468 else if (size_a == size_b) {\r
2469 /* Find highest digit where a and b differ: */\r
2470 i = size_a;\r
2471 while (--i >= 0 && a->ob_digit[i] == b->ob_digit[i])\r
2472 ;\r
2473 if (i < 0)\r
2474 return _PyLong_New(0);\r
2475 if (a->ob_digit[i] < b->ob_digit[i]) {\r
2476 sign = -1;\r
2477 { PyLongObject *temp = a; a = b; b = temp; }\r
2478 }\r
2479 size_a = size_b = i+1;\r
2480 }\r
2481 z = _PyLong_New(size_a);\r
2482 if (z == NULL)\r
2483 return NULL;\r
2484 for (i = 0; i < size_b; ++i) {\r
2485 /* The following assumes unsigned arithmetic\r
2486 works module 2**N for some N>PyLong_SHIFT. */\r
2487 borrow = a->ob_digit[i] - b->ob_digit[i] - borrow;\r
2488 z->ob_digit[i] = borrow & PyLong_MASK;\r
2489 borrow >>= PyLong_SHIFT;\r
2490 borrow &= 1; /* Keep only one sign bit */\r
2491 }\r
2492 for (; i < size_a; ++i) {\r
2493 borrow = a->ob_digit[i] - borrow;\r
2494 z->ob_digit[i] = borrow & PyLong_MASK;\r
2495 borrow >>= PyLong_SHIFT;\r
2496 borrow &= 1; /* Keep only one sign bit */\r
2497 }\r
2498 assert(borrow == 0);\r
2499 if (sign < 0)\r
2500 z->ob_size = -(z->ob_size);\r
2501 return long_normalize(z);\r
2502}\r
2503\r
2504static PyObject *\r
2505long_add(PyLongObject *v, PyLongObject *w)\r
2506{\r
2507 PyLongObject *a, *b, *z;\r
2508\r
2509 CONVERT_BINOP((PyObject *)v, (PyObject *)w, &a, &b);\r
2510\r
2511 if (a->ob_size < 0) {\r
2512 if (b->ob_size < 0) {\r
2513 z = x_add(a, b);\r
2514 if (z != NULL && z->ob_size != 0)\r
2515 z->ob_size = -(z->ob_size);\r
2516 }\r
2517 else\r
2518 z = x_sub(b, a);\r
2519 }\r
2520 else {\r
2521 if (b->ob_size < 0)\r
2522 z = x_sub(a, b);\r
2523 else\r
2524 z = x_add(a, b);\r
2525 }\r
2526 Py_DECREF(a);\r
2527 Py_DECREF(b);\r
2528 return (PyObject *)z;\r
2529}\r
2530\r
2531static PyObject *\r
2532long_sub(PyLongObject *v, PyLongObject *w)\r
2533{\r
2534 PyLongObject *a, *b, *z;\r
2535\r
2536 CONVERT_BINOP((PyObject *)v, (PyObject *)w, &a, &b);\r
2537\r
2538 if (a->ob_size < 0) {\r
2539 if (b->ob_size < 0)\r
2540 z = x_sub(a, b);\r
2541 else\r
2542 z = x_add(a, b);\r
2543 if (z != NULL && z->ob_size != 0)\r
2544 z->ob_size = -(z->ob_size);\r
2545 }\r
2546 else {\r
2547 if (b->ob_size < 0)\r
2548 z = x_add(a, b);\r
2549 else\r
2550 z = x_sub(a, b);\r
2551 }\r
2552 Py_DECREF(a);\r
2553 Py_DECREF(b);\r
2554 return (PyObject *)z;\r
2555}\r
2556\r
2557/* Grade school multiplication, ignoring the signs.\r
2558 * Returns the absolute value of the product, or NULL if error.\r
2559 */\r
2560static PyLongObject *\r
2561x_mul(PyLongObject *a, PyLongObject *b)\r
2562{\r
2563 PyLongObject *z;\r
2564 Py_ssize_t size_a = ABS(Py_SIZE(a));\r
2565 Py_ssize_t size_b = ABS(Py_SIZE(b));\r
2566 Py_ssize_t i;\r
2567\r
2568 z = _PyLong_New(size_a + size_b);\r
2569 if (z == NULL)\r
2570 return NULL;\r
2571\r
2572 memset(z->ob_digit, 0, Py_SIZE(z) * sizeof(digit));\r
2573 if (a == b) {\r
2574 /* Efficient squaring per HAC, Algorithm 14.16:\r
2575 * http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf\r
2576 * Gives slightly less than a 2x speedup when a == b,\r
2577 * via exploiting that each entry in the multiplication\r
2578 * pyramid appears twice (except for the size_a squares).\r
2579 */\r
2580 for (i = 0; i < size_a; ++i) {\r
2581 twodigits carry;\r
2582 twodigits f = a->ob_digit[i];\r
2583 digit *pz = z->ob_digit + (i << 1);\r
2584 digit *pa = a->ob_digit + i + 1;\r
2585 digit *paend = a->ob_digit + size_a;\r
2586\r
2587 SIGCHECK({\r
2588 Py_DECREF(z);\r
2589 return NULL;\r
2590 });\r
2591\r
2592 carry = *pz + f * f;\r
2593 *pz++ = (digit)(carry & PyLong_MASK);\r
2594 carry >>= PyLong_SHIFT;\r
2595 assert(carry <= PyLong_MASK);\r
2596\r
2597 /* Now f is added in twice in each column of the\r
2598 * pyramid it appears. Same as adding f<<1 once.\r
2599 */\r
2600 f <<= 1;\r
2601 while (pa < paend) {\r
2602 carry += *pz + *pa++ * f;\r
2603 *pz++ = (digit)(carry & PyLong_MASK);\r
2604 carry >>= PyLong_SHIFT;\r
2605 assert(carry <= (PyLong_MASK << 1));\r
2606 }\r
2607 if (carry) {\r
2608 carry += *pz;\r
2609 *pz++ = (digit)(carry & PyLong_MASK);\r
2610 carry >>= PyLong_SHIFT;\r
2611 }\r
2612 if (carry)\r
2613 *pz += (digit)(carry & PyLong_MASK);\r
2614 assert((carry >> PyLong_SHIFT) == 0);\r
2615 }\r
2616 }\r
2617 else { /* a is not the same as b -- gradeschool long mult */\r
2618 for (i = 0; i < size_a; ++i) {\r
2619 twodigits carry = 0;\r
2620 twodigits f = a->ob_digit[i];\r
2621 digit *pz = z->ob_digit + i;\r
2622 digit *pb = b->ob_digit;\r
2623 digit *pbend = b->ob_digit + size_b;\r
2624\r
2625 SIGCHECK({\r
2626 Py_DECREF(z);\r
2627 return NULL;\r
2628 });\r
2629\r
2630 while (pb < pbend) {\r
2631 carry += *pz + *pb++ * f;\r
2632 *pz++ = (digit)(carry & PyLong_MASK);\r
2633 carry >>= PyLong_SHIFT;\r
2634 assert(carry <= PyLong_MASK);\r
2635 }\r
2636 if (carry)\r
2637 *pz += (digit)(carry & PyLong_MASK);\r
2638 assert((carry >> PyLong_SHIFT) == 0);\r
2639 }\r
2640 }\r
2641 return long_normalize(z);\r
2642}\r
2643\r
2644/* A helper for Karatsuba multiplication (k_mul).\r
2645 Takes a long "n" and an integer "size" representing the place to\r
2646 split, and sets low and high such that abs(n) == (high << size) + low,\r
2647 viewing the shift as being by digits. The sign bit is ignored, and\r
2648 the return values are >= 0.\r
2649 Returns 0 on success, -1 on failure.\r
2650*/\r
2651static int\r
2652kmul_split(PyLongObject *n,\r
2653 Py_ssize_t size,\r
2654 PyLongObject **high,\r
2655 PyLongObject **low)\r
2656{\r
2657 PyLongObject *hi, *lo;\r
2658 Py_ssize_t size_lo, size_hi;\r
2659 const Py_ssize_t size_n = ABS(Py_SIZE(n));\r
2660\r
2661 size_lo = MIN(size_n, size);\r
2662 size_hi = size_n - size_lo;\r
2663\r
2664 if ((hi = _PyLong_New(size_hi)) == NULL)\r
2665 return -1;\r
2666 if ((lo = _PyLong_New(size_lo)) == NULL) {\r
2667 Py_DECREF(hi);\r
2668 return -1;\r
2669 }\r
2670\r
2671 memcpy(lo->ob_digit, n->ob_digit, size_lo * sizeof(digit));\r
2672 memcpy(hi->ob_digit, n->ob_digit + size_lo, size_hi * sizeof(digit));\r
2673\r
2674 *high = long_normalize(hi);\r
2675 *low = long_normalize(lo);\r
2676 return 0;\r
2677}\r
2678\r
2679static PyLongObject *k_lopsided_mul(PyLongObject *a, PyLongObject *b);\r
2680\r
2681/* Karatsuba multiplication. Ignores the input signs, and returns the\r
2682 * absolute value of the product (or NULL if error).\r
2683 * See Knuth Vol. 2 Chapter 4.3.3 (Pp. 294-295).\r
2684 */\r
2685static PyLongObject *\r
2686k_mul(PyLongObject *a, PyLongObject *b)\r
2687{\r
2688 Py_ssize_t asize = ABS(Py_SIZE(a));\r
2689 Py_ssize_t bsize = ABS(Py_SIZE(b));\r
2690 PyLongObject *ah = NULL;\r
2691 PyLongObject *al = NULL;\r
2692 PyLongObject *bh = NULL;\r
2693 PyLongObject *bl = NULL;\r
2694 PyLongObject *ret = NULL;\r
2695 PyLongObject *t1, *t2, *t3;\r
2696 Py_ssize_t shift; /* the number of digits we split off */\r
2697 Py_ssize_t i;\r
2698\r
2699 /* (ah*X+al)(bh*X+bl) = ah*bh*X*X + (ah*bl + al*bh)*X + al*bl\r
2700 * Let k = (ah+al)*(bh+bl) = ah*bl + al*bh + ah*bh + al*bl\r
2701 * Then the original product is\r
2702 * ah*bh*X*X + (k - ah*bh - al*bl)*X + al*bl\r
2703 * By picking X to be a power of 2, "*X" is just shifting, and it's\r
2704 * been reduced to 3 multiplies on numbers half the size.\r
2705 */\r
2706\r
2707 /* We want to split based on the larger number; fiddle so that b\r
2708 * is largest.\r
2709 */\r
2710 if (asize > bsize) {\r
2711 t1 = a;\r
2712 a = b;\r
2713 b = t1;\r
2714\r
2715 i = asize;\r
2716 asize = bsize;\r
2717 bsize = i;\r
2718 }\r
2719\r
2720 /* Use gradeschool math when either number is too small. */\r
2721 i = a == b ? KARATSUBA_SQUARE_CUTOFF : KARATSUBA_CUTOFF;\r
2722 if (asize <= i) {\r
2723 if (asize == 0)\r
2724 return _PyLong_New(0);\r
2725 else\r
2726 return x_mul(a, b);\r
2727 }\r
2728\r
2729 /* If a is small compared to b, splitting on b gives a degenerate\r
2730 * case with ah==0, and Karatsuba may be (even much) less efficient\r
2731 * than "grade school" then. However, we can still win, by viewing\r
2732 * b as a string of "big digits", each of width a->ob_size. That\r
2733 * leads to a sequence of balanced calls to k_mul.\r
2734 */\r
2735 if (2 * asize <= bsize)\r
2736 return k_lopsided_mul(a, b);\r
2737\r
2738 /* Split a & b into hi & lo pieces. */\r
2739 shift = bsize >> 1;\r
2740 if (kmul_split(a, shift, &ah, &al) < 0) goto fail;\r
2741 assert(Py_SIZE(ah) > 0); /* the split isn't degenerate */\r
2742\r
2743 if (a == b) {\r
2744 bh = ah;\r
2745 bl = al;\r
2746 Py_INCREF(bh);\r
2747 Py_INCREF(bl);\r
2748 }\r
2749 else if (kmul_split(b, shift, &bh, &bl) < 0) goto fail;\r
2750\r
2751 /* The plan:\r
2752 * 1. Allocate result space (asize + bsize digits: that's always\r
2753 * enough).\r
2754 * 2. Compute ah*bh, and copy into result at 2*shift.\r
2755 * 3. Compute al*bl, and copy into result at 0. Note that this\r
2756 * can't overlap with #2.\r
2757 * 4. Subtract al*bl from the result, starting at shift. This may\r
2758 * underflow (borrow out of the high digit), but we don't care:\r
2759 * we're effectively doing unsigned arithmetic mod\r
2760 * PyLong_BASE**(sizea + sizeb), and so long as the *final* result fits,\r
2761 * borrows and carries out of the high digit can be ignored.\r
2762 * 5. Subtract ah*bh from the result, starting at shift.\r
2763 * 6. Compute (ah+al)*(bh+bl), and add it into the result starting\r
2764 * at shift.\r
2765 */\r
2766\r
2767 /* 1. Allocate result space. */\r
2768 ret = _PyLong_New(asize + bsize);\r
2769 if (ret == NULL) goto fail;\r
2770#ifdef Py_DEBUG\r
2771 /* Fill with trash, to catch reference to uninitialized digits. */\r
2772 memset(ret->ob_digit, 0xDF, Py_SIZE(ret) * sizeof(digit));\r
2773#endif\r
2774\r
2775 /* 2. t1 <- ah*bh, and copy into high digits of result. */\r
2776 if ((t1 = k_mul(ah, bh)) == NULL) goto fail;\r
2777 assert(Py_SIZE(t1) >= 0);\r
2778 assert(2*shift + Py_SIZE(t1) <= Py_SIZE(ret));\r
2779 memcpy(ret->ob_digit + 2*shift, t1->ob_digit,\r
2780 Py_SIZE(t1) * sizeof(digit));\r
2781\r
2782 /* Zero-out the digits higher than the ah*bh copy. */\r
2783 i = Py_SIZE(ret) - 2*shift - Py_SIZE(t1);\r
2784 if (i)\r
2785 memset(ret->ob_digit + 2*shift + Py_SIZE(t1), 0,\r
2786 i * sizeof(digit));\r
2787\r
2788 /* 3. t2 <- al*bl, and copy into the low digits. */\r
2789 if ((t2 = k_mul(al, bl)) == NULL) {\r
2790 Py_DECREF(t1);\r
2791 goto fail;\r
2792 }\r
2793 assert(Py_SIZE(t2) >= 0);\r
2794 assert(Py_SIZE(t2) <= 2*shift); /* no overlap with high digits */\r
2795 memcpy(ret->ob_digit, t2->ob_digit, Py_SIZE(t2) * sizeof(digit));\r
2796\r
2797 /* Zero out remaining digits. */\r
2798 i = 2*shift - Py_SIZE(t2); /* number of uninitialized digits */\r
2799 if (i)\r
2800 memset(ret->ob_digit + Py_SIZE(t2), 0, i * sizeof(digit));\r
2801\r
2802 /* 4 & 5. Subtract ah*bh (t1) and al*bl (t2). We do al*bl first\r
2803 * because it's fresher in cache.\r
2804 */\r
2805 i = Py_SIZE(ret) - shift; /* # digits after shift */\r
2806 (void)v_isub(ret->ob_digit + shift, i, t2->ob_digit, Py_SIZE(t2));\r
2807 Py_DECREF(t2);\r
2808\r
2809 (void)v_isub(ret->ob_digit + shift, i, t1->ob_digit, Py_SIZE(t1));\r
2810 Py_DECREF(t1);\r
2811\r
2812 /* 6. t3 <- (ah+al)(bh+bl), and add into result. */\r
2813 if ((t1 = x_add(ah, al)) == NULL) goto fail;\r
2814 Py_DECREF(ah);\r
2815 Py_DECREF(al);\r
2816 ah = al = NULL;\r
2817\r
2818 if (a == b) {\r
2819 t2 = t1;\r
2820 Py_INCREF(t2);\r
2821 }\r
2822 else if ((t2 = x_add(bh, bl)) == NULL) {\r
2823 Py_DECREF(t1);\r
2824 goto fail;\r
2825 }\r
2826 Py_DECREF(bh);\r
2827 Py_DECREF(bl);\r
2828 bh = bl = NULL;\r
2829\r
2830 t3 = k_mul(t1, t2);\r
2831 Py_DECREF(t1);\r
2832 Py_DECREF(t2);\r
2833 if (t3 == NULL) goto fail;\r
2834 assert(Py_SIZE(t3) >= 0);\r
2835\r
2836 /* Add t3. It's not obvious why we can't run out of room here.\r
2837 * See the (*) comment after this function.\r
2838 */\r
2839 (void)v_iadd(ret->ob_digit + shift, i, t3->ob_digit, Py_SIZE(t3));\r
2840 Py_DECREF(t3);\r
2841\r
2842 return long_normalize(ret);\r
2843\r
2844 fail:\r
2845 Py_XDECREF(ret);\r
2846 Py_XDECREF(ah);\r
2847 Py_XDECREF(al);\r
2848 Py_XDECREF(bh);\r
2849 Py_XDECREF(bl);\r
2850 return NULL;\r
2851}\r
2852\r
2853/* (*) Why adding t3 can't "run out of room" above.\r
2854\r
2855Let f(x) mean the floor of x and c(x) mean the ceiling of x. Some facts\r
2856to start with:\r
2857\r
28581. For any integer i, i = c(i/2) + f(i/2). In particular,\r
2859 bsize = c(bsize/2) + f(bsize/2).\r
28602. shift = f(bsize/2)\r
28613. asize <= bsize\r
28624. Since we call k_lopsided_mul if asize*2 <= bsize, asize*2 > bsize in this\r
2863 routine, so asize > bsize/2 >= f(bsize/2) in this routine.\r
2864\r
2865We allocated asize + bsize result digits, and add t3 into them at an offset\r
2866of shift. This leaves asize+bsize-shift allocated digit positions for t3\r
2867to fit into, = (by #1 and #2) asize + f(bsize/2) + c(bsize/2) - f(bsize/2) =\r
2868asize + c(bsize/2) available digit positions.\r
2869\r
2870bh has c(bsize/2) digits, and bl at most f(size/2) digits. So bh+hl has\r
2871at most c(bsize/2) digits + 1 bit.\r
2872\r
2873If asize == bsize, ah has c(bsize/2) digits, else ah has at most f(bsize/2)\r
2874digits, and al has at most f(bsize/2) digits in any case. So ah+al has at\r
2875most (asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 1 bit.\r
2876\r
2877The product (ah+al)*(bh+bl) therefore has at most\r
2878\r
2879 c(bsize/2) + (asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 2 bits\r
2880\r
2881and we have asize + c(bsize/2) available digit positions. We need to show\r
2882this is always enough. An instance of c(bsize/2) cancels out in both, so\r
2883the question reduces to whether asize digits is enough to hold\r
2884(asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 2 bits. If asize < bsize,\r
2885then we're asking whether asize digits >= f(bsize/2) digits + 2 bits. By #4,\r
2886asize is at least f(bsize/2)+1 digits, so this in turn reduces to whether 1\r
2887digit is enough to hold 2 bits. This is so since PyLong_SHIFT=15 >= 2. If\r
2888asize == bsize, then we're asking whether bsize digits is enough to hold\r
2889c(bsize/2) digits + 2 bits, or equivalently (by #1) whether f(bsize/2) digits\r
2890is enough to hold 2 bits. This is so if bsize >= 2, which holds because\r
2891bsize >= KARATSUBA_CUTOFF >= 2.\r
2892\r
2893Note that since there's always enough room for (ah+al)*(bh+bl), and that's\r
2894clearly >= each of ah*bh and al*bl, there's always enough room to subtract\r
2895ah*bh and al*bl too.\r
2896*/\r
2897\r
2898/* b has at least twice the digits of a, and a is big enough that Karatsuba\r
2899 * would pay off *if* the inputs had balanced sizes. View b as a sequence\r
2900 * of slices, each with a->ob_size digits, and multiply the slices by a,\r
2901 * one at a time. This gives k_mul balanced inputs to work with, and is\r
2902 * also cache-friendly (we compute one double-width slice of the result\r
2903 * at a time, then move on, never backtracking except for the helpful\r
2904 * single-width slice overlap between successive partial sums).\r
2905 */\r
2906static PyLongObject *\r
2907k_lopsided_mul(PyLongObject *a, PyLongObject *b)\r
2908{\r
2909 const Py_ssize_t asize = ABS(Py_SIZE(a));\r
2910 Py_ssize_t bsize = ABS(Py_SIZE(b));\r
2911 Py_ssize_t nbdone; /* # of b digits already multiplied */\r
2912 PyLongObject *ret;\r
2913 PyLongObject *bslice = NULL;\r
2914\r
2915 assert(asize > KARATSUBA_CUTOFF);\r
2916 assert(2 * asize <= bsize);\r
2917\r
2918 /* Allocate result space, and zero it out. */\r
2919 ret = _PyLong_New(asize + bsize);\r
2920 if (ret == NULL)\r
2921 return NULL;\r
2922 memset(ret->ob_digit, 0, Py_SIZE(ret) * sizeof(digit));\r
2923\r
2924 /* Successive slices of b are copied into bslice. */\r
2925 bslice = _PyLong_New(asize);\r
2926 if (bslice == NULL)\r
2927 goto fail;\r
2928\r
2929 nbdone = 0;\r
2930 while (bsize > 0) {\r
2931 PyLongObject *product;\r
2932 const Py_ssize_t nbtouse = MIN(bsize, asize);\r
2933\r
2934 /* Multiply the next slice of b by a. */\r
2935 memcpy(bslice->ob_digit, b->ob_digit + nbdone,\r
2936 nbtouse * sizeof(digit));\r
2937 Py_SIZE(bslice) = nbtouse;\r
2938 product = k_mul(a, bslice);\r
2939 if (product == NULL)\r
2940 goto fail;\r
2941\r
2942 /* Add into result. */\r
2943 (void)v_iadd(ret->ob_digit + nbdone, Py_SIZE(ret) - nbdone,\r
2944 product->ob_digit, Py_SIZE(product));\r
2945 Py_DECREF(product);\r
2946\r
2947 bsize -= nbtouse;\r
2948 nbdone += nbtouse;\r
2949 }\r
2950\r
2951 Py_DECREF(bslice);\r
2952 return long_normalize(ret);\r
2953\r
2954 fail:\r
2955 Py_DECREF(ret);\r
2956 Py_XDECREF(bslice);\r
2957 return NULL;\r
2958}\r
2959\r
2960static PyObject *\r
2961long_mul(PyLongObject *v, PyLongObject *w)\r
2962{\r
2963 PyLongObject *a, *b, *z;\r
2964\r
2965 if (!convert_binop((PyObject *)v, (PyObject *)w, &a, &b)) {\r
2966 Py_INCREF(Py_NotImplemented);\r
2967 return Py_NotImplemented;\r
2968 }\r
2969\r
2970 z = k_mul(a, b);\r
2971 /* Negate if exactly one of the inputs is negative. */\r
2972 if (((a->ob_size ^ b->ob_size) < 0) && z)\r
2973 z->ob_size = -(z->ob_size);\r
2974 Py_DECREF(a);\r
2975 Py_DECREF(b);\r
2976 return (PyObject *)z;\r
2977}\r
2978\r
2979/* The / and % operators are now defined in terms of divmod().\r
2980 The expression a mod b has the value a - b*floor(a/b).\r
2981 The long_divrem function gives the remainder after division of\r
2982 |a| by |b|, with the sign of a. This is also expressed\r
2983 as a - b*trunc(a/b), if trunc truncates towards zero.\r
2984 Some examples:\r
2985 a b a rem b a mod b\r
2986 13 10 3 3\r
2987 -13 10 -3 7\r
2988 13 -10 3 -7\r
2989 -13 -10 -3 -3\r
2990 So, to get from rem to mod, we have to add b if a and b\r
2991 have different signs. We then subtract one from the 'div'\r
2992 part of the outcome to keep the invariant intact. */\r
2993\r
2994/* Compute\r
2995 * *pdiv, *pmod = divmod(v, w)\r
2996 * NULL can be passed for pdiv or pmod, in which case that part of\r
2997 * the result is simply thrown away. The caller owns a reference to\r
2998 * each of these it requests (does not pass NULL for).\r
2999 */\r
3000static int\r
3001l_divmod(PyLongObject *v, PyLongObject *w,\r
3002 PyLongObject **pdiv, PyLongObject **pmod)\r
3003{\r
3004 PyLongObject *div, *mod;\r
3005\r
3006 if (long_divrem(v, w, &div, &mod) < 0)\r
3007 return -1;\r
3008 if ((Py_SIZE(mod) < 0 && Py_SIZE(w) > 0) ||\r
3009 (Py_SIZE(mod) > 0 && Py_SIZE(w) < 0)) {\r
3010 PyLongObject *temp;\r
3011 PyLongObject *one;\r
3012 temp = (PyLongObject *) long_add(mod, w);\r
3013 Py_DECREF(mod);\r
3014 mod = temp;\r
3015 if (mod == NULL) {\r
3016 Py_DECREF(div);\r
3017 return -1;\r
3018 }\r
3019 one = (PyLongObject *) PyLong_FromLong(1L);\r
3020 if (one == NULL ||\r
3021 (temp = (PyLongObject *) long_sub(div, one)) == NULL) {\r
3022 Py_DECREF(mod);\r
3023 Py_DECREF(div);\r
3024 Py_XDECREF(one);\r
3025 return -1;\r
3026 }\r
3027 Py_DECREF(one);\r
3028 Py_DECREF(div);\r
3029 div = temp;\r
3030 }\r
3031 if (pdiv != NULL)\r
3032 *pdiv = div;\r
3033 else\r
3034 Py_DECREF(div);\r
3035\r
3036 if (pmod != NULL)\r
3037 *pmod = mod;\r
3038 else\r
3039 Py_DECREF(mod);\r
3040\r
3041 return 0;\r
3042}\r
3043\r
3044static PyObject *\r
3045long_div(PyObject *v, PyObject *w)\r
3046{\r
3047 PyLongObject *a, *b, *div;\r
3048\r
3049 CONVERT_BINOP(v, w, &a, &b);\r
3050 if (l_divmod(a, b, &div, NULL) < 0)\r
3051 div = NULL;\r
3052 Py_DECREF(a);\r
3053 Py_DECREF(b);\r
3054 return (PyObject *)div;\r
3055}\r
3056\r
3057static PyObject *\r
3058long_classic_div(PyObject *v, PyObject *w)\r
3059{\r
3060 PyLongObject *a, *b, *div;\r
3061\r
3062 CONVERT_BINOP(v, w, &a, &b);\r
3063 if (Py_DivisionWarningFlag &&\r
3064 PyErr_Warn(PyExc_DeprecationWarning, "classic long division") < 0)\r
3065 div = NULL;\r
3066 else if (l_divmod(a, b, &div, NULL) < 0)\r
3067 div = NULL;\r
3068 Py_DECREF(a);\r
3069 Py_DECREF(b);\r
3070 return (PyObject *)div;\r
3071}\r
3072\r
3073/* PyLong/PyLong -> float, with correctly rounded result. */\r
3074\r
3075#define MANT_DIG_DIGITS (DBL_MANT_DIG / PyLong_SHIFT)\r
3076#define MANT_DIG_BITS (DBL_MANT_DIG % PyLong_SHIFT)\r
3077\r
3078static PyObject *\r
3079long_true_divide(PyObject *v, PyObject *w)\r
3080{\r
3081 PyLongObject *a, *b, *x;\r
3082 Py_ssize_t a_size, b_size, shift, extra_bits, diff, x_size, x_bits;\r
3083 digit mask, low;\r
3084 int inexact, negate, a_is_small, b_is_small;\r
3085 double dx, result;\r
3086\r
3087 CONVERT_BINOP(v, w, &a, &b);\r
3088\r
3089 /*\r
3090 Method in a nutshell:\r
3091\r
3092 0. reduce to case a, b > 0; filter out obvious underflow/overflow\r
3093 1. choose a suitable integer 'shift'\r
3094 2. use integer arithmetic to compute x = floor(2**-shift*a/b)\r
3095 3. adjust x for correct rounding\r
3096 4. convert x to a double dx with the same value\r
3097 5. return ldexp(dx, shift).\r
3098\r
3099 In more detail:\r
3100\r
3101 0. For any a, a/0 raises ZeroDivisionError; for nonzero b, 0/b\r
3102 returns either 0.0 or -0.0, depending on the sign of b. For a and\r
3103 b both nonzero, ignore signs of a and b, and add the sign back in\r
3104 at the end. Now write a_bits and b_bits for the bit lengths of a\r
3105 and b respectively (that is, a_bits = 1 + floor(log_2(a)); likewise\r
3106 for b). Then\r
3107\r
3108 2**(a_bits - b_bits - 1) < a/b < 2**(a_bits - b_bits + 1).\r
3109\r
3110 So if a_bits - b_bits > DBL_MAX_EXP then a/b > 2**DBL_MAX_EXP and\r
3111 so overflows. Similarly, if a_bits - b_bits < DBL_MIN_EXP -\r
3112 DBL_MANT_DIG - 1 then a/b underflows to 0. With these cases out of\r
3113 the way, we can assume that\r
3114\r
3115 DBL_MIN_EXP - DBL_MANT_DIG - 1 <= a_bits - b_bits <= DBL_MAX_EXP.\r
3116\r
3117 1. The integer 'shift' is chosen so that x has the right number of\r
3118 bits for a double, plus two or three extra bits that will be used\r
3119 in the rounding decisions. Writing a_bits and b_bits for the\r
3120 number of significant bits in a and b respectively, a\r
3121 straightforward formula for shift is:\r
3122\r
3123 shift = a_bits - b_bits - DBL_MANT_DIG - 2\r
3124\r
3125 This is fine in the usual case, but if a/b is smaller than the\r
3126 smallest normal float then it can lead to double rounding on an\r
3127 IEEE 754 platform, giving incorrectly rounded results. So we\r
3128 adjust the formula slightly. The actual formula used is:\r
3129\r
3130 shift = MAX(a_bits - b_bits, DBL_MIN_EXP) - DBL_MANT_DIG - 2\r
3131\r
3132 2. The quantity x is computed by first shifting a (left -shift bits\r
3133 if shift <= 0, right shift bits if shift > 0) and then dividing by\r
3134 b. For both the shift and the division, we keep track of whether\r
3135 the result is inexact, in a flag 'inexact'; this information is\r
3136 needed at the rounding stage.\r
3137\r
3138 With the choice of shift above, together with our assumption that\r
3139 a_bits - b_bits >= DBL_MIN_EXP - DBL_MANT_DIG - 1, it follows\r
3140 that x >= 1.\r
3141\r
3142 3. Now x * 2**shift <= a/b < (x+1) * 2**shift. We want to replace\r
3143 this with an exactly representable float of the form\r
3144\r
3145 round(x/2**extra_bits) * 2**(extra_bits+shift).\r
3146\r
3147 For float representability, we need x/2**extra_bits <\r
3148 2**DBL_MANT_DIG and extra_bits + shift >= DBL_MIN_EXP -\r
3149 DBL_MANT_DIG. This translates to the condition:\r
3150\r
3151 extra_bits >= MAX(x_bits, DBL_MIN_EXP - shift) - DBL_MANT_DIG\r
3152\r
3153 To round, we just modify the bottom digit of x in-place; this can\r
3154 end up giving a digit with value > PyLONG_MASK, but that's not a\r
3155 problem since digits can hold values up to 2*PyLONG_MASK+1.\r
3156\r
3157 With the original choices for shift above, extra_bits will always\r
3158 be 2 or 3. Then rounding under the round-half-to-even rule, we\r
3159 round up iff the most significant of the extra bits is 1, and\r
3160 either: (a) the computation of x in step 2 had an inexact result,\r
3161 or (b) at least one other of the extra bits is 1, or (c) the least\r
3162 significant bit of x (above those to be rounded) is 1.\r
3163\r
3164 4. Conversion to a double is straightforward; all floating-point\r
3165 operations involved in the conversion are exact, so there's no\r
3166 danger of rounding errors.\r
3167\r
3168 5. Use ldexp(x, shift) to compute x*2**shift, the final result.\r
3169 The result will always be exactly representable as a double, except\r
3170 in the case that it overflows. To avoid dependence on the exact\r
3171 behaviour of ldexp on overflow, we check for overflow before\r
3172 applying ldexp. The result of ldexp is adjusted for sign before\r
3173 returning.\r
3174 */\r
3175\r
3176 /* Reduce to case where a and b are both positive. */\r
3177 a_size = ABS(Py_SIZE(a));\r
3178 b_size = ABS(Py_SIZE(b));\r
3179 negate = (Py_SIZE(a) < 0) ^ (Py_SIZE(b) < 0);\r
3180 if (b_size == 0) {\r
3181 PyErr_SetString(PyExc_ZeroDivisionError,\r
3182 "division by zero");\r
3183 goto error;\r
3184 }\r
3185 if (a_size == 0)\r
3186 goto underflow_or_zero;\r
3187\r
3188 /* Fast path for a and b small (exactly representable in a double).\r
3189 Relies on floating-point division being correctly rounded; results\r
3190 may be subject to double rounding on x86 machines that operate with\r
3191 the x87 FPU set to 64-bit precision. */\r
3192 a_is_small = a_size <= MANT_DIG_DIGITS ||\r
3193 (a_size == MANT_DIG_DIGITS+1 &&\r
3194 a->ob_digit[MANT_DIG_DIGITS] >> MANT_DIG_BITS == 0);\r
3195 b_is_small = b_size <= MANT_DIG_DIGITS ||\r
3196 (b_size == MANT_DIG_DIGITS+1 &&\r
3197 b->ob_digit[MANT_DIG_DIGITS] >> MANT_DIG_BITS == 0);\r
3198 if (a_is_small && b_is_small) {\r
3199 double da, db;\r
3200 da = a->ob_digit[--a_size];\r
3201 while (a_size > 0)\r
3202 da = da * PyLong_BASE + a->ob_digit[--a_size];\r
3203 db = b->ob_digit[--b_size];\r
3204 while (b_size > 0)\r
3205 db = db * PyLong_BASE + b->ob_digit[--b_size];\r
3206 result = da / db;\r
3207 goto success;\r
3208 }\r
3209\r
3210 /* Catch obvious cases of underflow and overflow */\r
3211 diff = a_size - b_size;\r
3212 if (diff > PY_SSIZE_T_MAX/PyLong_SHIFT - 1)\r
3213 /* Extreme overflow */\r
3214 goto overflow;\r
3215 else if (diff < 1 - PY_SSIZE_T_MAX/PyLong_SHIFT)\r
3216 /* Extreme underflow */\r
3217 goto underflow_or_zero;\r
3218 /* Next line is now safe from overflowing a Py_ssize_t */\r
3219 diff = diff * PyLong_SHIFT + bits_in_digit(a->ob_digit[a_size - 1]) -\r
3220 bits_in_digit(b->ob_digit[b_size - 1]);\r
3221 /* Now diff = a_bits - b_bits. */\r
3222 if (diff > DBL_MAX_EXP)\r
3223 goto overflow;\r
3224 else if (diff < DBL_MIN_EXP - DBL_MANT_DIG - 1)\r
3225 goto underflow_or_zero;\r
3226\r
3227 /* Choose value for shift; see comments for step 1 above. */\r
3228 shift = MAX(diff, DBL_MIN_EXP) - DBL_MANT_DIG - 2;\r
3229\r
3230 inexact = 0;\r
3231\r
3232 /* x = abs(a * 2**-shift) */\r
3233 if (shift <= 0) {\r
3234 Py_ssize_t i, shift_digits = -shift / PyLong_SHIFT;\r
3235 digit rem;\r
3236 /* x = a << -shift */\r
3237 if (a_size >= PY_SSIZE_T_MAX - 1 - shift_digits) {\r
3238 /* In practice, it's probably impossible to end up\r
3239 here. Both a and b would have to be enormous,\r
3240 using close to SIZE_T_MAX bytes of memory each. */\r
3241 PyErr_SetString(PyExc_OverflowError,\r
3242 "intermediate overflow during division");\r
3243 goto error;\r
3244 }\r
3245 x = _PyLong_New(a_size + shift_digits + 1);\r
3246 if (x == NULL)\r
3247 goto error;\r
3248 for (i = 0; i < shift_digits; i++)\r
3249 x->ob_digit[i] = 0;\r
3250 rem = v_lshift(x->ob_digit + shift_digits, a->ob_digit,\r
3251 a_size, -shift % PyLong_SHIFT);\r
3252 x->ob_digit[a_size + shift_digits] = rem;\r
3253 }\r
3254 else {\r
3255 Py_ssize_t shift_digits = shift / PyLong_SHIFT;\r
3256 digit rem;\r
3257 /* x = a >> shift */\r
3258 assert(a_size >= shift_digits);\r
3259 x = _PyLong_New(a_size - shift_digits);\r
3260 if (x == NULL)\r
3261 goto error;\r
3262 rem = v_rshift(x->ob_digit, a->ob_digit + shift_digits,\r
3263 a_size - shift_digits, shift % PyLong_SHIFT);\r
3264 /* set inexact if any of the bits shifted out is nonzero */\r
3265 if (rem)\r
3266 inexact = 1;\r
3267 while (!inexact && shift_digits > 0)\r
3268 if (a->ob_digit[--shift_digits])\r
3269 inexact = 1;\r
3270 }\r
3271 long_normalize(x);\r
3272 x_size = Py_SIZE(x);\r
3273\r
3274 /* x //= b. If the remainder is nonzero, set inexact. We own the only\r
3275 reference to x, so it's safe to modify it in-place. */\r
3276 if (b_size == 1) {\r
3277 digit rem = inplace_divrem1(x->ob_digit, x->ob_digit, x_size,\r
3278 b->ob_digit[0]);\r
3279 long_normalize(x);\r
3280 if (rem)\r
3281 inexact = 1;\r
3282 }\r
3283 else {\r
3284 PyLongObject *div, *rem;\r
3285 div = x_divrem(x, b, &rem);\r
3286 Py_DECREF(x);\r
3287 x = div;\r
3288 if (x == NULL)\r
3289 goto error;\r
3290 if (Py_SIZE(rem))\r
3291 inexact = 1;\r
3292 Py_DECREF(rem);\r
3293 }\r
3294 x_size = ABS(Py_SIZE(x));\r
3295 assert(x_size > 0); /* result of division is never zero */\r
3296 x_bits = (x_size-1)*PyLong_SHIFT+bits_in_digit(x->ob_digit[x_size-1]);\r
3297\r
3298 /* The number of extra bits that have to be rounded away. */\r
3299 extra_bits = MAX(x_bits, DBL_MIN_EXP - shift) - DBL_MANT_DIG;\r
3300 assert(extra_bits == 2 || extra_bits == 3);\r
3301\r
3302 /* Round by directly modifying the low digit of x. */\r
3303 mask = (digit)1 << (extra_bits - 1);\r
3304 low = x->ob_digit[0] | inexact;\r
3305 if (low & mask && low & (3*mask-1))\r
3306 low += mask;\r
3307 x->ob_digit[0] = low & ~(mask-1U);\r
3308\r
3309 /* Convert x to a double dx; the conversion is exact. */\r
3310 dx = x->ob_digit[--x_size];\r
3311 while (x_size > 0)\r
3312 dx = dx * PyLong_BASE + x->ob_digit[--x_size];\r
3313 Py_DECREF(x);\r
3314\r
3315 /* Check whether ldexp result will overflow a double. */\r
3316 if (shift + x_bits >= DBL_MAX_EXP &&\r
3317 (shift + x_bits > DBL_MAX_EXP || dx == ldexp(1.0, (int)x_bits)))\r
3318 goto overflow;\r
3319 result = ldexp(dx, (int)shift);\r
3320\r
3321 success:\r
3322 Py_DECREF(a);\r
3323 Py_DECREF(b);\r
3324 return PyFloat_FromDouble(negate ? -result : result);\r
3325\r
3326 underflow_or_zero:\r
3327 Py_DECREF(a);\r
3328 Py_DECREF(b);\r
3329 return PyFloat_FromDouble(negate ? -0.0 : 0.0);\r
3330\r
3331 overflow:\r
3332 PyErr_SetString(PyExc_OverflowError,\r
3333 "integer division result too large for a float");\r
3334 error:\r
3335 Py_DECREF(a);\r
3336 Py_DECREF(b);\r
3337 return NULL;\r
3338}\r
3339\r
3340static PyObject *\r
3341long_mod(PyObject *v, PyObject *w)\r
3342{\r
3343 PyLongObject *a, *b, *mod;\r
3344\r
3345 CONVERT_BINOP(v, w, &a, &b);\r
3346\r
3347 if (l_divmod(a, b, NULL, &mod) < 0)\r
3348 mod = NULL;\r
3349 Py_DECREF(a);\r
3350 Py_DECREF(b);\r
3351 return (PyObject *)mod;\r
3352}\r
3353\r
3354static PyObject *\r
3355long_divmod(PyObject *v, PyObject *w)\r
3356{\r
3357 PyLongObject *a, *b, *div, *mod;\r
3358 PyObject *z;\r
3359\r
3360 CONVERT_BINOP(v, w, &a, &b);\r
3361\r
3362 if (l_divmod(a, b, &div, &mod) < 0) {\r
3363 Py_DECREF(a);\r
3364 Py_DECREF(b);\r
3365 return NULL;\r
3366 }\r
3367 z = PyTuple_New(2);\r
3368 if (z != NULL) {\r
3369 PyTuple_SetItem(z, 0, (PyObject *) div);\r
3370 PyTuple_SetItem(z, 1, (PyObject *) mod);\r
3371 }\r
3372 else {\r
3373 Py_DECREF(div);\r
3374 Py_DECREF(mod);\r
3375 }\r
3376 Py_DECREF(a);\r
3377 Py_DECREF(b);\r
3378 return z;\r
3379}\r
3380\r
3381/* pow(v, w, x) */\r
3382static PyObject *\r
3383long_pow(PyObject *v, PyObject *w, PyObject *x)\r
3384{\r
3385 PyLongObject *a, *b, *c; /* a,b,c = v,w,x */\r
3386 int negativeOutput = 0; /* if x<0 return negative output */\r
3387\r
3388 PyLongObject *z = NULL; /* accumulated result */\r
3389 Py_ssize_t i, j, k; /* counters */\r
3390 PyLongObject *temp = NULL;\r
3391\r
3392 /* 5-ary values. If the exponent is large enough, table is\r
3393 * precomputed so that table[i] == a**i % c for i in range(32).\r
3394 */\r
3395 PyLongObject *table[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\r
3396 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};\r
3397\r
3398 /* a, b, c = v, w, x */\r
3399 CONVERT_BINOP(v, w, &a, &b);\r
3400 if (PyLong_Check(x)) {\r
3401 c = (PyLongObject *)x;\r
3402 Py_INCREF(x);\r
3403 }\r
3404 else if (PyInt_Check(x)) {\r
3405 c = (PyLongObject *)PyLong_FromLong(PyInt_AS_LONG(x));\r
3406 if (c == NULL)\r
3407 goto Error;\r
3408 }\r
3409 else if (x == Py_None)\r
3410 c = NULL;\r
3411 else {\r
3412 Py_DECREF(a);\r
3413 Py_DECREF(b);\r
3414 Py_INCREF(Py_NotImplemented);\r
3415 return Py_NotImplemented;\r
3416 }\r
3417\r
3418 if (Py_SIZE(b) < 0) { /* if exponent is negative */\r
3419 if (c) {\r
3420 PyErr_SetString(PyExc_TypeError, "pow() 2nd argument "\r
3421 "cannot be negative when 3rd argument specified");\r
3422 goto Error;\r
3423 }\r
3424 else {\r
3425 /* else return a float. This works because we know\r
3426 that this calls float_pow() which converts its\r
3427 arguments to double. */\r
3428 Py_DECREF(a);\r
3429 Py_DECREF(b);\r
3430 return PyFloat_Type.tp_as_number->nb_power(v, w, x);\r
3431 }\r
3432 }\r
3433\r
3434 if (c) {\r
3435 /* if modulus == 0:\r
3436 raise ValueError() */\r
3437 if (Py_SIZE(c) == 0) {\r
3438 PyErr_SetString(PyExc_ValueError,\r
3439 "pow() 3rd argument cannot be 0");\r
3440 goto Error;\r
3441 }\r
3442\r
3443 /* if modulus < 0:\r
3444 negativeOutput = True\r
3445 modulus = -modulus */\r
3446 if (Py_SIZE(c) < 0) {\r
3447 negativeOutput = 1;\r
3448 temp = (PyLongObject *)_PyLong_Copy(c);\r
3449 if (temp == NULL)\r
3450 goto Error;\r
3451 Py_DECREF(c);\r
3452 c = temp;\r
3453 temp = NULL;\r
3454 c->ob_size = - c->ob_size;\r
3455 }\r
3456\r
3457 /* if modulus == 1:\r
3458 return 0 */\r
3459 if ((Py_SIZE(c) == 1) && (c->ob_digit[0] == 1)) {\r
3460 z = (PyLongObject *)PyLong_FromLong(0L);\r
3461 goto Done;\r
3462 }\r
3463\r
3464 /* if base < 0:\r
3465 base = base % modulus\r
3466 Having the base positive just makes things easier. */\r
3467 if (Py_SIZE(a) < 0) {\r
3468 if (l_divmod(a, c, NULL, &temp) < 0)\r
3469 goto Error;\r
3470 Py_DECREF(a);\r
3471 a = temp;\r
3472 temp = NULL;\r
3473 }\r
3474 }\r
3475\r
3476 /* At this point a, b, and c are guaranteed non-negative UNLESS\r
3477 c is NULL, in which case a may be negative. */\r
3478\r
3479 z = (PyLongObject *)PyLong_FromLong(1L);\r
3480 if (z == NULL)\r
3481 goto Error;\r
3482\r
3483 /* Perform a modular reduction, X = X % c, but leave X alone if c\r
3484 * is NULL.\r
3485 */\r
3486#define REDUCE(X) \\r
3487 do { \\r
3488 if (c != NULL) { \\r
3489 if (l_divmod(X, c, NULL, &temp) < 0) \\r
3490 goto Error; \\r
3491 Py_XDECREF(X); \\r
3492 X = temp; \\r
3493 temp = NULL; \\r
3494 } \\r
3495 } while(0)\r
3496\r
3497 /* Multiply two values, then reduce the result:\r
3498 result = X*Y % c. If c is NULL, skip the mod. */\r
3499#define MULT(X, Y, result) \\r
3500 do { \\r
3501 temp = (PyLongObject *)long_mul(X, Y); \\r
3502 if (temp == NULL) \\r
3503 goto Error; \\r
3504 Py_XDECREF(result); \\r
3505 result = temp; \\r
3506 temp = NULL; \\r
3507 REDUCE(result); \\r
3508 } while(0)\r
3509\r
3510 if (Py_SIZE(b) <= FIVEARY_CUTOFF) {\r
3511 /* Left-to-right binary exponentiation (HAC Algorithm 14.79) */\r
3512 /* http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf */\r
3513 for (i = Py_SIZE(b) - 1; i >= 0; --i) {\r
3514 digit bi = b->ob_digit[i];\r
3515\r
3516 for (j = (digit)1 << (PyLong_SHIFT-1); j != 0; j >>= 1) {\r
3517 MULT(z, z, z);\r
3518 if (bi & j)\r
3519 MULT(z, a, z);\r
3520 }\r
3521 }\r
3522 }\r
3523 else {\r
3524 /* Left-to-right 5-ary exponentiation (HAC Algorithm 14.82) */\r
3525 Py_INCREF(z); /* still holds 1L */\r
3526 table[0] = z;\r
3527 for (i = 1; i < 32; ++i)\r
3528 MULT(table[i-1], a, table[i]);\r
3529\r
3530 for (i = Py_SIZE(b) - 1; i >= 0; --i) {\r
3531 const digit bi = b->ob_digit[i];\r
3532\r
3533 for (j = PyLong_SHIFT - 5; j >= 0; j -= 5) {\r
3534 const int index = (bi >> j) & 0x1f;\r
3535 for (k = 0; k < 5; ++k)\r
3536 MULT(z, z, z);\r
3537 if (index)\r
3538 MULT(z, table[index], z);\r
3539 }\r
3540 }\r
3541 }\r
3542\r
3543 if (negativeOutput && (Py_SIZE(z) != 0)) {\r
3544 temp = (PyLongObject *)long_sub(z, c);\r
3545 if (temp == NULL)\r
3546 goto Error;\r
3547 Py_DECREF(z);\r
3548 z = temp;\r
3549 temp = NULL;\r
3550 }\r
3551 goto Done;\r
3552\r
3553 Error:\r
3554 if (z != NULL) {\r
3555 Py_DECREF(z);\r
3556 z = NULL;\r
3557 }\r
3558 /* fall through */\r
3559 Done:\r
3560 if (Py_SIZE(b) > FIVEARY_CUTOFF) {\r
3561 for (i = 0; i < 32; ++i)\r
3562 Py_XDECREF(table[i]);\r
3563 }\r
3564 Py_DECREF(a);\r
3565 Py_DECREF(b);\r
3566 Py_XDECREF(c);\r
3567 Py_XDECREF(temp);\r
3568 return (PyObject *)z;\r
3569}\r
3570\r
3571static PyObject *\r
3572long_invert(PyLongObject *v)\r
3573{\r
3574 /* Implement ~x as -(x+1) */\r
3575 PyLongObject *x;\r
3576 PyLongObject *w;\r
3577 w = (PyLongObject *)PyLong_FromLong(1L);\r
3578 if (w == NULL)\r
3579 return NULL;\r
3580 x = (PyLongObject *) long_add(v, w);\r
3581 Py_DECREF(w);\r
3582 if (x == NULL)\r
3583 return NULL;\r
3584 Py_SIZE(x) = -(Py_SIZE(x));\r
3585 return (PyObject *)x;\r
3586}\r
3587\r
3588static PyObject *\r
3589long_neg(PyLongObject *v)\r
3590{\r
3591 PyLongObject *z;\r
3592 if (v->ob_size == 0 && PyLong_CheckExact(v)) {\r
3593 /* -0 == 0 */\r
3594 Py_INCREF(v);\r
3595 return (PyObject *) v;\r
3596 }\r
3597 z = (PyLongObject *)_PyLong_Copy(v);\r
3598 if (z != NULL)\r
3599 z->ob_size = -(v->ob_size);\r
3600 return (PyObject *)z;\r
3601}\r
3602\r
3603static PyObject *\r
3604long_abs(PyLongObject *v)\r
3605{\r
3606 if (v->ob_size < 0)\r
3607 return long_neg(v);\r
3608 else\r
3609 return long_long((PyObject *)v);\r
3610}\r
3611\r
3612static int\r
3613long_nonzero(PyLongObject *v)\r
3614{\r
3615 return Py_SIZE(v) != 0;\r
3616}\r
3617\r
3618static PyObject *\r
3619long_rshift(PyLongObject *v, PyLongObject *w)\r
3620{\r
3621 PyLongObject *a, *b;\r
3622 PyLongObject *z = NULL;\r
3623 Py_ssize_t shiftby, newsize, wordshift, loshift, hishift, i, j;\r
3624 digit lomask, himask;\r
3625\r
3626 CONVERT_BINOP((PyObject *)v, (PyObject *)w, &a, &b);\r
3627\r
3628 if (Py_SIZE(a) < 0) {\r
3629 /* Right shifting negative numbers is harder */\r
3630 PyLongObject *a1, *a2;\r
3631 a1 = (PyLongObject *) long_invert(a);\r
3632 if (a1 == NULL)\r
3633 goto rshift_error;\r
3634 a2 = (PyLongObject *) long_rshift(a1, b);\r
3635 Py_DECREF(a1);\r
3636 if (a2 == NULL)\r
3637 goto rshift_error;\r
3638 z = (PyLongObject *) long_invert(a2);\r
3639 Py_DECREF(a2);\r
3640 }\r
3641 else {\r
3642 shiftby = PyLong_AsSsize_t((PyObject *)b);\r
3643 if (shiftby == -1L && PyErr_Occurred())\r
3644 goto rshift_error;\r
3645 if (shiftby < 0) {\r
3646 PyErr_SetString(PyExc_ValueError,\r
3647 "negative shift count");\r
3648 goto rshift_error;\r
3649 }\r
3650 wordshift = shiftby / PyLong_SHIFT;\r
3651 newsize = ABS(Py_SIZE(a)) - wordshift;\r
3652 if (newsize <= 0) {\r
3653 z = _PyLong_New(0);\r
3654 Py_DECREF(a);\r
3655 Py_DECREF(b);\r
3656 return (PyObject *)z;\r
3657 }\r
3658 loshift = shiftby % PyLong_SHIFT;\r
3659 hishift = PyLong_SHIFT - loshift;\r
3660 lomask = ((digit)1 << hishift) - 1;\r
3661 himask = PyLong_MASK ^ lomask;\r
3662 z = _PyLong_New(newsize);\r
3663 if (z == NULL)\r
3664 goto rshift_error;\r
3665 if (Py_SIZE(a) < 0)\r
3666 Py_SIZE(z) = -(Py_SIZE(z));\r
3667 for (i = 0, j = wordshift; i < newsize; i++, j++) {\r
3668 z->ob_digit[i] = (a->ob_digit[j] >> loshift) & lomask;\r
3669 if (i+1 < newsize)\r
3670 z->ob_digit[i] |= (a->ob_digit[j+1] << hishift) & himask;\r
3671 }\r
3672 z = long_normalize(z);\r
3673 }\r
3674 rshift_error:\r
3675 Py_DECREF(a);\r
3676 Py_DECREF(b);\r
3677 return (PyObject *) z;\r
3678\r
3679}\r
3680\r
3681static PyObject *\r
3682long_lshift(PyObject *v, PyObject *w)\r
3683{\r
3684 /* This version due to Tim Peters */\r
3685 PyLongObject *a, *b;\r
3686 PyLongObject *z = NULL;\r
3687 Py_ssize_t shiftby, oldsize, newsize, wordshift, remshift, i, j;\r
3688 twodigits accum;\r
3689\r
3690 CONVERT_BINOP(v, w, &a, &b);\r
3691\r
3692 shiftby = PyLong_AsSsize_t((PyObject *)b);\r
3693 if (shiftby == -1L && PyErr_Occurred())\r
3694 goto lshift_error;\r
3695 if (shiftby < 0) {\r
3696 PyErr_SetString(PyExc_ValueError, "negative shift count");\r
3697 goto lshift_error;\r
3698 }\r
3699 /* wordshift, remshift = divmod(shiftby, PyLong_SHIFT) */\r
3700 wordshift = shiftby / PyLong_SHIFT;\r
3701 remshift = shiftby - wordshift * PyLong_SHIFT;\r
3702\r
3703 oldsize = ABS(a->ob_size);\r
3704 newsize = oldsize + wordshift;\r
3705 if (remshift)\r
3706 ++newsize;\r
3707 z = _PyLong_New(newsize);\r
3708 if (z == NULL)\r
3709 goto lshift_error;\r
3710 if (a->ob_size < 0)\r
3711 z->ob_size = -(z->ob_size);\r
3712 for (i = 0; i < wordshift; i++)\r
3713 z->ob_digit[i] = 0;\r
3714 accum = 0;\r
3715 for (i = wordshift, j = 0; j < oldsize; i++, j++) {\r
3716 accum |= (twodigits)a->ob_digit[j] << remshift;\r
3717 z->ob_digit[i] = (digit)(accum & PyLong_MASK);\r
3718 accum >>= PyLong_SHIFT;\r
3719 }\r
3720 if (remshift)\r
3721 z->ob_digit[newsize-1] = (digit)accum;\r
3722 else\r
3723 assert(!accum);\r
3724 z = long_normalize(z);\r
3725 lshift_error:\r
3726 Py_DECREF(a);\r
3727 Py_DECREF(b);\r
3728 return (PyObject *) z;\r
3729}\r
3730\r
3731/* Compute two's complement of digit vector a[0:m], writing result to\r
3732 z[0:m]. The digit vector a need not be normalized, but should not\r
3733 be entirely zero. a and z may point to the same digit vector. */\r
3734\r
3735static void\r
3736v_complement(digit *z, digit *a, Py_ssize_t m)\r
3737{\r
3738 Py_ssize_t i;\r
3739 digit carry = 1;\r
3740 for (i = 0; i < m; ++i) {\r
3741 carry += a[i] ^ PyLong_MASK;\r
3742 z[i] = carry & PyLong_MASK;\r
3743 carry >>= PyLong_SHIFT;\r
3744 }\r
3745 assert(carry == 0);\r
3746}\r
3747\r
3748/* Bitwise and/xor/or operations */\r
3749\r
3750static PyObject *\r
3751long_bitwise(PyLongObject *a,\r
3752 int op, /* '&', '|', '^' */\r
3753 PyLongObject *b)\r
3754{\r
3755 int nega, negb, negz;\r
3756 Py_ssize_t size_a, size_b, size_z, i;\r
3757 PyLongObject *z;\r
3758\r
3759 /* Bitwise operations for negative numbers operate as though\r
3760 on a two's complement representation. So convert arguments\r
3761 from sign-magnitude to two's complement, and convert the\r
3762 result back to sign-magnitude at the end. */\r
3763\r
3764 /* If a is negative, replace it by its two's complement. */\r
3765 size_a = ABS(Py_SIZE(a));\r
3766 nega = Py_SIZE(a) < 0;\r
3767 if (nega) {\r
3768 z = _PyLong_New(size_a);\r
3769 if (z == NULL)\r
3770 return NULL;\r
3771 v_complement(z->ob_digit, a->ob_digit, size_a);\r
3772 a = z;\r
3773 }\r
3774 else\r
3775 /* Keep reference count consistent. */\r
3776 Py_INCREF(a);\r
3777\r
3778 /* Same for b. */\r
3779 size_b = ABS(Py_SIZE(b));\r
3780 negb = Py_SIZE(b) < 0;\r
3781 if (negb) {\r
3782 z = _PyLong_New(size_b);\r
3783 if (z == NULL) {\r
3784 Py_DECREF(a);\r
3785 return NULL;\r
3786 }\r
3787 v_complement(z->ob_digit, b->ob_digit, size_b);\r
3788 b = z;\r
3789 }\r
3790 else\r
3791 Py_INCREF(b);\r
3792\r
3793 /* Swap a and b if necessary to ensure size_a >= size_b. */\r
3794 if (size_a < size_b) {\r
3795 z = a; a = b; b = z;\r
3796 size_z = size_a; size_a = size_b; size_b = size_z;\r
3797 negz = nega; nega = negb; negb = negz;\r
3798 }\r
3799\r
3800 /* JRH: The original logic here was to allocate the result value (z)\r
3801 as the longer of the two operands. However, there are some cases\r
3802 where the result is guaranteed to be shorter than that: AND of two\r
3803 positives, OR of two negatives: use the shorter number. AND with\r
3804 mixed signs: use the positive number. OR with mixed signs: use the\r
3805 negative number.\r
3806 */\r
3807 switch (op) {\r
3808 case '^':\r
3809 negz = nega ^ negb;\r
3810 size_z = size_a;\r
3811 break;\r
3812 case '&':\r
3813 negz = nega & negb;\r
3814 size_z = negb ? size_a : size_b;\r
3815 break;\r
3816 case '|':\r
3817 negz = nega | negb;\r
3818 size_z = negb ? size_b : size_a;\r
3819 break;\r
3820 default:\r
3821 PyErr_BadArgument();\r
3822 return NULL;\r
3823 }\r
3824\r
3825 /* We allow an extra digit if z is negative, to make sure that\r
3826 the final two's complement of z doesn't overflow. */\r
3827 z = _PyLong_New(size_z + negz);\r
3828 if (z == NULL) {\r
3829 Py_DECREF(a);\r
3830 Py_DECREF(b);\r
3831 return NULL;\r
3832 }\r
3833\r
3834 /* Compute digits for overlap of a and b. */\r
3835 switch(op) {\r
3836 case '&':\r
3837 for (i = 0; i < size_b; ++i)\r
3838 z->ob_digit[i] = a->ob_digit[i] & b->ob_digit[i];\r
3839 break;\r
3840 case '|':\r
3841 for (i = 0; i < size_b; ++i)\r
3842 z->ob_digit[i] = a->ob_digit[i] | b->ob_digit[i];\r
3843 break;\r
3844 case '^':\r
3845 for (i = 0; i < size_b; ++i)\r
3846 z->ob_digit[i] = a->ob_digit[i] ^ b->ob_digit[i];\r
3847 break;\r
3848 default:\r
3849 PyErr_BadArgument();\r
3850 return NULL;\r
3851 }\r
3852\r
3853 /* Copy any remaining digits of a, inverting if necessary. */\r
3854 if (op == '^' && negb)\r
3855 for (; i < size_z; ++i)\r
3856 z->ob_digit[i] = a->ob_digit[i] ^ PyLong_MASK;\r
3857 else if (i < size_z)\r
3858 memcpy(&z->ob_digit[i], &a->ob_digit[i],\r
3859 (size_z-i)*sizeof(digit));\r
3860\r
3861 /* Complement result if negative. */\r
3862 if (negz) {\r
3863 Py_SIZE(z) = -(Py_SIZE(z));\r
3864 z->ob_digit[size_z] = PyLong_MASK;\r
3865 v_complement(z->ob_digit, z->ob_digit, size_z+1);\r
3866 }\r
3867\r
3868 Py_DECREF(a);\r
3869 Py_DECREF(b);\r
3870 return (PyObject *)long_normalize(z);\r
3871}\r
3872\r
3873static PyObject *\r
3874long_and(PyObject *v, PyObject *w)\r
3875{\r
3876 PyLongObject *a, *b;\r
3877 PyObject *c;\r
3878 CONVERT_BINOP(v, w, &a, &b);\r
3879 c = long_bitwise(a, '&', b);\r
3880 Py_DECREF(a);\r
3881 Py_DECREF(b);\r
3882 return c;\r
3883}\r
3884\r
3885static PyObject *\r
3886long_xor(PyObject *v, PyObject *w)\r
3887{\r
3888 PyLongObject *a, *b;\r
3889 PyObject *c;\r
3890 CONVERT_BINOP(v, w, &a, &b);\r
3891 c = long_bitwise(a, '^', b);\r
3892 Py_DECREF(a);\r
3893 Py_DECREF(b);\r
3894 return c;\r
3895}\r
3896\r
3897static PyObject *\r
3898long_or(PyObject *v, PyObject *w)\r
3899{\r
3900 PyLongObject *a, *b;\r
3901 PyObject *c;\r
3902 CONVERT_BINOP(v, w, &a, &b);\r
3903 c = long_bitwise(a, '|', b);\r
3904 Py_DECREF(a);\r
3905 Py_DECREF(b);\r
3906 return c;\r
3907}\r
3908\r
3909static int\r
3910long_coerce(PyObject **pv, PyObject **pw)\r
3911{\r
3912 if (PyInt_Check(*pw)) {\r
3913 *pw = PyLong_FromLong(PyInt_AS_LONG(*pw));\r
3914 if (*pw == NULL)\r
3915 return -1;\r
3916 Py_INCREF(*pv);\r
3917 return 0;\r
3918 }\r
3919 else if (PyLong_Check(*pw)) {\r
3920 Py_INCREF(*pv);\r
3921 Py_INCREF(*pw);\r
3922 return 0;\r
3923 }\r
3924 return 1; /* Can't do it */\r
3925}\r
3926\r
3927static PyObject *\r
3928long_long(PyObject *v)\r
3929{\r
3930 if (PyLong_CheckExact(v))\r
3931 Py_INCREF(v);\r
3932 else\r
3933 v = _PyLong_Copy((PyLongObject *)v);\r
3934 return v;\r
3935}\r
3936\r
3937static PyObject *\r
3938long_int(PyObject *v)\r
3939{\r
3940 long x;\r
3941 x = PyLong_AsLong(v);\r
3942 if (PyErr_Occurred()) {\r
3943 if (PyErr_ExceptionMatches(PyExc_OverflowError)) {\r
3944 PyErr_Clear();\r
3945 if (PyLong_CheckExact(v)) {\r
3946 Py_INCREF(v);\r
3947 return v;\r
3948 }\r
3949 else\r
3950 return _PyLong_Copy((PyLongObject *)v);\r
3951 }\r
3952 else\r
3953 return NULL;\r
3954 }\r
3955 return PyInt_FromLong(x);\r
3956}\r
3957\r
3958static PyObject *\r
3959long_float(PyObject *v)\r
3960{\r
3961 double result;\r
3962 result = PyLong_AsDouble(v);\r
3963 if (result == -1.0 && PyErr_Occurred())\r
3964 return NULL;\r
3965 return PyFloat_FromDouble(result);\r
3966}\r
3967\r
3968static PyObject *\r
3969long_oct(PyObject *v)\r
3970{\r
3971 return _PyLong_Format(v, 8, 1, 0);\r
3972}\r
3973\r
3974static PyObject *\r
3975long_hex(PyObject *v)\r
3976{\r
3977 return _PyLong_Format(v, 16, 1, 0);\r
3978}\r
3979\r
3980static PyObject *\r
3981long_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds);\r
3982\r
3983static PyObject *\r
3984long_new(PyTypeObject *type, PyObject *args, PyObject *kwds)\r
3985{\r
3986 PyObject *x = NULL;\r
3987 int base = -909; /* unlikely! */\r
3988 static char *kwlist[] = {"x", "base", 0};\r
3989\r
3990 if (type != &PyLong_Type)\r
3991 return long_subtype_new(type, args, kwds); /* Wimp out */\r
3992 if (!PyArg_ParseTupleAndKeywords(args, kwds, "|Oi:long", kwlist,\r
3993 &x, &base))\r
3994 return NULL;\r
3995 if (x == NULL)\r
3996 return PyLong_FromLong(0L);\r
3997 if (base == -909)\r
3998 return PyNumber_Long(x);\r
3999 else if (PyString_Check(x)) {\r
4000 /* Since PyLong_FromString doesn't have a length parameter,\r
4001 * check here for possible NULs in the string. */\r
4002 char *string = PyString_AS_STRING(x);\r
4003 if (strlen(string) != (size_t)PyString_Size(x)) {\r
4004 /* create a repr() of the input string,\r
4005 * just like PyLong_FromString does. */\r
4006 PyObject *srepr;\r
4007 srepr = PyObject_Repr(x);\r
4008 if (srepr == NULL)\r
4009 return NULL;\r
4010 PyErr_Format(PyExc_ValueError,\r
4011 "invalid literal for long() with base %d: %s",\r
4012 base, PyString_AS_STRING(srepr));\r
4013 Py_DECREF(srepr);\r
4014 return NULL;\r
4015 }\r
4016 return PyLong_FromString(PyString_AS_STRING(x), NULL, base);\r
4017 }\r
4018#ifdef Py_USING_UNICODE\r
4019 else if (PyUnicode_Check(x))\r
4020 return PyLong_FromUnicode(PyUnicode_AS_UNICODE(x),\r
4021 PyUnicode_GET_SIZE(x),\r
4022 base);\r
4023#endif\r
4024 else {\r
4025 PyErr_SetString(PyExc_TypeError,\r
4026 "long() can't convert non-string with explicit base");\r
4027 return NULL;\r
4028 }\r
4029}\r
4030\r
4031/* Wimpy, slow approach to tp_new calls for subtypes of long:\r
4032 first create a regular long from whatever arguments we got,\r
4033 then allocate a subtype instance and initialize it from\r
4034 the regular long. The regular long is then thrown away.\r
4035*/\r
4036static PyObject *\r
4037long_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds)\r
4038{\r
4039 PyLongObject *tmp, *newobj;\r
4040 Py_ssize_t i, n;\r
4041\r
4042 assert(PyType_IsSubtype(type, &PyLong_Type));\r
4043 tmp = (PyLongObject *)long_new(&PyLong_Type, args, kwds);\r
4044 if (tmp == NULL)\r
4045 return NULL;\r
4046 assert(PyLong_CheckExact(tmp));\r
4047 n = Py_SIZE(tmp);\r
4048 if (n < 0)\r
4049 n = -n;\r
4050 newobj = (PyLongObject *)type->tp_alloc(type, n);\r
4051 if (newobj == NULL) {\r
4052 Py_DECREF(tmp);\r
4053 return NULL;\r
4054 }\r
4055 assert(PyLong_Check(newobj));\r
4056 Py_SIZE(newobj) = Py_SIZE(tmp);\r
4057 for (i = 0; i < n; i++)\r
4058 newobj->ob_digit[i] = tmp->ob_digit[i];\r
4059 Py_DECREF(tmp);\r
4060 return (PyObject *)newobj;\r
4061}\r
4062\r
4063static PyObject *\r
4064long_getnewargs(PyLongObject *v)\r
4065{\r
4066 return Py_BuildValue("(N)", _PyLong_Copy(v));\r
4067}\r
4068\r
4069static PyObject *\r
4070long_get0(PyLongObject *v, void *context) {\r
4071 return PyLong_FromLong(0L);\r
4072}\r
4073\r
4074static PyObject *\r
4075long_get1(PyLongObject *v, void *context) {\r
4076 return PyLong_FromLong(1L);\r
4077}\r
4078\r
4079static PyObject *\r
4080long__format__(PyObject *self, PyObject *args)\r
4081{\r
4082 PyObject *format_spec;\r
4083\r
4084 if (!PyArg_ParseTuple(args, "O:__format__", &format_spec))\r
4085 return NULL;\r
4086 if (PyBytes_Check(format_spec))\r
4087 return _PyLong_FormatAdvanced(self,\r
4088 PyBytes_AS_STRING(format_spec),\r
4089 PyBytes_GET_SIZE(format_spec));\r
4090 if (PyUnicode_Check(format_spec)) {\r
4091 /* Convert format_spec to a str */\r
4092 PyObject *result;\r
4093 PyObject *str_spec = PyObject_Str(format_spec);\r
4094\r
4095 if (str_spec == NULL)\r
4096 return NULL;\r
4097\r
4098 result = _PyLong_FormatAdvanced(self,\r
4099 PyBytes_AS_STRING(str_spec),\r
4100 PyBytes_GET_SIZE(str_spec));\r
4101\r
4102 Py_DECREF(str_spec);\r
4103 return result;\r
4104 }\r
4105 PyErr_SetString(PyExc_TypeError, "__format__ requires str or unicode");\r
4106 return NULL;\r
4107}\r
4108\r
4109static PyObject *\r
4110long_sizeof(PyLongObject *v)\r
4111{\r
4112 Py_ssize_t res;\r
4113\r
4114 res = v->ob_type->tp_basicsize + ABS(Py_SIZE(v))*sizeof(digit);\r
4115 return PyInt_FromSsize_t(res);\r
4116}\r
4117\r
4118static PyObject *\r
4119long_bit_length(PyLongObject *v)\r
4120{\r
4121 PyLongObject *result, *x, *y;\r
4122 Py_ssize_t ndigits, msd_bits = 0;\r
4123 digit msd;\r
4124\r
4125 assert(v != NULL);\r
4126 assert(PyLong_Check(v));\r
4127\r
4128 ndigits = ABS(Py_SIZE(v));\r
4129 if (ndigits == 0)\r
4130 return PyInt_FromLong(0);\r
4131\r
4132 msd = v->ob_digit[ndigits-1];\r
4133 while (msd >= 32) {\r
4134 msd_bits += 6;\r
4135 msd >>= 6;\r
4136 }\r
4137 msd_bits += (long)(BitLengthTable[msd]);\r
4138\r
4139 if (ndigits <= PY_SSIZE_T_MAX/PyLong_SHIFT)\r
4140 return PyInt_FromSsize_t((ndigits-1)*PyLong_SHIFT + msd_bits);\r
4141\r
4142 /* expression above may overflow; use Python integers instead */\r
4143 result = (PyLongObject *)PyLong_FromSsize_t(ndigits - 1);\r
4144 if (result == NULL)\r
4145 return NULL;\r
4146 x = (PyLongObject *)PyLong_FromLong(PyLong_SHIFT);\r
4147 if (x == NULL)\r
4148 goto error;\r
4149 y = (PyLongObject *)long_mul(result, x);\r
4150 Py_DECREF(x);\r
4151 if (y == NULL)\r
4152 goto error;\r
4153 Py_DECREF(result);\r
4154 result = y;\r
4155\r
4156 x = (PyLongObject *)PyLong_FromLong((long)msd_bits);\r
4157 if (x == NULL)\r
4158 goto error;\r
4159 y = (PyLongObject *)long_add(result, x);\r
4160 Py_DECREF(x);\r
4161 if (y == NULL)\r
4162 goto error;\r
4163 Py_DECREF(result);\r
4164 result = y;\r
4165\r
4166 return (PyObject *)result;\r
4167\r
4168 error:\r
4169 Py_DECREF(result);\r
4170 return NULL;\r
4171}\r
4172\r
4173PyDoc_STRVAR(long_bit_length_doc,\r
4174"long.bit_length() -> int or long\n\\r
4175\n\\r
4176Number of bits necessary to represent self in binary.\n\\r
4177>>> bin(37L)\n\\r
4178'0b100101'\n\\r
4179>>> (37L).bit_length()\n\\r
41806");\r
4181\r
4182#if 0\r
4183static PyObject *\r
4184long_is_finite(PyObject *v)\r
4185{\r
4186 Py_RETURN_TRUE;\r
4187}\r
4188#endif\r
4189\r
4190static PyMethodDef long_methods[] = {\r
4191 {"conjugate", (PyCFunction)long_long, METH_NOARGS,\r
4192 "Returns self, the complex conjugate of any long."},\r
4193 {"bit_length", (PyCFunction)long_bit_length, METH_NOARGS,\r
4194 long_bit_length_doc},\r
4195#if 0\r
4196 {"is_finite", (PyCFunction)long_is_finite, METH_NOARGS,\r
4197 "Returns always True."},\r
4198#endif\r
4199 {"__trunc__", (PyCFunction)long_long, METH_NOARGS,\r
4200 "Truncating an Integral returns itself."},\r
4201 {"__getnewargs__", (PyCFunction)long_getnewargs, METH_NOARGS},\r
4202 {"__format__", (PyCFunction)long__format__, METH_VARARGS},\r
4203 {"__sizeof__", (PyCFunction)long_sizeof, METH_NOARGS,\r
4204 "Returns size in memory, in bytes"},\r
4205 {NULL, NULL} /* sentinel */\r
4206};\r
4207\r
4208static PyGetSetDef long_getset[] = {\r
4209 {"real",\r
4210 (getter)long_long, (setter)NULL,\r
4211 "the real part of a complex number",\r
4212 NULL},\r
4213 {"imag",\r
4214 (getter)long_get0, (setter)NULL,\r
4215 "the imaginary part of a complex number",\r
4216 NULL},\r
4217 {"numerator",\r
4218 (getter)long_long, (setter)NULL,\r
4219 "the numerator of a rational number in lowest terms",\r
4220 NULL},\r
4221 {"denominator",\r
4222 (getter)long_get1, (setter)NULL,\r
4223 "the denominator of a rational number in lowest terms",\r
4224 NULL},\r
4225 {NULL} /* Sentinel */\r
4226};\r
4227\r
4228PyDoc_STRVAR(long_doc,\r
4229"long(x[, base]) -> integer\n\\r
4230\n\\r
4231Convert a string or number to a long integer, if possible. A floating\n\\r
4232point argument will be truncated towards zero (this does not include a\n\\r
4233string representation of a floating point number!) When converting a\n\\r
4234string, use the optional base. It is an error to supply a base when\n\\r
4235converting a non-string.");\r
4236\r
4237static PyNumberMethods long_as_number = {\r
4238 (binaryfunc)long_add, /*nb_add*/\r
4239 (binaryfunc)long_sub, /*nb_subtract*/\r
4240 (binaryfunc)long_mul, /*nb_multiply*/\r
4241 long_classic_div, /*nb_divide*/\r
4242 long_mod, /*nb_remainder*/\r
4243 long_divmod, /*nb_divmod*/\r
4244 long_pow, /*nb_power*/\r
4245 (unaryfunc)long_neg, /*nb_negative*/\r
4246 (unaryfunc)long_long, /*tp_positive*/\r
4247 (unaryfunc)long_abs, /*tp_absolute*/\r
4248 (inquiry)long_nonzero, /*tp_nonzero*/\r
4249 (unaryfunc)long_invert, /*nb_invert*/\r
4250 long_lshift, /*nb_lshift*/\r
4251 (binaryfunc)long_rshift, /*nb_rshift*/\r
4252 long_and, /*nb_and*/\r
4253 long_xor, /*nb_xor*/\r
4254 long_or, /*nb_or*/\r
4255 long_coerce, /*nb_coerce*/\r
4256 long_int, /*nb_int*/\r
4257 long_long, /*nb_long*/\r
4258 long_float, /*nb_float*/\r
4259 long_oct, /*nb_oct*/\r
4260 long_hex, /*nb_hex*/\r
4261 0, /* nb_inplace_add */\r
4262 0, /* nb_inplace_subtract */\r
4263 0, /* nb_inplace_multiply */\r
4264 0, /* nb_inplace_divide */\r
4265 0, /* nb_inplace_remainder */\r
4266 0, /* nb_inplace_power */\r
4267 0, /* nb_inplace_lshift */\r
4268 0, /* nb_inplace_rshift */\r
4269 0, /* nb_inplace_and */\r
4270 0, /* nb_inplace_xor */\r
4271 0, /* nb_inplace_or */\r
4272 long_div, /* nb_floor_divide */\r
4273 long_true_divide, /* nb_true_divide */\r
4274 0, /* nb_inplace_floor_divide */\r
4275 0, /* nb_inplace_true_divide */\r
4276 long_long, /* nb_index */\r
4277};\r
4278\r
4279PyTypeObject PyLong_Type = {\r
4280 PyObject_HEAD_INIT(&PyType_Type)\r
4281 0, /* ob_size */\r
4282 "long", /* tp_name */\r
4283 offsetof(PyLongObject, ob_digit), /* tp_basicsize */\r
4284 sizeof(digit), /* tp_itemsize */\r
4285 long_dealloc, /* tp_dealloc */\r
4286 0, /* tp_print */\r
4287 0, /* tp_getattr */\r
4288 0, /* tp_setattr */\r
4289 (cmpfunc)long_compare, /* tp_compare */\r
4290 long_repr, /* tp_repr */\r
4291 &long_as_number, /* tp_as_number */\r
4292 0, /* tp_as_sequence */\r
4293 0, /* tp_as_mapping */\r
4294 (hashfunc)long_hash, /* tp_hash */\r
4295 0, /* tp_call */\r
4296 long_str, /* tp_str */\r
4297 PyObject_GenericGetAttr, /* tp_getattro */\r
4298 0, /* tp_setattro */\r
4299 0, /* tp_as_buffer */\r
4300 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES |\r
4301 Py_TPFLAGS_BASETYPE | Py_TPFLAGS_LONG_SUBCLASS, /* tp_flags */\r
4302 long_doc, /* tp_doc */\r
4303 0, /* tp_traverse */\r
4304 0, /* tp_clear */\r
4305 0, /* tp_richcompare */\r
4306 0, /* tp_weaklistoffset */\r
4307 0, /* tp_iter */\r
4308 0, /* tp_iternext */\r
4309 long_methods, /* tp_methods */\r
4310 0, /* tp_members */\r
4311 long_getset, /* tp_getset */\r
4312 0, /* tp_base */\r
4313 0, /* tp_dict */\r
4314 0, /* tp_descr_get */\r
4315 0, /* tp_descr_set */\r
4316 0, /* tp_dictoffset */\r
4317 0, /* tp_init */\r
4318 0, /* tp_alloc */\r
4319 long_new, /* tp_new */\r
4320 PyObject_Del, /* tp_free */\r
4321};\r
4322\r
4323static PyTypeObject Long_InfoType;\r
4324\r
4325PyDoc_STRVAR(long_info__doc__,\r
4326"sys.long_info\n\\r
4327\n\\r
4328A struct sequence that holds information about Python's\n\\r
4329internal representation of integers. The attributes are read only.");\r
4330\r
4331static PyStructSequence_Field long_info_fields[] = {\r
4332 {"bits_per_digit", "size of a digit in bits"},\r
4333 {"sizeof_digit", "size in bytes of the C type used to represent a digit"},\r
4334 {NULL, NULL}\r
4335};\r
4336\r
4337static PyStructSequence_Desc long_info_desc = {\r
4338 "sys.long_info", /* name */\r
4339 long_info__doc__, /* doc */\r
4340 long_info_fields, /* fields */\r
4341 2 /* number of fields */\r
4342};\r
4343\r
4344PyObject *\r
4345PyLong_GetInfo(void)\r
4346{\r
4347 PyObject* long_info;\r
4348 int field = 0;\r
4349 long_info = PyStructSequence_New(&Long_InfoType);\r
4350 if (long_info == NULL)\r
4351 return NULL;\r
4352 PyStructSequence_SET_ITEM(long_info, field++,\r
4353 PyInt_FromLong(PyLong_SHIFT));\r
4354 PyStructSequence_SET_ITEM(long_info, field++,\r
4355 PyInt_FromLong(sizeof(digit)));\r
4356 if (PyErr_Occurred()) {\r
4357 Py_CLEAR(long_info);\r
4358 return NULL;\r
4359 }\r
4360 return long_info;\r
4361}\r
4362\r
4363int\r
4364_PyLong_Init(void)\r
4365{\r
4366 /* initialize long_info */\r
4367 if (Long_InfoType.tp_name == 0)\r
4368 PyStructSequence_InitType(&Long_InfoType, &long_info_desc);\r
4369 return 1;\r
4370}\r