blob: a7f496825ebd1fd83a4d7d63d1d2c54f3e694a8f [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
Serhiy Storchaka495e8802017-02-01 23:12:20 +020012#include "clinic/longobject.c.h"
13/*[clinic input]
14class int "PyObject *" "&PyLong_Type"
15[clinic start generated code]*/
16/*[clinic end generated code: output=da39a3ee5e6b4b0d input=ec0275e3422a36e3]*/
17
Guido van Rossumddefaf32007-01-14 03:31:43 +000018#ifndef NSMALLPOSINTS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000019#define NSMALLPOSINTS 257
Guido van Rossumddefaf32007-01-14 03:31:43 +000020#endif
21#ifndef NSMALLNEGINTS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000022#define NSMALLNEGINTS 5
Guido van Rossumddefaf32007-01-14 03:31:43 +000023#endif
Facundo Batista6e6f59b2008-07-24 18:57:11 +000024
Serhiy Storchaka196a7bc2017-02-02 16:54:45 +020025_Py_IDENTIFIER(little);
26_Py_IDENTIFIER(big);
27
Mark Dickinsone4416742009-02-15 15:14:57 +000028/* convert a PyLong of size 1, 0 or -1 to an sdigit */
Victor Stinner08a80b12013-07-17 22:33:42 +020029#define MEDIUM_VALUE(x) (assert(-1 <= Py_SIZE(x) && Py_SIZE(x) <= 1), \
30 Py_SIZE(x) < 0 ? -(sdigit)(x)->ob_digit[0] : \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000031 (Py_SIZE(x) == 0 ? (sdigit)0 : \
32 (sdigit)(x)->ob_digit[0]))
Facundo Batista6e6f59b2008-07-24 18:57:11 +000033
Serhiy Storchakaba85d692017-03-30 09:09:41 +030034PyObject *_PyLong_Zero = NULL;
35PyObject *_PyLong_One = NULL;
36
Guido van Rossumddefaf32007-01-14 03:31:43 +000037#if NSMALLNEGINTS + NSMALLPOSINTS > 0
38/* Small integers are preallocated in this array so that they
39 can be shared.
40 The integers that are preallocated are those in the range
41 -NSMALLNEGINTS (inclusive) to NSMALLPOSINTS (not inclusive).
42*/
43static PyLongObject small_ints[NSMALLNEGINTS + NSMALLPOSINTS];
44#ifdef COUNT_ALLOCS
Mark Dickinsonc286e582012-09-20 21:29:28 +010045Py_ssize_t quick_int_allocs, quick_neg_int_allocs;
Guido van Rossumddefaf32007-01-14 03:31:43 +000046#endif
47
Guido van Rossum7eaf8222007-06-18 17:58:50 +000048static PyObject *
Mark Dickinsone4416742009-02-15 15:14:57 +000049get_small_int(sdigit ival)
Guido van Rossumddefaf32007-01-14 03:31:43 +000050{
Benjamin Peterson45c9dce2014-03-14 21:53:51 -050051 PyObject *v;
Benjamin Peterson041c38a2014-03-14 21:47:23 -050052 assert(-NSMALLNEGINTS <= ival && ival < NSMALLPOSINTS);
Benjamin Peterson45c9dce2014-03-14 21:53:51 -050053 v = (PyObject *)&small_ints[ival + NSMALLNEGINTS];
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000054 Py_INCREF(v);
Guido van Rossumddefaf32007-01-14 03:31:43 +000055#ifdef COUNT_ALLOCS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000056 if (ival >= 0)
57 quick_int_allocs++;
58 else
59 quick_neg_int_allocs++;
Guido van Rossumddefaf32007-01-14 03:31:43 +000060#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000061 return v;
Guido van Rossumddefaf32007-01-14 03:31:43 +000062}
63#define CHECK_SMALL_INT(ival) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000064 do if (-NSMALLNEGINTS <= ival && ival < NSMALLPOSINTS) { \
65 return get_small_int((sdigit)ival); \
66 } while(0)
Guido van Rossumddefaf32007-01-14 03:31:43 +000067
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000068static PyLongObject *
Facundo Batista6e6f59b2008-07-24 18:57:11 +000069maybe_small_long(PyLongObject *v)
70{
Victor Stinner45e8e2f2014-05-14 17:24:35 +020071 if (v && Py_ABS(Py_SIZE(v)) <= 1) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000072 sdigit ival = MEDIUM_VALUE(v);
73 if (-NSMALLNEGINTS <= ival && ival < NSMALLPOSINTS) {
74 Py_DECREF(v);
75 return (PyLongObject *)get_small_int(ival);
76 }
77 }
78 return v;
Facundo Batista6e6f59b2008-07-24 18:57:11 +000079}
Guido van Rossumddefaf32007-01-14 03:31:43 +000080#else
81#define CHECK_SMALL_INT(ival)
Facundo Batista6e6f59b2008-07-24 18:57:11 +000082#define maybe_small_long(val) (val)
Guido van Rossumddefaf32007-01-14 03:31:43 +000083#endif
84
Serhiy Storchaka95949422013-08-27 19:40:23 +030085/* If a freshly-allocated int is already shared, it must
Guido van Rossumddefaf32007-01-14 03:31:43 +000086 be a small integer, so negating it must go to PyLong_FromLong */
Victor Stinner8aed6f12013-07-17 22:31:17 +020087Py_LOCAL_INLINE(void)
88_PyLong_Negate(PyLongObject **x_p)
89{
90 PyLongObject *x;
91
92 x = (PyLongObject *)*x_p;
93 if (Py_REFCNT(x) == 1) {
94 Py_SIZE(x) = -Py_SIZE(x);
95 return;
96 }
97
98 *x_p = (PyLongObject *)PyLong_FromLong(-MEDIUM_VALUE(x));
99 Py_DECREF(x);
100}
101
Serhiy Storchaka95949422013-08-27 19:40:23 +0300102/* For int multiplication, use the O(N**2) school algorithm unless
Tim Peters5af4e6c2002-08-12 02:31:19 +0000103 * both operands contain more than KARATSUBA_CUTOFF digits (this
Serhiy Storchaka95949422013-08-27 19:40:23 +0300104 * being an internal Python int digit, in base BASE).
Tim Peters5af4e6c2002-08-12 02:31:19 +0000105 */
Tim Peters0973b992004-08-29 22:16:50 +0000106#define KARATSUBA_CUTOFF 70
107#define KARATSUBA_SQUARE_CUTOFF (2 * KARATSUBA_CUTOFF)
Tim Peters5af4e6c2002-08-12 02:31:19 +0000108
Tim Peters47e52ee2004-08-30 02:44:38 +0000109/* For exponentiation, use the binary left-to-right algorithm
110 * unless the exponent contains more than FIVEARY_CUTOFF digits.
111 * In that case, do 5 bits at a time. The potential drawback is that
112 * a table of 2**5 intermediate results is computed.
113 */
114#define FIVEARY_CUTOFF 8
115
Mark Dickinsoncdd01d22010-05-10 21:37:34 +0000116#define SIGCHECK(PyTryBlock) \
117 do { \
118 if (PyErr_CheckSignals()) PyTryBlock \
119 } while(0)
Guido van Rossum23d6f0e1991-05-14 12:06:49 +0000120
Serhiy Storchaka95949422013-08-27 19:40:23 +0300121/* Normalize (remove leading zeros from) an int object.
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000122 Doesn't attempt to free the storage--in most cases, due to the nature
123 of the algorithms used, this could save at most be one word anyway. */
124
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000125static PyLongObject *
Antoine Pitrou9ed5f272013-08-13 20:18:52 +0200126long_normalize(PyLongObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000127{
Victor Stinner45e8e2f2014-05-14 17:24:35 +0200128 Py_ssize_t j = Py_ABS(Py_SIZE(v));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000129 Py_ssize_t i = j;
Tim Peters5af4e6c2002-08-12 02:31:19 +0000130
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000131 while (i > 0 && v->ob_digit[i-1] == 0)
132 --i;
133 if (i != j)
134 Py_SIZE(v) = (Py_SIZE(v) < 0) ? -(i) : i;
135 return v;
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000136}
137
Serhiy Storchaka31a65542013-12-11 21:07:54 +0200138/* _PyLong_FromNbInt: Convert the given object to a PyLongObject
139 using the nb_int slot, if available. Raise TypeError if either the
140 nb_int slot is not available or the result of the call to nb_int
141 returns something not of type int.
142*/
143PyLongObject *
144_PyLong_FromNbInt(PyObject *integral)
145{
146 PyNumberMethods *nb;
147 PyObject *result;
148
149 /* Fast path for the case that we already have an int. */
150 if (PyLong_CheckExact(integral)) {
151 Py_INCREF(integral);
152 return (PyLongObject *)integral;
153 }
154
155 nb = Py_TYPE(integral)->tp_as_number;
156 if (nb == NULL || nb->nb_int == NULL) {
157 PyErr_Format(PyExc_TypeError,
158 "an integer is required (got type %.200s)",
159 Py_TYPE(integral)->tp_name);
160 return NULL;
161 }
162
163 /* Convert using the nb_int slot, which should return something
164 of exact type int. */
165 result = nb->nb_int(integral);
166 if (!result || PyLong_CheckExact(result))
167 return (PyLongObject *)result;
168 if (!PyLong_Check(result)) {
169 PyErr_Format(PyExc_TypeError,
170 "__int__ returned non-int (type %.200s)",
171 result->ob_type->tp_name);
172 Py_DECREF(result);
173 return NULL;
174 }
175 /* Issue #17576: warn if 'result' not of exact type int. */
176 if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1,
177 "__int__ returned non-int (type %.200s). "
178 "The ability to return an instance of a strict subclass of int "
179 "is deprecated, and may be removed in a future version of Python.",
180 result->ob_type->tp_name)) {
181 Py_DECREF(result);
182 return NULL;
183 }
184 return (PyLongObject *)result;
185}
186
187
Serhiy Storchaka95949422013-08-27 19:40:23 +0300188/* Allocate a new int object with size digits.
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000189 Return NULL and set exception if we run out of memory. */
190
Mark Dickinson5a74bf62009-02-15 11:04:38 +0000191#define MAX_LONG_DIGITS \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000192 ((PY_SSIZE_T_MAX - offsetof(PyLongObject, ob_digit))/sizeof(digit))
Mark Dickinson5a74bf62009-02-15 11:04:38 +0000193
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000194PyLongObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +0000195_PyLong_New(Py_ssize_t size)
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000196{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000197 PyLongObject *result;
198 /* Number of bytes needed is: offsetof(PyLongObject, ob_digit) +
199 sizeof(digit)*size. Previous incarnations of this code used
200 sizeof(PyVarObject) instead of the offsetof, but this risks being
201 incorrect in the presence of padding between the PyVarObject header
202 and the digits. */
203 if (size > (Py_ssize_t)MAX_LONG_DIGITS) {
204 PyErr_SetString(PyExc_OverflowError,
205 "too many digits in integer");
206 return NULL;
207 }
208 result = PyObject_MALLOC(offsetof(PyLongObject, ob_digit) +
209 size*sizeof(digit));
210 if (!result) {
211 PyErr_NoMemory();
212 return NULL;
213 }
214 return (PyLongObject*)PyObject_INIT_VAR(result, &PyLong_Type, size);
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000215}
216
Tim Peters64b5ce32001-09-10 20:52:51 +0000217PyObject *
218_PyLong_Copy(PyLongObject *src)
219{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000220 PyLongObject *result;
221 Py_ssize_t i;
Tim Peters64b5ce32001-09-10 20:52:51 +0000222
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000223 assert(src != NULL);
224 i = Py_SIZE(src);
225 if (i < 0)
226 i = -(i);
227 if (i < 2) {
Mark Dickinsonbcc17ee2012-04-20 21:42:49 +0100228 sdigit ival = MEDIUM_VALUE(src);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000229 CHECK_SMALL_INT(ival);
230 }
231 result = _PyLong_New(i);
232 if (result != NULL) {
233 Py_SIZE(result) = Py_SIZE(src);
234 while (--i >= 0)
235 result->ob_digit[i] = src->ob_digit[i];
236 }
237 return (PyObject *)result;
Tim Peters64b5ce32001-09-10 20:52:51 +0000238}
239
Serhiy Storchaka95949422013-08-27 19:40:23 +0300240/* Create a new int object from a C long int */
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000241
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000242PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +0000243PyLong_FromLong(long ival)
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000244{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000245 PyLongObject *v;
246 unsigned long abs_ival;
247 unsigned long t; /* unsigned so >> doesn't propagate sign bit */
248 int ndigits = 0;
Mark Dickinson36820dd2016-09-10 20:17:36 +0100249 int sign;
Guido van Rossumddefaf32007-01-14 03:31:43 +0000250
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000251 CHECK_SMALL_INT(ival);
Tim Petersce9de2f2001-06-14 04:56:19 +0000252
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000253 if (ival < 0) {
254 /* negate: can't write this as abs_ival = -ival since that
255 invokes undefined behaviour when ival is LONG_MIN */
256 abs_ival = 0U-(unsigned long)ival;
257 sign = -1;
258 }
259 else {
260 abs_ival = (unsigned long)ival;
Mark Dickinson36820dd2016-09-10 20:17:36 +0100261 sign = ival == 0 ? 0 : 1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000262 }
Tim Petersce9de2f2001-06-14 04:56:19 +0000263
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000264 /* Fast path for single-digit ints */
265 if (!(abs_ival >> PyLong_SHIFT)) {
266 v = _PyLong_New(1);
267 if (v) {
268 Py_SIZE(v) = sign;
269 v->ob_digit[0] = Py_SAFE_DOWNCAST(
270 abs_ival, unsigned long, digit);
271 }
272 return (PyObject*)v;
273 }
Guido van Rossumddefaf32007-01-14 03:31:43 +0000274
Mark Dickinson249b8982009-04-27 19:41:00 +0000275#if PyLong_SHIFT==15
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000276 /* 2 digits */
277 if (!(abs_ival >> 2*PyLong_SHIFT)) {
278 v = _PyLong_New(2);
279 if (v) {
280 Py_SIZE(v) = 2*sign;
281 v->ob_digit[0] = Py_SAFE_DOWNCAST(
282 abs_ival & PyLong_MASK, unsigned long, digit);
283 v->ob_digit[1] = Py_SAFE_DOWNCAST(
284 abs_ival >> PyLong_SHIFT, unsigned long, digit);
285 }
286 return (PyObject*)v;
287 }
Mark Dickinsonbd792642009-03-18 20:06:12 +0000288#endif
Guido van Rossumddefaf32007-01-14 03:31:43 +0000289
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000290 /* Larger numbers: loop to determine number of digits */
291 t = abs_ival;
292 while (t) {
293 ++ndigits;
294 t >>= PyLong_SHIFT;
295 }
296 v = _PyLong_New(ndigits);
297 if (v != NULL) {
298 digit *p = v->ob_digit;
299 Py_SIZE(v) = ndigits*sign;
300 t = abs_ival;
301 while (t) {
302 *p++ = Py_SAFE_DOWNCAST(
303 t & PyLong_MASK, unsigned long, digit);
304 t >>= PyLong_SHIFT;
305 }
306 }
307 return (PyObject *)v;
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000308}
309
Serhiy Storchaka95949422013-08-27 19:40:23 +0300310/* Create a new int object from a C unsigned long int */
Guido van Rossum53756b11997-01-03 17:14:46 +0000311
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000312PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +0000313PyLong_FromUnsignedLong(unsigned long ival)
Guido van Rossum53756b11997-01-03 17:14:46 +0000314{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000315 PyLongObject *v;
316 unsigned long t;
317 int ndigits = 0;
Tim Petersce9de2f2001-06-14 04:56:19 +0000318
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000319 if (ival < PyLong_BASE)
320 return PyLong_FromLong(ival);
321 /* Count the number of Python digits. */
orenmn86aa2692017-03-06 10:42:47 +0200322 t = ival;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000323 while (t) {
324 ++ndigits;
325 t >>= PyLong_SHIFT;
326 }
327 v = _PyLong_New(ndigits);
328 if (v != NULL) {
329 digit *p = v->ob_digit;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000330 while (ival) {
331 *p++ = (digit)(ival & PyLong_MASK);
332 ival >>= PyLong_SHIFT;
333 }
334 }
335 return (PyObject *)v;
Guido van Rossum53756b11997-01-03 17:14:46 +0000336}
337
Serhiy Storchaka95949422013-08-27 19:40:23 +0300338/* Create a new int object from a C double */
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000339
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000340PyObject *
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000341PyLong_FromDouble(double dval)
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000342{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000343 PyLongObject *v;
344 double frac;
345 int i, ndig, expo, neg;
346 neg = 0;
347 if (Py_IS_INFINITY(dval)) {
348 PyErr_SetString(PyExc_OverflowError,
Mark Dickinson22b20182010-05-10 21:27:53 +0000349 "cannot convert float infinity to integer");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000350 return NULL;
351 }
352 if (Py_IS_NAN(dval)) {
353 PyErr_SetString(PyExc_ValueError,
Mark Dickinson22b20182010-05-10 21:27:53 +0000354 "cannot convert float NaN to integer");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000355 return NULL;
356 }
357 if (dval < 0.0) {
358 neg = 1;
359 dval = -dval;
360 }
361 frac = frexp(dval, &expo); /* dval = frac*2**expo; 0.0 <= frac < 1.0 */
362 if (expo <= 0)
363 return PyLong_FromLong(0L);
364 ndig = (expo-1) / PyLong_SHIFT + 1; /* Number of 'digits' in result */
365 v = _PyLong_New(ndig);
366 if (v == NULL)
367 return NULL;
368 frac = ldexp(frac, (expo-1) % PyLong_SHIFT + 1);
369 for (i = ndig; --i >= 0; ) {
370 digit bits = (digit)frac;
371 v->ob_digit[i] = bits;
372 frac = frac - (double)bits;
373 frac = ldexp(frac, PyLong_SHIFT);
374 }
375 if (neg)
376 Py_SIZE(v) = -(Py_SIZE(v));
377 return (PyObject *)v;
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000378}
379
Thomas Wouters89f507f2006-12-13 04:49:30 +0000380/* Checking for overflow in PyLong_AsLong is a PITA since C doesn't define
381 * anything about what happens when a signed integer operation overflows,
382 * and some compilers think they're doing you a favor by being "clever"
Raymond Hettinger15f44ab2016-08-30 10:47:49 -0700383 * then. The bit pattern for the largest positive signed long is
Thomas Wouters89f507f2006-12-13 04:49:30 +0000384 * (unsigned long)LONG_MAX, and for the smallest negative signed long
385 * it is abs(LONG_MIN), which we could write -(unsigned long)LONG_MIN.
386 * However, some other compilers warn about applying unary minus to an
387 * unsigned operand. Hence the weird "0-".
388 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000389#define PY_ABS_LONG_MIN (0-(unsigned long)LONG_MIN)
390#define PY_ABS_SSIZE_T_MIN (0-(size_t)PY_SSIZE_T_MIN)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000391
Serhiy Storchaka95949422013-08-27 19:40:23 +0300392/* Get a C long int from an int object or any object that has an __int__
Mark Dickinson8d48b432011-10-23 20:47:14 +0100393 method.
394
395 On overflow, return -1 and set *overflow to 1 or -1 depending on the sign of
396 the result. Otherwise *overflow is 0.
397
398 For other errors (e.g., TypeError), return -1 and set an error condition.
399 In this case *overflow will be 0.
400*/
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000401
402long
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +0000403PyLong_AsLongAndOverflow(PyObject *vv, int *overflow)
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000404{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000405 /* This version by Tim Peters */
Antoine Pitrou9ed5f272013-08-13 20:18:52 +0200406 PyLongObject *v;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000407 unsigned long x, prev;
408 long res;
409 Py_ssize_t i;
410 int sign;
411 int do_decref = 0; /* if nb_int was called */
Guido van Rossumf7531811998-05-26 14:33:37 +0000412
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000413 *overflow = 0;
414 if (vv == NULL) {
415 PyErr_BadInternalCall();
416 return -1;
417 }
Guido van Rossumddefaf32007-01-14 03:31:43 +0000418
Serhiy Storchaka31a65542013-12-11 21:07:54 +0200419 if (PyLong_Check(vv)) {
420 v = (PyLongObject *)vv;
421 }
422 else {
423 v = _PyLong_FromNbInt(vv);
424 if (v == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000425 return -1;
426 do_decref = 1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000427 }
Guido van Rossumddefaf32007-01-14 03:31:43 +0000428
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000429 res = -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000430 i = Py_SIZE(v);
Guido van Rossumf7531811998-05-26 14:33:37 +0000431
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000432 switch (i) {
433 case -1:
434 res = -(sdigit)v->ob_digit[0];
435 break;
436 case 0:
437 res = 0;
438 break;
439 case 1:
440 res = v->ob_digit[0];
441 break;
442 default:
443 sign = 1;
444 x = 0;
445 if (i < 0) {
446 sign = -1;
447 i = -(i);
448 }
449 while (--i >= 0) {
450 prev = x;
451 x = (x << PyLong_SHIFT) | v->ob_digit[i];
452 if ((x >> PyLong_SHIFT) != prev) {
453 *overflow = sign;
454 goto exit;
455 }
456 }
457 /* Haven't lost any bits, but casting to long requires extra
458 * care (see comment above).
459 */
460 if (x <= (unsigned long)LONG_MAX) {
461 res = (long)x * sign;
462 }
463 else if (sign < 0 && x == PY_ABS_LONG_MIN) {
464 res = LONG_MIN;
465 }
466 else {
467 *overflow = sign;
468 /* res is already set to -1 */
469 }
470 }
Mark Dickinson22b20182010-05-10 21:27:53 +0000471 exit:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000472 if (do_decref) {
Serhiy Storchaka31a65542013-12-11 21:07:54 +0200473 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000474 }
475 return res;
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000476}
477
Serhiy Storchaka95949422013-08-27 19:40:23 +0300478/* Get a C long int from an int object or any object that has an __int__
Mark Dickinson8d48b432011-10-23 20:47:14 +0100479 method. Return -1 and set an error if overflow occurs. */
480
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000481long
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +0000482PyLong_AsLong(PyObject *obj)
483{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000484 int overflow;
485 long result = PyLong_AsLongAndOverflow(obj, &overflow);
486 if (overflow) {
487 /* XXX: could be cute and give a different
488 message for overflow == -1 */
489 PyErr_SetString(PyExc_OverflowError,
490 "Python int too large to convert to C long");
491 }
492 return result;
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +0000493}
494
Serhiy Storchaka95949422013-08-27 19:40:23 +0300495/* Get a C int from an int object or any object that has an __int__
Serhiy Storchaka78980432013-01-15 01:12:17 +0200496 method. Return -1 and set an error if overflow occurs. */
497
498int
499_PyLong_AsInt(PyObject *obj)
500{
501 int overflow;
502 long result = PyLong_AsLongAndOverflow(obj, &overflow);
503 if (overflow || result > INT_MAX || result < INT_MIN) {
504 /* XXX: could be cute and give a different
505 message for overflow == -1 */
506 PyErr_SetString(PyExc_OverflowError,
507 "Python int too large to convert to C int");
508 return -1;
509 }
510 return (int)result;
511}
512
Serhiy Storchaka95949422013-08-27 19:40:23 +0300513/* Get a Py_ssize_t from an int object.
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000514 Returns -1 and sets an error condition if overflow occurs. */
515
516Py_ssize_t
Guido van Rossumddefaf32007-01-14 03:31:43 +0000517PyLong_AsSsize_t(PyObject *vv) {
Antoine Pitrou9ed5f272013-08-13 20:18:52 +0200518 PyLongObject *v;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000519 size_t x, prev;
520 Py_ssize_t i;
521 int sign;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000522
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000523 if (vv == NULL) {
524 PyErr_BadInternalCall();
525 return -1;
526 }
527 if (!PyLong_Check(vv)) {
528 PyErr_SetString(PyExc_TypeError, "an integer is required");
529 return -1;
530 }
Mark Dickinsond59b4162010-03-13 11:34:40 +0000531
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000532 v = (PyLongObject *)vv;
533 i = Py_SIZE(v);
534 switch (i) {
535 case -1: return -(sdigit)v->ob_digit[0];
536 case 0: return 0;
537 case 1: return v->ob_digit[0];
538 }
539 sign = 1;
540 x = 0;
541 if (i < 0) {
542 sign = -1;
543 i = -(i);
544 }
545 while (--i >= 0) {
546 prev = x;
547 x = (x << PyLong_SHIFT) | v->ob_digit[i];
548 if ((x >> PyLong_SHIFT) != prev)
549 goto overflow;
550 }
551 /* Haven't lost any bits, but casting to a signed type requires
552 * extra care (see comment above).
553 */
554 if (x <= (size_t)PY_SSIZE_T_MAX) {
555 return (Py_ssize_t)x * sign;
556 }
557 else if (sign < 0 && x == PY_ABS_SSIZE_T_MIN) {
558 return PY_SSIZE_T_MIN;
559 }
560 /* else overflow */
Martin v. Löwis18e16552006-02-15 17:27:45 +0000561
Mark Dickinson22b20182010-05-10 21:27:53 +0000562 overflow:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000563 PyErr_SetString(PyExc_OverflowError,
564 "Python int too large to convert to C ssize_t");
565 return -1;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000566}
567
Serhiy Storchaka95949422013-08-27 19:40:23 +0300568/* Get a C unsigned long int from an int object.
Guido van Rossum53756b11997-01-03 17:14:46 +0000569 Returns -1 and sets an error condition if overflow occurs. */
570
571unsigned long
Tim Peters9f688bf2000-07-07 15:53:28 +0000572PyLong_AsUnsignedLong(PyObject *vv)
Guido van Rossum53756b11997-01-03 17:14:46 +0000573{
Antoine Pitrou9ed5f272013-08-13 20:18:52 +0200574 PyLongObject *v;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000575 unsigned long x, prev;
576 Py_ssize_t i;
Tim Peters5af4e6c2002-08-12 02:31:19 +0000577
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000578 if (vv == NULL) {
579 PyErr_BadInternalCall();
580 return (unsigned long)-1;
581 }
582 if (!PyLong_Check(vv)) {
583 PyErr_SetString(PyExc_TypeError, "an integer is required");
584 return (unsigned long)-1;
585 }
Mark Dickinsond59b4162010-03-13 11:34:40 +0000586
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000587 v = (PyLongObject *)vv;
588 i = Py_SIZE(v);
589 x = 0;
590 if (i < 0) {
591 PyErr_SetString(PyExc_OverflowError,
Mark Dickinson22b20182010-05-10 21:27:53 +0000592 "can't convert negative value to unsigned int");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000593 return (unsigned long) -1;
594 }
595 switch (i) {
596 case 0: return 0;
597 case 1: return v->ob_digit[0];
598 }
599 while (--i >= 0) {
600 prev = x;
601 x = (x << PyLong_SHIFT) | v->ob_digit[i];
602 if ((x >> PyLong_SHIFT) != prev) {
603 PyErr_SetString(PyExc_OverflowError,
Mark Dickinson02515f72013-08-03 12:08:22 +0100604 "Python int too large to convert "
Mark Dickinson22b20182010-05-10 21:27:53 +0000605 "to C unsigned long");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000606 return (unsigned long) -1;
607 }
608 }
609 return x;
Guido van Rossumddefaf32007-01-14 03:31:43 +0000610}
611
Serhiy Storchaka95949422013-08-27 19:40:23 +0300612/* Get a C size_t from an int object. Returns (size_t)-1 and sets
Stefan Krahb77c6c62011-09-12 16:22:47 +0200613 an error condition if overflow occurs. */
Guido van Rossumddefaf32007-01-14 03:31:43 +0000614
615size_t
616PyLong_AsSize_t(PyObject *vv)
617{
Antoine Pitrou9ed5f272013-08-13 20:18:52 +0200618 PyLongObject *v;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000619 size_t x, prev;
620 Py_ssize_t i;
Guido van Rossumddefaf32007-01-14 03:31:43 +0000621
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000622 if (vv == NULL) {
623 PyErr_BadInternalCall();
624 return (size_t) -1;
625 }
626 if (!PyLong_Check(vv)) {
627 PyErr_SetString(PyExc_TypeError, "an integer is required");
628 return (size_t)-1;
629 }
Mark Dickinsond59b4162010-03-13 11:34:40 +0000630
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000631 v = (PyLongObject *)vv;
632 i = Py_SIZE(v);
633 x = 0;
634 if (i < 0) {
635 PyErr_SetString(PyExc_OverflowError,
636 "can't convert negative value to size_t");
637 return (size_t) -1;
638 }
639 switch (i) {
640 case 0: return 0;
641 case 1: return v->ob_digit[0];
642 }
643 while (--i >= 0) {
644 prev = x;
645 x = (x << PyLong_SHIFT) | v->ob_digit[i];
646 if ((x >> PyLong_SHIFT) != prev) {
647 PyErr_SetString(PyExc_OverflowError,
648 "Python int too large to convert to C size_t");
Stefan Krahb77c6c62011-09-12 16:22:47 +0200649 return (size_t) -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000650 }
651 }
652 return x;
Guido van Rossum53756b11997-01-03 17:14:46 +0000653}
654
Serhiy Storchaka95949422013-08-27 19:40:23 +0300655/* Get a C unsigned long int from an int object, ignoring the high bits.
Thomas Hellera4ea6032003-04-17 18:55:45 +0000656 Returns -1 and sets an error condition if an error occurs. */
657
Guido van Rossumddefaf32007-01-14 03:31:43 +0000658static unsigned long
659_PyLong_AsUnsignedLongMask(PyObject *vv)
Thomas Hellera4ea6032003-04-17 18:55:45 +0000660{
Antoine Pitrou9ed5f272013-08-13 20:18:52 +0200661 PyLongObject *v;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000662 unsigned long x;
663 Py_ssize_t i;
664 int sign;
Thomas Hellera4ea6032003-04-17 18:55:45 +0000665
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000666 if (vv == NULL || !PyLong_Check(vv)) {
667 PyErr_BadInternalCall();
668 return (unsigned long) -1;
669 }
670 v = (PyLongObject *)vv;
671 i = Py_SIZE(v);
672 switch (i) {
673 case 0: return 0;
674 case 1: return v->ob_digit[0];
675 }
676 sign = 1;
677 x = 0;
678 if (i < 0) {
679 sign = -1;
680 i = -i;
681 }
682 while (--i >= 0) {
683 x = (x << PyLong_SHIFT) | v->ob_digit[i];
684 }
685 return x * sign;
Thomas Hellera4ea6032003-04-17 18:55:45 +0000686}
687
Guido van Rossumddefaf32007-01-14 03:31:43 +0000688unsigned long
Antoine Pitrou9ed5f272013-08-13 20:18:52 +0200689PyLong_AsUnsignedLongMask(PyObject *op)
Guido van Rossumddefaf32007-01-14 03:31:43 +0000690{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000691 PyLongObject *lo;
692 unsigned long val;
Guido van Rossumddefaf32007-01-14 03:31:43 +0000693
Serhiy Storchaka31a65542013-12-11 21:07:54 +0200694 if (op == NULL) {
695 PyErr_BadInternalCall();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000696 return (unsigned long)-1;
697 }
Guido van Rossumddefaf32007-01-14 03:31:43 +0000698
Serhiy Storchaka31a65542013-12-11 21:07:54 +0200699 if (PyLong_Check(op)) {
700 return _PyLong_AsUnsignedLongMask(op);
701 }
702
703 lo = _PyLong_FromNbInt(op);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000704 if (lo == NULL)
705 return (unsigned long)-1;
Serhiy Storchaka31a65542013-12-11 21:07:54 +0200706
707 val = _PyLong_AsUnsignedLongMask((PyObject *)lo);
708 Py_DECREF(lo);
709 return val;
Guido van Rossumddefaf32007-01-14 03:31:43 +0000710}
711
Tim Peters5b8132f2003-01-31 15:52:05 +0000712int
713_PyLong_Sign(PyObject *vv)
714{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000715 PyLongObject *v = (PyLongObject *)vv;
Tim Peters5b8132f2003-01-31 15:52:05 +0000716
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000717 assert(v != NULL);
718 assert(PyLong_Check(v));
Tim Peters5b8132f2003-01-31 15:52:05 +0000719
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000720 return Py_SIZE(v) == 0 ? 0 : (Py_SIZE(v) < 0 ? -1 : 1);
Tim Peters5b8132f2003-01-31 15:52:05 +0000721}
722
Serhiy Storchakab2e64f92016-11-08 20:34:22 +0200723/* bits_in_digit(d) returns the unique integer k such that 2**(k-1) <= d <
724 2**k if d is nonzero, else 0. */
725
726static const unsigned char BitLengthTable[32] = {
727 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
728 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
729};
730
731static int
732bits_in_digit(digit d)
733{
734 int d_bits = 0;
735 while (d >= 32) {
736 d_bits += 6;
737 d >>= 6;
738 }
739 d_bits += (int)BitLengthTable[d];
740 return d_bits;
741}
742
Tim Petersbaefd9e2003-01-28 20:37:45 +0000743size_t
744_PyLong_NumBits(PyObject *vv)
745{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000746 PyLongObject *v = (PyLongObject *)vv;
747 size_t result = 0;
748 Py_ssize_t ndigits;
Serhiy Storchakab2e64f92016-11-08 20:34:22 +0200749 int msd_bits;
Tim Petersbaefd9e2003-01-28 20:37:45 +0000750
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000751 assert(v != NULL);
752 assert(PyLong_Check(v));
Victor Stinner45e8e2f2014-05-14 17:24:35 +0200753 ndigits = Py_ABS(Py_SIZE(v));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000754 assert(ndigits == 0 || v->ob_digit[ndigits - 1] != 0);
755 if (ndigits > 0) {
756 digit msd = v->ob_digit[ndigits - 1];
Benjamin Peterson2f8bfef2016-09-07 09:26:18 -0700757 if ((size_t)(ndigits - 1) > SIZE_MAX / (size_t)PyLong_SHIFT)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000758 goto Overflow;
Mark Dickinsonfc9adb62012-10-06 18:50:02 +0100759 result = (size_t)(ndigits - 1) * (size_t)PyLong_SHIFT;
Serhiy Storchakab2e64f92016-11-08 20:34:22 +0200760 msd_bits = bits_in_digit(msd);
761 if (SIZE_MAX - msd_bits < result)
762 goto Overflow;
763 result += msd_bits;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000764 }
765 return result;
Tim Petersbaefd9e2003-01-28 20:37:45 +0000766
Mark Dickinson22b20182010-05-10 21:27:53 +0000767 Overflow:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000768 PyErr_SetString(PyExc_OverflowError, "int has too many bits "
769 "to express in a platform size_t");
770 return (size_t)-1;
Tim Petersbaefd9e2003-01-28 20:37:45 +0000771}
772
Tim Peters2a9b3672001-06-11 21:23:58 +0000773PyObject *
774_PyLong_FromByteArray(const unsigned char* bytes, size_t n,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000775 int little_endian, int is_signed)
Tim Peters2a9b3672001-06-11 21:23:58 +0000776{
Mark Dickinson22b20182010-05-10 21:27:53 +0000777 const unsigned char* pstartbyte; /* LSB of bytes */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000778 int incr; /* direction to move pstartbyte */
779 const unsigned char* pendbyte; /* MSB of bytes */
780 size_t numsignificantbytes; /* number of bytes that matter */
Serhiy Storchaka95949422013-08-27 19:40:23 +0300781 Py_ssize_t ndigits; /* number of Python int digits */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000782 PyLongObject* v; /* result */
783 Py_ssize_t idigit = 0; /* next free index in v->ob_digit */
Tim Peters2a9b3672001-06-11 21:23:58 +0000784
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000785 if (n == 0)
786 return PyLong_FromLong(0L);
Tim Peters2a9b3672001-06-11 21:23:58 +0000787
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000788 if (little_endian) {
789 pstartbyte = bytes;
790 pendbyte = bytes + n - 1;
791 incr = 1;
792 }
793 else {
794 pstartbyte = bytes + n - 1;
795 pendbyte = bytes;
796 incr = -1;
797 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000798
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000799 if (is_signed)
800 is_signed = *pendbyte >= 0x80;
Tim Peters2a9b3672001-06-11 21:23:58 +0000801
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000802 /* Compute numsignificantbytes. This consists of finding the most
Ezio Melotti13925002011-03-16 11:05:33 +0200803 significant byte. Leading 0 bytes are insignificant if the number
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000804 is positive, and leading 0xff bytes if negative. */
805 {
806 size_t i;
807 const unsigned char* p = pendbyte;
808 const int pincr = -incr; /* search MSB to LSB */
Martin Pantereb995702016-07-28 01:11:04 +0000809 const unsigned char insignificant = is_signed ? 0xff : 0x00;
Tim Peters2a9b3672001-06-11 21:23:58 +0000810
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000811 for (i = 0; i < n; ++i, p += pincr) {
Martin Pantereb995702016-07-28 01:11:04 +0000812 if (*p != insignificant)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000813 break;
814 }
815 numsignificantbytes = n - i;
816 /* 2's-comp is a bit tricky here, e.g. 0xff00 == -0x0100, so
817 actually has 2 significant bytes. OTOH, 0xff0001 ==
818 -0x00ffff, so we wouldn't *need* to bump it there; but we
819 do for 0xffff = -0x0001. To be safe without bothering to
820 check every case, bump it regardless. */
821 if (is_signed && numsignificantbytes < n)
822 ++numsignificantbytes;
823 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000824
Serhiy Storchaka95949422013-08-27 19:40:23 +0300825 /* How many Python int digits do we need? We have
826 8*numsignificantbytes bits, and each Python int digit has
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000827 PyLong_SHIFT bits, so it's the ceiling of the quotient. */
828 /* catch overflow before it happens */
829 if (numsignificantbytes > (PY_SSIZE_T_MAX - PyLong_SHIFT) / 8) {
830 PyErr_SetString(PyExc_OverflowError,
831 "byte array too long to convert to int");
832 return NULL;
833 }
834 ndigits = (numsignificantbytes * 8 + PyLong_SHIFT - 1) / PyLong_SHIFT;
835 v = _PyLong_New(ndigits);
836 if (v == NULL)
837 return NULL;
Tim Peters2a9b3672001-06-11 21:23:58 +0000838
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000839 /* Copy the bits over. The tricky parts are computing 2's-comp on
840 the fly for signed numbers, and dealing with the mismatch between
841 8-bit bytes and (probably) 15-bit Python digits.*/
842 {
843 size_t i;
844 twodigits carry = 1; /* for 2's-comp calculation */
845 twodigits accum = 0; /* sliding register */
846 unsigned int accumbits = 0; /* number of bits in accum */
847 const unsigned char* p = pstartbyte;
Tim Peters2a9b3672001-06-11 21:23:58 +0000848
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000849 for (i = 0; i < numsignificantbytes; ++i, p += incr) {
850 twodigits thisbyte = *p;
851 /* Compute correction for 2's comp, if needed. */
852 if (is_signed) {
853 thisbyte = (0xff ^ thisbyte) + carry;
854 carry = thisbyte >> 8;
855 thisbyte &= 0xff;
856 }
857 /* Because we're going LSB to MSB, thisbyte is
858 more significant than what's already in accum,
859 so needs to be prepended to accum. */
orenmn86aa2692017-03-06 10:42:47 +0200860 accum |= thisbyte << accumbits;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000861 accumbits += 8;
862 if (accumbits >= PyLong_SHIFT) {
863 /* There's enough to fill a Python digit. */
864 assert(idigit < ndigits);
Mark Dickinson22b20182010-05-10 21:27:53 +0000865 v->ob_digit[idigit] = (digit)(accum & PyLong_MASK);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000866 ++idigit;
867 accum >>= PyLong_SHIFT;
868 accumbits -= PyLong_SHIFT;
869 assert(accumbits < PyLong_SHIFT);
870 }
871 }
872 assert(accumbits < PyLong_SHIFT);
873 if (accumbits) {
874 assert(idigit < ndigits);
875 v->ob_digit[idigit] = (digit)accum;
876 ++idigit;
877 }
878 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000879
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000880 Py_SIZE(v) = is_signed ? -idigit : idigit;
881 return (PyObject *)long_normalize(v);
Tim Peters2a9b3672001-06-11 21:23:58 +0000882}
883
884int
885_PyLong_AsByteArray(PyLongObject* v,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000886 unsigned char* bytes, size_t n,
887 int little_endian, int is_signed)
Tim Peters2a9b3672001-06-11 21:23:58 +0000888{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000889 Py_ssize_t i; /* index into v->ob_digit */
Mark Dickinson22b20182010-05-10 21:27:53 +0000890 Py_ssize_t ndigits; /* |v->ob_size| */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000891 twodigits accum; /* sliding register */
Mark Dickinson22b20182010-05-10 21:27:53 +0000892 unsigned int accumbits; /* # bits in accum */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000893 int do_twos_comp; /* store 2's-comp? is_signed and v < 0 */
894 digit carry; /* for computing 2's-comp */
895 size_t j; /* # bytes filled */
896 unsigned char* p; /* pointer to next byte in bytes */
897 int pincr; /* direction to move p */
Tim Peters2a9b3672001-06-11 21:23:58 +0000898
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000899 assert(v != NULL && PyLong_Check(v));
Tim Peters2a9b3672001-06-11 21:23:58 +0000900
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000901 if (Py_SIZE(v) < 0) {
902 ndigits = -(Py_SIZE(v));
903 if (!is_signed) {
904 PyErr_SetString(PyExc_OverflowError,
Mark Dickinson22b20182010-05-10 21:27:53 +0000905 "can't convert negative int to unsigned");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000906 return -1;
907 }
908 do_twos_comp = 1;
909 }
910 else {
911 ndigits = Py_SIZE(v);
912 do_twos_comp = 0;
913 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000914
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000915 if (little_endian) {
916 p = bytes;
917 pincr = 1;
918 }
919 else {
920 p = bytes + n - 1;
921 pincr = -1;
922 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000923
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000924 /* Copy over all the Python digits.
925 It's crucial that every Python digit except for the MSD contribute
Serhiy Storchaka95949422013-08-27 19:40:23 +0300926 exactly PyLong_SHIFT bits to the total, so first assert that the int is
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000927 normalized. */
928 assert(ndigits == 0 || v->ob_digit[ndigits - 1] != 0);
929 j = 0;
930 accum = 0;
931 accumbits = 0;
932 carry = do_twos_comp ? 1 : 0;
933 for (i = 0; i < ndigits; ++i) {
934 digit thisdigit = v->ob_digit[i];
935 if (do_twos_comp) {
936 thisdigit = (thisdigit ^ PyLong_MASK) + carry;
937 carry = thisdigit >> PyLong_SHIFT;
938 thisdigit &= PyLong_MASK;
939 }
940 /* Because we're going LSB to MSB, thisdigit is more
941 significant than what's already in accum, so needs to be
942 prepended to accum. */
943 accum |= (twodigits)thisdigit << accumbits;
Tim Peters8bc84b42001-06-12 19:17:03 +0000944
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000945 /* The most-significant digit may be (probably is) at least
946 partly empty. */
947 if (i == ndigits - 1) {
948 /* Count # of sign bits -- they needn't be stored,
949 * although for signed conversion we need later to
950 * make sure at least one sign bit gets stored. */
Mark Dickinson22b20182010-05-10 21:27:53 +0000951 digit s = do_twos_comp ? thisdigit ^ PyLong_MASK : thisdigit;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000952 while (s != 0) {
953 s >>= 1;
954 accumbits++;
955 }
956 }
957 else
958 accumbits += PyLong_SHIFT;
Tim Peters8bc84b42001-06-12 19:17:03 +0000959
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000960 /* Store as many bytes as possible. */
961 while (accumbits >= 8) {
962 if (j >= n)
963 goto Overflow;
964 ++j;
965 *p = (unsigned char)(accum & 0xff);
966 p += pincr;
967 accumbits -= 8;
968 accum >>= 8;
969 }
970 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000971
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000972 /* Store the straggler (if any). */
973 assert(accumbits < 8);
974 assert(carry == 0); /* else do_twos_comp and *every* digit was 0 */
975 if (accumbits > 0) {
976 if (j >= n)
977 goto Overflow;
978 ++j;
979 if (do_twos_comp) {
980 /* Fill leading bits of the byte with sign bits
Serhiy Storchaka95949422013-08-27 19:40:23 +0300981 (appropriately pretending that the int had an
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000982 infinite supply of sign bits). */
983 accum |= (~(twodigits)0) << accumbits;
984 }
985 *p = (unsigned char)(accum & 0xff);
986 p += pincr;
987 }
988 else if (j == n && n > 0 && is_signed) {
989 /* The main loop filled the byte array exactly, so the code
990 just above didn't get to ensure there's a sign bit, and the
991 loop below wouldn't add one either. Make sure a sign bit
992 exists. */
993 unsigned char msb = *(p - pincr);
994 int sign_bit_set = msb >= 0x80;
995 assert(accumbits == 0);
996 if (sign_bit_set == do_twos_comp)
997 return 0;
998 else
999 goto Overflow;
1000 }
Tim Peters05607ad2001-06-13 21:01:27 +00001001
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001002 /* Fill remaining bytes with copies of the sign bit. */
1003 {
1004 unsigned char signbyte = do_twos_comp ? 0xffU : 0U;
1005 for ( ; j < n; ++j, p += pincr)
1006 *p = signbyte;
1007 }
Tim Peters05607ad2001-06-13 21:01:27 +00001008
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001009 return 0;
Tim Peters2a9b3672001-06-11 21:23:58 +00001010
Mark Dickinson22b20182010-05-10 21:27:53 +00001011 Overflow:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001012 PyErr_SetString(PyExc_OverflowError, "int too big to convert");
1013 return -1;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001014
Tim Peters2a9b3672001-06-11 21:23:58 +00001015}
1016
Serhiy Storchaka95949422013-08-27 19:40:23 +03001017/* Create a new int object from a C pointer */
Guido van Rossum78694d91998-09-18 14:14:13 +00001018
1019PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00001020PyLong_FromVoidPtr(void *p)
Guido van Rossum78694d91998-09-18 14:14:13 +00001021{
Mark Dickinson91044792012-10-18 19:21:43 +01001022#if SIZEOF_VOID_P <= SIZEOF_LONG
Benjamin Petersonca470632016-09-06 13:47:26 -07001023 return PyLong_FromUnsignedLong((unsigned long)(uintptr_t)p);
Mark Dickinson91044792012-10-18 19:21:43 +01001024#else
1025
Tim Peters70128a12001-06-16 08:48:40 +00001026#if SIZEOF_LONG_LONG < SIZEOF_VOID_P
Benjamin Petersonaf580df2016-09-06 10:46:49 -07001027# error "PyLong_FromVoidPtr: sizeof(long long) < sizeof(void*)"
Tim Peters70128a12001-06-16 08:48:40 +00001028#endif
Benjamin Petersonca470632016-09-06 13:47:26 -07001029 return PyLong_FromUnsignedLongLong((unsigned long long)(uintptr_t)p);
Mark Dickinson91044792012-10-18 19:21:43 +01001030#endif /* SIZEOF_VOID_P <= SIZEOF_LONG */
Tim Peters70128a12001-06-16 08:48:40 +00001031
Guido van Rossum78694d91998-09-18 14:14:13 +00001032}
1033
Serhiy Storchaka95949422013-08-27 19:40:23 +03001034/* Get a C pointer from an int object. */
Guido van Rossum78694d91998-09-18 14:14:13 +00001035
1036void *
Tim Peters9f688bf2000-07-07 15:53:28 +00001037PyLong_AsVoidPtr(PyObject *vv)
Guido van Rossum78694d91998-09-18 14:14:13 +00001038{
Tim Peters70128a12001-06-16 08:48:40 +00001039#if SIZEOF_VOID_P <= SIZEOF_LONG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001040 long x;
Guido van Rossum78694d91998-09-18 14:14:13 +00001041
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001042 if (PyLong_Check(vv) && _PyLong_Sign(vv) < 0)
1043 x = PyLong_AsLong(vv);
1044 else
1045 x = PyLong_AsUnsignedLong(vv);
Guido van Rossum78694d91998-09-18 14:14:13 +00001046#else
Tim Peters70128a12001-06-16 08:48:40 +00001047
Tim Peters70128a12001-06-16 08:48:40 +00001048#if SIZEOF_LONG_LONG < SIZEOF_VOID_P
Benjamin Petersonaf580df2016-09-06 10:46:49 -07001049# error "PyLong_AsVoidPtr: sizeof(long long) < sizeof(void*)"
Tim Peters70128a12001-06-16 08:48:40 +00001050#endif
Benjamin Petersonaf580df2016-09-06 10:46:49 -07001051 long long x;
Guido van Rossum78694d91998-09-18 14:14:13 +00001052
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001053 if (PyLong_Check(vv) && _PyLong_Sign(vv) < 0)
1054 x = PyLong_AsLongLong(vv);
1055 else
1056 x = PyLong_AsUnsignedLongLong(vv);
Tim Peters70128a12001-06-16 08:48:40 +00001057
1058#endif /* SIZEOF_VOID_P <= SIZEOF_LONG */
Guido van Rossum78694d91998-09-18 14:14:13 +00001059
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001060 if (x == -1 && PyErr_Occurred())
1061 return NULL;
1062 return (void *)x;
Guido van Rossum78694d91998-09-18 14:14:13 +00001063}
1064
Benjamin Petersonaf580df2016-09-06 10:46:49 -07001065/* Initial long long support by Chris Herborth (chrish@qnx.com), later
Tim Petersd1a7da62001-06-13 00:35:57 +00001066 * rewritten to use the newer PyLong_{As,From}ByteArray API.
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001067 */
1068
Benjamin Petersonaf580df2016-09-06 10:46:49 -07001069#define PY_ABS_LLONG_MIN (0-(unsigned long long)PY_LLONG_MIN)
Tim Petersd1a7da62001-06-13 00:35:57 +00001070
Benjamin Petersonaf580df2016-09-06 10:46:49 -07001071/* Create a new int object from a C long long int. */
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001072
1073PyObject *
Benjamin Petersonaf580df2016-09-06 10:46:49 -07001074PyLong_FromLongLong(long long ival)
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001075{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001076 PyLongObject *v;
Benjamin Petersonaf580df2016-09-06 10:46:49 -07001077 unsigned long long abs_ival;
1078 unsigned long long t; /* unsigned so >> doesn't propagate sign bit */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001079 int ndigits = 0;
1080 int negative = 0;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001081
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001082 CHECK_SMALL_INT(ival);
1083 if (ival < 0) {
1084 /* avoid signed overflow on negation; see comments
1085 in PyLong_FromLong above. */
Benjamin Petersonaf580df2016-09-06 10:46:49 -07001086 abs_ival = (unsigned long long)(-1-ival) + 1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001087 negative = 1;
1088 }
1089 else {
Benjamin Petersonaf580df2016-09-06 10:46:49 -07001090 abs_ival = (unsigned long long)ival;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001091 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00001092
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001093 /* Count the number of Python digits.
1094 We used to pick 5 ("big enough for anything"), but that's a
1095 waste of time and space given that 5*15 = 75 bits are rarely
1096 needed. */
1097 t = abs_ival;
1098 while (t) {
1099 ++ndigits;
1100 t >>= PyLong_SHIFT;
1101 }
1102 v = _PyLong_New(ndigits);
1103 if (v != NULL) {
1104 digit *p = v->ob_digit;
1105 Py_SIZE(v) = negative ? -ndigits : ndigits;
1106 t = abs_ival;
1107 while (t) {
1108 *p++ = (digit)(t & PyLong_MASK);
1109 t >>= PyLong_SHIFT;
1110 }
1111 }
1112 return (PyObject *)v;
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001113}
1114
Benjamin Petersonaf580df2016-09-06 10:46:49 -07001115/* Create a new int object from a C unsigned long long int. */
Tim Petersd1a7da62001-06-13 00:35:57 +00001116
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001117PyObject *
Benjamin Petersonaf580df2016-09-06 10:46:49 -07001118PyLong_FromUnsignedLongLong(unsigned long long ival)
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001119{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001120 PyLongObject *v;
Benjamin Petersonaf580df2016-09-06 10:46:49 -07001121 unsigned long long t;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001122 int ndigits = 0;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001123
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001124 if (ival < PyLong_BASE)
1125 return PyLong_FromLong((long)ival);
1126 /* Count the number of Python digits. */
orenmn86aa2692017-03-06 10:42:47 +02001127 t = ival;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001128 while (t) {
1129 ++ndigits;
1130 t >>= PyLong_SHIFT;
1131 }
1132 v = _PyLong_New(ndigits);
1133 if (v != NULL) {
1134 digit *p = v->ob_digit;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001135 while (ival) {
1136 *p++ = (digit)(ival & PyLong_MASK);
1137 ival >>= PyLong_SHIFT;
1138 }
1139 }
1140 return (PyObject *)v;
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001141}
1142
Serhiy Storchaka95949422013-08-27 19:40:23 +03001143/* Create a new int object from a C Py_ssize_t. */
Martin v. Löwis18e16552006-02-15 17:27:45 +00001144
1145PyObject *
Guido van Rossumddefaf32007-01-14 03:31:43 +00001146PyLong_FromSsize_t(Py_ssize_t ival)
Martin v. Löwis18e16552006-02-15 17:27:45 +00001147{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001148 PyLongObject *v;
1149 size_t abs_ival;
1150 size_t t; /* unsigned so >> doesn't propagate sign bit */
1151 int ndigits = 0;
1152 int negative = 0;
Mark Dickinson7ab6be22008-04-15 21:42:42 +00001153
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001154 CHECK_SMALL_INT(ival);
1155 if (ival < 0) {
1156 /* avoid signed overflow when ival = SIZE_T_MIN */
1157 abs_ival = (size_t)(-1-ival)+1;
1158 negative = 1;
1159 }
1160 else {
1161 abs_ival = (size_t)ival;
1162 }
Mark Dickinson7ab6be22008-04-15 21:42:42 +00001163
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001164 /* Count the number of Python digits. */
1165 t = abs_ival;
1166 while (t) {
1167 ++ndigits;
1168 t >>= PyLong_SHIFT;
1169 }
1170 v = _PyLong_New(ndigits);
1171 if (v != NULL) {
1172 digit *p = v->ob_digit;
1173 Py_SIZE(v) = negative ? -ndigits : ndigits;
1174 t = abs_ival;
1175 while (t) {
1176 *p++ = (digit)(t & PyLong_MASK);
1177 t >>= PyLong_SHIFT;
1178 }
1179 }
1180 return (PyObject *)v;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001181}
1182
Serhiy Storchaka95949422013-08-27 19:40:23 +03001183/* Create a new int object from a C size_t. */
Martin v. Löwis18e16552006-02-15 17:27:45 +00001184
1185PyObject *
Guido van Rossumddefaf32007-01-14 03:31:43 +00001186PyLong_FromSize_t(size_t ival)
Martin v. Löwis18e16552006-02-15 17:27:45 +00001187{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001188 PyLongObject *v;
1189 size_t t;
1190 int ndigits = 0;
Mark Dickinson7ab6be22008-04-15 21:42:42 +00001191
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001192 if (ival < PyLong_BASE)
1193 return PyLong_FromLong((long)ival);
1194 /* Count the number of Python digits. */
1195 t = ival;
1196 while (t) {
1197 ++ndigits;
1198 t >>= PyLong_SHIFT;
1199 }
1200 v = _PyLong_New(ndigits);
1201 if (v != NULL) {
1202 digit *p = v->ob_digit;
1203 Py_SIZE(v) = ndigits;
1204 while (ival) {
1205 *p++ = (digit)(ival & PyLong_MASK);
1206 ival >>= PyLong_SHIFT;
1207 }
1208 }
1209 return (PyObject *)v;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001210}
1211
Serhiy Storchaka95949422013-08-27 19:40:23 +03001212/* Get a C long long int from an int object or any object that has an
Mark Dickinson8d48b432011-10-23 20:47:14 +01001213 __int__ method. Return -1 and set an error if overflow occurs. */
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001214
Benjamin Petersonaf580df2016-09-06 10:46:49 -07001215long long
Tim Peters9f688bf2000-07-07 15:53:28 +00001216PyLong_AsLongLong(PyObject *vv)
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001217{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001218 PyLongObject *v;
Benjamin Petersonaf580df2016-09-06 10:46:49 -07001219 long long bytes;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001220 int res;
Serhiy Storchaka31a65542013-12-11 21:07:54 +02001221 int do_decref = 0; /* if nb_int was called */
Tim Petersd1a7da62001-06-13 00:35:57 +00001222
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001223 if (vv == NULL) {
1224 PyErr_BadInternalCall();
1225 return -1;
1226 }
Serhiy Storchaka31a65542013-12-11 21:07:54 +02001227
1228 if (PyLong_Check(vv)) {
1229 v = (PyLongObject *)vv;
1230 }
1231 else {
1232 v = _PyLong_FromNbInt(vv);
1233 if (v == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001234 return -1;
Serhiy Storchaka31a65542013-12-11 21:07:54 +02001235 do_decref = 1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001236 }
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001237
Serhiy Storchaka31a65542013-12-11 21:07:54 +02001238 res = 0;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001239 switch(Py_SIZE(v)) {
Serhiy Storchaka31a65542013-12-11 21:07:54 +02001240 case -1:
1241 bytes = -(sdigit)v->ob_digit[0];
1242 break;
1243 case 0:
1244 bytes = 0;
1245 break;
1246 case 1:
1247 bytes = v->ob_digit[0];
1248 break;
1249 default:
1250 res = _PyLong_AsByteArray((PyLongObject *)v, (unsigned char *)&bytes,
Serhiy Storchakac4f32122013-12-11 21:26:36 +02001251 SIZEOF_LONG_LONG, PY_LITTLE_ENDIAN, 1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001252 }
Serhiy Storchaka31a65542013-12-11 21:07:54 +02001253 if (do_decref) {
1254 Py_DECREF(v);
1255 }
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001256
Benjamin Petersonaf580df2016-09-06 10:46:49 -07001257 /* Plan 9 can't handle long long in ? : expressions */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001258 if (res < 0)
Benjamin Petersonaf580df2016-09-06 10:46:49 -07001259 return (long long)-1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001260 else
1261 return bytes;
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001262}
1263
Benjamin Petersonaf580df2016-09-06 10:46:49 -07001264/* Get a C unsigned long long int from an int object.
Tim Petersd1a7da62001-06-13 00:35:57 +00001265 Return -1 and set an error if overflow occurs. */
1266
Benjamin Petersonaf580df2016-09-06 10:46:49 -07001267unsigned long long
Tim Peters9f688bf2000-07-07 15:53:28 +00001268PyLong_AsUnsignedLongLong(PyObject *vv)
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001269{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001270 PyLongObject *v;
Benjamin Petersonaf580df2016-09-06 10:46:49 -07001271 unsigned long long bytes;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001272 int res;
Tim Petersd1a7da62001-06-13 00:35:57 +00001273
Nadeem Vawda3d5881e2011-09-07 21:40:26 +02001274 if (vv == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001275 PyErr_BadInternalCall();
Benjamin Petersonaf580df2016-09-06 10:46:49 -07001276 return (unsigned long long)-1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001277 }
Nadeem Vawda3d5881e2011-09-07 21:40:26 +02001278 if (!PyLong_Check(vv)) {
1279 PyErr_SetString(PyExc_TypeError, "an integer is required");
Benjamin Petersonaf580df2016-09-06 10:46:49 -07001280 return (unsigned long long)-1;
Nadeem Vawda3d5881e2011-09-07 21:40:26 +02001281 }
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001282
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001283 v = (PyLongObject*)vv;
1284 switch(Py_SIZE(v)) {
1285 case 0: return 0;
1286 case 1: return v->ob_digit[0];
1287 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00001288
Mark Dickinson22b20182010-05-10 21:27:53 +00001289 res = _PyLong_AsByteArray((PyLongObject *)vv, (unsigned char *)&bytes,
Christian Heimes743e0cd2012-10-17 23:52:17 +02001290 SIZEOF_LONG_LONG, PY_LITTLE_ENDIAN, 0);
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001291
Benjamin Petersonaf580df2016-09-06 10:46:49 -07001292 /* Plan 9 can't handle long long in ? : expressions */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001293 if (res < 0)
Benjamin Petersonaf580df2016-09-06 10:46:49 -07001294 return (unsigned long long)res;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001295 else
1296 return bytes;
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001297}
Tim Petersd1a7da62001-06-13 00:35:57 +00001298
Serhiy Storchaka95949422013-08-27 19:40:23 +03001299/* Get a C unsigned long int from an int object, ignoring the high bits.
Thomas Hellera4ea6032003-04-17 18:55:45 +00001300 Returns -1 and sets an error condition if an error occurs. */
1301
Benjamin Petersonaf580df2016-09-06 10:46:49 -07001302static unsigned long long
Guido van Rossumddefaf32007-01-14 03:31:43 +00001303_PyLong_AsUnsignedLongLongMask(PyObject *vv)
Thomas Hellera4ea6032003-04-17 18:55:45 +00001304{
Antoine Pitrou9ed5f272013-08-13 20:18:52 +02001305 PyLongObject *v;
Benjamin Petersonaf580df2016-09-06 10:46:49 -07001306 unsigned long long x;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001307 Py_ssize_t i;
1308 int sign;
Thomas Hellera4ea6032003-04-17 18:55:45 +00001309
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001310 if (vv == NULL || !PyLong_Check(vv)) {
1311 PyErr_BadInternalCall();
1312 return (unsigned long) -1;
1313 }
1314 v = (PyLongObject *)vv;
1315 switch(Py_SIZE(v)) {
1316 case 0: return 0;
1317 case 1: return v->ob_digit[0];
1318 }
1319 i = Py_SIZE(v);
1320 sign = 1;
1321 x = 0;
1322 if (i < 0) {
1323 sign = -1;
1324 i = -i;
1325 }
1326 while (--i >= 0) {
1327 x = (x << PyLong_SHIFT) | v->ob_digit[i];
1328 }
1329 return x * sign;
Thomas Hellera4ea6032003-04-17 18:55:45 +00001330}
Guido van Rossumddefaf32007-01-14 03:31:43 +00001331
Benjamin Petersonaf580df2016-09-06 10:46:49 -07001332unsigned long long
Antoine Pitrou9ed5f272013-08-13 20:18:52 +02001333PyLong_AsUnsignedLongLongMask(PyObject *op)
Guido van Rossumddefaf32007-01-14 03:31:43 +00001334{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001335 PyLongObject *lo;
Benjamin Petersonaf580df2016-09-06 10:46:49 -07001336 unsigned long long val;
Guido van Rossumddefaf32007-01-14 03:31:43 +00001337
Serhiy Storchaka31a65542013-12-11 21:07:54 +02001338 if (op == NULL) {
1339 PyErr_BadInternalCall();
1340 return (unsigned long)-1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001341 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00001342
Serhiy Storchaka31a65542013-12-11 21:07:54 +02001343 if (PyLong_Check(op)) {
1344 return _PyLong_AsUnsignedLongLongMask(op);
1345 }
1346
1347 lo = _PyLong_FromNbInt(op);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001348 if (lo == NULL)
Benjamin Petersonaf580df2016-09-06 10:46:49 -07001349 return (unsigned long long)-1;
Serhiy Storchaka31a65542013-12-11 21:07:54 +02001350
1351 val = _PyLong_AsUnsignedLongLongMask((PyObject *)lo);
1352 Py_DECREF(lo);
1353 return val;
Guido van Rossumddefaf32007-01-14 03:31:43 +00001354}
Tim Petersd1a7da62001-06-13 00:35:57 +00001355
Serhiy Storchaka95949422013-08-27 19:40:23 +03001356/* Get a C long long int from an int object or any object that has an
Mark Dickinson8d48b432011-10-23 20:47:14 +01001357 __int__ method.
Mark Dickinson93f562c2010-01-30 10:30:15 +00001358
Mark Dickinson8d48b432011-10-23 20:47:14 +01001359 On overflow, return -1 and set *overflow to 1 or -1 depending on the sign of
1360 the result. Otherwise *overflow is 0.
1361
1362 For other errors (e.g., TypeError), return -1 and set an error condition.
1363 In this case *overflow will be 0.
Mark Dickinson93f562c2010-01-30 10:30:15 +00001364*/
1365
Benjamin Petersonaf580df2016-09-06 10:46:49 -07001366long long
Mark Dickinson93f562c2010-01-30 10:30:15 +00001367PyLong_AsLongLongAndOverflow(PyObject *vv, int *overflow)
1368{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001369 /* This version by Tim Peters */
Antoine Pitrou9ed5f272013-08-13 20:18:52 +02001370 PyLongObject *v;
Benjamin Petersonaf580df2016-09-06 10:46:49 -07001371 unsigned long long x, prev;
1372 long long res;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001373 Py_ssize_t i;
1374 int sign;
1375 int do_decref = 0; /* if nb_int was called */
Mark Dickinson93f562c2010-01-30 10:30:15 +00001376
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001377 *overflow = 0;
1378 if (vv == NULL) {
1379 PyErr_BadInternalCall();
1380 return -1;
1381 }
Mark Dickinson93f562c2010-01-30 10:30:15 +00001382
Serhiy Storchaka31a65542013-12-11 21:07:54 +02001383 if (PyLong_Check(vv)) {
1384 v = (PyLongObject *)vv;
1385 }
1386 else {
1387 v = _PyLong_FromNbInt(vv);
1388 if (v == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001389 return -1;
1390 do_decref = 1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001391 }
Mark Dickinson93f562c2010-01-30 10:30:15 +00001392
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001393 res = -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001394 i = Py_SIZE(v);
Mark Dickinson93f562c2010-01-30 10:30:15 +00001395
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001396 switch (i) {
1397 case -1:
1398 res = -(sdigit)v->ob_digit[0];
1399 break;
1400 case 0:
1401 res = 0;
1402 break;
1403 case 1:
1404 res = v->ob_digit[0];
1405 break;
1406 default:
1407 sign = 1;
1408 x = 0;
1409 if (i < 0) {
1410 sign = -1;
1411 i = -(i);
1412 }
1413 while (--i >= 0) {
1414 prev = x;
1415 x = (x << PyLong_SHIFT) + v->ob_digit[i];
1416 if ((x >> PyLong_SHIFT) != prev) {
1417 *overflow = sign;
1418 goto exit;
1419 }
1420 }
1421 /* Haven't lost any bits, but casting to long requires extra
1422 * care (see comment above).
1423 */
Benjamin Petersonaf580df2016-09-06 10:46:49 -07001424 if (x <= (unsigned long long)PY_LLONG_MAX) {
1425 res = (long long)x * sign;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001426 }
1427 else if (sign < 0 && x == PY_ABS_LLONG_MIN) {
1428 res = PY_LLONG_MIN;
1429 }
1430 else {
1431 *overflow = sign;
1432 /* res is already set to -1 */
1433 }
1434 }
Mark Dickinson22b20182010-05-10 21:27:53 +00001435 exit:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001436 if (do_decref) {
Serhiy Storchaka31a65542013-12-11 21:07:54 +02001437 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001438 }
1439 return res;
Mark Dickinson93f562c2010-01-30 10:30:15 +00001440}
1441
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00001442#define CHECK_BINOP(v,w) \
1443 do { \
Brian Curtindfc80e32011-08-10 20:28:54 -05001444 if (!PyLong_Check(v) || !PyLong_Check(w)) \
1445 Py_RETURN_NOTIMPLEMENTED; \
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00001446 } while(0)
Neil Schemenauerba872e22001-01-04 01:46:03 +00001447
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;
Victor Stinner1285e5c2015-10-14 12:10:20 +02001590 PyObject *str = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001591 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;
Mark Dickinson4e1de162016-08-29 17:26:43 +01001594 int d;
Victor Stinnerd3f08822012-05-29 12:57:52 +02001595 enum PyUnicode_Kind kind;
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001596
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001597 a = (PyLongObject *)aa;
1598 if (a == NULL || !PyLong_Check(a)) {
1599 PyErr_BadInternalCall();
Victor Stinnerd3f08822012-05-29 12:57:52 +02001600 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001601 }
Victor Stinner45e8e2f2014-05-14 17:24:35 +02001602 size_a = Py_ABS(Py_SIZE(a));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001603 negative = Py_SIZE(a) < 0;
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001604
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001605 /* quick and dirty upper bound for the number of digits
1606 required to express a in base _PyLong_DECIMAL_BASE:
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001607
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001608 #digits = 1 + floor(log2(a) / log2(_PyLong_DECIMAL_BASE))
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001609
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001610 But log2(a) < size_a * PyLong_SHIFT, and
1611 log2(_PyLong_DECIMAL_BASE) = log2(10) * _PyLong_DECIMAL_SHIFT
Mark Dickinson4e1de162016-08-29 17:26:43 +01001612 > 3.3 * _PyLong_DECIMAL_SHIFT
1613
1614 size_a * PyLong_SHIFT / (3.3 * _PyLong_DECIMAL_SHIFT) =
1615 size_a + size_a / d < size_a + size_a / floor(d),
1616 where d = (3.3 * _PyLong_DECIMAL_SHIFT) /
1617 (PyLong_SHIFT - 3.3 * _PyLong_DECIMAL_SHIFT)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001618 */
Mark Dickinson4e1de162016-08-29 17:26:43 +01001619 d = (33 * _PyLong_DECIMAL_SHIFT) /
1620 (10 * PyLong_SHIFT - 33 * _PyLong_DECIMAL_SHIFT);
1621 assert(size_a < PY_SSIZE_T_MAX/2);
1622 size = 1 + size_a + size_a / d;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001623 scratch = _PyLong_New(size);
1624 if (scratch == NULL)
Victor Stinnerd3f08822012-05-29 12:57:52 +02001625 return -1;
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001626
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001627 /* convert array of base _PyLong_BASE digits in pin to an array of
1628 base _PyLong_DECIMAL_BASE digits in pout, following Knuth (TAOCP,
1629 Volume 2 (3rd edn), section 4.4, Method 1b). */
1630 pin = a->ob_digit;
1631 pout = scratch->ob_digit;
1632 size = 0;
1633 for (i = size_a; --i >= 0; ) {
1634 digit hi = pin[i];
1635 for (j = 0; j < size; j++) {
1636 twodigits z = (twodigits)pout[j] << PyLong_SHIFT | hi;
1637 hi = (digit)(z / _PyLong_DECIMAL_BASE);
1638 pout[j] = (digit)(z - (twodigits)hi *
1639 _PyLong_DECIMAL_BASE);
1640 }
1641 while (hi) {
1642 pout[size++] = hi % _PyLong_DECIMAL_BASE;
1643 hi /= _PyLong_DECIMAL_BASE;
1644 }
1645 /* check for keyboard interrupt */
1646 SIGCHECK({
Mark Dickinson22b20182010-05-10 21:27:53 +00001647 Py_DECREF(scratch);
Victor Stinnerd3f08822012-05-29 12:57:52 +02001648 return -1;
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00001649 });
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001650 }
1651 /* pout should have at least one digit, so that the case when a = 0
1652 works correctly */
1653 if (size == 0)
1654 pout[size++] = 0;
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001655
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001656 /* calculate exact length of output string, and allocate */
1657 strlen = negative + 1 + (size - 1) * _PyLong_DECIMAL_SHIFT;
1658 tenpow = 10;
1659 rem = pout[size-1];
1660 while (rem >= tenpow) {
1661 tenpow *= 10;
1662 strlen++;
1663 }
Victor Stinnerd3f08822012-05-29 12:57:52 +02001664 if (writer) {
Christian Heimes110ac162012-09-10 02:51:27 +02001665 if (_PyUnicodeWriter_Prepare(writer, strlen, '9') == -1) {
1666 Py_DECREF(scratch);
Victor Stinnerd3f08822012-05-29 12:57:52 +02001667 return -1;
Christian Heimes110ac162012-09-10 02:51:27 +02001668 }
Victor Stinnerd3f08822012-05-29 12:57:52 +02001669 kind = writer->kind;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001670 }
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001671 else if (bytes_writer) {
1672 *bytes_str = _PyBytesWriter_Prepare(bytes_writer, *bytes_str, strlen);
1673 if (*bytes_str == NULL) {
1674 Py_DECREF(scratch);
1675 return -1;
1676 }
1677 }
Victor Stinnerd3f08822012-05-29 12:57:52 +02001678 else {
1679 str = PyUnicode_New(strlen, '9');
1680 if (str == NULL) {
1681 Py_DECREF(scratch);
1682 return -1;
1683 }
1684 kind = PyUnicode_KIND(str);
1685 }
1686
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001687#define WRITE_DIGITS(p) \
Victor Stinnerd3f08822012-05-29 12:57:52 +02001688 do { \
Victor Stinnerd3f08822012-05-29 12:57:52 +02001689 /* pout[0] through pout[size-2] contribute exactly \
1690 _PyLong_DECIMAL_SHIFT digits each */ \
1691 for (i=0; i < size - 1; i++) { \
1692 rem = pout[i]; \
1693 for (j = 0; j < _PyLong_DECIMAL_SHIFT; j++) { \
1694 *--p = '0' + rem % 10; \
1695 rem /= 10; \
1696 } \
1697 } \
1698 /* pout[size-1]: always produce at least one decimal digit */ \
1699 rem = pout[i]; \
1700 do { \
1701 *--p = '0' + rem % 10; \
1702 rem /= 10; \
1703 } while (rem != 0); \
1704 \
1705 /* and sign */ \
1706 if (negative) \
1707 *--p = '-'; \
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001708 } while (0)
1709
1710#define WRITE_UNICODE_DIGITS(TYPE) \
1711 do { \
1712 if (writer) \
1713 p = (TYPE*)PyUnicode_DATA(writer->buffer) + writer->pos + strlen; \
1714 else \
1715 p = (TYPE*)PyUnicode_DATA(str) + strlen; \
1716 \
1717 WRITE_DIGITS(p); \
Victor Stinnerd3f08822012-05-29 12:57:52 +02001718 \
1719 /* check we've counted correctly */ \
1720 if (writer) \
1721 assert(p == ((TYPE*)PyUnicode_DATA(writer->buffer) + writer->pos)); \
1722 else \
1723 assert(p == (TYPE*)PyUnicode_DATA(str)); \
1724 } while (0)
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001725
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001726 /* fill the string right-to-left */
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001727 if (bytes_writer) {
1728 char *p = *bytes_str + strlen;
1729 WRITE_DIGITS(p);
1730 assert(p == *bytes_str);
1731 }
1732 else if (kind == PyUnicode_1BYTE_KIND) {
Victor Stinnerd3f08822012-05-29 12:57:52 +02001733 Py_UCS1 *p;
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001734 WRITE_UNICODE_DIGITS(Py_UCS1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001735 }
Victor Stinnerd3f08822012-05-29 12:57:52 +02001736 else if (kind == PyUnicode_2BYTE_KIND) {
1737 Py_UCS2 *p;
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001738 WRITE_UNICODE_DIGITS(Py_UCS2);
Victor Stinnerd3f08822012-05-29 12:57:52 +02001739 }
1740 else {
Victor Stinnerd3f08822012-05-29 12:57:52 +02001741 Py_UCS4 *p;
Victor Stinnere577ab32012-05-29 18:51:10 +02001742 assert (kind == PyUnicode_4BYTE_KIND);
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001743 WRITE_UNICODE_DIGITS(Py_UCS4);
Victor Stinnerd3f08822012-05-29 12:57:52 +02001744 }
1745#undef WRITE_DIGITS
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001746#undef WRITE_UNICODE_DIGITS
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001747
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001748 Py_DECREF(scratch);
Victor Stinnerd3f08822012-05-29 12:57:52 +02001749 if (writer) {
1750 writer->pos += strlen;
1751 }
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001752 else if (bytes_writer) {
1753 (*bytes_str) += strlen;
1754 }
Victor Stinnerd3f08822012-05-29 12:57:52 +02001755 else {
1756 assert(_PyUnicode_CheckConsistency(str, 1));
1757 *p_output = (PyObject *)str;
1758 }
1759 return 0;
1760}
1761
1762static PyObject *
1763long_to_decimal_string(PyObject *aa)
1764{
1765 PyObject *v;
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001766 if (long_to_decimal_string_internal(aa, &v, NULL, NULL, NULL) == -1)
Victor Stinnerd3f08822012-05-29 12:57:52 +02001767 return NULL;
1768 return v;
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001769}
1770
Serhiy Storchaka95949422013-08-27 19:40:23 +03001771/* Convert an int object to a string, using a given conversion base,
Victor Stinnerd3f08822012-05-29 12:57:52 +02001772 which should be one of 2, 8 or 16. Return a string object.
1773 If base is 2, 8 or 16, add the proper prefix '0b', '0o' or '0x'
1774 if alternate is nonzero. */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001775
Victor Stinnerd3f08822012-05-29 12:57:52 +02001776static int
1777long_format_binary(PyObject *aa, int base, int alternate,
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001778 PyObject **p_output, _PyUnicodeWriter *writer,
1779 _PyBytesWriter *bytes_writer, char **bytes_str)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001780{
Antoine Pitrou9ed5f272013-08-13 20:18:52 +02001781 PyLongObject *a = (PyLongObject *)aa;
Victor Stinner1285e5c2015-10-14 12:10:20 +02001782 PyObject *v = NULL;
Mark Dickinsone2846542012-04-20 21:21:24 +01001783 Py_ssize_t sz;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001784 Py_ssize_t size_a;
Victor Stinnerd3f08822012-05-29 12:57:52 +02001785 enum PyUnicode_Kind kind;
Mark Dickinsone2846542012-04-20 21:21:24 +01001786 int negative;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001787 int bits;
Guido van Rossume32e0141992-01-19 16:31:05 +00001788
Victor Stinnerd3f08822012-05-29 12:57:52 +02001789 assert(base == 2 || base == 8 || base == 16);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001790 if (a == NULL || !PyLong_Check(a)) {
1791 PyErr_BadInternalCall();
Victor Stinnerd3f08822012-05-29 12:57:52 +02001792 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001793 }
Victor Stinner45e8e2f2014-05-14 17:24:35 +02001794 size_a = Py_ABS(Py_SIZE(a));
Mark Dickinsone2846542012-04-20 21:21:24 +01001795 negative = Py_SIZE(a) < 0;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001796
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001797 /* Compute a rough upper bound for the length of the string */
1798 switch (base) {
1799 case 16:
1800 bits = 4;
1801 break;
1802 case 8:
1803 bits = 3;
1804 break;
1805 case 2:
1806 bits = 1;
1807 break;
1808 default:
Barry Warsawb2e57942017-09-14 18:13:16 -07001809 Py_UNREACHABLE();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001810 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00001811
Mark Dickinsone2846542012-04-20 21:21:24 +01001812 /* Compute exact length 'sz' of output string. */
1813 if (size_a == 0) {
Victor Stinnerd3f08822012-05-29 12:57:52 +02001814 sz = 1;
Mark Dickinsone2846542012-04-20 21:21:24 +01001815 }
1816 else {
1817 Py_ssize_t size_a_in_bits;
1818 /* Ensure overflow doesn't occur during computation of sz. */
1819 if (size_a > (PY_SSIZE_T_MAX - 3) / PyLong_SHIFT) {
1820 PyErr_SetString(PyExc_OverflowError,
Mark Dickinson02515f72013-08-03 12:08:22 +01001821 "int too large to format");
Victor Stinnerd3f08822012-05-29 12:57:52 +02001822 return -1;
Mark Dickinsone2846542012-04-20 21:21:24 +01001823 }
1824 size_a_in_bits = (size_a - 1) * PyLong_SHIFT +
1825 bits_in_digit(a->ob_digit[size_a - 1]);
Victor Stinnerd3f08822012-05-29 12:57:52 +02001826 /* Allow 1 character for a '-' sign. */
1827 sz = negative + (size_a_in_bits + (bits - 1)) / bits;
1828 }
1829 if (alternate) {
1830 /* 2 characters for prefix */
1831 sz += 2;
Mark Dickinsone2846542012-04-20 21:21:24 +01001832 }
1833
Victor Stinnerd3f08822012-05-29 12:57:52 +02001834 if (writer) {
1835 if (_PyUnicodeWriter_Prepare(writer, sz, 'x') == -1)
1836 return -1;
1837 kind = writer->kind;
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.
Brett Cannona721aba2016-09-09 14:57:09 -07002016 *
2017 * Return values:
2018 * -1 on syntax error (exception needs to be set, *res is untouched)
2019 * 0 else (exception may be set, in that case *res is set to NULL)
Tim Petersbf2674b2003-02-02 07:51:32 +00002020 */
Brett Cannona721aba2016-09-09 14:57:09 -07002021static int
2022long_from_binary_base(const char **str, int base, PyLongObject **res)
Tim Petersbf2674b2003-02-02 07:51:32 +00002023{
Serhiy Storchakac6792272013-10-19 21:03:34 +03002024 const char *p = *str;
2025 const char *start = p;
Brett Cannona721aba2016-09-09 14:57:09 -07002026 char prev = 0;
Serhiy Storchaka29ba6882017-12-03 22:16:21 +02002027 Py_ssize_t digits = 0;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002028 int bits_per_char;
2029 Py_ssize_t n;
2030 PyLongObject *z;
2031 twodigits accum;
2032 int bits_in_accum;
2033 digit *pdigit;
Tim Petersbf2674b2003-02-02 07:51:32 +00002034
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002035 assert(base >= 2 && base <= 32 && (base & (base - 1)) == 0);
2036 n = base;
Brett Cannona721aba2016-09-09 14:57:09 -07002037 for (bits_per_char = -1; n; ++bits_per_char) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002038 n >>= 1;
Brett Cannona721aba2016-09-09 14:57:09 -07002039 }
2040 /* count digits and set p to end-of-string */
2041 while (_PyLong_DigitValue[Py_CHARMASK(*p)] < base || *p == '_') {
2042 if (*p == '_') {
2043 if (prev == '_') {
2044 *str = p - 1;
2045 return -1;
2046 }
2047 } else {
2048 ++digits;
2049 }
2050 prev = *p;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002051 ++p;
Brett Cannona721aba2016-09-09 14:57:09 -07002052 }
2053 if (prev == '_') {
2054 /* Trailing underscore not allowed. */
2055 *str = p - 1;
2056 return -1;
2057 }
2058
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002059 *str = p;
Serhiy Storchaka85c0b892017-10-03 14:13:44 +03002060 /* n <- the number of Python digits needed,
2061 = ceiling((digits * bits_per_char) / PyLong_SHIFT). */
2062 if (digits > (PY_SSIZE_T_MAX - (PyLong_SHIFT - 1)) / bits_per_char) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002063 PyErr_SetString(PyExc_ValueError,
2064 "int string too large to convert");
Brett Cannona721aba2016-09-09 14:57:09 -07002065 *res = NULL;
2066 return 0;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002067 }
Serhiy Storchaka85c0b892017-10-03 14:13:44 +03002068 n = (digits * bits_per_char + PyLong_SHIFT - 1) / PyLong_SHIFT;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002069 z = _PyLong_New(n);
Brett Cannona721aba2016-09-09 14:57:09 -07002070 if (z == NULL) {
2071 *res = NULL;
2072 return 0;
2073 }
Serhiy Storchaka95949422013-08-27 19:40:23 +03002074 /* Read string from right, and fill in int from left; i.e.,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002075 * from least to most significant in both.
2076 */
2077 accum = 0;
2078 bits_in_accum = 0;
2079 pdigit = z->ob_digit;
2080 while (--p >= start) {
Brett Cannona721aba2016-09-09 14:57:09 -07002081 int k;
2082 if (*p == '_') {
2083 continue;
2084 }
2085 k = (int)_PyLong_DigitValue[Py_CHARMASK(*p)];
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002086 assert(k >= 0 && k < base);
2087 accum |= (twodigits)k << bits_in_accum;
2088 bits_in_accum += bits_per_char;
2089 if (bits_in_accum >= PyLong_SHIFT) {
2090 *pdigit++ = (digit)(accum & PyLong_MASK);
2091 assert(pdigit - z->ob_digit <= n);
2092 accum >>= PyLong_SHIFT;
2093 bits_in_accum -= PyLong_SHIFT;
2094 assert(bits_in_accum < PyLong_SHIFT);
2095 }
2096 }
2097 if (bits_in_accum) {
2098 assert(bits_in_accum <= PyLong_SHIFT);
2099 *pdigit++ = (digit)accum;
2100 assert(pdigit - z->ob_digit <= n);
2101 }
2102 while (pdigit - z->ob_digit < n)
2103 *pdigit++ = 0;
Brett Cannona721aba2016-09-09 14:57:09 -07002104 *res = long_normalize(z);
2105 return 0;
Tim Petersbf2674b2003-02-02 07:51:32 +00002106}
2107
Serhiy Storchaka95949422013-08-27 19:40:23 +03002108/* Parses an int from a bytestring. Leading and trailing whitespace will be
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03002109 * ignored.
2110 *
2111 * If successful, a PyLong object will be returned and 'pend' will be pointing
2112 * to the first unused byte unless it's NULL.
2113 *
2114 * If unsuccessful, NULL will be returned.
2115 */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002116PyObject *
Serhiy Storchakac6792272013-10-19 21:03:34 +03002117PyLong_FromString(const char *str, char **pend, int base)
Guido van Rossumeb1fafc1994-08-29 12:47:19 +00002118{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002119 int sign = 1, error_if_nonzero = 0;
Serhiy Storchakac6792272013-10-19 21:03:34 +03002120 const char *start, *orig_str = str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002121 PyLongObject *z = NULL;
2122 PyObject *strobj;
2123 Py_ssize_t slen;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002124
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002125 if ((base != 0 && base < 2) || base > 36) {
2126 PyErr_SetString(PyExc_ValueError,
2127 "int() arg 2 must be >= 2 and <= 36");
2128 return NULL;
2129 }
Brett Cannona721aba2016-09-09 14:57:09 -07002130 while (*str != '\0' && Py_ISSPACE(Py_CHARMASK(*str))) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002131 str++;
Brett Cannona721aba2016-09-09 14:57:09 -07002132 }
2133 if (*str == '+') {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002134 ++str;
Brett Cannona721aba2016-09-09 14:57:09 -07002135 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002136 else if (*str == '-') {
2137 ++str;
2138 sign = -1;
2139 }
2140 if (base == 0) {
Brett Cannona721aba2016-09-09 14:57:09 -07002141 if (str[0] != '0') {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002142 base = 10;
Brett Cannona721aba2016-09-09 14:57:09 -07002143 }
2144 else if (str[1] == 'x' || str[1] == 'X') {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002145 base = 16;
Brett Cannona721aba2016-09-09 14:57:09 -07002146 }
2147 else if (str[1] == 'o' || str[1] == 'O') {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002148 base = 8;
Brett Cannona721aba2016-09-09 14:57:09 -07002149 }
2150 else if (str[1] == 'b' || str[1] == 'B') {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002151 base = 2;
Brett Cannona721aba2016-09-09 14:57:09 -07002152 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002153 else {
2154 /* "old" (C-style) octal literal, now invalid.
2155 it might still be zero though */
2156 error_if_nonzero = 1;
2157 base = 10;
2158 }
2159 }
2160 if (str[0] == '0' &&
2161 ((base == 16 && (str[1] == 'x' || str[1] == 'X')) ||
2162 (base == 8 && (str[1] == 'o' || str[1] == 'O')) ||
Brett Cannona721aba2016-09-09 14:57:09 -07002163 (base == 2 && (str[1] == 'b' || str[1] == 'B')))) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002164 str += 2;
Brett Cannona721aba2016-09-09 14:57:09 -07002165 /* One underscore allowed here. */
2166 if (*str == '_') {
2167 ++str;
2168 }
2169 }
2170 if (str[0] == '_') {
Barry Warsawb2e57942017-09-14 18:13:16 -07002171 /* May not start with underscores. */
2172 goto onError;
Brett Cannona721aba2016-09-09 14:57:09 -07002173 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00002174
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002175 start = str;
Brett Cannona721aba2016-09-09 14:57:09 -07002176 if ((base & (base - 1)) == 0) {
2177 int res = long_from_binary_base(&str, base, &z);
2178 if (res < 0) {
2179 /* Syntax error. */
2180 goto onError;
2181 }
2182 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002183 else {
Thomas Wouters477c8d52006-05-27 19:21:47 +00002184/***
2185Binary bases can be converted in time linear in the number of digits, because
2186Python's representation base is binary. Other bases (including decimal!) use
2187the simple quadratic-time algorithm below, complicated by some speed tricks.
Tim Peters5af4e6c2002-08-12 02:31:19 +00002188
Thomas Wouters477c8d52006-05-27 19:21:47 +00002189First some math: the largest integer that can be expressed in N base-B digits
2190is B**N-1. Consequently, if we have an N-digit input in base B, the worst-
2191case number of Python digits needed to hold it is the smallest integer n s.t.
2192
2193 BASE**n-1 >= B**N-1 [or, adding 1 to both sides]
2194 BASE**n >= B**N [taking logs to base BASE]
2195 n >= log(B**N)/log(BASE) = N * log(B)/log(BASE)
2196
2197The static array log_base_BASE[base] == log(base)/log(BASE) so we can compute
Serhiy Storchaka95949422013-08-27 19:40:23 +03002198this quickly. A Python int with that much space is reserved near the start,
Thomas Wouters477c8d52006-05-27 19:21:47 +00002199and the result is computed into it.
2200
2201The input string is actually treated as being in base base**i (i.e., i digits
2202are processed at a time), where two more static arrays hold:
2203
2204 convwidth_base[base] = the largest integer i such that base**i <= BASE
2205 convmultmax_base[base] = base ** convwidth_base[base]
2206
2207The first of these is the largest i such that i consecutive input digits
2208must fit in a single Python digit. The second is effectively the input
2209base we're really using.
2210
2211Viewing the input as a sequence <c0, c1, ..., c_n-1> of digits in base
2212convmultmax_base[base], the result is "simply"
2213
2214 (((c0*B + c1)*B + c2)*B + c3)*B + ... ))) + c_n-1
2215
2216where B = convmultmax_base[base].
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002217
2218Error analysis: as above, the number of Python digits `n` needed is worst-
2219case
2220
2221 n >= N * log(B)/log(BASE)
2222
2223where `N` is the number of input digits in base `B`. This is computed via
2224
2225 size_z = (Py_ssize_t)((scan - str) * log_base_BASE[base]) + 1;
2226
2227below. Two numeric concerns are how much space this can waste, and whether
2228the computed result can be too small. To be concrete, assume BASE = 2**15,
2229which is the default (and it's unlikely anyone changes that).
2230
2231Waste isn't a problem: provided the first input digit isn't 0, the difference
2232between the worst-case input with N digits and the smallest input with N
2233digits is about a factor of B, but B is small compared to BASE so at most
2234one allocated Python digit can remain unused on that count. If
2235N*log(B)/log(BASE) is mathematically an exact integer, then truncating that
2236and adding 1 returns a result 1 larger than necessary. However, that can't
2237happen: whenever B is a power of 2, long_from_binary_base() is called
2238instead, and it's impossible for B**i to be an integer power of 2**15 when
2239B is not a power of 2 (i.e., it's impossible for N*log(B)/log(BASE) to be
2240an exact integer when B is not a power of 2, since B**i has a prime factor
2241other than 2 in that case, but (2**15)**j's only prime factor is 2).
2242
2243The computed result can be too small if the true value of N*log(B)/log(BASE)
2244is a little bit larger than an exact integer, but due to roundoff errors (in
2245computing log(B), log(BASE), their quotient, and/or multiplying that by N)
2246yields a numeric result a little less than that integer. Unfortunately, "how
2247close can a transcendental function get to an integer over some range?"
2248questions are generally theoretically intractable. Computer analysis via
2249continued fractions is practical: expand log(B)/log(BASE) via continued
2250fractions, giving a sequence i/j of "the best" rational approximations. Then
2251j*log(B)/log(BASE) is approximately equal to (the integer) i. This shows that
2252we can get very close to being in trouble, but very rarely. For example,
225376573 is a denominator in one of the continued-fraction approximations to
2254log(10)/log(2**15), and indeed:
2255
2256 >>> log(10)/log(2**15)*76573
2257 16958.000000654003
2258
2259is very close to an integer. If we were working with IEEE single-precision,
2260rounding errors could kill us. Finding worst cases in IEEE double-precision
2261requires better-than-double-precision log() functions, and Tim didn't bother.
2262Instead the code checks to see whether the allocated space is enough as each
Serhiy Storchaka95949422013-08-27 19:40:23 +03002263new Python digit is added, and copies the whole thing to a larger int if not.
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002264This should happen extremely rarely, and in fact I don't have a test case
2265that triggers it(!). Instead the code was tested by artificially allocating
2266just 1 digit at the start, so that the copying code was exercised for every
2267digit beyond the first.
Thomas Wouters477c8d52006-05-27 19:21:47 +00002268***/
Antoine Pitrou9ed5f272013-08-13 20:18:52 +02002269 twodigits c; /* current input character */
Serhiy Storchaka29ba6882017-12-03 22:16:21 +02002270 double fsize_z;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002271 Py_ssize_t size_z;
Serhiy Storchaka29ba6882017-12-03 22:16:21 +02002272 Py_ssize_t digits = 0;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002273 int i;
2274 int convwidth;
2275 twodigits convmultmax, convmult;
2276 digit *pz, *pzstop;
Brett Cannona721aba2016-09-09 14:57:09 -07002277 const char *scan, *lastdigit;
2278 char prev = 0;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002279
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002280 static double log_base_BASE[37] = {0.0e0,};
2281 static int convwidth_base[37] = {0,};
2282 static twodigits convmultmax_base[37] = {0,};
Thomas Wouters477c8d52006-05-27 19:21:47 +00002283
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002284 if (log_base_BASE[base] == 0.0) {
2285 twodigits convmax = base;
2286 int i = 1;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002287
Mark Dickinson22b20182010-05-10 21:27:53 +00002288 log_base_BASE[base] = (log((double)base) /
2289 log((double)PyLong_BASE));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002290 for (;;) {
2291 twodigits next = convmax * base;
Brett Cannona721aba2016-09-09 14:57:09 -07002292 if (next > PyLong_BASE) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002293 break;
Brett Cannona721aba2016-09-09 14:57:09 -07002294 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002295 convmax = next;
2296 ++i;
2297 }
2298 convmultmax_base[base] = convmax;
2299 assert(i > 0);
2300 convwidth_base[base] = i;
2301 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00002302
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002303 /* Find length of the string of numeric characters. */
2304 scan = str;
Brett Cannona721aba2016-09-09 14:57:09 -07002305 lastdigit = str;
2306
2307 while (_PyLong_DigitValue[Py_CHARMASK(*scan)] < base || *scan == '_') {
2308 if (*scan == '_') {
2309 if (prev == '_') {
2310 /* Only one underscore allowed. */
2311 str = lastdigit + 1;
2312 goto onError;
2313 }
2314 }
2315 else {
2316 ++digits;
2317 lastdigit = scan;
2318 }
2319 prev = *scan;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002320 ++scan;
Brett Cannona721aba2016-09-09 14:57:09 -07002321 }
2322 if (prev == '_') {
2323 /* Trailing underscore not allowed. */
2324 /* Set error pointer to first underscore. */
2325 str = lastdigit + 1;
2326 goto onError;
2327 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00002328
Serhiy Storchaka95949422013-08-27 19:40:23 +03002329 /* Create an int object that can contain the largest possible
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002330 * integer with this base and length. Note that there's no
2331 * need to initialize z->ob_digit -- no slot is read up before
2332 * being stored into.
2333 */
Serhiy Storchaka29ba6882017-12-03 22:16:21 +02002334 fsize_z = digits * log_base_BASE[base] + 1;
2335 if (fsize_z > MAX_LONG_DIGITS) {
2336 /* The same exception as in _PyLong_New(). */
2337 PyErr_SetString(PyExc_OverflowError,
2338 "too many digits in integer");
2339 return NULL;
2340 }
2341 size_z = (Py_ssize_t)fsize_z;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002342 /* Uncomment next line to test exceedingly rare copy code */
2343 /* size_z = 1; */
2344 assert(size_z > 0);
2345 z = _PyLong_New(size_z);
Brett Cannona721aba2016-09-09 14:57:09 -07002346 if (z == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002347 return NULL;
Brett Cannona721aba2016-09-09 14:57:09 -07002348 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002349 Py_SIZE(z) = 0;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002350
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002351 /* `convwidth` consecutive input digits are treated as a single
2352 * digit in base `convmultmax`.
2353 */
2354 convwidth = convwidth_base[base];
2355 convmultmax = convmultmax_base[base];
Thomas Wouters477c8d52006-05-27 19:21:47 +00002356
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002357 /* Work ;-) */
2358 while (str < scan) {
Brett Cannona721aba2016-09-09 14:57:09 -07002359 if (*str == '_') {
2360 str++;
2361 continue;
2362 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002363 /* grab up to convwidth digits from the input string */
2364 c = (digit)_PyLong_DigitValue[Py_CHARMASK(*str++)];
Brett Cannona721aba2016-09-09 14:57:09 -07002365 for (i = 1; i < convwidth && str != scan; ++str) {
2366 if (*str == '_') {
2367 continue;
2368 }
2369 i++;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002370 c = (twodigits)(c * base +
Mark Dickinson22b20182010-05-10 21:27:53 +00002371 (int)_PyLong_DigitValue[Py_CHARMASK(*str)]);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002372 assert(c < PyLong_BASE);
2373 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00002374
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002375 convmult = convmultmax;
2376 /* Calculate the shift only if we couldn't get
2377 * convwidth digits.
2378 */
2379 if (i != convwidth) {
2380 convmult = base;
Brett Cannona721aba2016-09-09 14:57:09 -07002381 for ( ; i > 1; --i) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002382 convmult *= base;
Brett Cannona721aba2016-09-09 14:57:09 -07002383 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002384 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00002385
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002386 /* Multiply z by convmult, and add c. */
2387 pz = z->ob_digit;
2388 pzstop = pz + Py_SIZE(z);
2389 for (; pz < pzstop; ++pz) {
2390 c += (twodigits)*pz * convmult;
2391 *pz = (digit)(c & PyLong_MASK);
2392 c >>= PyLong_SHIFT;
2393 }
2394 /* carry off the current end? */
2395 if (c) {
2396 assert(c < PyLong_BASE);
2397 if (Py_SIZE(z) < size_z) {
2398 *pz = (digit)c;
2399 ++Py_SIZE(z);
2400 }
2401 else {
2402 PyLongObject *tmp;
2403 /* Extremely rare. Get more space. */
2404 assert(Py_SIZE(z) == size_z);
2405 tmp = _PyLong_New(size_z + 1);
2406 if (tmp == NULL) {
2407 Py_DECREF(z);
2408 return NULL;
2409 }
2410 memcpy(tmp->ob_digit,
2411 z->ob_digit,
2412 sizeof(digit) * size_z);
2413 Py_DECREF(z);
2414 z = tmp;
2415 z->ob_digit[size_z] = (digit)c;
2416 ++size_z;
2417 }
2418 }
2419 }
2420 }
Brett Cannona721aba2016-09-09 14:57:09 -07002421 if (z == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002422 return NULL;
Brett Cannona721aba2016-09-09 14:57:09 -07002423 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002424 if (error_if_nonzero) {
2425 /* reset the base to 0, else the exception message
2426 doesn't make too much sense */
2427 base = 0;
Brett Cannona721aba2016-09-09 14:57:09 -07002428 if (Py_SIZE(z) != 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002429 goto onError;
Brett Cannona721aba2016-09-09 14:57:09 -07002430 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002431 /* there might still be other problems, therefore base
2432 remains zero here for the same reason */
2433 }
Brett Cannona721aba2016-09-09 14:57:09 -07002434 if (str == start) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002435 goto onError;
Brett Cannona721aba2016-09-09 14:57:09 -07002436 }
2437 if (sign < 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002438 Py_SIZE(z) = -(Py_SIZE(z));
Brett Cannona721aba2016-09-09 14:57:09 -07002439 }
2440 while (*str && Py_ISSPACE(Py_CHARMASK(*str))) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002441 str++;
Brett Cannona721aba2016-09-09 14:57:09 -07002442 }
2443 if (*str != '\0') {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002444 goto onError;
Brett Cannona721aba2016-09-09 14:57:09 -07002445 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002446 long_normalize(z);
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03002447 z = maybe_small_long(z);
Brett Cannona721aba2016-09-09 14:57:09 -07002448 if (z == NULL) {
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03002449 return NULL;
Brett Cannona721aba2016-09-09 14:57:09 -07002450 }
2451 if (pend != NULL) {
Serhiy Storchakac6792272013-10-19 21:03:34 +03002452 *pend = (char *)str;
Brett Cannona721aba2016-09-09 14:57:09 -07002453 }
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03002454 return (PyObject *) z;
Guido van Rossum9e896b32000-04-05 20:11:21 +00002455
Mark Dickinson22b20182010-05-10 21:27:53 +00002456 onError:
Brett Cannona721aba2016-09-09 14:57:09 -07002457 if (pend != NULL) {
Serhiy Storchakac6792272013-10-19 21:03:34 +03002458 *pend = (char *)str;
Brett Cannona721aba2016-09-09 14:57:09 -07002459 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002460 Py_XDECREF(z);
2461 slen = strlen(orig_str) < 200 ? strlen(orig_str) : 200;
2462 strobj = PyUnicode_FromStringAndSize(orig_str, slen);
Brett Cannona721aba2016-09-09 14:57:09 -07002463 if (strobj == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002464 return NULL;
Brett Cannona721aba2016-09-09 14:57:09 -07002465 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002466 PyErr_Format(PyExc_ValueError,
Serhiy Storchaka579ddc22013-08-03 21:14:05 +03002467 "invalid literal for int() with base %d: %.200R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002468 base, strobj);
2469 Py_DECREF(strobj);
2470 return NULL;
Guido van Rossum9e896b32000-04-05 20:11:21 +00002471}
2472
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03002473/* Since PyLong_FromString doesn't have a length parameter,
2474 * check here for possible NULs in the string.
2475 *
2476 * Reports an invalid literal as a bytes object.
2477 */
2478PyObject *
2479_PyLong_FromBytes(const char *s, Py_ssize_t len, int base)
2480{
2481 PyObject *result, *strobj;
2482 char *end = NULL;
2483
Serhiy Storchaka20b39b22014-09-28 11:27:24 +03002484 result = PyLong_FromString(s, &end, base);
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03002485 if (end == NULL || (result != NULL && end == s + len))
2486 return result;
2487 Py_XDECREF(result);
2488 strobj = PyBytes_FromStringAndSize(s, Py_MIN(len, 200));
2489 if (strobj != NULL) {
2490 PyErr_Format(PyExc_ValueError,
Serhiy Storchaka579ddc22013-08-03 21:14:05 +03002491 "invalid literal for int() with base %d: %.200R",
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03002492 base, strobj);
2493 Py_DECREF(strobj);
2494 }
2495 return NULL;
2496}
2497
Guido van Rossum9e896b32000-04-05 20:11:21 +00002498PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00002499PyLong_FromUnicode(Py_UNICODE *u, Py_ssize_t length, int base)
Guido van Rossum9e896b32000-04-05 20:11:21 +00002500{
Serhiy Storchaka460bd0d2016-11-20 12:16:46 +02002501 PyObject *v, *unicode = PyUnicode_FromWideChar(u, length);
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002502 if (unicode == NULL)
2503 return NULL;
2504 v = PyLong_FromUnicodeObject(unicode, base);
2505 Py_DECREF(unicode);
2506 return v;
2507}
2508
2509PyObject *
2510PyLong_FromUnicodeObject(PyObject *u, int base)
2511{
Serhiy Storchaka579ddc22013-08-03 21:14:05 +03002512 PyObject *result, *asciidig;
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02002513 const char *buffer;
2514 char *end = NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002515 Py_ssize_t buflen;
Guido van Rossum9e896b32000-04-05 20:11:21 +00002516
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002517 asciidig = _PyUnicode_TransformDecimalAndSpaceToASCII(u);
Alexander Belopolsky942af5a2010-12-04 03:38:46 +00002518 if (asciidig == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002519 return NULL;
Serhiy Storchaka9b6c60c2017-11-13 21:23:48 +02002520 assert(PyUnicode_IS_ASCII(asciidig));
2521 /* Simply get a pointer to existing ASCII characters. */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002522 buffer = PyUnicode_AsUTF8AndSize(asciidig, &buflen);
Serhiy Storchaka9b6c60c2017-11-13 21:23:48 +02002523 assert(buffer != NULL);
2524
2525 result = PyLong_FromString(buffer, &end, base);
2526 if (end == NULL || (result != NULL && end == buffer + buflen)) {
Alexander Belopolsky942af5a2010-12-04 03:38:46 +00002527 Py_DECREF(asciidig);
Serhiy Storchaka9b6c60c2017-11-13 21:23:48 +02002528 return result;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002529 }
Serhiy Storchaka9b6c60c2017-11-13 21:23:48 +02002530 Py_DECREF(asciidig);
2531 Py_XDECREF(result);
Serhiy Storchaka579ddc22013-08-03 21:14:05 +03002532 PyErr_Format(PyExc_ValueError,
2533 "invalid literal for int() with base %d: %.200R",
2534 base, u);
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03002535 return NULL;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002536}
2537
Tim Peters9f688bf2000-07-07 15:53:28 +00002538/* forward */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002539static PyLongObject *x_divrem
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002540 (PyLongObject *, PyLongObject *, PyLongObject **);
Guido van Rossumb43daf72007-08-01 18:08:08 +00002541static PyObject *long_long(PyObject *v);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002542
Serhiy Storchaka95949422013-08-27 19:40:23 +03002543/* Int division with remainder, top-level routine */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002544
Guido van Rossume32e0141992-01-19 16:31:05 +00002545static int
Tim Peters9f688bf2000-07-07 15:53:28 +00002546long_divrem(PyLongObject *a, PyLongObject *b,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002547 PyLongObject **pdiv, PyLongObject **prem)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002548{
Victor Stinner45e8e2f2014-05-14 17:24:35 +02002549 Py_ssize_t size_a = Py_ABS(Py_SIZE(a)), size_b = Py_ABS(Py_SIZE(b));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002550 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002551
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002552 if (size_b == 0) {
2553 PyErr_SetString(PyExc_ZeroDivisionError,
2554 "integer division or modulo by zero");
2555 return -1;
2556 }
2557 if (size_a < size_b ||
2558 (size_a == size_b &&
2559 a->ob_digit[size_a-1] < b->ob_digit[size_b-1])) {
2560 /* |a| < |b|. */
Mark Dickinsonb820d7f2016-08-22 12:24:46 +01002561 *prem = (PyLongObject *)long_long((PyObject *)a);
2562 if (*prem == NULL) {
Mark Dickinsonb820d7f2016-08-22 12:24:46 +01002563 return -1;
2564 }
Serhiy Storchakaba85d692017-03-30 09:09:41 +03002565 Py_INCREF(_PyLong_Zero);
2566 *pdiv = (PyLongObject*)_PyLong_Zero;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002567 return 0;
2568 }
2569 if (size_b == 1) {
2570 digit rem = 0;
2571 z = divrem1(a, b->ob_digit[0], &rem);
2572 if (z == NULL)
2573 return -1;
2574 *prem = (PyLongObject *) PyLong_FromLong((long)rem);
2575 if (*prem == NULL) {
2576 Py_DECREF(z);
2577 return -1;
2578 }
2579 }
2580 else {
2581 z = x_divrem(a, b, prem);
2582 if (z == NULL)
2583 return -1;
2584 }
2585 /* Set the signs.
2586 The quotient z has the sign of a*b;
2587 the remainder r has the sign of a,
2588 so a = b*z + r. */
Victor Stinner8aed6f12013-07-17 22:31:17 +02002589 if ((Py_SIZE(a) < 0) != (Py_SIZE(b) < 0)) {
2590 _PyLong_Negate(&z);
2591 if (z == NULL) {
2592 Py_CLEAR(*prem);
2593 return -1;
2594 }
2595 }
2596 if (Py_SIZE(a) < 0 && Py_SIZE(*prem) != 0) {
2597 _PyLong_Negate(prem);
2598 if (*prem == NULL) {
2599 Py_DECREF(z);
2600 Py_CLEAR(*prem);
2601 return -1;
2602 }
2603 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002604 *pdiv = maybe_small_long(z);
2605 return 0;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002606}
2607
Serhiy Storchaka95949422013-08-27 19:40:23 +03002608/* Unsigned int division with remainder -- the algorithm. The arguments v1
Victor Stinner45e8e2f2014-05-14 17:24:35 +02002609 and w1 should satisfy 2 <= Py_ABS(Py_SIZE(w1)) <= Py_ABS(Py_SIZE(v1)). */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002610
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002611static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00002612x_divrem(PyLongObject *v1, PyLongObject *w1, PyLongObject **prem)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002613{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002614 PyLongObject *v, *w, *a;
2615 Py_ssize_t i, k, size_v, size_w;
2616 int d;
2617 digit wm1, wm2, carry, q, r, vtop, *v0, *vk, *w0, *ak;
2618 twodigits vv;
2619 sdigit zhi;
2620 stwodigits z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002621
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002622 /* We follow Knuth [The Art of Computer Programming, Vol. 2 (3rd
2623 edn.), section 4.3.1, Algorithm D], except that we don't explicitly
2624 handle the special case when the initial estimate q for a quotient
2625 digit is >= PyLong_BASE: the max value for q is PyLong_BASE+1, and
2626 that won't overflow a digit. */
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002627
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002628 /* allocate space; w will also be used to hold the final remainder */
Victor Stinner45e8e2f2014-05-14 17:24:35 +02002629 size_v = Py_ABS(Py_SIZE(v1));
2630 size_w = Py_ABS(Py_SIZE(w1));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002631 assert(size_v >= size_w && size_w >= 2); /* Assert checks by div() */
2632 v = _PyLong_New(size_v+1);
2633 if (v == NULL) {
2634 *prem = NULL;
2635 return NULL;
2636 }
2637 w = _PyLong_New(size_w);
2638 if (w == NULL) {
2639 Py_DECREF(v);
2640 *prem = NULL;
2641 return NULL;
2642 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002643
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002644 /* normalize: shift w1 left so that its top digit is >= PyLong_BASE/2.
2645 shift v1 left by the same amount. Results go into w and v. */
2646 d = PyLong_SHIFT - bits_in_digit(w1->ob_digit[size_w-1]);
2647 carry = v_lshift(w->ob_digit, w1->ob_digit, size_w, d);
2648 assert(carry == 0);
2649 carry = v_lshift(v->ob_digit, v1->ob_digit, size_v, d);
2650 if (carry != 0 || v->ob_digit[size_v-1] >= w->ob_digit[size_w-1]) {
2651 v->ob_digit[size_v] = carry;
2652 size_v++;
2653 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002654
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002655 /* Now v->ob_digit[size_v-1] < w->ob_digit[size_w-1], so quotient has
2656 at most (and usually exactly) k = size_v - size_w digits. */
2657 k = size_v - size_w;
2658 assert(k >= 0);
2659 a = _PyLong_New(k);
2660 if (a == NULL) {
2661 Py_DECREF(w);
2662 Py_DECREF(v);
2663 *prem = NULL;
2664 return NULL;
2665 }
2666 v0 = v->ob_digit;
2667 w0 = w->ob_digit;
2668 wm1 = w0[size_w-1];
2669 wm2 = w0[size_w-2];
2670 for (vk = v0+k, ak = a->ob_digit + k; vk-- > v0;) {
2671 /* inner loop: divide vk[0:size_w+1] by w0[0:size_w], giving
2672 single-digit quotient q, remainder in vk[0:size_w]. */
Tim Peters5af4e6c2002-08-12 02:31:19 +00002673
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002674 SIGCHECK({
Mark Dickinson22b20182010-05-10 21:27:53 +00002675 Py_DECREF(a);
2676 Py_DECREF(w);
2677 Py_DECREF(v);
2678 *prem = NULL;
2679 return NULL;
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00002680 });
Tim Peters5af4e6c2002-08-12 02:31:19 +00002681
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002682 /* estimate quotient digit q; may overestimate by 1 (rare) */
2683 vtop = vk[size_w];
2684 assert(vtop <= wm1);
2685 vv = ((twodigits)vtop << PyLong_SHIFT) | vk[size_w-1];
2686 q = (digit)(vv / wm1);
2687 r = (digit)(vv - (twodigits)wm1 * q); /* r = vv % wm1 */
2688 while ((twodigits)wm2 * q > (((twodigits)r << PyLong_SHIFT)
2689 | vk[size_w-2])) {
2690 --q;
2691 r += wm1;
2692 if (r >= PyLong_BASE)
2693 break;
2694 }
2695 assert(q <= PyLong_BASE);
Tim Peters5af4e6c2002-08-12 02:31:19 +00002696
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002697 /* subtract q*w0[0:size_w] from vk[0:size_w+1] */
2698 zhi = 0;
2699 for (i = 0; i < size_w; ++i) {
2700 /* invariants: -PyLong_BASE <= -q <= zhi <= 0;
2701 -PyLong_BASE * q <= z < PyLong_BASE */
2702 z = (sdigit)vk[i] + zhi -
2703 (stwodigits)q * (stwodigits)w0[i];
2704 vk[i] = (digit)z & PyLong_MASK;
2705 zhi = (sdigit)Py_ARITHMETIC_RIGHT_SHIFT(stwodigits,
Mark Dickinson22b20182010-05-10 21:27:53 +00002706 z, PyLong_SHIFT);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002707 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002708
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002709 /* add w back if q was too large (this branch taken rarely) */
2710 assert((sdigit)vtop + zhi == -1 || (sdigit)vtop + zhi == 0);
2711 if ((sdigit)vtop + zhi < 0) {
2712 carry = 0;
2713 for (i = 0; i < size_w; ++i) {
2714 carry += vk[i] + w0[i];
2715 vk[i] = carry & PyLong_MASK;
2716 carry >>= PyLong_SHIFT;
2717 }
2718 --q;
2719 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002720
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002721 /* store quotient digit */
2722 assert(q < PyLong_BASE);
2723 *--ak = q;
2724 }
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002725
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002726 /* unshift remainder; we reuse w to store the result */
2727 carry = v_rshift(w0, v0, size_w, d);
2728 assert(carry==0);
2729 Py_DECREF(v);
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002730
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002731 *prem = long_normalize(w);
2732 return long_normalize(a);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002733}
2734
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002735/* For a nonzero PyLong a, express a in the form x * 2**e, with 0.5 <=
2736 abs(x) < 1.0 and e >= 0; return x and put e in *e. Here x is
2737 rounded to DBL_MANT_DIG significant bits using round-half-to-even.
2738 If a == 0, return 0.0 and set *e = 0. If the resulting exponent
2739 e is larger than PY_SSIZE_T_MAX, raise OverflowError and return
2740 -1.0. */
2741
2742/* attempt to define 2.0**DBL_MANT_DIG as a compile-time constant */
2743#if DBL_MANT_DIG == 53
2744#define EXP2_DBL_MANT_DIG 9007199254740992.0
2745#else
2746#define EXP2_DBL_MANT_DIG (ldexp(1.0, DBL_MANT_DIG))
2747#endif
2748
2749double
2750_PyLong_Frexp(PyLongObject *a, Py_ssize_t *e)
2751{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002752 Py_ssize_t a_size, a_bits, shift_digits, shift_bits, x_size;
2753 /* See below for why x_digits is always large enough. */
2754 digit rem, x_digits[2 + (DBL_MANT_DIG + 1) / PyLong_SHIFT];
2755 double dx;
2756 /* Correction term for round-half-to-even rounding. For a digit x,
2757 "x + half_even_correction[x & 7]" gives x rounded to the nearest
2758 multiple of 4, rounding ties to a multiple of 8. */
2759 static const int half_even_correction[8] = {0, -1, -2, 1, 0, -1, 2, 1};
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002760
Victor Stinner45e8e2f2014-05-14 17:24:35 +02002761 a_size = Py_ABS(Py_SIZE(a));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002762 if (a_size == 0) {
2763 /* Special case for 0: significand 0.0, exponent 0. */
2764 *e = 0;
2765 return 0.0;
2766 }
2767 a_bits = bits_in_digit(a->ob_digit[a_size-1]);
2768 /* The following is an overflow-free version of the check
2769 "if ((a_size - 1) * PyLong_SHIFT + a_bits > PY_SSIZE_T_MAX) ..." */
2770 if (a_size >= (PY_SSIZE_T_MAX - 1) / PyLong_SHIFT + 1 &&
2771 (a_size > (PY_SSIZE_T_MAX - 1) / PyLong_SHIFT + 1 ||
2772 a_bits > (PY_SSIZE_T_MAX - 1) % PyLong_SHIFT + 1))
Mark Dickinson22b20182010-05-10 21:27:53 +00002773 goto overflow;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002774 a_bits = (a_size - 1) * PyLong_SHIFT + a_bits;
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002775
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002776 /* Shift the first DBL_MANT_DIG + 2 bits of a into x_digits[0:x_size]
2777 (shifting left if a_bits <= DBL_MANT_DIG + 2).
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002778
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002779 Number of digits needed for result: write // for floor division.
2780 Then if shifting left, we end up using
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002781
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002782 1 + a_size + (DBL_MANT_DIG + 2 - a_bits) // PyLong_SHIFT
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002783
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002784 digits. If shifting right, we use
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002785
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002786 a_size - (a_bits - DBL_MANT_DIG - 2) // PyLong_SHIFT
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002787
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002788 digits. Using a_size = 1 + (a_bits - 1) // PyLong_SHIFT along with
2789 the inequalities
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002790
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002791 m // PyLong_SHIFT + n // PyLong_SHIFT <= (m + n) // PyLong_SHIFT
2792 m // PyLong_SHIFT - n // PyLong_SHIFT <=
2793 1 + (m - n - 1) // PyLong_SHIFT,
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002794
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002795 valid for any integers m and n, we find that x_size satisfies
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002796
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002797 x_size <= 2 + (DBL_MANT_DIG + 1) // PyLong_SHIFT
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002798
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002799 in both cases.
2800 */
2801 if (a_bits <= DBL_MANT_DIG + 2) {
2802 shift_digits = (DBL_MANT_DIG + 2 - a_bits) / PyLong_SHIFT;
2803 shift_bits = (DBL_MANT_DIG + 2 - a_bits) % PyLong_SHIFT;
2804 x_size = 0;
2805 while (x_size < shift_digits)
2806 x_digits[x_size++] = 0;
2807 rem = v_lshift(x_digits + x_size, a->ob_digit, a_size,
2808 (int)shift_bits);
2809 x_size += a_size;
2810 x_digits[x_size++] = rem;
2811 }
2812 else {
2813 shift_digits = (a_bits - DBL_MANT_DIG - 2) / PyLong_SHIFT;
2814 shift_bits = (a_bits - DBL_MANT_DIG - 2) % PyLong_SHIFT;
2815 rem = v_rshift(x_digits, a->ob_digit + shift_digits,
2816 a_size - shift_digits, (int)shift_bits);
2817 x_size = a_size - shift_digits;
2818 /* For correct rounding below, we need the least significant
2819 bit of x to be 'sticky' for this shift: if any of the bits
2820 shifted out was nonzero, we set the least significant bit
2821 of x. */
2822 if (rem)
2823 x_digits[0] |= 1;
2824 else
2825 while (shift_digits > 0)
2826 if (a->ob_digit[--shift_digits]) {
2827 x_digits[0] |= 1;
2828 break;
2829 }
2830 }
Victor Stinner63941882011-09-29 00:42:28 +02002831 assert(1 <= x_size && x_size <= (Py_ssize_t)Py_ARRAY_LENGTH(x_digits));
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002832
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002833 /* Round, and convert to double. */
2834 x_digits[0] += half_even_correction[x_digits[0] & 7];
2835 dx = x_digits[--x_size];
2836 while (x_size > 0)
2837 dx = dx * PyLong_BASE + x_digits[--x_size];
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002838
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002839 /* Rescale; make correction if result is 1.0. */
2840 dx /= 4.0 * EXP2_DBL_MANT_DIG;
2841 if (dx == 1.0) {
2842 if (a_bits == PY_SSIZE_T_MAX)
2843 goto overflow;
2844 dx = 0.5;
2845 a_bits += 1;
2846 }
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002847
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002848 *e = a_bits;
2849 return Py_SIZE(a) < 0 ? -dx : dx;
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002850
2851 overflow:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002852 /* exponent > PY_SSIZE_T_MAX */
2853 PyErr_SetString(PyExc_OverflowError,
2854 "huge integer: number of bits overflows a Py_ssize_t");
2855 *e = 0;
2856 return -1.0;
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002857}
2858
Serhiy Storchaka95949422013-08-27 19:40:23 +03002859/* Get a C double from an int object. Rounds to the nearest double,
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002860 using the round-half-to-even rule in the case of a tie. */
2861
2862double
2863PyLong_AsDouble(PyObject *v)
2864{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002865 Py_ssize_t exponent;
2866 double x;
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002867
Nadeem Vawda3d5881e2011-09-07 21:40:26 +02002868 if (v == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002869 PyErr_BadInternalCall();
2870 return -1.0;
2871 }
Nadeem Vawda3d5881e2011-09-07 21:40:26 +02002872 if (!PyLong_Check(v)) {
2873 PyErr_SetString(PyExc_TypeError, "an integer is required");
2874 return -1.0;
2875 }
Yury Selivanov186c30b2016-02-05 19:40:01 -05002876 if (Py_ABS(Py_SIZE(v)) <= 1) {
Yury Selivanova0fcaca2016-02-06 12:21:33 -05002877 /* Fast path; single digit long (31 bits) will cast safely
Mark Dickinson1dc3c892016-08-21 10:33:36 +01002878 to double. This improves performance of FP/long operations
2879 by 20%.
Yury Selivanov186c30b2016-02-05 19:40:01 -05002880 */
2881 return (double)MEDIUM_VALUE((PyLongObject *)v);
2882 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002883 x = _PyLong_Frexp((PyLongObject *)v, &exponent);
2884 if ((x == -1.0 && PyErr_Occurred()) || exponent > DBL_MAX_EXP) {
2885 PyErr_SetString(PyExc_OverflowError,
Mark Dickinson02515f72013-08-03 12:08:22 +01002886 "int too large to convert to float");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002887 return -1.0;
2888 }
2889 return ldexp(x, (int)exponent);
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002890}
2891
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002892/* Methods */
2893
2894static void
Tim Peters9f688bf2000-07-07 15:53:28 +00002895long_dealloc(PyObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002896{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002897 Py_TYPE(v)->tp_free(v);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002898}
2899
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002900static int
Tim Peters9f688bf2000-07-07 15:53:28 +00002901long_compare(PyLongObject *a, PyLongObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002902{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002903 Py_ssize_t sign;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002904
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002905 if (Py_SIZE(a) != Py_SIZE(b)) {
2906 sign = Py_SIZE(a) - Py_SIZE(b);
2907 }
2908 else {
Victor Stinner45e8e2f2014-05-14 17:24:35 +02002909 Py_ssize_t i = Py_ABS(Py_SIZE(a));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002910 while (--i >= 0 && a->ob_digit[i] == b->ob_digit[i])
2911 ;
2912 if (i < 0)
2913 sign = 0;
2914 else {
2915 sign = (sdigit)a->ob_digit[i] - (sdigit)b->ob_digit[i];
2916 if (Py_SIZE(a) < 0)
2917 sign = -sign;
2918 }
2919 }
2920 return sign < 0 ? -1 : sign > 0 ? 1 : 0;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002921}
2922
Guido van Rossum47b9ff62006-08-24 00:41:19 +00002923static PyObject *
2924long_richcompare(PyObject *self, PyObject *other, int op)
2925{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002926 int result;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002927 CHECK_BINOP(self, other);
2928 if (self == other)
2929 result = 0;
2930 else
2931 result = long_compare((PyLongObject*)self, (PyLongObject*)other);
stratakise8b19652017-11-02 11:32:54 +01002932 Py_RETURN_RICHCOMPARE(result, 0, op);
Guido van Rossum47b9ff62006-08-24 00:41:19 +00002933}
2934
Benjamin Peterson8f67d082010-10-17 20:54:53 +00002935static Py_hash_t
Tim Peters9f688bf2000-07-07 15:53:28 +00002936long_hash(PyLongObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00002937{
Benjamin Peterson8035bc52010-10-23 16:20:50 +00002938 Py_uhash_t x;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002939 Py_ssize_t i;
2940 int sign;
Guido van Rossum9bfef441993-03-29 10:43:31 +00002941
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002942 i = Py_SIZE(v);
2943 switch(i) {
2944 case -1: return v->ob_digit[0]==1 ? -2 : -(sdigit)v->ob_digit[0];
2945 case 0: return 0;
2946 case 1: return v->ob_digit[0];
2947 }
2948 sign = 1;
2949 x = 0;
2950 if (i < 0) {
2951 sign = -1;
2952 i = -(i);
2953 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002954 while (--i >= 0) {
Mark Dickinsondc787d22010-05-23 13:33:13 +00002955 /* Here x is a quantity in the range [0, _PyHASH_MODULUS); we
2956 want to compute x * 2**PyLong_SHIFT + v->ob_digit[i] modulo
2957 _PyHASH_MODULUS.
2958
2959 The computation of x * 2**PyLong_SHIFT % _PyHASH_MODULUS
2960 amounts to a rotation of the bits of x. To see this, write
2961
2962 x * 2**PyLong_SHIFT = y * 2**_PyHASH_BITS + z
2963
2964 where y = x >> (_PyHASH_BITS - PyLong_SHIFT) gives the top
2965 PyLong_SHIFT bits of x (those that are shifted out of the
2966 original _PyHASH_BITS bits, and z = (x << PyLong_SHIFT) &
2967 _PyHASH_MODULUS gives the bottom _PyHASH_BITS - PyLong_SHIFT
2968 bits of x, shifted up. Then since 2**_PyHASH_BITS is
2969 congruent to 1 modulo _PyHASH_MODULUS, y*2**_PyHASH_BITS is
2970 congruent to y modulo _PyHASH_MODULUS. So
2971
2972 x * 2**PyLong_SHIFT = y + z (mod _PyHASH_MODULUS).
2973
2974 The right-hand side is just the result of rotating the
2975 _PyHASH_BITS bits of x left by PyLong_SHIFT places; since
2976 not all _PyHASH_BITS bits of x are 1s, the same is true
2977 after rotation, so 0 <= y+z < _PyHASH_MODULUS and y + z is
2978 the reduction of x*2**PyLong_SHIFT modulo
2979 _PyHASH_MODULUS. */
2980 x = ((x << PyLong_SHIFT) & _PyHASH_MODULUS) |
2981 (x >> (_PyHASH_BITS - PyLong_SHIFT));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002982 x += v->ob_digit[i];
Mark Dickinsondc787d22010-05-23 13:33:13 +00002983 if (x >= _PyHASH_MODULUS)
2984 x -= _PyHASH_MODULUS;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002985 }
2986 x = x * sign;
Benjamin Peterson8035bc52010-10-23 16:20:50 +00002987 if (x == (Py_uhash_t)-1)
2988 x = (Py_uhash_t)-2;
Benjamin Peterson8f67d082010-10-17 20:54:53 +00002989 return (Py_hash_t)x;
Guido van Rossum9bfef441993-03-29 10:43:31 +00002990}
2991
2992
Serhiy Storchaka95949422013-08-27 19:40:23 +03002993/* Add the absolute values of two integers. */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002994
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002995static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00002996x_add(PyLongObject *a, PyLongObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002997{
Victor Stinner45e8e2f2014-05-14 17:24:35 +02002998 Py_ssize_t size_a = Py_ABS(Py_SIZE(a)), size_b = Py_ABS(Py_SIZE(b));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002999 PyLongObject *z;
3000 Py_ssize_t i;
3001 digit carry = 0;
Tim Peters69c2de32001-09-11 22:31:33 +00003002
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003003 /* Ensure a is the larger of the two: */
3004 if (size_a < size_b) {
3005 { PyLongObject *temp = a; a = b; b = temp; }
3006 { Py_ssize_t size_temp = size_a;
Mark Dickinson22b20182010-05-10 21:27:53 +00003007 size_a = size_b;
3008 size_b = size_temp; }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003009 }
3010 z = _PyLong_New(size_a+1);
3011 if (z == NULL)
3012 return NULL;
3013 for (i = 0; i < size_b; ++i) {
3014 carry += a->ob_digit[i] + b->ob_digit[i];
3015 z->ob_digit[i] = carry & PyLong_MASK;
3016 carry >>= PyLong_SHIFT;
3017 }
3018 for (; i < size_a; ++i) {
3019 carry += a->ob_digit[i];
3020 z->ob_digit[i] = carry & PyLong_MASK;
3021 carry >>= PyLong_SHIFT;
3022 }
3023 z->ob_digit[i] = carry;
3024 return long_normalize(z);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003025}
3026
3027/* Subtract the absolute values of two integers. */
3028
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003029static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003030x_sub(PyLongObject *a, PyLongObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003031{
Victor Stinner45e8e2f2014-05-14 17:24:35 +02003032 Py_ssize_t size_a = Py_ABS(Py_SIZE(a)), size_b = Py_ABS(Py_SIZE(b));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003033 PyLongObject *z;
3034 Py_ssize_t i;
3035 int sign = 1;
3036 digit borrow = 0;
Tim Peters69c2de32001-09-11 22:31:33 +00003037
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003038 /* Ensure a is the larger of the two: */
3039 if (size_a < size_b) {
3040 sign = -1;
3041 { PyLongObject *temp = a; a = b; b = temp; }
3042 { Py_ssize_t size_temp = size_a;
Mark Dickinson22b20182010-05-10 21:27:53 +00003043 size_a = size_b;
3044 size_b = size_temp; }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003045 }
3046 else if (size_a == size_b) {
3047 /* Find highest digit where a and b differ: */
3048 i = size_a;
3049 while (--i >= 0 && a->ob_digit[i] == b->ob_digit[i])
3050 ;
3051 if (i < 0)
3052 return (PyLongObject *)PyLong_FromLong(0);
3053 if (a->ob_digit[i] < b->ob_digit[i]) {
3054 sign = -1;
3055 { PyLongObject *temp = a; a = b; b = temp; }
3056 }
3057 size_a = size_b = i+1;
3058 }
3059 z = _PyLong_New(size_a);
3060 if (z == NULL)
3061 return NULL;
3062 for (i = 0; i < size_b; ++i) {
3063 /* The following assumes unsigned arithmetic
3064 works module 2**N for some N>PyLong_SHIFT. */
3065 borrow = a->ob_digit[i] - b->ob_digit[i] - borrow;
3066 z->ob_digit[i] = borrow & PyLong_MASK;
3067 borrow >>= PyLong_SHIFT;
3068 borrow &= 1; /* Keep only one sign bit */
3069 }
3070 for (; i < size_a; ++i) {
3071 borrow = a->ob_digit[i] - borrow;
3072 z->ob_digit[i] = borrow & PyLong_MASK;
3073 borrow >>= PyLong_SHIFT;
3074 borrow &= 1; /* Keep only one sign bit */
3075 }
3076 assert(borrow == 0);
Victor Stinner8aed6f12013-07-17 22:31:17 +02003077 if (sign < 0) {
Victor Stinner8bcf3122016-08-17 19:48:33 +02003078 Py_SIZE(z) = -Py_SIZE(z);
Victor Stinner8aed6f12013-07-17 22:31:17 +02003079 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003080 return long_normalize(z);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003081}
3082
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003083static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003084long_add(PyLongObject *a, PyLongObject *b)
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003085{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003086 PyLongObject *z;
Tim Peters69c2de32001-09-11 22:31:33 +00003087
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003088 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003089
Victor Stinner45e8e2f2014-05-14 17:24:35 +02003090 if (Py_ABS(Py_SIZE(a)) <= 1 && Py_ABS(Py_SIZE(b)) <= 1) {
Mark Dickinsonc1c4a642016-09-17 20:01:56 +01003091 return PyLong_FromLong(MEDIUM_VALUE(a) + MEDIUM_VALUE(b));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003092 }
3093 if (Py_SIZE(a) < 0) {
3094 if (Py_SIZE(b) < 0) {
3095 z = x_add(a, b);
Serhiy Storchakae63e5d62016-06-04 00:06:45 +03003096 if (z != NULL) {
3097 /* x_add received at least one multiple-digit int,
3098 and thus z must be a multiple-digit int.
3099 That also means z is not an element of
3100 small_ints, so negating it in-place is safe. */
3101 assert(Py_REFCNT(z) == 1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003102 Py_SIZE(z) = -(Py_SIZE(z));
Serhiy Storchakae63e5d62016-06-04 00:06:45 +03003103 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003104 }
3105 else
3106 z = x_sub(b, a);
3107 }
3108 else {
3109 if (Py_SIZE(b) < 0)
3110 z = x_sub(a, b);
3111 else
3112 z = x_add(a, b);
3113 }
3114 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003115}
3116
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003117static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003118long_sub(PyLongObject *a, PyLongObject *b)
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003119{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003120 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003121
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003122 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003123
Victor Stinner45e8e2f2014-05-14 17:24:35 +02003124 if (Py_ABS(Py_SIZE(a)) <= 1 && Py_ABS(Py_SIZE(b)) <= 1) {
Mark Dickinsonc1c4a642016-09-17 20:01:56 +01003125 return PyLong_FromLong(MEDIUM_VALUE(a) - MEDIUM_VALUE(b));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003126 }
3127 if (Py_SIZE(a) < 0) {
3128 if (Py_SIZE(b) < 0)
3129 z = x_sub(a, b);
3130 else
3131 z = x_add(a, b);
Serhiy Storchakae63e5d62016-06-04 00:06:45 +03003132 if (z != NULL) {
3133 assert(Py_SIZE(z) == 0 || Py_REFCNT(z) == 1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003134 Py_SIZE(z) = -(Py_SIZE(z));
Serhiy Storchakae63e5d62016-06-04 00:06:45 +03003135 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003136 }
3137 else {
3138 if (Py_SIZE(b) < 0)
3139 z = x_add(a, b);
3140 else
3141 z = x_sub(a, b);
3142 }
3143 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003144}
3145
Tim Peters5af4e6c2002-08-12 02:31:19 +00003146/* Grade school multiplication, ignoring the signs.
3147 * Returns the absolute value of the product, or NULL if error.
3148 */
3149static PyLongObject *
3150x_mul(PyLongObject *a, PyLongObject *b)
Neil Schemenauerba872e22001-01-04 01:46:03 +00003151{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003152 PyLongObject *z;
Victor Stinner45e8e2f2014-05-14 17:24:35 +02003153 Py_ssize_t size_a = Py_ABS(Py_SIZE(a));
3154 Py_ssize_t size_b = Py_ABS(Py_SIZE(b));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003155 Py_ssize_t i;
Neil Schemenauerba872e22001-01-04 01:46:03 +00003156
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003157 z = _PyLong_New(size_a + size_b);
3158 if (z == NULL)
3159 return NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003160
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003161 memset(z->ob_digit, 0, Py_SIZE(z) * sizeof(digit));
3162 if (a == b) {
3163 /* Efficient squaring per HAC, Algorithm 14.16:
3164 * http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf
3165 * Gives slightly less than a 2x speedup when a == b,
3166 * via exploiting that each entry in the multiplication
3167 * pyramid appears twice (except for the size_a squares).
3168 */
3169 for (i = 0; i < size_a; ++i) {
3170 twodigits carry;
3171 twodigits f = a->ob_digit[i];
3172 digit *pz = z->ob_digit + (i << 1);
3173 digit *pa = a->ob_digit + i + 1;
3174 digit *paend = a->ob_digit + size_a;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003175
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003176 SIGCHECK({
Mark Dickinson22b20182010-05-10 21:27:53 +00003177 Py_DECREF(z);
3178 return NULL;
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00003179 });
Tim Peters0973b992004-08-29 22:16:50 +00003180
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003181 carry = *pz + f * f;
3182 *pz++ = (digit)(carry & PyLong_MASK);
3183 carry >>= PyLong_SHIFT;
3184 assert(carry <= PyLong_MASK);
Tim Peters0973b992004-08-29 22:16:50 +00003185
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003186 /* Now f is added in twice in each column of the
3187 * pyramid it appears. Same as adding f<<1 once.
3188 */
3189 f <<= 1;
3190 while (pa < paend) {
3191 carry += *pz + *pa++ * f;
3192 *pz++ = (digit)(carry & PyLong_MASK);
3193 carry >>= PyLong_SHIFT;
3194 assert(carry <= (PyLong_MASK << 1));
3195 }
3196 if (carry) {
3197 carry += *pz;
3198 *pz++ = (digit)(carry & PyLong_MASK);
3199 carry >>= PyLong_SHIFT;
3200 }
3201 if (carry)
3202 *pz += (digit)(carry & PyLong_MASK);
3203 assert((carry >> PyLong_SHIFT) == 0);
3204 }
3205 }
Serhiy Storchaka95949422013-08-27 19:40:23 +03003206 else { /* a is not the same as b -- gradeschool int mult */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003207 for (i = 0; i < size_a; ++i) {
3208 twodigits carry = 0;
3209 twodigits f = a->ob_digit[i];
3210 digit *pz = z->ob_digit + i;
3211 digit *pb = b->ob_digit;
3212 digit *pbend = b->ob_digit + size_b;
Tim Peters0973b992004-08-29 22:16:50 +00003213
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003214 SIGCHECK({
Mark Dickinson22b20182010-05-10 21:27:53 +00003215 Py_DECREF(z);
3216 return NULL;
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00003217 });
Tim Peters0973b992004-08-29 22:16:50 +00003218
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003219 while (pb < pbend) {
3220 carry += *pz + *pb++ * f;
3221 *pz++ = (digit)(carry & PyLong_MASK);
3222 carry >>= PyLong_SHIFT;
3223 assert(carry <= PyLong_MASK);
3224 }
3225 if (carry)
3226 *pz += (digit)(carry & PyLong_MASK);
3227 assert((carry >> PyLong_SHIFT) == 0);
3228 }
3229 }
3230 return long_normalize(z);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003231}
3232
3233/* A helper for Karatsuba multiplication (k_mul).
Serhiy Storchaka95949422013-08-27 19:40:23 +03003234 Takes an int "n" and an integer "size" representing the place to
Tim Peters5af4e6c2002-08-12 02:31:19 +00003235 split, and sets low and high such that abs(n) == (high << size) + low,
3236 viewing the shift as being by digits. The sign bit is ignored, and
3237 the return values are >= 0.
3238 Returns 0 on success, -1 on failure.
3239*/
3240static int
Mark Dickinson22b20182010-05-10 21:27:53 +00003241kmul_split(PyLongObject *n,
3242 Py_ssize_t size,
3243 PyLongObject **high,
3244 PyLongObject **low)
Tim Peters5af4e6c2002-08-12 02:31:19 +00003245{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003246 PyLongObject *hi, *lo;
3247 Py_ssize_t size_lo, size_hi;
Victor Stinner45e8e2f2014-05-14 17:24:35 +02003248 const Py_ssize_t size_n = Py_ABS(Py_SIZE(n));
Tim Peters5af4e6c2002-08-12 02:31:19 +00003249
Victor Stinner640c35c2013-06-04 23:14:37 +02003250 size_lo = Py_MIN(size_n, size);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003251 size_hi = size_n - size_lo;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003252
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003253 if ((hi = _PyLong_New(size_hi)) == NULL)
3254 return -1;
3255 if ((lo = _PyLong_New(size_lo)) == NULL) {
3256 Py_DECREF(hi);
3257 return -1;
3258 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00003259
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003260 memcpy(lo->ob_digit, n->ob_digit, size_lo * sizeof(digit));
3261 memcpy(hi->ob_digit, n->ob_digit + size_lo, size_hi * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00003262
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003263 *high = long_normalize(hi);
3264 *low = long_normalize(lo);
3265 return 0;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003266}
3267
Tim Peters60004642002-08-12 22:01:34 +00003268static PyLongObject *k_lopsided_mul(PyLongObject *a, PyLongObject *b);
3269
Tim Peters5af4e6c2002-08-12 02:31:19 +00003270/* Karatsuba multiplication. Ignores the input signs, and returns the
3271 * absolute value of the product (or NULL if error).
3272 * See Knuth Vol. 2 Chapter 4.3.3 (Pp. 294-295).
3273 */
3274static PyLongObject *
3275k_mul(PyLongObject *a, PyLongObject *b)
3276{
Victor Stinner45e8e2f2014-05-14 17:24:35 +02003277 Py_ssize_t asize = Py_ABS(Py_SIZE(a));
3278 Py_ssize_t bsize = Py_ABS(Py_SIZE(b));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003279 PyLongObject *ah = NULL;
3280 PyLongObject *al = NULL;
3281 PyLongObject *bh = NULL;
3282 PyLongObject *bl = NULL;
3283 PyLongObject *ret = NULL;
3284 PyLongObject *t1, *t2, *t3;
3285 Py_ssize_t shift; /* the number of digits we split off */
3286 Py_ssize_t i;
Tim Peters738eda72002-08-12 15:08:20 +00003287
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003288 /* (ah*X+al)(bh*X+bl) = ah*bh*X*X + (ah*bl + al*bh)*X + al*bl
3289 * Let k = (ah+al)*(bh+bl) = ah*bl + al*bh + ah*bh + al*bl
3290 * Then the original product is
3291 * ah*bh*X*X + (k - ah*bh - al*bl)*X + al*bl
3292 * By picking X to be a power of 2, "*X" is just shifting, and it's
3293 * been reduced to 3 multiplies on numbers half the size.
3294 */
Tim Peters5af4e6c2002-08-12 02:31:19 +00003295
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003296 /* We want to split based on the larger number; fiddle so that b
3297 * is largest.
3298 */
3299 if (asize > bsize) {
3300 t1 = a;
3301 a = b;
3302 b = t1;
Tim Peters738eda72002-08-12 15:08:20 +00003303
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003304 i = asize;
3305 asize = bsize;
3306 bsize = i;
3307 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00003308
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003309 /* Use gradeschool math when either number is too small. */
3310 i = a == b ? KARATSUBA_SQUARE_CUTOFF : KARATSUBA_CUTOFF;
3311 if (asize <= i) {
3312 if (asize == 0)
3313 return (PyLongObject *)PyLong_FromLong(0);
3314 else
3315 return x_mul(a, b);
3316 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00003317
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003318 /* If a is small compared to b, splitting on b gives a degenerate
3319 * case with ah==0, and Karatsuba may be (even much) less efficient
3320 * than "grade school" then. However, we can still win, by viewing
3321 * b as a string of "big digits", each of width a->ob_size. That
3322 * leads to a sequence of balanced calls to k_mul.
3323 */
3324 if (2 * asize <= bsize)
3325 return k_lopsided_mul(a, b);
Tim Peters60004642002-08-12 22:01:34 +00003326
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003327 /* Split a & b into hi & lo pieces. */
3328 shift = bsize >> 1;
3329 if (kmul_split(a, shift, &ah, &al) < 0) goto fail;
3330 assert(Py_SIZE(ah) > 0); /* the split isn't degenerate */
Tim Petersd6974a52002-08-13 20:37:51 +00003331
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003332 if (a == b) {
3333 bh = ah;
3334 bl = al;
3335 Py_INCREF(bh);
3336 Py_INCREF(bl);
3337 }
3338 else if (kmul_split(b, shift, &bh, &bl) < 0) goto fail;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003339
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003340 /* The plan:
3341 * 1. Allocate result space (asize + bsize digits: that's always
3342 * enough).
3343 * 2. Compute ah*bh, and copy into result at 2*shift.
3344 * 3. Compute al*bl, and copy into result at 0. Note that this
3345 * can't overlap with #2.
3346 * 4. Subtract al*bl from the result, starting at shift. This may
3347 * underflow (borrow out of the high digit), but we don't care:
3348 * we're effectively doing unsigned arithmetic mod
3349 * BASE**(sizea + sizeb), and so long as the *final* result fits,
3350 * borrows and carries out of the high digit can be ignored.
3351 * 5. Subtract ah*bh from the result, starting at shift.
3352 * 6. Compute (ah+al)*(bh+bl), and add it into the result starting
3353 * at shift.
3354 */
Tim Petersd64c1de2002-08-12 17:36:03 +00003355
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003356 /* 1. Allocate result space. */
3357 ret = _PyLong_New(asize + bsize);
3358 if (ret == NULL) goto fail;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003359#ifdef Py_DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003360 /* Fill with trash, to catch reference to uninitialized digits. */
3361 memset(ret->ob_digit, 0xDF, Py_SIZE(ret) * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00003362#endif
Tim Peters44121a62002-08-12 06:17:58 +00003363
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003364 /* 2. t1 <- ah*bh, and copy into high digits of result. */
3365 if ((t1 = k_mul(ah, bh)) == NULL) goto fail;
3366 assert(Py_SIZE(t1) >= 0);
3367 assert(2*shift + Py_SIZE(t1) <= Py_SIZE(ret));
3368 memcpy(ret->ob_digit + 2*shift, t1->ob_digit,
3369 Py_SIZE(t1) * sizeof(digit));
Tim Peters738eda72002-08-12 15:08:20 +00003370
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003371 /* Zero-out the digits higher than the ah*bh copy. */
3372 i = Py_SIZE(ret) - 2*shift - Py_SIZE(t1);
3373 if (i)
3374 memset(ret->ob_digit + 2*shift + Py_SIZE(t1), 0,
3375 i * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00003376
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003377 /* 3. t2 <- al*bl, and copy into the low digits. */
3378 if ((t2 = k_mul(al, bl)) == NULL) {
3379 Py_DECREF(t1);
3380 goto fail;
3381 }
3382 assert(Py_SIZE(t2) >= 0);
3383 assert(Py_SIZE(t2) <= 2*shift); /* no overlap with high digits */
3384 memcpy(ret->ob_digit, t2->ob_digit, Py_SIZE(t2) * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00003385
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003386 /* Zero out remaining digits. */
3387 i = 2*shift - Py_SIZE(t2); /* number of uninitialized digits */
3388 if (i)
3389 memset(ret->ob_digit + Py_SIZE(t2), 0, i * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00003390
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003391 /* 4 & 5. Subtract ah*bh (t1) and al*bl (t2). We do al*bl first
3392 * because it's fresher in cache.
3393 */
3394 i = Py_SIZE(ret) - shift; /* # digits after shift */
3395 (void)v_isub(ret->ob_digit + shift, i, t2->ob_digit, Py_SIZE(t2));
3396 Py_DECREF(t2);
Tim Peters738eda72002-08-12 15:08:20 +00003397
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003398 (void)v_isub(ret->ob_digit + shift, i, t1->ob_digit, Py_SIZE(t1));
3399 Py_DECREF(t1);
Tim Peters738eda72002-08-12 15:08:20 +00003400
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003401 /* 6. t3 <- (ah+al)(bh+bl), and add into result. */
3402 if ((t1 = x_add(ah, al)) == NULL) goto fail;
3403 Py_DECREF(ah);
3404 Py_DECREF(al);
3405 ah = al = NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003406
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003407 if (a == b) {
3408 t2 = t1;
3409 Py_INCREF(t2);
3410 }
3411 else if ((t2 = x_add(bh, bl)) == NULL) {
3412 Py_DECREF(t1);
3413 goto fail;
3414 }
3415 Py_DECREF(bh);
3416 Py_DECREF(bl);
3417 bh = bl = NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003418
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003419 t3 = k_mul(t1, t2);
3420 Py_DECREF(t1);
3421 Py_DECREF(t2);
3422 if (t3 == NULL) goto fail;
3423 assert(Py_SIZE(t3) >= 0);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003424
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003425 /* Add t3. It's not obvious why we can't run out of room here.
3426 * See the (*) comment after this function.
3427 */
3428 (void)v_iadd(ret->ob_digit + shift, i, t3->ob_digit, Py_SIZE(t3));
3429 Py_DECREF(t3);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003430
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003431 return long_normalize(ret);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003432
Mark Dickinson22b20182010-05-10 21:27:53 +00003433 fail:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003434 Py_XDECREF(ret);
3435 Py_XDECREF(ah);
3436 Py_XDECREF(al);
3437 Py_XDECREF(bh);
3438 Py_XDECREF(bl);
3439 return NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003440}
3441
Tim Petersd6974a52002-08-13 20:37:51 +00003442/* (*) Why adding t3 can't "run out of room" above.
3443
Tim Petersab86c2b2002-08-15 20:06:00 +00003444Let f(x) mean the floor of x and c(x) mean the ceiling of x. Some facts
3445to start with:
Tim Petersd6974a52002-08-13 20:37:51 +00003446
Tim Petersab86c2b2002-08-15 20:06:00 +000034471. For any integer i, i = c(i/2) + f(i/2). In particular,
3448 bsize = c(bsize/2) + f(bsize/2).
34492. shift = f(bsize/2)
34503. asize <= bsize
34514. Since we call k_lopsided_mul if asize*2 <= bsize, asize*2 > bsize in this
3452 routine, so asize > bsize/2 >= f(bsize/2) in this routine.
Tim Petersd6974a52002-08-13 20:37:51 +00003453
Tim Petersab86c2b2002-08-15 20:06:00 +00003454We allocated asize + bsize result digits, and add t3 into them at an offset
3455of shift. This leaves asize+bsize-shift allocated digit positions for t3
3456to fit into, = (by #1 and #2) asize + f(bsize/2) + c(bsize/2) - f(bsize/2) =
3457asize + c(bsize/2) available digit positions.
Tim Petersd6974a52002-08-13 20:37:51 +00003458
Tim Petersab86c2b2002-08-15 20:06:00 +00003459bh has c(bsize/2) digits, and bl at most f(size/2) digits. So bh+hl has
3460at most c(bsize/2) digits + 1 bit.
Tim Petersd6974a52002-08-13 20:37:51 +00003461
Tim Petersab86c2b2002-08-15 20:06:00 +00003462If asize == bsize, ah has c(bsize/2) digits, else ah has at most f(bsize/2)
3463digits, and al has at most f(bsize/2) digits in any case. So ah+al has at
3464most (asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 1 bit.
Tim Petersd6974a52002-08-13 20:37:51 +00003465
Tim Petersab86c2b2002-08-15 20:06:00 +00003466The product (ah+al)*(bh+bl) therefore has at most
Tim Petersd6974a52002-08-13 20:37:51 +00003467
Tim Petersab86c2b2002-08-15 20:06:00 +00003468 c(bsize/2) + (asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 2 bits
Tim Petersd6974a52002-08-13 20:37:51 +00003469
Tim Petersab86c2b2002-08-15 20:06:00 +00003470and we have asize + c(bsize/2) available digit positions. We need to show
3471this is always enough. An instance of c(bsize/2) cancels out in both, so
3472the question reduces to whether asize digits is enough to hold
3473(asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 2 bits. If asize < bsize,
3474then we're asking whether asize digits >= f(bsize/2) digits + 2 bits. By #4,
3475asize 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 +00003476digit is enough to hold 2 bits. This is so since PyLong_SHIFT=15 >= 2. If
Tim Petersab86c2b2002-08-15 20:06:00 +00003477asize == bsize, then we're asking whether bsize digits is enough to hold
Tim Peterse417de02002-08-15 20:10:45 +00003478c(bsize/2) digits + 2 bits, or equivalently (by #1) whether f(bsize/2) digits
3479is enough to hold 2 bits. This is so if bsize >= 2, which holds because
3480bsize >= KARATSUBA_CUTOFF >= 2.
Tim Peters8e966ee2002-08-14 16:36:23 +00003481
Tim Peters48d52c02002-08-14 17:07:32 +00003482Note that since there's always enough room for (ah+al)*(bh+bl), and that's
3483clearly >= each of ah*bh and al*bl, there's always enough room to subtract
3484ah*bh and al*bl too.
Tim Petersd6974a52002-08-13 20:37:51 +00003485*/
3486
Tim Peters60004642002-08-12 22:01:34 +00003487/* b has at least twice the digits of a, and a is big enough that Karatsuba
3488 * would pay off *if* the inputs had balanced sizes. View b as a sequence
3489 * of slices, each with a->ob_size digits, and multiply the slices by a,
3490 * one at a time. This gives k_mul balanced inputs to work with, and is
3491 * also cache-friendly (we compute one double-width slice of the result
Ezio Melotti42da6632011-03-15 05:18:48 +02003492 * at a time, then move on, never backtracking except for the helpful
Tim Peters60004642002-08-12 22:01:34 +00003493 * single-width slice overlap between successive partial sums).
3494 */
3495static PyLongObject *
3496k_lopsided_mul(PyLongObject *a, PyLongObject *b)
3497{
Victor Stinner45e8e2f2014-05-14 17:24:35 +02003498 const Py_ssize_t asize = Py_ABS(Py_SIZE(a));
3499 Py_ssize_t bsize = Py_ABS(Py_SIZE(b));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003500 Py_ssize_t nbdone; /* # of b digits already multiplied */
3501 PyLongObject *ret;
3502 PyLongObject *bslice = NULL;
Tim Peters60004642002-08-12 22:01:34 +00003503
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003504 assert(asize > KARATSUBA_CUTOFF);
3505 assert(2 * asize <= bsize);
Tim Peters60004642002-08-12 22:01:34 +00003506
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003507 /* Allocate result space, and zero it out. */
3508 ret = _PyLong_New(asize + bsize);
3509 if (ret == NULL)
3510 return NULL;
3511 memset(ret->ob_digit, 0, Py_SIZE(ret) * sizeof(digit));
Tim Peters60004642002-08-12 22:01:34 +00003512
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003513 /* Successive slices of b are copied into bslice. */
3514 bslice = _PyLong_New(asize);
3515 if (bslice == NULL)
3516 goto fail;
Tim Peters60004642002-08-12 22:01:34 +00003517
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003518 nbdone = 0;
3519 while (bsize > 0) {
3520 PyLongObject *product;
Victor Stinner640c35c2013-06-04 23:14:37 +02003521 const Py_ssize_t nbtouse = Py_MIN(bsize, asize);
Tim Peters60004642002-08-12 22:01:34 +00003522
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003523 /* Multiply the next slice of b by a. */
3524 memcpy(bslice->ob_digit, b->ob_digit + nbdone,
3525 nbtouse * sizeof(digit));
3526 Py_SIZE(bslice) = nbtouse;
3527 product = k_mul(a, bslice);
3528 if (product == NULL)
3529 goto fail;
Tim Peters60004642002-08-12 22:01:34 +00003530
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003531 /* Add into result. */
3532 (void)v_iadd(ret->ob_digit + nbdone, Py_SIZE(ret) - nbdone,
3533 product->ob_digit, Py_SIZE(product));
3534 Py_DECREF(product);
Tim Peters60004642002-08-12 22:01:34 +00003535
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003536 bsize -= nbtouse;
3537 nbdone += nbtouse;
3538 }
Tim Peters60004642002-08-12 22:01:34 +00003539
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003540 Py_DECREF(bslice);
3541 return long_normalize(ret);
Tim Peters60004642002-08-12 22:01:34 +00003542
Mark Dickinson22b20182010-05-10 21:27:53 +00003543 fail:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003544 Py_DECREF(ret);
3545 Py_XDECREF(bslice);
3546 return NULL;
Tim Peters60004642002-08-12 22:01:34 +00003547}
Tim Peters5af4e6c2002-08-12 02:31:19 +00003548
3549static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003550long_mul(PyLongObject *a, PyLongObject *b)
Tim Peters5af4e6c2002-08-12 02:31:19 +00003551{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003552 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003553
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003554 CHECK_BINOP(a, b);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003555
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003556 /* fast path for single-digit multiplication */
Victor Stinner45e8e2f2014-05-14 17:24:35 +02003557 if (Py_ABS(Py_SIZE(a)) <= 1 && Py_ABS(Py_SIZE(b)) <= 1) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003558 stwodigits v = (stwodigits)(MEDIUM_VALUE(a)) * MEDIUM_VALUE(b);
Benjamin Petersonaf580df2016-09-06 10:46:49 -07003559 return PyLong_FromLongLong((long long)v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003560 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00003561
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003562 z = k_mul(a, b);
3563 /* Negate if exactly one of the inputs is negative. */
Victor Stinner8aed6f12013-07-17 22:31:17 +02003564 if (((Py_SIZE(a) ^ Py_SIZE(b)) < 0) && z) {
3565 _PyLong_Negate(&z);
3566 if (z == NULL)
3567 return NULL;
3568 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003569 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003570}
3571
Yury Selivanove0b23092016-02-11 10:26:27 -05003572/* Fast modulo division for single-digit longs. */
3573static PyObject *
3574fast_mod(PyLongObject *a, PyLongObject *b)
3575{
3576 sdigit left = a->ob_digit[0];
3577 sdigit right = b->ob_digit[0];
3578 sdigit mod;
3579
3580 assert(Py_ABS(Py_SIZE(a)) == 1);
3581 assert(Py_ABS(Py_SIZE(b)) == 1);
3582
3583 if (Py_SIZE(a) == Py_SIZE(b)) {
3584 /* 'a' and 'b' have the same sign. */
3585 mod = left % right;
3586 }
3587 else {
3588 /* Either 'a' or 'b' is negative. */
3589 mod = right - 1 - (left - 1) % right;
3590 }
3591
Victor Stinnerf963c132016-03-23 18:36:54 +01003592 return PyLong_FromLong(mod * (sdigit)Py_SIZE(b));
Yury Selivanove0b23092016-02-11 10:26:27 -05003593}
3594
3595/* Fast floor division for single-digit longs. */
3596static PyObject *
3597fast_floor_div(PyLongObject *a, PyLongObject *b)
3598{
3599 sdigit left = a->ob_digit[0];
3600 sdigit right = b->ob_digit[0];
3601 sdigit div;
3602
3603 assert(Py_ABS(Py_SIZE(a)) == 1);
3604 assert(Py_ABS(Py_SIZE(b)) == 1);
3605
3606 if (Py_SIZE(a) == Py_SIZE(b)) {
3607 /* 'a' and 'b' have the same sign. */
3608 div = left / right;
3609 }
3610 else {
3611 /* Either 'a' or 'b' is negative. */
3612 div = -1 - (left - 1) / right;
3613 }
3614
3615 return PyLong_FromLong(div);
3616}
3617
Guido van Rossume32e0141992-01-19 16:31:05 +00003618/* The / and % operators are now defined in terms of divmod().
3619 The expression a mod b has the value a - b*floor(a/b).
3620 The long_divrem function gives the remainder after division of
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003621 |a| by |b|, with the sign of a. This is also expressed
3622 as a - b*trunc(a/b), if trunc truncates towards zero.
3623 Some examples:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003624 a b a rem b a mod b
3625 13 10 3 3
3626 -13 10 -3 7
3627 13 -10 3 -7
3628 -13 -10 -3 -3
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003629 So, to get from rem to mod, we have to add b if a and b
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00003630 have different signs. We then subtract one from the 'div'
3631 part of the outcome to keep the invariant intact. */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003632
Tim Peters47e52ee2004-08-30 02:44:38 +00003633/* Compute
3634 * *pdiv, *pmod = divmod(v, w)
3635 * NULL can be passed for pdiv or pmod, in which case that part of
3636 * the result is simply thrown away. The caller owns a reference to
3637 * each of these it requests (does not pass NULL for).
3638 */
Guido van Rossume32e0141992-01-19 16:31:05 +00003639static int
Tim Peters5af4e6c2002-08-12 02:31:19 +00003640l_divmod(PyLongObject *v, PyLongObject *w,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003641 PyLongObject **pdiv, PyLongObject **pmod)
Guido van Rossume32e0141992-01-19 16:31:05 +00003642{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003643 PyLongObject *div, *mod;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003644
Yury Selivanove0b23092016-02-11 10:26:27 -05003645 if (Py_ABS(Py_SIZE(v)) == 1 && Py_ABS(Py_SIZE(w)) == 1) {
3646 /* Fast path for single-digit longs */
3647 div = NULL;
3648 if (pdiv != NULL) {
3649 div = (PyLongObject *)fast_floor_div(v, w);
3650 if (div == NULL) {
3651 return -1;
3652 }
3653 }
3654 if (pmod != NULL) {
3655 mod = (PyLongObject *)fast_mod(v, w);
3656 if (mod == NULL) {
3657 Py_XDECREF(div);
3658 return -1;
3659 }
3660 *pmod = mod;
3661 }
3662 if (pdiv != NULL) {
3663 /* We only want to set `*pdiv` when `*pmod` is
3664 set successfully. */
3665 *pdiv = div;
3666 }
3667 return 0;
3668 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003669 if (long_divrem(v, w, &div, &mod) < 0)
3670 return -1;
3671 if ((Py_SIZE(mod) < 0 && Py_SIZE(w) > 0) ||
3672 (Py_SIZE(mod) > 0 && Py_SIZE(w) < 0)) {
3673 PyLongObject *temp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003674 temp = (PyLongObject *) long_add(mod, w);
3675 Py_DECREF(mod);
3676 mod = temp;
3677 if (mod == NULL) {
3678 Py_DECREF(div);
3679 return -1;
3680 }
Serhiy Storchakaba85d692017-03-30 09:09:41 +03003681 temp = (PyLongObject *) long_sub(div, (PyLongObject *)_PyLong_One);
3682 if (temp == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003683 Py_DECREF(mod);
3684 Py_DECREF(div);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003685 return -1;
3686 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003687 Py_DECREF(div);
3688 div = temp;
3689 }
3690 if (pdiv != NULL)
3691 *pdiv = div;
3692 else
3693 Py_DECREF(div);
Tim Peters47e52ee2004-08-30 02:44:38 +00003694
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003695 if (pmod != NULL)
3696 *pmod = mod;
3697 else
3698 Py_DECREF(mod);
Tim Peters47e52ee2004-08-30 02:44:38 +00003699
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003700 return 0;
Guido van Rossume32e0141992-01-19 16:31:05 +00003701}
3702
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003703static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003704long_div(PyObject *a, PyObject *b)
Guido van Rossume32e0141992-01-19 16:31:05 +00003705{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003706 PyLongObject *div;
Neil Schemenauerba872e22001-01-04 01:46:03 +00003707
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003708 CHECK_BINOP(a, b);
Yury Selivanove0b23092016-02-11 10:26:27 -05003709
3710 if (Py_ABS(Py_SIZE(a)) == 1 && Py_ABS(Py_SIZE(b)) == 1) {
3711 return fast_floor_div((PyLongObject*)a, (PyLongObject*)b);
3712 }
3713
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003714 if (l_divmod((PyLongObject*)a, (PyLongObject*)b, &div, NULL) < 0)
3715 div = NULL;
3716 return (PyObject *)div;
Guido van Rossume32e0141992-01-19 16:31:05 +00003717}
3718
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003719/* PyLong/PyLong -> float, with correctly rounded result. */
3720
3721#define MANT_DIG_DIGITS (DBL_MANT_DIG / PyLong_SHIFT)
3722#define MANT_DIG_BITS (DBL_MANT_DIG % PyLong_SHIFT)
3723
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003724static PyObject *
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003725long_true_divide(PyObject *v, PyObject *w)
Tim Peters20dab9f2001-09-04 05:31:47 +00003726{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003727 PyLongObject *a, *b, *x;
3728 Py_ssize_t a_size, b_size, shift, extra_bits, diff, x_size, x_bits;
3729 digit mask, low;
3730 int inexact, negate, a_is_small, b_is_small;
3731 double dx, result;
Tim Peterse2a60002001-09-04 06:17:36 +00003732
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003733 CHECK_BINOP(v, w);
3734 a = (PyLongObject *)v;
3735 b = (PyLongObject *)w;
Tim Peterse2a60002001-09-04 06:17:36 +00003736
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003737 /*
3738 Method in a nutshell:
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003739
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003740 0. reduce to case a, b > 0; filter out obvious underflow/overflow
3741 1. choose a suitable integer 'shift'
3742 2. use integer arithmetic to compute x = floor(2**-shift*a/b)
3743 3. adjust x for correct rounding
3744 4. convert x to a double dx with the same value
3745 5. return ldexp(dx, shift).
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003746
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003747 In more detail:
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003748
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003749 0. For any a, a/0 raises ZeroDivisionError; for nonzero b, 0/b
3750 returns either 0.0 or -0.0, depending on the sign of b. For a and
3751 b both nonzero, ignore signs of a and b, and add the sign back in
3752 at the end. Now write a_bits and b_bits for the bit lengths of a
3753 and b respectively (that is, a_bits = 1 + floor(log_2(a)); likewise
3754 for b). Then
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003755
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003756 2**(a_bits - b_bits - 1) < a/b < 2**(a_bits - b_bits + 1).
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003757
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003758 So if a_bits - b_bits > DBL_MAX_EXP then a/b > 2**DBL_MAX_EXP and
3759 so overflows. Similarly, if a_bits - b_bits < DBL_MIN_EXP -
3760 DBL_MANT_DIG - 1 then a/b underflows to 0. With these cases out of
3761 the way, we can assume that
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003762
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003763 DBL_MIN_EXP - DBL_MANT_DIG - 1 <= a_bits - b_bits <= DBL_MAX_EXP.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003764
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003765 1. The integer 'shift' is chosen so that x has the right number of
3766 bits for a double, plus two or three extra bits that will be used
3767 in the rounding decisions. Writing a_bits and b_bits for the
3768 number of significant bits in a and b respectively, a
3769 straightforward formula for shift is:
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003770
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003771 shift = a_bits - b_bits - DBL_MANT_DIG - 2
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003772
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003773 This is fine in the usual case, but if a/b is smaller than the
3774 smallest normal float then it can lead to double rounding on an
3775 IEEE 754 platform, giving incorrectly rounded results. So we
3776 adjust the formula slightly. The actual formula used is:
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003777
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003778 shift = MAX(a_bits - b_bits, DBL_MIN_EXP) - DBL_MANT_DIG - 2
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003779
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003780 2. The quantity x is computed by first shifting a (left -shift bits
3781 if shift <= 0, right shift bits if shift > 0) and then dividing by
3782 b. For both the shift and the division, we keep track of whether
3783 the result is inexact, in a flag 'inexact'; this information is
3784 needed at the rounding stage.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003785
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003786 With the choice of shift above, together with our assumption that
3787 a_bits - b_bits >= DBL_MIN_EXP - DBL_MANT_DIG - 1, it follows
3788 that x >= 1.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003789
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003790 3. Now x * 2**shift <= a/b < (x+1) * 2**shift. We want to replace
3791 this with an exactly representable float of the form
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003792
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003793 round(x/2**extra_bits) * 2**(extra_bits+shift).
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003794
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003795 For float representability, we need x/2**extra_bits <
3796 2**DBL_MANT_DIG and extra_bits + shift >= DBL_MIN_EXP -
3797 DBL_MANT_DIG. This translates to the condition:
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003798
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003799 extra_bits >= MAX(x_bits, DBL_MIN_EXP - shift) - DBL_MANT_DIG
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003800
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003801 To round, we just modify the bottom digit of x in-place; this can
3802 end up giving a digit with value > PyLONG_MASK, but that's not a
3803 problem since digits can hold values up to 2*PyLONG_MASK+1.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003804
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003805 With the original choices for shift above, extra_bits will always
3806 be 2 or 3. Then rounding under the round-half-to-even rule, we
3807 round up iff the most significant of the extra bits is 1, and
3808 either: (a) the computation of x in step 2 had an inexact result,
3809 or (b) at least one other of the extra bits is 1, or (c) the least
3810 significant bit of x (above those to be rounded) is 1.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003811
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003812 4. Conversion to a double is straightforward; all floating-point
3813 operations involved in the conversion are exact, so there's no
3814 danger of rounding errors.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003815
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003816 5. Use ldexp(x, shift) to compute x*2**shift, the final result.
3817 The result will always be exactly representable as a double, except
3818 in the case that it overflows. To avoid dependence on the exact
3819 behaviour of ldexp on overflow, we check for overflow before
3820 applying ldexp. The result of ldexp is adjusted for sign before
3821 returning.
3822 */
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003823
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003824 /* Reduce to case where a and b are both positive. */
Victor Stinner45e8e2f2014-05-14 17:24:35 +02003825 a_size = Py_ABS(Py_SIZE(a));
3826 b_size = Py_ABS(Py_SIZE(b));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003827 negate = (Py_SIZE(a) < 0) ^ (Py_SIZE(b) < 0);
3828 if (b_size == 0) {
3829 PyErr_SetString(PyExc_ZeroDivisionError,
3830 "division by zero");
3831 goto error;
3832 }
3833 if (a_size == 0)
3834 goto underflow_or_zero;
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003835
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003836 /* Fast path for a and b small (exactly representable in a double).
3837 Relies on floating-point division being correctly rounded; results
3838 may be subject to double rounding on x86 machines that operate with
3839 the x87 FPU set to 64-bit precision. */
3840 a_is_small = a_size <= MANT_DIG_DIGITS ||
3841 (a_size == MANT_DIG_DIGITS+1 &&
3842 a->ob_digit[MANT_DIG_DIGITS] >> MANT_DIG_BITS == 0);
3843 b_is_small = b_size <= MANT_DIG_DIGITS ||
3844 (b_size == MANT_DIG_DIGITS+1 &&
3845 b->ob_digit[MANT_DIG_DIGITS] >> MANT_DIG_BITS == 0);
3846 if (a_is_small && b_is_small) {
3847 double da, db;
3848 da = a->ob_digit[--a_size];
3849 while (a_size > 0)
3850 da = da * PyLong_BASE + a->ob_digit[--a_size];
3851 db = b->ob_digit[--b_size];
3852 while (b_size > 0)
3853 db = db * PyLong_BASE + b->ob_digit[--b_size];
3854 result = da / db;
3855 goto success;
3856 }
Tim Peterse2a60002001-09-04 06:17:36 +00003857
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003858 /* Catch obvious cases of underflow and overflow */
3859 diff = a_size - b_size;
3860 if (diff > PY_SSIZE_T_MAX/PyLong_SHIFT - 1)
3861 /* Extreme overflow */
3862 goto overflow;
3863 else if (diff < 1 - PY_SSIZE_T_MAX/PyLong_SHIFT)
3864 /* Extreme underflow */
3865 goto underflow_or_zero;
3866 /* Next line is now safe from overflowing a Py_ssize_t */
3867 diff = diff * PyLong_SHIFT + bits_in_digit(a->ob_digit[a_size - 1]) -
3868 bits_in_digit(b->ob_digit[b_size - 1]);
3869 /* Now diff = a_bits - b_bits. */
3870 if (diff > DBL_MAX_EXP)
3871 goto overflow;
3872 else if (diff < DBL_MIN_EXP - DBL_MANT_DIG - 1)
3873 goto underflow_or_zero;
Tim Peterse2a60002001-09-04 06:17:36 +00003874
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003875 /* Choose value for shift; see comments for step 1 above. */
Victor Stinner640c35c2013-06-04 23:14:37 +02003876 shift = Py_MAX(diff, DBL_MIN_EXP) - DBL_MANT_DIG - 2;
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003877
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003878 inexact = 0;
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003879
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003880 /* x = abs(a * 2**-shift) */
3881 if (shift <= 0) {
3882 Py_ssize_t i, shift_digits = -shift / PyLong_SHIFT;
3883 digit rem;
3884 /* x = a << -shift */
3885 if (a_size >= PY_SSIZE_T_MAX - 1 - shift_digits) {
3886 /* In practice, it's probably impossible to end up
3887 here. Both a and b would have to be enormous,
3888 using close to SIZE_T_MAX bytes of memory each. */
3889 PyErr_SetString(PyExc_OverflowError,
Mark Dickinson22b20182010-05-10 21:27:53 +00003890 "intermediate overflow during division");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003891 goto error;
3892 }
3893 x = _PyLong_New(a_size + shift_digits + 1);
3894 if (x == NULL)
3895 goto error;
3896 for (i = 0; i < shift_digits; i++)
3897 x->ob_digit[i] = 0;
3898 rem = v_lshift(x->ob_digit + shift_digits, a->ob_digit,
3899 a_size, -shift % PyLong_SHIFT);
3900 x->ob_digit[a_size + shift_digits] = rem;
3901 }
3902 else {
3903 Py_ssize_t shift_digits = shift / PyLong_SHIFT;
3904 digit rem;
3905 /* x = a >> shift */
3906 assert(a_size >= shift_digits);
3907 x = _PyLong_New(a_size - shift_digits);
3908 if (x == NULL)
3909 goto error;
3910 rem = v_rshift(x->ob_digit, a->ob_digit + shift_digits,
3911 a_size - shift_digits, shift % PyLong_SHIFT);
3912 /* set inexact if any of the bits shifted out is nonzero */
3913 if (rem)
3914 inexact = 1;
3915 while (!inexact && shift_digits > 0)
3916 if (a->ob_digit[--shift_digits])
3917 inexact = 1;
3918 }
3919 long_normalize(x);
3920 x_size = Py_SIZE(x);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003921
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003922 /* x //= b. If the remainder is nonzero, set inexact. We own the only
3923 reference to x, so it's safe to modify it in-place. */
3924 if (b_size == 1) {
3925 digit rem = inplace_divrem1(x->ob_digit, x->ob_digit, x_size,
3926 b->ob_digit[0]);
3927 long_normalize(x);
3928 if (rem)
3929 inexact = 1;
3930 }
3931 else {
3932 PyLongObject *div, *rem;
3933 div = x_divrem(x, b, &rem);
3934 Py_DECREF(x);
3935 x = div;
3936 if (x == NULL)
3937 goto error;
3938 if (Py_SIZE(rem))
3939 inexact = 1;
3940 Py_DECREF(rem);
3941 }
Victor Stinner45e8e2f2014-05-14 17:24:35 +02003942 x_size = Py_ABS(Py_SIZE(x));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003943 assert(x_size > 0); /* result of division is never zero */
3944 x_bits = (x_size-1)*PyLong_SHIFT+bits_in_digit(x->ob_digit[x_size-1]);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003945
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003946 /* The number of extra bits that have to be rounded away. */
Victor Stinner640c35c2013-06-04 23:14:37 +02003947 extra_bits = Py_MAX(x_bits, DBL_MIN_EXP - shift) - DBL_MANT_DIG;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003948 assert(extra_bits == 2 || extra_bits == 3);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003949
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003950 /* Round by directly modifying the low digit of x. */
3951 mask = (digit)1 << (extra_bits - 1);
3952 low = x->ob_digit[0] | inexact;
Mark Dickinsondc590a42016-08-21 10:23:23 +01003953 if ((low & mask) && (low & (3U*mask-1U)))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003954 low += mask;
Mark Dickinsondc590a42016-08-21 10:23:23 +01003955 x->ob_digit[0] = low & ~(2U*mask-1U);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003956
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003957 /* Convert x to a double dx; the conversion is exact. */
3958 dx = x->ob_digit[--x_size];
3959 while (x_size > 0)
3960 dx = dx * PyLong_BASE + x->ob_digit[--x_size];
3961 Py_DECREF(x);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003962
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003963 /* Check whether ldexp result will overflow a double. */
3964 if (shift + x_bits >= DBL_MAX_EXP &&
3965 (shift + x_bits > DBL_MAX_EXP || dx == ldexp(1.0, (int)x_bits)))
3966 goto overflow;
3967 result = ldexp(dx, (int)shift);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003968
3969 success:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003970 return PyFloat_FromDouble(negate ? -result : result);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003971
3972 underflow_or_zero:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003973 return PyFloat_FromDouble(negate ? -0.0 : 0.0);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003974
3975 overflow:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003976 PyErr_SetString(PyExc_OverflowError,
3977 "integer division result too large for a float");
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003978 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003979 return NULL;
Tim Peters20dab9f2001-09-04 05:31:47 +00003980}
3981
3982static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003983long_mod(PyObject *a, PyObject *b)
Guido van Rossume32e0141992-01-19 16:31:05 +00003984{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003985 PyLongObject *mod;
Neil Schemenauerba872e22001-01-04 01:46:03 +00003986
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003987 CHECK_BINOP(a, b);
3988
Yury Selivanove0b23092016-02-11 10:26:27 -05003989 if (Py_ABS(Py_SIZE(a)) == 1 && Py_ABS(Py_SIZE(b)) == 1) {
3990 return fast_mod((PyLongObject*)a, (PyLongObject*)b);
3991 }
3992
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003993 if (l_divmod((PyLongObject*)a, (PyLongObject*)b, NULL, &mod) < 0)
3994 mod = NULL;
3995 return (PyObject *)mod;
Guido van Rossume32e0141992-01-19 16:31:05 +00003996}
3997
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003998static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003999long_divmod(PyObject *a, PyObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00004000{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004001 PyLongObject *div, *mod;
4002 PyObject *z;
Neil Schemenauerba872e22001-01-04 01:46:03 +00004003
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004004 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00004005
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004006 if (l_divmod((PyLongObject*)a, (PyLongObject*)b, &div, &mod) < 0) {
4007 return NULL;
4008 }
4009 z = PyTuple_New(2);
4010 if (z != NULL) {
4011 PyTuple_SetItem(z, 0, (PyObject *) div);
4012 PyTuple_SetItem(z, 1, (PyObject *) mod);
4013 }
4014 else {
4015 Py_DECREF(div);
4016 Py_DECREF(mod);
4017 }
4018 return z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00004019}
4020
Tim Peters47e52ee2004-08-30 02:44:38 +00004021/* pow(v, w, x) */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004022static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00004023long_pow(PyObject *v, PyObject *w, PyObject *x)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00004024{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004025 PyLongObject *a, *b, *c; /* a,b,c = v,w,x */
4026 int negativeOutput = 0; /* if x<0 return negative output */
Neil Schemenauerba872e22001-01-04 01:46:03 +00004027
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004028 PyLongObject *z = NULL; /* accumulated result */
4029 Py_ssize_t i, j, k; /* counters */
4030 PyLongObject *temp = NULL;
Tim Peters47e52ee2004-08-30 02:44:38 +00004031
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004032 /* 5-ary values. If the exponent is large enough, table is
4033 * precomputed so that table[i] == a**i % c for i in range(32).
4034 */
4035 PyLongObject *table[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
4036 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
Tim Peters47e52ee2004-08-30 02:44:38 +00004037
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004038 /* a, b, c = v, w, x */
4039 CHECK_BINOP(v, w);
4040 a = (PyLongObject*)v; Py_INCREF(a);
4041 b = (PyLongObject*)w; Py_INCREF(b);
4042 if (PyLong_Check(x)) {
4043 c = (PyLongObject *)x;
4044 Py_INCREF(x);
4045 }
4046 else if (x == Py_None)
4047 c = NULL;
4048 else {
4049 Py_DECREF(a);
4050 Py_DECREF(b);
Brian Curtindfc80e32011-08-10 20:28:54 -05004051 Py_RETURN_NOTIMPLEMENTED;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004052 }
Tim Peters4c483c42001-09-05 06:24:58 +00004053
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004054 if (Py_SIZE(b) < 0) { /* if exponent is negative */
4055 if (c) {
Mark Dickinson0c346d82014-04-11 14:34:40 -04004056 PyErr_SetString(PyExc_ValueError, "pow() 2nd argument "
Mark Dickinson22b20182010-05-10 21:27:53 +00004057 "cannot be negative when 3rd argument specified");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004058 goto Error;
4059 }
4060 else {
4061 /* else return a float. This works because we know
4062 that this calls float_pow() which converts its
4063 arguments to double. */
4064 Py_DECREF(a);
4065 Py_DECREF(b);
4066 return PyFloat_Type.tp_as_number->nb_power(v, w, x);
4067 }
4068 }
Tim Peters47e52ee2004-08-30 02:44:38 +00004069
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004070 if (c) {
4071 /* if modulus == 0:
4072 raise ValueError() */
4073 if (Py_SIZE(c) == 0) {
4074 PyErr_SetString(PyExc_ValueError,
4075 "pow() 3rd argument cannot be 0");
4076 goto Error;
4077 }
Tim Peters47e52ee2004-08-30 02:44:38 +00004078
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004079 /* if modulus < 0:
4080 negativeOutput = True
4081 modulus = -modulus */
4082 if (Py_SIZE(c) < 0) {
4083 negativeOutput = 1;
4084 temp = (PyLongObject *)_PyLong_Copy(c);
4085 if (temp == NULL)
4086 goto Error;
4087 Py_DECREF(c);
4088 c = temp;
4089 temp = NULL;
Victor Stinner8aed6f12013-07-17 22:31:17 +02004090 _PyLong_Negate(&c);
4091 if (c == NULL)
4092 goto Error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004093 }
Tim Peters47e52ee2004-08-30 02:44:38 +00004094
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004095 /* if modulus == 1:
4096 return 0 */
4097 if ((Py_SIZE(c) == 1) && (c->ob_digit[0] == 1)) {
4098 z = (PyLongObject *)PyLong_FromLong(0L);
4099 goto Done;
4100 }
Tim Peters47e52ee2004-08-30 02:44:38 +00004101
Tim Peters81a93152013-10-05 16:53:52 -05004102 /* Reduce base by modulus in some cases:
4103 1. If base < 0. Forcing the base non-negative makes things easier.
4104 2. If base is obviously larger than the modulus. The "small
4105 exponent" case later can multiply directly by base repeatedly,
4106 while the "large exponent" case multiplies directly by base 31
4107 times. It can be unboundedly faster to multiply by
4108 base % modulus instead.
4109 We could _always_ do this reduction, but l_divmod() isn't cheap,
4110 so we only do it when it buys something. */
4111 if (Py_SIZE(a) < 0 || Py_SIZE(a) > Py_SIZE(c)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004112 if (l_divmod(a, c, NULL, &temp) < 0)
4113 goto Error;
4114 Py_DECREF(a);
4115 a = temp;
4116 temp = NULL;
4117 }
4118 }
Tim Peters47e52ee2004-08-30 02:44:38 +00004119
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004120 /* At this point a, b, and c are guaranteed non-negative UNLESS
4121 c is NULL, in which case a may be negative. */
Tim Peters47e52ee2004-08-30 02:44:38 +00004122
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004123 z = (PyLongObject *)PyLong_FromLong(1L);
4124 if (z == NULL)
4125 goto Error;
Tim Peters47e52ee2004-08-30 02:44:38 +00004126
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004127 /* Perform a modular reduction, X = X % c, but leave X alone if c
4128 * is NULL.
4129 */
4130#define REDUCE(X) \
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00004131 do { \
4132 if (c != NULL) { \
4133 if (l_divmod(X, c, NULL, &temp) < 0) \
4134 goto Error; \
4135 Py_XDECREF(X); \
4136 X = temp; \
4137 temp = NULL; \
4138 } \
4139 } while(0)
Tim Peters47e52ee2004-08-30 02:44:38 +00004140
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004141 /* Multiply two values, then reduce the result:
4142 result = X*Y % c. If c is NULL, skip the mod. */
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00004143#define MULT(X, Y, result) \
4144 do { \
4145 temp = (PyLongObject *)long_mul(X, Y); \
4146 if (temp == NULL) \
4147 goto Error; \
4148 Py_XDECREF(result); \
4149 result = temp; \
4150 temp = NULL; \
4151 REDUCE(result); \
4152 } while(0)
Tim Peters47e52ee2004-08-30 02:44:38 +00004153
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004154 if (Py_SIZE(b) <= FIVEARY_CUTOFF) {
4155 /* Left-to-right binary exponentiation (HAC Algorithm 14.79) */
4156 /* http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf */
4157 for (i = Py_SIZE(b) - 1; i >= 0; --i) {
4158 digit bi = b->ob_digit[i];
Tim Peters47e52ee2004-08-30 02:44:38 +00004159
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004160 for (j = (digit)1 << (PyLong_SHIFT-1); j != 0; j >>= 1) {
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00004161 MULT(z, z, z);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004162 if (bi & j)
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00004163 MULT(z, a, z);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004164 }
4165 }
4166 }
4167 else {
4168 /* Left-to-right 5-ary exponentiation (HAC Algorithm 14.82) */
4169 Py_INCREF(z); /* still holds 1L */
4170 table[0] = z;
4171 for (i = 1; i < 32; ++i)
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00004172 MULT(table[i-1], a, table[i]);
Tim Peters47e52ee2004-08-30 02:44:38 +00004173
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004174 for (i = Py_SIZE(b) - 1; i >= 0; --i) {
4175 const digit bi = b->ob_digit[i];
Tim Peters47e52ee2004-08-30 02:44:38 +00004176
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004177 for (j = PyLong_SHIFT - 5; j >= 0; j -= 5) {
4178 const int index = (bi >> j) & 0x1f;
4179 for (k = 0; k < 5; ++k)
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00004180 MULT(z, z, z);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004181 if (index)
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00004182 MULT(z, table[index], z);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004183 }
4184 }
4185 }
Tim Peters47e52ee2004-08-30 02:44:38 +00004186
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004187 if (negativeOutput && (Py_SIZE(z) != 0)) {
4188 temp = (PyLongObject *)long_sub(z, c);
4189 if (temp == NULL)
4190 goto Error;
4191 Py_DECREF(z);
4192 z = temp;
4193 temp = NULL;
4194 }
4195 goto Done;
Tim Peters47e52ee2004-08-30 02:44:38 +00004196
Mark Dickinson22b20182010-05-10 21:27:53 +00004197 Error:
Victor Stinner8aed6f12013-07-17 22:31:17 +02004198 Py_CLEAR(z);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004199 /* fall through */
Mark Dickinson22b20182010-05-10 21:27:53 +00004200 Done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004201 if (Py_SIZE(b) > FIVEARY_CUTOFF) {
4202 for (i = 0; i < 32; ++i)
4203 Py_XDECREF(table[i]);
4204 }
4205 Py_DECREF(a);
4206 Py_DECREF(b);
4207 Py_XDECREF(c);
4208 Py_XDECREF(temp);
4209 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00004210}
4211
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004212static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00004213long_invert(PyLongObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00004214{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004215 /* Implement ~x as -(x+1) */
4216 PyLongObject *x;
Victor Stinner45e8e2f2014-05-14 17:24:35 +02004217 if (Py_ABS(Py_SIZE(v)) <=1)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004218 return PyLong_FromLong(-(MEDIUM_VALUE(v)+1));
Serhiy Storchakaba85d692017-03-30 09:09:41 +03004219 x = (PyLongObject *) long_add(v, (PyLongObject *)_PyLong_One);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004220 if (x == NULL)
4221 return NULL;
Mark Dickinson583c6e82016-08-29 16:40:29 +01004222 _PyLong_Negate(&x);
4223 /* No need for maybe_small_long here, since any small
4224 longs will have been caught in the Py_SIZE <= 1 fast path. */
4225 return (PyObject *)x;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00004226}
4227
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004228static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00004229long_neg(PyLongObject *v)
Guido van Rossumc6913e71991-11-19 20:26:46 +00004230{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004231 PyLongObject *z;
Victor Stinner45e8e2f2014-05-14 17:24:35 +02004232 if (Py_ABS(Py_SIZE(v)) <= 1)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004233 return PyLong_FromLong(-MEDIUM_VALUE(v));
4234 z = (PyLongObject *)_PyLong_Copy(v);
4235 if (z != NULL)
4236 Py_SIZE(z) = -(Py_SIZE(v));
4237 return (PyObject *)z;
Guido van Rossumc6913e71991-11-19 20:26:46 +00004238}
4239
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004240static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00004241long_abs(PyLongObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00004242{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004243 if (Py_SIZE(v) < 0)
4244 return long_neg(v);
4245 else
4246 return long_long((PyObject *)v);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00004247}
4248
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00004249static int
Jack Diederich4dafcc42006-11-28 19:15:13 +00004250long_bool(PyLongObject *v)
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00004251{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004252 return Py_SIZE(v) != 0;
Guido van Rossumc6913e71991-11-19 20:26:46 +00004253}
4254
Serhiy Storchaka918403c2017-03-30 09:47:07 +03004255/* wordshift, remshift = divmod(shiftby, PyLong_SHIFT) */
4256static int
4257divmod_shift(PyLongObject *shiftby, Py_ssize_t *wordshift, digit *remshift)
4258{
4259 assert(PyLong_Check((PyObject *)shiftby));
4260 assert(Py_SIZE(shiftby) >= 0);
4261 Py_ssize_t lshiftby = PyLong_AsSsize_t((PyObject *)shiftby);
4262 if (lshiftby >= 0) {
4263 *wordshift = lshiftby / PyLong_SHIFT;
4264 *remshift = lshiftby % PyLong_SHIFT;
4265 return 0;
4266 }
4267 /* PyLong_Check(shiftby) is true and Py_SIZE(shiftby) >= 0, so it must
4268 be that PyLong_AsSsize_t raised an OverflowError. */
4269 assert(PyErr_ExceptionMatches(PyExc_OverflowError));
4270 PyErr_Clear();
4271 PyLongObject *wordshift_obj = divrem1(shiftby, PyLong_SHIFT, remshift);
4272 if (wordshift_obj == NULL) {
4273 return -1;
4274 }
4275 *wordshift = PyLong_AsSsize_t((PyObject *)wordshift_obj);
4276 Py_DECREF(wordshift_obj);
4277 if (*wordshift >= 0 && *wordshift < PY_SSIZE_T_MAX / (Py_ssize_t)sizeof(digit)) {
4278 return 0;
4279 }
4280 PyErr_Clear();
4281 /* Clip the value. With such large wordshift the right shift
4282 returns 0 and the left shift raises an error in _PyLong_New(). */
4283 *wordshift = PY_SSIZE_T_MAX / sizeof(digit);
4284 *remshift = 0;
4285 return 0;
4286}
4287
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004288static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00004289long_rshift(PyLongObject *a, PyLongObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00004290{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004291 PyLongObject *z = NULL;
Serhiy Storchaka918403c2017-03-30 09:47:07 +03004292 Py_ssize_t newsize, wordshift, hishift, i, j;
4293 digit loshift, lomask, himask;
Tim Peters5af4e6c2002-08-12 02:31:19 +00004294
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004295 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00004296
Serhiy Storchaka918403c2017-03-30 09:47:07 +03004297 if (Py_SIZE(b) < 0) {
4298 PyErr_SetString(PyExc_ValueError,
4299 "negative shift count");
4300 return NULL;
4301 }
4302
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004303 if (Py_SIZE(a) < 0) {
4304 /* Right shifting negative numbers is harder */
4305 PyLongObject *a1, *a2;
4306 a1 = (PyLongObject *) long_invert(a);
4307 if (a1 == NULL)
Mark Dickinson92ca5352016-09-17 17:50:50 +01004308 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004309 a2 = (PyLongObject *) long_rshift(a1, b);
4310 Py_DECREF(a1);
4311 if (a2 == NULL)
Mark Dickinson92ca5352016-09-17 17:50:50 +01004312 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004313 z = (PyLongObject *) long_invert(a2);
4314 Py_DECREF(a2);
4315 }
4316 else {
Serhiy Storchaka918403c2017-03-30 09:47:07 +03004317 if (divmod_shift(b, &wordshift, &loshift) < 0)
Mark Dickinson92ca5352016-09-17 17:50:50 +01004318 return NULL;
Serhiy Storchaka918403c2017-03-30 09:47:07 +03004319 newsize = Py_SIZE(a) - wordshift;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004320 if (newsize <= 0)
4321 return PyLong_FromLong(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004322 hishift = PyLong_SHIFT - loshift;
4323 lomask = ((digit)1 << hishift) - 1;
4324 himask = PyLong_MASK ^ lomask;
4325 z = _PyLong_New(newsize);
4326 if (z == NULL)
Mark Dickinson92ca5352016-09-17 17:50:50 +01004327 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004328 for (i = 0, j = wordshift; i < newsize; i++, j++) {
4329 z->ob_digit[i] = (a->ob_digit[j] >> loshift) & lomask;
4330 if (i+1 < newsize)
Mark Dickinson22b20182010-05-10 21:27:53 +00004331 z->ob_digit[i] |= (a->ob_digit[j+1] << hishift) & himask;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004332 }
Mark Dickinson92ca5352016-09-17 17:50:50 +01004333 z = maybe_small_long(long_normalize(z));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004334 }
Mark Dickinson92ca5352016-09-17 17:50:50 +01004335 return (PyObject *)z;
Guido van Rossumc6913e71991-11-19 20:26:46 +00004336}
4337
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004338static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00004339long_lshift(PyObject *v, PyObject *w)
Guido van Rossumc6913e71991-11-19 20:26:46 +00004340{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004341 /* This version due to Tim Peters */
4342 PyLongObject *a = (PyLongObject*)v;
4343 PyLongObject *b = (PyLongObject*)w;
4344 PyLongObject *z = NULL;
Serhiy Storchaka918403c2017-03-30 09:47:07 +03004345 Py_ssize_t oldsize, newsize, wordshift, i, j;
4346 digit remshift;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004347 twodigits accum;
Tim Peters5af4e6c2002-08-12 02:31:19 +00004348
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004349 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00004350
Serhiy Storchaka918403c2017-03-30 09:47:07 +03004351 if (Py_SIZE(b) < 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004352 PyErr_SetString(PyExc_ValueError, "negative shift count");
Victor Stinner8aed6f12013-07-17 22:31:17 +02004353 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004354 }
Mark Dickinson82a95272016-08-29 19:27:06 +01004355 if (Py_SIZE(a) == 0) {
4356 return PyLong_FromLong(0);
4357 }
4358
Serhiy Storchaka918403c2017-03-30 09:47:07 +03004359 if (divmod_shift(b, &wordshift, &remshift) < 0)
4360 return NULL;
Victor Stinner45e8e2f2014-05-14 17:24:35 +02004361 oldsize = Py_ABS(Py_SIZE(a));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004362 newsize = oldsize + wordshift;
4363 if (remshift)
4364 ++newsize;
4365 z = _PyLong_New(newsize);
4366 if (z == NULL)
Victor Stinner8aed6f12013-07-17 22:31:17 +02004367 return NULL;
4368 if (Py_SIZE(a) < 0) {
4369 assert(Py_REFCNT(z) == 1);
4370 Py_SIZE(z) = -Py_SIZE(z);
4371 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004372 for (i = 0; i < wordshift; i++)
4373 z->ob_digit[i] = 0;
4374 accum = 0;
4375 for (i = wordshift, j = 0; j < oldsize; i++, j++) {
4376 accum |= (twodigits)a->ob_digit[j] << remshift;
4377 z->ob_digit[i] = (digit)(accum & PyLong_MASK);
4378 accum >>= PyLong_SHIFT;
4379 }
4380 if (remshift)
4381 z->ob_digit[newsize-1] = (digit)accum;
4382 else
4383 assert(!accum);
4384 z = long_normalize(z);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004385 return (PyObject *) maybe_small_long(z);
Guido van Rossumc6913e71991-11-19 20:26:46 +00004386}
4387
Mark Dickinson27a87a22009-10-25 20:43:34 +00004388/* Compute two's complement of digit vector a[0:m], writing result to
4389 z[0:m]. The digit vector a need not be normalized, but should not
4390 be entirely zero. a and z may point to the same digit vector. */
4391
4392static void
4393v_complement(digit *z, digit *a, Py_ssize_t m)
4394{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004395 Py_ssize_t i;
4396 digit carry = 1;
4397 for (i = 0; i < m; ++i) {
4398 carry += a[i] ^ PyLong_MASK;
4399 z[i] = carry & PyLong_MASK;
4400 carry >>= PyLong_SHIFT;
4401 }
4402 assert(carry == 0);
Mark Dickinson27a87a22009-10-25 20:43:34 +00004403}
Guido van Rossum4c260ff1992-01-14 18:36:43 +00004404
4405/* Bitwise and/xor/or operations */
4406
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004407static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00004408long_bitwise(PyLongObject *a,
Benjamin Peterson513762f2012-12-26 16:43:33 -06004409 char op, /* '&', '|', '^' */
Mark Dickinson22b20182010-05-10 21:27:53 +00004410 PyLongObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00004411{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004412 int nega, negb, negz;
4413 Py_ssize_t size_a, size_b, size_z, i;
4414 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00004415
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004416 /* Bitwise operations for negative numbers operate as though
4417 on a two's complement representation. So convert arguments
4418 from sign-magnitude to two's complement, and convert the
4419 result back to sign-magnitude at the end. */
Mark Dickinson27a87a22009-10-25 20:43:34 +00004420
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004421 /* If a is negative, replace it by its two's complement. */
Victor Stinner45e8e2f2014-05-14 17:24:35 +02004422 size_a = Py_ABS(Py_SIZE(a));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004423 nega = Py_SIZE(a) < 0;
4424 if (nega) {
4425 z = _PyLong_New(size_a);
4426 if (z == NULL)
4427 return NULL;
4428 v_complement(z->ob_digit, a->ob_digit, size_a);
4429 a = z;
4430 }
4431 else
4432 /* Keep reference count consistent. */
4433 Py_INCREF(a);
Mark Dickinson27a87a22009-10-25 20:43:34 +00004434
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004435 /* Same for b. */
Victor Stinner45e8e2f2014-05-14 17:24:35 +02004436 size_b = Py_ABS(Py_SIZE(b));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004437 negb = Py_SIZE(b) < 0;
4438 if (negb) {
4439 z = _PyLong_New(size_b);
4440 if (z == NULL) {
4441 Py_DECREF(a);
4442 return NULL;
4443 }
4444 v_complement(z->ob_digit, b->ob_digit, size_b);
4445 b = z;
4446 }
4447 else
4448 Py_INCREF(b);
Tim Peters5af4e6c2002-08-12 02:31:19 +00004449
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004450 /* Swap a and b if necessary to ensure size_a >= size_b. */
4451 if (size_a < size_b) {
4452 z = a; a = b; b = z;
4453 size_z = size_a; size_a = size_b; size_b = size_z;
4454 negz = nega; nega = negb; negb = negz;
4455 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00004456
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004457 /* JRH: The original logic here was to allocate the result value (z)
4458 as the longer of the two operands. However, there are some cases
4459 where the result is guaranteed to be shorter than that: AND of two
4460 positives, OR of two negatives: use the shorter number. AND with
4461 mixed signs: use the positive number. OR with mixed signs: use the
4462 negative number.
4463 */
4464 switch (op) {
4465 case '^':
4466 negz = nega ^ negb;
4467 size_z = size_a;
4468 break;
4469 case '&':
4470 negz = nega & negb;
4471 size_z = negb ? size_a : size_b;
4472 break;
4473 case '|':
4474 negz = nega | negb;
4475 size_z = negb ? size_b : size_a;
4476 break;
4477 default:
4478 PyErr_BadArgument();
4479 return NULL;
4480 }
Guido van Rossumbd3a5271998-08-11 15:04:47 +00004481
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004482 /* We allow an extra digit if z is negative, to make sure that
4483 the final two's complement of z doesn't overflow. */
4484 z = _PyLong_New(size_z + negz);
4485 if (z == NULL) {
4486 Py_DECREF(a);
4487 Py_DECREF(b);
4488 return NULL;
4489 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00004490
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004491 /* Compute digits for overlap of a and b. */
4492 switch(op) {
4493 case '&':
4494 for (i = 0; i < size_b; ++i)
4495 z->ob_digit[i] = a->ob_digit[i] & b->ob_digit[i];
4496 break;
4497 case '|':
4498 for (i = 0; i < size_b; ++i)
4499 z->ob_digit[i] = a->ob_digit[i] | b->ob_digit[i];
4500 break;
4501 case '^':
4502 for (i = 0; i < size_b; ++i)
4503 z->ob_digit[i] = a->ob_digit[i] ^ b->ob_digit[i];
4504 break;
4505 default:
4506 PyErr_BadArgument();
4507 return NULL;
4508 }
Mark Dickinson27a87a22009-10-25 20:43:34 +00004509
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004510 /* Copy any remaining digits of a, inverting if necessary. */
4511 if (op == '^' && negb)
4512 for (; i < size_z; ++i)
4513 z->ob_digit[i] = a->ob_digit[i] ^ PyLong_MASK;
4514 else if (i < size_z)
4515 memcpy(&z->ob_digit[i], &a->ob_digit[i],
4516 (size_z-i)*sizeof(digit));
Mark Dickinson27a87a22009-10-25 20:43:34 +00004517
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004518 /* Complement result if negative. */
4519 if (negz) {
4520 Py_SIZE(z) = -(Py_SIZE(z));
4521 z->ob_digit[size_z] = PyLong_MASK;
4522 v_complement(z->ob_digit, z->ob_digit, size_z+1);
4523 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00004524
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004525 Py_DECREF(a);
4526 Py_DECREF(b);
4527 return (PyObject *)maybe_small_long(long_normalize(z));
Guido van Rossumc6913e71991-11-19 20:26:46 +00004528}
4529
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004530static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00004531long_and(PyObject *a, PyObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00004532{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004533 PyObject *c;
4534 CHECK_BINOP(a, b);
4535 c = long_bitwise((PyLongObject*)a, '&', (PyLongObject*)b);
4536 return c;
Guido van Rossumc6913e71991-11-19 20:26:46 +00004537}
4538
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004539static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00004540long_xor(PyObject *a, PyObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00004541{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004542 PyObject *c;
4543 CHECK_BINOP(a, b);
4544 c = long_bitwise((PyLongObject*)a, '^', (PyLongObject*)b);
4545 return c;
Guido van Rossumc6913e71991-11-19 20:26:46 +00004546}
4547
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004548static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00004549long_or(PyObject *a, PyObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00004550{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004551 PyObject *c;
4552 CHECK_BINOP(a, b);
4553 c = long_bitwise((PyLongObject*)a, '|', (PyLongObject*)b);
4554 return c;
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00004555}
4556
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004557static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00004558long_long(PyObject *v)
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004559{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004560 if (PyLong_CheckExact(v))
4561 Py_INCREF(v);
4562 else
4563 v = _PyLong_Copy((PyLongObject *)v);
4564 return v;
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004565}
4566
Serhiy Storchaka48e47aa2015-05-13 00:19:51 +03004567PyObject *
4568_PyLong_GCD(PyObject *aarg, PyObject *barg)
4569{
4570 PyLongObject *a, *b, *c = NULL, *d = NULL, *r;
4571 stwodigits x, y, q, s, t, c_carry, d_carry;
4572 stwodigits A, B, C, D, T;
4573 int nbits, k;
4574 Py_ssize_t size_a, size_b, alloc_a, alloc_b;
4575 digit *a_digit, *b_digit, *c_digit, *d_digit, *a_end, *b_end;
4576
4577 a = (PyLongObject *)aarg;
4578 b = (PyLongObject *)barg;
4579 size_a = Py_SIZE(a);
4580 size_b = Py_SIZE(b);
4581 if (-2 <= size_a && size_a <= 2 && -2 <= size_b && size_b <= 2) {
4582 Py_INCREF(a);
4583 Py_INCREF(b);
4584 goto simple;
4585 }
4586
4587 /* Initial reduction: make sure that 0 <= b <= a. */
4588 a = (PyLongObject *)long_abs(a);
4589 if (a == NULL)
4590 return NULL;
4591 b = (PyLongObject *)long_abs(b);
4592 if (b == NULL) {
4593 Py_DECREF(a);
4594 return NULL;
4595 }
4596 if (long_compare(a, b) < 0) {
4597 r = a;
4598 a = b;
4599 b = r;
4600 }
4601 /* We now own references to a and b */
4602
4603 alloc_a = Py_SIZE(a);
4604 alloc_b = Py_SIZE(b);
4605 /* reduce until a fits into 2 digits */
4606 while ((size_a = Py_SIZE(a)) > 2) {
4607 nbits = bits_in_digit(a->ob_digit[size_a-1]);
4608 /* extract top 2*PyLong_SHIFT bits of a into x, along with
4609 corresponding bits of b into y */
4610 size_b = Py_SIZE(b);
4611 assert(size_b <= size_a);
4612 if (size_b == 0) {
4613 if (size_a < alloc_a) {
4614 r = (PyLongObject *)_PyLong_Copy(a);
4615 Py_DECREF(a);
4616 }
4617 else
4618 r = a;
4619 Py_DECREF(b);
4620 Py_XDECREF(c);
4621 Py_XDECREF(d);
4622 return (PyObject *)r;
4623 }
4624 x = (((twodigits)a->ob_digit[size_a-1] << (2*PyLong_SHIFT-nbits)) |
4625 ((twodigits)a->ob_digit[size_a-2] << (PyLong_SHIFT-nbits)) |
4626 (a->ob_digit[size_a-3] >> nbits));
4627
4628 y = ((size_b >= size_a - 2 ? b->ob_digit[size_a-3] >> nbits : 0) |
4629 (size_b >= size_a - 1 ? (twodigits)b->ob_digit[size_a-2] << (PyLong_SHIFT-nbits) : 0) |
4630 (size_b >= size_a ? (twodigits)b->ob_digit[size_a-1] << (2*PyLong_SHIFT-nbits) : 0));
4631
4632 /* inner loop of Lehmer's algorithm; A, B, C, D never grow
4633 larger than PyLong_MASK during the algorithm. */
4634 A = 1; B = 0; C = 0; D = 1;
4635 for (k=0;; k++) {
4636 if (y-C == 0)
4637 break;
4638 q = (x+(A-1))/(y-C);
4639 s = B+q*D;
4640 t = x-q*y;
4641 if (s > t)
4642 break;
4643 x = y; y = t;
4644 t = A+q*C; A = D; B = C; C = s; D = t;
4645 }
4646
4647 if (k == 0) {
4648 /* no progress; do a Euclidean step */
4649 if (l_divmod(a, b, NULL, &r) < 0)
4650 goto error;
4651 Py_DECREF(a);
4652 a = b;
4653 b = r;
4654 alloc_a = alloc_b;
4655 alloc_b = Py_SIZE(b);
4656 continue;
4657 }
4658
4659 /*
4660 a, b = A*b-B*a, D*a-C*b if k is odd
4661 a, b = A*a-B*b, D*b-C*a if k is even
4662 */
4663 if (k&1) {
4664 T = -A; A = -B; B = T;
4665 T = -C; C = -D; D = T;
4666 }
4667 if (c != NULL)
4668 Py_SIZE(c) = size_a;
4669 else if (Py_REFCNT(a) == 1) {
4670 Py_INCREF(a);
4671 c = a;
4672 }
4673 else {
4674 alloc_a = size_a;
4675 c = _PyLong_New(size_a);
4676 if (c == NULL)
4677 goto error;
4678 }
4679
4680 if (d != NULL)
4681 Py_SIZE(d) = size_a;
4682 else if (Py_REFCNT(b) == 1 && size_a <= alloc_b) {
4683 Py_INCREF(b);
4684 d = b;
4685 Py_SIZE(d) = size_a;
4686 }
4687 else {
4688 alloc_b = size_a;
4689 d = _PyLong_New(size_a);
4690 if (d == NULL)
4691 goto error;
4692 }
4693 a_end = a->ob_digit + size_a;
4694 b_end = b->ob_digit + size_b;
4695
4696 /* compute new a and new b in parallel */
4697 a_digit = a->ob_digit;
4698 b_digit = b->ob_digit;
4699 c_digit = c->ob_digit;
4700 d_digit = d->ob_digit;
4701 c_carry = 0;
4702 d_carry = 0;
4703 while (b_digit < b_end) {
4704 c_carry += (A * *a_digit) - (B * *b_digit);
4705 d_carry += (D * *b_digit++) - (C * *a_digit++);
4706 *c_digit++ = (digit)(c_carry & PyLong_MASK);
4707 *d_digit++ = (digit)(d_carry & PyLong_MASK);
4708 c_carry >>= PyLong_SHIFT;
4709 d_carry >>= PyLong_SHIFT;
4710 }
4711 while (a_digit < a_end) {
4712 c_carry += A * *a_digit;
4713 d_carry -= C * *a_digit++;
4714 *c_digit++ = (digit)(c_carry & PyLong_MASK);
4715 *d_digit++ = (digit)(d_carry & PyLong_MASK);
4716 c_carry >>= PyLong_SHIFT;
4717 d_carry >>= PyLong_SHIFT;
4718 }
4719 assert(c_carry == 0);
4720 assert(d_carry == 0);
4721
4722 Py_INCREF(c);
4723 Py_INCREF(d);
4724 Py_DECREF(a);
4725 Py_DECREF(b);
4726 a = long_normalize(c);
4727 b = long_normalize(d);
4728 }
4729 Py_XDECREF(c);
4730 Py_XDECREF(d);
4731
4732simple:
4733 assert(Py_REFCNT(a) > 0);
4734 assert(Py_REFCNT(b) > 0);
Victor Stinner5783fd22015-09-19 13:39:03 +02004735/* Issue #24999: use two shifts instead of ">> 2*PyLong_SHIFT" to avoid
4736 undefined behaviour when LONG_MAX type is smaller than 60 bits */
4737#if LONG_MAX >> PyLong_SHIFT >> PyLong_SHIFT
Serhiy Storchaka48e47aa2015-05-13 00:19:51 +03004738 /* a fits into a long, so b must too */
4739 x = PyLong_AsLong((PyObject *)a);
4740 y = PyLong_AsLong((PyObject *)b);
Benjamin Petersond953f8e2016-09-06 10:51:19 -07004741#elif PY_LLONG_MAX >> PyLong_SHIFT >> PyLong_SHIFT
Serhiy Storchaka48e47aa2015-05-13 00:19:51 +03004742 x = PyLong_AsLongLong((PyObject *)a);
4743 y = PyLong_AsLongLong((PyObject *)b);
4744#else
4745# error "_PyLong_GCD"
4746#endif
4747 x = Py_ABS(x);
4748 y = Py_ABS(y);
4749 Py_DECREF(a);
4750 Py_DECREF(b);
4751
4752 /* usual Euclidean algorithm for longs */
4753 while (y != 0) {
4754 t = y;
4755 y = x % y;
4756 x = t;
4757 }
Victor Stinner5783fd22015-09-19 13:39:03 +02004758#if LONG_MAX >> PyLong_SHIFT >> PyLong_SHIFT
Serhiy Storchaka48e47aa2015-05-13 00:19:51 +03004759 return PyLong_FromLong(x);
Benjamin Petersond953f8e2016-09-06 10:51:19 -07004760#elif PY_LLONG_MAX >> PyLong_SHIFT >> PyLong_SHIFT
Serhiy Storchaka48e47aa2015-05-13 00:19:51 +03004761 return PyLong_FromLongLong(x);
4762#else
4763# error "_PyLong_GCD"
4764#endif
4765
4766error:
4767 Py_DECREF(a);
4768 Py_DECREF(b);
4769 Py_XDECREF(c);
4770 Py_XDECREF(d);
4771 return NULL;
4772}
4773
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004774static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00004775long_float(PyObject *v)
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004776{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004777 double result;
4778 result = PyLong_AsDouble(v);
4779 if (result == -1.0 && PyErr_Occurred())
4780 return NULL;
4781 return PyFloat_FromDouble(result);
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004782}
4783
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004784static PyObject *
Serhiy Storchaka18b250f2017-03-19 08:51:07 +02004785long_subtype_new(PyTypeObject *type, PyObject *x, PyObject *obase);
4786
4787/*[clinic input]
4788@classmethod
4789int.__new__ as long_new
4790 x: object(c_default="NULL") = 0
4791 /
4792 base as obase: object(c_default="NULL") = 10
4793[clinic start generated code]*/
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004794
Tim Peters6d6c1a32001-08-02 04:15:00 +00004795static PyObject *
Serhiy Storchaka18b250f2017-03-19 08:51:07 +02004796long_new_impl(PyTypeObject *type, PyObject *x, PyObject *obase)
4797/*[clinic end generated code: output=e47cfe777ab0f24c input=81c98f418af9eb6f]*/
Tim Peters6d6c1a32001-08-02 04:15:00 +00004798{
Gregory P. Smitha689e522012-12-25 22:38:32 -08004799 Py_ssize_t base;
Tim Peters6d6c1a32001-08-02 04:15:00 +00004800
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004801 if (type != &PyLong_Type)
Serhiy Storchaka18b250f2017-03-19 08:51:07 +02004802 return long_subtype_new(type, x, obase); /* Wimp out */
Serhiy Storchaka0b386d52012-12-28 09:42:11 +02004803 if (x == NULL) {
4804 if (obase != NULL) {
4805 PyErr_SetString(PyExc_TypeError,
4806 "int() missing string argument");
4807 return NULL;
4808 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004809 return PyLong_FromLong(0L);
Serhiy Storchaka0b386d52012-12-28 09:42:11 +02004810 }
Mark Dickinsonf9a5a8e2010-05-26 20:07:58 +00004811 if (obase == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004812 return PyNumber_Long(x);
Mark Dickinsonf9a5a8e2010-05-26 20:07:58 +00004813
Gregory P. Smitha689e522012-12-25 22:38:32 -08004814 base = PyNumber_AsSsize_t(obase, NULL);
Mark Dickinsonf9a5a8e2010-05-26 20:07:58 +00004815 if (base == -1 && PyErr_Occurred())
4816 return NULL;
Gregory P. Smitha689e522012-12-25 22:38:32 -08004817 if ((base != 0 && base < 2) || base > 36) {
Mark Dickinsonf9a5a8e2010-05-26 20:07:58 +00004818 PyErr_SetString(PyExc_ValueError,
Sanyam Khurana28b62482017-11-14 03:19:26 +05304819 "int() base must be >= 2 and <= 36, or 0");
Mark Dickinsonf9a5a8e2010-05-26 20:07:58 +00004820 return NULL;
4821 }
4822
4823 if (PyUnicode_Check(x))
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02004824 return PyLong_FromUnicodeObject(x, (int)base);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004825 else if (PyByteArray_Check(x) || PyBytes_Check(x)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004826 char *string;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004827 if (PyByteArray_Check(x))
4828 string = PyByteArray_AS_STRING(x);
4829 else
4830 string = PyBytes_AS_STRING(x);
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03004831 return _PyLong_FromBytes(string, Py_SIZE(x), (int)base);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004832 }
4833 else {
4834 PyErr_SetString(PyExc_TypeError,
Mark Dickinson22b20182010-05-10 21:27:53 +00004835 "int() can't convert non-string with explicit base");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004836 return NULL;
4837 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00004838}
4839
Serhiy Storchaka95949422013-08-27 19:40:23 +03004840/* Wimpy, slow approach to tp_new calls for subtypes of int:
4841 first create a regular int from whatever arguments we got,
Guido van Rossumbef14172001-08-29 15:47:46 +00004842 then allocate a subtype instance and initialize it from
Serhiy Storchaka95949422013-08-27 19:40:23 +03004843 the regular int. The regular int is then thrown away.
Guido van Rossumbef14172001-08-29 15:47:46 +00004844*/
4845static PyObject *
Serhiy Storchaka18b250f2017-03-19 08:51:07 +02004846long_subtype_new(PyTypeObject *type, PyObject *x, PyObject *obase)
Guido van Rossumbef14172001-08-29 15:47:46 +00004847{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004848 PyLongObject *tmp, *newobj;
4849 Py_ssize_t i, n;
Guido van Rossumbef14172001-08-29 15:47:46 +00004850
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004851 assert(PyType_IsSubtype(type, &PyLong_Type));
Serhiy Storchaka18b250f2017-03-19 08:51:07 +02004852 tmp = (PyLongObject *)long_new_impl(&PyLong_Type, x, obase);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004853 if (tmp == NULL)
4854 return NULL;
Serhiy Storchaka15095802015-11-25 15:47:01 +02004855 assert(PyLong_Check(tmp));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004856 n = Py_SIZE(tmp);
4857 if (n < 0)
4858 n = -n;
4859 newobj = (PyLongObject *)type->tp_alloc(type, n);
4860 if (newobj == NULL) {
4861 Py_DECREF(tmp);
4862 return NULL;
4863 }
4864 assert(PyLong_Check(newobj));
4865 Py_SIZE(newobj) = Py_SIZE(tmp);
4866 for (i = 0; i < n; i++)
4867 newobj->ob_digit[i] = tmp->ob_digit[i];
4868 Py_DECREF(tmp);
4869 return (PyObject *)newobj;
Guido van Rossumbef14172001-08-29 15:47:46 +00004870}
4871
Serhiy Storchaka495e8802017-02-01 23:12:20 +02004872/*[clinic input]
4873int.__getnewargs__
4874[clinic start generated code]*/
4875
Guido van Rossum5d9113d2003-01-29 17:58:45 +00004876static PyObject *
Serhiy Storchaka495e8802017-02-01 23:12:20 +02004877int___getnewargs___impl(PyObject *self)
4878/*[clinic end generated code: output=839a49de3f00b61b input=5904770ab1fb8c75]*/
Guido van Rossum5d9113d2003-01-29 17:58:45 +00004879{
Serhiy Storchaka495e8802017-02-01 23:12:20 +02004880 return Py_BuildValue("(N)", _PyLong_Copy((PyLongObject *)self));
Guido van Rossum5d9113d2003-01-29 17:58:45 +00004881}
4882
Guido van Rossumb43daf72007-08-01 18:08:08 +00004883static PyObject *
Mark Dickinson6bf19002009-05-02 17:57:52 +00004884long_get0(PyLongObject *v, void *context) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004885 return PyLong_FromLong(0L);
Mark Dickinson6bf19002009-05-02 17:57:52 +00004886}
4887
4888static PyObject *
4889long_get1(PyLongObject *v, void *context) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004890 return PyLong_FromLong(1L);
Guido van Rossumb43daf72007-08-01 18:08:08 +00004891}
4892
Serhiy Storchaka495e8802017-02-01 23:12:20 +02004893/*[clinic input]
4894int.__format__
4895
4896 format_spec: unicode
4897 /
4898[clinic start generated code]*/
4899
Guido van Rossum2fa33db2007-08-23 22:07:24 +00004900static PyObject *
Serhiy Storchaka495e8802017-02-01 23:12:20 +02004901int___format___impl(PyObject *self, PyObject *format_spec)
4902/*[clinic end generated code: output=b4929dee9ae18689 input=e31944a9b3e428b7]*/
Eric Smith8c663262007-08-25 02:26:07 +00004903{
Victor Stinnerd3f08822012-05-29 12:57:52 +02004904 _PyUnicodeWriter writer;
4905 int ret;
Eric Smith4a7d76d2008-05-30 18:10:19 +00004906
Victor Stinner8f674cc2013-04-17 23:02:17 +02004907 _PyUnicodeWriter_Init(&writer);
Victor Stinnerd3f08822012-05-29 12:57:52 +02004908 ret = _PyLong_FormatAdvancedWriter(
4909 &writer,
4910 self,
4911 format_spec, 0, PyUnicode_GET_LENGTH(format_spec));
4912 if (ret == -1) {
4913 _PyUnicodeWriter_Dealloc(&writer);
4914 return NULL;
4915 }
4916 return _PyUnicodeWriter_Finish(&writer);
Eric Smith8c663262007-08-25 02:26:07 +00004917}
4918
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004919/* Return a pair (q, r) such that a = b * q + r, and
4920 abs(r) <= abs(b)/2, with equality possible only if q is even.
4921 In other words, q == a / b, rounded to the nearest integer using
4922 round-half-to-even. */
4923
4924PyObject *
Mark Dickinsonfa68a612010-06-07 18:47:09 +00004925_PyLong_DivmodNear(PyObject *a, PyObject *b)
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004926{
4927 PyLongObject *quo = NULL, *rem = NULL;
Serhiy Storchakaba85d692017-03-30 09:09:41 +03004928 PyObject *twice_rem, *result, *temp;
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004929 int cmp, quo_is_odd, quo_is_neg;
4930
4931 /* Equivalent Python code:
4932
4933 def divmod_near(a, b):
4934 q, r = divmod(a, b)
4935 # round up if either r / b > 0.5, or r / b == 0.5 and q is odd.
4936 # The expression r / b > 0.5 is equivalent to 2 * r > b if b is
4937 # positive, 2 * r < b if b negative.
4938 greater_than_half = 2*r > b if b > 0 else 2*r < b
4939 exactly_half = 2*r == b
4940 if greater_than_half or exactly_half and q % 2 == 1:
4941 q += 1
4942 r -= b
4943 return q, r
4944
4945 */
4946 if (!PyLong_Check(a) || !PyLong_Check(b)) {
4947 PyErr_SetString(PyExc_TypeError,
4948 "non-integer arguments in division");
4949 return NULL;
4950 }
4951
4952 /* Do a and b have different signs? If so, quotient is negative. */
4953 quo_is_neg = (Py_SIZE(a) < 0) != (Py_SIZE(b) < 0);
4954
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004955 if (long_divrem((PyLongObject*)a, (PyLongObject*)b, &quo, &rem) < 0)
4956 goto error;
4957
4958 /* compare twice the remainder with the divisor, to see
4959 if we need to adjust the quotient and remainder */
Serhiy Storchakaba85d692017-03-30 09:09:41 +03004960 twice_rem = long_lshift((PyObject *)rem, _PyLong_One);
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004961 if (twice_rem == NULL)
4962 goto error;
4963 if (quo_is_neg) {
4964 temp = long_neg((PyLongObject*)twice_rem);
4965 Py_DECREF(twice_rem);
4966 twice_rem = temp;
4967 if (twice_rem == NULL)
4968 goto error;
4969 }
4970 cmp = long_compare((PyLongObject *)twice_rem, (PyLongObject *)b);
4971 Py_DECREF(twice_rem);
4972
4973 quo_is_odd = Py_SIZE(quo) != 0 && ((quo->ob_digit[0] & 1) != 0);
4974 if ((Py_SIZE(b) < 0 ? cmp < 0 : cmp > 0) || (cmp == 0 && quo_is_odd)) {
4975 /* fix up quotient */
4976 if (quo_is_neg)
Serhiy Storchakaba85d692017-03-30 09:09:41 +03004977 temp = long_sub(quo, (PyLongObject *)_PyLong_One);
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004978 else
Serhiy Storchakaba85d692017-03-30 09:09:41 +03004979 temp = long_add(quo, (PyLongObject *)_PyLong_One);
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004980 Py_DECREF(quo);
4981 quo = (PyLongObject *)temp;
4982 if (quo == NULL)
4983 goto error;
4984 /* and remainder */
4985 if (quo_is_neg)
4986 temp = long_add(rem, (PyLongObject *)b);
4987 else
4988 temp = long_sub(rem, (PyLongObject *)b);
4989 Py_DECREF(rem);
4990 rem = (PyLongObject *)temp;
4991 if (rem == NULL)
4992 goto error;
4993 }
4994
4995 result = PyTuple_New(2);
4996 if (result == NULL)
4997 goto error;
4998
4999 /* PyTuple_SET_ITEM steals references */
5000 PyTuple_SET_ITEM(result, 0, (PyObject *)quo);
5001 PyTuple_SET_ITEM(result, 1, (PyObject *)rem);
Mark Dickinson7f1bf802010-05-26 16:02:59 +00005002 return result;
5003
5004 error:
5005 Py_XDECREF(quo);
5006 Py_XDECREF(rem);
Mark Dickinson7f1bf802010-05-26 16:02:59 +00005007 return NULL;
5008}
5009
Eric Smith8c663262007-08-25 02:26:07 +00005010static PyObject *
Guido van Rossum2fa33db2007-08-23 22:07:24 +00005011long_round(PyObject *self, PyObject *args)
5012{
Mark Dickinson7f1bf802010-05-26 16:02:59 +00005013 PyObject *o_ndigits=NULL, *temp, *result, *ndigits;
Guido van Rossum2fa33db2007-08-23 22:07:24 +00005014
Mark Dickinson7f1bf802010-05-26 16:02:59 +00005015 /* To round an integer m to the nearest 10**n (n positive), we make use of
5016 * the divmod_near operation, defined by:
5017 *
5018 * divmod_near(a, b) = (q, r)
5019 *
5020 * where q is the nearest integer to the quotient a / b (the
5021 * nearest even integer in the case of a tie) and r == a - q * b.
5022 * Hence q * b = a - r is the nearest multiple of b to a,
5023 * preferring even multiples in the case of a tie.
5024 *
5025 * So the nearest multiple of 10**n to m is:
5026 *
5027 * m - divmod_near(m, 10**n)[1].
5028 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005029 if (!PyArg_ParseTuple(args, "|O", &o_ndigits))
5030 return NULL;
5031 if (o_ndigits == NULL)
5032 return long_long(self);
Guido van Rossum2fa33db2007-08-23 22:07:24 +00005033
Mark Dickinson7f1bf802010-05-26 16:02:59 +00005034 ndigits = PyNumber_Index(o_ndigits);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005035 if (ndigits == NULL)
5036 return NULL;
Mark Dickinson1124e712009-01-28 21:25:58 +00005037
Mark Dickinson7f1bf802010-05-26 16:02:59 +00005038 /* if ndigits >= 0 then no rounding is necessary; return self unchanged */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005039 if (Py_SIZE(ndigits) >= 0) {
5040 Py_DECREF(ndigits);
5041 return long_long(self);
5042 }
Mark Dickinson1124e712009-01-28 21:25:58 +00005043
Mark Dickinson7f1bf802010-05-26 16:02:59 +00005044 /* result = self - divmod_near(self, 10 ** -ndigits)[1] */
5045 temp = long_neg((PyLongObject*)ndigits);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005046 Py_DECREF(ndigits);
Mark Dickinson7f1bf802010-05-26 16:02:59 +00005047 ndigits = temp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005048 if (ndigits == NULL)
Mark Dickinson7f1bf802010-05-26 16:02:59 +00005049 return NULL;
Mark Dickinson1124e712009-01-28 21:25:58 +00005050
Mark Dickinson7f1bf802010-05-26 16:02:59 +00005051 result = PyLong_FromLong(10L);
5052 if (result == NULL) {
5053 Py_DECREF(ndigits);
5054 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005055 }
Mark Dickinson1124e712009-01-28 21:25:58 +00005056
Mark Dickinson7f1bf802010-05-26 16:02:59 +00005057 temp = long_pow(result, ndigits, Py_None);
5058 Py_DECREF(ndigits);
5059 Py_DECREF(result);
5060 result = temp;
5061 if (result == NULL)
5062 return NULL;
5063
Mark Dickinsonfa68a612010-06-07 18:47:09 +00005064 temp = _PyLong_DivmodNear(self, result);
Mark Dickinson7f1bf802010-05-26 16:02:59 +00005065 Py_DECREF(result);
5066 result = temp;
5067 if (result == NULL)
5068 return NULL;
5069
5070 temp = long_sub((PyLongObject *)self,
5071 (PyLongObject *)PyTuple_GET_ITEM(result, 1));
5072 Py_DECREF(result);
5073 result = temp;
5074
5075 return result;
Guido van Rossum2fa33db2007-08-23 22:07:24 +00005076}
5077
Serhiy Storchaka495e8802017-02-01 23:12:20 +02005078/*[clinic input]
5079int.__sizeof__ -> Py_ssize_t
5080
5081Returns size in memory, in bytes.
5082[clinic start generated code]*/
5083
5084static Py_ssize_t
5085int___sizeof___impl(PyObject *self)
5086/*[clinic end generated code: output=3303f008eaa6a0a5 input=9b51620c76fc4507]*/
Martin v. Löwis00709aa2008-06-04 14:18:43 +00005087{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005088 Py_ssize_t res;
Martin v. Löwis00709aa2008-06-04 14:18:43 +00005089
Serhiy Storchaka495e8802017-02-01 23:12:20 +02005090 res = offsetof(PyLongObject, ob_digit) + Py_ABS(Py_SIZE(self))*sizeof(digit);
5091 return res;
Martin v. Löwis00709aa2008-06-04 14:18:43 +00005092}
5093
Serhiy Storchaka495e8802017-02-01 23:12:20 +02005094/*[clinic input]
5095int.bit_length
5096
5097Number of bits necessary to represent self in binary.
5098
5099>>> bin(37)
5100'0b100101'
5101>>> (37).bit_length()
51026
5103[clinic start generated code]*/
5104
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00005105static PyObject *
Serhiy Storchaka495e8802017-02-01 23:12:20 +02005106int_bit_length_impl(PyObject *self)
5107/*[clinic end generated code: output=fc1977c9353d6a59 input=e4eb7a587e849a32]*/
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00005108{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005109 PyLongObject *result, *x, *y;
Serhiy Storchakab2e64f92016-11-08 20:34:22 +02005110 Py_ssize_t ndigits;
5111 int msd_bits;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005112 digit msd;
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00005113
Serhiy Storchaka495e8802017-02-01 23:12:20 +02005114 assert(self != NULL);
5115 assert(PyLong_Check(self));
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00005116
Serhiy Storchaka495e8802017-02-01 23:12:20 +02005117 ndigits = Py_ABS(Py_SIZE(self));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005118 if (ndigits == 0)
5119 return PyLong_FromLong(0);
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00005120
Serhiy Storchaka495e8802017-02-01 23:12:20 +02005121 msd = ((PyLongObject *)self)->ob_digit[ndigits-1];
Serhiy Storchakab2e64f92016-11-08 20:34:22 +02005122 msd_bits = bits_in_digit(msd);
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00005123
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005124 if (ndigits <= PY_SSIZE_T_MAX/PyLong_SHIFT)
5125 return PyLong_FromSsize_t((ndigits-1)*PyLong_SHIFT + msd_bits);
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00005126
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005127 /* expression above may overflow; use Python integers instead */
5128 result = (PyLongObject *)PyLong_FromSsize_t(ndigits - 1);
5129 if (result == NULL)
5130 return NULL;
5131 x = (PyLongObject *)PyLong_FromLong(PyLong_SHIFT);
5132 if (x == NULL)
5133 goto error;
5134 y = (PyLongObject *)long_mul(result, x);
5135 Py_DECREF(x);
5136 if (y == NULL)
5137 goto error;
5138 Py_DECREF(result);
5139 result = y;
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00005140
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005141 x = (PyLongObject *)PyLong_FromLong((long)msd_bits);
5142 if (x == NULL)
5143 goto error;
5144 y = (PyLongObject *)long_add(result, x);
5145 Py_DECREF(x);
5146 if (y == NULL)
5147 goto error;
5148 Py_DECREF(result);
5149 result = y;
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00005150
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005151 return (PyObject *)result;
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00005152
Mark Dickinson22b20182010-05-10 21:27:53 +00005153 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005154 Py_DECREF(result);
5155 return NULL;
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00005156}
5157
Christian Heimes53876d92008-04-19 00:31:39 +00005158#if 0
5159static PyObject *
5160long_is_finite(PyObject *v)
5161{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005162 Py_RETURN_TRUE;
Christian Heimes53876d92008-04-19 00:31:39 +00005163}
5164#endif
5165
Serhiy Storchaka495e8802017-02-01 23:12:20 +02005166/*[clinic input]
5167int.to_bytes
5168
5169 length: Py_ssize_t
5170 Length of bytes object to use. An OverflowError is raised if the
5171 integer is not representable with the given number of bytes.
5172 byteorder: unicode
5173 The byte order used to represent the integer. If byteorder is 'big',
5174 the most significant byte is at the beginning of the byte array. If
5175 byteorder is 'little', the most significant byte is at the end of the
5176 byte array. To request the native byte order of the host system, use
5177 `sys.byteorder' as the byte order value.
5178 *
5179 signed as is_signed: bool = False
5180 Determines whether two's complement is used to represent the integer.
5181 If signed is False and a negative integer is given, an OverflowError
5182 is raised.
5183
5184Return an array of bytes representing an integer.
5185[clinic start generated code]*/
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005186
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005187static PyObject *
Serhiy Storchaka495e8802017-02-01 23:12:20 +02005188int_to_bytes_impl(PyObject *self, Py_ssize_t length, PyObject *byteorder,
5189 int is_signed)
5190/*[clinic end generated code: output=89c801df114050a3 input=ddac63f4c7bf414c]*/
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005191{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005192 int little_endian;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005193 PyObject *bytes;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005194
Serhiy Storchaka196a7bc2017-02-02 16:54:45 +02005195 if (_PyUnicode_EqualToASCIIId(byteorder, &PyId_little))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005196 little_endian = 1;
Serhiy Storchaka196a7bc2017-02-02 16:54:45 +02005197 else if (_PyUnicode_EqualToASCIIId(byteorder, &PyId_big))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005198 little_endian = 0;
5199 else {
5200 PyErr_SetString(PyExc_ValueError,
5201 "byteorder must be either 'little' or 'big'");
5202 return NULL;
5203 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005204
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005205 if (length < 0) {
5206 PyErr_SetString(PyExc_ValueError,
5207 "length argument must be non-negative");
5208 return NULL;
5209 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005210
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005211 bytes = PyBytes_FromStringAndSize(NULL, length);
5212 if (bytes == NULL)
5213 return NULL;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005214
Serhiy Storchaka495e8802017-02-01 23:12:20 +02005215 if (_PyLong_AsByteArray((PyLongObject *)self,
5216 (unsigned char *)PyBytes_AS_STRING(bytes),
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005217 length, little_endian, is_signed) < 0) {
5218 Py_DECREF(bytes);
5219 return NULL;
5220 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005221
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005222 return bytes;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005223}
5224
Serhiy Storchaka495e8802017-02-01 23:12:20 +02005225/*[clinic input]
5226@classmethod
5227int.from_bytes
5228
5229 bytes as bytes_obj: object
5230 Holds the array of bytes to convert. The argument must either
5231 support the buffer protocol or be an iterable object producing bytes.
5232 Bytes and bytearray are examples of built-in objects that support the
5233 buffer protocol.
5234 byteorder: unicode
5235 The byte order used to represent the integer. If byteorder is 'big',
5236 the most significant byte is at the beginning of the byte array. If
5237 byteorder is 'little', the most significant byte is at the end of the
5238 byte array. To request the native byte order of the host system, use
5239 `sys.byteorder' as the byte order value.
5240 *
5241 signed as is_signed: bool = False
5242 Indicates whether two's complement is used to represent the integer.
5243
5244Return the integer represented by the given array of bytes.
5245[clinic start generated code]*/
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005246
5247static PyObject *
Serhiy Storchaka495e8802017-02-01 23:12:20 +02005248int_from_bytes_impl(PyTypeObject *type, PyObject *bytes_obj,
5249 PyObject *byteorder, int is_signed)
5250/*[clinic end generated code: output=efc5d68e31f9314f input=cdf98332b6a821b0]*/
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005251{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005252 int little_endian;
Serhiy Storchaka495e8802017-02-01 23:12:20 +02005253 PyObject *long_obj, *bytes;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005254
Serhiy Storchaka196a7bc2017-02-02 16:54:45 +02005255 if (_PyUnicode_EqualToASCIIId(byteorder, &PyId_little))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005256 little_endian = 1;
Serhiy Storchaka196a7bc2017-02-02 16:54:45 +02005257 else if (_PyUnicode_EqualToASCIIId(byteorder, &PyId_big))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005258 little_endian = 0;
5259 else {
5260 PyErr_SetString(PyExc_ValueError,
5261 "byteorder must be either 'little' or 'big'");
5262 return NULL;
5263 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005264
Serhiy Storchaka495e8802017-02-01 23:12:20 +02005265 bytes = PyObject_Bytes(bytes_obj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005266 if (bytes == NULL)
5267 return NULL;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005268
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005269 long_obj = _PyLong_FromByteArray(
5270 (unsigned char *)PyBytes_AS_STRING(bytes), Py_SIZE(bytes),
5271 little_endian, is_signed);
5272 Py_DECREF(bytes);
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005273
Serhiy Storchakaea36c942016-05-12 10:37:58 +03005274 if (type != &PyLong_Type) {
Victor Stinnerde4ae3d2016-12-04 22:59:09 +01005275 Py_SETREF(long_obj, PyObject_CallFunctionObjArgs((PyObject *)type,
5276 long_obj, NULL));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005277 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005278
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005279 return long_obj;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005280}
5281
Guido van Rossum5d9113d2003-01-29 17:58:45 +00005282static PyMethodDef long_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005283 {"conjugate", (PyCFunction)long_long, METH_NOARGS,
5284 "Returns self, the complex conjugate of any int."},
Serhiy Storchaka495e8802017-02-01 23:12:20 +02005285 INT_BIT_LENGTH_METHODDEF
Christian Heimes53876d92008-04-19 00:31:39 +00005286#if 0
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005287 {"is_finite", (PyCFunction)long_is_finite, METH_NOARGS,
5288 "Returns always True."},
Christian Heimes53876d92008-04-19 00:31:39 +00005289#endif
Serhiy Storchaka495e8802017-02-01 23:12:20 +02005290 INT_TO_BYTES_METHODDEF
5291 INT_FROM_BYTES_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005292 {"__trunc__", (PyCFunction)long_long, METH_NOARGS,
5293 "Truncating an Integral returns itself."},
5294 {"__floor__", (PyCFunction)long_long, METH_NOARGS,
5295 "Flooring an Integral returns itself."},
5296 {"__ceil__", (PyCFunction)long_long, METH_NOARGS,
5297 "Ceiling of an Integral returns itself."},
5298 {"__round__", (PyCFunction)long_round, METH_VARARGS,
5299 "Rounding an Integral returns itself.\n"
5300 "Rounding with an ndigits argument also returns an integer."},
Serhiy Storchaka495e8802017-02-01 23:12:20 +02005301 INT___GETNEWARGS___METHODDEF
5302 INT___FORMAT___METHODDEF
5303 INT___SIZEOF___METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005304 {NULL, NULL} /* sentinel */
Guido van Rossum5d9113d2003-01-29 17:58:45 +00005305};
5306
Guido van Rossumb43daf72007-08-01 18:08:08 +00005307static PyGetSetDef long_getset[] = {
Mark Dickinson6bf19002009-05-02 17:57:52 +00005308 {"real",
Guido van Rossumb43daf72007-08-01 18:08:08 +00005309 (getter)long_long, (setter)NULL,
5310 "the real part of a complex number",
5311 NULL},
Mark Dickinson6bf19002009-05-02 17:57:52 +00005312 {"imag",
5313 (getter)long_get0, (setter)NULL,
Guido van Rossumb43daf72007-08-01 18:08:08 +00005314 "the imaginary part of a complex number",
Mark Dickinson6bf19002009-05-02 17:57:52 +00005315 NULL},
5316 {"numerator",
Guido van Rossumb43daf72007-08-01 18:08:08 +00005317 (getter)long_long, (setter)NULL,
5318 "the numerator of a rational number in lowest terms",
5319 NULL},
Mark Dickinson6bf19002009-05-02 17:57:52 +00005320 {"denominator",
5321 (getter)long_get1, (setter)NULL,
Guido van Rossumb43daf72007-08-01 18:08:08 +00005322 "the denominator of a rational number in lowest terms",
Mark Dickinson6bf19002009-05-02 17:57:52 +00005323 NULL},
Guido van Rossumb43daf72007-08-01 18:08:08 +00005324 {NULL} /* Sentinel */
5325};
5326
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00005327PyDoc_STRVAR(long_doc,
svelankar390a0962017-03-08 19:29:01 -05005328"int([x]) -> integer\n\
Chris Jerdonek83fe2e12012-10-07 14:48:36 -07005329int(x, base=10) -> integer\n\
Tim Peters6d6c1a32001-08-02 04:15:00 +00005330\n\
Chris Jerdonek83fe2e12012-10-07 14:48:36 -07005331Convert a number or string to an integer, or return 0 if no arguments\n\
5332are given. If x is a number, return x.__int__(). For floating point\n\
5333numbers, this truncates towards zero.\n\
5334\n\
5335If x is not a number or if base is given, then x must be a string,\n\
5336bytes, or bytearray instance representing an integer literal in the\n\
5337given base. The literal can be preceded by '+' or '-' and be surrounded\n\
5338by whitespace. The base defaults to 10. Valid bases are 0 and 2-36.\n\
5339Base 0 means to interpret the base from the string as an integer literal.\n\
5340>>> int('0b100', base=0)\n\
53414");
Tim Peters6d6c1a32001-08-02 04:15:00 +00005342
Guido van Rossumc0b618a1997-05-02 03:12:38 +00005343static PyNumberMethods long_as_number = {
Mark Dickinson22b20182010-05-10 21:27:53 +00005344 (binaryfunc)long_add, /*nb_add*/
5345 (binaryfunc)long_sub, /*nb_subtract*/
5346 (binaryfunc)long_mul, /*nb_multiply*/
5347 long_mod, /*nb_remainder*/
5348 long_divmod, /*nb_divmod*/
5349 long_pow, /*nb_power*/
5350 (unaryfunc)long_neg, /*nb_negative*/
5351 (unaryfunc)long_long, /*tp_positive*/
5352 (unaryfunc)long_abs, /*tp_absolute*/
5353 (inquiry)long_bool, /*tp_bool*/
5354 (unaryfunc)long_invert, /*nb_invert*/
5355 long_lshift, /*nb_lshift*/
5356 (binaryfunc)long_rshift, /*nb_rshift*/
5357 long_and, /*nb_and*/
5358 long_xor, /*nb_xor*/
5359 long_or, /*nb_or*/
5360 long_long, /*nb_int*/
5361 0, /*nb_reserved*/
5362 long_float, /*nb_float*/
5363 0, /* nb_inplace_add */
5364 0, /* nb_inplace_subtract */
5365 0, /* nb_inplace_multiply */
5366 0, /* nb_inplace_remainder */
5367 0, /* nb_inplace_power */
5368 0, /* nb_inplace_lshift */
5369 0, /* nb_inplace_rshift */
5370 0, /* nb_inplace_and */
5371 0, /* nb_inplace_xor */
5372 0, /* nb_inplace_or */
5373 long_div, /* nb_floor_divide */
5374 long_true_divide, /* nb_true_divide */
5375 0, /* nb_inplace_floor_divide */
5376 0, /* nb_inplace_true_divide */
5377 long_long, /* nb_index */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00005378};
5379
Guido van Rossumc0b618a1997-05-02 03:12:38 +00005380PyTypeObject PyLong_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005381 PyVarObject_HEAD_INIT(&PyType_Type, 0)
5382 "int", /* tp_name */
5383 offsetof(PyLongObject, ob_digit), /* tp_basicsize */
5384 sizeof(digit), /* tp_itemsize */
5385 long_dealloc, /* tp_dealloc */
5386 0, /* tp_print */
5387 0, /* tp_getattr */
5388 0, /* tp_setattr */
5389 0, /* tp_reserved */
5390 long_to_decimal_string, /* tp_repr */
5391 &long_as_number, /* tp_as_number */
5392 0, /* tp_as_sequence */
5393 0, /* tp_as_mapping */
5394 (hashfunc)long_hash, /* tp_hash */
5395 0, /* tp_call */
5396 long_to_decimal_string, /* tp_str */
5397 PyObject_GenericGetAttr, /* tp_getattro */
5398 0, /* tp_setattro */
5399 0, /* tp_as_buffer */
5400 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE |
5401 Py_TPFLAGS_LONG_SUBCLASS, /* tp_flags */
5402 long_doc, /* tp_doc */
5403 0, /* tp_traverse */
5404 0, /* tp_clear */
5405 long_richcompare, /* tp_richcompare */
5406 0, /* tp_weaklistoffset */
5407 0, /* tp_iter */
5408 0, /* tp_iternext */
5409 long_methods, /* tp_methods */
5410 0, /* tp_members */
5411 long_getset, /* tp_getset */
5412 0, /* tp_base */
5413 0, /* tp_dict */
5414 0, /* tp_descr_get */
5415 0, /* tp_descr_set */
5416 0, /* tp_dictoffset */
5417 0, /* tp_init */
5418 0, /* tp_alloc */
5419 long_new, /* tp_new */
5420 PyObject_Del, /* tp_free */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00005421};
Guido van Rossumddefaf32007-01-14 03:31:43 +00005422
Mark Dickinsonbd792642009-03-18 20:06:12 +00005423static PyTypeObject Int_InfoType;
5424
5425PyDoc_STRVAR(int_info__doc__,
5426"sys.int_info\n\
5427\n\
5428A struct sequence that holds information about Python's\n\
5429internal representation of integers. The attributes are read only.");
5430
5431static PyStructSequence_Field int_info_fields[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005432 {"bits_per_digit", "size of a digit in bits"},
Mark Dickinson22b20182010-05-10 21:27:53 +00005433 {"sizeof_digit", "size in bytes of the C type used to represent a digit"},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005434 {NULL, NULL}
Mark Dickinsonbd792642009-03-18 20:06:12 +00005435};
5436
5437static PyStructSequence_Desc int_info_desc = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005438 "sys.int_info", /* name */
5439 int_info__doc__, /* doc */
5440 int_info_fields, /* fields */
5441 2 /* number of fields */
Mark Dickinsonbd792642009-03-18 20:06:12 +00005442};
5443
5444PyObject *
5445PyLong_GetInfo(void)
5446{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005447 PyObject* int_info;
5448 int field = 0;
5449 int_info = PyStructSequence_New(&Int_InfoType);
5450 if (int_info == NULL)
5451 return NULL;
5452 PyStructSequence_SET_ITEM(int_info, field++,
5453 PyLong_FromLong(PyLong_SHIFT));
5454 PyStructSequence_SET_ITEM(int_info, field++,
5455 PyLong_FromLong(sizeof(digit)));
5456 if (PyErr_Occurred()) {
5457 Py_CLEAR(int_info);
5458 return NULL;
5459 }
5460 return int_info;
Mark Dickinsonbd792642009-03-18 20:06:12 +00005461}
5462
Guido van Rossumddefaf32007-01-14 03:31:43 +00005463int
5464_PyLong_Init(void)
5465{
5466#if NSMALLNEGINTS + NSMALLPOSINTS > 0
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005467 int ival, size;
5468 PyLongObject *v = small_ints;
Christian Heimesdfc12ed2008-01-31 15:16:38 +00005469
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005470 for (ival = -NSMALLNEGINTS; ival < NSMALLPOSINTS; ival++, v++) {
5471 size = (ival < 0) ? -1 : ((ival == 0) ? 0 : 1);
5472 if (Py_TYPE(v) == &PyLong_Type) {
5473 /* The element is already initialized, most likely
5474 * the Python interpreter was initialized before.
5475 */
5476 Py_ssize_t refcnt;
5477 PyObject* op = (PyObject*)v;
Christian Heimesdfc12ed2008-01-31 15:16:38 +00005478
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005479 refcnt = Py_REFCNT(op) < 0 ? 0 : Py_REFCNT(op);
5480 _Py_NewReference(op);
5481 /* _Py_NewReference sets the ref count to 1 but
5482 * the ref count might be larger. Set the refcnt
5483 * to the original refcnt + 1 */
5484 Py_REFCNT(op) = refcnt + 1;
5485 assert(Py_SIZE(op) == size);
Victor Stinner12174a52014-08-15 23:17:38 +02005486 assert(v->ob_digit[0] == (digit)abs(ival));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005487 }
5488 else {
Christian Heimesd3afe782013-12-04 09:27:47 +01005489 (void)PyObject_INIT(v, &PyLong_Type);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005490 }
5491 Py_SIZE(v) = size;
Victor Stinner12174a52014-08-15 23:17:38 +02005492 v->ob_digit[0] = (digit)abs(ival);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005493 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00005494#endif
Serhiy Storchakaba85d692017-03-30 09:09:41 +03005495 _PyLong_Zero = PyLong_FromLong(0);
5496 if (_PyLong_Zero == NULL)
5497 return 0;
5498 _PyLong_One = PyLong_FromLong(1);
5499 if (_PyLong_One == NULL)
5500 return 0;
5501
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005502 /* initialize int_info */
Victor Stinner1c8f0592013-07-22 22:24:54 +02005503 if (Int_InfoType.tp_name == NULL) {
5504 if (PyStructSequence_InitType2(&Int_InfoType, &int_info_desc) < 0)
5505 return 0;
5506 }
Mark Dickinsonbd792642009-03-18 20:06:12 +00005507
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005508 return 1;
Guido van Rossumddefaf32007-01-14 03:31:43 +00005509}
5510
5511void
5512PyLong_Fini(void)
5513{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005514 /* Integers are currently statically allocated. Py_DECREF is not
5515 needed, but Python must forget about the reference or multiple
5516 reinitializations will fail. */
Serhiy Storchakaba85d692017-03-30 09:09:41 +03005517 Py_CLEAR(_PyLong_One);
5518 Py_CLEAR(_PyLong_Zero);
Guido van Rossumddefaf32007-01-14 03:31:43 +00005519#if NSMALLNEGINTS + NSMALLPOSINTS > 0
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005520 int i;
5521 PyLongObject *v = small_ints;
5522 for (i = 0; i < NSMALLNEGINTS + NSMALLPOSINTS; i++, v++) {
5523 _Py_DEC_REFTOTAL;
5524 _Py_ForgetReference((PyObject*)v);
5525 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00005526#endif
5527}