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