blob: 759116a94c063d269cfbde2cf6a8de0fd534a59f [file] [log] [blame]
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001/* Long (arbitrary precision) integer object implementation */
2
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00003/* XXX The functional organization of this file is terrible */
4
Guido van Rossumc0b618a1997-05-02 03:12:38 +00005#include "Python.h"
Guido van Rossumedcc38a1991-05-05 20:09:44 +00006#include "longintrepr.h"
Guido van Rossumc0b618a1997-05-02 03:12:38 +00007
Mark Dickinsonc6300392009-04-20 21:38:00 +00008#include <float.h>
Guido van Rossumeb1fafc1994-08-29 12:47:19 +00009#include <ctype.h>
Mark Dickinson5a74bf62009-02-15 11:04:38 +000010#include <stddef.h>
Guido van Rossumedcc38a1991-05-05 20:09:44 +000011
Guido van Rossumddefaf32007-01-14 03:31:43 +000012#ifndef NSMALLPOSINTS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000013#define NSMALLPOSINTS 257
Guido van Rossumddefaf32007-01-14 03:31:43 +000014#endif
15#ifndef NSMALLNEGINTS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000016#define NSMALLNEGINTS 5
Guido van Rossumddefaf32007-01-14 03:31:43 +000017#endif
Facundo Batista6e6f59b2008-07-24 18:57:11 +000018
Mark Dickinsone4416742009-02-15 15:14:57 +000019/* convert a PyLong of size 1, 0 or -1 to an sdigit */
Victor Stinner08a80b12013-07-17 22:33:42 +020020#define MEDIUM_VALUE(x) (assert(-1 <= Py_SIZE(x) && Py_SIZE(x) <= 1), \
21 Py_SIZE(x) < 0 ? -(sdigit)(x)->ob_digit[0] : \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000022 (Py_SIZE(x) == 0 ? (sdigit)0 : \
23 (sdigit)(x)->ob_digit[0]))
Facundo Batista6e6f59b2008-07-24 18:57:11 +000024
Guido van Rossumddefaf32007-01-14 03:31:43 +000025#if NSMALLNEGINTS + NSMALLPOSINTS > 0
26/* Small integers are preallocated in this array so that they
27 can be shared.
28 The integers that are preallocated are those in the range
29 -NSMALLNEGINTS (inclusive) to NSMALLPOSINTS (not inclusive).
30*/
31static PyLongObject small_ints[NSMALLNEGINTS + NSMALLPOSINTS];
32#ifdef COUNT_ALLOCS
Mark Dickinsonc286e582012-09-20 21:29:28 +010033Py_ssize_t quick_int_allocs, quick_neg_int_allocs;
Guido van Rossumddefaf32007-01-14 03:31:43 +000034#endif
35
Guido van Rossum7eaf8222007-06-18 17:58:50 +000036static PyObject *
Mark Dickinsone4416742009-02-15 15:14:57 +000037get_small_int(sdigit ival)
Guido van Rossumddefaf32007-01-14 03:31:43 +000038{
Benjamin Peterson45c9dce2014-03-14 21:53:51 -050039 PyObject *v;
Benjamin Peterson041c38a2014-03-14 21:47:23 -050040 assert(-NSMALLNEGINTS <= ival && ival < NSMALLPOSINTS);
Benjamin Peterson45c9dce2014-03-14 21:53:51 -050041 v = (PyObject *)&small_ints[ival + NSMALLNEGINTS];
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000042 Py_INCREF(v);
Guido van Rossumddefaf32007-01-14 03:31:43 +000043#ifdef COUNT_ALLOCS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000044 if (ival >= 0)
45 quick_int_allocs++;
46 else
47 quick_neg_int_allocs++;
Guido van Rossumddefaf32007-01-14 03:31:43 +000048#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000049 return v;
Guido van Rossumddefaf32007-01-14 03:31:43 +000050}
51#define CHECK_SMALL_INT(ival) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000052 do if (-NSMALLNEGINTS <= ival && ival < NSMALLPOSINTS) { \
53 return get_small_int((sdigit)ival); \
54 } while(0)
Guido van Rossumddefaf32007-01-14 03:31:43 +000055
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000056static PyLongObject *
Facundo Batista6e6f59b2008-07-24 18:57:11 +000057maybe_small_long(PyLongObject *v)
58{
Victor Stinner45e8e2f2014-05-14 17:24:35 +020059 if (v && Py_ABS(Py_SIZE(v)) <= 1) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000060 sdigit ival = MEDIUM_VALUE(v);
61 if (-NSMALLNEGINTS <= ival && ival < NSMALLPOSINTS) {
62 Py_DECREF(v);
63 return (PyLongObject *)get_small_int(ival);
64 }
65 }
66 return v;
Facundo Batista6e6f59b2008-07-24 18:57:11 +000067}
Guido van Rossumddefaf32007-01-14 03:31:43 +000068#else
69#define CHECK_SMALL_INT(ival)
Facundo Batista6e6f59b2008-07-24 18:57:11 +000070#define maybe_small_long(val) (val)
Guido van Rossumddefaf32007-01-14 03:31:43 +000071#endif
72
Serhiy Storchaka95949422013-08-27 19:40:23 +030073/* If a freshly-allocated int is already shared, it must
Guido van Rossumddefaf32007-01-14 03:31:43 +000074 be a small integer, so negating it must go to PyLong_FromLong */
Victor Stinner8aed6f12013-07-17 22:31:17 +020075Py_LOCAL_INLINE(void)
76_PyLong_Negate(PyLongObject **x_p)
77{
78 PyLongObject *x;
79
80 x = (PyLongObject *)*x_p;
81 if (Py_REFCNT(x) == 1) {
82 Py_SIZE(x) = -Py_SIZE(x);
83 return;
84 }
85
86 *x_p = (PyLongObject *)PyLong_FromLong(-MEDIUM_VALUE(x));
87 Py_DECREF(x);
88}
89
Serhiy Storchaka95949422013-08-27 19:40:23 +030090/* For int multiplication, use the O(N**2) school algorithm unless
Tim Peters5af4e6c2002-08-12 02:31:19 +000091 * both operands contain more than KARATSUBA_CUTOFF digits (this
Serhiy Storchaka95949422013-08-27 19:40:23 +030092 * being an internal Python int digit, in base BASE).
Tim Peters5af4e6c2002-08-12 02:31:19 +000093 */
Tim Peters0973b992004-08-29 22:16:50 +000094#define KARATSUBA_CUTOFF 70
95#define KARATSUBA_SQUARE_CUTOFF (2 * KARATSUBA_CUTOFF)
Tim Peters5af4e6c2002-08-12 02:31:19 +000096
Tim Peters47e52ee2004-08-30 02:44:38 +000097/* For exponentiation, use the binary left-to-right algorithm
98 * unless the exponent contains more than FIVEARY_CUTOFF digits.
99 * In that case, do 5 bits at a time. The potential drawback is that
100 * a table of 2**5 intermediate results is computed.
101 */
102#define FIVEARY_CUTOFF 8
103
Mark Dickinsoncdd01d22010-05-10 21:37:34 +0000104#define SIGCHECK(PyTryBlock) \
105 do { \
106 if (PyErr_CheckSignals()) PyTryBlock \
107 } while(0)
Guido van Rossum23d6f0e1991-05-14 12:06:49 +0000108
Serhiy Storchaka95949422013-08-27 19:40:23 +0300109/* Normalize (remove leading zeros from) an int object.
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000110 Doesn't attempt to free the storage--in most cases, due to the nature
111 of the algorithms used, this could save at most be one word anyway. */
112
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000113static PyLongObject *
Antoine Pitrou9ed5f272013-08-13 20:18:52 +0200114long_normalize(PyLongObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000115{
Victor Stinner45e8e2f2014-05-14 17:24:35 +0200116 Py_ssize_t j = Py_ABS(Py_SIZE(v));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000117 Py_ssize_t i = j;
Tim Peters5af4e6c2002-08-12 02:31:19 +0000118
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000119 while (i > 0 && v->ob_digit[i-1] == 0)
120 --i;
121 if (i != j)
122 Py_SIZE(v) = (Py_SIZE(v) < 0) ? -(i) : i;
123 return v;
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000124}
125
Serhiy Storchaka31a65542013-12-11 21:07:54 +0200126/* _PyLong_FromNbInt: Convert the given object to a PyLongObject
127 using the nb_int slot, if available. Raise TypeError if either the
128 nb_int slot is not available or the result of the call to nb_int
129 returns something not of type int.
130*/
131PyLongObject *
132_PyLong_FromNbInt(PyObject *integral)
133{
134 PyNumberMethods *nb;
135 PyObject *result;
136
137 /* Fast path for the case that we already have an int. */
138 if (PyLong_CheckExact(integral)) {
139 Py_INCREF(integral);
140 return (PyLongObject *)integral;
141 }
142
143 nb = Py_TYPE(integral)->tp_as_number;
144 if (nb == NULL || nb->nb_int == NULL) {
145 PyErr_Format(PyExc_TypeError,
146 "an integer is required (got type %.200s)",
147 Py_TYPE(integral)->tp_name);
148 return NULL;
149 }
150
151 /* Convert using the nb_int slot, which should return something
152 of exact type int. */
153 result = nb->nb_int(integral);
154 if (!result || PyLong_CheckExact(result))
155 return (PyLongObject *)result;
156 if (!PyLong_Check(result)) {
157 PyErr_Format(PyExc_TypeError,
158 "__int__ returned non-int (type %.200s)",
159 result->ob_type->tp_name);
160 Py_DECREF(result);
161 return NULL;
162 }
163 /* Issue #17576: warn if 'result' not of exact type int. */
164 if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1,
165 "__int__ returned non-int (type %.200s). "
166 "The ability to return an instance of a strict subclass of int "
167 "is deprecated, and may be removed in a future version of Python.",
168 result->ob_type->tp_name)) {
169 Py_DECREF(result);
170 return NULL;
171 }
172 return (PyLongObject *)result;
173}
174
175
Serhiy Storchaka95949422013-08-27 19:40:23 +0300176/* Allocate a new int object with size digits.
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000177 Return NULL and set exception if we run out of memory. */
178
Mark Dickinson5a74bf62009-02-15 11:04:38 +0000179#define MAX_LONG_DIGITS \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000180 ((PY_SSIZE_T_MAX - offsetof(PyLongObject, ob_digit))/sizeof(digit))
Mark Dickinson5a74bf62009-02-15 11:04:38 +0000181
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000182PyLongObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +0000183_PyLong_New(Py_ssize_t size)
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000184{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000185 PyLongObject *result;
186 /* Number of bytes needed is: offsetof(PyLongObject, ob_digit) +
187 sizeof(digit)*size. Previous incarnations of this code used
188 sizeof(PyVarObject) instead of the offsetof, but this risks being
189 incorrect in the presence of padding between the PyVarObject header
190 and the digits. */
191 if (size > (Py_ssize_t)MAX_LONG_DIGITS) {
192 PyErr_SetString(PyExc_OverflowError,
193 "too many digits in integer");
194 return NULL;
195 }
196 result = PyObject_MALLOC(offsetof(PyLongObject, ob_digit) +
197 size*sizeof(digit));
198 if (!result) {
199 PyErr_NoMemory();
200 return NULL;
201 }
202 return (PyLongObject*)PyObject_INIT_VAR(result, &PyLong_Type, size);
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000203}
204
Tim Peters64b5ce32001-09-10 20:52:51 +0000205PyObject *
206_PyLong_Copy(PyLongObject *src)
207{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000208 PyLongObject *result;
209 Py_ssize_t i;
Tim Peters64b5ce32001-09-10 20:52:51 +0000210
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000211 assert(src != NULL);
212 i = Py_SIZE(src);
213 if (i < 0)
214 i = -(i);
215 if (i < 2) {
Mark Dickinsonbcc17ee2012-04-20 21:42:49 +0100216 sdigit ival = MEDIUM_VALUE(src);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000217 CHECK_SMALL_INT(ival);
218 }
219 result = _PyLong_New(i);
220 if (result != NULL) {
221 Py_SIZE(result) = Py_SIZE(src);
222 while (--i >= 0)
223 result->ob_digit[i] = src->ob_digit[i];
224 }
225 return (PyObject *)result;
Tim Peters64b5ce32001-09-10 20:52:51 +0000226}
227
Serhiy Storchaka95949422013-08-27 19:40:23 +0300228/* Create a new int object from a C long int */
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000229
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000230PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +0000231PyLong_FromLong(long ival)
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000232{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000233 PyLongObject *v;
234 unsigned long abs_ival;
235 unsigned long t; /* unsigned so >> doesn't propagate sign bit */
236 int ndigits = 0;
237 int sign = 1;
Guido van Rossumddefaf32007-01-14 03:31:43 +0000238
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000239 CHECK_SMALL_INT(ival);
Tim Petersce9de2f2001-06-14 04:56:19 +0000240
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000241 if (ival < 0) {
242 /* negate: can't write this as abs_ival = -ival since that
243 invokes undefined behaviour when ival is LONG_MIN */
244 abs_ival = 0U-(unsigned long)ival;
245 sign = -1;
246 }
247 else {
248 abs_ival = (unsigned long)ival;
249 }
Tim Petersce9de2f2001-06-14 04:56:19 +0000250
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000251 /* Fast path for single-digit ints */
252 if (!(abs_ival >> PyLong_SHIFT)) {
253 v = _PyLong_New(1);
254 if (v) {
255 Py_SIZE(v) = sign;
256 v->ob_digit[0] = Py_SAFE_DOWNCAST(
257 abs_ival, unsigned long, digit);
258 }
259 return (PyObject*)v;
260 }
Guido van Rossumddefaf32007-01-14 03:31:43 +0000261
Mark Dickinson249b8982009-04-27 19:41:00 +0000262#if PyLong_SHIFT==15
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000263 /* 2 digits */
264 if (!(abs_ival >> 2*PyLong_SHIFT)) {
265 v = _PyLong_New(2);
266 if (v) {
267 Py_SIZE(v) = 2*sign;
268 v->ob_digit[0] = Py_SAFE_DOWNCAST(
269 abs_ival & PyLong_MASK, unsigned long, digit);
270 v->ob_digit[1] = Py_SAFE_DOWNCAST(
271 abs_ival >> PyLong_SHIFT, unsigned long, digit);
272 }
273 return (PyObject*)v;
274 }
Mark Dickinsonbd792642009-03-18 20:06:12 +0000275#endif
Guido van Rossumddefaf32007-01-14 03:31:43 +0000276
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000277 /* Larger numbers: loop to determine number of digits */
278 t = abs_ival;
279 while (t) {
280 ++ndigits;
281 t >>= PyLong_SHIFT;
282 }
283 v = _PyLong_New(ndigits);
284 if (v != NULL) {
285 digit *p = v->ob_digit;
286 Py_SIZE(v) = ndigits*sign;
287 t = abs_ival;
288 while (t) {
289 *p++ = Py_SAFE_DOWNCAST(
290 t & PyLong_MASK, unsigned long, digit);
291 t >>= PyLong_SHIFT;
292 }
293 }
294 return (PyObject *)v;
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000295}
296
Serhiy Storchaka95949422013-08-27 19:40:23 +0300297/* Create a new int object from a C unsigned long int */
Guido van Rossum53756b11997-01-03 17:14:46 +0000298
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000299PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +0000300PyLong_FromUnsignedLong(unsigned long ival)
Guido van Rossum53756b11997-01-03 17:14:46 +0000301{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000302 PyLongObject *v;
303 unsigned long t;
304 int ndigits = 0;
Tim Petersce9de2f2001-06-14 04:56:19 +0000305
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000306 if (ival < PyLong_BASE)
307 return PyLong_FromLong(ival);
308 /* Count the number of Python digits. */
309 t = (unsigned long)ival;
310 while (t) {
311 ++ndigits;
312 t >>= PyLong_SHIFT;
313 }
314 v = _PyLong_New(ndigits);
315 if (v != NULL) {
316 digit *p = v->ob_digit;
317 Py_SIZE(v) = ndigits;
318 while (ival) {
319 *p++ = (digit)(ival & PyLong_MASK);
320 ival >>= PyLong_SHIFT;
321 }
322 }
323 return (PyObject *)v;
Guido van Rossum53756b11997-01-03 17:14:46 +0000324}
325
Serhiy Storchaka95949422013-08-27 19:40:23 +0300326/* Create a new int object from a C double */
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000327
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000328PyObject *
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000329PyLong_FromDouble(double dval)
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000330{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000331 PyLongObject *v;
332 double frac;
333 int i, ndig, expo, neg;
334 neg = 0;
335 if (Py_IS_INFINITY(dval)) {
336 PyErr_SetString(PyExc_OverflowError,
Mark Dickinson22b20182010-05-10 21:27:53 +0000337 "cannot convert float infinity to integer");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000338 return NULL;
339 }
340 if (Py_IS_NAN(dval)) {
341 PyErr_SetString(PyExc_ValueError,
Mark Dickinson22b20182010-05-10 21:27:53 +0000342 "cannot convert float NaN to integer");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000343 return NULL;
344 }
345 if (dval < 0.0) {
346 neg = 1;
347 dval = -dval;
348 }
349 frac = frexp(dval, &expo); /* dval = frac*2**expo; 0.0 <= frac < 1.0 */
350 if (expo <= 0)
351 return PyLong_FromLong(0L);
352 ndig = (expo-1) / PyLong_SHIFT + 1; /* Number of 'digits' in result */
353 v = _PyLong_New(ndig);
354 if (v == NULL)
355 return NULL;
356 frac = ldexp(frac, (expo-1) % PyLong_SHIFT + 1);
357 for (i = ndig; --i >= 0; ) {
358 digit bits = (digit)frac;
359 v->ob_digit[i] = bits;
360 frac = frac - (double)bits;
361 frac = ldexp(frac, PyLong_SHIFT);
362 }
363 if (neg)
364 Py_SIZE(v) = -(Py_SIZE(v));
365 return (PyObject *)v;
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000366}
367
Thomas Wouters89f507f2006-12-13 04:49:30 +0000368/* Checking for overflow in PyLong_AsLong is a PITA since C doesn't define
369 * anything about what happens when a signed integer operation overflows,
370 * and some compilers think they're doing you a favor by being "clever"
371 * then. The bit pattern for the largest postive signed long is
372 * (unsigned long)LONG_MAX, and for the smallest negative signed long
373 * it is abs(LONG_MIN), which we could write -(unsigned long)LONG_MIN.
374 * However, some other compilers warn about applying unary minus to an
375 * unsigned operand. Hence the weird "0-".
376 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000377#define PY_ABS_LONG_MIN (0-(unsigned long)LONG_MIN)
378#define PY_ABS_SSIZE_T_MIN (0-(size_t)PY_SSIZE_T_MIN)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000379
Serhiy Storchaka95949422013-08-27 19:40:23 +0300380/* Get a C long int from an int object or any object that has an __int__
Mark Dickinson8d48b432011-10-23 20:47:14 +0100381 method.
382
383 On overflow, return -1 and set *overflow to 1 or -1 depending on the sign of
384 the result. Otherwise *overflow is 0.
385
386 For other errors (e.g., TypeError), return -1 and set an error condition.
387 In this case *overflow will be 0.
388*/
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000389
390long
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +0000391PyLong_AsLongAndOverflow(PyObject *vv, int *overflow)
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000392{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000393 /* This version by Tim Peters */
Antoine Pitrou9ed5f272013-08-13 20:18:52 +0200394 PyLongObject *v;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000395 unsigned long x, prev;
396 long res;
397 Py_ssize_t i;
398 int sign;
399 int do_decref = 0; /* if nb_int was called */
Guido van Rossumf7531811998-05-26 14:33:37 +0000400
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000401 *overflow = 0;
402 if (vv == NULL) {
403 PyErr_BadInternalCall();
404 return -1;
405 }
Guido van Rossumddefaf32007-01-14 03:31:43 +0000406
Serhiy Storchaka31a65542013-12-11 21:07:54 +0200407 if (PyLong_Check(vv)) {
408 v = (PyLongObject *)vv;
409 }
410 else {
411 v = _PyLong_FromNbInt(vv);
412 if (v == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000413 return -1;
414 do_decref = 1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000415 }
Guido van Rossumddefaf32007-01-14 03:31:43 +0000416
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000417 res = -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000418 i = Py_SIZE(v);
Guido van Rossumf7531811998-05-26 14:33:37 +0000419
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000420 switch (i) {
421 case -1:
422 res = -(sdigit)v->ob_digit[0];
423 break;
424 case 0:
425 res = 0;
426 break;
427 case 1:
428 res = v->ob_digit[0];
429 break;
430 default:
431 sign = 1;
432 x = 0;
433 if (i < 0) {
434 sign = -1;
435 i = -(i);
436 }
437 while (--i >= 0) {
438 prev = x;
439 x = (x << PyLong_SHIFT) | v->ob_digit[i];
440 if ((x >> PyLong_SHIFT) != prev) {
441 *overflow = sign;
442 goto exit;
443 }
444 }
445 /* Haven't lost any bits, but casting to long requires extra
446 * care (see comment above).
447 */
448 if (x <= (unsigned long)LONG_MAX) {
449 res = (long)x * sign;
450 }
451 else if (sign < 0 && x == PY_ABS_LONG_MIN) {
452 res = LONG_MIN;
453 }
454 else {
455 *overflow = sign;
456 /* res is already set to -1 */
457 }
458 }
Mark Dickinson22b20182010-05-10 21:27:53 +0000459 exit:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000460 if (do_decref) {
Serhiy Storchaka31a65542013-12-11 21:07:54 +0200461 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000462 }
463 return res;
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000464}
465
Serhiy Storchaka95949422013-08-27 19:40:23 +0300466/* Get a C long int from an int object or any object that has an __int__
Mark Dickinson8d48b432011-10-23 20:47:14 +0100467 method. Return -1 and set an error if overflow occurs. */
468
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000469long
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +0000470PyLong_AsLong(PyObject *obj)
471{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000472 int overflow;
473 long result = PyLong_AsLongAndOverflow(obj, &overflow);
474 if (overflow) {
475 /* XXX: could be cute and give a different
476 message for overflow == -1 */
477 PyErr_SetString(PyExc_OverflowError,
478 "Python int too large to convert to C long");
479 }
480 return result;
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +0000481}
482
Serhiy Storchaka95949422013-08-27 19:40:23 +0300483/* Get a C int from an int object or any object that has an __int__
Serhiy Storchaka78980432013-01-15 01:12:17 +0200484 method. Return -1 and set an error if overflow occurs. */
485
486int
487_PyLong_AsInt(PyObject *obj)
488{
489 int overflow;
490 long result = PyLong_AsLongAndOverflow(obj, &overflow);
491 if (overflow || result > INT_MAX || result < INT_MIN) {
492 /* XXX: could be cute and give a different
493 message for overflow == -1 */
494 PyErr_SetString(PyExc_OverflowError,
495 "Python int too large to convert to C int");
496 return -1;
497 }
498 return (int)result;
499}
500
Serhiy Storchaka95949422013-08-27 19:40:23 +0300501/* Get a Py_ssize_t from an int object.
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000502 Returns -1 and sets an error condition if overflow occurs. */
503
504Py_ssize_t
Guido van Rossumddefaf32007-01-14 03:31:43 +0000505PyLong_AsSsize_t(PyObject *vv) {
Antoine Pitrou9ed5f272013-08-13 20:18:52 +0200506 PyLongObject *v;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000507 size_t x, prev;
508 Py_ssize_t i;
509 int sign;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000510
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000511 if (vv == NULL) {
512 PyErr_BadInternalCall();
513 return -1;
514 }
515 if (!PyLong_Check(vv)) {
516 PyErr_SetString(PyExc_TypeError, "an integer is required");
517 return -1;
518 }
Mark Dickinsond59b4162010-03-13 11:34:40 +0000519
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000520 v = (PyLongObject *)vv;
521 i = Py_SIZE(v);
522 switch (i) {
523 case -1: return -(sdigit)v->ob_digit[0];
524 case 0: return 0;
525 case 1: return v->ob_digit[0];
526 }
527 sign = 1;
528 x = 0;
529 if (i < 0) {
530 sign = -1;
531 i = -(i);
532 }
533 while (--i >= 0) {
534 prev = x;
535 x = (x << PyLong_SHIFT) | v->ob_digit[i];
536 if ((x >> PyLong_SHIFT) != prev)
537 goto overflow;
538 }
539 /* Haven't lost any bits, but casting to a signed type requires
540 * extra care (see comment above).
541 */
542 if (x <= (size_t)PY_SSIZE_T_MAX) {
543 return (Py_ssize_t)x * sign;
544 }
545 else if (sign < 0 && x == PY_ABS_SSIZE_T_MIN) {
546 return PY_SSIZE_T_MIN;
547 }
548 /* else overflow */
Martin v. Löwis18e16552006-02-15 17:27:45 +0000549
Mark Dickinson22b20182010-05-10 21:27:53 +0000550 overflow:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000551 PyErr_SetString(PyExc_OverflowError,
552 "Python int too large to convert to C ssize_t");
553 return -1;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000554}
555
Serhiy Storchaka95949422013-08-27 19:40:23 +0300556/* Get a C unsigned long int from an int object.
Guido van Rossum53756b11997-01-03 17:14:46 +0000557 Returns -1 and sets an error condition if overflow occurs. */
558
559unsigned long
Tim Peters9f688bf2000-07-07 15:53:28 +0000560PyLong_AsUnsignedLong(PyObject *vv)
Guido van Rossum53756b11997-01-03 17:14:46 +0000561{
Antoine Pitrou9ed5f272013-08-13 20:18:52 +0200562 PyLongObject *v;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000563 unsigned long x, prev;
564 Py_ssize_t i;
Tim Peters5af4e6c2002-08-12 02:31:19 +0000565
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000566 if (vv == NULL) {
567 PyErr_BadInternalCall();
568 return (unsigned long)-1;
569 }
570 if (!PyLong_Check(vv)) {
571 PyErr_SetString(PyExc_TypeError, "an integer is required");
572 return (unsigned long)-1;
573 }
Mark Dickinsond59b4162010-03-13 11:34:40 +0000574
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000575 v = (PyLongObject *)vv;
576 i = Py_SIZE(v);
577 x = 0;
578 if (i < 0) {
579 PyErr_SetString(PyExc_OverflowError,
Mark Dickinson22b20182010-05-10 21:27:53 +0000580 "can't convert negative value to unsigned int");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000581 return (unsigned long) -1;
582 }
583 switch (i) {
584 case 0: return 0;
585 case 1: return v->ob_digit[0];
586 }
587 while (--i >= 0) {
588 prev = x;
589 x = (x << PyLong_SHIFT) | v->ob_digit[i];
590 if ((x >> PyLong_SHIFT) != prev) {
591 PyErr_SetString(PyExc_OverflowError,
Mark Dickinson02515f72013-08-03 12:08:22 +0100592 "Python int too large to convert "
Mark Dickinson22b20182010-05-10 21:27:53 +0000593 "to C unsigned long");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000594 return (unsigned long) -1;
595 }
596 }
597 return x;
Guido van Rossumddefaf32007-01-14 03:31:43 +0000598}
599
Serhiy Storchaka95949422013-08-27 19:40:23 +0300600/* Get a C size_t from an int object. Returns (size_t)-1 and sets
Stefan Krahb77c6c62011-09-12 16:22:47 +0200601 an error condition if overflow occurs. */
Guido van Rossumddefaf32007-01-14 03:31:43 +0000602
603size_t
604PyLong_AsSize_t(PyObject *vv)
605{
Antoine Pitrou9ed5f272013-08-13 20:18:52 +0200606 PyLongObject *v;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000607 size_t x, prev;
608 Py_ssize_t i;
Guido van Rossumddefaf32007-01-14 03:31:43 +0000609
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000610 if (vv == NULL) {
611 PyErr_BadInternalCall();
612 return (size_t) -1;
613 }
614 if (!PyLong_Check(vv)) {
615 PyErr_SetString(PyExc_TypeError, "an integer is required");
616 return (size_t)-1;
617 }
Mark Dickinsond59b4162010-03-13 11:34:40 +0000618
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000619 v = (PyLongObject *)vv;
620 i = Py_SIZE(v);
621 x = 0;
622 if (i < 0) {
623 PyErr_SetString(PyExc_OverflowError,
624 "can't convert negative value to size_t");
625 return (size_t) -1;
626 }
627 switch (i) {
628 case 0: return 0;
629 case 1: return v->ob_digit[0];
630 }
631 while (--i >= 0) {
632 prev = x;
633 x = (x << PyLong_SHIFT) | v->ob_digit[i];
634 if ((x >> PyLong_SHIFT) != prev) {
635 PyErr_SetString(PyExc_OverflowError,
636 "Python int too large to convert to C size_t");
Stefan Krahb77c6c62011-09-12 16:22:47 +0200637 return (size_t) -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000638 }
639 }
640 return x;
Guido van Rossum53756b11997-01-03 17:14:46 +0000641}
642
Serhiy Storchaka95949422013-08-27 19:40:23 +0300643/* Get a C unsigned long int from an int object, ignoring the high bits.
Thomas Hellera4ea6032003-04-17 18:55:45 +0000644 Returns -1 and sets an error condition if an error occurs. */
645
Guido van Rossumddefaf32007-01-14 03:31:43 +0000646static unsigned long
647_PyLong_AsUnsignedLongMask(PyObject *vv)
Thomas Hellera4ea6032003-04-17 18:55:45 +0000648{
Antoine Pitrou9ed5f272013-08-13 20:18:52 +0200649 PyLongObject *v;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000650 unsigned long x;
651 Py_ssize_t i;
652 int sign;
Thomas Hellera4ea6032003-04-17 18:55:45 +0000653
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000654 if (vv == NULL || !PyLong_Check(vv)) {
655 PyErr_BadInternalCall();
656 return (unsigned long) -1;
657 }
658 v = (PyLongObject *)vv;
659 i = Py_SIZE(v);
660 switch (i) {
661 case 0: return 0;
662 case 1: return v->ob_digit[0];
663 }
664 sign = 1;
665 x = 0;
666 if (i < 0) {
667 sign = -1;
668 i = -i;
669 }
670 while (--i >= 0) {
671 x = (x << PyLong_SHIFT) | v->ob_digit[i];
672 }
673 return x * sign;
Thomas Hellera4ea6032003-04-17 18:55:45 +0000674}
675
Guido van Rossumddefaf32007-01-14 03:31:43 +0000676unsigned long
Antoine Pitrou9ed5f272013-08-13 20:18:52 +0200677PyLong_AsUnsignedLongMask(PyObject *op)
Guido van Rossumddefaf32007-01-14 03:31:43 +0000678{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000679 PyLongObject *lo;
680 unsigned long val;
Guido van Rossumddefaf32007-01-14 03:31:43 +0000681
Serhiy Storchaka31a65542013-12-11 21:07:54 +0200682 if (op == NULL) {
683 PyErr_BadInternalCall();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000684 return (unsigned long)-1;
685 }
Guido van Rossumddefaf32007-01-14 03:31:43 +0000686
Serhiy Storchaka31a65542013-12-11 21:07:54 +0200687 if (PyLong_Check(op)) {
688 return _PyLong_AsUnsignedLongMask(op);
689 }
690
691 lo = _PyLong_FromNbInt(op);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000692 if (lo == NULL)
693 return (unsigned long)-1;
Serhiy Storchaka31a65542013-12-11 21:07:54 +0200694
695 val = _PyLong_AsUnsignedLongMask((PyObject *)lo);
696 Py_DECREF(lo);
697 return val;
Guido van Rossumddefaf32007-01-14 03:31:43 +0000698}
699
Tim Peters5b8132f2003-01-31 15:52:05 +0000700int
701_PyLong_Sign(PyObject *vv)
702{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000703 PyLongObject *v = (PyLongObject *)vv;
Tim Peters5b8132f2003-01-31 15:52:05 +0000704
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000705 assert(v != NULL);
706 assert(PyLong_Check(v));
Tim Peters5b8132f2003-01-31 15:52:05 +0000707
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000708 return Py_SIZE(v) == 0 ? 0 : (Py_SIZE(v) < 0 ? -1 : 1);
Tim Peters5b8132f2003-01-31 15:52:05 +0000709}
710
Tim Petersbaefd9e2003-01-28 20:37:45 +0000711size_t
712_PyLong_NumBits(PyObject *vv)
713{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000714 PyLongObject *v = (PyLongObject *)vv;
715 size_t result = 0;
716 Py_ssize_t ndigits;
Tim Petersbaefd9e2003-01-28 20:37:45 +0000717
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000718 assert(v != NULL);
719 assert(PyLong_Check(v));
Victor Stinner45e8e2f2014-05-14 17:24:35 +0200720 ndigits = Py_ABS(Py_SIZE(v));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000721 assert(ndigits == 0 || v->ob_digit[ndigits - 1] != 0);
722 if (ndigits > 0) {
723 digit msd = v->ob_digit[ndigits - 1];
Mark Dickinsonfc9adb62012-10-06 18:50:02 +0100724 if ((size_t)(ndigits - 1) > PY_SIZE_MAX / (size_t)PyLong_SHIFT)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000725 goto Overflow;
Mark Dickinsonfc9adb62012-10-06 18:50:02 +0100726 result = (size_t)(ndigits - 1) * (size_t)PyLong_SHIFT;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000727 do {
728 ++result;
729 if (result == 0)
730 goto Overflow;
731 msd >>= 1;
732 } while (msd);
733 }
734 return result;
Tim Petersbaefd9e2003-01-28 20:37:45 +0000735
Mark Dickinson22b20182010-05-10 21:27:53 +0000736 Overflow:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000737 PyErr_SetString(PyExc_OverflowError, "int has too many bits "
738 "to express in a platform size_t");
739 return (size_t)-1;
Tim Petersbaefd9e2003-01-28 20:37:45 +0000740}
741
Tim Peters2a9b3672001-06-11 21:23:58 +0000742PyObject *
743_PyLong_FromByteArray(const unsigned char* bytes, size_t n,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000744 int little_endian, int is_signed)
Tim Peters2a9b3672001-06-11 21:23:58 +0000745{
Mark Dickinson22b20182010-05-10 21:27:53 +0000746 const unsigned char* pstartbyte; /* LSB of bytes */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000747 int incr; /* direction to move pstartbyte */
748 const unsigned char* pendbyte; /* MSB of bytes */
749 size_t numsignificantbytes; /* number of bytes that matter */
Serhiy Storchaka95949422013-08-27 19:40:23 +0300750 Py_ssize_t ndigits; /* number of Python int digits */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000751 PyLongObject* v; /* result */
752 Py_ssize_t idigit = 0; /* next free index in v->ob_digit */
Tim Peters2a9b3672001-06-11 21:23:58 +0000753
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000754 if (n == 0)
755 return PyLong_FromLong(0L);
Tim Peters2a9b3672001-06-11 21:23:58 +0000756
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000757 if (little_endian) {
758 pstartbyte = bytes;
759 pendbyte = bytes + n - 1;
760 incr = 1;
761 }
762 else {
763 pstartbyte = bytes + n - 1;
764 pendbyte = bytes;
765 incr = -1;
766 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000767
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000768 if (is_signed)
769 is_signed = *pendbyte >= 0x80;
Tim Peters2a9b3672001-06-11 21:23:58 +0000770
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000771 /* Compute numsignificantbytes. This consists of finding the most
Ezio Melotti13925002011-03-16 11:05:33 +0200772 significant byte. Leading 0 bytes are insignificant if the number
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000773 is positive, and leading 0xff bytes if negative. */
774 {
775 size_t i;
776 const unsigned char* p = pendbyte;
777 const int pincr = -incr; /* search MSB to LSB */
778 const unsigned char insignficant = is_signed ? 0xff : 0x00;
Tim Peters2a9b3672001-06-11 21:23:58 +0000779
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000780 for (i = 0; i < n; ++i, p += pincr) {
781 if (*p != insignficant)
782 break;
783 }
784 numsignificantbytes = n - i;
785 /* 2's-comp is a bit tricky here, e.g. 0xff00 == -0x0100, so
786 actually has 2 significant bytes. OTOH, 0xff0001 ==
787 -0x00ffff, so we wouldn't *need* to bump it there; but we
788 do for 0xffff = -0x0001. To be safe without bothering to
789 check every case, bump it regardless. */
790 if (is_signed && numsignificantbytes < n)
791 ++numsignificantbytes;
792 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000793
Serhiy Storchaka95949422013-08-27 19:40:23 +0300794 /* How many Python int digits do we need? We have
795 8*numsignificantbytes bits, and each Python int digit has
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000796 PyLong_SHIFT bits, so it's the ceiling of the quotient. */
797 /* catch overflow before it happens */
798 if (numsignificantbytes > (PY_SSIZE_T_MAX - PyLong_SHIFT) / 8) {
799 PyErr_SetString(PyExc_OverflowError,
800 "byte array too long to convert to int");
801 return NULL;
802 }
803 ndigits = (numsignificantbytes * 8 + PyLong_SHIFT - 1) / PyLong_SHIFT;
804 v = _PyLong_New(ndigits);
805 if (v == NULL)
806 return NULL;
Tim Peters2a9b3672001-06-11 21:23:58 +0000807
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000808 /* Copy the bits over. The tricky parts are computing 2's-comp on
809 the fly for signed numbers, and dealing with the mismatch between
810 8-bit bytes and (probably) 15-bit Python digits.*/
811 {
812 size_t i;
813 twodigits carry = 1; /* for 2's-comp calculation */
814 twodigits accum = 0; /* sliding register */
815 unsigned int accumbits = 0; /* number of bits in accum */
816 const unsigned char* p = pstartbyte;
Tim Peters2a9b3672001-06-11 21:23:58 +0000817
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000818 for (i = 0; i < numsignificantbytes; ++i, p += incr) {
819 twodigits thisbyte = *p;
820 /* Compute correction for 2's comp, if needed. */
821 if (is_signed) {
822 thisbyte = (0xff ^ thisbyte) + carry;
823 carry = thisbyte >> 8;
824 thisbyte &= 0xff;
825 }
826 /* Because we're going LSB to MSB, thisbyte is
827 more significant than what's already in accum,
828 so needs to be prepended to accum. */
829 accum |= (twodigits)thisbyte << accumbits;
830 accumbits += 8;
831 if (accumbits >= PyLong_SHIFT) {
832 /* There's enough to fill a Python digit. */
833 assert(idigit < ndigits);
Mark Dickinson22b20182010-05-10 21:27:53 +0000834 v->ob_digit[idigit] = (digit)(accum & PyLong_MASK);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000835 ++idigit;
836 accum >>= PyLong_SHIFT;
837 accumbits -= PyLong_SHIFT;
838 assert(accumbits < PyLong_SHIFT);
839 }
840 }
841 assert(accumbits < PyLong_SHIFT);
842 if (accumbits) {
843 assert(idigit < ndigits);
844 v->ob_digit[idigit] = (digit)accum;
845 ++idigit;
846 }
847 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000848
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000849 Py_SIZE(v) = is_signed ? -idigit : idigit;
850 return (PyObject *)long_normalize(v);
Tim Peters2a9b3672001-06-11 21:23:58 +0000851}
852
853int
854_PyLong_AsByteArray(PyLongObject* v,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000855 unsigned char* bytes, size_t n,
856 int little_endian, int is_signed)
Tim Peters2a9b3672001-06-11 21:23:58 +0000857{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000858 Py_ssize_t i; /* index into v->ob_digit */
Mark Dickinson22b20182010-05-10 21:27:53 +0000859 Py_ssize_t ndigits; /* |v->ob_size| */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000860 twodigits accum; /* sliding register */
Mark Dickinson22b20182010-05-10 21:27:53 +0000861 unsigned int accumbits; /* # bits in accum */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000862 int do_twos_comp; /* store 2's-comp? is_signed and v < 0 */
863 digit carry; /* for computing 2's-comp */
864 size_t j; /* # bytes filled */
865 unsigned char* p; /* pointer to next byte in bytes */
866 int pincr; /* direction to move p */
Tim Peters2a9b3672001-06-11 21:23:58 +0000867
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000868 assert(v != NULL && PyLong_Check(v));
Tim Peters2a9b3672001-06-11 21:23:58 +0000869
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000870 if (Py_SIZE(v) < 0) {
871 ndigits = -(Py_SIZE(v));
872 if (!is_signed) {
873 PyErr_SetString(PyExc_OverflowError,
Mark Dickinson22b20182010-05-10 21:27:53 +0000874 "can't convert negative int to unsigned");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000875 return -1;
876 }
877 do_twos_comp = 1;
878 }
879 else {
880 ndigits = Py_SIZE(v);
881 do_twos_comp = 0;
882 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000883
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000884 if (little_endian) {
885 p = bytes;
886 pincr = 1;
887 }
888 else {
889 p = bytes + n - 1;
890 pincr = -1;
891 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000892
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000893 /* Copy over all the Python digits.
894 It's crucial that every Python digit except for the MSD contribute
Serhiy Storchaka95949422013-08-27 19:40:23 +0300895 exactly PyLong_SHIFT bits to the total, so first assert that the int is
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000896 normalized. */
897 assert(ndigits == 0 || v->ob_digit[ndigits - 1] != 0);
898 j = 0;
899 accum = 0;
900 accumbits = 0;
901 carry = do_twos_comp ? 1 : 0;
902 for (i = 0; i < ndigits; ++i) {
903 digit thisdigit = v->ob_digit[i];
904 if (do_twos_comp) {
905 thisdigit = (thisdigit ^ PyLong_MASK) + carry;
906 carry = thisdigit >> PyLong_SHIFT;
907 thisdigit &= PyLong_MASK;
908 }
909 /* Because we're going LSB to MSB, thisdigit is more
910 significant than what's already in accum, so needs to be
911 prepended to accum. */
912 accum |= (twodigits)thisdigit << accumbits;
Tim Peters8bc84b42001-06-12 19:17:03 +0000913
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000914 /* The most-significant digit may be (probably is) at least
915 partly empty. */
916 if (i == ndigits - 1) {
917 /* Count # of sign bits -- they needn't be stored,
918 * although for signed conversion we need later to
919 * make sure at least one sign bit gets stored. */
Mark Dickinson22b20182010-05-10 21:27:53 +0000920 digit s = do_twos_comp ? thisdigit ^ PyLong_MASK : thisdigit;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000921 while (s != 0) {
922 s >>= 1;
923 accumbits++;
924 }
925 }
926 else
927 accumbits += PyLong_SHIFT;
Tim Peters8bc84b42001-06-12 19:17:03 +0000928
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000929 /* Store as many bytes as possible. */
930 while (accumbits >= 8) {
931 if (j >= n)
932 goto Overflow;
933 ++j;
934 *p = (unsigned char)(accum & 0xff);
935 p += pincr;
936 accumbits -= 8;
937 accum >>= 8;
938 }
939 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000940
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000941 /* Store the straggler (if any). */
942 assert(accumbits < 8);
943 assert(carry == 0); /* else do_twos_comp and *every* digit was 0 */
944 if (accumbits > 0) {
945 if (j >= n)
946 goto Overflow;
947 ++j;
948 if (do_twos_comp) {
949 /* Fill leading bits of the byte with sign bits
Serhiy Storchaka95949422013-08-27 19:40:23 +0300950 (appropriately pretending that the int had an
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000951 infinite supply of sign bits). */
952 accum |= (~(twodigits)0) << accumbits;
953 }
954 *p = (unsigned char)(accum & 0xff);
955 p += pincr;
956 }
957 else if (j == n && n > 0 && is_signed) {
958 /* The main loop filled the byte array exactly, so the code
959 just above didn't get to ensure there's a sign bit, and the
960 loop below wouldn't add one either. Make sure a sign bit
961 exists. */
962 unsigned char msb = *(p - pincr);
963 int sign_bit_set = msb >= 0x80;
964 assert(accumbits == 0);
965 if (sign_bit_set == do_twos_comp)
966 return 0;
967 else
968 goto Overflow;
969 }
Tim Peters05607ad2001-06-13 21:01:27 +0000970
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000971 /* Fill remaining bytes with copies of the sign bit. */
972 {
973 unsigned char signbyte = do_twos_comp ? 0xffU : 0U;
974 for ( ; j < n; ++j, p += pincr)
975 *p = signbyte;
976 }
Tim Peters05607ad2001-06-13 21:01:27 +0000977
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000978 return 0;
Tim Peters2a9b3672001-06-11 21:23:58 +0000979
Mark Dickinson22b20182010-05-10 21:27:53 +0000980 Overflow:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000981 PyErr_SetString(PyExc_OverflowError, "int too big to convert");
982 return -1;
Tim Peters5af4e6c2002-08-12 02:31:19 +0000983
Tim Peters2a9b3672001-06-11 21:23:58 +0000984}
985
Serhiy Storchaka95949422013-08-27 19:40:23 +0300986/* Create a new int object from a C pointer */
Guido van Rossum78694d91998-09-18 14:14:13 +0000987
988PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +0000989PyLong_FromVoidPtr(void *p)
Guido van Rossum78694d91998-09-18 14:14:13 +0000990{
Mark Dickinson91044792012-10-18 19:21:43 +0100991#if SIZEOF_VOID_P <= SIZEOF_LONG
Mark Dickinson91044792012-10-18 19:21:43 +0100992 return PyLong_FromUnsignedLong((unsigned long)(Py_uintptr_t)p);
993#else
994
Tim Peters70128a12001-06-16 08:48:40 +0000995#ifndef HAVE_LONG_LONG
996# error "PyLong_FromVoidPtr: sizeof(void*) > sizeof(long), but no long long"
997#endif
998#if SIZEOF_LONG_LONG < SIZEOF_VOID_P
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000999# error "PyLong_FromVoidPtr: sizeof(PY_LONG_LONG) < sizeof(void*)"
Tim Peters70128a12001-06-16 08:48:40 +00001000#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001001 return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG)(Py_uintptr_t)p);
Mark Dickinson91044792012-10-18 19:21:43 +01001002#endif /* SIZEOF_VOID_P <= SIZEOF_LONG */
Tim Peters70128a12001-06-16 08:48:40 +00001003
Guido van Rossum78694d91998-09-18 14:14:13 +00001004}
1005
Serhiy Storchaka95949422013-08-27 19:40:23 +03001006/* Get a C pointer from an int object. */
Guido van Rossum78694d91998-09-18 14:14:13 +00001007
1008void *
Tim Peters9f688bf2000-07-07 15:53:28 +00001009PyLong_AsVoidPtr(PyObject *vv)
Guido van Rossum78694d91998-09-18 14:14:13 +00001010{
Tim Peters70128a12001-06-16 08:48:40 +00001011#if SIZEOF_VOID_P <= SIZEOF_LONG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001012 long x;
Guido van Rossum78694d91998-09-18 14:14:13 +00001013
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001014 if (PyLong_Check(vv) && _PyLong_Sign(vv) < 0)
1015 x = PyLong_AsLong(vv);
1016 else
1017 x = PyLong_AsUnsignedLong(vv);
Guido van Rossum78694d91998-09-18 14:14:13 +00001018#else
Tim Peters70128a12001-06-16 08:48:40 +00001019
1020#ifndef HAVE_LONG_LONG
1021# error "PyLong_AsVoidPtr: sizeof(void*) > sizeof(long), but no long long"
1022#endif
1023#if SIZEOF_LONG_LONG < SIZEOF_VOID_P
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001024# error "PyLong_AsVoidPtr: sizeof(PY_LONG_LONG) < sizeof(void*)"
Tim Peters70128a12001-06-16 08:48:40 +00001025#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001026 PY_LONG_LONG x;
Guido van Rossum78694d91998-09-18 14:14:13 +00001027
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001028 if (PyLong_Check(vv) && _PyLong_Sign(vv) < 0)
1029 x = PyLong_AsLongLong(vv);
1030 else
1031 x = PyLong_AsUnsignedLongLong(vv);
Tim Peters70128a12001-06-16 08:48:40 +00001032
1033#endif /* SIZEOF_VOID_P <= SIZEOF_LONG */
Guido van Rossum78694d91998-09-18 14:14:13 +00001034
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001035 if (x == -1 && PyErr_Occurred())
1036 return NULL;
1037 return (void *)x;
Guido van Rossum78694d91998-09-18 14:14:13 +00001038}
1039
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001040#ifdef HAVE_LONG_LONG
Tim Petersd1a7da62001-06-13 00:35:57 +00001041
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001042/* Initial PY_LONG_LONG support by Chris Herborth (chrish@qnx.com), later
Tim Petersd1a7da62001-06-13 00:35:57 +00001043 * rewritten to use the newer PyLong_{As,From}ByteArray API.
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001044 */
1045
Mark Dickinson22b20182010-05-10 21:27:53 +00001046#define PY_ABS_LLONG_MIN (0-(unsigned PY_LONG_LONG)PY_LLONG_MIN)
Tim Petersd1a7da62001-06-13 00:35:57 +00001047
Serhiy Storchaka95949422013-08-27 19:40:23 +03001048/* Create a new int object from a C PY_LONG_LONG int. */
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001049
1050PyObject *
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001051PyLong_FromLongLong(PY_LONG_LONG ival)
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001052{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001053 PyLongObject *v;
1054 unsigned PY_LONG_LONG abs_ival;
1055 unsigned PY_LONG_LONG t; /* unsigned so >> doesn't propagate sign bit */
1056 int ndigits = 0;
1057 int negative = 0;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001058
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001059 CHECK_SMALL_INT(ival);
1060 if (ival < 0) {
1061 /* avoid signed overflow on negation; see comments
1062 in PyLong_FromLong above. */
1063 abs_ival = (unsigned PY_LONG_LONG)(-1-ival) + 1;
1064 negative = 1;
1065 }
1066 else {
1067 abs_ival = (unsigned PY_LONG_LONG)ival;
1068 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00001069
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001070 /* Count the number of Python digits.
1071 We used to pick 5 ("big enough for anything"), but that's a
1072 waste of time and space given that 5*15 = 75 bits are rarely
1073 needed. */
1074 t = abs_ival;
1075 while (t) {
1076 ++ndigits;
1077 t >>= PyLong_SHIFT;
1078 }
1079 v = _PyLong_New(ndigits);
1080 if (v != NULL) {
1081 digit *p = v->ob_digit;
1082 Py_SIZE(v) = negative ? -ndigits : ndigits;
1083 t = abs_ival;
1084 while (t) {
1085 *p++ = (digit)(t & PyLong_MASK);
1086 t >>= PyLong_SHIFT;
1087 }
1088 }
1089 return (PyObject *)v;
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001090}
1091
Serhiy Storchaka95949422013-08-27 19:40:23 +03001092/* Create a new int object from a C unsigned PY_LONG_LONG int. */
Tim Petersd1a7da62001-06-13 00:35:57 +00001093
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001094PyObject *
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001095PyLong_FromUnsignedLongLong(unsigned PY_LONG_LONG ival)
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001096{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001097 PyLongObject *v;
1098 unsigned PY_LONG_LONG t;
1099 int ndigits = 0;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001100
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001101 if (ival < PyLong_BASE)
1102 return PyLong_FromLong((long)ival);
1103 /* Count the number of Python digits. */
1104 t = (unsigned PY_LONG_LONG)ival;
1105 while (t) {
1106 ++ndigits;
1107 t >>= PyLong_SHIFT;
1108 }
1109 v = _PyLong_New(ndigits);
1110 if (v != NULL) {
1111 digit *p = v->ob_digit;
1112 Py_SIZE(v) = ndigits;
1113 while (ival) {
1114 *p++ = (digit)(ival & PyLong_MASK);
1115 ival >>= PyLong_SHIFT;
1116 }
1117 }
1118 return (PyObject *)v;
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001119}
1120
Serhiy Storchaka95949422013-08-27 19:40:23 +03001121/* Create a new int object from a C Py_ssize_t. */
Martin v. Löwis18e16552006-02-15 17:27:45 +00001122
1123PyObject *
Guido van Rossumddefaf32007-01-14 03:31:43 +00001124PyLong_FromSsize_t(Py_ssize_t ival)
Martin v. Löwis18e16552006-02-15 17:27:45 +00001125{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001126 PyLongObject *v;
1127 size_t abs_ival;
1128 size_t t; /* unsigned so >> doesn't propagate sign bit */
1129 int ndigits = 0;
1130 int negative = 0;
Mark Dickinson7ab6be22008-04-15 21:42:42 +00001131
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001132 CHECK_SMALL_INT(ival);
1133 if (ival < 0) {
1134 /* avoid signed overflow when ival = SIZE_T_MIN */
1135 abs_ival = (size_t)(-1-ival)+1;
1136 negative = 1;
1137 }
1138 else {
1139 abs_ival = (size_t)ival;
1140 }
Mark Dickinson7ab6be22008-04-15 21:42:42 +00001141
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001142 /* Count the number of Python digits. */
1143 t = abs_ival;
1144 while (t) {
1145 ++ndigits;
1146 t >>= PyLong_SHIFT;
1147 }
1148 v = _PyLong_New(ndigits);
1149 if (v != NULL) {
1150 digit *p = v->ob_digit;
1151 Py_SIZE(v) = negative ? -ndigits : ndigits;
1152 t = abs_ival;
1153 while (t) {
1154 *p++ = (digit)(t & PyLong_MASK);
1155 t >>= PyLong_SHIFT;
1156 }
1157 }
1158 return (PyObject *)v;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001159}
1160
Serhiy Storchaka95949422013-08-27 19:40:23 +03001161/* Create a new int object from a C size_t. */
Martin v. Löwis18e16552006-02-15 17:27:45 +00001162
1163PyObject *
Guido van Rossumddefaf32007-01-14 03:31:43 +00001164PyLong_FromSize_t(size_t ival)
Martin v. Löwis18e16552006-02-15 17:27:45 +00001165{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001166 PyLongObject *v;
1167 size_t t;
1168 int ndigits = 0;
Mark Dickinson7ab6be22008-04-15 21:42:42 +00001169
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001170 if (ival < PyLong_BASE)
1171 return PyLong_FromLong((long)ival);
1172 /* Count the number of Python digits. */
1173 t = ival;
1174 while (t) {
1175 ++ndigits;
1176 t >>= PyLong_SHIFT;
1177 }
1178 v = _PyLong_New(ndigits);
1179 if (v != NULL) {
1180 digit *p = v->ob_digit;
1181 Py_SIZE(v) = ndigits;
1182 while (ival) {
1183 *p++ = (digit)(ival & PyLong_MASK);
1184 ival >>= PyLong_SHIFT;
1185 }
1186 }
1187 return (PyObject *)v;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001188}
1189
Serhiy Storchaka95949422013-08-27 19:40:23 +03001190/* Get a C long long int from an int object or any object that has an
Mark Dickinson8d48b432011-10-23 20:47:14 +01001191 __int__ method. Return -1 and set an error if overflow occurs. */
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001192
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001193PY_LONG_LONG
Tim Peters9f688bf2000-07-07 15:53:28 +00001194PyLong_AsLongLong(PyObject *vv)
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001195{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001196 PyLongObject *v;
1197 PY_LONG_LONG bytes;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001198 int res;
Serhiy Storchaka31a65542013-12-11 21:07:54 +02001199 int do_decref = 0; /* if nb_int was called */
Tim Petersd1a7da62001-06-13 00:35:57 +00001200
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001201 if (vv == NULL) {
1202 PyErr_BadInternalCall();
1203 return -1;
1204 }
Serhiy Storchaka31a65542013-12-11 21:07:54 +02001205
1206 if (PyLong_Check(vv)) {
1207 v = (PyLongObject *)vv;
1208 }
1209 else {
1210 v = _PyLong_FromNbInt(vv);
1211 if (v == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001212 return -1;
Serhiy Storchaka31a65542013-12-11 21:07:54 +02001213 do_decref = 1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001214 }
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001215
Serhiy Storchaka31a65542013-12-11 21:07:54 +02001216 res = 0;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001217 switch(Py_SIZE(v)) {
Serhiy Storchaka31a65542013-12-11 21:07:54 +02001218 case -1:
1219 bytes = -(sdigit)v->ob_digit[0];
1220 break;
1221 case 0:
1222 bytes = 0;
1223 break;
1224 case 1:
1225 bytes = v->ob_digit[0];
1226 break;
1227 default:
1228 res = _PyLong_AsByteArray((PyLongObject *)v, (unsigned char *)&bytes,
Serhiy Storchakac4f32122013-12-11 21:26:36 +02001229 SIZEOF_LONG_LONG, PY_LITTLE_ENDIAN, 1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001230 }
Serhiy Storchaka31a65542013-12-11 21:07:54 +02001231 if (do_decref) {
1232 Py_DECREF(v);
1233 }
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001234
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001235 /* Plan 9 can't handle PY_LONG_LONG in ? : expressions */
1236 if (res < 0)
1237 return (PY_LONG_LONG)-1;
1238 else
1239 return bytes;
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001240}
1241
Serhiy Storchaka95949422013-08-27 19:40:23 +03001242/* Get a C unsigned PY_LONG_LONG int from an int object.
Tim Petersd1a7da62001-06-13 00:35:57 +00001243 Return -1 and set an error if overflow occurs. */
1244
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001245unsigned PY_LONG_LONG
Tim Peters9f688bf2000-07-07 15:53:28 +00001246PyLong_AsUnsignedLongLong(PyObject *vv)
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001247{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001248 PyLongObject *v;
1249 unsigned PY_LONG_LONG bytes;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001250 int res;
Tim Petersd1a7da62001-06-13 00:35:57 +00001251
Nadeem Vawda3d5881e2011-09-07 21:40:26 +02001252 if (vv == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001253 PyErr_BadInternalCall();
1254 return (unsigned PY_LONG_LONG)-1;
1255 }
Nadeem Vawda3d5881e2011-09-07 21:40:26 +02001256 if (!PyLong_Check(vv)) {
1257 PyErr_SetString(PyExc_TypeError, "an integer is required");
1258 return (unsigned PY_LONG_LONG)-1;
1259 }
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001260
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001261 v = (PyLongObject*)vv;
1262 switch(Py_SIZE(v)) {
1263 case 0: return 0;
1264 case 1: return v->ob_digit[0];
1265 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00001266
Mark Dickinson22b20182010-05-10 21:27:53 +00001267 res = _PyLong_AsByteArray((PyLongObject *)vv, (unsigned char *)&bytes,
Christian Heimes743e0cd2012-10-17 23:52:17 +02001268 SIZEOF_LONG_LONG, PY_LITTLE_ENDIAN, 0);
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001269
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001270 /* Plan 9 can't handle PY_LONG_LONG in ? : expressions */
1271 if (res < 0)
1272 return (unsigned PY_LONG_LONG)res;
1273 else
1274 return bytes;
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001275}
Tim Petersd1a7da62001-06-13 00:35:57 +00001276
Serhiy Storchaka95949422013-08-27 19:40:23 +03001277/* Get a C unsigned long int from an int object, ignoring the high bits.
Thomas Hellera4ea6032003-04-17 18:55:45 +00001278 Returns -1 and sets an error condition if an error occurs. */
1279
Guido van Rossumddefaf32007-01-14 03:31:43 +00001280static unsigned PY_LONG_LONG
1281_PyLong_AsUnsignedLongLongMask(PyObject *vv)
Thomas Hellera4ea6032003-04-17 18:55:45 +00001282{
Antoine Pitrou9ed5f272013-08-13 20:18:52 +02001283 PyLongObject *v;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001284 unsigned PY_LONG_LONG x;
1285 Py_ssize_t i;
1286 int sign;
Thomas Hellera4ea6032003-04-17 18:55:45 +00001287
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001288 if (vv == NULL || !PyLong_Check(vv)) {
1289 PyErr_BadInternalCall();
1290 return (unsigned long) -1;
1291 }
1292 v = (PyLongObject *)vv;
1293 switch(Py_SIZE(v)) {
1294 case 0: return 0;
1295 case 1: return v->ob_digit[0];
1296 }
1297 i = Py_SIZE(v);
1298 sign = 1;
1299 x = 0;
1300 if (i < 0) {
1301 sign = -1;
1302 i = -i;
1303 }
1304 while (--i >= 0) {
1305 x = (x << PyLong_SHIFT) | v->ob_digit[i];
1306 }
1307 return x * sign;
Thomas Hellera4ea6032003-04-17 18:55:45 +00001308}
Guido van Rossumddefaf32007-01-14 03:31:43 +00001309
1310unsigned PY_LONG_LONG
Antoine Pitrou9ed5f272013-08-13 20:18:52 +02001311PyLong_AsUnsignedLongLongMask(PyObject *op)
Guido van Rossumddefaf32007-01-14 03:31:43 +00001312{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001313 PyLongObject *lo;
1314 unsigned PY_LONG_LONG val;
Guido van Rossumddefaf32007-01-14 03:31:43 +00001315
Serhiy Storchaka31a65542013-12-11 21:07:54 +02001316 if (op == NULL) {
1317 PyErr_BadInternalCall();
1318 return (unsigned long)-1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001319 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00001320
Serhiy Storchaka31a65542013-12-11 21:07:54 +02001321 if (PyLong_Check(op)) {
1322 return _PyLong_AsUnsignedLongLongMask(op);
1323 }
1324
1325 lo = _PyLong_FromNbInt(op);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001326 if (lo == NULL)
1327 return (unsigned PY_LONG_LONG)-1;
Serhiy Storchaka31a65542013-12-11 21:07:54 +02001328
1329 val = _PyLong_AsUnsignedLongLongMask((PyObject *)lo);
1330 Py_DECREF(lo);
1331 return val;
Guido van Rossumddefaf32007-01-14 03:31:43 +00001332}
Tim Petersd1a7da62001-06-13 00:35:57 +00001333
Serhiy Storchaka95949422013-08-27 19:40:23 +03001334/* Get a C long long int from an int object or any object that has an
Mark Dickinson8d48b432011-10-23 20:47:14 +01001335 __int__ method.
Mark Dickinson93f562c2010-01-30 10:30:15 +00001336
Mark Dickinson8d48b432011-10-23 20:47:14 +01001337 On overflow, return -1 and set *overflow to 1 or -1 depending on the sign of
1338 the result. Otherwise *overflow is 0.
1339
1340 For other errors (e.g., TypeError), return -1 and set an error condition.
1341 In this case *overflow will be 0.
Mark Dickinson93f562c2010-01-30 10:30:15 +00001342*/
1343
1344PY_LONG_LONG
1345PyLong_AsLongLongAndOverflow(PyObject *vv, int *overflow)
1346{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001347 /* This version by Tim Peters */
Antoine Pitrou9ed5f272013-08-13 20:18:52 +02001348 PyLongObject *v;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001349 unsigned PY_LONG_LONG x, prev;
1350 PY_LONG_LONG res;
1351 Py_ssize_t i;
1352 int sign;
1353 int do_decref = 0; /* if nb_int was called */
Mark Dickinson93f562c2010-01-30 10:30:15 +00001354
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001355 *overflow = 0;
1356 if (vv == NULL) {
1357 PyErr_BadInternalCall();
1358 return -1;
1359 }
Mark Dickinson93f562c2010-01-30 10:30:15 +00001360
Serhiy Storchaka31a65542013-12-11 21:07:54 +02001361 if (PyLong_Check(vv)) {
1362 v = (PyLongObject *)vv;
1363 }
1364 else {
1365 v = _PyLong_FromNbInt(vv);
1366 if (v == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001367 return -1;
1368 do_decref = 1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001369 }
Mark Dickinson93f562c2010-01-30 10:30:15 +00001370
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001371 res = -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001372 i = Py_SIZE(v);
Mark Dickinson93f562c2010-01-30 10:30:15 +00001373
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001374 switch (i) {
1375 case -1:
1376 res = -(sdigit)v->ob_digit[0];
1377 break;
1378 case 0:
1379 res = 0;
1380 break;
1381 case 1:
1382 res = v->ob_digit[0];
1383 break;
1384 default:
1385 sign = 1;
1386 x = 0;
1387 if (i < 0) {
1388 sign = -1;
1389 i = -(i);
1390 }
1391 while (--i >= 0) {
1392 prev = x;
1393 x = (x << PyLong_SHIFT) + v->ob_digit[i];
1394 if ((x >> PyLong_SHIFT) != prev) {
1395 *overflow = sign;
1396 goto exit;
1397 }
1398 }
1399 /* Haven't lost any bits, but casting to long requires extra
1400 * care (see comment above).
1401 */
1402 if (x <= (unsigned PY_LONG_LONG)PY_LLONG_MAX) {
1403 res = (PY_LONG_LONG)x * sign;
1404 }
1405 else if (sign < 0 && x == PY_ABS_LLONG_MIN) {
1406 res = PY_LLONG_MIN;
1407 }
1408 else {
1409 *overflow = sign;
1410 /* res is already set to -1 */
1411 }
1412 }
Mark Dickinson22b20182010-05-10 21:27:53 +00001413 exit:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001414 if (do_decref) {
Serhiy Storchaka31a65542013-12-11 21:07:54 +02001415 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001416 }
1417 return res;
Mark Dickinson93f562c2010-01-30 10:30:15 +00001418}
1419
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001420#endif /* HAVE_LONG_LONG */
1421
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00001422#define CHECK_BINOP(v,w) \
1423 do { \
Brian Curtindfc80e32011-08-10 20:28:54 -05001424 if (!PyLong_Check(v) || !PyLong_Check(w)) \
1425 Py_RETURN_NOTIMPLEMENTED; \
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00001426 } while(0)
Neil Schemenauerba872e22001-01-04 01:46:03 +00001427
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001428/* bits_in_digit(d) returns the unique integer k such that 2**(k-1) <= d <
1429 2**k if d is nonzero, else 0. */
1430
1431static const unsigned char BitLengthTable[32] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001432 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
1433 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001434};
1435
1436static int
1437bits_in_digit(digit d)
1438{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001439 int d_bits = 0;
1440 while (d >= 32) {
1441 d_bits += 6;
1442 d >>= 6;
1443 }
1444 d_bits += (int)BitLengthTable[d];
1445 return d_bits;
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001446}
1447
Tim Peters877a2122002-08-12 05:09:36 +00001448/* x[0:m] and y[0:n] are digit vectors, LSD first, m >= n required. x[0:n]
1449 * is modified in place, by adding y to it. Carries are propagated as far as
1450 * x[m-1], and the remaining carry (0 or 1) is returned.
1451 */
1452static digit
Martin v. Löwis18e16552006-02-15 17:27:45 +00001453v_iadd(digit *x, Py_ssize_t m, digit *y, Py_ssize_t n)
Tim Peters877a2122002-08-12 05:09:36 +00001454{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001455 Py_ssize_t i;
1456 digit carry = 0;
Tim Peters877a2122002-08-12 05:09:36 +00001457
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001458 assert(m >= n);
1459 for (i = 0; i < n; ++i) {
1460 carry += x[i] + y[i];
1461 x[i] = carry & PyLong_MASK;
1462 carry >>= PyLong_SHIFT;
1463 assert((carry & 1) == carry);
1464 }
1465 for (; carry && i < m; ++i) {
1466 carry += x[i];
1467 x[i] = carry & PyLong_MASK;
1468 carry >>= PyLong_SHIFT;
1469 assert((carry & 1) == carry);
1470 }
1471 return carry;
Tim Peters877a2122002-08-12 05:09:36 +00001472}
1473
1474/* x[0:m] and y[0:n] are digit vectors, LSD first, m >= n required. x[0:n]
1475 * is modified in place, by subtracting y from it. Borrows are propagated as
1476 * far as x[m-1], and the remaining borrow (0 or 1) is returned.
1477 */
1478static digit
Martin v. Löwis18e16552006-02-15 17:27:45 +00001479v_isub(digit *x, Py_ssize_t m, digit *y, Py_ssize_t n)
Tim Peters877a2122002-08-12 05:09:36 +00001480{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001481 Py_ssize_t i;
1482 digit borrow = 0;
Tim Peters877a2122002-08-12 05:09:36 +00001483
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001484 assert(m >= n);
1485 for (i = 0; i < n; ++i) {
1486 borrow = x[i] - y[i] - borrow;
1487 x[i] = borrow & PyLong_MASK;
1488 borrow >>= PyLong_SHIFT;
1489 borrow &= 1; /* keep only 1 sign bit */
1490 }
1491 for (; borrow && i < m; ++i) {
1492 borrow = x[i] - borrow;
1493 x[i] = borrow & PyLong_MASK;
1494 borrow >>= PyLong_SHIFT;
1495 borrow &= 1;
1496 }
1497 return borrow;
Tim Peters877a2122002-08-12 05:09:36 +00001498}
Neil Schemenauerba872e22001-01-04 01:46:03 +00001499
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001500/* Shift digit vector a[0:m] d bits left, with 0 <= d < PyLong_SHIFT. Put
1501 * result in z[0:m], and return the d bits shifted out of the top.
1502 */
1503static digit
1504v_lshift(digit *z, digit *a, Py_ssize_t m, int d)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001505{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001506 Py_ssize_t i;
1507 digit carry = 0;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001508
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001509 assert(0 <= d && d < PyLong_SHIFT);
1510 for (i=0; i < m; i++) {
1511 twodigits acc = (twodigits)a[i] << d | carry;
1512 z[i] = (digit)acc & PyLong_MASK;
1513 carry = (digit)(acc >> PyLong_SHIFT);
1514 }
1515 return carry;
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001516}
1517
1518/* Shift digit vector a[0:m] d bits right, with 0 <= d < PyLong_SHIFT. Put
1519 * result in z[0:m], and return the d bits shifted out of the bottom.
1520 */
1521static digit
1522v_rshift(digit *z, digit *a, Py_ssize_t m, int d)
1523{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001524 Py_ssize_t i;
1525 digit carry = 0;
1526 digit mask = ((digit)1 << d) - 1U;
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001527
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001528 assert(0 <= d && d < PyLong_SHIFT);
1529 for (i=m; i-- > 0;) {
1530 twodigits acc = (twodigits)carry << PyLong_SHIFT | a[i];
1531 carry = (digit)acc & mask;
1532 z[i] = (digit)(acc >> d);
1533 }
1534 return carry;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001535}
1536
Tim Peters212e6142001-07-14 12:23:19 +00001537/* Divide long pin, w/ size digits, by non-zero digit n, storing quotient
1538 in pout, and returning the remainder. pin and pout point at the LSD.
1539 It's OK for pin == pout on entry, which saves oodles of mallocs/frees in
Serhiy Storchaka95949422013-08-27 19:40:23 +03001540 _PyLong_Format, but that should be done with great care since ints are
Tim Peters212e6142001-07-14 12:23:19 +00001541 immutable. */
1542
1543static digit
Martin v. Löwis18e16552006-02-15 17:27:45 +00001544inplace_divrem1(digit *pout, digit *pin, Py_ssize_t size, digit n)
Tim Peters212e6142001-07-14 12:23:19 +00001545{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001546 twodigits rem = 0;
Tim Peters212e6142001-07-14 12:23:19 +00001547
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001548 assert(n > 0 && n <= PyLong_MASK);
1549 pin += size;
1550 pout += size;
1551 while (--size >= 0) {
1552 digit hi;
1553 rem = (rem << PyLong_SHIFT) | *--pin;
1554 *--pout = hi = (digit)(rem / n);
1555 rem -= (twodigits)hi * n;
1556 }
1557 return (digit)rem;
Tim Peters212e6142001-07-14 12:23:19 +00001558}
1559
Serhiy Storchaka95949422013-08-27 19:40:23 +03001560/* Divide an integer by a digit, returning both the quotient
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001561 (as function result) and the remainder (through *prem).
1562 The sign of a is ignored; n should not be zero. */
1563
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001564static PyLongObject *
Tim Peters212e6142001-07-14 12:23:19 +00001565divrem1(PyLongObject *a, digit n, digit *prem)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001566{
Victor Stinner45e8e2f2014-05-14 17:24:35 +02001567 const Py_ssize_t size = Py_ABS(Py_SIZE(a));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001568 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001569
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001570 assert(n > 0 && n <= PyLong_MASK);
1571 z = _PyLong_New(size);
1572 if (z == NULL)
1573 return NULL;
1574 *prem = inplace_divrem1(z->ob_digit, a->ob_digit, size, n);
1575 return long_normalize(z);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001576}
1577
Serhiy Storchaka95949422013-08-27 19:40:23 +03001578/* Convert an integer to a base 10 string. Returns a new non-shared
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001579 string. (Return value is non-shared so that callers can modify the
1580 returned value if necessary.) */
1581
Victor Stinnerd3f08822012-05-29 12:57:52 +02001582static int
1583long_to_decimal_string_internal(PyObject *aa,
1584 PyObject **p_output,
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001585 _PyUnicodeWriter *writer,
1586 _PyBytesWriter *bytes_writer,
1587 char **bytes_str)
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001588{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001589 PyLongObject *scratch, *a;
1590 PyObject *str;
1591 Py_ssize_t size, strlen, size_a, i, j;
1592 digit *pout, *pin, rem, tenpow;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001593 int negative;
Victor Stinnerd3f08822012-05-29 12:57:52 +02001594 enum PyUnicode_Kind kind;
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001595
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001596 a = (PyLongObject *)aa;
1597 if (a == NULL || !PyLong_Check(a)) {
1598 PyErr_BadInternalCall();
Victor Stinnerd3f08822012-05-29 12:57:52 +02001599 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001600 }
Victor Stinner45e8e2f2014-05-14 17:24:35 +02001601 size_a = Py_ABS(Py_SIZE(a));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001602 negative = Py_SIZE(a) < 0;
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001603
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001604 /* quick and dirty upper bound for the number of digits
1605 required to express a in base _PyLong_DECIMAL_BASE:
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001606
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001607 #digits = 1 + floor(log2(a) / log2(_PyLong_DECIMAL_BASE))
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001608
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001609 But log2(a) < size_a * PyLong_SHIFT, and
1610 log2(_PyLong_DECIMAL_BASE) = log2(10) * _PyLong_DECIMAL_SHIFT
1611 > 3 * _PyLong_DECIMAL_SHIFT
1612 */
1613 if (size_a > PY_SSIZE_T_MAX / PyLong_SHIFT) {
1614 PyErr_SetString(PyExc_OverflowError,
Mark Dickinson02515f72013-08-03 12:08:22 +01001615 "int too large to format");
Victor Stinnerd3f08822012-05-29 12:57:52 +02001616 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001617 }
1618 /* the expression size_a * PyLong_SHIFT is now safe from overflow */
1619 size = 1 + size_a * PyLong_SHIFT / (3 * _PyLong_DECIMAL_SHIFT);
1620 scratch = _PyLong_New(size);
1621 if (scratch == NULL)
Victor Stinnerd3f08822012-05-29 12:57:52 +02001622 return -1;
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001623
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001624 /* convert array of base _PyLong_BASE digits in pin to an array of
1625 base _PyLong_DECIMAL_BASE digits in pout, following Knuth (TAOCP,
1626 Volume 2 (3rd edn), section 4.4, Method 1b). */
1627 pin = a->ob_digit;
1628 pout = scratch->ob_digit;
1629 size = 0;
1630 for (i = size_a; --i >= 0; ) {
1631 digit hi = pin[i];
1632 for (j = 0; j < size; j++) {
1633 twodigits z = (twodigits)pout[j] << PyLong_SHIFT | hi;
1634 hi = (digit)(z / _PyLong_DECIMAL_BASE);
1635 pout[j] = (digit)(z - (twodigits)hi *
1636 _PyLong_DECIMAL_BASE);
1637 }
1638 while (hi) {
1639 pout[size++] = hi % _PyLong_DECIMAL_BASE;
1640 hi /= _PyLong_DECIMAL_BASE;
1641 }
1642 /* check for keyboard interrupt */
1643 SIGCHECK({
Mark Dickinson22b20182010-05-10 21:27:53 +00001644 Py_DECREF(scratch);
Victor Stinnerd3f08822012-05-29 12:57:52 +02001645 return -1;
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00001646 });
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001647 }
1648 /* pout should have at least one digit, so that the case when a = 0
1649 works correctly */
1650 if (size == 0)
1651 pout[size++] = 0;
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001652
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001653 /* calculate exact length of output string, and allocate */
1654 strlen = negative + 1 + (size - 1) * _PyLong_DECIMAL_SHIFT;
1655 tenpow = 10;
1656 rem = pout[size-1];
1657 while (rem >= tenpow) {
1658 tenpow *= 10;
1659 strlen++;
1660 }
Victor Stinnerd3f08822012-05-29 12:57:52 +02001661 if (writer) {
Christian Heimes110ac162012-09-10 02:51:27 +02001662 if (_PyUnicodeWriter_Prepare(writer, strlen, '9') == -1) {
1663 Py_DECREF(scratch);
Victor Stinnerd3f08822012-05-29 12:57:52 +02001664 return -1;
Christian Heimes110ac162012-09-10 02:51:27 +02001665 }
Victor Stinnerd3f08822012-05-29 12:57:52 +02001666 kind = writer->kind;
1667 str = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001668 }
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001669 else if (bytes_writer) {
1670 *bytes_str = _PyBytesWriter_Prepare(bytes_writer, *bytes_str, strlen);
1671 if (*bytes_str == NULL) {
1672 Py_DECREF(scratch);
1673 return -1;
1674 }
1675 }
Victor Stinnerd3f08822012-05-29 12:57:52 +02001676 else {
1677 str = PyUnicode_New(strlen, '9');
1678 if (str == NULL) {
1679 Py_DECREF(scratch);
1680 return -1;
1681 }
1682 kind = PyUnicode_KIND(str);
1683 }
1684
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001685#define WRITE_DIGITS(p) \
Victor Stinnerd3f08822012-05-29 12:57:52 +02001686 do { \
Victor Stinnerd3f08822012-05-29 12:57:52 +02001687 /* pout[0] through pout[size-2] contribute exactly \
1688 _PyLong_DECIMAL_SHIFT digits each */ \
1689 for (i=0; i < size - 1; i++) { \
1690 rem = pout[i]; \
1691 for (j = 0; j < _PyLong_DECIMAL_SHIFT; j++) { \
1692 *--p = '0' + rem % 10; \
1693 rem /= 10; \
1694 } \
1695 } \
1696 /* pout[size-1]: always produce at least one decimal digit */ \
1697 rem = pout[i]; \
1698 do { \
1699 *--p = '0' + rem % 10; \
1700 rem /= 10; \
1701 } while (rem != 0); \
1702 \
1703 /* and sign */ \
1704 if (negative) \
1705 *--p = '-'; \
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001706 } while (0)
1707
1708#define WRITE_UNICODE_DIGITS(TYPE) \
1709 do { \
1710 if (writer) \
1711 p = (TYPE*)PyUnicode_DATA(writer->buffer) + writer->pos + strlen; \
1712 else \
1713 p = (TYPE*)PyUnicode_DATA(str) + strlen; \
1714 \
1715 WRITE_DIGITS(p); \
Victor Stinnerd3f08822012-05-29 12:57:52 +02001716 \
1717 /* check we've counted correctly */ \
1718 if (writer) \
1719 assert(p == ((TYPE*)PyUnicode_DATA(writer->buffer) + writer->pos)); \
1720 else \
1721 assert(p == (TYPE*)PyUnicode_DATA(str)); \
1722 } while (0)
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001723
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001724 /* fill the string right-to-left */
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001725 if (bytes_writer) {
1726 char *p = *bytes_str + strlen;
1727 WRITE_DIGITS(p);
1728 assert(p == *bytes_str);
1729 }
1730 else if (kind == PyUnicode_1BYTE_KIND) {
Victor Stinnerd3f08822012-05-29 12:57:52 +02001731 Py_UCS1 *p;
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001732 WRITE_UNICODE_DIGITS(Py_UCS1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001733 }
Victor Stinnerd3f08822012-05-29 12:57:52 +02001734 else if (kind == PyUnicode_2BYTE_KIND) {
1735 Py_UCS2 *p;
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001736 WRITE_UNICODE_DIGITS(Py_UCS2);
Victor Stinnerd3f08822012-05-29 12:57:52 +02001737 }
1738 else {
Victor Stinnerd3f08822012-05-29 12:57:52 +02001739 Py_UCS4 *p;
Victor Stinnere577ab32012-05-29 18:51:10 +02001740 assert (kind == PyUnicode_4BYTE_KIND);
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001741 WRITE_UNICODE_DIGITS(Py_UCS4);
Victor Stinnerd3f08822012-05-29 12:57:52 +02001742 }
1743#undef WRITE_DIGITS
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001744#undef WRITE_UNICODE_DIGITS
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001745
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001746 Py_DECREF(scratch);
Victor Stinnerd3f08822012-05-29 12:57:52 +02001747 if (writer) {
1748 writer->pos += strlen;
1749 }
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001750 else if (bytes_writer) {
1751 (*bytes_str) += strlen;
1752 }
Victor Stinnerd3f08822012-05-29 12:57:52 +02001753 else {
1754 assert(_PyUnicode_CheckConsistency(str, 1));
1755 *p_output = (PyObject *)str;
1756 }
1757 return 0;
1758}
1759
1760static PyObject *
1761long_to_decimal_string(PyObject *aa)
1762{
1763 PyObject *v;
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001764 if (long_to_decimal_string_internal(aa, &v, NULL, NULL, NULL) == -1)
Victor Stinnerd3f08822012-05-29 12:57:52 +02001765 return NULL;
1766 return v;
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001767}
1768
Serhiy Storchaka95949422013-08-27 19:40:23 +03001769/* Convert an int object to a string, using a given conversion base,
Victor Stinnerd3f08822012-05-29 12:57:52 +02001770 which should be one of 2, 8 or 16. Return a string object.
1771 If base is 2, 8 or 16, add the proper prefix '0b', '0o' or '0x'
1772 if alternate is nonzero. */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001773
Victor Stinnerd3f08822012-05-29 12:57:52 +02001774static int
1775long_format_binary(PyObject *aa, int base, int alternate,
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001776 PyObject **p_output, _PyUnicodeWriter *writer,
1777 _PyBytesWriter *bytes_writer, char **bytes_str)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001778{
Antoine Pitrou9ed5f272013-08-13 20:18:52 +02001779 PyLongObject *a = (PyLongObject *)aa;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001780 PyObject *v;
Mark Dickinsone2846542012-04-20 21:21:24 +01001781 Py_ssize_t sz;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001782 Py_ssize_t size_a;
Victor Stinnerd3f08822012-05-29 12:57:52 +02001783 enum PyUnicode_Kind kind;
Mark Dickinsone2846542012-04-20 21:21:24 +01001784 int negative;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001785 int bits;
Guido van Rossume32e0141992-01-19 16:31:05 +00001786
Victor Stinnerd3f08822012-05-29 12:57:52 +02001787 assert(base == 2 || base == 8 || base == 16);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001788 if (a == NULL || !PyLong_Check(a)) {
1789 PyErr_BadInternalCall();
Victor Stinnerd3f08822012-05-29 12:57:52 +02001790 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001791 }
Victor Stinner45e8e2f2014-05-14 17:24:35 +02001792 size_a = Py_ABS(Py_SIZE(a));
Mark Dickinsone2846542012-04-20 21:21:24 +01001793 negative = Py_SIZE(a) < 0;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001794
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001795 /* Compute a rough upper bound for the length of the string */
1796 switch (base) {
1797 case 16:
1798 bits = 4;
1799 break;
1800 case 8:
1801 bits = 3;
1802 break;
1803 case 2:
1804 bits = 1;
1805 break;
1806 default:
1807 assert(0); /* shouldn't ever get here */
1808 bits = 0; /* to silence gcc warning */
1809 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00001810
Mark Dickinsone2846542012-04-20 21:21:24 +01001811 /* Compute exact length 'sz' of output string. */
1812 if (size_a == 0) {
Victor Stinnerd3f08822012-05-29 12:57:52 +02001813 sz = 1;
Mark Dickinsone2846542012-04-20 21:21:24 +01001814 }
1815 else {
1816 Py_ssize_t size_a_in_bits;
1817 /* Ensure overflow doesn't occur during computation of sz. */
1818 if (size_a > (PY_SSIZE_T_MAX - 3) / PyLong_SHIFT) {
1819 PyErr_SetString(PyExc_OverflowError,
Mark Dickinson02515f72013-08-03 12:08:22 +01001820 "int too large to format");
Victor Stinnerd3f08822012-05-29 12:57:52 +02001821 return -1;
Mark Dickinsone2846542012-04-20 21:21:24 +01001822 }
1823 size_a_in_bits = (size_a - 1) * PyLong_SHIFT +
1824 bits_in_digit(a->ob_digit[size_a - 1]);
Victor Stinnerd3f08822012-05-29 12:57:52 +02001825 /* Allow 1 character for a '-' sign. */
1826 sz = negative + (size_a_in_bits + (bits - 1)) / bits;
1827 }
1828 if (alternate) {
1829 /* 2 characters for prefix */
1830 sz += 2;
Mark Dickinsone2846542012-04-20 21:21:24 +01001831 }
1832
Victor Stinnerd3f08822012-05-29 12:57:52 +02001833 if (writer) {
1834 if (_PyUnicodeWriter_Prepare(writer, sz, 'x') == -1)
1835 return -1;
1836 kind = writer->kind;
1837 v = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001838 }
Victor Stinner199c9a62015-10-14 09:47:23 +02001839 else if (bytes_writer) {
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001840 *bytes_str = _PyBytesWriter_Prepare(bytes_writer, *bytes_str, sz);
1841 if (*bytes_str == NULL)
1842 return -1;
1843 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001844 else {
Victor Stinnerd3f08822012-05-29 12:57:52 +02001845 v = PyUnicode_New(sz, 'x');
1846 if (v == NULL)
1847 return -1;
1848 kind = PyUnicode_KIND(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001849 }
Mark Dickinson8accd6b2009-09-17 19:39:12 +00001850
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001851#define WRITE_DIGITS(p) \
Victor Stinnerd3f08822012-05-29 12:57:52 +02001852 do { \
Victor Stinnerd3f08822012-05-29 12:57:52 +02001853 if (size_a == 0) { \
1854 *--p = '0'; \
1855 } \
1856 else { \
1857 /* JRH: special case for power-of-2 bases */ \
1858 twodigits accum = 0; \
1859 int accumbits = 0; /* # of bits in accum */ \
1860 Py_ssize_t i; \
1861 for (i = 0; i < size_a; ++i) { \
1862 accum |= (twodigits)a->ob_digit[i] << accumbits; \
1863 accumbits += PyLong_SHIFT; \
1864 assert(accumbits >= bits); \
1865 do { \
1866 char cdigit; \
1867 cdigit = (char)(accum & (base - 1)); \
1868 cdigit += (cdigit < 10) ? '0' : 'a'-10; \
1869 *--p = cdigit; \
1870 accumbits -= bits; \
1871 accum >>= bits; \
1872 } while (i < size_a-1 ? accumbits >= bits : accum > 0); \
1873 } \
1874 } \
1875 \
1876 if (alternate) { \
1877 if (base == 16) \
1878 *--p = 'x'; \
1879 else if (base == 8) \
1880 *--p = 'o'; \
1881 else /* (base == 2) */ \
1882 *--p = 'b'; \
1883 *--p = '0'; \
1884 } \
1885 if (negative) \
1886 *--p = '-'; \
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001887 } while (0)
1888
1889#define WRITE_UNICODE_DIGITS(TYPE) \
1890 do { \
1891 if (writer) \
1892 p = (TYPE*)PyUnicode_DATA(writer->buffer) + writer->pos + sz; \
1893 else \
1894 p = (TYPE*)PyUnicode_DATA(v) + sz; \
1895 \
1896 WRITE_DIGITS(p); \
1897 \
Victor Stinnerd3f08822012-05-29 12:57:52 +02001898 if (writer) \
1899 assert(p == ((TYPE*)PyUnicode_DATA(writer->buffer) + writer->pos)); \
1900 else \
1901 assert(p == (TYPE*)PyUnicode_DATA(v)); \
1902 } while (0)
1903
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001904 if (bytes_writer) {
1905 char *p = *bytes_str + sz;
1906 WRITE_DIGITS(p);
1907 assert(p == *bytes_str);
1908 }
1909 else if (kind == PyUnicode_1BYTE_KIND) {
Victor Stinnerd3f08822012-05-29 12:57:52 +02001910 Py_UCS1 *p;
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001911 WRITE_UNICODE_DIGITS(Py_UCS1);
Victor Stinnerd3f08822012-05-29 12:57:52 +02001912 }
1913 else if (kind == PyUnicode_2BYTE_KIND) {
1914 Py_UCS2 *p;
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001915 WRITE_UNICODE_DIGITS(Py_UCS2);
Victor Stinnerd3f08822012-05-29 12:57:52 +02001916 }
1917 else {
Victor Stinnerd3f08822012-05-29 12:57:52 +02001918 Py_UCS4 *p;
Victor Stinnere577ab32012-05-29 18:51:10 +02001919 assert (kind == PyUnicode_4BYTE_KIND);
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001920 WRITE_UNICODE_DIGITS(Py_UCS4);
Victor Stinnerd3f08822012-05-29 12:57:52 +02001921 }
1922#undef WRITE_DIGITS
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001923#undef WRITE_UNICODE_DIGITS
Victor Stinnerd3f08822012-05-29 12:57:52 +02001924
1925 if (writer) {
1926 writer->pos += sz;
1927 }
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001928 else if (bytes_writer) {
1929 (*bytes_str) += sz;
1930 }
Victor Stinnerd3f08822012-05-29 12:57:52 +02001931 else {
1932 assert(_PyUnicode_CheckConsistency(v, 1));
1933 *p_output = v;
1934 }
1935 return 0;
1936}
1937
1938PyObject *
1939_PyLong_Format(PyObject *obj, int base)
1940{
1941 PyObject *str;
1942 int err;
1943 if (base == 10)
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001944 err = long_to_decimal_string_internal(obj, &str, NULL, NULL, NULL);
Victor Stinnerd3f08822012-05-29 12:57:52 +02001945 else
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001946 err = long_format_binary(obj, base, 1, &str, NULL, NULL, NULL);
Victor Stinnerd3f08822012-05-29 12:57:52 +02001947 if (err == -1)
1948 return NULL;
1949 return str;
1950}
1951
1952int
1953_PyLong_FormatWriter(_PyUnicodeWriter *writer,
1954 PyObject *obj,
1955 int base, int alternate)
1956{
1957 if (base == 10)
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001958 return long_to_decimal_string_internal(obj, NULL, writer,
1959 NULL, NULL);
Victor Stinnerd3f08822012-05-29 12:57:52 +02001960 else
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001961 return long_format_binary(obj, base, alternate, NULL, writer,
1962 NULL, NULL);
1963}
1964
1965char*
1966_PyLong_FormatBytesWriter(_PyBytesWriter *writer, char *str,
1967 PyObject *obj,
1968 int base, int alternate)
1969{
1970 char *str2;
1971 int res;
1972 str2 = str;
1973 if (base == 10)
1974 res = long_to_decimal_string_internal(obj, NULL, NULL,
1975 writer, &str2);
1976 else
1977 res = long_format_binary(obj, base, alternate, NULL, NULL,
1978 writer, &str2);
1979 if (res < 0)
1980 return NULL;
1981 assert(str2 != NULL);
1982 return str2;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001983}
1984
Thomas Wouters477c8d52006-05-27 19:21:47 +00001985/* Table of digit values for 8-bit string -> integer conversion.
1986 * '0' maps to 0, ..., '9' maps to 9.
1987 * 'a' and 'A' map to 10, ..., 'z' and 'Z' map to 35.
1988 * All other indices map to 37.
1989 * Note that when converting a base B string, a char c is a legitimate
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00001990 * base B digit iff _PyLong_DigitValue[Py_CHARPyLong_MASK(c)] < B.
Thomas Wouters477c8d52006-05-27 19:21:47 +00001991 */
Raymond Hettinger35631532009-01-09 03:58:09 +00001992unsigned char _PyLong_DigitValue[256] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001993 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1994 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1995 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1996 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 37, 37, 37, 37, 37, 37,
1997 37, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1998 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 37, 37, 37, 37, 37,
1999 37, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
2000 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 37, 37, 37, 37, 37,
2001 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
2002 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
2003 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
2004 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
2005 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
2006 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
2007 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
2008 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
Thomas Wouters477c8d52006-05-27 19:21:47 +00002009};
2010
2011/* *str points to the first digit in a string of base `base` digits. base
Tim Petersbf2674b2003-02-02 07:51:32 +00002012 * is a power of 2 (2, 4, 8, 16, or 32). *str is set to point to the first
Serhiy Storchaka95949422013-08-27 19:40:23 +03002013 * non-digit (which may be *str!). A normalized int is returned.
Tim Petersbf2674b2003-02-02 07:51:32 +00002014 * The point to this routine is that it takes time linear in the number of
2015 * string characters.
2016 */
2017static PyLongObject *
Serhiy Storchakac6792272013-10-19 21:03:34 +03002018long_from_binary_base(const char **str, int base)
Tim Petersbf2674b2003-02-02 07:51:32 +00002019{
Serhiy Storchakac6792272013-10-19 21:03:34 +03002020 const char *p = *str;
2021 const char *start = p;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002022 int bits_per_char;
2023 Py_ssize_t n;
2024 PyLongObject *z;
2025 twodigits accum;
2026 int bits_in_accum;
2027 digit *pdigit;
Tim Petersbf2674b2003-02-02 07:51:32 +00002028
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002029 assert(base >= 2 && base <= 32 && (base & (base - 1)) == 0);
2030 n = base;
2031 for (bits_per_char = -1; n; ++bits_per_char)
2032 n >>= 1;
2033 /* n <- total # of bits needed, while setting p to end-of-string */
2034 while (_PyLong_DigitValue[Py_CHARMASK(*p)] < base)
2035 ++p;
2036 *str = p;
2037 /* n <- # of Python digits needed, = ceiling(n/PyLong_SHIFT). */
2038 n = (p - start) * bits_per_char + PyLong_SHIFT - 1;
2039 if (n / bits_per_char < p - start) {
2040 PyErr_SetString(PyExc_ValueError,
2041 "int string too large to convert");
2042 return NULL;
2043 }
2044 n = n / PyLong_SHIFT;
2045 z = _PyLong_New(n);
2046 if (z == NULL)
2047 return NULL;
Serhiy Storchaka95949422013-08-27 19:40:23 +03002048 /* Read string from right, and fill in int from left; i.e.,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002049 * from least to most significant in both.
2050 */
2051 accum = 0;
2052 bits_in_accum = 0;
2053 pdigit = z->ob_digit;
2054 while (--p >= start) {
2055 int k = (int)_PyLong_DigitValue[Py_CHARMASK(*p)];
2056 assert(k >= 0 && k < base);
2057 accum |= (twodigits)k << bits_in_accum;
2058 bits_in_accum += bits_per_char;
2059 if (bits_in_accum >= PyLong_SHIFT) {
2060 *pdigit++ = (digit)(accum & PyLong_MASK);
2061 assert(pdigit - z->ob_digit <= n);
2062 accum >>= PyLong_SHIFT;
2063 bits_in_accum -= PyLong_SHIFT;
2064 assert(bits_in_accum < PyLong_SHIFT);
2065 }
2066 }
2067 if (bits_in_accum) {
2068 assert(bits_in_accum <= PyLong_SHIFT);
2069 *pdigit++ = (digit)accum;
2070 assert(pdigit - z->ob_digit <= n);
2071 }
2072 while (pdigit - z->ob_digit < n)
2073 *pdigit++ = 0;
2074 return long_normalize(z);
Tim Petersbf2674b2003-02-02 07:51:32 +00002075}
2076
Serhiy Storchaka95949422013-08-27 19:40:23 +03002077/* Parses an int from a bytestring. Leading and trailing whitespace will be
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03002078 * ignored.
2079 *
2080 * If successful, a PyLong object will be returned and 'pend' will be pointing
2081 * to the first unused byte unless it's NULL.
2082 *
2083 * If unsuccessful, NULL will be returned.
2084 */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002085PyObject *
Serhiy Storchakac6792272013-10-19 21:03:34 +03002086PyLong_FromString(const char *str, char **pend, int base)
Guido van Rossumeb1fafc1994-08-29 12:47:19 +00002087{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002088 int sign = 1, error_if_nonzero = 0;
Serhiy Storchakac6792272013-10-19 21:03:34 +03002089 const char *start, *orig_str = str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002090 PyLongObject *z = NULL;
2091 PyObject *strobj;
2092 Py_ssize_t slen;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002093
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002094 if ((base != 0 && base < 2) || base > 36) {
2095 PyErr_SetString(PyExc_ValueError,
2096 "int() arg 2 must be >= 2 and <= 36");
2097 return NULL;
2098 }
Antoine Pitrou4de74572013-02-09 23:11:27 +01002099 while (*str != '\0' && Py_ISSPACE(Py_CHARMASK(*str)))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002100 str++;
2101 if (*str == '+')
2102 ++str;
2103 else if (*str == '-') {
2104 ++str;
2105 sign = -1;
2106 }
2107 if (base == 0) {
2108 if (str[0] != '0')
2109 base = 10;
2110 else if (str[1] == 'x' || str[1] == 'X')
2111 base = 16;
2112 else if (str[1] == 'o' || str[1] == 'O')
2113 base = 8;
2114 else if (str[1] == 'b' || str[1] == 'B')
2115 base = 2;
2116 else {
2117 /* "old" (C-style) octal literal, now invalid.
2118 it might still be zero though */
2119 error_if_nonzero = 1;
2120 base = 10;
2121 }
2122 }
2123 if (str[0] == '0' &&
2124 ((base == 16 && (str[1] == 'x' || str[1] == 'X')) ||
2125 (base == 8 && (str[1] == 'o' || str[1] == 'O')) ||
2126 (base == 2 && (str[1] == 'b' || str[1] == 'B'))))
2127 str += 2;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002128
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002129 start = str;
2130 if ((base & (base - 1)) == 0)
2131 z = long_from_binary_base(&str, base);
2132 else {
Thomas Wouters477c8d52006-05-27 19:21:47 +00002133/***
2134Binary bases can be converted in time linear in the number of digits, because
2135Python's representation base is binary. Other bases (including decimal!) use
2136the simple quadratic-time algorithm below, complicated by some speed tricks.
Tim Peters5af4e6c2002-08-12 02:31:19 +00002137
Thomas Wouters477c8d52006-05-27 19:21:47 +00002138First some math: the largest integer that can be expressed in N base-B digits
2139is B**N-1. Consequently, if we have an N-digit input in base B, the worst-
2140case number of Python digits needed to hold it is the smallest integer n s.t.
2141
2142 BASE**n-1 >= B**N-1 [or, adding 1 to both sides]
2143 BASE**n >= B**N [taking logs to base BASE]
2144 n >= log(B**N)/log(BASE) = N * log(B)/log(BASE)
2145
2146The static array log_base_BASE[base] == log(base)/log(BASE) so we can compute
Serhiy Storchaka95949422013-08-27 19:40:23 +03002147this quickly. A Python int with that much space is reserved near the start,
Thomas Wouters477c8d52006-05-27 19:21:47 +00002148and the result is computed into it.
2149
2150The input string is actually treated as being in base base**i (i.e., i digits
2151are processed at a time), where two more static arrays hold:
2152
2153 convwidth_base[base] = the largest integer i such that base**i <= BASE
2154 convmultmax_base[base] = base ** convwidth_base[base]
2155
2156The first of these is the largest i such that i consecutive input digits
2157must fit in a single Python digit. The second is effectively the input
2158base we're really using.
2159
2160Viewing the input as a sequence <c0, c1, ..., c_n-1> of digits in base
2161convmultmax_base[base], the result is "simply"
2162
2163 (((c0*B + c1)*B + c2)*B + c3)*B + ... ))) + c_n-1
2164
2165where B = convmultmax_base[base].
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002166
2167Error analysis: as above, the number of Python digits `n` needed is worst-
2168case
2169
2170 n >= N * log(B)/log(BASE)
2171
2172where `N` is the number of input digits in base `B`. This is computed via
2173
2174 size_z = (Py_ssize_t)((scan - str) * log_base_BASE[base]) + 1;
2175
2176below. Two numeric concerns are how much space this can waste, and whether
2177the computed result can be too small. To be concrete, assume BASE = 2**15,
2178which is the default (and it's unlikely anyone changes that).
2179
2180Waste isn't a problem: provided the first input digit isn't 0, the difference
2181between the worst-case input with N digits and the smallest input with N
2182digits is about a factor of B, but B is small compared to BASE so at most
2183one allocated Python digit can remain unused on that count. If
2184N*log(B)/log(BASE) is mathematically an exact integer, then truncating that
2185and adding 1 returns a result 1 larger than necessary. However, that can't
2186happen: whenever B is a power of 2, long_from_binary_base() is called
2187instead, and it's impossible for B**i to be an integer power of 2**15 when
2188B is not a power of 2 (i.e., it's impossible for N*log(B)/log(BASE) to be
2189an exact integer when B is not a power of 2, since B**i has a prime factor
2190other than 2 in that case, but (2**15)**j's only prime factor is 2).
2191
2192The computed result can be too small if the true value of N*log(B)/log(BASE)
2193is a little bit larger than an exact integer, but due to roundoff errors (in
2194computing log(B), log(BASE), their quotient, and/or multiplying that by N)
2195yields a numeric result a little less than that integer. Unfortunately, "how
2196close can a transcendental function get to an integer over some range?"
2197questions are generally theoretically intractable. Computer analysis via
2198continued fractions is practical: expand log(B)/log(BASE) via continued
2199fractions, giving a sequence i/j of "the best" rational approximations. Then
2200j*log(B)/log(BASE) is approximately equal to (the integer) i. This shows that
2201we can get very close to being in trouble, but very rarely. For example,
220276573 is a denominator in one of the continued-fraction approximations to
2203log(10)/log(2**15), and indeed:
2204
2205 >>> log(10)/log(2**15)*76573
2206 16958.000000654003
2207
2208is very close to an integer. If we were working with IEEE single-precision,
2209rounding errors could kill us. Finding worst cases in IEEE double-precision
2210requires better-than-double-precision log() functions, and Tim didn't bother.
2211Instead the code checks to see whether the allocated space is enough as each
Serhiy Storchaka95949422013-08-27 19:40:23 +03002212new Python digit is added, and copies the whole thing to a larger int if not.
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002213This should happen extremely rarely, and in fact I don't have a test case
2214that triggers it(!). Instead the code was tested by artificially allocating
2215just 1 digit at the start, so that the copying code was exercised for every
2216digit beyond the first.
Thomas Wouters477c8d52006-05-27 19:21:47 +00002217***/
Antoine Pitrou9ed5f272013-08-13 20:18:52 +02002218 twodigits c; /* current input character */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002219 Py_ssize_t size_z;
2220 int i;
2221 int convwidth;
2222 twodigits convmultmax, convmult;
2223 digit *pz, *pzstop;
Serhiy Storchakac6792272013-10-19 21:03:34 +03002224 const char* scan;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002225
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002226 static double log_base_BASE[37] = {0.0e0,};
2227 static int convwidth_base[37] = {0,};
2228 static twodigits convmultmax_base[37] = {0,};
Thomas Wouters477c8d52006-05-27 19:21:47 +00002229
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002230 if (log_base_BASE[base] == 0.0) {
2231 twodigits convmax = base;
2232 int i = 1;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002233
Mark Dickinson22b20182010-05-10 21:27:53 +00002234 log_base_BASE[base] = (log((double)base) /
2235 log((double)PyLong_BASE));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002236 for (;;) {
2237 twodigits next = convmax * base;
2238 if (next > PyLong_BASE)
2239 break;
2240 convmax = next;
2241 ++i;
2242 }
2243 convmultmax_base[base] = convmax;
2244 assert(i > 0);
2245 convwidth_base[base] = i;
2246 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00002247
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002248 /* Find length of the string of numeric characters. */
2249 scan = str;
2250 while (_PyLong_DigitValue[Py_CHARMASK(*scan)] < base)
2251 ++scan;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002252
Serhiy Storchaka95949422013-08-27 19:40:23 +03002253 /* Create an int object that can contain the largest possible
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002254 * integer with this base and length. Note that there's no
2255 * need to initialize z->ob_digit -- no slot is read up before
2256 * being stored into.
2257 */
2258 size_z = (Py_ssize_t)((scan - str) * log_base_BASE[base]) + 1;
2259 /* Uncomment next line to test exceedingly rare copy code */
2260 /* size_z = 1; */
2261 assert(size_z > 0);
2262 z = _PyLong_New(size_z);
2263 if (z == NULL)
2264 return NULL;
2265 Py_SIZE(z) = 0;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002266
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002267 /* `convwidth` consecutive input digits are treated as a single
2268 * digit in base `convmultmax`.
2269 */
2270 convwidth = convwidth_base[base];
2271 convmultmax = convmultmax_base[base];
Thomas Wouters477c8d52006-05-27 19:21:47 +00002272
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002273 /* Work ;-) */
2274 while (str < scan) {
2275 /* grab up to convwidth digits from the input string */
2276 c = (digit)_PyLong_DigitValue[Py_CHARMASK(*str++)];
2277 for (i = 1; i < convwidth && str != scan; ++i, ++str) {
2278 c = (twodigits)(c * base +
Mark Dickinson22b20182010-05-10 21:27:53 +00002279 (int)_PyLong_DigitValue[Py_CHARMASK(*str)]);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002280 assert(c < PyLong_BASE);
2281 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00002282
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002283 convmult = convmultmax;
2284 /* Calculate the shift only if we couldn't get
2285 * convwidth digits.
2286 */
2287 if (i != convwidth) {
2288 convmult = base;
2289 for ( ; i > 1; --i)
2290 convmult *= base;
2291 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00002292
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002293 /* Multiply z by convmult, and add c. */
2294 pz = z->ob_digit;
2295 pzstop = pz + Py_SIZE(z);
2296 for (; pz < pzstop; ++pz) {
2297 c += (twodigits)*pz * convmult;
2298 *pz = (digit)(c & PyLong_MASK);
2299 c >>= PyLong_SHIFT;
2300 }
2301 /* carry off the current end? */
2302 if (c) {
2303 assert(c < PyLong_BASE);
2304 if (Py_SIZE(z) < size_z) {
2305 *pz = (digit)c;
2306 ++Py_SIZE(z);
2307 }
2308 else {
2309 PyLongObject *tmp;
2310 /* Extremely rare. Get more space. */
2311 assert(Py_SIZE(z) == size_z);
2312 tmp = _PyLong_New(size_z + 1);
2313 if (tmp == NULL) {
2314 Py_DECREF(z);
2315 return NULL;
2316 }
2317 memcpy(tmp->ob_digit,
2318 z->ob_digit,
2319 sizeof(digit) * size_z);
2320 Py_DECREF(z);
2321 z = tmp;
2322 z->ob_digit[size_z] = (digit)c;
2323 ++size_z;
2324 }
2325 }
2326 }
2327 }
2328 if (z == NULL)
2329 return NULL;
2330 if (error_if_nonzero) {
2331 /* reset the base to 0, else the exception message
2332 doesn't make too much sense */
2333 base = 0;
2334 if (Py_SIZE(z) != 0)
2335 goto onError;
2336 /* there might still be other problems, therefore base
2337 remains zero here for the same reason */
2338 }
2339 if (str == start)
2340 goto onError;
2341 if (sign < 0)
2342 Py_SIZE(z) = -(Py_SIZE(z));
Antoine Pitrou4de74572013-02-09 23:11:27 +01002343 while (*str && Py_ISSPACE(Py_CHARMASK(*str)))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002344 str++;
2345 if (*str != '\0')
2346 goto onError;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002347 long_normalize(z);
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03002348 z = maybe_small_long(z);
2349 if (z == NULL)
2350 return NULL;
2351 if (pend != NULL)
Serhiy Storchakac6792272013-10-19 21:03:34 +03002352 *pend = (char *)str;
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03002353 return (PyObject *) z;
Guido van Rossum9e896b32000-04-05 20:11:21 +00002354
Mark Dickinson22b20182010-05-10 21:27:53 +00002355 onError:
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03002356 if (pend != NULL)
Serhiy Storchakac6792272013-10-19 21:03:34 +03002357 *pend = (char *)str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002358 Py_XDECREF(z);
2359 slen = strlen(orig_str) < 200 ? strlen(orig_str) : 200;
2360 strobj = PyUnicode_FromStringAndSize(orig_str, slen);
2361 if (strobj == NULL)
2362 return NULL;
2363 PyErr_Format(PyExc_ValueError,
Serhiy Storchaka579ddc22013-08-03 21:14:05 +03002364 "invalid literal for int() with base %d: %.200R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002365 base, strobj);
2366 Py_DECREF(strobj);
2367 return NULL;
Guido van Rossum9e896b32000-04-05 20:11:21 +00002368}
2369
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03002370/* Since PyLong_FromString doesn't have a length parameter,
2371 * check here for possible NULs in the string.
2372 *
2373 * Reports an invalid literal as a bytes object.
2374 */
2375PyObject *
2376_PyLong_FromBytes(const char *s, Py_ssize_t len, int base)
2377{
2378 PyObject *result, *strobj;
2379 char *end = NULL;
2380
Serhiy Storchaka20b39b22014-09-28 11:27:24 +03002381 result = PyLong_FromString(s, &end, base);
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03002382 if (end == NULL || (result != NULL && end == s + len))
2383 return result;
2384 Py_XDECREF(result);
2385 strobj = PyBytes_FromStringAndSize(s, Py_MIN(len, 200));
2386 if (strobj != NULL) {
2387 PyErr_Format(PyExc_ValueError,
Serhiy Storchaka579ddc22013-08-03 21:14:05 +03002388 "invalid literal for int() with base %d: %.200R",
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03002389 base, strobj);
2390 Py_DECREF(strobj);
2391 }
2392 return NULL;
2393}
2394
Guido van Rossum9e896b32000-04-05 20:11:21 +00002395PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00002396PyLong_FromUnicode(Py_UNICODE *u, Py_ssize_t length, int base)
Guido van Rossum9e896b32000-04-05 20:11:21 +00002397{
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002398 PyObject *v, *unicode = PyUnicode_FromUnicode(u, length);
2399 if (unicode == NULL)
2400 return NULL;
2401 v = PyLong_FromUnicodeObject(unicode, base);
2402 Py_DECREF(unicode);
2403 return v;
2404}
2405
2406PyObject *
2407PyLong_FromUnicodeObject(PyObject *u, int base)
2408{
Serhiy Storchaka579ddc22013-08-03 21:14:05 +03002409 PyObject *result, *asciidig;
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03002410 char *buffer, *end = NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002411 Py_ssize_t buflen;
Guido van Rossum9e896b32000-04-05 20:11:21 +00002412
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002413 asciidig = _PyUnicode_TransformDecimalAndSpaceToASCII(u);
Alexander Belopolsky942af5a2010-12-04 03:38:46 +00002414 if (asciidig == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002415 return NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002416 buffer = PyUnicode_AsUTF8AndSize(asciidig, &buflen);
Alexander Belopolsky942af5a2010-12-04 03:38:46 +00002417 if (buffer == NULL) {
2418 Py_DECREF(asciidig);
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03002419 if (!PyErr_ExceptionMatches(PyExc_UnicodeEncodeError))
2420 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002421 }
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03002422 else {
2423 result = PyLong_FromString(buffer, &end, base);
2424 if (end == NULL || (result != NULL && end == buffer + buflen)) {
2425 Py_DECREF(asciidig);
2426 return result;
2427 }
2428 Py_DECREF(asciidig);
2429 Py_XDECREF(result);
Alexander Belopolsky942af5a2010-12-04 03:38:46 +00002430 }
Serhiy Storchaka579ddc22013-08-03 21:14:05 +03002431 PyErr_Format(PyExc_ValueError,
2432 "invalid literal for int() with base %d: %.200R",
2433 base, u);
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03002434 return NULL;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002435}
2436
Tim Peters9f688bf2000-07-07 15:53:28 +00002437/* forward */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002438static PyLongObject *x_divrem
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002439 (PyLongObject *, PyLongObject *, PyLongObject **);
Guido van Rossumb43daf72007-08-01 18:08:08 +00002440static PyObject *long_long(PyObject *v);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002441
Serhiy Storchaka95949422013-08-27 19:40:23 +03002442/* Int division with remainder, top-level routine */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002443
Guido van Rossume32e0141992-01-19 16:31:05 +00002444static int
Tim Peters9f688bf2000-07-07 15:53:28 +00002445long_divrem(PyLongObject *a, PyLongObject *b,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002446 PyLongObject **pdiv, PyLongObject **prem)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002447{
Victor Stinner45e8e2f2014-05-14 17:24:35 +02002448 Py_ssize_t size_a = Py_ABS(Py_SIZE(a)), size_b = Py_ABS(Py_SIZE(b));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002449 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002450
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002451 if (size_b == 0) {
2452 PyErr_SetString(PyExc_ZeroDivisionError,
2453 "integer division or modulo by zero");
2454 return -1;
2455 }
2456 if (size_a < size_b ||
2457 (size_a == size_b &&
2458 a->ob_digit[size_a-1] < b->ob_digit[size_b-1])) {
2459 /* |a| < |b|. */
2460 *pdiv = (PyLongObject*)PyLong_FromLong(0);
2461 if (*pdiv == NULL)
2462 return -1;
2463 Py_INCREF(a);
2464 *prem = (PyLongObject *) a;
2465 return 0;
2466 }
2467 if (size_b == 1) {
2468 digit rem = 0;
2469 z = divrem1(a, b->ob_digit[0], &rem);
2470 if (z == NULL)
2471 return -1;
2472 *prem = (PyLongObject *) PyLong_FromLong((long)rem);
2473 if (*prem == NULL) {
2474 Py_DECREF(z);
2475 return -1;
2476 }
2477 }
2478 else {
2479 z = x_divrem(a, b, prem);
2480 if (z == NULL)
2481 return -1;
2482 }
2483 /* Set the signs.
2484 The quotient z has the sign of a*b;
2485 the remainder r has the sign of a,
2486 so a = b*z + r. */
Victor Stinner8aed6f12013-07-17 22:31:17 +02002487 if ((Py_SIZE(a) < 0) != (Py_SIZE(b) < 0)) {
2488 _PyLong_Negate(&z);
2489 if (z == NULL) {
2490 Py_CLEAR(*prem);
2491 return -1;
2492 }
2493 }
2494 if (Py_SIZE(a) < 0 && Py_SIZE(*prem) != 0) {
2495 _PyLong_Negate(prem);
2496 if (*prem == NULL) {
2497 Py_DECREF(z);
2498 Py_CLEAR(*prem);
2499 return -1;
2500 }
2501 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002502 *pdiv = maybe_small_long(z);
2503 return 0;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002504}
2505
Serhiy Storchaka95949422013-08-27 19:40:23 +03002506/* Unsigned int division with remainder -- the algorithm. The arguments v1
Victor Stinner45e8e2f2014-05-14 17:24:35 +02002507 and w1 should satisfy 2 <= Py_ABS(Py_SIZE(w1)) <= Py_ABS(Py_SIZE(v1)). */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002508
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002509static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00002510x_divrem(PyLongObject *v1, PyLongObject *w1, PyLongObject **prem)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002511{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002512 PyLongObject *v, *w, *a;
2513 Py_ssize_t i, k, size_v, size_w;
2514 int d;
2515 digit wm1, wm2, carry, q, r, vtop, *v0, *vk, *w0, *ak;
2516 twodigits vv;
2517 sdigit zhi;
2518 stwodigits z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002519
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002520 /* We follow Knuth [The Art of Computer Programming, Vol. 2 (3rd
2521 edn.), section 4.3.1, Algorithm D], except that we don't explicitly
2522 handle the special case when the initial estimate q for a quotient
2523 digit is >= PyLong_BASE: the max value for q is PyLong_BASE+1, and
2524 that won't overflow a digit. */
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002525
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002526 /* allocate space; w will also be used to hold the final remainder */
Victor Stinner45e8e2f2014-05-14 17:24:35 +02002527 size_v = Py_ABS(Py_SIZE(v1));
2528 size_w = Py_ABS(Py_SIZE(w1));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002529 assert(size_v >= size_w && size_w >= 2); /* Assert checks by div() */
2530 v = _PyLong_New(size_v+1);
2531 if (v == NULL) {
2532 *prem = NULL;
2533 return NULL;
2534 }
2535 w = _PyLong_New(size_w);
2536 if (w == NULL) {
2537 Py_DECREF(v);
2538 *prem = NULL;
2539 return NULL;
2540 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002541
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002542 /* normalize: shift w1 left so that its top digit is >= PyLong_BASE/2.
2543 shift v1 left by the same amount. Results go into w and v. */
2544 d = PyLong_SHIFT - bits_in_digit(w1->ob_digit[size_w-1]);
2545 carry = v_lshift(w->ob_digit, w1->ob_digit, size_w, d);
2546 assert(carry == 0);
2547 carry = v_lshift(v->ob_digit, v1->ob_digit, size_v, d);
2548 if (carry != 0 || v->ob_digit[size_v-1] >= w->ob_digit[size_w-1]) {
2549 v->ob_digit[size_v] = carry;
2550 size_v++;
2551 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002552
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002553 /* Now v->ob_digit[size_v-1] < w->ob_digit[size_w-1], so quotient has
2554 at most (and usually exactly) k = size_v - size_w digits. */
2555 k = size_v - size_w;
2556 assert(k >= 0);
2557 a = _PyLong_New(k);
2558 if (a == NULL) {
2559 Py_DECREF(w);
2560 Py_DECREF(v);
2561 *prem = NULL;
2562 return NULL;
2563 }
2564 v0 = v->ob_digit;
2565 w0 = w->ob_digit;
2566 wm1 = w0[size_w-1];
2567 wm2 = w0[size_w-2];
2568 for (vk = v0+k, ak = a->ob_digit + k; vk-- > v0;) {
2569 /* inner loop: divide vk[0:size_w+1] by w0[0:size_w], giving
2570 single-digit quotient q, remainder in vk[0:size_w]. */
Tim Peters5af4e6c2002-08-12 02:31:19 +00002571
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002572 SIGCHECK({
Mark Dickinson22b20182010-05-10 21:27:53 +00002573 Py_DECREF(a);
2574 Py_DECREF(w);
2575 Py_DECREF(v);
2576 *prem = NULL;
2577 return NULL;
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00002578 });
Tim Peters5af4e6c2002-08-12 02:31:19 +00002579
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002580 /* estimate quotient digit q; may overestimate by 1 (rare) */
2581 vtop = vk[size_w];
2582 assert(vtop <= wm1);
2583 vv = ((twodigits)vtop << PyLong_SHIFT) | vk[size_w-1];
2584 q = (digit)(vv / wm1);
2585 r = (digit)(vv - (twodigits)wm1 * q); /* r = vv % wm1 */
2586 while ((twodigits)wm2 * q > (((twodigits)r << PyLong_SHIFT)
2587 | vk[size_w-2])) {
2588 --q;
2589 r += wm1;
2590 if (r >= PyLong_BASE)
2591 break;
2592 }
2593 assert(q <= PyLong_BASE);
Tim Peters5af4e6c2002-08-12 02:31:19 +00002594
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002595 /* subtract q*w0[0:size_w] from vk[0:size_w+1] */
2596 zhi = 0;
2597 for (i = 0; i < size_w; ++i) {
2598 /* invariants: -PyLong_BASE <= -q <= zhi <= 0;
2599 -PyLong_BASE * q <= z < PyLong_BASE */
2600 z = (sdigit)vk[i] + zhi -
2601 (stwodigits)q * (stwodigits)w0[i];
2602 vk[i] = (digit)z & PyLong_MASK;
2603 zhi = (sdigit)Py_ARITHMETIC_RIGHT_SHIFT(stwodigits,
Mark Dickinson22b20182010-05-10 21:27:53 +00002604 z, PyLong_SHIFT);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002605 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002606
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002607 /* add w back if q was too large (this branch taken rarely) */
2608 assert((sdigit)vtop + zhi == -1 || (sdigit)vtop + zhi == 0);
2609 if ((sdigit)vtop + zhi < 0) {
2610 carry = 0;
2611 for (i = 0; i < size_w; ++i) {
2612 carry += vk[i] + w0[i];
2613 vk[i] = carry & PyLong_MASK;
2614 carry >>= PyLong_SHIFT;
2615 }
2616 --q;
2617 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002618
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002619 /* store quotient digit */
2620 assert(q < PyLong_BASE);
2621 *--ak = q;
2622 }
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002623
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002624 /* unshift remainder; we reuse w to store the result */
2625 carry = v_rshift(w0, v0, size_w, d);
2626 assert(carry==0);
2627 Py_DECREF(v);
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002628
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002629 *prem = long_normalize(w);
2630 return long_normalize(a);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002631}
2632
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002633/* For a nonzero PyLong a, express a in the form x * 2**e, with 0.5 <=
2634 abs(x) < 1.0 and e >= 0; return x and put e in *e. Here x is
2635 rounded to DBL_MANT_DIG significant bits using round-half-to-even.
2636 If a == 0, return 0.0 and set *e = 0. If the resulting exponent
2637 e is larger than PY_SSIZE_T_MAX, raise OverflowError and return
2638 -1.0. */
2639
2640/* attempt to define 2.0**DBL_MANT_DIG as a compile-time constant */
2641#if DBL_MANT_DIG == 53
2642#define EXP2_DBL_MANT_DIG 9007199254740992.0
2643#else
2644#define EXP2_DBL_MANT_DIG (ldexp(1.0, DBL_MANT_DIG))
2645#endif
2646
2647double
2648_PyLong_Frexp(PyLongObject *a, Py_ssize_t *e)
2649{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002650 Py_ssize_t a_size, a_bits, shift_digits, shift_bits, x_size;
2651 /* See below for why x_digits is always large enough. */
2652 digit rem, x_digits[2 + (DBL_MANT_DIG + 1) / PyLong_SHIFT];
2653 double dx;
2654 /* Correction term for round-half-to-even rounding. For a digit x,
2655 "x + half_even_correction[x & 7]" gives x rounded to the nearest
2656 multiple of 4, rounding ties to a multiple of 8. */
2657 static const int half_even_correction[8] = {0, -1, -2, 1, 0, -1, 2, 1};
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002658
Victor Stinner45e8e2f2014-05-14 17:24:35 +02002659 a_size = Py_ABS(Py_SIZE(a));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002660 if (a_size == 0) {
2661 /* Special case for 0: significand 0.0, exponent 0. */
2662 *e = 0;
2663 return 0.0;
2664 }
2665 a_bits = bits_in_digit(a->ob_digit[a_size-1]);
2666 /* The following is an overflow-free version of the check
2667 "if ((a_size - 1) * PyLong_SHIFT + a_bits > PY_SSIZE_T_MAX) ..." */
2668 if (a_size >= (PY_SSIZE_T_MAX - 1) / PyLong_SHIFT + 1 &&
2669 (a_size > (PY_SSIZE_T_MAX - 1) / PyLong_SHIFT + 1 ||
2670 a_bits > (PY_SSIZE_T_MAX - 1) % PyLong_SHIFT + 1))
Mark Dickinson22b20182010-05-10 21:27:53 +00002671 goto overflow;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002672 a_bits = (a_size - 1) * PyLong_SHIFT + a_bits;
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002673
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002674 /* Shift the first DBL_MANT_DIG + 2 bits of a into x_digits[0:x_size]
2675 (shifting left if a_bits <= DBL_MANT_DIG + 2).
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002676
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002677 Number of digits needed for result: write // for floor division.
2678 Then if shifting left, we end up using
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002679
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002680 1 + a_size + (DBL_MANT_DIG + 2 - a_bits) // PyLong_SHIFT
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002681
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002682 digits. If shifting right, we use
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002683
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002684 a_size - (a_bits - DBL_MANT_DIG - 2) // PyLong_SHIFT
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002685
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002686 digits. Using a_size = 1 + (a_bits - 1) // PyLong_SHIFT along with
2687 the inequalities
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002688
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002689 m // PyLong_SHIFT + n // PyLong_SHIFT <= (m + n) // PyLong_SHIFT
2690 m // PyLong_SHIFT - n // PyLong_SHIFT <=
2691 1 + (m - n - 1) // PyLong_SHIFT,
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002692
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002693 valid for any integers m and n, we find that x_size satisfies
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002694
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002695 x_size <= 2 + (DBL_MANT_DIG + 1) // PyLong_SHIFT
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002696
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002697 in both cases.
2698 */
2699 if (a_bits <= DBL_MANT_DIG + 2) {
2700 shift_digits = (DBL_MANT_DIG + 2 - a_bits) / PyLong_SHIFT;
2701 shift_bits = (DBL_MANT_DIG + 2 - a_bits) % PyLong_SHIFT;
2702 x_size = 0;
2703 while (x_size < shift_digits)
2704 x_digits[x_size++] = 0;
2705 rem = v_lshift(x_digits + x_size, a->ob_digit, a_size,
2706 (int)shift_bits);
2707 x_size += a_size;
2708 x_digits[x_size++] = rem;
2709 }
2710 else {
2711 shift_digits = (a_bits - DBL_MANT_DIG - 2) / PyLong_SHIFT;
2712 shift_bits = (a_bits - DBL_MANT_DIG - 2) % PyLong_SHIFT;
2713 rem = v_rshift(x_digits, a->ob_digit + shift_digits,
2714 a_size - shift_digits, (int)shift_bits);
2715 x_size = a_size - shift_digits;
2716 /* For correct rounding below, we need the least significant
2717 bit of x to be 'sticky' for this shift: if any of the bits
2718 shifted out was nonzero, we set the least significant bit
2719 of x. */
2720 if (rem)
2721 x_digits[0] |= 1;
2722 else
2723 while (shift_digits > 0)
2724 if (a->ob_digit[--shift_digits]) {
2725 x_digits[0] |= 1;
2726 break;
2727 }
2728 }
Victor Stinner63941882011-09-29 00:42:28 +02002729 assert(1 <= x_size && x_size <= (Py_ssize_t)Py_ARRAY_LENGTH(x_digits));
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002730
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002731 /* Round, and convert to double. */
2732 x_digits[0] += half_even_correction[x_digits[0] & 7];
2733 dx = x_digits[--x_size];
2734 while (x_size > 0)
2735 dx = dx * PyLong_BASE + x_digits[--x_size];
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002736
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002737 /* Rescale; make correction if result is 1.0. */
2738 dx /= 4.0 * EXP2_DBL_MANT_DIG;
2739 if (dx == 1.0) {
2740 if (a_bits == PY_SSIZE_T_MAX)
2741 goto overflow;
2742 dx = 0.5;
2743 a_bits += 1;
2744 }
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002745
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002746 *e = a_bits;
2747 return Py_SIZE(a) < 0 ? -dx : dx;
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002748
2749 overflow:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002750 /* exponent > PY_SSIZE_T_MAX */
2751 PyErr_SetString(PyExc_OverflowError,
2752 "huge integer: number of bits overflows a Py_ssize_t");
2753 *e = 0;
2754 return -1.0;
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002755}
2756
Serhiy Storchaka95949422013-08-27 19:40:23 +03002757/* Get a C double from an int object. Rounds to the nearest double,
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002758 using the round-half-to-even rule in the case of a tie. */
2759
2760double
2761PyLong_AsDouble(PyObject *v)
2762{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002763 Py_ssize_t exponent;
2764 double x;
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002765
Nadeem Vawda3d5881e2011-09-07 21:40:26 +02002766 if (v == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002767 PyErr_BadInternalCall();
2768 return -1.0;
2769 }
Nadeem Vawda3d5881e2011-09-07 21:40:26 +02002770 if (!PyLong_Check(v)) {
2771 PyErr_SetString(PyExc_TypeError, "an integer is required");
2772 return -1.0;
2773 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002774 x = _PyLong_Frexp((PyLongObject *)v, &exponent);
2775 if ((x == -1.0 && PyErr_Occurred()) || exponent > DBL_MAX_EXP) {
2776 PyErr_SetString(PyExc_OverflowError,
Mark Dickinson02515f72013-08-03 12:08:22 +01002777 "int too large to convert to float");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002778 return -1.0;
2779 }
2780 return ldexp(x, (int)exponent);
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002781}
2782
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002783/* Methods */
2784
2785static void
Tim Peters9f688bf2000-07-07 15:53:28 +00002786long_dealloc(PyObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002787{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002788 Py_TYPE(v)->tp_free(v);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002789}
2790
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002791static int
Tim Peters9f688bf2000-07-07 15:53:28 +00002792long_compare(PyLongObject *a, PyLongObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002793{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002794 Py_ssize_t sign;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002795
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002796 if (Py_SIZE(a) != Py_SIZE(b)) {
2797 sign = Py_SIZE(a) - Py_SIZE(b);
2798 }
2799 else {
Victor Stinner45e8e2f2014-05-14 17:24:35 +02002800 Py_ssize_t i = Py_ABS(Py_SIZE(a));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002801 while (--i >= 0 && a->ob_digit[i] == b->ob_digit[i])
2802 ;
2803 if (i < 0)
2804 sign = 0;
2805 else {
2806 sign = (sdigit)a->ob_digit[i] - (sdigit)b->ob_digit[i];
2807 if (Py_SIZE(a) < 0)
2808 sign = -sign;
2809 }
2810 }
2811 return sign < 0 ? -1 : sign > 0 ? 1 : 0;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002812}
2813
Antoine Pitrou51f3ef92008-12-20 13:14:23 +00002814#define TEST_COND(cond) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002815 ((cond) ? Py_True : Py_False)
Antoine Pitrou51f3ef92008-12-20 13:14:23 +00002816
Guido van Rossum47b9ff62006-08-24 00:41:19 +00002817static PyObject *
2818long_richcompare(PyObject *self, PyObject *other, int op)
2819{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002820 int result;
2821 PyObject *v;
2822 CHECK_BINOP(self, other);
2823 if (self == other)
2824 result = 0;
2825 else
2826 result = long_compare((PyLongObject*)self, (PyLongObject*)other);
2827 /* Convert the return value to a Boolean */
2828 switch (op) {
2829 case Py_EQ:
2830 v = TEST_COND(result == 0);
2831 break;
2832 case Py_NE:
2833 v = TEST_COND(result != 0);
2834 break;
2835 case Py_LE:
2836 v = TEST_COND(result <= 0);
2837 break;
2838 case Py_GE:
2839 v = TEST_COND(result >= 0);
2840 break;
2841 case Py_LT:
2842 v = TEST_COND(result == -1);
2843 break;
2844 case Py_GT:
2845 v = TEST_COND(result == 1);
2846 break;
2847 default:
2848 PyErr_BadArgument();
2849 return NULL;
2850 }
2851 Py_INCREF(v);
2852 return v;
Guido van Rossum47b9ff62006-08-24 00:41:19 +00002853}
2854
Benjamin Peterson8f67d082010-10-17 20:54:53 +00002855static Py_hash_t
Tim Peters9f688bf2000-07-07 15:53:28 +00002856long_hash(PyLongObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00002857{
Benjamin Peterson8035bc52010-10-23 16:20:50 +00002858 Py_uhash_t x;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002859 Py_ssize_t i;
2860 int sign;
Guido van Rossum9bfef441993-03-29 10:43:31 +00002861
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002862 i = Py_SIZE(v);
2863 switch(i) {
2864 case -1: return v->ob_digit[0]==1 ? -2 : -(sdigit)v->ob_digit[0];
2865 case 0: return 0;
2866 case 1: return v->ob_digit[0];
2867 }
2868 sign = 1;
2869 x = 0;
2870 if (i < 0) {
2871 sign = -1;
2872 i = -(i);
2873 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002874 while (--i >= 0) {
Mark Dickinsondc787d22010-05-23 13:33:13 +00002875 /* Here x is a quantity in the range [0, _PyHASH_MODULUS); we
2876 want to compute x * 2**PyLong_SHIFT + v->ob_digit[i] modulo
2877 _PyHASH_MODULUS.
2878
2879 The computation of x * 2**PyLong_SHIFT % _PyHASH_MODULUS
2880 amounts to a rotation of the bits of x. To see this, write
2881
2882 x * 2**PyLong_SHIFT = y * 2**_PyHASH_BITS + z
2883
2884 where y = x >> (_PyHASH_BITS - PyLong_SHIFT) gives the top
2885 PyLong_SHIFT bits of x (those that are shifted out of the
2886 original _PyHASH_BITS bits, and z = (x << PyLong_SHIFT) &
2887 _PyHASH_MODULUS gives the bottom _PyHASH_BITS - PyLong_SHIFT
2888 bits of x, shifted up. Then since 2**_PyHASH_BITS is
2889 congruent to 1 modulo _PyHASH_MODULUS, y*2**_PyHASH_BITS is
2890 congruent to y modulo _PyHASH_MODULUS. So
2891
2892 x * 2**PyLong_SHIFT = y + z (mod _PyHASH_MODULUS).
2893
2894 The right-hand side is just the result of rotating the
2895 _PyHASH_BITS bits of x left by PyLong_SHIFT places; since
2896 not all _PyHASH_BITS bits of x are 1s, the same is true
2897 after rotation, so 0 <= y+z < _PyHASH_MODULUS and y + z is
2898 the reduction of x*2**PyLong_SHIFT modulo
2899 _PyHASH_MODULUS. */
2900 x = ((x << PyLong_SHIFT) & _PyHASH_MODULUS) |
2901 (x >> (_PyHASH_BITS - PyLong_SHIFT));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002902 x += v->ob_digit[i];
Mark Dickinsondc787d22010-05-23 13:33:13 +00002903 if (x >= _PyHASH_MODULUS)
2904 x -= _PyHASH_MODULUS;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002905 }
2906 x = x * sign;
Benjamin Peterson8035bc52010-10-23 16:20:50 +00002907 if (x == (Py_uhash_t)-1)
2908 x = (Py_uhash_t)-2;
Benjamin Peterson8f67d082010-10-17 20:54:53 +00002909 return (Py_hash_t)x;
Guido van Rossum9bfef441993-03-29 10:43:31 +00002910}
2911
2912
Serhiy Storchaka95949422013-08-27 19:40:23 +03002913/* Add the absolute values of two integers. */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002914
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002915static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00002916x_add(PyLongObject *a, PyLongObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002917{
Victor Stinner45e8e2f2014-05-14 17:24:35 +02002918 Py_ssize_t size_a = Py_ABS(Py_SIZE(a)), size_b = Py_ABS(Py_SIZE(b));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002919 PyLongObject *z;
2920 Py_ssize_t i;
2921 digit carry = 0;
Tim Peters69c2de32001-09-11 22:31:33 +00002922
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002923 /* Ensure a is the larger of the two: */
2924 if (size_a < size_b) {
2925 { PyLongObject *temp = a; a = b; b = temp; }
2926 { Py_ssize_t size_temp = size_a;
Mark Dickinson22b20182010-05-10 21:27:53 +00002927 size_a = size_b;
2928 size_b = size_temp; }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002929 }
2930 z = _PyLong_New(size_a+1);
2931 if (z == NULL)
2932 return NULL;
2933 for (i = 0; i < size_b; ++i) {
2934 carry += a->ob_digit[i] + b->ob_digit[i];
2935 z->ob_digit[i] = carry & PyLong_MASK;
2936 carry >>= PyLong_SHIFT;
2937 }
2938 for (; i < size_a; ++i) {
2939 carry += a->ob_digit[i];
2940 z->ob_digit[i] = carry & PyLong_MASK;
2941 carry >>= PyLong_SHIFT;
2942 }
2943 z->ob_digit[i] = carry;
2944 return long_normalize(z);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002945}
2946
2947/* Subtract the absolute values of two integers. */
2948
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002949static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00002950x_sub(PyLongObject *a, PyLongObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002951{
Victor Stinner45e8e2f2014-05-14 17:24:35 +02002952 Py_ssize_t size_a = Py_ABS(Py_SIZE(a)), size_b = Py_ABS(Py_SIZE(b));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002953 PyLongObject *z;
2954 Py_ssize_t i;
2955 int sign = 1;
2956 digit borrow = 0;
Tim Peters69c2de32001-09-11 22:31:33 +00002957
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002958 /* Ensure a is the larger of the two: */
2959 if (size_a < size_b) {
2960 sign = -1;
2961 { PyLongObject *temp = a; a = b; b = temp; }
2962 { Py_ssize_t size_temp = size_a;
Mark Dickinson22b20182010-05-10 21:27:53 +00002963 size_a = size_b;
2964 size_b = size_temp; }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002965 }
2966 else if (size_a == size_b) {
2967 /* Find highest digit where a and b differ: */
2968 i = size_a;
2969 while (--i >= 0 && a->ob_digit[i] == b->ob_digit[i])
2970 ;
2971 if (i < 0)
2972 return (PyLongObject *)PyLong_FromLong(0);
2973 if (a->ob_digit[i] < b->ob_digit[i]) {
2974 sign = -1;
2975 { PyLongObject *temp = a; a = b; b = temp; }
2976 }
2977 size_a = size_b = i+1;
2978 }
2979 z = _PyLong_New(size_a);
2980 if (z == NULL)
2981 return NULL;
2982 for (i = 0; i < size_b; ++i) {
2983 /* The following assumes unsigned arithmetic
2984 works module 2**N for some N>PyLong_SHIFT. */
2985 borrow = a->ob_digit[i] - b->ob_digit[i] - borrow;
2986 z->ob_digit[i] = borrow & PyLong_MASK;
2987 borrow >>= PyLong_SHIFT;
2988 borrow &= 1; /* Keep only one sign bit */
2989 }
2990 for (; i < size_a; ++i) {
2991 borrow = a->ob_digit[i] - borrow;
2992 z->ob_digit[i] = borrow & PyLong_MASK;
2993 borrow >>= PyLong_SHIFT;
2994 borrow &= 1; /* Keep only one sign bit */
2995 }
2996 assert(borrow == 0);
Victor Stinner8aed6f12013-07-17 22:31:17 +02002997 if (sign < 0) {
2998 _PyLong_Negate(&z);
2999 if (z == NULL)
3000 return NULL;
3001 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003002 return long_normalize(z);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003003}
3004
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003005static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003006long_add(PyLongObject *a, PyLongObject *b)
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003007{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003008 PyLongObject *z;
Tim Peters69c2de32001-09-11 22:31:33 +00003009
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003010 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003011
Victor Stinner45e8e2f2014-05-14 17:24:35 +02003012 if (Py_ABS(Py_SIZE(a)) <= 1 && Py_ABS(Py_SIZE(b)) <= 1) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003013 PyObject *result = PyLong_FromLong(MEDIUM_VALUE(a) +
3014 MEDIUM_VALUE(b));
3015 return result;
3016 }
3017 if (Py_SIZE(a) < 0) {
3018 if (Py_SIZE(b) < 0) {
3019 z = x_add(a, b);
3020 if (z != NULL && Py_SIZE(z) != 0)
3021 Py_SIZE(z) = -(Py_SIZE(z));
3022 }
3023 else
3024 z = x_sub(b, a);
3025 }
3026 else {
3027 if (Py_SIZE(b) < 0)
3028 z = x_sub(a, b);
3029 else
3030 z = x_add(a, b);
3031 }
3032 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003033}
3034
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003035static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003036long_sub(PyLongObject *a, PyLongObject *b)
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003037{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003038 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003039
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003040 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003041
Victor Stinner45e8e2f2014-05-14 17:24:35 +02003042 if (Py_ABS(Py_SIZE(a)) <= 1 && Py_ABS(Py_SIZE(b)) <= 1) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003043 PyObject* r;
3044 r = PyLong_FromLong(MEDIUM_VALUE(a)-MEDIUM_VALUE(b));
3045 return r;
3046 }
3047 if (Py_SIZE(a) < 0) {
3048 if (Py_SIZE(b) < 0)
3049 z = x_sub(a, b);
3050 else
3051 z = x_add(a, b);
3052 if (z != NULL && Py_SIZE(z) != 0)
3053 Py_SIZE(z) = -(Py_SIZE(z));
3054 }
3055 else {
3056 if (Py_SIZE(b) < 0)
3057 z = x_add(a, b);
3058 else
3059 z = x_sub(a, b);
3060 }
3061 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003062}
3063
Tim Peters5af4e6c2002-08-12 02:31:19 +00003064/* Grade school multiplication, ignoring the signs.
3065 * Returns the absolute value of the product, or NULL if error.
3066 */
3067static PyLongObject *
3068x_mul(PyLongObject *a, PyLongObject *b)
Neil Schemenauerba872e22001-01-04 01:46:03 +00003069{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003070 PyLongObject *z;
Victor Stinner45e8e2f2014-05-14 17:24:35 +02003071 Py_ssize_t size_a = Py_ABS(Py_SIZE(a));
3072 Py_ssize_t size_b = Py_ABS(Py_SIZE(b));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003073 Py_ssize_t i;
Neil Schemenauerba872e22001-01-04 01:46:03 +00003074
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003075 z = _PyLong_New(size_a + size_b);
3076 if (z == NULL)
3077 return NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003078
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003079 memset(z->ob_digit, 0, Py_SIZE(z) * sizeof(digit));
3080 if (a == b) {
3081 /* Efficient squaring per HAC, Algorithm 14.16:
3082 * http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf
3083 * Gives slightly less than a 2x speedup when a == b,
3084 * via exploiting that each entry in the multiplication
3085 * pyramid appears twice (except for the size_a squares).
3086 */
3087 for (i = 0; i < size_a; ++i) {
3088 twodigits carry;
3089 twodigits f = a->ob_digit[i];
3090 digit *pz = z->ob_digit + (i << 1);
3091 digit *pa = a->ob_digit + i + 1;
3092 digit *paend = a->ob_digit + size_a;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003093
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003094 SIGCHECK({
Mark Dickinson22b20182010-05-10 21:27:53 +00003095 Py_DECREF(z);
3096 return NULL;
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00003097 });
Tim Peters0973b992004-08-29 22:16:50 +00003098
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003099 carry = *pz + f * f;
3100 *pz++ = (digit)(carry & PyLong_MASK);
3101 carry >>= PyLong_SHIFT;
3102 assert(carry <= PyLong_MASK);
Tim Peters0973b992004-08-29 22:16:50 +00003103
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003104 /* Now f is added in twice in each column of the
3105 * pyramid it appears. Same as adding f<<1 once.
3106 */
3107 f <<= 1;
3108 while (pa < paend) {
3109 carry += *pz + *pa++ * f;
3110 *pz++ = (digit)(carry & PyLong_MASK);
3111 carry >>= PyLong_SHIFT;
3112 assert(carry <= (PyLong_MASK << 1));
3113 }
3114 if (carry) {
3115 carry += *pz;
3116 *pz++ = (digit)(carry & PyLong_MASK);
3117 carry >>= PyLong_SHIFT;
3118 }
3119 if (carry)
3120 *pz += (digit)(carry & PyLong_MASK);
3121 assert((carry >> PyLong_SHIFT) == 0);
3122 }
3123 }
Serhiy Storchaka95949422013-08-27 19:40:23 +03003124 else { /* a is not the same as b -- gradeschool int mult */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003125 for (i = 0; i < size_a; ++i) {
3126 twodigits carry = 0;
3127 twodigits f = a->ob_digit[i];
3128 digit *pz = z->ob_digit + i;
3129 digit *pb = b->ob_digit;
3130 digit *pbend = b->ob_digit + size_b;
Tim Peters0973b992004-08-29 22:16:50 +00003131
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003132 SIGCHECK({
Mark Dickinson22b20182010-05-10 21:27:53 +00003133 Py_DECREF(z);
3134 return NULL;
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00003135 });
Tim Peters0973b992004-08-29 22:16:50 +00003136
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003137 while (pb < pbend) {
3138 carry += *pz + *pb++ * f;
3139 *pz++ = (digit)(carry & PyLong_MASK);
3140 carry >>= PyLong_SHIFT;
3141 assert(carry <= PyLong_MASK);
3142 }
3143 if (carry)
3144 *pz += (digit)(carry & PyLong_MASK);
3145 assert((carry >> PyLong_SHIFT) == 0);
3146 }
3147 }
3148 return long_normalize(z);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003149}
3150
3151/* A helper for Karatsuba multiplication (k_mul).
Serhiy Storchaka95949422013-08-27 19:40:23 +03003152 Takes an int "n" and an integer "size" representing the place to
Tim Peters5af4e6c2002-08-12 02:31:19 +00003153 split, and sets low and high such that abs(n) == (high << size) + low,
3154 viewing the shift as being by digits. The sign bit is ignored, and
3155 the return values are >= 0.
3156 Returns 0 on success, -1 on failure.
3157*/
3158static int
Mark Dickinson22b20182010-05-10 21:27:53 +00003159kmul_split(PyLongObject *n,
3160 Py_ssize_t size,
3161 PyLongObject **high,
3162 PyLongObject **low)
Tim Peters5af4e6c2002-08-12 02:31:19 +00003163{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003164 PyLongObject *hi, *lo;
3165 Py_ssize_t size_lo, size_hi;
Victor Stinner45e8e2f2014-05-14 17:24:35 +02003166 const Py_ssize_t size_n = Py_ABS(Py_SIZE(n));
Tim Peters5af4e6c2002-08-12 02:31:19 +00003167
Victor Stinner640c35c2013-06-04 23:14:37 +02003168 size_lo = Py_MIN(size_n, size);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003169 size_hi = size_n - size_lo;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003170
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003171 if ((hi = _PyLong_New(size_hi)) == NULL)
3172 return -1;
3173 if ((lo = _PyLong_New(size_lo)) == NULL) {
3174 Py_DECREF(hi);
3175 return -1;
3176 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00003177
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003178 memcpy(lo->ob_digit, n->ob_digit, size_lo * sizeof(digit));
3179 memcpy(hi->ob_digit, n->ob_digit + size_lo, size_hi * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00003180
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003181 *high = long_normalize(hi);
3182 *low = long_normalize(lo);
3183 return 0;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003184}
3185
Tim Peters60004642002-08-12 22:01:34 +00003186static PyLongObject *k_lopsided_mul(PyLongObject *a, PyLongObject *b);
3187
Tim Peters5af4e6c2002-08-12 02:31:19 +00003188/* Karatsuba multiplication. Ignores the input signs, and returns the
3189 * absolute value of the product (or NULL if error).
3190 * See Knuth Vol. 2 Chapter 4.3.3 (Pp. 294-295).
3191 */
3192static PyLongObject *
3193k_mul(PyLongObject *a, PyLongObject *b)
3194{
Victor Stinner45e8e2f2014-05-14 17:24:35 +02003195 Py_ssize_t asize = Py_ABS(Py_SIZE(a));
3196 Py_ssize_t bsize = Py_ABS(Py_SIZE(b));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003197 PyLongObject *ah = NULL;
3198 PyLongObject *al = NULL;
3199 PyLongObject *bh = NULL;
3200 PyLongObject *bl = NULL;
3201 PyLongObject *ret = NULL;
3202 PyLongObject *t1, *t2, *t3;
3203 Py_ssize_t shift; /* the number of digits we split off */
3204 Py_ssize_t i;
Tim Peters738eda72002-08-12 15:08:20 +00003205
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003206 /* (ah*X+al)(bh*X+bl) = ah*bh*X*X + (ah*bl + al*bh)*X + al*bl
3207 * Let k = (ah+al)*(bh+bl) = ah*bl + al*bh + ah*bh + al*bl
3208 * Then the original product is
3209 * ah*bh*X*X + (k - ah*bh - al*bl)*X + al*bl
3210 * By picking X to be a power of 2, "*X" is just shifting, and it's
3211 * been reduced to 3 multiplies on numbers half the size.
3212 */
Tim Peters5af4e6c2002-08-12 02:31:19 +00003213
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003214 /* We want to split based on the larger number; fiddle so that b
3215 * is largest.
3216 */
3217 if (asize > bsize) {
3218 t1 = a;
3219 a = b;
3220 b = t1;
Tim Peters738eda72002-08-12 15:08:20 +00003221
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003222 i = asize;
3223 asize = bsize;
3224 bsize = i;
3225 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00003226
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003227 /* Use gradeschool math when either number is too small. */
3228 i = a == b ? KARATSUBA_SQUARE_CUTOFF : KARATSUBA_CUTOFF;
3229 if (asize <= i) {
3230 if (asize == 0)
3231 return (PyLongObject *)PyLong_FromLong(0);
3232 else
3233 return x_mul(a, b);
3234 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00003235
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003236 /* If a is small compared to b, splitting on b gives a degenerate
3237 * case with ah==0, and Karatsuba may be (even much) less efficient
3238 * than "grade school" then. However, we can still win, by viewing
3239 * b as a string of "big digits", each of width a->ob_size. That
3240 * leads to a sequence of balanced calls to k_mul.
3241 */
3242 if (2 * asize <= bsize)
3243 return k_lopsided_mul(a, b);
Tim Peters60004642002-08-12 22:01:34 +00003244
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003245 /* Split a & b into hi & lo pieces. */
3246 shift = bsize >> 1;
3247 if (kmul_split(a, shift, &ah, &al) < 0) goto fail;
3248 assert(Py_SIZE(ah) > 0); /* the split isn't degenerate */
Tim Petersd6974a52002-08-13 20:37:51 +00003249
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003250 if (a == b) {
3251 bh = ah;
3252 bl = al;
3253 Py_INCREF(bh);
3254 Py_INCREF(bl);
3255 }
3256 else if (kmul_split(b, shift, &bh, &bl) < 0) goto fail;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003257
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003258 /* The plan:
3259 * 1. Allocate result space (asize + bsize digits: that's always
3260 * enough).
3261 * 2. Compute ah*bh, and copy into result at 2*shift.
3262 * 3. Compute al*bl, and copy into result at 0. Note that this
3263 * can't overlap with #2.
3264 * 4. Subtract al*bl from the result, starting at shift. This may
3265 * underflow (borrow out of the high digit), but we don't care:
3266 * we're effectively doing unsigned arithmetic mod
3267 * BASE**(sizea + sizeb), and so long as the *final* result fits,
3268 * borrows and carries out of the high digit can be ignored.
3269 * 5. Subtract ah*bh from the result, starting at shift.
3270 * 6. Compute (ah+al)*(bh+bl), and add it into the result starting
3271 * at shift.
3272 */
Tim Petersd64c1de2002-08-12 17:36:03 +00003273
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003274 /* 1. Allocate result space. */
3275 ret = _PyLong_New(asize + bsize);
3276 if (ret == NULL) goto fail;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003277#ifdef Py_DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003278 /* Fill with trash, to catch reference to uninitialized digits. */
3279 memset(ret->ob_digit, 0xDF, Py_SIZE(ret) * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00003280#endif
Tim Peters44121a62002-08-12 06:17:58 +00003281
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003282 /* 2. t1 <- ah*bh, and copy into high digits of result. */
3283 if ((t1 = k_mul(ah, bh)) == NULL) goto fail;
3284 assert(Py_SIZE(t1) >= 0);
3285 assert(2*shift + Py_SIZE(t1) <= Py_SIZE(ret));
3286 memcpy(ret->ob_digit + 2*shift, t1->ob_digit,
3287 Py_SIZE(t1) * sizeof(digit));
Tim Peters738eda72002-08-12 15:08:20 +00003288
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003289 /* Zero-out the digits higher than the ah*bh copy. */
3290 i = Py_SIZE(ret) - 2*shift - Py_SIZE(t1);
3291 if (i)
3292 memset(ret->ob_digit + 2*shift + Py_SIZE(t1), 0,
3293 i * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00003294
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003295 /* 3. t2 <- al*bl, and copy into the low digits. */
3296 if ((t2 = k_mul(al, bl)) == NULL) {
3297 Py_DECREF(t1);
3298 goto fail;
3299 }
3300 assert(Py_SIZE(t2) >= 0);
3301 assert(Py_SIZE(t2) <= 2*shift); /* no overlap with high digits */
3302 memcpy(ret->ob_digit, t2->ob_digit, Py_SIZE(t2) * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00003303
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003304 /* Zero out remaining digits. */
3305 i = 2*shift - Py_SIZE(t2); /* number of uninitialized digits */
3306 if (i)
3307 memset(ret->ob_digit + Py_SIZE(t2), 0, i * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00003308
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003309 /* 4 & 5. Subtract ah*bh (t1) and al*bl (t2). We do al*bl first
3310 * because it's fresher in cache.
3311 */
3312 i = Py_SIZE(ret) - shift; /* # digits after shift */
3313 (void)v_isub(ret->ob_digit + shift, i, t2->ob_digit, Py_SIZE(t2));
3314 Py_DECREF(t2);
Tim Peters738eda72002-08-12 15:08:20 +00003315
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003316 (void)v_isub(ret->ob_digit + shift, i, t1->ob_digit, Py_SIZE(t1));
3317 Py_DECREF(t1);
Tim Peters738eda72002-08-12 15:08:20 +00003318
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003319 /* 6. t3 <- (ah+al)(bh+bl), and add into result. */
3320 if ((t1 = x_add(ah, al)) == NULL) goto fail;
3321 Py_DECREF(ah);
3322 Py_DECREF(al);
3323 ah = al = NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003324
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003325 if (a == b) {
3326 t2 = t1;
3327 Py_INCREF(t2);
3328 }
3329 else if ((t2 = x_add(bh, bl)) == NULL) {
3330 Py_DECREF(t1);
3331 goto fail;
3332 }
3333 Py_DECREF(bh);
3334 Py_DECREF(bl);
3335 bh = bl = NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003336
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003337 t3 = k_mul(t1, t2);
3338 Py_DECREF(t1);
3339 Py_DECREF(t2);
3340 if (t3 == NULL) goto fail;
3341 assert(Py_SIZE(t3) >= 0);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003342
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003343 /* Add t3. It's not obvious why we can't run out of room here.
3344 * See the (*) comment after this function.
3345 */
3346 (void)v_iadd(ret->ob_digit + shift, i, t3->ob_digit, Py_SIZE(t3));
3347 Py_DECREF(t3);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003348
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003349 return long_normalize(ret);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003350
Mark Dickinson22b20182010-05-10 21:27:53 +00003351 fail:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003352 Py_XDECREF(ret);
3353 Py_XDECREF(ah);
3354 Py_XDECREF(al);
3355 Py_XDECREF(bh);
3356 Py_XDECREF(bl);
3357 return NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003358}
3359
Tim Petersd6974a52002-08-13 20:37:51 +00003360/* (*) Why adding t3 can't "run out of room" above.
3361
Tim Petersab86c2b2002-08-15 20:06:00 +00003362Let f(x) mean the floor of x and c(x) mean the ceiling of x. Some facts
3363to start with:
Tim Petersd6974a52002-08-13 20:37:51 +00003364
Tim Petersab86c2b2002-08-15 20:06:00 +000033651. For any integer i, i = c(i/2) + f(i/2). In particular,
3366 bsize = c(bsize/2) + f(bsize/2).
33672. shift = f(bsize/2)
33683. asize <= bsize
33694. Since we call k_lopsided_mul if asize*2 <= bsize, asize*2 > bsize in this
3370 routine, so asize > bsize/2 >= f(bsize/2) in this routine.
Tim Petersd6974a52002-08-13 20:37:51 +00003371
Tim Petersab86c2b2002-08-15 20:06:00 +00003372We allocated asize + bsize result digits, and add t3 into them at an offset
3373of shift. This leaves asize+bsize-shift allocated digit positions for t3
3374to fit into, = (by #1 and #2) asize + f(bsize/2) + c(bsize/2) - f(bsize/2) =
3375asize + c(bsize/2) available digit positions.
Tim Petersd6974a52002-08-13 20:37:51 +00003376
Tim Petersab86c2b2002-08-15 20:06:00 +00003377bh has c(bsize/2) digits, and bl at most f(size/2) digits. So bh+hl has
3378at most c(bsize/2) digits + 1 bit.
Tim Petersd6974a52002-08-13 20:37:51 +00003379
Tim Petersab86c2b2002-08-15 20:06:00 +00003380If asize == bsize, ah has c(bsize/2) digits, else ah has at most f(bsize/2)
3381digits, and al has at most f(bsize/2) digits in any case. So ah+al has at
3382most (asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 1 bit.
Tim Petersd6974a52002-08-13 20:37:51 +00003383
Tim Petersab86c2b2002-08-15 20:06:00 +00003384The product (ah+al)*(bh+bl) therefore has at most
Tim Petersd6974a52002-08-13 20:37:51 +00003385
Tim Petersab86c2b2002-08-15 20:06:00 +00003386 c(bsize/2) + (asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 2 bits
Tim Petersd6974a52002-08-13 20:37:51 +00003387
Tim Petersab86c2b2002-08-15 20:06:00 +00003388and we have asize + c(bsize/2) available digit positions. We need to show
3389this is always enough. An instance of c(bsize/2) cancels out in both, so
3390the question reduces to whether asize digits is enough to hold
3391(asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 2 bits. If asize < bsize,
3392then we're asking whether asize digits >= f(bsize/2) digits + 2 bits. By #4,
3393asize is at least f(bsize/2)+1 digits, so this in turn reduces to whether 1
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00003394digit is enough to hold 2 bits. This is so since PyLong_SHIFT=15 >= 2. If
Tim Petersab86c2b2002-08-15 20:06:00 +00003395asize == bsize, then we're asking whether bsize digits is enough to hold
Tim Peterse417de02002-08-15 20:10:45 +00003396c(bsize/2) digits + 2 bits, or equivalently (by #1) whether f(bsize/2) digits
3397is enough to hold 2 bits. This is so if bsize >= 2, which holds because
3398bsize >= KARATSUBA_CUTOFF >= 2.
Tim Peters8e966ee2002-08-14 16:36:23 +00003399
Tim Peters48d52c02002-08-14 17:07:32 +00003400Note that since there's always enough room for (ah+al)*(bh+bl), and that's
3401clearly >= each of ah*bh and al*bl, there's always enough room to subtract
3402ah*bh and al*bl too.
Tim Petersd6974a52002-08-13 20:37:51 +00003403*/
3404
Tim Peters60004642002-08-12 22:01:34 +00003405/* b has at least twice the digits of a, and a is big enough that Karatsuba
3406 * would pay off *if* the inputs had balanced sizes. View b as a sequence
3407 * of slices, each with a->ob_size digits, and multiply the slices by a,
3408 * one at a time. This gives k_mul balanced inputs to work with, and is
3409 * also cache-friendly (we compute one double-width slice of the result
Ezio Melotti42da6632011-03-15 05:18:48 +02003410 * at a time, then move on, never backtracking except for the helpful
Tim Peters60004642002-08-12 22:01:34 +00003411 * single-width slice overlap between successive partial sums).
3412 */
3413static PyLongObject *
3414k_lopsided_mul(PyLongObject *a, PyLongObject *b)
3415{
Victor Stinner45e8e2f2014-05-14 17:24:35 +02003416 const Py_ssize_t asize = Py_ABS(Py_SIZE(a));
3417 Py_ssize_t bsize = Py_ABS(Py_SIZE(b));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003418 Py_ssize_t nbdone; /* # of b digits already multiplied */
3419 PyLongObject *ret;
3420 PyLongObject *bslice = NULL;
Tim Peters60004642002-08-12 22:01:34 +00003421
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003422 assert(asize > KARATSUBA_CUTOFF);
3423 assert(2 * asize <= bsize);
Tim Peters60004642002-08-12 22:01:34 +00003424
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003425 /* Allocate result space, and zero it out. */
3426 ret = _PyLong_New(asize + bsize);
3427 if (ret == NULL)
3428 return NULL;
3429 memset(ret->ob_digit, 0, Py_SIZE(ret) * sizeof(digit));
Tim Peters60004642002-08-12 22:01:34 +00003430
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003431 /* Successive slices of b are copied into bslice. */
3432 bslice = _PyLong_New(asize);
3433 if (bslice == NULL)
3434 goto fail;
Tim Peters60004642002-08-12 22:01:34 +00003435
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003436 nbdone = 0;
3437 while (bsize > 0) {
3438 PyLongObject *product;
Victor Stinner640c35c2013-06-04 23:14:37 +02003439 const Py_ssize_t nbtouse = Py_MIN(bsize, asize);
Tim Peters60004642002-08-12 22:01:34 +00003440
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003441 /* Multiply the next slice of b by a. */
3442 memcpy(bslice->ob_digit, b->ob_digit + nbdone,
3443 nbtouse * sizeof(digit));
3444 Py_SIZE(bslice) = nbtouse;
3445 product = k_mul(a, bslice);
3446 if (product == NULL)
3447 goto fail;
Tim Peters60004642002-08-12 22:01:34 +00003448
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003449 /* Add into result. */
3450 (void)v_iadd(ret->ob_digit + nbdone, Py_SIZE(ret) - nbdone,
3451 product->ob_digit, Py_SIZE(product));
3452 Py_DECREF(product);
Tim Peters60004642002-08-12 22:01:34 +00003453
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003454 bsize -= nbtouse;
3455 nbdone += nbtouse;
3456 }
Tim Peters60004642002-08-12 22:01:34 +00003457
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003458 Py_DECREF(bslice);
3459 return long_normalize(ret);
Tim Peters60004642002-08-12 22:01:34 +00003460
Mark Dickinson22b20182010-05-10 21:27:53 +00003461 fail:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003462 Py_DECREF(ret);
3463 Py_XDECREF(bslice);
3464 return NULL;
Tim Peters60004642002-08-12 22:01:34 +00003465}
Tim Peters5af4e6c2002-08-12 02:31:19 +00003466
3467static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003468long_mul(PyLongObject *a, PyLongObject *b)
Tim Peters5af4e6c2002-08-12 02:31:19 +00003469{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003470 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003471
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003472 CHECK_BINOP(a, b);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003473
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003474 /* fast path for single-digit multiplication */
Victor Stinner45e8e2f2014-05-14 17:24:35 +02003475 if (Py_ABS(Py_SIZE(a)) <= 1 && Py_ABS(Py_SIZE(b)) <= 1) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003476 stwodigits v = (stwodigits)(MEDIUM_VALUE(a)) * MEDIUM_VALUE(b);
Mark Dickinsonbd792642009-03-18 20:06:12 +00003477#ifdef HAVE_LONG_LONG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003478 return PyLong_FromLongLong((PY_LONG_LONG)v);
Mark Dickinsonbd792642009-03-18 20:06:12 +00003479#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003480 /* if we don't have long long then we're almost certainly
3481 using 15-bit digits, so v will fit in a long. In the
3482 unlikely event that we're using 30-bit digits on a platform
3483 without long long, a large v will just cause us to fall
3484 through to the general multiplication code below. */
3485 if (v >= LONG_MIN && v <= LONG_MAX)
3486 return PyLong_FromLong((long)v);
Mark Dickinsonbd792642009-03-18 20:06:12 +00003487#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003488 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00003489
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003490 z = k_mul(a, b);
3491 /* Negate if exactly one of the inputs is negative. */
Victor Stinner8aed6f12013-07-17 22:31:17 +02003492 if (((Py_SIZE(a) ^ Py_SIZE(b)) < 0) && z) {
3493 _PyLong_Negate(&z);
3494 if (z == NULL)
3495 return NULL;
3496 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003497 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003498}
3499
Guido van Rossume32e0141992-01-19 16:31:05 +00003500/* The / and % operators are now defined in terms of divmod().
3501 The expression a mod b has the value a - b*floor(a/b).
3502 The long_divrem function gives the remainder after division of
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003503 |a| by |b|, with the sign of a. This is also expressed
3504 as a - b*trunc(a/b), if trunc truncates towards zero.
3505 Some examples:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003506 a b a rem b a mod b
3507 13 10 3 3
3508 -13 10 -3 7
3509 13 -10 3 -7
3510 -13 -10 -3 -3
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003511 So, to get from rem to mod, we have to add b if a and b
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00003512 have different signs. We then subtract one from the 'div'
3513 part of the outcome to keep the invariant intact. */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003514
Tim Peters47e52ee2004-08-30 02:44:38 +00003515/* Compute
3516 * *pdiv, *pmod = divmod(v, w)
3517 * NULL can be passed for pdiv or pmod, in which case that part of
3518 * the result is simply thrown away. The caller owns a reference to
3519 * each of these it requests (does not pass NULL for).
3520 */
Guido van Rossume32e0141992-01-19 16:31:05 +00003521static int
Tim Peters5af4e6c2002-08-12 02:31:19 +00003522l_divmod(PyLongObject *v, PyLongObject *w,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003523 PyLongObject **pdiv, PyLongObject **pmod)
Guido van Rossume32e0141992-01-19 16:31:05 +00003524{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003525 PyLongObject *div, *mod;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003526
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003527 if (long_divrem(v, w, &div, &mod) < 0)
3528 return -1;
3529 if ((Py_SIZE(mod) < 0 && Py_SIZE(w) > 0) ||
3530 (Py_SIZE(mod) > 0 && Py_SIZE(w) < 0)) {
3531 PyLongObject *temp;
3532 PyLongObject *one;
3533 temp = (PyLongObject *) long_add(mod, w);
3534 Py_DECREF(mod);
3535 mod = temp;
3536 if (mod == NULL) {
3537 Py_DECREF(div);
3538 return -1;
3539 }
3540 one = (PyLongObject *) PyLong_FromLong(1L);
3541 if (one == NULL ||
3542 (temp = (PyLongObject *) long_sub(div, one)) == NULL) {
3543 Py_DECREF(mod);
3544 Py_DECREF(div);
3545 Py_XDECREF(one);
3546 return -1;
3547 }
3548 Py_DECREF(one);
3549 Py_DECREF(div);
3550 div = temp;
3551 }
3552 if (pdiv != NULL)
3553 *pdiv = div;
3554 else
3555 Py_DECREF(div);
Tim Peters47e52ee2004-08-30 02:44:38 +00003556
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003557 if (pmod != NULL)
3558 *pmod = mod;
3559 else
3560 Py_DECREF(mod);
Tim Peters47e52ee2004-08-30 02:44:38 +00003561
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003562 return 0;
Guido van Rossume32e0141992-01-19 16:31:05 +00003563}
3564
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003565static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003566long_div(PyObject *a, PyObject *b)
Guido van Rossume32e0141992-01-19 16:31:05 +00003567{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003568 PyLongObject *div;
Neil Schemenauerba872e22001-01-04 01:46:03 +00003569
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003570 CHECK_BINOP(a, b);
3571 if (l_divmod((PyLongObject*)a, (PyLongObject*)b, &div, NULL) < 0)
3572 div = NULL;
3573 return (PyObject *)div;
Guido van Rossume32e0141992-01-19 16:31:05 +00003574}
3575
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003576/* PyLong/PyLong -> float, with correctly rounded result. */
3577
3578#define MANT_DIG_DIGITS (DBL_MANT_DIG / PyLong_SHIFT)
3579#define MANT_DIG_BITS (DBL_MANT_DIG % PyLong_SHIFT)
3580
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003581static PyObject *
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003582long_true_divide(PyObject *v, PyObject *w)
Tim Peters20dab9f2001-09-04 05:31:47 +00003583{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003584 PyLongObject *a, *b, *x;
3585 Py_ssize_t a_size, b_size, shift, extra_bits, diff, x_size, x_bits;
3586 digit mask, low;
3587 int inexact, negate, a_is_small, b_is_small;
3588 double dx, result;
Tim Peterse2a60002001-09-04 06:17:36 +00003589
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003590 CHECK_BINOP(v, w);
3591 a = (PyLongObject *)v;
3592 b = (PyLongObject *)w;
Tim Peterse2a60002001-09-04 06:17:36 +00003593
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003594 /*
3595 Method in a nutshell:
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003596
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003597 0. reduce to case a, b > 0; filter out obvious underflow/overflow
3598 1. choose a suitable integer 'shift'
3599 2. use integer arithmetic to compute x = floor(2**-shift*a/b)
3600 3. adjust x for correct rounding
3601 4. convert x to a double dx with the same value
3602 5. return ldexp(dx, shift).
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003603
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003604 In more detail:
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003605
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003606 0. For any a, a/0 raises ZeroDivisionError; for nonzero b, 0/b
3607 returns either 0.0 or -0.0, depending on the sign of b. For a and
3608 b both nonzero, ignore signs of a and b, and add the sign back in
3609 at the end. Now write a_bits and b_bits for the bit lengths of a
3610 and b respectively (that is, a_bits = 1 + floor(log_2(a)); likewise
3611 for b). Then
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003612
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003613 2**(a_bits - b_bits - 1) < a/b < 2**(a_bits - b_bits + 1).
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003614
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003615 So if a_bits - b_bits > DBL_MAX_EXP then a/b > 2**DBL_MAX_EXP and
3616 so overflows. Similarly, if a_bits - b_bits < DBL_MIN_EXP -
3617 DBL_MANT_DIG - 1 then a/b underflows to 0. With these cases out of
3618 the way, we can assume that
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003619
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003620 DBL_MIN_EXP - DBL_MANT_DIG - 1 <= a_bits - b_bits <= DBL_MAX_EXP.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003621
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003622 1. The integer 'shift' is chosen so that x has the right number of
3623 bits for a double, plus two or three extra bits that will be used
3624 in the rounding decisions. Writing a_bits and b_bits for the
3625 number of significant bits in a and b respectively, a
3626 straightforward formula for shift is:
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003627
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003628 shift = a_bits - b_bits - DBL_MANT_DIG - 2
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003629
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003630 This is fine in the usual case, but if a/b is smaller than the
3631 smallest normal float then it can lead to double rounding on an
3632 IEEE 754 platform, giving incorrectly rounded results. So we
3633 adjust the formula slightly. The actual formula used is:
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003634
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003635 shift = MAX(a_bits - b_bits, DBL_MIN_EXP) - DBL_MANT_DIG - 2
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003636
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003637 2. The quantity x is computed by first shifting a (left -shift bits
3638 if shift <= 0, right shift bits if shift > 0) and then dividing by
3639 b. For both the shift and the division, we keep track of whether
3640 the result is inexact, in a flag 'inexact'; this information is
3641 needed at the rounding stage.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003642
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003643 With the choice of shift above, together with our assumption that
3644 a_bits - b_bits >= DBL_MIN_EXP - DBL_MANT_DIG - 1, it follows
3645 that x >= 1.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003646
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003647 3. Now x * 2**shift <= a/b < (x+1) * 2**shift. We want to replace
3648 this with an exactly representable float of the form
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003649
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003650 round(x/2**extra_bits) * 2**(extra_bits+shift).
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003651
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003652 For float representability, we need x/2**extra_bits <
3653 2**DBL_MANT_DIG and extra_bits + shift >= DBL_MIN_EXP -
3654 DBL_MANT_DIG. This translates to the condition:
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003655
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003656 extra_bits >= MAX(x_bits, DBL_MIN_EXP - shift) - DBL_MANT_DIG
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003657
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003658 To round, we just modify the bottom digit of x in-place; this can
3659 end up giving a digit with value > PyLONG_MASK, but that's not a
3660 problem since digits can hold values up to 2*PyLONG_MASK+1.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003661
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003662 With the original choices for shift above, extra_bits will always
3663 be 2 or 3. Then rounding under the round-half-to-even rule, we
3664 round up iff the most significant of the extra bits is 1, and
3665 either: (a) the computation of x in step 2 had an inexact result,
3666 or (b) at least one other of the extra bits is 1, or (c) the least
3667 significant bit of x (above those to be rounded) is 1.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003668
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003669 4. Conversion to a double is straightforward; all floating-point
3670 operations involved in the conversion are exact, so there's no
3671 danger of rounding errors.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003672
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003673 5. Use ldexp(x, shift) to compute x*2**shift, the final result.
3674 The result will always be exactly representable as a double, except
3675 in the case that it overflows. To avoid dependence on the exact
3676 behaviour of ldexp on overflow, we check for overflow before
3677 applying ldexp. The result of ldexp is adjusted for sign before
3678 returning.
3679 */
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003680
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003681 /* Reduce to case where a and b are both positive. */
Victor Stinner45e8e2f2014-05-14 17:24:35 +02003682 a_size = Py_ABS(Py_SIZE(a));
3683 b_size = Py_ABS(Py_SIZE(b));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003684 negate = (Py_SIZE(a) < 0) ^ (Py_SIZE(b) < 0);
3685 if (b_size == 0) {
3686 PyErr_SetString(PyExc_ZeroDivisionError,
3687 "division by zero");
3688 goto error;
3689 }
3690 if (a_size == 0)
3691 goto underflow_or_zero;
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003692
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003693 /* Fast path for a and b small (exactly representable in a double).
3694 Relies on floating-point division being correctly rounded; results
3695 may be subject to double rounding on x86 machines that operate with
3696 the x87 FPU set to 64-bit precision. */
3697 a_is_small = a_size <= MANT_DIG_DIGITS ||
3698 (a_size == MANT_DIG_DIGITS+1 &&
3699 a->ob_digit[MANT_DIG_DIGITS] >> MANT_DIG_BITS == 0);
3700 b_is_small = b_size <= MANT_DIG_DIGITS ||
3701 (b_size == MANT_DIG_DIGITS+1 &&
3702 b->ob_digit[MANT_DIG_DIGITS] >> MANT_DIG_BITS == 0);
3703 if (a_is_small && b_is_small) {
3704 double da, db;
3705 da = a->ob_digit[--a_size];
3706 while (a_size > 0)
3707 da = da * PyLong_BASE + a->ob_digit[--a_size];
3708 db = b->ob_digit[--b_size];
3709 while (b_size > 0)
3710 db = db * PyLong_BASE + b->ob_digit[--b_size];
3711 result = da / db;
3712 goto success;
3713 }
Tim Peterse2a60002001-09-04 06:17:36 +00003714
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003715 /* Catch obvious cases of underflow and overflow */
3716 diff = a_size - b_size;
3717 if (diff > PY_SSIZE_T_MAX/PyLong_SHIFT - 1)
3718 /* Extreme overflow */
3719 goto overflow;
3720 else if (diff < 1 - PY_SSIZE_T_MAX/PyLong_SHIFT)
3721 /* Extreme underflow */
3722 goto underflow_or_zero;
3723 /* Next line is now safe from overflowing a Py_ssize_t */
3724 diff = diff * PyLong_SHIFT + bits_in_digit(a->ob_digit[a_size - 1]) -
3725 bits_in_digit(b->ob_digit[b_size - 1]);
3726 /* Now diff = a_bits - b_bits. */
3727 if (diff > DBL_MAX_EXP)
3728 goto overflow;
3729 else if (diff < DBL_MIN_EXP - DBL_MANT_DIG - 1)
3730 goto underflow_or_zero;
Tim Peterse2a60002001-09-04 06:17:36 +00003731
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003732 /* Choose value for shift; see comments for step 1 above. */
Victor Stinner640c35c2013-06-04 23:14:37 +02003733 shift = Py_MAX(diff, DBL_MIN_EXP) - DBL_MANT_DIG - 2;
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003734
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003735 inexact = 0;
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003736
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003737 /* x = abs(a * 2**-shift) */
3738 if (shift <= 0) {
3739 Py_ssize_t i, shift_digits = -shift / PyLong_SHIFT;
3740 digit rem;
3741 /* x = a << -shift */
3742 if (a_size >= PY_SSIZE_T_MAX - 1 - shift_digits) {
3743 /* In practice, it's probably impossible to end up
3744 here. Both a and b would have to be enormous,
3745 using close to SIZE_T_MAX bytes of memory each. */
3746 PyErr_SetString(PyExc_OverflowError,
Mark Dickinson22b20182010-05-10 21:27:53 +00003747 "intermediate overflow during division");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003748 goto error;
3749 }
3750 x = _PyLong_New(a_size + shift_digits + 1);
3751 if (x == NULL)
3752 goto error;
3753 for (i = 0; i < shift_digits; i++)
3754 x->ob_digit[i] = 0;
3755 rem = v_lshift(x->ob_digit + shift_digits, a->ob_digit,
3756 a_size, -shift % PyLong_SHIFT);
3757 x->ob_digit[a_size + shift_digits] = rem;
3758 }
3759 else {
3760 Py_ssize_t shift_digits = shift / PyLong_SHIFT;
3761 digit rem;
3762 /* x = a >> shift */
3763 assert(a_size >= shift_digits);
3764 x = _PyLong_New(a_size - shift_digits);
3765 if (x == NULL)
3766 goto error;
3767 rem = v_rshift(x->ob_digit, a->ob_digit + shift_digits,
3768 a_size - shift_digits, shift % PyLong_SHIFT);
3769 /* set inexact if any of the bits shifted out is nonzero */
3770 if (rem)
3771 inexact = 1;
3772 while (!inexact && shift_digits > 0)
3773 if (a->ob_digit[--shift_digits])
3774 inexact = 1;
3775 }
3776 long_normalize(x);
3777 x_size = Py_SIZE(x);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003778
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003779 /* x //= b. If the remainder is nonzero, set inexact. We own the only
3780 reference to x, so it's safe to modify it in-place. */
3781 if (b_size == 1) {
3782 digit rem = inplace_divrem1(x->ob_digit, x->ob_digit, x_size,
3783 b->ob_digit[0]);
3784 long_normalize(x);
3785 if (rem)
3786 inexact = 1;
3787 }
3788 else {
3789 PyLongObject *div, *rem;
3790 div = x_divrem(x, b, &rem);
3791 Py_DECREF(x);
3792 x = div;
3793 if (x == NULL)
3794 goto error;
3795 if (Py_SIZE(rem))
3796 inexact = 1;
3797 Py_DECREF(rem);
3798 }
Victor Stinner45e8e2f2014-05-14 17:24:35 +02003799 x_size = Py_ABS(Py_SIZE(x));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003800 assert(x_size > 0); /* result of division is never zero */
3801 x_bits = (x_size-1)*PyLong_SHIFT+bits_in_digit(x->ob_digit[x_size-1]);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003802
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003803 /* The number of extra bits that have to be rounded away. */
Victor Stinner640c35c2013-06-04 23:14:37 +02003804 extra_bits = Py_MAX(x_bits, DBL_MIN_EXP - shift) - DBL_MANT_DIG;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003805 assert(extra_bits == 2 || extra_bits == 3);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003806
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003807 /* Round by directly modifying the low digit of x. */
3808 mask = (digit)1 << (extra_bits - 1);
3809 low = x->ob_digit[0] | inexact;
3810 if (low & mask && low & (3*mask-1))
3811 low += mask;
3812 x->ob_digit[0] = low & ~(mask-1U);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003813
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003814 /* Convert x to a double dx; the conversion is exact. */
3815 dx = x->ob_digit[--x_size];
3816 while (x_size > 0)
3817 dx = dx * PyLong_BASE + x->ob_digit[--x_size];
3818 Py_DECREF(x);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003819
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003820 /* Check whether ldexp result will overflow a double. */
3821 if (shift + x_bits >= DBL_MAX_EXP &&
3822 (shift + x_bits > DBL_MAX_EXP || dx == ldexp(1.0, (int)x_bits)))
3823 goto overflow;
3824 result = ldexp(dx, (int)shift);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003825
3826 success:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003827 return PyFloat_FromDouble(negate ? -result : result);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003828
3829 underflow_or_zero:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003830 return PyFloat_FromDouble(negate ? -0.0 : 0.0);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003831
3832 overflow:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003833 PyErr_SetString(PyExc_OverflowError,
3834 "integer division result too large for a float");
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003835 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003836 return NULL;
Tim Peters20dab9f2001-09-04 05:31:47 +00003837}
3838
3839static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003840long_mod(PyObject *a, PyObject *b)
Guido van Rossume32e0141992-01-19 16:31:05 +00003841{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003842 PyLongObject *mod;
Neil Schemenauerba872e22001-01-04 01:46:03 +00003843
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003844 CHECK_BINOP(a, b);
3845
3846 if (l_divmod((PyLongObject*)a, (PyLongObject*)b, NULL, &mod) < 0)
3847 mod = NULL;
3848 return (PyObject *)mod;
Guido van Rossume32e0141992-01-19 16:31:05 +00003849}
3850
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003851static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003852long_divmod(PyObject *a, PyObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003853{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003854 PyLongObject *div, *mod;
3855 PyObject *z;
Neil Schemenauerba872e22001-01-04 01:46:03 +00003856
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003857 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003858
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003859 if (l_divmod((PyLongObject*)a, (PyLongObject*)b, &div, &mod) < 0) {
3860 return NULL;
3861 }
3862 z = PyTuple_New(2);
3863 if (z != NULL) {
3864 PyTuple_SetItem(z, 0, (PyObject *) div);
3865 PyTuple_SetItem(z, 1, (PyObject *) mod);
3866 }
3867 else {
3868 Py_DECREF(div);
3869 Py_DECREF(mod);
3870 }
3871 return z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003872}
3873
Tim Peters47e52ee2004-08-30 02:44:38 +00003874/* pow(v, w, x) */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003875static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00003876long_pow(PyObject *v, PyObject *w, PyObject *x)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003877{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003878 PyLongObject *a, *b, *c; /* a,b,c = v,w,x */
3879 int negativeOutput = 0; /* if x<0 return negative output */
Neil Schemenauerba872e22001-01-04 01:46:03 +00003880
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003881 PyLongObject *z = NULL; /* accumulated result */
3882 Py_ssize_t i, j, k; /* counters */
3883 PyLongObject *temp = NULL;
Tim Peters47e52ee2004-08-30 02:44:38 +00003884
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003885 /* 5-ary values. If the exponent is large enough, table is
3886 * precomputed so that table[i] == a**i % c for i in range(32).
3887 */
3888 PyLongObject *table[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3889 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
Tim Peters47e52ee2004-08-30 02:44:38 +00003890
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003891 /* a, b, c = v, w, x */
3892 CHECK_BINOP(v, w);
3893 a = (PyLongObject*)v; Py_INCREF(a);
3894 b = (PyLongObject*)w; Py_INCREF(b);
3895 if (PyLong_Check(x)) {
3896 c = (PyLongObject *)x;
3897 Py_INCREF(x);
3898 }
3899 else if (x == Py_None)
3900 c = NULL;
3901 else {
3902 Py_DECREF(a);
3903 Py_DECREF(b);
Brian Curtindfc80e32011-08-10 20:28:54 -05003904 Py_RETURN_NOTIMPLEMENTED;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003905 }
Tim Peters4c483c42001-09-05 06:24:58 +00003906
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003907 if (Py_SIZE(b) < 0) { /* if exponent is negative */
3908 if (c) {
Mark Dickinson0c346d82014-04-11 14:34:40 -04003909 PyErr_SetString(PyExc_ValueError, "pow() 2nd argument "
Mark Dickinson22b20182010-05-10 21:27:53 +00003910 "cannot be negative when 3rd argument specified");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003911 goto Error;
3912 }
3913 else {
3914 /* else return a float. This works because we know
3915 that this calls float_pow() which converts its
3916 arguments to double. */
3917 Py_DECREF(a);
3918 Py_DECREF(b);
3919 return PyFloat_Type.tp_as_number->nb_power(v, w, x);
3920 }
3921 }
Tim Peters47e52ee2004-08-30 02:44:38 +00003922
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003923 if (c) {
3924 /* if modulus == 0:
3925 raise ValueError() */
3926 if (Py_SIZE(c) == 0) {
3927 PyErr_SetString(PyExc_ValueError,
3928 "pow() 3rd argument cannot be 0");
3929 goto Error;
3930 }
Tim Peters47e52ee2004-08-30 02:44:38 +00003931
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003932 /* if modulus < 0:
3933 negativeOutput = True
3934 modulus = -modulus */
3935 if (Py_SIZE(c) < 0) {
3936 negativeOutput = 1;
3937 temp = (PyLongObject *)_PyLong_Copy(c);
3938 if (temp == NULL)
3939 goto Error;
3940 Py_DECREF(c);
3941 c = temp;
3942 temp = NULL;
Victor Stinner8aed6f12013-07-17 22:31:17 +02003943 _PyLong_Negate(&c);
3944 if (c == NULL)
3945 goto Error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003946 }
Tim Peters47e52ee2004-08-30 02:44:38 +00003947
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003948 /* if modulus == 1:
3949 return 0 */
3950 if ((Py_SIZE(c) == 1) && (c->ob_digit[0] == 1)) {
3951 z = (PyLongObject *)PyLong_FromLong(0L);
3952 goto Done;
3953 }
Tim Peters47e52ee2004-08-30 02:44:38 +00003954
Tim Peters81a93152013-10-05 16:53:52 -05003955 /* Reduce base by modulus in some cases:
3956 1. If base < 0. Forcing the base non-negative makes things easier.
3957 2. If base is obviously larger than the modulus. The "small
3958 exponent" case later can multiply directly by base repeatedly,
3959 while the "large exponent" case multiplies directly by base 31
3960 times. It can be unboundedly faster to multiply by
3961 base % modulus instead.
3962 We could _always_ do this reduction, but l_divmod() isn't cheap,
3963 so we only do it when it buys something. */
3964 if (Py_SIZE(a) < 0 || Py_SIZE(a) > Py_SIZE(c)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003965 if (l_divmod(a, c, NULL, &temp) < 0)
3966 goto Error;
3967 Py_DECREF(a);
3968 a = temp;
3969 temp = NULL;
3970 }
3971 }
Tim Peters47e52ee2004-08-30 02:44:38 +00003972
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003973 /* At this point a, b, and c are guaranteed non-negative UNLESS
3974 c is NULL, in which case a may be negative. */
Tim Peters47e52ee2004-08-30 02:44:38 +00003975
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003976 z = (PyLongObject *)PyLong_FromLong(1L);
3977 if (z == NULL)
3978 goto Error;
Tim Peters47e52ee2004-08-30 02:44:38 +00003979
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003980 /* Perform a modular reduction, X = X % c, but leave X alone if c
3981 * is NULL.
3982 */
3983#define REDUCE(X) \
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00003984 do { \
3985 if (c != NULL) { \
3986 if (l_divmod(X, c, NULL, &temp) < 0) \
3987 goto Error; \
3988 Py_XDECREF(X); \
3989 X = temp; \
3990 temp = NULL; \
3991 } \
3992 } while(0)
Tim Peters47e52ee2004-08-30 02:44:38 +00003993
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003994 /* Multiply two values, then reduce the result:
3995 result = X*Y % c. If c is NULL, skip the mod. */
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00003996#define MULT(X, Y, result) \
3997 do { \
3998 temp = (PyLongObject *)long_mul(X, Y); \
3999 if (temp == NULL) \
4000 goto Error; \
4001 Py_XDECREF(result); \
4002 result = temp; \
4003 temp = NULL; \
4004 REDUCE(result); \
4005 } while(0)
Tim Peters47e52ee2004-08-30 02:44:38 +00004006
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004007 if (Py_SIZE(b) <= FIVEARY_CUTOFF) {
4008 /* Left-to-right binary exponentiation (HAC Algorithm 14.79) */
4009 /* http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf */
4010 for (i = Py_SIZE(b) - 1; i >= 0; --i) {
4011 digit bi = b->ob_digit[i];
Tim Peters47e52ee2004-08-30 02:44:38 +00004012
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004013 for (j = (digit)1 << (PyLong_SHIFT-1); j != 0; j >>= 1) {
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00004014 MULT(z, z, z);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004015 if (bi & j)
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00004016 MULT(z, a, z);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004017 }
4018 }
4019 }
4020 else {
4021 /* Left-to-right 5-ary exponentiation (HAC Algorithm 14.82) */
4022 Py_INCREF(z); /* still holds 1L */
4023 table[0] = z;
4024 for (i = 1; i < 32; ++i)
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00004025 MULT(table[i-1], a, table[i]);
Tim Peters47e52ee2004-08-30 02:44:38 +00004026
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004027 for (i = Py_SIZE(b) - 1; i >= 0; --i) {
4028 const digit bi = b->ob_digit[i];
Tim Peters47e52ee2004-08-30 02:44:38 +00004029
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004030 for (j = PyLong_SHIFT - 5; j >= 0; j -= 5) {
4031 const int index = (bi >> j) & 0x1f;
4032 for (k = 0; k < 5; ++k)
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00004033 MULT(z, z, z);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004034 if (index)
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00004035 MULT(z, table[index], z);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004036 }
4037 }
4038 }
Tim Peters47e52ee2004-08-30 02:44:38 +00004039
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004040 if (negativeOutput && (Py_SIZE(z) != 0)) {
4041 temp = (PyLongObject *)long_sub(z, c);
4042 if (temp == NULL)
4043 goto Error;
4044 Py_DECREF(z);
4045 z = temp;
4046 temp = NULL;
4047 }
4048 goto Done;
Tim Peters47e52ee2004-08-30 02:44:38 +00004049
Mark Dickinson22b20182010-05-10 21:27:53 +00004050 Error:
Victor Stinner8aed6f12013-07-17 22:31:17 +02004051 Py_CLEAR(z);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004052 /* fall through */
Mark Dickinson22b20182010-05-10 21:27:53 +00004053 Done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004054 if (Py_SIZE(b) > FIVEARY_CUTOFF) {
4055 for (i = 0; i < 32; ++i)
4056 Py_XDECREF(table[i]);
4057 }
4058 Py_DECREF(a);
4059 Py_DECREF(b);
4060 Py_XDECREF(c);
4061 Py_XDECREF(temp);
4062 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00004063}
4064
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004065static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00004066long_invert(PyLongObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00004067{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004068 /* Implement ~x as -(x+1) */
4069 PyLongObject *x;
4070 PyLongObject *w;
Victor Stinner45e8e2f2014-05-14 17:24:35 +02004071 if (Py_ABS(Py_SIZE(v)) <=1)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004072 return PyLong_FromLong(-(MEDIUM_VALUE(v)+1));
4073 w = (PyLongObject *)PyLong_FromLong(1L);
4074 if (w == NULL)
4075 return NULL;
4076 x = (PyLongObject *) long_add(v, w);
4077 Py_DECREF(w);
4078 if (x == NULL)
4079 return NULL;
4080 Py_SIZE(x) = -(Py_SIZE(x));
4081 return (PyObject *)maybe_small_long(x);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00004082}
4083
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004084static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00004085long_neg(PyLongObject *v)
Guido van Rossumc6913e71991-11-19 20:26:46 +00004086{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004087 PyLongObject *z;
Victor Stinner45e8e2f2014-05-14 17:24:35 +02004088 if (Py_ABS(Py_SIZE(v)) <= 1)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004089 return PyLong_FromLong(-MEDIUM_VALUE(v));
4090 z = (PyLongObject *)_PyLong_Copy(v);
4091 if (z != NULL)
4092 Py_SIZE(z) = -(Py_SIZE(v));
4093 return (PyObject *)z;
Guido van Rossumc6913e71991-11-19 20:26:46 +00004094}
4095
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004096static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00004097long_abs(PyLongObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00004098{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004099 if (Py_SIZE(v) < 0)
4100 return long_neg(v);
4101 else
4102 return long_long((PyObject *)v);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00004103}
4104
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00004105static int
Jack Diederich4dafcc42006-11-28 19:15:13 +00004106long_bool(PyLongObject *v)
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00004107{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004108 return Py_SIZE(v) != 0;
Guido van Rossumc6913e71991-11-19 20:26:46 +00004109}
4110
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004111static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00004112long_rshift(PyLongObject *a, PyLongObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00004113{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004114 PyLongObject *z = NULL;
4115 Py_ssize_t shiftby, newsize, wordshift, loshift, hishift, i, j;
4116 digit lomask, himask;
Tim Peters5af4e6c2002-08-12 02:31:19 +00004117
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004118 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00004119
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004120 if (Py_SIZE(a) < 0) {
4121 /* Right shifting negative numbers is harder */
4122 PyLongObject *a1, *a2;
4123 a1 = (PyLongObject *) long_invert(a);
4124 if (a1 == NULL)
4125 goto rshift_error;
4126 a2 = (PyLongObject *) long_rshift(a1, b);
4127 Py_DECREF(a1);
4128 if (a2 == NULL)
4129 goto rshift_error;
4130 z = (PyLongObject *) long_invert(a2);
4131 Py_DECREF(a2);
4132 }
4133 else {
4134 shiftby = PyLong_AsSsize_t((PyObject *)b);
4135 if (shiftby == -1L && PyErr_Occurred())
4136 goto rshift_error;
4137 if (shiftby < 0) {
4138 PyErr_SetString(PyExc_ValueError,
4139 "negative shift count");
4140 goto rshift_error;
4141 }
4142 wordshift = shiftby / PyLong_SHIFT;
Victor Stinner45e8e2f2014-05-14 17:24:35 +02004143 newsize = Py_ABS(Py_SIZE(a)) - wordshift;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004144 if (newsize <= 0)
4145 return PyLong_FromLong(0);
4146 loshift = shiftby % PyLong_SHIFT;
4147 hishift = PyLong_SHIFT - loshift;
4148 lomask = ((digit)1 << hishift) - 1;
4149 himask = PyLong_MASK ^ lomask;
4150 z = _PyLong_New(newsize);
4151 if (z == NULL)
4152 goto rshift_error;
4153 if (Py_SIZE(a) < 0)
4154 Py_SIZE(z) = -(Py_SIZE(z));
4155 for (i = 0, j = wordshift; i < newsize; i++, j++) {
4156 z->ob_digit[i] = (a->ob_digit[j] >> loshift) & lomask;
4157 if (i+1 < newsize)
Mark Dickinson22b20182010-05-10 21:27:53 +00004158 z->ob_digit[i] |= (a->ob_digit[j+1] << hishift) & himask;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004159 }
4160 z = long_normalize(z);
4161 }
Mark Dickinson22b20182010-05-10 21:27:53 +00004162 rshift_error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004163 return (PyObject *) maybe_small_long(z);
Neil Schemenauerba872e22001-01-04 01:46:03 +00004164
Guido van Rossumc6913e71991-11-19 20:26:46 +00004165}
4166
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004167static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00004168long_lshift(PyObject *v, PyObject *w)
Guido van Rossumc6913e71991-11-19 20:26:46 +00004169{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004170 /* This version due to Tim Peters */
4171 PyLongObject *a = (PyLongObject*)v;
4172 PyLongObject *b = (PyLongObject*)w;
4173 PyLongObject *z = NULL;
4174 Py_ssize_t shiftby, oldsize, newsize, wordshift, remshift, i, j;
4175 twodigits accum;
Tim Peters5af4e6c2002-08-12 02:31:19 +00004176
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004177 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00004178
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004179 shiftby = PyLong_AsSsize_t((PyObject *)b);
4180 if (shiftby == -1L && PyErr_Occurred())
Victor Stinner8aed6f12013-07-17 22:31:17 +02004181 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004182 if (shiftby < 0) {
4183 PyErr_SetString(PyExc_ValueError, "negative shift count");
Victor Stinner8aed6f12013-07-17 22:31:17 +02004184 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004185 }
4186 /* wordshift, remshift = divmod(shiftby, PyLong_SHIFT) */
4187 wordshift = shiftby / PyLong_SHIFT;
4188 remshift = shiftby - wordshift * PyLong_SHIFT;
Guido van Rossumf2e499b1997-03-16 00:37:59 +00004189
Victor Stinner45e8e2f2014-05-14 17:24:35 +02004190 oldsize = Py_ABS(Py_SIZE(a));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004191 newsize = oldsize + wordshift;
4192 if (remshift)
4193 ++newsize;
4194 z = _PyLong_New(newsize);
4195 if (z == NULL)
Victor Stinner8aed6f12013-07-17 22:31:17 +02004196 return NULL;
4197 if (Py_SIZE(a) < 0) {
4198 assert(Py_REFCNT(z) == 1);
4199 Py_SIZE(z) = -Py_SIZE(z);
4200 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004201 for (i = 0; i < wordshift; i++)
4202 z->ob_digit[i] = 0;
4203 accum = 0;
4204 for (i = wordshift, j = 0; j < oldsize; i++, j++) {
4205 accum |= (twodigits)a->ob_digit[j] << remshift;
4206 z->ob_digit[i] = (digit)(accum & PyLong_MASK);
4207 accum >>= PyLong_SHIFT;
4208 }
4209 if (remshift)
4210 z->ob_digit[newsize-1] = (digit)accum;
4211 else
4212 assert(!accum);
4213 z = long_normalize(z);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004214 return (PyObject *) maybe_small_long(z);
Guido van Rossumc6913e71991-11-19 20:26:46 +00004215}
4216
Mark Dickinson27a87a22009-10-25 20:43:34 +00004217/* Compute two's complement of digit vector a[0:m], writing result to
4218 z[0:m]. The digit vector a need not be normalized, but should not
4219 be entirely zero. a and z may point to the same digit vector. */
4220
4221static void
4222v_complement(digit *z, digit *a, Py_ssize_t m)
4223{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004224 Py_ssize_t i;
4225 digit carry = 1;
4226 for (i = 0; i < m; ++i) {
4227 carry += a[i] ^ PyLong_MASK;
4228 z[i] = carry & PyLong_MASK;
4229 carry >>= PyLong_SHIFT;
4230 }
4231 assert(carry == 0);
Mark Dickinson27a87a22009-10-25 20:43:34 +00004232}
Guido van Rossum4c260ff1992-01-14 18:36:43 +00004233
4234/* Bitwise and/xor/or operations */
4235
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004236static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00004237long_bitwise(PyLongObject *a,
Benjamin Peterson513762f2012-12-26 16:43:33 -06004238 char op, /* '&', '|', '^' */
Mark Dickinson22b20182010-05-10 21:27:53 +00004239 PyLongObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00004240{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004241 int nega, negb, negz;
4242 Py_ssize_t size_a, size_b, size_z, i;
4243 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00004244
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004245 /* Bitwise operations for negative numbers operate as though
4246 on a two's complement representation. So convert arguments
4247 from sign-magnitude to two's complement, and convert the
4248 result back to sign-magnitude at the end. */
Mark Dickinson27a87a22009-10-25 20:43:34 +00004249
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004250 /* If a is negative, replace it by its two's complement. */
Victor Stinner45e8e2f2014-05-14 17:24:35 +02004251 size_a = Py_ABS(Py_SIZE(a));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004252 nega = Py_SIZE(a) < 0;
4253 if (nega) {
4254 z = _PyLong_New(size_a);
4255 if (z == NULL)
4256 return NULL;
4257 v_complement(z->ob_digit, a->ob_digit, size_a);
4258 a = z;
4259 }
4260 else
4261 /* Keep reference count consistent. */
4262 Py_INCREF(a);
Mark Dickinson27a87a22009-10-25 20:43:34 +00004263
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004264 /* Same for b. */
Victor Stinner45e8e2f2014-05-14 17:24:35 +02004265 size_b = Py_ABS(Py_SIZE(b));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004266 negb = Py_SIZE(b) < 0;
4267 if (negb) {
4268 z = _PyLong_New(size_b);
4269 if (z == NULL) {
4270 Py_DECREF(a);
4271 return NULL;
4272 }
4273 v_complement(z->ob_digit, b->ob_digit, size_b);
4274 b = z;
4275 }
4276 else
4277 Py_INCREF(b);
Tim Peters5af4e6c2002-08-12 02:31:19 +00004278
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004279 /* Swap a and b if necessary to ensure size_a >= size_b. */
4280 if (size_a < size_b) {
4281 z = a; a = b; b = z;
4282 size_z = size_a; size_a = size_b; size_b = size_z;
4283 negz = nega; nega = negb; negb = negz;
4284 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00004285
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004286 /* JRH: The original logic here was to allocate the result value (z)
4287 as the longer of the two operands. However, there are some cases
4288 where the result is guaranteed to be shorter than that: AND of two
4289 positives, OR of two negatives: use the shorter number. AND with
4290 mixed signs: use the positive number. OR with mixed signs: use the
4291 negative number.
4292 */
4293 switch (op) {
4294 case '^':
4295 negz = nega ^ negb;
4296 size_z = size_a;
4297 break;
4298 case '&':
4299 negz = nega & negb;
4300 size_z = negb ? size_a : size_b;
4301 break;
4302 case '|':
4303 negz = nega | negb;
4304 size_z = negb ? size_b : size_a;
4305 break;
4306 default:
4307 PyErr_BadArgument();
4308 return NULL;
4309 }
Guido van Rossumbd3a5271998-08-11 15:04:47 +00004310
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004311 /* We allow an extra digit if z is negative, to make sure that
4312 the final two's complement of z doesn't overflow. */
4313 z = _PyLong_New(size_z + negz);
4314 if (z == NULL) {
4315 Py_DECREF(a);
4316 Py_DECREF(b);
4317 return NULL;
4318 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00004319
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004320 /* Compute digits for overlap of a and b. */
4321 switch(op) {
4322 case '&':
4323 for (i = 0; i < size_b; ++i)
4324 z->ob_digit[i] = a->ob_digit[i] & b->ob_digit[i];
4325 break;
4326 case '|':
4327 for (i = 0; i < size_b; ++i)
4328 z->ob_digit[i] = a->ob_digit[i] | b->ob_digit[i];
4329 break;
4330 case '^':
4331 for (i = 0; i < size_b; ++i)
4332 z->ob_digit[i] = a->ob_digit[i] ^ b->ob_digit[i];
4333 break;
4334 default:
4335 PyErr_BadArgument();
4336 return NULL;
4337 }
Mark Dickinson27a87a22009-10-25 20:43:34 +00004338
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004339 /* Copy any remaining digits of a, inverting if necessary. */
4340 if (op == '^' && negb)
4341 for (; i < size_z; ++i)
4342 z->ob_digit[i] = a->ob_digit[i] ^ PyLong_MASK;
4343 else if (i < size_z)
4344 memcpy(&z->ob_digit[i], &a->ob_digit[i],
4345 (size_z-i)*sizeof(digit));
Mark Dickinson27a87a22009-10-25 20:43:34 +00004346
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004347 /* Complement result if negative. */
4348 if (negz) {
4349 Py_SIZE(z) = -(Py_SIZE(z));
4350 z->ob_digit[size_z] = PyLong_MASK;
4351 v_complement(z->ob_digit, z->ob_digit, size_z+1);
4352 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00004353
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004354 Py_DECREF(a);
4355 Py_DECREF(b);
4356 return (PyObject *)maybe_small_long(long_normalize(z));
Guido van Rossumc6913e71991-11-19 20:26:46 +00004357}
4358
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004359static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00004360long_and(PyObject *a, PyObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00004361{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004362 PyObject *c;
4363 CHECK_BINOP(a, b);
4364 c = long_bitwise((PyLongObject*)a, '&', (PyLongObject*)b);
4365 return c;
Guido van Rossumc6913e71991-11-19 20:26:46 +00004366}
4367
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004368static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00004369long_xor(PyObject *a, PyObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00004370{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004371 PyObject *c;
4372 CHECK_BINOP(a, b);
4373 c = long_bitwise((PyLongObject*)a, '^', (PyLongObject*)b);
4374 return c;
Guido van Rossumc6913e71991-11-19 20:26:46 +00004375}
4376
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004377static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00004378long_or(PyObject *a, PyObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00004379{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004380 PyObject *c;
4381 CHECK_BINOP(a, b);
4382 c = long_bitwise((PyLongObject*)a, '|', (PyLongObject*)b);
4383 return c;
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00004384}
4385
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004386static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00004387long_long(PyObject *v)
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004388{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004389 if (PyLong_CheckExact(v))
4390 Py_INCREF(v);
4391 else
4392 v = _PyLong_Copy((PyLongObject *)v);
4393 return v;
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004394}
4395
Serhiy Storchaka48e47aa2015-05-13 00:19:51 +03004396PyObject *
4397_PyLong_GCD(PyObject *aarg, PyObject *barg)
4398{
4399 PyLongObject *a, *b, *c = NULL, *d = NULL, *r;
4400 stwodigits x, y, q, s, t, c_carry, d_carry;
4401 stwodigits A, B, C, D, T;
4402 int nbits, k;
4403 Py_ssize_t size_a, size_b, alloc_a, alloc_b;
4404 digit *a_digit, *b_digit, *c_digit, *d_digit, *a_end, *b_end;
4405
4406 a = (PyLongObject *)aarg;
4407 b = (PyLongObject *)barg;
4408 size_a = Py_SIZE(a);
4409 size_b = Py_SIZE(b);
4410 if (-2 <= size_a && size_a <= 2 && -2 <= size_b && size_b <= 2) {
4411 Py_INCREF(a);
4412 Py_INCREF(b);
4413 goto simple;
4414 }
4415
4416 /* Initial reduction: make sure that 0 <= b <= a. */
4417 a = (PyLongObject *)long_abs(a);
4418 if (a == NULL)
4419 return NULL;
4420 b = (PyLongObject *)long_abs(b);
4421 if (b == NULL) {
4422 Py_DECREF(a);
4423 return NULL;
4424 }
4425 if (long_compare(a, b) < 0) {
4426 r = a;
4427 a = b;
4428 b = r;
4429 }
4430 /* We now own references to a and b */
4431
4432 alloc_a = Py_SIZE(a);
4433 alloc_b = Py_SIZE(b);
4434 /* reduce until a fits into 2 digits */
4435 while ((size_a = Py_SIZE(a)) > 2) {
4436 nbits = bits_in_digit(a->ob_digit[size_a-1]);
4437 /* extract top 2*PyLong_SHIFT bits of a into x, along with
4438 corresponding bits of b into y */
4439 size_b = Py_SIZE(b);
4440 assert(size_b <= size_a);
4441 if (size_b == 0) {
4442 if (size_a < alloc_a) {
4443 r = (PyLongObject *)_PyLong_Copy(a);
4444 Py_DECREF(a);
4445 }
4446 else
4447 r = a;
4448 Py_DECREF(b);
4449 Py_XDECREF(c);
4450 Py_XDECREF(d);
4451 return (PyObject *)r;
4452 }
4453 x = (((twodigits)a->ob_digit[size_a-1] << (2*PyLong_SHIFT-nbits)) |
4454 ((twodigits)a->ob_digit[size_a-2] << (PyLong_SHIFT-nbits)) |
4455 (a->ob_digit[size_a-3] >> nbits));
4456
4457 y = ((size_b >= size_a - 2 ? b->ob_digit[size_a-3] >> nbits : 0) |
4458 (size_b >= size_a - 1 ? (twodigits)b->ob_digit[size_a-2] << (PyLong_SHIFT-nbits) : 0) |
4459 (size_b >= size_a ? (twodigits)b->ob_digit[size_a-1] << (2*PyLong_SHIFT-nbits) : 0));
4460
4461 /* inner loop of Lehmer's algorithm; A, B, C, D never grow
4462 larger than PyLong_MASK during the algorithm. */
4463 A = 1; B = 0; C = 0; D = 1;
4464 for (k=0;; k++) {
4465 if (y-C == 0)
4466 break;
4467 q = (x+(A-1))/(y-C);
4468 s = B+q*D;
4469 t = x-q*y;
4470 if (s > t)
4471 break;
4472 x = y; y = t;
4473 t = A+q*C; A = D; B = C; C = s; D = t;
4474 }
4475
4476 if (k == 0) {
4477 /* no progress; do a Euclidean step */
4478 if (l_divmod(a, b, NULL, &r) < 0)
4479 goto error;
4480 Py_DECREF(a);
4481 a = b;
4482 b = r;
4483 alloc_a = alloc_b;
4484 alloc_b = Py_SIZE(b);
4485 continue;
4486 }
4487
4488 /*
4489 a, b = A*b-B*a, D*a-C*b if k is odd
4490 a, b = A*a-B*b, D*b-C*a if k is even
4491 */
4492 if (k&1) {
4493 T = -A; A = -B; B = T;
4494 T = -C; C = -D; D = T;
4495 }
4496 if (c != NULL)
4497 Py_SIZE(c) = size_a;
4498 else if (Py_REFCNT(a) == 1) {
4499 Py_INCREF(a);
4500 c = a;
4501 }
4502 else {
4503 alloc_a = size_a;
4504 c = _PyLong_New(size_a);
4505 if (c == NULL)
4506 goto error;
4507 }
4508
4509 if (d != NULL)
4510 Py_SIZE(d) = size_a;
4511 else if (Py_REFCNT(b) == 1 && size_a <= alloc_b) {
4512 Py_INCREF(b);
4513 d = b;
4514 Py_SIZE(d) = size_a;
4515 }
4516 else {
4517 alloc_b = size_a;
4518 d = _PyLong_New(size_a);
4519 if (d == NULL)
4520 goto error;
4521 }
4522 a_end = a->ob_digit + size_a;
4523 b_end = b->ob_digit + size_b;
4524
4525 /* compute new a and new b in parallel */
4526 a_digit = a->ob_digit;
4527 b_digit = b->ob_digit;
4528 c_digit = c->ob_digit;
4529 d_digit = d->ob_digit;
4530 c_carry = 0;
4531 d_carry = 0;
4532 while (b_digit < b_end) {
4533 c_carry += (A * *a_digit) - (B * *b_digit);
4534 d_carry += (D * *b_digit++) - (C * *a_digit++);
4535 *c_digit++ = (digit)(c_carry & PyLong_MASK);
4536 *d_digit++ = (digit)(d_carry & PyLong_MASK);
4537 c_carry >>= PyLong_SHIFT;
4538 d_carry >>= PyLong_SHIFT;
4539 }
4540 while (a_digit < a_end) {
4541 c_carry += A * *a_digit;
4542 d_carry -= C * *a_digit++;
4543 *c_digit++ = (digit)(c_carry & PyLong_MASK);
4544 *d_digit++ = (digit)(d_carry & PyLong_MASK);
4545 c_carry >>= PyLong_SHIFT;
4546 d_carry >>= PyLong_SHIFT;
4547 }
4548 assert(c_carry == 0);
4549 assert(d_carry == 0);
4550
4551 Py_INCREF(c);
4552 Py_INCREF(d);
4553 Py_DECREF(a);
4554 Py_DECREF(b);
4555 a = long_normalize(c);
4556 b = long_normalize(d);
4557 }
4558 Py_XDECREF(c);
4559 Py_XDECREF(d);
4560
4561simple:
4562 assert(Py_REFCNT(a) > 0);
4563 assert(Py_REFCNT(b) > 0);
Victor Stinner5783fd22015-09-19 13:39:03 +02004564/* Issue #24999: use two shifts instead of ">> 2*PyLong_SHIFT" to avoid
4565 undefined behaviour when LONG_MAX type is smaller than 60 bits */
4566#if LONG_MAX >> PyLong_SHIFT >> PyLong_SHIFT
Serhiy Storchaka48e47aa2015-05-13 00:19:51 +03004567 /* a fits into a long, so b must too */
4568 x = PyLong_AsLong((PyObject *)a);
4569 y = PyLong_AsLong((PyObject *)b);
Victor Stinner5783fd22015-09-19 13:39:03 +02004570#elif defined(PY_LONG_LONG) && PY_LLONG_MAX >> PyLong_SHIFT >> PyLong_SHIFT
Serhiy Storchaka48e47aa2015-05-13 00:19:51 +03004571 x = PyLong_AsLongLong((PyObject *)a);
4572 y = PyLong_AsLongLong((PyObject *)b);
4573#else
4574# error "_PyLong_GCD"
4575#endif
4576 x = Py_ABS(x);
4577 y = Py_ABS(y);
4578 Py_DECREF(a);
4579 Py_DECREF(b);
4580
4581 /* usual Euclidean algorithm for longs */
4582 while (y != 0) {
4583 t = y;
4584 y = x % y;
4585 x = t;
4586 }
Victor Stinner5783fd22015-09-19 13:39:03 +02004587#if LONG_MAX >> PyLong_SHIFT >> PyLong_SHIFT
Serhiy Storchaka48e47aa2015-05-13 00:19:51 +03004588 return PyLong_FromLong(x);
Victor Stinner5783fd22015-09-19 13:39:03 +02004589#elif defined(PY_LONG_LONG) && PY_LLONG_MAX >> PyLong_SHIFT >> PyLong_SHIFT
Serhiy Storchaka48e47aa2015-05-13 00:19:51 +03004590 return PyLong_FromLongLong(x);
4591#else
4592# error "_PyLong_GCD"
4593#endif
4594
4595error:
4596 Py_DECREF(a);
4597 Py_DECREF(b);
4598 Py_XDECREF(c);
4599 Py_XDECREF(d);
4600 return NULL;
4601}
4602
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004603static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00004604long_float(PyObject *v)
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004605{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004606 double result;
4607 result = PyLong_AsDouble(v);
4608 if (result == -1.0 && PyErr_Occurred())
4609 return NULL;
4610 return PyFloat_FromDouble(result);
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004611}
4612
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004613static PyObject *
Guido van Rossumbef14172001-08-29 15:47:46 +00004614long_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004615
Tim Peters6d6c1a32001-08-02 04:15:00 +00004616static PyObject *
4617long_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
4618{
Mark Dickinsonf9a5a8e2010-05-26 20:07:58 +00004619 PyObject *obase = NULL, *x = NULL;
Gregory P. Smitha689e522012-12-25 22:38:32 -08004620 Py_ssize_t base;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004621 static char *kwlist[] = {"x", "base", 0};
Tim Peters6d6c1a32001-08-02 04:15:00 +00004622
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004623 if (type != &PyLong_Type)
4624 return long_subtype_new(type, args, kwds); /* Wimp out */
Mark Dickinsonf9a5a8e2010-05-26 20:07:58 +00004625 if (!PyArg_ParseTupleAndKeywords(args, kwds, "|OO:int", kwlist,
4626 &x, &obase))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004627 return NULL;
Serhiy Storchaka0b386d52012-12-28 09:42:11 +02004628 if (x == NULL) {
4629 if (obase != NULL) {
4630 PyErr_SetString(PyExc_TypeError,
4631 "int() missing string argument");
4632 return NULL;
4633 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004634 return PyLong_FromLong(0L);
Serhiy Storchaka0b386d52012-12-28 09:42:11 +02004635 }
Mark Dickinsonf9a5a8e2010-05-26 20:07:58 +00004636 if (obase == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004637 return PyNumber_Long(x);
Mark Dickinsonf9a5a8e2010-05-26 20:07:58 +00004638
Gregory P. Smitha689e522012-12-25 22:38:32 -08004639 base = PyNumber_AsSsize_t(obase, NULL);
Mark Dickinsonf9a5a8e2010-05-26 20:07:58 +00004640 if (base == -1 && PyErr_Occurred())
4641 return NULL;
Gregory P. Smitha689e522012-12-25 22:38:32 -08004642 if ((base != 0 && base < 2) || base > 36) {
Mark Dickinsonf9a5a8e2010-05-26 20:07:58 +00004643 PyErr_SetString(PyExc_ValueError,
Serhiy Storchaka0b386d52012-12-28 09:42:11 +02004644 "int() base must be >= 2 and <= 36");
Mark Dickinsonf9a5a8e2010-05-26 20:07:58 +00004645 return NULL;
4646 }
4647
4648 if (PyUnicode_Check(x))
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02004649 return PyLong_FromUnicodeObject(x, (int)base);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004650 else if (PyByteArray_Check(x) || PyBytes_Check(x)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004651 char *string;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004652 if (PyByteArray_Check(x))
4653 string = PyByteArray_AS_STRING(x);
4654 else
4655 string = PyBytes_AS_STRING(x);
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03004656 return _PyLong_FromBytes(string, Py_SIZE(x), (int)base);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004657 }
4658 else {
4659 PyErr_SetString(PyExc_TypeError,
Mark Dickinson22b20182010-05-10 21:27:53 +00004660 "int() can't convert non-string with explicit base");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004661 return NULL;
4662 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00004663}
4664
Serhiy Storchaka95949422013-08-27 19:40:23 +03004665/* Wimpy, slow approach to tp_new calls for subtypes of int:
4666 first create a regular int from whatever arguments we got,
Guido van Rossumbef14172001-08-29 15:47:46 +00004667 then allocate a subtype instance and initialize it from
Serhiy Storchaka95949422013-08-27 19:40:23 +03004668 the regular int. The regular int is then thrown away.
Guido van Rossumbef14172001-08-29 15:47:46 +00004669*/
4670static PyObject *
4671long_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
4672{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004673 PyLongObject *tmp, *newobj;
4674 Py_ssize_t i, n;
Guido van Rossumbef14172001-08-29 15:47:46 +00004675
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004676 assert(PyType_IsSubtype(type, &PyLong_Type));
4677 tmp = (PyLongObject *)long_new(&PyLong_Type, args, kwds);
4678 if (tmp == NULL)
4679 return NULL;
4680 assert(PyLong_CheckExact(tmp));
4681 n = Py_SIZE(tmp);
4682 if (n < 0)
4683 n = -n;
4684 newobj = (PyLongObject *)type->tp_alloc(type, n);
4685 if (newobj == NULL) {
4686 Py_DECREF(tmp);
4687 return NULL;
4688 }
4689 assert(PyLong_Check(newobj));
4690 Py_SIZE(newobj) = Py_SIZE(tmp);
4691 for (i = 0; i < n; i++)
4692 newobj->ob_digit[i] = tmp->ob_digit[i];
4693 Py_DECREF(tmp);
4694 return (PyObject *)newobj;
Guido van Rossumbef14172001-08-29 15:47:46 +00004695}
4696
Guido van Rossum5d9113d2003-01-29 17:58:45 +00004697static PyObject *
4698long_getnewargs(PyLongObject *v)
4699{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004700 return Py_BuildValue("(N)", _PyLong_Copy(v));
Guido van Rossum5d9113d2003-01-29 17:58:45 +00004701}
4702
Guido van Rossumb43daf72007-08-01 18:08:08 +00004703static PyObject *
Mark Dickinson6bf19002009-05-02 17:57:52 +00004704long_get0(PyLongObject *v, void *context) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004705 return PyLong_FromLong(0L);
Mark Dickinson6bf19002009-05-02 17:57:52 +00004706}
4707
4708static PyObject *
4709long_get1(PyLongObject *v, void *context) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004710 return PyLong_FromLong(1L);
Guido van Rossumb43daf72007-08-01 18:08:08 +00004711}
4712
Guido van Rossum2fa33db2007-08-23 22:07:24 +00004713static PyObject *
Eric Smith8c663262007-08-25 02:26:07 +00004714long__format__(PyObject *self, PyObject *args)
4715{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004716 PyObject *format_spec;
Victor Stinnerd3f08822012-05-29 12:57:52 +02004717 _PyUnicodeWriter writer;
4718 int ret;
Eric Smith4a7d76d2008-05-30 18:10:19 +00004719
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004720 if (!PyArg_ParseTuple(args, "U:__format__", &format_spec))
4721 return NULL;
Victor Stinnerd3f08822012-05-29 12:57:52 +02004722
Victor Stinner8f674cc2013-04-17 23:02:17 +02004723 _PyUnicodeWriter_Init(&writer);
Victor Stinnerd3f08822012-05-29 12:57:52 +02004724 ret = _PyLong_FormatAdvancedWriter(
4725 &writer,
4726 self,
4727 format_spec, 0, PyUnicode_GET_LENGTH(format_spec));
4728 if (ret == -1) {
4729 _PyUnicodeWriter_Dealloc(&writer);
4730 return NULL;
4731 }
4732 return _PyUnicodeWriter_Finish(&writer);
Eric Smith8c663262007-08-25 02:26:07 +00004733}
4734
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004735/* Return a pair (q, r) such that a = b * q + r, and
4736 abs(r) <= abs(b)/2, with equality possible only if q is even.
4737 In other words, q == a / b, rounded to the nearest integer using
4738 round-half-to-even. */
4739
4740PyObject *
Mark Dickinsonfa68a612010-06-07 18:47:09 +00004741_PyLong_DivmodNear(PyObject *a, PyObject *b)
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004742{
4743 PyLongObject *quo = NULL, *rem = NULL;
4744 PyObject *one = NULL, *twice_rem, *result, *temp;
4745 int cmp, quo_is_odd, quo_is_neg;
4746
4747 /* Equivalent Python code:
4748
4749 def divmod_near(a, b):
4750 q, r = divmod(a, b)
4751 # round up if either r / b > 0.5, or r / b == 0.5 and q is odd.
4752 # The expression r / b > 0.5 is equivalent to 2 * r > b if b is
4753 # positive, 2 * r < b if b negative.
4754 greater_than_half = 2*r > b if b > 0 else 2*r < b
4755 exactly_half = 2*r == b
4756 if greater_than_half or exactly_half and q % 2 == 1:
4757 q += 1
4758 r -= b
4759 return q, r
4760
4761 */
4762 if (!PyLong_Check(a) || !PyLong_Check(b)) {
4763 PyErr_SetString(PyExc_TypeError,
4764 "non-integer arguments in division");
4765 return NULL;
4766 }
4767
4768 /* Do a and b have different signs? If so, quotient is negative. */
4769 quo_is_neg = (Py_SIZE(a) < 0) != (Py_SIZE(b) < 0);
4770
4771 one = PyLong_FromLong(1L);
4772 if (one == NULL)
4773 return NULL;
4774
4775 if (long_divrem((PyLongObject*)a, (PyLongObject*)b, &quo, &rem) < 0)
4776 goto error;
4777
4778 /* compare twice the remainder with the divisor, to see
4779 if we need to adjust the quotient and remainder */
4780 twice_rem = long_lshift((PyObject *)rem, one);
4781 if (twice_rem == NULL)
4782 goto error;
4783 if (quo_is_neg) {
4784 temp = long_neg((PyLongObject*)twice_rem);
4785 Py_DECREF(twice_rem);
4786 twice_rem = temp;
4787 if (twice_rem == NULL)
4788 goto error;
4789 }
4790 cmp = long_compare((PyLongObject *)twice_rem, (PyLongObject *)b);
4791 Py_DECREF(twice_rem);
4792
4793 quo_is_odd = Py_SIZE(quo) != 0 && ((quo->ob_digit[0] & 1) != 0);
4794 if ((Py_SIZE(b) < 0 ? cmp < 0 : cmp > 0) || (cmp == 0 && quo_is_odd)) {
4795 /* fix up quotient */
4796 if (quo_is_neg)
4797 temp = long_sub(quo, (PyLongObject *)one);
4798 else
4799 temp = long_add(quo, (PyLongObject *)one);
4800 Py_DECREF(quo);
4801 quo = (PyLongObject *)temp;
4802 if (quo == NULL)
4803 goto error;
4804 /* and remainder */
4805 if (quo_is_neg)
4806 temp = long_add(rem, (PyLongObject *)b);
4807 else
4808 temp = long_sub(rem, (PyLongObject *)b);
4809 Py_DECREF(rem);
4810 rem = (PyLongObject *)temp;
4811 if (rem == NULL)
4812 goto error;
4813 }
4814
4815 result = PyTuple_New(2);
4816 if (result == NULL)
4817 goto error;
4818
4819 /* PyTuple_SET_ITEM steals references */
4820 PyTuple_SET_ITEM(result, 0, (PyObject *)quo);
4821 PyTuple_SET_ITEM(result, 1, (PyObject *)rem);
4822 Py_DECREF(one);
4823 return result;
4824
4825 error:
4826 Py_XDECREF(quo);
4827 Py_XDECREF(rem);
4828 Py_XDECREF(one);
4829 return NULL;
4830}
4831
Eric Smith8c663262007-08-25 02:26:07 +00004832static PyObject *
Guido van Rossum2fa33db2007-08-23 22:07:24 +00004833long_round(PyObject *self, PyObject *args)
4834{
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004835 PyObject *o_ndigits=NULL, *temp, *result, *ndigits;
Guido van Rossum2fa33db2007-08-23 22:07:24 +00004836
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004837 /* To round an integer m to the nearest 10**n (n positive), we make use of
4838 * the divmod_near operation, defined by:
4839 *
4840 * divmod_near(a, b) = (q, r)
4841 *
4842 * where q is the nearest integer to the quotient a / b (the
4843 * nearest even integer in the case of a tie) and r == a - q * b.
4844 * Hence q * b = a - r is the nearest multiple of b to a,
4845 * preferring even multiples in the case of a tie.
4846 *
4847 * So the nearest multiple of 10**n to m is:
4848 *
4849 * m - divmod_near(m, 10**n)[1].
4850 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004851 if (!PyArg_ParseTuple(args, "|O", &o_ndigits))
4852 return NULL;
4853 if (o_ndigits == NULL)
4854 return long_long(self);
Guido van Rossum2fa33db2007-08-23 22:07:24 +00004855
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004856 ndigits = PyNumber_Index(o_ndigits);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004857 if (ndigits == NULL)
4858 return NULL;
Mark Dickinson1124e712009-01-28 21:25:58 +00004859
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004860 /* if ndigits >= 0 then no rounding is necessary; return self unchanged */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004861 if (Py_SIZE(ndigits) >= 0) {
4862 Py_DECREF(ndigits);
4863 return long_long(self);
4864 }
Mark Dickinson1124e712009-01-28 21:25:58 +00004865
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004866 /* result = self - divmod_near(self, 10 ** -ndigits)[1] */
4867 temp = long_neg((PyLongObject*)ndigits);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004868 Py_DECREF(ndigits);
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004869 ndigits = temp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004870 if (ndigits == NULL)
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004871 return NULL;
Mark Dickinson1124e712009-01-28 21:25:58 +00004872
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004873 result = PyLong_FromLong(10L);
4874 if (result == NULL) {
4875 Py_DECREF(ndigits);
4876 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004877 }
Mark Dickinson1124e712009-01-28 21:25:58 +00004878
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004879 temp = long_pow(result, ndigits, Py_None);
4880 Py_DECREF(ndigits);
4881 Py_DECREF(result);
4882 result = temp;
4883 if (result == NULL)
4884 return NULL;
4885
Mark Dickinsonfa68a612010-06-07 18:47:09 +00004886 temp = _PyLong_DivmodNear(self, result);
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004887 Py_DECREF(result);
4888 result = temp;
4889 if (result == NULL)
4890 return NULL;
4891
4892 temp = long_sub((PyLongObject *)self,
4893 (PyLongObject *)PyTuple_GET_ITEM(result, 1));
4894 Py_DECREF(result);
4895 result = temp;
4896
4897 return result;
Guido van Rossum2fa33db2007-08-23 22:07:24 +00004898}
4899
Martin v. Löwis00709aa2008-06-04 14:18:43 +00004900static PyObject *
4901long_sizeof(PyLongObject *v)
4902{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004903 Py_ssize_t res;
Martin v. Löwis00709aa2008-06-04 14:18:43 +00004904
Victor Stinner45e8e2f2014-05-14 17:24:35 +02004905 res = offsetof(PyLongObject, ob_digit) + Py_ABS(Py_SIZE(v))*sizeof(digit);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004906 return PyLong_FromSsize_t(res);
Martin v. Löwis00709aa2008-06-04 14:18:43 +00004907}
4908
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004909static PyObject *
4910long_bit_length(PyLongObject *v)
4911{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004912 PyLongObject *result, *x, *y;
4913 Py_ssize_t ndigits, msd_bits = 0;
4914 digit msd;
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004915
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004916 assert(v != NULL);
4917 assert(PyLong_Check(v));
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004918
Victor Stinner45e8e2f2014-05-14 17:24:35 +02004919 ndigits = Py_ABS(Py_SIZE(v));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004920 if (ndigits == 0)
4921 return PyLong_FromLong(0);
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004922
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004923 msd = v->ob_digit[ndigits-1];
4924 while (msd >= 32) {
4925 msd_bits += 6;
4926 msd >>= 6;
4927 }
4928 msd_bits += (long)(BitLengthTable[msd]);
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004929
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004930 if (ndigits <= PY_SSIZE_T_MAX/PyLong_SHIFT)
4931 return PyLong_FromSsize_t((ndigits-1)*PyLong_SHIFT + msd_bits);
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004932
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004933 /* expression above may overflow; use Python integers instead */
4934 result = (PyLongObject *)PyLong_FromSsize_t(ndigits - 1);
4935 if (result == NULL)
4936 return NULL;
4937 x = (PyLongObject *)PyLong_FromLong(PyLong_SHIFT);
4938 if (x == NULL)
4939 goto error;
4940 y = (PyLongObject *)long_mul(result, x);
4941 Py_DECREF(x);
4942 if (y == NULL)
4943 goto error;
4944 Py_DECREF(result);
4945 result = y;
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004946
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004947 x = (PyLongObject *)PyLong_FromLong((long)msd_bits);
4948 if (x == NULL)
4949 goto error;
4950 y = (PyLongObject *)long_add(result, x);
4951 Py_DECREF(x);
4952 if (y == NULL)
4953 goto error;
4954 Py_DECREF(result);
4955 result = y;
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004956
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004957 return (PyObject *)result;
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004958
Mark Dickinson22b20182010-05-10 21:27:53 +00004959 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004960 Py_DECREF(result);
4961 return NULL;
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004962}
4963
4964PyDoc_STRVAR(long_bit_length_doc,
4965"int.bit_length() -> int\n\
4966\n\
4967Number of bits necessary to represent self in binary.\n\
4968>>> bin(37)\n\
4969'0b100101'\n\
4970>>> (37).bit_length()\n\
49716");
4972
Christian Heimes53876d92008-04-19 00:31:39 +00004973#if 0
4974static PyObject *
4975long_is_finite(PyObject *v)
4976{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004977 Py_RETURN_TRUE;
Christian Heimes53876d92008-04-19 00:31:39 +00004978}
4979#endif
4980
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004981
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004982static PyObject *
4983long_to_bytes(PyLongObject *v, PyObject *args, PyObject *kwds)
4984{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004985 PyObject *byteorder_str;
4986 PyObject *is_signed_obj = NULL;
4987 Py_ssize_t length;
4988 int little_endian;
4989 int is_signed;
4990 PyObject *bytes;
4991 static char *kwlist[] = {"length", "byteorder", "signed", NULL};
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004992
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004993 if (!PyArg_ParseTupleAndKeywords(args, kwds, "nU|O:to_bytes", kwlist,
4994 &length, &byteorder_str,
4995 &is_signed_obj))
4996 return NULL;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00004997
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004998 if (args != NULL && Py_SIZE(args) > 2) {
4999 PyErr_SetString(PyExc_TypeError,
5000 "'signed' is a keyword-only argument");
5001 return NULL;
5002 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005003
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005004 if (!PyUnicode_CompareWithASCIIString(byteorder_str, "little"))
5005 little_endian = 1;
5006 else if (!PyUnicode_CompareWithASCIIString(byteorder_str, "big"))
5007 little_endian = 0;
5008 else {
5009 PyErr_SetString(PyExc_ValueError,
5010 "byteorder must be either 'little' or 'big'");
5011 return NULL;
5012 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005013
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005014 if (is_signed_obj != NULL) {
5015 int cmp = PyObject_IsTrue(is_signed_obj);
5016 if (cmp < 0)
5017 return NULL;
5018 is_signed = cmp ? 1 : 0;
5019 }
5020 else {
5021 /* If the signed argument was omitted, use False as the
5022 default. */
5023 is_signed = 0;
5024 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005025
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005026 if (length < 0) {
5027 PyErr_SetString(PyExc_ValueError,
5028 "length argument must be non-negative");
5029 return NULL;
5030 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005031
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005032 bytes = PyBytes_FromStringAndSize(NULL, length);
5033 if (bytes == NULL)
5034 return NULL;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005035
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005036 if (_PyLong_AsByteArray(v, (unsigned char *)PyBytes_AS_STRING(bytes),
5037 length, little_endian, is_signed) < 0) {
5038 Py_DECREF(bytes);
5039 return NULL;
5040 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005041
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005042 return bytes;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005043}
5044
Mark Dickinson078c2532010-01-30 18:06:17 +00005045PyDoc_STRVAR(long_to_bytes_doc,
5046"int.to_bytes(length, byteorder, *, signed=False) -> bytes\n\
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005047\n\
Mark Dickinson078c2532010-01-30 18:06:17 +00005048Return an array of bytes representing an integer.\n\
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005049\n\
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005050The integer is represented using length bytes. An OverflowError is\n\
Mark Dickinson078c2532010-01-30 18:06:17 +00005051raised if the integer is not representable with the given number of\n\
5052bytes.\n\
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005053\n\
5054The byteorder argument determines the byte order used to represent the\n\
5055integer. If byteorder is 'big', the most significant byte is at the\n\
5056beginning of the byte array. If byteorder is 'little', the most\n\
5057significant byte is at the end of the byte array. To request the native\n\
5058byte order of the host system, use `sys.byteorder' as the byte order value.\n\
5059\n\
Mark Dickinson078c2532010-01-30 18:06:17 +00005060The signed keyword-only argument determines whether two's complement is\n\
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005061used to represent the integer. If signed is False and a negative integer\n\
Mark Dickinson078c2532010-01-30 18:06:17 +00005062is given, an OverflowError is raised.");
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005063
5064static PyObject *
5065long_from_bytes(PyTypeObject *type, PyObject *args, PyObject *kwds)
5066{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005067 PyObject *byteorder_str;
5068 PyObject *is_signed_obj = NULL;
5069 int little_endian;
5070 int is_signed;
5071 PyObject *obj;
5072 PyObject *bytes;
5073 PyObject *long_obj;
5074 static char *kwlist[] = {"bytes", "byteorder", "signed", NULL};
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005075
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005076 if (!PyArg_ParseTupleAndKeywords(args, kwds, "OU|O:from_bytes", kwlist,
5077 &obj, &byteorder_str,
5078 &is_signed_obj))
5079 return NULL;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005080
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005081 if (args != NULL && Py_SIZE(args) > 2) {
5082 PyErr_SetString(PyExc_TypeError,
5083 "'signed' is a keyword-only argument");
5084 return NULL;
5085 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005086
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005087 if (!PyUnicode_CompareWithASCIIString(byteorder_str, "little"))
5088 little_endian = 1;
5089 else if (!PyUnicode_CompareWithASCIIString(byteorder_str, "big"))
5090 little_endian = 0;
5091 else {
5092 PyErr_SetString(PyExc_ValueError,
5093 "byteorder must be either 'little' or 'big'");
5094 return NULL;
5095 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005096
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005097 if (is_signed_obj != NULL) {
5098 int cmp = PyObject_IsTrue(is_signed_obj);
5099 if (cmp < 0)
5100 return NULL;
5101 is_signed = cmp ? 1 : 0;
5102 }
5103 else {
5104 /* If the signed argument was omitted, use False as the
5105 default. */
5106 is_signed = 0;
5107 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005108
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005109 bytes = PyObject_Bytes(obj);
5110 if (bytes == NULL)
5111 return NULL;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005112
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005113 long_obj = _PyLong_FromByteArray(
5114 (unsigned char *)PyBytes_AS_STRING(bytes), Py_SIZE(bytes),
5115 little_endian, is_signed);
5116 Py_DECREF(bytes);
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005117
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005118 /* If from_bytes() was used on subclass, allocate new subclass
Serhiy Storchaka95949422013-08-27 19:40:23 +03005119 * instance, initialize it with decoded int value and return it.
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005120 */
5121 if (type != &PyLong_Type && PyType_IsSubtype(type, &PyLong_Type)) {
5122 PyLongObject *newobj;
5123 int i;
Victor Stinner45e8e2f2014-05-14 17:24:35 +02005124 Py_ssize_t n = Py_ABS(Py_SIZE(long_obj));
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005125
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005126 newobj = (PyLongObject *)type->tp_alloc(type, n);
5127 if (newobj == NULL) {
5128 Py_DECREF(long_obj);
5129 return NULL;
5130 }
5131 assert(PyLong_Check(newobj));
5132 Py_SIZE(newobj) = Py_SIZE(long_obj);
5133 for (i = 0; i < n; i++) {
5134 newobj->ob_digit[i] =
5135 ((PyLongObject *)long_obj)->ob_digit[i];
5136 }
5137 Py_DECREF(long_obj);
5138 return (PyObject *)newobj;
5139 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005140
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005141 return long_obj;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005142}
5143
Mark Dickinson078c2532010-01-30 18:06:17 +00005144PyDoc_STRVAR(long_from_bytes_doc,
5145"int.from_bytes(bytes, byteorder, *, signed=False) -> int\n\
5146\n\
5147Return the integer represented by the given array of bytes.\n\
5148\n\
R David Murray861470c2014-10-05 11:47:01 -04005149The bytes argument must be a bytes-like object (e.g. bytes or bytearray).\n\
Mark Dickinson078c2532010-01-30 18:06:17 +00005150\n\
5151The byteorder argument determines the byte order used to represent the\n\
5152integer. If byteorder is 'big', the most significant byte is at the\n\
5153beginning of the byte array. If byteorder is 'little', the most\n\
5154significant byte is at the end of the byte array. To request the native\n\
5155byte order of the host system, use `sys.byteorder' as the byte order value.\n\
5156\n\
5157The signed keyword-only argument indicates whether two's complement is\n\
5158used to represent the integer.");
5159
Guido van Rossum5d9113d2003-01-29 17:58:45 +00005160static PyMethodDef long_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005161 {"conjugate", (PyCFunction)long_long, METH_NOARGS,
5162 "Returns self, the complex conjugate of any int."},
5163 {"bit_length", (PyCFunction)long_bit_length, METH_NOARGS,
5164 long_bit_length_doc},
Christian Heimes53876d92008-04-19 00:31:39 +00005165#if 0
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005166 {"is_finite", (PyCFunction)long_is_finite, METH_NOARGS,
5167 "Returns always True."},
Christian Heimes53876d92008-04-19 00:31:39 +00005168#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005169 {"to_bytes", (PyCFunction)long_to_bytes,
5170 METH_VARARGS|METH_KEYWORDS, long_to_bytes_doc},
5171 {"from_bytes", (PyCFunction)long_from_bytes,
5172 METH_VARARGS|METH_KEYWORDS|METH_CLASS, long_from_bytes_doc},
5173 {"__trunc__", (PyCFunction)long_long, METH_NOARGS,
5174 "Truncating an Integral returns itself."},
5175 {"__floor__", (PyCFunction)long_long, METH_NOARGS,
5176 "Flooring an Integral returns itself."},
5177 {"__ceil__", (PyCFunction)long_long, METH_NOARGS,
5178 "Ceiling of an Integral returns itself."},
5179 {"__round__", (PyCFunction)long_round, METH_VARARGS,
5180 "Rounding an Integral returns itself.\n"
5181 "Rounding with an ndigits argument also returns an integer."},
5182 {"__getnewargs__", (PyCFunction)long_getnewargs, METH_NOARGS},
5183 {"__format__", (PyCFunction)long__format__, METH_VARARGS},
5184 {"__sizeof__", (PyCFunction)long_sizeof, METH_NOARGS,
5185 "Returns size in memory, in bytes"},
5186 {NULL, NULL} /* sentinel */
Guido van Rossum5d9113d2003-01-29 17:58:45 +00005187};
5188
Guido van Rossumb43daf72007-08-01 18:08:08 +00005189static PyGetSetDef long_getset[] = {
Mark Dickinson6bf19002009-05-02 17:57:52 +00005190 {"real",
Guido van Rossumb43daf72007-08-01 18:08:08 +00005191 (getter)long_long, (setter)NULL,
5192 "the real part of a complex number",
5193 NULL},
Mark Dickinson6bf19002009-05-02 17:57:52 +00005194 {"imag",
5195 (getter)long_get0, (setter)NULL,
Guido van Rossumb43daf72007-08-01 18:08:08 +00005196 "the imaginary part of a complex number",
Mark Dickinson6bf19002009-05-02 17:57:52 +00005197 NULL},
5198 {"numerator",
Guido van Rossumb43daf72007-08-01 18:08:08 +00005199 (getter)long_long, (setter)NULL,
5200 "the numerator of a rational number in lowest terms",
5201 NULL},
Mark Dickinson6bf19002009-05-02 17:57:52 +00005202 {"denominator",
5203 (getter)long_get1, (setter)NULL,
Guido van Rossumb43daf72007-08-01 18:08:08 +00005204 "the denominator of a rational number in lowest terms",
Mark Dickinson6bf19002009-05-02 17:57:52 +00005205 NULL},
Guido van Rossumb43daf72007-08-01 18:08:08 +00005206 {NULL} /* Sentinel */
5207};
5208
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00005209PyDoc_STRVAR(long_doc,
Chris Jerdonek83fe2e12012-10-07 14:48:36 -07005210"int(x=0) -> integer\n\
5211int(x, base=10) -> integer\n\
Tim Peters6d6c1a32001-08-02 04:15:00 +00005212\n\
Chris Jerdonek83fe2e12012-10-07 14:48:36 -07005213Convert a number or string to an integer, or return 0 if no arguments\n\
5214are given. If x is a number, return x.__int__(). For floating point\n\
5215numbers, this truncates towards zero.\n\
5216\n\
5217If x is not a number or if base is given, then x must be a string,\n\
5218bytes, or bytearray instance representing an integer literal in the\n\
5219given base. The literal can be preceded by '+' or '-' and be surrounded\n\
5220by whitespace. The base defaults to 10. Valid bases are 0 and 2-36.\n\
5221Base 0 means to interpret the base from the string as an integer literal.\n\
5222>>> int('0b100', base=0)\n\
52234");
Tim Peters6d6c1a32001-08-02 04:15:00 +00005224
Guido van Rossumc0b618a1997-05-02 03:12:38 +00005225static PyNumberMethods long_as_number = {
Mark Dickinson22b20182010-05-10 21:27:53 +00005226 (binaryfunc)long_add, /*nb_add*/
5227 (binaryfunc)long_sub, /*nb_subtract*/
5228 (binaryfunc)long_mul, /*nb_multiply*/
5229 long_mod, /*nb_remainder*/
5230 long_divmod, /*nb_divmod*/
5231 long_pow, /*nb_power*/
5232 (unaryfunc)long_neg, /*nb_negative*/
5233 (unaryfunc)long_long, /*tp_positive*/
5234 (unaryfunc)long_abs, /*tp_absolute*/
5235 (inquiry)long_bool, /*tp_bool*/
5236 (unaryfunc)long_invert, /*nb_invert*/
5237 long_lshift, /*nb_lshift*/
5238 (binaryfunc)long_rshift, /*nb_rshift*/
5239 long_and, /*nb_and*/
5240 long_xor, /*nb_xor*/
5241 long_or, /*nb_or*/
5242 long_long, /*nb_int*/
5243 0, /*nb_reserved*/
5244 long_float, /*nb_float*/
5245 0, /* nb_inplace_add */
5246 0, /* nb_inplace_subtract */
5247 0, /* nb_inplace_multiply */
5248 0, /* nb_inplace_remainder */
5249 0, /* nb_inplace_power */
5250 0, /* nb_inplace_lshift */
5251 0, /* nb_inplace_rshift */
5252 0, /* nb_inplace_and */
5253 0, /* nb_inplace_xor */
5254 0, /* nb_inplace_or */
5255 long_div, /* nb_floor_divide */
5256 long_true_divide, /* nb_true_divide */
5257 0, /* nb_inplace_floor_divide */
5258 0, /* nb_inplace_true_divide */
5259 long_long, /* nb_index */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00005260};
5261
Guido van Rossumc0b618a1997-05-02 03:12:38 +00005262PyTypeObject PyLong_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005263 PyVarObject_HEAD_INIT(&PyType_Type, 0)
5264 "int", /* tp_name */
5265 offsetof(PyLongObject, ob_digit), /* tp_basicsize */
5266 sizeof(digit), /* tp_itemsize */
5267 long_dealloc, /* tp_dealloc */
5268 0, /* tp_print */
5269 0, /* tp_getattr */
5270 0, /* tp_setattr */
5271 0, /* tp_reserved */
5272 long_to_decimal_string, /* tp_repr */
5273 &long_as_number, /* tp_as_number */
5274 0, /* tp_as_sequence */
5275 0, /* tp_as_mapping */
5276 (hashfunc)long_hash, /* tp_hash */
5277 0, /* tp_call */
5278 long_to_decimal_string, /* tp_str */
5279 PyObject_GenericGetAttr, /* tp_getattro */
5280 0, /* tp_setattro */
5281 0, /* tp_as_buffer */
5282 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE |
5283 Py_TPFLAGS_LONG_SUBCLASS, /* tp_flags */
5284 long_doc, /* tp_doc */
5285 0, /* tp_traverse */
5286 0, /* tp_clear */
5287 long_richcompare, /* tp_richcompare */
5288 0, /* tp_weaklistoffset */
5289 0, /* tp_iter */
5290 0, /* tp_iternext */
5291 long_methods, /* tp_methods */
5292 0, /* tp_members */
5293 long_getset, /* tp_getset */
5294 0, /* tp_base */
5295 0, /* tp_dict */
5296 0, /* tp_descr_get */
5297 0, /* tp_descr_set */
5298 0, /* tp_dictoffset */
5299 0, /* tp_init */
5300 0, /* tp_alloc */
5301 long_new, /* tp_new */
5302 PyObject_Del, /* tp_free */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00005303};
Guido van Rossumddefaf32007-01-14 03:31:43 +00005304
Mark Dickinsonbd792642009-03-18 20:06:12 +00005305static PyTypeObject Int_InfoType;
5306
5307PyDoc_STRVAR(int_info__doc__,
5308"sys.int_info\n\
5309\n\
5310A struct sequence that holds information about Python's\n\
5311internal representation of integers. The attributes are read only.");
5312
5313static PyStructSequence_Field int_info_fields[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005314 {"bits_per_digit", "size of a digit in bits"},
Mark Dickinson22b20182010-05-10 21:27:53 +00005315 {"sizeof_digit", "size in bytes of the C type used to represent a digit"},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005316 {NULL, NULL}
Mark Dickinsonbd792642009-03-18 20:06:12 +00005317};
5318
5319static PyStructSequence_Desc int_info_desc = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005320 "sys.int_info", /* name */
5321 int_info__doc__, /* doc */
5322 int_info_fields, /* fields */
5323 2 /* number of fields */
Mark Dickinsonbd792642009-03-18 20:06:12 +00005324};
5325
5326PyObject *
5327PyLong_GetInfo(void)
5328{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005329 PyObject* int_info;
5330 int field = 0;
5331 int_info = PyStructSequence_New(&Int_InfoType);
5332 if (int_info == NULL)
5333 return NULL;
5334 PyStructSequence_SET_ITEM(int_info, field++,
5335 PyLong_FromLong(PyLong_SHIFT));
5336 PyStructSequence_SET_ITEM(int_info, field++,
5337 PyLong_FromLong(sizeof(digit)));
5338 if (PyErr_Occurred()) {
5339 Py_CLEAR(int_info);
5340 return NULL;
5341 }
5342 return int_info;
Mark Dickinsonbd792642009-03-18 20:06:12 +00005343}
5344
Guido van Rossumddefaf32007-01-14 03:31:43 +00005345int
5346_PyLong_Init(void)
5347{
5348#if NSMALLNEGINTS + NSMALLPOSINTS > 0
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005349 int ival, size;
5350 PyLongObject *v = small_ints;
Christian Heimesdfc12ed2008-01-31 15:16:38 +00005351
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005352 for (ival = -NSMALLNEGINTS; ival < NSMALLPOSINTS; ival++, v++) {
5353 size = (ival < 0) ? -1 : ((ival == 0) ? 0 : 1);
5354 if (Py_TYPE(v) == &PyLong_Type) {
5355 /* The element is already initialized, most likely
5356 * the Python interpreter was initialized before.
5357 */
5358 Py_ssize_t refcnt;
5359 PyObject* op = (PyObject*)v;
Christian Heimesdfc12ed2008-01-31 15:16:38 +00005360
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005361 refcnt = Py_REFCNT(op) < 0 ? 0 : Py_REFCNT(op);
5362 _Py_NewReference(op);
5363 /* _Py_NewReference sets the ref count to 1 but
5364 * the ref count might be larger. Set the refcnt
5365 * to the original refcnt + 1 */
5366 Py_REFCNT(op) = refcnt + 1;
5367 assert(Py_SIZE(op) == size);
Victor Stinner12174a52014-08-15 23:17:38 +02005368 assert(v->ob_digit[0] == (digit)abs(ival));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005369 }
5370 else {
Christian Heimesd3afe782013-12-04 09:27:47 +01005371 (void)PyObject_INIT(v, &PyLong_Type);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005372 }
5373 Py_SIZE(v) = size;
Victor Stinner12174a52014-08-15 23:17:38 +02005374 v->ob_digit[0] = (digit)abs(ival);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005375 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00005376#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005377 /* initialize int_info */
Victor Stinner1c8f0592013-07-22 22:24:54 +02005378 if (Int_InfoType.tp_name == NULL) {
5379 if (PyStructSequence_InitType2(&Int_InfoType, &int_info_desc) < 0)
5380 return 0;
5381 }
Mark Dickinsonbd792642009-03-18 20:06:12 +00005382
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005383 return 1;
Guido van Rossumddefaf32007-01-14 03:31:43 +00005384}
5385
5386void
5387PyLong_Fini(void)
5388{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005389 /* Integers are currently statically allocated. Py_DECREF is not
5390 needed, but Python must forget about the reference or multiple
5391 reinitializations will fail. */
Guido van Rossumddefaf32007-01-14 03:31:43 +00005392#if NSMALLNEGINTS + NSMALLPOSINTS > 0
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005393 int i;
5394 PyLongObject *v = small_ints;
5395 for (i = 0; i < NSMALLNEGINTS + NSMALLPOSINTS; i++, v++) {
5396 _Py_DEC_REFTOTAL;
5397 _Py_ForgetReference((PyObject*)v);
5398 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00005399#endif
5400}