blob: 4862b76da6b3574cfb9d5af8f13545114969969c [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:
1809 assert(0); /* shouldn't ever get here */
1810 bits = 0; /* to silence gcc warning */
1811 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00001812
Mark Dickinsone2846542012-04-20 21:21:24 +01001813 /* Compute exact length 'sz' of output string. */
1814 if (size_a == 0) {
Victor Stinnerd3f08822012-05-29 12:57:52 +02001815 sz = 1;
Mark Dickinsone2846542012-04-20 21:21:24 +01001816 }
1817 else {
1818 Py_ssize_t size_a_in_bits;
1819 /* Ensure overflow doesn't occur during computation of sz. */
1820 if (size_a > (PY_SSIZE_T_MAX - 3) / PyLong_SHIFT) {
1821 PyErr_SetString(PyExc_OverflowError,
Mark Dickinson02515f72013-08-03 12:08:22 +01001822 "int too large to format");
Victor Stinnerd3f08822012-05-29 12:57:52 +02001823 return -1;
Mark Dickinsone2846542012-04-20 21:21:24 +01001824 }
1825 size_a_in_bits = (size_a - 1) * PyLong_SHIFT +
1826 bits_in_digit(a->ob_digit[size_a - 1]);
Victor Stinnerd3f08822012-05-29 12:57:52 +02001827 /* Allow 1 character for a '-' sign. */
1828 sz = negative + (size_a_in_bits + (bits - 1)) / bits;
1829 }
1830 if (alternate) {
1831 /* 2 characters for prefix */
1832 sz += 2;
Mark Dickinsone2846542012-04-20 21:21:24 +01001833 }
1834
Victor Stinnerd3f08822012-05-29 12:57:52 +02001835 if (writer) {
1836 if (_PyUnicodeWriter_Prepare(writer, sz, 'x') == -1)
1837 return -1;
1838 kind = writer->kind;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001839 }
Victor Stinner199c9a62015-10-14 09:47:23 +02001840 else if (bytes_writer) {
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001841 *bytes_str = _PyBytesWriter_Prepare(bytes_writer, *bytes_str, sz);
1842 if (*bytes_str == NULL)
1843 return -1;
1844 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001845 else {
Victor Stinnerd3f08822012-05-29 12:57:52 +02001846 v = PyUnicode_New(sz, 'x');
1847 if (v == NULL)
1848 return -1;
1849 kind = PyUnicode_KIND(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001850 }
Mark Dickinson8accd6b2009-09-17 19:39:12 +00001851
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001852#define WRITE_DIGITS(p) \
Victor Stinnerd3f08822012-05-29 12:57:52 +02001853 do { \
Victor Stinnerd3f08822012-05-29 12:57:52 +02001854 if (size_a == 0) { \
1855 *--p = '0'; \
1856 } \
1857 else { \
1858 /* JRH: special case for power-of-2 bases */ \
1859 twodigits accum = 0; \
1860 int accumbits = 0; /* # of bits in accum */ \
1861 Py_ssize_t i; \
1862 for (i = 0; i < size_a; ++i) { \
1863 accum |= (twodigits)a->ob_digit[i] << accumbits; \
1864 accumbits += PyLong_SHIFT; \
1865 assert(accumbits >= bits); \
1866 do { \
1867 char cdigit; \
1868 cdigit = (char)(accum & (base - 1)); \
1869 cdigit += (cdigit < 10) ? '0' : 'a'-10; \
1870 *--p = cdigit; \
1871 accumbits -= bits; \
1872 accum >>= bits; \
1873 } while (i < size_a-1 ? accumbits >= bits : accum > 0); \
1874 } \
1875 } \
1876 \
1877 if (alternate) { \
1878 if (base == 16) \
1879 *--p = 'x'; \
1880 else if (base == 8) \
1881 *--p = 'o'; \
1882 else /* (base == 2) */ \
1883 *--p = 'b'; \
1884 *--p = '0'; \
1885 } \
1886 if (negative) \
1887 *--p = '-'; \
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001888 } while (0)
1889
1890#define WRITE_UNICODE_DIGITS(TYPE) \
1891 do { \
1892 if (writer) \
1893 p = (TYPE*)PyUnicode_DATA(writer->buffer) + writer->pos + sz; \
1894 else \
1895 p = (TYPE*)PyUnicode_DATA(v) + sz; \
1896 \
1897 WRITE_DIGITS(p); \
1898 \
Victor Stinnerd3f08822012-05-29 12:57:52 +02001899 if (writer) \
1900 assert(p == ((TYPE*)PyUnicode_DATA(writer->buffer) + writer->pos)); \
1901 else \
1902 assert(p == (TYPE*)PyUnicode_DATA(v)); \
1903 } while (0)
1904
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001905 if (bytes_writer) {
1906 char *p = *bytes_str + sz;
1907 WRITE_DIGITS(p);
1908 assert(p == *bytes_str);
1909 }
1910 else if (kind == PyUnicode_1BYTE_KIND) {
Victor Stinnerd3f08822012-05-29 12:57:52 +02001911 Py_UCS1 *p;
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001912 WRITE_UNICODE_DIGITS(Py_UCS1);
Victor Stinnerd3f08822012-05-29 12:57:52 +02001913 }
1914 else if (kind == PyUnicode_2BYTE_KIND) {
1915 Py_UCS2 *p;
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001916 WRITE_UNICODE_DIGITS(Py_UCS2);
Victor Stinnerd3f08822012-05-29 12:57:52 +02001917 }
1918 else {
Victor Stinnerd3f08822012-05-29 12:57:52 +02001919 Py_UCS4 *p;
Victor Stinnere577ab32012-05-29 18:51:10 +02001920 assert (kind == PyUnicode_4BYTE_KIND);
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001921 WRITE_UNICODE_DIGITS(Py_UCS4);
Victor Stinnerd3f08822012-05-29 12:57:52 +02001922 }
1923#undef WRITE_DIGITS
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001924#undef WRITE_UNICODE_DIGITS
Victor Stinnerd3f08822012-05-29 12:57:52 +02001925
1926 if (writer) {
1927 writer->pos += sz;
1928 }
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001929 else if (bytes_writer) {
1930 (*bytes_str) += sz;
1931 }
Victor Stinnerd3f08822012-05-29 12:57:52 +02001932 else {
1933 assert(_PyUnicode_CheckConsistency(v, 1));
1934 *p_output = v;
1935 }
1936 return 0;
1937}
1938
1939PyObject *
1940_PyLong_Format(PyObject *obj, int base)
1941{
1942 PyObject *str;
1943 int err;
1944 if (base == 10)
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001945 err = long_to_decimal_string_internal(obj, &str, NULL, NULL, NULL);
Victor Stinnerd3f08822012-05-29 12:57:52 +02001946 else
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001947 err = long_format_binary(obj, base, 1, &str, NULL, NULL, NULL);
Victor Stinnerd3f08822012-05-29 12:57:52 +02001948 if (err == -1)
1949 return NULL;
1950 return str;
1951}
1952
1953int
1954_PyLong_FormatWriter(_PyUnicodeWriter *writer,
1955 PyObject *obj,
1956 int base, int alternate)
1957{
1958 if (base == 10)
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001959 return long_to_decimal_string_internal(obj, NULL, writer,
1960 NULL, NULL);
Victor Stinnerd3f08822012-05-29 12:57:52 +02001961 else
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001962 return long_format_binary(obj, base, alternate, NULL, writer,
1963 NULL, NULL);
1964}
1965
1966char*
1967_PyLong_FormatBytesWriter(_PyBytesWriter *writer, char *str,
1968 PyObject *obj,
1969 int base, int alternate)
1970{
1971 char *str2;
1972 int res;
1973 str2 = str;
1974 if (base == 10)
1975 res = long_to_decimal_string_internal(obj, NULL, NULL,
1976 writer, &str2);
1977 else
1978 res = long_format_binary(obj, base, alternate, NULL, NULL,
1979 writer, &str2);
1980 if (res < 0)
1981 return NULL;
1982 assert(str2 != NULL);
1983 return str2;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001984}
1985
Thomas Wouters477c8d52006-05-27 19:21:47 +00001986/* Table of digit values for 8-bit string -> integer conversion.
1987 * '0' maps to 0, ..., '9' maps to 9.
1988 * 'a' and 'A' map to 10, ..., 'z' and 'Z' map to 35.
1989 * All other indices map to 37.
1990 * Note that when converting a base B string, a char c is a legitimate
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00001991 * base B digit iff _PyLong_DigitValue[Py_CHARPyLong_MASK(c)] < B.
Thomas Wouters477c8d52006-05-27 19:21:47 +00001992 */
Raymond Hettinger35631532009-01-09 03:58:09 +00001993unsigned char _PyLong_DigitValue[256] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001994 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 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1997 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 37, 37, 37, 37, 37, 37,
1998 37, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1999 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 37, 37, 37, 37, 37,
2000 37, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
2001 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 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,
2009 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
Thomas Wouters477c8d52006-05-27 19:21:47 +00002010};
2011
2012/* *str points to the first digit in a string of base `base` digits. base
Tim Petersbf2674b2003-02-02 07:51:32 +00002013 * 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 +03002014 * non-digit (which may be *str!). A normalized int is returned.
Tim Petersbf2674b2003-02-02 07:51:32 +00002015 * The point to this routine is that it takes time linear in the number of
2016 * string characters.
Brett Cannona721aba2016-09-09 14:57:09 -07002017 *
2018 * Return values:
2019 * -1 on syntax error (exception needs to be set, *res is untouched)
2020 * 0 else (exception may be set, in that case *res is set to NULL)
Tim Petersbf2674b2003-02-02 07:51:32 +00002021 */
Brett Cannona721aba2016-09-09 14:57:09 -07002022static int
2023long_from_binary_base(const char **str, int base, PyLongObject **res)
Tim Petersbf2674b2003-02-02 07:51:32 +00002024{
Serhiy Storchakac6792272013-10-19 21:03:34 +03002025 const char *p = *str;
2026 const char *start = p;
Brett Cannona721aba2016-09-09 14:57:09 -07002027 char prev = 0;
2028 int digits = 0;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002029 int bits_per_char;
2030 Py_ssize_t n;
2031 PyLongObject *z;
2032 twodigits accum;
2033 int bits_in_accum;
2034 digit *pdigit;
Tim Petersbf2674b2003-02-02 07:51:32 +00002035
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002036 assert(base >= 2 && base <= 32 && (base & (base - 1)) == 0);
2037 n = base;
Brett Cannona721aba2016-09-09 14:57:09 -07002038 for (bits_per_char = -1; n; ++bits_per_char) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002039 n >>= 1;
Brett Cannona721aba2016-09-09 14:57:09 -07002040 }
2041 /* count digits and set p to end-of-string */
2042 while (_PyLong_DigitValue[Py_CHARMASK(*p)] < base || *p == '_') {
2043 if (*p == '_') {
2044 if (prev == '_') {
2045 *str = p - 1;
2046 return -1;
2047 }
2048 } else {
2049 ++digits;
2050 }
2051 prev = *p;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002052 ++p;
Brett Cannona721aba2016-09-09 14:57:09 -07002053 }
2054 if (prev == '_') {
2055 /* Trailing underscore not allowed. */
2056 *str = p - 1;
2057 return -1;
2058 }
2059
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002060 *str = p;
2061 /* n <- # of Python digits needed, = ceiling(n/PyLong_SHIFT). */
Brett Cannona721aba2016-09-09 14:57:09 -07002062 n = digits * bits_per_char + PyLong_SHIFT - 1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002063 if (n / bits_per_char < p - start) {
2064 PyErr_SetString(PyExc_ValueError,
2065 "int string too large to convert");
Brett Cannona721aba2016-09-09 14:57:09 -07002066 *res = NULL;
2067 return 0;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002068 }
2069 n = n / PyLong_SHIFT;
2070 z = _PyLong_New(n);
Brett Cannona721aba2016-09-09 14:57:09 -07002071 if (z == NULL) {
2072 *res = NULL;
2073 return 0;
2074 }
Serhiy Storchaka95949422013-08-27 19:40:23 +03002075 /* Read string from right, and fill in int from left; i.e.,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002076 * from least to most significant in both.
2077 */
2078 accum = 0;
2079 bits_in_accum = 0;
2080 pdigit = z->ob_digit;
2081 while (--p >= start) {
Brett Cannona721aba2016-09-09 14:57:09 -07002082 int k;
2083 if (*p == '_') {
2084 continue;
2085 }
2086 k = (int)_PyLong_DigitValue[Py_CHARMASK(*p)];
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002087 assert(k >= 0 && k < base);
2088 accum |= (twodigits)k << bits_in_accum;
2089 bits_in_accum += bits_per_char;
2090 if (bits_in_accum >= PyLong_SHIFT) {
2091 *pdigit++ = (digit)(accum & PyLong_MASK);
2092 assert(pdigit - z->ob_digit <= n);
2093 accum >>= PyLong_SHIFT;
2094 bits_in_accum -= PyLong_SHIFT;
2095 assert(bits_in_accum < PyLong_SHIFT);
2096 }
2097 }
2098 if (bits_in_accum) {
2099 assert(bits_in_accum <= PyLong_SHIFT);
2100 *pdigit++ = (digit)accum;
2101 assert(pdigit - z->ob_digit <= n);
2102 }
2103 while (pdigit - z->ob_digit < n)
2104 *pdigit++ = 0;
Brett Cannona721aba2016-09-09 14:57:09 -07002105 *res = long_normalize(z);
2106 return 0;
Tim Petersbf2674b2003-02-02 07:51:32 +00002107}
2108
Serhiy Storchaka95949422013-08-27 19:40:23 +03002109/* Parses an int from a bytestring. Leading and trailing whitespace will be
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03002110 * ignored.
2111 *
2112 * If successful, a PyLong object will be returned and 'pend' will be pointing
2113 * to the first unused byte unless it's NULL.
2114 *
2115 * If unsuccessful, NULL will be returned.
2116 */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002117PyObject *
Serhiy Storchakac6792272013-10-19 21:03:34 +03002118PyLong_FromString(const char *str, char **pend, int base)
Guido van Rossumeb1fafc1994-08-29 12:47:19 +00002119{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002120 int sign = 1, error_if_nonzero = 0;
Serhiy Storchakac6792272013-10-19 21:03:34 +03002121 const char *start, *orig_str = str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002122 PyLongObject *z = NULL;
2123 PyObject *strobj;
2124 Py_ssize_t slen;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002125
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002126 if ((base != 0 && base < 2) || base > 36) {
2127 PyErr_SetString(PyExc_ValueError,
2128 "int() arg 2 must be >= 2 and <= 36");
2129 return NULL;
2130 }
Brett Cannona721aba2016-09-09 14:57:09 -07002131 while (*str != '\0' && Py_ISSPACE(Py_CHARMASK(*str))) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002132 str++;
Brett Cannona721aba2016-09-09 14:57:09 -07002133 }
2134 if (*str == '+') {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002135 ++str;
Brett Cannona721aba2016-09-09 14:57:09 -07002136 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002137 else if (*str == '-') {
2138 ++str;
2139 sign = -1;
2140 }
2141 if (base == 0) {
Brett Cannona721aba2016-09-09 14:57:09 -07002142 if (str[0] != '0') {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002143 base = 10;
Brett Cannona721aba2016-09-09 14:57:09 -07002144 }
2145 else if (str[1] == 'x' || str[1] == 'X') {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002146 base = 16;
Brett Cannona721aba2016-09-09 14:57:09 -07002147 }
2148 else if (str[1] == 'o' || str[1] == 'O') {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002149 base = 8;
Brett Cannona721aba2016-09-09 14:57:09 -07002150 }
2151 else if (str[1] == 'b' || str[1] == 'B') {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002152 base = 2;
Brett Cannona721aba2016-09-09 14:57:09 -07002153 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002154 else {
2155 /* "old" (C-style) octal literal, now invalid.
2156 it might still be zero though */
2157 error_if_nonzero = 1;
2158 base = 10;
2159 }
2160 }
2161 if (str[0] == '0' &&
2162 ((base == 16 && (str[1] == 'x' || str[1] == 'X')) ||
2163 (base == 8 && (str[1] == 'o' || str[1] == 'O')) ||
Brett Cannona721aba2016-09-09 14:57:09 -07002164 (base == 2 && (str[1] == 'b' || str[1] == 'B')))) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002165 str += 2;
Brett Cannona721aba2016-09-09 14:57:09 -07002166 /* One underscore allowed here. */
2167 if (*str == '_') {
2168 ++str;
2169 }
2170 }
2171 if (str[0] == '_') {
2172 /* May not start with underscores. */
2173 goto onError;
2174 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00002175
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002176 start = str;
Brett Cannona721aba2016-09-09 14:57:09 -07002177 if ((base & (base - 1)) == 0) {
2178 int res = long_from_binary_base(&str, base, &z);
2179 if (res < 0) {
2180 /* Syntax error. */
2181 goto onError;
2182 }
2183 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002184 else {
Thomas Wouters477c8d52006-05-27 19:21:47 +00002185/***
2186Binary bases can be converted in time linear in the number of digits, because
2187Python's representation base is binary. Other bases (including decimal!) use
2188the simple quadratic-time algorithm below, complicated by some speed tricks.
Tim Peters5af4e6c2002-08-12 02:31:19 +00002189
Thomas Wouters477c8d52006-05-27 19:21:47 +00002190First some math: the largest integer that can be expressed in N base-B digits
2191is B**N-1. Consequently, if we have an N-digit input in base B, the worst-
2192case number of Python digits needed to hold it is the smallest integer n s.t.
2193
2194 BASE**n-1 >= B**N-1 [or, adding 1 to both sides]
2195 BASE**n >= B**N [taking logs to base BASE]
2196 n >= log(B**N)/log(BASE) = N * log(B)/log(BASE)
2197
2198The static array log_base_BASE[base] == log(base)/log(BASE) so we can compute
Serhiy Storchaka95949422013-08-27 19:40:23 +03002199this quickly. A Python int with that much space is reserved near the start,
Thomas Wouters477c8d52006-05-27 19:21:47 +00002200and the result is computed into it.
2201
2202The input string is actually treated as being in base base**i (i.e., i digits
2203are processed at a time), where two more static arrays hold:
2204
2205 convwidth_base[base] = the largest integer i such that base**i <= BASE
2206 convmultmax_base[base] = base ** convwidth_base[base]
2207
2208The first of these is the largest i such that i consecutive input digits
2209must fit in a single Python digit. The second is effectively the input
2210base we're really using.
2211
2212Viewing the input as a sequence <c0, c1, ..., c_n-1> of digits in base
2213convmultmax_base[base], the result is "simply"
2214
2215 (((c0*B + c1)*B + c2)*B + c3)*B + ... ))) + c_n-1
2216
2217where B = convmultmax_base[base].
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002218
2219Error analysis: as above, the number of Python digits `n` needed is worst-
2220case
2221
2222 n >= N * log(B)/log(BASE)
2223
2224where `N` is the number of input digits in base `B`. This is computed via
2225
2226 size_z = (Py_ssize_t)((scan - str) * log_base_BASE[base]) + 1;
2227
2228below. Two numeric concerns are how much space this can waste, and whether
2229the computed result can be too small. To be concrete, assume BASE = 2**15,
2230which is the default (and it's unlikely anyone changes that).
2231
2232Waste isn't a problem: provided the first input digit isn't 0, the difference
2233between the worst-case input with N digits and the smallest input with N
2234digits is about a factor of B, but B is small compared to BASE so at most
2235one allocated Python digit can remain unused on that count. If
2236N*log(B)/log(BASE) is mathematically an exact integer, then truncating that
2237and adding 1 returns a result 1 larger than necessary. However, that can't
2238happen: whenever B is a power of 2, long_from_binary_base() is called
2239instead, and it's impossible for B**i to be an integer power of 2**15 when
2240B is not a power of 2 (i.e., it's impossible for N*log(B)/log(BASE) to be
2241an exact integer when B is not a power of 2, since B**i has a prime factor
2242other than 2 in that case, but (2**15)**j's only prime factor is 2).
2243
2244The computed result can be too small if the true value of N*log(B)/log(BASE)
2245is a little bit larger than an exact integer, but due to roundoff errors (in
2246computing log(B), log(BASE), their quotient, and/or multiplying that by N)
2247yields a numeric result a little less than that integer. Unfortunately, "how
2248close can a transcendental function get to an integer over some range?"
2249questions are generally theoretically intractable. Computer analysis via
2250continued fractions is practical: expand log(B)/log(BASE) via continued
2251fractions, giving a sequence i/j of "the best" rational approximations. Then
2252j*log(B)/log(BASE) is approximately equal to (the integer) i. This shows that
2253we can get very close to being in trouble, but very rarely. For example,
225476573 is a denominator in one of the continued-fraction approximations to
2255log(10)/log(2**15), and indeed:
2256
2257 >>> log(10)/log(2**15)*76573
2258 16958.000000654003
2259
2260is very close to an integer. If we were working with IEEE single-precision,
2261rounding errors could kill us. Finding worst cases in IEEE double-precision
2262requires better-than-double-precision log() functions, and Tim didn't bother.
2263Instead the code checks to see whether the allocated space is enough as each
Serhiy Storchaka95949422013-08-27 19:40:23 +03002264new Python digit is added, and copies the whole thing to a larger int if not.
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002265This should happen extremely rarely, and in fact I don't have a test case
2266that triggers it(!). Instead the code was tested by artificially allocating
2267just 1 digit at the start, so that the copying code was exercised for every
2268digit beyond the first.
Thomas Wouters477c8d52006-05-27 19:21:47 +00002269***/
Antoine Pitrou9ed5f272013-08-13 20:18:52 +02002270 twodigits c; /* current input character */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002271 Py_ssize_t size_z;
Brett Cannona721aba2016-09-09 14:57:09 -07002272 int 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 */
Brett Cannona721aba2016-09-09 14:57:09 -07002334 size_z = (Py_ssize_t)(digits * log_base_BASE[base]) + 1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002335 /* Uncomment next line to test exceedingly rare copy code */
2336 /* size_z = 1; */
2337 assert(size_z > 0);
2338 z = _PyLong_New(size_z);
Brett Cannona721aba2016-09-09 14:57:09 -07002339 if (z == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002340 return NULL;
Brett Cannona721aba2016-09-09 14:57:09 -07002341 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002342 Py_SIZE(z) = 0;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002343
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002344 /* `convwidth` consecutive input digits are treated as a single
2345 * digit in base `convmultmax`.
2346 */
2347 convwidth = convwidth_base[base];
2348 convmultmax = convmultmax_base[base];
Thomas Wouters477c8d52006-05-27 19:21:47 +00002349
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002350 /* Work ;-) */
2351 while (str < scan) {
Brett Cannona721aba2016-09-09 14:57:09 -07002352 if (*str == '_') {
2353 str++;
2354 continue;
2355 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002356 /* grab up to convwidth digits from the input string */
2357 c = (digit)_PyLong_DigitValue[Py_CHARMASK(*str++)];
Brett Cannona721aba2016-09-09 14:57:09 -07002358 for (i = 1; i < convwidth && str != scan; ++str) {
2359 if (*str == '_') {
2360 continue;
2361 }
2362 i++;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002363 c = (twodigits)(c * base +
Mark Dickinson22b20182010-05-10 21:27:53 +00002364 (int)_PyLong_DigitValue[Py_CHARMASK(*str)]);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002365 assert(c < PyLong_BASE);
2366 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00002367
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002368 convmult = convmultmax;
2369 /* Calculate the shift only if we couldn't get
2370 * convwidth digits.
2371 */
2372 if (i != convwidth) {
2373 convmult = base;
Brett Cannona721aba2016-09-09 14:57:09 -07002374 for ( ; i > 1; --i) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002375 convmult *= base;
Brett Cannona721aba2016-09-09 14:57:09 -07002376 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002377 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00002378
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002379 /* Multiply z by convmult, and add c. */
2380 pz = z->ob_digit;
2381 pzstop = pz + Py_SIZE(z);
2382 for (; pz < pzstop; ++pz) {
2383 c += (twodigits)*pz * convmult;
2384 *pz = (digit)(c & PyLong_MASK);
2385 c >>= PyLong_SHIFT;
2386 }
2387 /* carry off the current end? */
2388 if (c) {
2389 assert(c < PyLong_BASE);
2390 if (Py_SIZE(z) < size_z) {
2391 *pz = (digit)c;
2392 ++Py_SIZE(z);
2393 }
2394 else {
2395 PyLongObject *tmp;
2396 /* Extremely rare. Get more space. */
2397 assert(Py_SIZE(z) == size_z);
2398 tmp = _PyLong_New(size_z + 1);
2399 if (tmp == NULL) {
2400 Py_DECREF(z);
2401 return NULL;
2402 }
2403 memcpy(tmp->ob_digit,
2404 z->ob_digit,
2405 sizeof(digit) * size_z);
2406 Py_DECREF(z);
2407 z = tmp;
2408 z->ob_digit[size_z] = (digit)c;
2409 ++size_z;
2410 }
2411 }
2412 }
2413 }
Brett Cannona721aba2016-09-09 14:57:09 -07002414 if (z == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002415 return NULL;
Brett Cannona721aba2016-09-09 14:57:09 -07002416 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002417 if (error_if_nonzero) {
2418 /* reset the base to 0, else the exception message
2419 doesn't make too much sense */
2420 base = 0;
Brett Cannona721aba2016-09-09 14:57:09 -07002421 if (Py_SIZE(z) != 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002422 goto onError;
Brett Cannona721aba2016-09-09 14:57:09 -07002423 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002424 /* there might still be other problems, therefore base
2425 remains zero here for the same reason */
2426 }
Brett Cannona721aba2016-09-09 14:57:09 -07002427 if (str == start) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002428 goto onError;
Brett Cannona721aba2016-09-09 14:57:09 -07002429 }
2430 if (sign < 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002431 Py_SIZE(z) = -(Py_SIZE(z));
Brett Cannona721aba2016-09-09 14:57:09 -07002432 }
2433 while (*str && Py_ISSPACE(Py_CHARMASK(*str))) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002434 str++;
Brett Cannona721aba2016-09-09 14:57:09 -07002435 }
2436 if (*str != '\0') {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002437 goto onError;
Brett Cannona721aba2016-09-09 14:57:09 -07002438 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002439 long_normalize(z);
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03002440 z = maybe_small_long(z);
Brett Cannona721aba2016-09-09 14:57:09 -07002441 if (z == NULL) {
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03002442 return NULL;
Brett Cannona721aba2016-09-09 14:57:09 -07002443 }
2444 if (pend != NULL) {
Serhiy Storchakac6792272013-10-19 21:03:34 +03002445 *pend = (char *)str;
Brett Cannona721aba2016-09-09 14:57:09 -07002446 }
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03002447 return (PyObject *) z;
Guido van Rossum9e896b32000-04-05 20:11:21 +00002448
Mark Dickinson22b20182010-05-10 21:27:53 +00002449 onError:
Brett Cannona721aba2016-09-09 14:57:09 -07002450 if (pend != NULL) {
Serhiy Storchakac6792272013-10-19 21:03:34 +03002451 *pend = (char *)str;
Brett Cannona721aba2016-09-09 14:57:09 -07002452 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002453 Py_XDECREF(z);
2454 slen = strlen(orig_str) < 200 ? strlen(orig_str) : 200;
2455 strobj = PyUnicode_FromStringAndSize(orig_str, slen);
Brett Cannona721aba2016-09-09 14:57:09 -07002456 if (strobj == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002457 return NULL;
Brett Cannona721aba2016-09-09 14:57:09 -07002458 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002459 PyErr_Format(PyExc_ValueError,
Serhiy Storchaka579ddc22013-08-03 21:14:05 +03002460 "invalid literal for int() with base %d: %.200R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002461 base, strobj);
2462 Py_DECREF(strobj);
2463 return NULL;
Guido van Rossum9e896b32000-04-05 20:11:21 +00002464}
2465
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03002466/* Since PyLong_FromString doesn't have a length parameter,
2467 * check here for possible NULs in the string.
2468 *
2469 * Reports an invalid literal as a bytes object.
2470 */
2471PyObject *
2472_PyLong_FromBytes(const char *s, Py_ssize_t len, int base)
2473{
2474 PyObject *result, *strobj;
2475 char *end = NULL;
2476
Serhiy Storchaka20b39b22014-09-28 11:27:24 +03002477 result = PyLong_FromString(s, &end, base);
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03002478 if (end == NULL || (result != NULL && end == s + len))
2479 return result;
2480 Py_XDECREF(result);
2481 strobj = PyBytes_FromStringAndSize(s, Py_MIN(len, 200));
2482 if (strobj != NULL) {
2483 PyErr_Format(PyExc_ValueError,
Serhiy Storchaka579ddc22013-08-03 21:14:05 +03002484 "invalid literal for int() with base %d: %.200R",
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03002485 base, strobj);
2486 Py_DECREF(strobj);
2487 }
2488 return NULL;
2489}
2490
Guido van Rossum9e896b32000-04-05 20:11:21 +00002491PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00002492PyLong_FromUnicode(Py_UNICODE *u, Py_ssize_t length, int base)
Guido van Rossum9e896b32000-04-05 20:11:21 +00002493{
Serhiy Storchaka460bd0d2016-11-20 12:16:46 +02002494 PyObject *v, *unicode = PyUnicode_FromWideChar(u, length);
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002495 if (unicode == NULL)
2496 return NULL;
2497 v = PyLong_FromUnicodeObject(unicode, base);
2498 Py_DECREF(unicode);
2499 return v;
2500}
2501
2502PyObject *
2503PyLong_FromUnicodeObject(PyObject *u, int base)
2504{
Serhiy Storchaka579ddc22013-08-03 21:14:05 +03002505 PyObject *result, *asciidig;
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02002506 const char *buffer;
2507 char *end = NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002508 Py_ssize_t buflen;
Guido van Rossum9e896b32000-04-05 20:11:21 +00002509
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002510 asciidig = _PyUnicode_TransformDecimalAndSpaceToASCII(u);
Alexander Belopolsky942af5a2010-12-04 03:38:46 +00002511 if (asciidig == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002512 return NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002513 buffer = PyUnicode_AsUTF8AndSize(asciidig, &buflen);
Alexander Belopolsky942af5a2010-12-04 03:38:46 +00002514 if (buffer == NULL) {
2515 Py_DECREF(asciidig);
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03002516 if (!PyErr_ExceptionMatches(PyExc_UnicodeEncodeError))
2517 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002518 }
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03002519 else {
2520 result = PyLong_FromString(buffer, &end, base);
2521 if (end == NULL || (result != NULL && end == buffer + buflen)) {
2522 Py_DECREF(asciidig);
2523 return result;
2524 }
2525 Py_DECREF(asciidig);
2526 Py_XDECREF(result);
Alexander Belopolsky942af5a2010-12-04 03:38:46 +00002527 }
Serhiy Storchaka579ddc22013-08-03 21:14:05 +03002528 PyErr_Format(PyExc_ValueError,
2529 "invalid literal for int() with base %d: %.200R",
2530 base, u);
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03002531 return NULL;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002532}
2533
Tim Peters9f688bf2000-07-07 15:53:28 +00002534/* forward */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002535static PyLongObject *x_divrem
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002536 (PyLongObject *, PyLongObject *, PyLongObject **);
Guido van Rossumb43daf72007-08-01 18:08:08 +00002537static PyObject *long_long(PyObject *v);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002538
Serhiy Storchaka95949422013-08-27 19:40:23 +03002539/* Int division with remainder, top-level routine */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002540
Guido van Rossume32e0141992-01-19 16:31:05 +00002541static int
Tim Peters9f688bf2000-07-07 15:53:28 +00002542long_divrem(PyLongObject *a, PyLongObject *b,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002543 PyLongObject **pdiv, PyLongObject **prem)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002544{
Victor Stinner45e8e2f2014-05-14 17:24:35 +02002545 Py_ssize_t size_a = Py_ABS(Py_SIZE(a)), size_b = Py_ABS(Py_SIZE(b));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002546 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002547
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002548 if (size_b == 0) {
2549 PyErr_SetString(PyExc_ZeroDivisionError,
2550 "integer division or modulo by zero");
2551 return -1;
2552 }
2553 if (size_a < size_b ||
2554 (size_a == size_b &&
2555 a->ob_digit[size_a-1] < b->ob_digit[size_b-1])) {
2556 /* |a| < |b|. */
Mark Dickinsonb820d7f2016-08-22 12:24:46 +01002557 *prem = (PyLongObject *)long_long((PyObject *)a);
2558 if (*prem == NULL) {
Mark Dickinsonb820d7f2016-08-22 12:24:46 +01002559 return -1;
2560 }
Serhiy Storchakaba85d692017-03-30 09:09:41 +03002561 Py_INCREF(_PyLong_Zero);
2562 *pdiv = (PyLongObject*)_PyLong_Zero;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002563 return 0;
2564 }
2565 if (size_b == 1) {
2566 digit rem = 0;
2567 z = divrem1(a, b->ob_digit[0], &rem);
2568 if (z == NULL)
2569 return -1;
2570 *prem = (PyLongObject *) PyLong_FromLong((long)rem);
2571 if (*prem == NULL) {
2572 Py_DECREF(z);
2573 return -1;
2574 }
2575 }
2576 else {
2577 z = x_divrem(a, b, prem);
2578 if (z == NULL)
2579 return -1;
2580 }
2581 /* Set the signs.
2582 The quotient z has the sign of a*b;
2583 the remainder r has the sign of a,
2584 so a = b*z + r. */
Victor Stinner8aed6f12013-07-17 22:31:17 +02002585 if ((Py_SIZE(a) < 0) != (Py_SIZE(b) < 0)) {
2586 _PyLong_Negate(&z);
2587 if (z == NULL) {
2588 Py_CLEAR(*prem);
2589 return -1;
2590 }
2591 }
2592 if (Py_SIZE(a) < 0 && Py_SIZE(*prem) != 0) {
2593 _PyLong_Negate(prem);
2594 if (*prem == NULL) {
2595 Py_DECREF(z);
2596 Py_CLEAR(*prem);
2597 return -1;
2598 }
2599 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002600 *pdiv = maybe_small_long(z);
2601 return 0;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002602}
2603
Serhiy Storchaka95949422013-08-27 19:40:23 +03002604/* Unsigned int division with remainder -- the algorithm. The arguments v1
Victor Stinner45e8e2f2014-05-14 17:24:35 +02002605 and w1 should satisfy 2 <= Py_ABS(Py_SIZE(w1)) <= Py_ABS(Py_SIZE(v1)). */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002606
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002607static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00002608x_divrem(PyLongObject *v1, PyLongObject *w1, PyLongObject **prem)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002609{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002610 PyLongObject *v, *w, *a;
2611 Py_ssize_t i, k, size_v, size_w;
2612 int d;
2613 digit wm1, wm2, carry, q, r, vtop, *v0, *vk, *w0, *ak;
2614 twodigits vv;
2615 sdigit zhi;
2616 stwodigits z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002617
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002618 /* We follow Knuth [The Art of Computer Programming, Vol. 2 (3rd
2619 edn.), section 4.3.1, Algorithm D], except that we don't explicitly
2620 handle the special case when the initial estimate q for a quotient
2621 digit is >= PyLong_BASE: the max value for q is PyLong_BASE+1, and
2622 that won't overflow a digit. */
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002623
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002624 /* allocate space; w will also be used to hold the final remainder */
Victor Stinner45e8e2f2014-05-14 17:24:35 +02002625 size_v = Py_ABS(Py_SIZE(v1));
2626 size_w = Py_ABS(Py_SIZE(w1));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002627 assert(size_v >= size_w && size_w >= 2); /* Assert checks by div() */
2628 v = _PyLong_New(size_v+1);
2629 if (v == NULL) {
2630 *prem = NULL;
2631 return NULL;
2632 }
2633 w = _PyLong_New(size_w);
2634 if (w == NULL) {
2635 Py_DECREF(v);
2636 *prem = NULL;
2637 return NULL;
2638 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002639
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002640 /* normalize: shift w1 left so that its top digit is >= PyLong_BASE/2.
2641 shift v1 left by the same amount. Results go into w and v. */
2642 d = PyLong_SHIFT - bits_in_digit(w1->ob_digit[size_w-1]);
2643 carry = v_lshift(w->ob_digit, w1->ob_digit, size_w, d);
2644 assert(carry == 0);
2645 carry = v_lshift(v->ob_digit, v1->ob_digit, size_v, d);
2646 if (carry != 0 || v->ob_digit[size_v-1] >= w->ob_digit[size_w-1]) {
2647 v->ob_digit[size_v] = carry;
2648 size_v++;
2649 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002650
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002651 /* Now v->ob_digit[size_v-1] < w->ob_digit[size_w-1], so quotient has
2652 at most (and usually exactly) k = size_v - size_w digits. */
2653 k = size_v - size_w;
2654 assert(k >= 0);
2655 a = _PyLong_New(k);
2656 if (a == NULL) {
2657 Py_DECREF(w);
2658 Py_DECREF(v);
2659 *prem = NULL;
2660 return NULL;
2661 }
2662 v0 = v->ob_digit;
2663 w0 = w->ob_digit;
2664 wm1 = w0[size_w-1];
2665 wm2 = w0[size_w-2];
2666 for (vk = v0+k, ak = a->ob_digit + k; vk-- > v0;) {
2667 /* inner loop: divide vk[0:size_w+1] by w0[0:size_w], giving
2668 single-digit quotient q, remainder in vk[0:size_w]. */
Tim Peters5af4e6c2002-08-12 02:31:19 +00002669
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002670 SIGCHECK({
Mark Dickinson22b20182010-05-10 21:27:53 +00002671 Py_DECREF(a);
2672 Py_DECREF(w);
2673 Py_DECREF(v);
2674 *prem = NULL;
2675 return NULL;
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00002676 });
Tim Peters5af4e6c2002-08-12 02:31:19 +00002677
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002678 /* estimate quotient digit q; may overestimate by 1 (rare) */
2679 vtop = vk[size_w];
2680 assert(vtop <= wm1);
2681 vv = ((twodigits)vtop << PyLong_SHIFT) | vk[size_w-1];
2682 q = (digit)(vv / wm1);
2683 r = (digit)(vv - (twodigits)wm1 * q); /* r = vv % wm1 */
2684 while ((twodigits)wm2 * q > (((twodigits)r << PyLong_SHIFT)
2685 | vk[size_w-2])) {
2686 --q;
2687 r += wm1;
2688 if (r >= PyLong_BASE)
2689 break;
2690 }
2691 assert(q <= PyLong_BASE);
Tim Peters5af4e6c2002-08-12 02:31:19 +00002692
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002693 /* subtract q*w0[0:size_w] from vk[0:size_w+1] */
2694 zhi = 0;
2695 for (i = 0; i < size_w; ++i) {
2696 /* invariants: -PyLong_BASE <= -q <= zhi <= 0;
2697 -PyLong_BASE * q <= z < PyLong_BASE */
2698 z = (sdigit)vk[i] + zhi -
2699 (stwodigits)q * (stwodigits)w0[i];
2700 vk[i] = (digit)z & PyLong_MASK;
2701 zhi = (sdigit)Py_ARITHMETIC_RIGHT_SHIFT(stwodigits,
Mark Dickinson22b20182010-05-10 21:27:53 +00002702 z, PyLong_SHIFT);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002703 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002704
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002705 /* add w back if q was too large (this branch taken rarely) */
2706 assert((sdigit)vtop + zhi == -1 || (sdigit)vtop + zhi == 0);
2707 if ((sdigit)vtop + zhi < 0) {
2708 carry = 0;
2709 for (i = 0; i < size_w; ++i) {
2710 carry += vk[i] + w0[i];
2711 vk[i] = carry & PyLong_MASK;
2712 carry >>= PyLong_SHIFT;
2713 }
2714 --q;
2715 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002716
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002717 /* store quotient digit */
2718 assert(q < PyLong_BASE);
2719 *--ak = q;
2720 }
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002721
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002722 /* unshift remainder; we reuse w to store the result */
2723 carry = v_rshift(w0, v0, size_w, d);
2724 assert(carry==0);
2725 Py_DECREF(v);
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002726
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002727 *prem = long_normalize(w);
2728 return long_normalize(a);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002729}
2730
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002731/* For a nonzero PyLong a, express a in the form x * 2**e, with 0.5 <=
2732 abs(x) < 1.0 and e >= 0; return x and put e in *e. Here x is
2733 rounded to DBL_MANT_DIG significant bits using round-half-to-even.
2734 If a == 0, return 0.0 and set *e = 0. If the resulting exponent
2735 e is larger than PY_SSIZE_T_MAX, raise OverflowError and return
2736 -1.0. */
2737
2738/* attempt to define 2.0**DBL_MANT_DIG as a compile-time constant */
2739#if DBL_MANT_DIG == 53
2740#define EXP2_DBL_MANT_DIG 9007199254740992.0
2741#else
2742#define EXP2_DBL_MANT_DIG (ldexp(1.0, DBL_MANT_DIG))
2743#endif
2744
2745double
2746_PyLong_Frexp(PyLongObject *a, Py_ssize_t *e)
2747{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002748 Py_ssize_t a_size, a_bits, shift_digits, shift_bits, x_size;
2749 /* See below for why x_digits is always large enough. */
2750 digit rem, x_digits[2 + (DBL_MANT_DIG + 1) / PyLong_SHIFT];
2751 double dx;
2752 /* Correction term for round-half-to-even rounding. For a digit x,
2753 "x + half_even_correction[x & 7]" gives x rounded to the nearest
2754 multiple of 4, rounding ties to a multiple of 8. */
2755 static const int half_even_correction[8] = {0, -1, -2, 1, 0, -1, 2, 1};
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002756
Victor Stinner45e8e2f2014-05-14 17:24:35 +02002757 a_size = Py_ABS(Py_SIZE(a));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002758 if (a_size == 0) {
2759 /* Special case for 0: significand 0.0, exponent 0. */
2760 *e = 0;
2761 return 0.0;
2762 }
2763 a_bits = bits_in_digit(a->ob_digit[a_size-1]);
2764 /* The following is an overflow-free version of the check
2765 "if ((a_size - 1) * PyLong_SHIFT + a_bits > PY_SSIZE_T_MAX) ..." */
2766 if (a_size >= (PY_SSIZE_T_MAX - 1) / PyLong_SHIFT + 1 &&
2767 (a_size > (PY_SSIZE_T_MAX - 1) / PyLong_SHIFT + 1 ||
2768 a_bits > (PY_SSIZE_T_MAX - 1) % PyLong_SHIFT + 1))
Mark Dickinson22b20182010-05-10 21:27:53 +00002769 goto overflow;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002770 a_bits = (a_size - 1) * PyLong_SHIFT + a_bits;
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002771
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002772 /* Shift the first DBL_MANT_DIG + 2 bits of a into x_digits[0:x_size]
2773 (shifting left if a_bits <= DBL_MANT_DIG + 2).
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002774
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002775 Number of digits needed for result: write // for floor division.
2776 Then if shifting left, we end up using
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002777
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002778 1 + a_size + (DBL_MANT_DIG + 2 - a_bits) // PyLong_SHIFT
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002779
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002780 digits. If shifting right, we use
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002781
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002782 a_size - (a_bits - DBL_MANT_DIG - 2) // PyLong_SHIFT
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002783
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002784 digits. Using a_size = 1 + (a_bits - 1) // PyLong_SHIFT along with
2785 the inequalities
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002786
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002787 m // PyLong_SHIFT + n // PyLong_SHIFT <= (m + n) // PyLong_SHIFT
2788 m // PyLong_SHIFT - n // PyLong_SHIFT <=
2789 1 + (m - n - 1) // PyLong_SHIFT,
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002790
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002791 valid for any integers m and n, we find that x_size satisfies
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002792
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002793 x_size <= 2 + (DBL_MANT_DIG + 1) // PyLong_SHIFT
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002794
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002795 in both cases.
2796 */
2797 if (a_bits <= DBL_MANT_DIG + 2) {
2798 shift_digits = (DBL_MANT_DIG + 2 - a_bits) / PyLong_SHIFT;
2799 shift_bits = (DBL_MANT_DIG + 2 - a_bits) % PyLong_SHIFT;
2800 x_size = 0;
2801 while (x_size < shift_digits)
2802 x_digits[x_size++] = 0;
2803 rem = v_lshift(x_digits + x_size, a->ob_digit, a_size,
2804 (int)shift_bits);
2805 x_size += a_size;
2806 x_digits[x_size++] = rem;
2807 }
2808 else {
2809 shift_digits = (a_bits - DBL_MANT_DIG - 2) / PyLong_SHIFT;
2810 shift_bits = (a_bits - DBL_MANT_DIG - 2) % PyLong_SHIFT;
2811 rem = v_rshift(x_digits, a->ob_digit + shift_digits,
2812 a_size - shift_digits, (int)shift_bits);
2813 x_size = a_size - shift_digits;
2814 /* For correct rounding below, we need the least significant
2815 bit of x to be 'sticky' for this shift: if any of the bits
2816 shifted out was nonzero, we set the least significant bit
2817 of x. */
2818 if (rem)
2819 x_digits[0] |= 1;
2820 else
2821 while (shift_digits > 0)
2822 if (a->ob_digit[--shift_digits]) {
2823 x_digits[0] |= 1;
2824 break;
2825 }
2826 }
Victor Stinner63941882011-09-29 00:42:28 +02002827 assert(1 <= x_size && x_size <= (Py_ssize_t)Py_ARRAY_LENGTH(x_digits));
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002828
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002829 /* Round, and convert to double. */
2830 x_digits[0] += half_even_correction[x_digits[0] & 7];
2831 dx = x_digits[--x_size];
2832 while (x_size > 0)
2833 dx = dx * PyLong_BASE + x_digits[--x_size];
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002834
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002835 /* Rescale; make correction if result is 1.0. */
2836 dx /= 4.0 * EXP2_DBL_MANT_DIG;
2837 if (dx == 1.0) {
2838 if (a_bits == PY_SSIZE_T_MAX)
2839 goto overflow;
2840 dx = 0.5;
2841 a_bits += 1;
2842 }
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002843
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002844 *e = a_bits;
2845 return Py_SIZE(a) < 0 ? -dx : dx;
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002846
2847 overflow:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002848 /* exponent > PY_SSIZE_T_MAX */
2849 PyErr_SetString(PyExc_OverflowError,
2850 "huge integer: number of bits overflows a Py_ssize_t");
2851 *e = 0;
2852 return -1.0;
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002853}
2854
Serhiy Storchaka95949422013-08-27 19:40:23 +03002855/* Get a C double from an int object. Rounds to the nearest double,
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002856 using the round-half-to-even rule in the case of a tie. */
2857
2858double
2859PyLong_AsDouble(PyObject *v)
2860{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002861 Py_ssize_t exponent;
2862 double x;
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002863
Nadeem Vawda3d5881e2011-09-07 21:40:26 +02002864 if (v == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002865 PyErr_BadInternalCall();
2866 return -1.0;
2867 }
Nadeem Vawda3d5881e2011-09-07 21:40:26 +02002868 if (!PyLong_Check(v)) {
2869 PyErr_SetString(PyExc_TypeError, "an integer is required");
2870 return -1.0;
2871 }
Yury Selivanov186c30b2016-02-05 19:40:01 -05002872 if (Py_ABS(Py_SIZE(v)) <= 1) {
Yury Selivanova0fcaca2016-02-06 12:21:33 -05002873 /* Fast path; single digit long (31 bits) will cast safely
Mark Dickinson1dc3c892016-08-21 10:33:36 +01002874 to double. This improves performance of FP/long operations
2875 by 20%.
Yury Selivanov186c30b2016-02-05 19:40:01 -05002876 */
2877 return (double)MEDIUM_VALUE((PyLongObject *)v);
2878 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002879 x = _PyLong_Frexp((PyLongObject *)v, &exponent);
2880 if ((x == -1.0 && PyErr_Occurred()) || exponent > DBL_MAX_EXP) {
2881 PyErr_SetString(PyExc_OverflowError,
Mark Dickinson02515f72013-08-03 12:08:22 +01002882 "int too large to convert to float");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002883 return -1.0;
2884 }
2885 return ldexp(x, (int)exponent);
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002886}
2887
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002888/* Methods */
2889
2890static void
Tim Peters9f688bf2000-07-07 15:53:28 +00002891long_dealloc(PyObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002892{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002893 Py_TYPE(v)->tp_free(v);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002894}
2895
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002896static int
Tim Peters9f688bf2000-07-07 15:53:28 +00002897long_compare(PyLongObject *a, PyLongObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002898{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002899 Py_ssize_t sign;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002900
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002901 if (Py_SIZE(a) != Py_SIZE(b)) {
2902 sign = Py_SIZE(a) - Py_SIZE(b);
2903 }
2904 else {
Victor Stinner45e8e2f2014-05-14 17:24:35 +02002905 Py_ssize_t i = Py_ABS(Py_SIZE(a));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002906 while (--i >= 0 && a->ob_digit[i] == b->ob_digit[i])
2907 ;
2908 if (i < 0)
2909 sign = 0;
2910 else {
2911 sign = (sdigit)a->ob_digit[i] - (sdigit)b->ob_digit[i];
2912 if (Py_SIZE(a) < 0)
2913 sign = -sign;
2914 }
2915 }
2916 return sign < 0 ? -1 : sign > 0 ? 1 : 0;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002917}
2918
Antoine Pitrou51f3ef92008-12-20 13:14:23 +00002919#define TEST_COND(cond) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002920 ((cond) ? Py_True : Py_False)
Antoine Pitrou51f3ef92008-12-20 13:14:23 +00002921
Guido van Rossum47b9ff62006-08-24 00:41:19 +00002922static PyObject *
2923long_richcompare(PyObject *self, PyObject *other, int op)
2924{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002925 int result;
2926 PyObject *v;
2927 CHECK_BINOP(self, other);
2928 if (self == other)
2929 result = 0;
2930 else
2931 result = long_compare((PyLongObject*)self, (PyLongObject*)other);
2932 /* Convert the return value to a Boolean */
2933 switch (op) {
2934 case Py_EQ:
2935 v = TEST_COND(result == 0);
2936 break;
2937 case Py_NE:
2938 v = TEST_COND(result != 0);
2939 break;
2940 case Py_LE:
2941 v = TEST_COND(result <= 0);
2942 break;
2943 case Py_GE:
2944 v = TEST_COND(result >= 0);
2945 break;
2946 case Py_LT:
2947 v = TEST_COND(result == -1);
2948 break;
2949 case Py_GT:
2950 v = TEST_COND(result == 1);
2951 break;
2952 default:
2953 PyErr_BadArgument();
2954 return NULL;
2955 }
2956 Py_INCREF(v);
2957 return v;
Guido van Rossum47b9ff62006-08-24 00:41:19 +00002958}
2959
Benjamin Peterson8f67d082010-10-17 20:54:53 +00002960static Py_hash_t
Tim Peters9f688bf2000-07-07 15:53:28 +00002961long_hash(PyLongObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00002962{
Benjamin Peterson8035bc52010-10-23 16:20:50 +00002963 Py_uhash_t x;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002964 Py_ssize_t i;
2965 int sign;
Guido van Rossum9bfef441993-03-29 10:43:31 +00002966
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002967 i = Py_SIZE(v);
2968 switch(i) {
2969 case -1: return v->ob_digit[0]==1 ? -2 : -(sdigit)v->ob_digit[0];
2970 case 0: return 0;
2971 case 1: return v->ob_digit[0];
2972 }
2973 sign = 1;
2974 x = 0;
2975 if (i < 0) {
2976 sign = -1;
2977 i = -(i);
2978 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002979 while (--i >= 0) {
Mark Dickinsondc787d22010-05-23 13:33:13 +00002980 /* Here x is a quantity in the range [0, _PyHASH_MODULUS); we
2981 want to compute x * 2**PyLong_SHIFT + v->ob_digit[i] modulo
2982 _PyHASH_MODULUS.
2983
2984 The computation of x * 2**PyLong_SHIFT % _PyHASH_MODULUS
2985 amounts to a rotation of the bits of x. To see this, write
2986
2987 x * 2**PyLong_SHIFT = y * 2**_PyHASH_BITS + z
2988
2989 where y = x >> (_PyHASH_BITS - PyLong_SHIFT) gives the top
2990 PyLong_SHIFT bits of x (those that are shifted out of the
2991 original _PyHASH_BITS bits, and z = (x << PyLong_SHIFT) &
2992 _PyHASH_MODULUS gives the bottom _PyHASH_BITS - PyLong_SHIFT
2993 bits of x, shifted up. Then since 2**_PyHASH_BITS is
2994 congruent to 1 modulo _PyHASH_MODULUS, y*2**_PyHASH_BITS is
2995 congruent to y modulo _PyHASH_MODULUS. So
2996
2997 x * 2**PyLong_SHIFT = y + z (mod _PyHASH_MODULUS).
2998
2999 The right-hand side is just the result of rotating the
3000 _PyHASH_BITS bits of x left by PyLong_SHIFT places; since
3001 not all _PyHASH_BITS bits of x are 1s, the same is true
3002 after rotation, so 0 <= y+z < _PyHASH_MODULUS and y + z is
3003 the reduction of x*2**PyLong_SHIFT modulo
3004 _PyHASH_MODULUS. */
3005 x = ((x << PyLong_SHIFT) & _PyHASH_MODULUS) |
3006 (x >> (_PyHASH_BITS - PyLong_SHIFT));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003007 x += v->ob_digit[i];
Mark Dickinsondc787d22010-05-23 13:33:13 +00003008 if (x >= _PyHASH_MODULUS)
3009 x -= _PyHASH_MODULUS;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003010 }
3011 x = x * sign;
Benjamin Peterson8035bc52010-10-23 16:20:50 +00003012 if (x == (Py_uhash_t)-1)
3013 x = (Py_uhash_t)-2;
Benjamin Peterson8f67d082010-10-17 20:54:53 +00003014 return (Py_hash_t)x;
Guido van Rossum9bfef441993-03-29 10:43:31 +00003015}
3016
3017
Serhiy Storchaka95949422013-08-27 19:40:23 +03003018/* Add the absolute values of two integers. */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003019
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003020static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003021x_add(PyLongObject *a, PyLongObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003022{
Victor Stinner45e8e2f2014-05-14 17:24:35 +02003023 Py_ssize_t size_a = Py_ABS(Py_SIZE(a)), size_b = Py_ABS(Py_SIZE(b));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003024 PyLongObject *z;
3025 Py_ssize_t i;
3026 digit carry = 0;
Tim Peters69c2de32001-09-11 22:31:33 +00003027
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003028 /* Ensure a is the larger of the two: */
3029 if (size_a < size_b) {
3030 { PyLongObject *temp = a; a = b; b = temp; }
3031 { Py_ssize_t size_temp = size_a;
Mark Dickinson22b20182010-05-10 21:27:53 +00003032 size_a = size_b;
3033 size_b = size_temp; }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003034 }
3035 z = _PyLong_New(size_a+1);
3036 if (z == NULL)
3037 return NULL;
3038 for (i = 0; i < size_b; ++i) {
3039 carry += a->ob_digit[i] + b->ob_digit[i];
3040 z->ob_digit[i] = carry & PyLong_MASK;
3041 carry >>= PyLong_SHIFT;
3042 }
3043 for (; i < size_a; ++i) {
3044 carry += a->ob_digit[i];
3045 z->ob_digit[i] = carry & PyLong_MASK;
3046 carry >>= PyLong_SHIFT;
3047 }
3048 z->ob_digit[i] = carry;
3049 return long_normalize(z);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003050}
3051
3052/* Subtract the absolute values of two integers. */
3053
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003054static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003055x_sub(PyLongObject *a, PyLongObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003056{
Victor Stinner45e8e2f2014-05-14 17:24:35 +02003057 Py_ssize_t size_a = Py_ABS(Py_SIZE(a)), size_b = Py_ABS(Py_SIZE(b));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003058 PyLongObject *z;
3059 Py_ssize_t i;
3060 int sign = 1;
3061 digit borrow = 0;
Tim Peters69c2de32001-09-11 22:31:33 +00003062
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003063 /* Ensure a is the larger of the two: */
3064 if (size_a < size_b) {
3065 sign = -1;
3066 { PyLongObject *temp = a; a = b; b = temp; }
3067 { Py_ssize_t size_temp = size_a;
Mark Dickinson22b20182010-05-10 21:27:53 +00003068 size_a = size_b;
3069 size_b = size_temp; }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003070 }
3071 else if (size_a == size_b) {
3072 /* Find highest digit where a and b differ: */
3073 i = size_a;
3074 while (--i >= 0 && a->ob_digit[i] == b->ob_digit[i])
3075 ;
3076 if (i < 0)
3077 return (PyLongObject *)PyLong_FromLong(0);
3078 if (a->ob_digit[i] < b->ob_digit[i]) {
3079 sign = -1;
3080 { PyLongObject *temp = a; a = b; b = temp; }
3081 }
3082 size_a = size_b = i+1;
3083 }
3084 z = _PyLong_New(size_a);
3085 if (z == NULL)
3086 return NULL;
3087 for (i = 0; i < size_b; ++i) {
3088 /* The following assumes unsigned arithmetic
3089 works module 2**N for some N>PyLong_SHIFT. */
3090 borrow = a->ob_digit[i] - b->ob_digit[i] - borrow;
3091 z->ob_digit[i] = borrow & PyLong_MASK;
3092 borrow >>= PyLong_SHIFT;
3093 borrow &= 1; /* Keep only one sign bit */
3094 }
3095 for (; i < size_a; ++i) {
3096 borrow = a->ob_digit[i] - borrow;
3097 z->ob_digit[i] = borrow & PyLong_MASK;
3098 borrow >>= PyLong_SHIFT;
3099 borrow &= 1; /* Keep only one sign bit */
3100 }
3101 assert(borrow == 0);
Victor Stinner8aed6f12013-07-17 22:31:17 +02003102 if (sign < 0) {
Victor Stinner8bcf3122016-08-17 19:48:33 +02003103 Py_SIZE(z) = -Py_SIZE(z);
Victor Stinner8aed6f12013-07-17 22:31:17 +02003104 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003105 return long_normalize(z);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003106}
3107
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003108static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003109long_add(PyLongObject *a, PyLongObject *b)
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003110{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003111 PyLongObject *z;
Tim Peters69c2de32001-09-11 22:31:33 +00003112
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003113 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003114
Victor Stinner45e8e2f2014-05-14 17:24:35 +02003115 if (Py_ABS(Py_SIZE(a)) <= 1 && Py_ABS(Py_SIZE(b)) <= 1) {
Mark Dickinsonc1c4a642016-09-17 20:01:56 +01003116 return PyLong_FromLong(MEDIUM_VALUE(a) + MEDIUM_VALUE(b));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003117 }
3118 if (Py_SIZE(a) < 0) {
3119 if (Py_SIZE(b) < 0) {
3120 z = x_add(a, b);
Serhiy Storchakae63e5d62016-06-04 00:06:45 +03003121 if (z != NULL) {
3122 /* x_add received at least one multiple-digit int,
3123 and thus z must be a multiple-digit int.
3124 That also means z is not an element of
3125 small_ints, so negating it in-place is safe. */
3126 assert(Py_REFCNT(z) == 1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003127 Py_SIZE(z) = -(Py_SIZE(z));
Serhiy Storchakae63e5d62016-06-04 00:06:45 +03003128 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003129 }
3130 else
3131 z = x_sub(b, a);
3132 }
3133 else {
3134 if (Py_SIZE(b) < 0)
3135 z = x_sub(a, b);
3136 else
3137 z = x_add(a, b);
3138 }
3139 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003140}
3141
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003142static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003143long_sub(PyLongObject *a, PyLongObject *b)
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003144{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003145 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003146
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003147 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003148
Victor Stinner45e8e2f2014-05-14 17:24:35 +02003149 if (Py_ABS(Py_SIZE(a)) <= 1 && Py_ABS(Py_SIZE(b)) <= 1) {
Mark Dickinsonc1c4a642016-09-17 20:01:56 +01003150 return PyLong_FromLong(MEDIUM_VALUE(a) - MEDIUM_VALUE(b));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003151 }
3152 if (Py_SIZE(a) < 0) {
3153 if (Py_SIZE(b) < 0)
3154 z = x_sub(a, b);
3155 else
3156 z = x_add(a, b);
Serhiy Storchakae63e5d62016-06-04 00:06:45 +03003157 if (z != NULL) {
3158 assert(Py_SIZE(z) == 0 || Py_REFCNT(z) == 1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003159 Py_SIZE(z) = -(Py_SIZE(z));
Serhiy Storchakae63e5d62016-06-04 00:06:45 +03003160 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003161 }
3162 else {
3163 if (Py_SIZE(b) < 0)
3164 z = x_add(a, b);
3165 else
3166 z = x_sub(a, b);
3167 }
3168 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003169}
3170
Tim Peters5af4e6c2002-08-12 02:31:19 +00003171/* Grade school multiplication, ignoring the signs.
3172 * Returns the absolute value of the product, or NULL if error.
3173 */
3174static PyLongObject *
3175x_mul(PyLongObject *a, PyLongObject *b)
Neil Schemenauerba872e22001-01-04 01:46:03 +00003176{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003177 PyLongObject *z;
Victor Stinner45e8e2f2014-05-14 17:24:35 +02003178 Py_ssize_t size_a = Py_ABS(Py_SIZE(a));
3179 Py_ssize_t size_b = Py_ABS(Py_SIZE(b));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003180 Py_ssize_t i;
Neil Schemenauerba872e22001-01-04 01:46:03 +00003181
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003182 z = _PyLong_New(size_a + size_b);
3183 if (z == NULL)
3184 return NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003185
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003186 memset(z->ob_digit, 0, Py_SIZE(z) * sizeof(digit));
3187 if (a == b) {
3188 /* Efficient squaring per HAC, Algorithm 14.16:
3189 * http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf
3190 * Gives slightly less than a 2x speedup when a == b,
3191 * via exploiting that each entry in the multiplication
3192 * pyramid appears twice (except for the size_a squares).
3193 */
3194 for (i = 0; i < size_a; ++i) {
3195 twodigits carry;
3196 twodigits f = a->ob_digit[i];
3197 digit *pz = z->ob_digit + (i << 1);
3198 digit *pa = a->ob_digit + i + 1;
3199 digit *paend = a->ob_digit + size_a;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003200
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003201 SIGCHECK({
Mark Dickinson22b20182010-05-10 21:27:53 +00003202 Py_DECREF(z);
3203 return NULL;
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00003204 });
Tim Peters0973b992004-08-29 22:16:50 +00003205
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003206 carry = *pz + f * f;
3207 *pz++ = (digit)(carry & PyLong_MASK);
3208 carry >>= PyLong_SHIFT;
3209 assert(carry <= PyLong_MASK);
Tim Peters0973b992004-08-29 22:16:50 +00003210
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003211 /* Now f is added in twice in each column of the
3212 * pyramid it appears. Same as adding f<<1 once.
3213 */
3214 f <<= 1;
3215 while (pa < paend) {
3216 carry += *pz + *pa++ * f;
3217 *pz++ = (digit)(carry & PyLong_MASK);
3218 carry >>= PyLong_SHIFT;
3219 assert(carry <= (PyLong_MASK << 1));
3220 }
3221 if (carry) {
3222 carry += *pz;
3223 *pz++ = (digit)(carry & PyLong_MASK);
3224 carry >>= PyLong_SHIFT;
3225 }
3226 if (carry)
3227 *pz += (digit)(carry & PyLong_MASK);
3228 assert((carry >> PyLong_SHIFT) == 0);
3229 }
3230 }
Serhiy Storchaka95949422013-08-27 19:40:23 +03003231 else { /* a is not the same as b -- gradeschool int mult */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003232 for (i = 0; i < size_a; ++i) {
3233 twodigits carry = 0;
3234 twodigits f = a->ob_digit[i];
3235 digit *pz = z->ob_digit + i;
3236 digit *pb = b->ob_digit;
3237 digit *pbend = b->ob_digit + size_b;
Tim Peters0973b992004-08-29 22:16:50 +00003238
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003239 SIGCHECK({
Mark Dickinson22b20182010-05-10 21:27:53 +00003240 Py_DECREF(z);
3241 return NULL;
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00003242 });
Tim Peters0973b992004-08-29 22:16:50 +00003243
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003244 while (pb < pbend) {
3245 carry += *pz + *pb++ * f;
3246 *pz++ = (digit)(carry & PyLong_MASK);
3247 carry >>= PyLong_SHIFT;
3248 assert(carry <= PyLong_MASK);
3249 }
3250 if (carry)
3251 *pz += (digit)(carry & PyLong_MASK);
3252 assert((carry >> PyLong_SHIFT) == 0);
3253 }
3254 }
3255 return long_normalize(z);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003256}
3257
3258/* A helper for Karatsuba multiplication (k_mul).
Serhiy Storchaka95949422013-08-27 19:40:23 +03003259 Takes an int "n" and an integer "size" representing the place to
Tim Peters5af4e6c2002-08-12 02:31:19 +00003260 split, and sets low and high such that abs(n) == (high << size) + low,
3261 viewing the shift as being by digits. The sign bit is ignored, and
3262 the return values are >= 0.
3263 Returns 0 on success, -1 on failure.
3264*/
3265static int
Mark Dickinson22b20182010-05-10 21:27:53 +00003266kmul_split(PyLongObject *n,
3267 Py_ssize_t size,
3268 PyLongObject **high,
3269 PyLongObject **low)
Tim Peters5af4e6c2002-08-12 02:31:19 +00003270{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003271 PyLongObject *hi, *lo;
3272 Py_ssize_t size_lo, size_hi;
Victor Stinner45e8e2f2014-05-14 17:24:35 +02003273 const Py_ssize_t size_n = Py_ABS(Py_SIZE(n));
Tim Peters5af4e6c2002-08-12 02:31:19 +00003274
Victor Stinner640c35c2013-06-04 23:14:37 +02003275 size_lo = Py_MIN(size_n, size);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003276 size_hi = size_n - size_lo;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003277
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003278 if ((hi = _PyLong_New(size_hi)) == NULL)
3279 return -1;
3280 if ((lo = _PyLong_New(size_lo)) == NULL) {
3281 Py_DECREF(hi);
3282 return -1;
3283 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00003284
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003285 memcpy(lo->ob_digit, n->ob_digit, size_lo * sizeof(digit));
3286 memcpy(hi->ob_digit, n->ob_digit + size_lo, size_hi * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00003287
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003288 *high = long_normalize(hi);
3289 *low = long_normalize(lo);
3290 return 0;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003291}
3292
Tim Peters60004642002-08-12 22:01:34 +00003293static PyLongObject *k_lopsided_mul(PyLongObject *a, PyLongObject *b);
3294
Tim Peters5af4e6c2002-08-12 02:31:19 +00003295/* Karatsuba multiplication. Ignores the input signs, and returns the
3296 * absolute value of the product (or NULL if error).
3297 * See Knuth Vol. 2 Chapter 4.3.3 (Pp. 294-295).
3298 */
3299static PyLongObject *
3300k_mul(PyLongObject *a, PyLongObject *b)
3301{
Victor Stinner45e8e2f2014-05-14 17:24:35 +02003302 Py_ssize_t asize = Py_ABS(Py_SIZE(a));
3303 Py_ssize_t bsize = Py_ABS(Py_SIZE(b));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003304 PyLongObject *ah = NULL;
3305 PyLongObject *al = NULL;
3306 PyLongObject *bh = NULL;
3307 PyLongObject *bl = NULL;
3308 PyLongObject *ret = NULL;
3309 PyLongObject *t1, *t2, *t3;
3310 Py_ssize_t shift; /* the number of digits we split off */
3311 Py_ssize_t i;
Tim Peters738eda72002-08-12 15:08:20 +00003312
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003313 /* (ah*X+al)(bh*X+bl) = ah*bh*X*X + (ah*bl + al*bh)*X + al*bl
3314 * Let k = (ah+al)*(bh+bl) = ah*bl + al*bh + ah*bh + al*bl
3315 * Then the original product is
3316 * ah*bh*X*X + (k - ah*bh - al*bl)*X + al*bl
3317 * By picking X to be a power of 2, "*X" is just shifting, and it's
3318 * been reduced to 3 multiplies on numbers half the size.
3319 */
Tim Peters5af4e6c2002-08-12 02:31:19 +00003320
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003321 /* We want to split based on the larger number; fiddle so that b
3322 * is largest.
3323 */
3324 if (asize > bsize) {
3325 t1 = a;
3326 a = b;
3327 b = t1;
Tim Peters738eda72002-08-12 15:08:20 +00003328
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003329 i = asize;
3330 asize = bsize;
3331 bsize = i;
3332 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00003333
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003334 /* Use gradeschool math when either number is too small. */
3335 i = a == b ? KARATSUBA_SQUARE_CUTOFF : KARATSUBA_CUTOFF;
3336 if (asize <= i) {
3337 if (asize == 0)
3338 return (PyLongObject *)PyLong_FromLong(0);
3339 else
3340 return x_mul(a, b);
3341 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00003342
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003343 /* If a is small compared to b, splitting on b gives a degenerate
3344 * case with ah==0, and Karatsuba may be (even much) less efficient
3345 * than "grade school" then. However, we can still win, by viewing
3346 * b as a string of "big digits", each of width a->ob_size. That
3347 * leads to a sequence of balanced calls to k_mul.
3348 */
3349 if (2 * asize <= bsize)
3350 return k_lopsided_mul(a, b);
Tim Peters60004642002-08-12 22:01:34 +00003351
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003352 /* Split a & b into hi & lo pieces. */
3353 shift = bsize >> 1;
3354 if (kmul_split(a, shift, &ah, &al) < 0) goto fail;
3355 assert(Py_SIZE(ah) > 0); /* the split isn't degenerate */
Tim Petersd6974a52002-08-13 20:37:51 +00003356
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003357 if (a == b) {
3358 bh = ah;
3359 bl = al;
3360 Py_INCREF(bh);
3361 Py_INCREF(bl);
3362 }
3363 else if (kmul_split(b, shift, &bh, &bl) < 0) goto fail;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003364
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003365 /* The plan:
3366 * 1. Allocate result space (asize + bsize digits: that's always
3367 * enough).
3368 * 2. Compute ah*bh, and copy into result at 2*shift.
3369 * 3. Compute al*bl, and copy into result at 0. Note that this
3370 * can't overlap with #2.
3371 * 4. Subtract al*bl from the result, starting at shift. This may
3372 * underflow (borrow out of the high digit), but we don't care:
3373 * we're effectively doing unsigned arithmetic mod
3374 * BASE**(sizea + sizeb), and so long as the *final* result fits,
3375 * borrows and carries out of the high digit can be ignored.
3376 * 5. Subtract ah*bh from the result, starting at shift.
3377 * 6. Compute (ah+al)*(bh+bl), and add it into the result starting
3378 * at shift.
3379 */
Tim Petersd64c1de2002-08-12 17:36:03 +00003380
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003381 /* 1. Allocate result space. */
3382 ret = _PyLong_New(asize + bsize);
3383 if (ret == NULL) goto fail;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003384#ifdef Py_DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003385 /* Fill with trash, to catch reference to uninitialized digits. */
3386 memset(ret->ob_digit, 0xDF, Py_SIZE(ret) * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00003387#endif
Tim Peters44121a62002-08-12 06:17:58 +00003388
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003389 /* 2. t1 <- ah*bh, and copy into high digits of result. */
3390 if ((t1 = k_mul(ah, bh)) == NULL) goto fail;
3391 assert(Py_SIZE(t1) >= 0);
3392 assert(2*shift + Py_SIZE(t1) <= Py_SIZE(ret));
3393 memcpy(ret->ob_digit + 2*shift, t1->ob_digit,
3394 Py_SIZE(t1) * sizeof(digit));
Tim Peters738eda72002-08-12 15:08:20 +00003395
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003396 /* Zero-out the digits higher than the ah*bh copy. */
3397 i = Py_SIZE(ret) - 2*shift - Py_SIZE(t1);
3398 if (i)
3399 memset(ret->ob_digit + 2*shift + Py_SIZE(t1), 0,
3400 i * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00003401
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003402 /* 3. t2 <- al*bl, and copy into the low digits. */
3403 if ((t2 = k_mul(al, bl)) == NULL) {
3404 Py_DECREF(t1);
3405 goto fail;
3406 }
3407 assert(Py_SIZE(t2) >= 0);
3408 assert(Py_SIZE(t2) <= 2*shift); /* no overlap with high digits */
3409 memcpy(ret->ob_digit, t2->ob_digit, Py_SIZE(t2) * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00003410
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003411 /* Zero out remaining digits. */
3412 i = 2*shift - Py_SIZE(t2); /* number of uninitialized digits */
3413 if (i)
3414 memset(ret->ob_digit + Py_SIZE(t2), 0, i * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00003415
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003416 /* 4 & 5. Subtract ah*bh (t1) and al*bl (t2). We do al*bl first
3417 * because it's fresher in cache.
3418 */
3419 i = Py_SIZE(ret) - shift; /* # digits after shift */
3420 (void)v_isub(ret->ob_digit + shift, i, t2->ob_digit, Py_SIZE(t2));
3421 Py_DECREF(t2);
Tim Peters738eda72002-08-12 15:08:20 +00003422
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003423 (void)v_isub(ret->ob_digit + shift, i, t1->ob_digit, Py_SIZE(t1));
3424 Py_DECREF(t1);
Tim Peters738eda72002-08-12 15:08:20 +00003425
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003426 /* 6. t3 <- (ah+al)(bh+bl), and add into result. */
3427 if ((t1 = x_add(ah, al)) == NULL) goto fail;
3428 Py_DECREF(ah);
3429 Py_DECREF(al);
3430 ah = al = NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003431
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003432 if (a == b) {
3433 t2 = t1;
3434 Py_INCREF(t2);
3435 }
3436 else if ((t2 = x_add(bh, bl)) == NULL) {
3437 Py_DECREF(t1);
3438 goto fail;
3439 }
3440 Py_DECREF(bh);
3441 Py_DECREF(bl);
3442 bh = bl = NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003443
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003444 t3 = k_mul(t1, t2);
3445 Py_DECREF(t1);
3446 Py_DECREF(t2);
3447 if (t3 == NULL) goto fail;
3448 assert(Py_SIZE(t3) >= 0);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003449
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003450 /* Add t3. It's not obvious why we can't run out of room here.
3451 * See the (*) comment after this function.
3452 */
3453 (void)v_iadd(ret->ob_digit + shift, i, t3->ob_digit, Py_SIZE(t3));
3454 Py_DECREF(t3);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003455
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003456 return long_normalize(ret);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003457
Mark Dickinson22b20182010-05-10 21:27:53 +00003458 fail:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003459 Py_XDECREF(ret);
3460 Py_XDECREF(ah);
3461 Py_XDECREF(al);
3462 Py_XDECREF(bh);
3463 Py_XDECREF(bl);
3464 return NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003465}
3466
Tim Petersd6974a52002-08-13 20:37:51 +00003467/* (*) Why adding t3 can't "run out of room" above.
3468
Tim Petersab86c2b2002-08-15 20:06:00 +00003469Let f(x) mean the floor of x and c(x) mean the ceiling of x. Some facts
3470to start with:
Tim Petersd6974a52002-08-13 20:37:51 +00003471
Tim Petersab86c2b2002-08-15 20:06:00 +000034721. For any integer i, i = c(i/2) + f(i/2). In particular,
3473 bsize = c(bsize/2) + f(bsize/2).
34742. shift = f(bsize/2)
34753. asize <= bsize
34764. Since we call k_lopsided_mul if asize*2 <= bsize, asize*2 > bsize in this
3477 routine, so asize > bsize/2 >= f(bsize/2) in this routine.
Tim Petersd6974a52002-08-13 20:37:51 +00003478
Tim Petersab86c2b2002-08-15 20:06:00 +00003479We allocated asize + bsize result digits, and add t3 into them at an offset
3480of shift. This leaves asize+bsize-shift allocated digit positions for t3
3481to fit into, = (by #1 and #2) asize + f(bsize/2) + c(bsize/2) - f(bsize/2) =
3482asize + c(bsize/2) available digit positions.
Tim Petersd6974a52002-08-13 20:37:51 +00003483
Tim Petersab86c2b2002-08-15 20:06:00 +00003484bh has c(bsize/2) digits, and bl at most f(size/2) digits. So bh+hl has
3485at most c(bsize/2) digits + 1 bit.
Tim Petersd6974a52002-08-13 20:37:51 +00003486
Tim Petersab86c2b2002-08-15 20:06:00 +00003487If asize == bsize, ah has c(bsize/2) digits, else ah has at most f(bsize/2)
3488digits, and al has at most f(bsize/2) digits in any case. So ah+al has at
3489most (asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 1 bit.
Tim Petersd6974a52002-08-13 20:37:51 +00003490
Tim Petersab86c2b2002-08-15 20:06:00 +00003491The product (ah+al)*(bh+bl) therefore has at most
Tim Petersd6974a52002-08-13 20:37:51 +00003492
Tim Petersab86c2b2002-08-15 20:06:00 +00003493 c(bsize/2) + (asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 2 bits
Tim Petersd6974a52002-08-13 20:37:51 +00003494
Tim Petersab86c2b2002-08-15 20:06:00 +00003495and we have asize + c(bsize/2) available digit positions. We need to show
3496this is always enough. An instance of c(bsize/2) cancels out in both, so
3497the question reduces to whether asize digits is enough to hold
3498(asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 2 bits. If asize < bsize,
3499then we're asking whether asize digits >= f(bsize/2) digits + 2 bits. By #4,
3500asize 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 +00003501digit is enough to hold 2 bits. This is so since PyLong_SHIFT=15 >= 2. If
Tim Petersab86c2b2002-08-15 20:06:00 +00003502asize == bsize, then we're asking whether bsize digits is enough to hold
Tim Peterse417de02002-08-15 20:10:45 +00003503c(bsize/2) digits + 2 bits, or equivalently (by #1) whether f(bsize/2) digits
3504is enough to hold 2 bits. This is so if bsize >= 2, which holds because
3505bsize >= KARATSUBA_CUTOFF >= 2.
Tim Peters8e966ee2002-08-14 16:36:23 +00003506
Tim Peters48d52c02002-08-14 17:07:32 +00003507Note that since there's always enough room for (ah+al)*(bh+bl), and that's
3508clearly >= each of ah*bh and al*bl, there's always enough room to subtract
3509ah*bh and al*bl too.
Tim Petersd6974a52002-08-13 20:37:51 +00003510*/
3511
Tim Peters60004642002-08-12 22:01:34 +00003512/* b has at least twice the digits of a, and a is big enough that Karatsuba
3513 * would pay off *if* the inputs had balanced sizes. View b as a sequence
3514 * of slices, each with a->ob_size digits, and multiply the slices by a,
3515 * one at a time. This gives k_mul balanced inputs to work with, and is
3516 * also cache-friendly (we compute one double-width slice of the result
Ezio Melotti42da6632011-03-15 05:18:48 +02003517 * at a time, then move on, never backtracking except for the helpful
Tim Peters60004642002-08-12 22:01:34 +00003518 * single-width slice overlap between successive partial sums).
3519 */
3520static PyLongObject *
3521k_lopsided_mul(PyLongObject *a, PyLongObject *b)
3522{
Victor Stinner45e8e2f2014-05-14 17:24:35 +02003523 const Py_ssize_t asize = Py_ABS(Py_SIZE(a));
3524 Py_ssize_t bsize = Py_ABS(Py_SIZE(b));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003525 Py_ssize_t nbdone; /* # of b digits already multiplied */
3526 PyLongObject *ret;
3527 PyLongObject *bslice = NULL;
Tim Peters60004642002-08-12 22:01:34 +00003528
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003529 assert(asize > KARATSUBA_CUTOFF);
3530 assert(2 * asize <= bsize);
Tim Peters60004642002-08-12 22:01:34 +00003531
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003532 /* Allocate result space, and zero it out. */
3533 ret = _PyLong_New(asize + bsize);
3534 if (ret == NULL)
3535 return NULL;
3536 memset(ret->ob_digit, 0, Py_SIZE(ret) * sizeof(digit));
Tim Peters60004642002-08-12 22:01:34 +00003537
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003538 /* Successive slices of b are copied into bslice. */
3539 bslice = _PyLong_New(asize);
3540 if (bslice == NULL)
3541 goto fail;
Tim Peters60004642002-08-12 22:01:34 +00003542
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003543 nbdone = 0;
3544 while (bsize > 0) {
3545 PyLongObject *product;
Victor Stinner640c35c2013-06-04 23:14:37 +02003546 const Py_ssize_t nbtouse = Py_MIN(bsize, asize);
Tim Peters60004642002-08-12 22:01:34 +00003547
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003548 /* Multiply the next slice of b by a. */
3549 memcpy(bslice->ob_digit, b->ob_digit + nbdone,
3550 nbtouse * sizeof(digit));
3551 Py_SIZE(bslice) = nbtouse;
3552 product = k_mul(a, bslice);
3553 if (product == NULL)
3554 goto fail;
Tim Peters60004642002-08-12 22:01:34 +00003555
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003556 /* Add into result. */
3557 (void)v_iadd(ret->ob_digit + nbdone, Py_SIZE(ret) - nbdone,
3558 product->ob_digit, Py_SIZE(product));
3559 Py_DECREF(product);
Tim Peters60004642002-08-12 22:01:34 +00003560
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003561 bsize -= nbtouse;
3562 nbdone += nbtouse;
3563 }
Tim Peters60004642002-08-12 22:01:34 +00003564
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003565 Py_DECREF(bslice);
3566 return long_normalize(ret);
Tim Peters60004642002-08-12 22:01:34 +00003567
Mark Dickinson22b20182010-05-10 21:27:53 +00003568 fail:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003569 Py_DECREF(ret);
3570 Py_XDECREF(bslice);
3571 return NULL;
Tim Peters60004642002-08-12 22:01:34 +00003572}
Tim Peters5af4e6c2002-08-12 02:31:19 +00003573
3574static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003575long_mul(PyLongObject *a, PyLongObject *b)
Tim Peters5af4e6c2002-08-12 02:31:19 +00003576{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003577 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003578
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003579 CHECK_BINOP(a, b);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003580
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003581 /* fast path for single-digit multiplication */
Victor Stinner45e8e2f2014-05-14 17:24:35 +02003582 if (Py_ABS(Py_SIZE(a)) <= 1 && Py_ABS(Py_SIZE(b)) <= 1) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003583 stwodigits v = (stwodigits)(MEDIUM_VALUE(a)) * MEDIUM_VALUE(b);
Benjamin Petersonaf580df2016-09-06 10:46:49 -07003584 return PyLong_FromLongLong((long long)v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003585 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00003586
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003587 z = k_mul(a, b);
3588 /* Negate if exactly one of the inputs is negative. */
Victor Stinner8aed6f12013-07-17 22:31:17 +02003589 if (((Py_SIZE(a) ^ Py_SIZE(b)) < 0) && z) {
3590 _PyLong_Negate(&z);
3591 if (z == NULL)
3592 return NULL;
3593 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003594 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003595}
3596
Yury Selivanove0b23092016-02-11 10:26:27 -05003597/* Fast modulo division for single-digit longs. */
3598static PyObject *
3599fast_mod(PyLongObject *a, PyLongObject *b)
3600{
3601 sdigit left = a->ob_digit[0];
3602 sdigit right = b->ob_digit[0];
3603 sdigit mod;
3604
3605 assert(Py_ABS(Py_SIZE(a)) == 1);
3606 assert(Py_ABS(Py_SIZE(b)) == 1);
3607
3608 if (Py_SIZE(a) == Py_SIZE(b)) {
3609 /* 'a' and 'b' have the same sign. */
3610 mod = left % right;
3611 }
3612 else {
3613 /* Either 'a' or 'b' is negative. */
3614 mod = right - 1 - (left - 1) % right;
3615 }
3616
Victor Stinnerf963c132016-03-23 18:36:54 +01003617 return PyLong_FromLong(mod * (sdigit)Py_SIZE(b));
Yury Selivanove0b23092016-02-11 10:26:27 -05003618}
3619
3620/* Fast floor division for single-digit longs. */
3621static PyObject *
3622fast_floor_div(PyLongObject *a, PyLongObject *b)
3623{
3624 sdigit left = a->ob_digit[0];
3625 sdigit right = b->ob_digit[0];
3626 sdigit div;
3627
3628 assert(Py_ABS(Py_SIZE(a)) == 1);
3629 assert(Py_ABS(Py_SIZE(b)) == 1);
3630
3631 if (Py_SIZE(a) == Py_SIZE(b)) {
3632 /* 'a' and 'b' have the same sign. */
3633 div = left / right;
3634 }
3635 else {
3636 /* Either 'a' or 'b' is negative. */
3637 div = -1 - (left - 1) / right;
3638 }
3639
3640 return PyLong_FromLong(div);
3641}
3642
Guido van Rossume32e0141992-01-19 16:31:05 +00003643/* The / and % operators are now defined in terms of divmod().
3644 The expression a mod b has the value a - b*floor(a/b).
3645 The long_divrem function gives the remainder after division of
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003646 |a| by |b|, with the sign of a. This is also expressed
3647 as a - b*trunc(a/b), if trunc truncates towards zero.
3648 Some examples:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003649 a b a rem b a mod b
3650 13 10 3 3
3651 -13 10 -3 7
3652 13 -10 3 -7
3653 -13 -10 -3 -3
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003654 So, to get from rem to mod, we have to add b if a and b
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00003655 have different signs. We then subtract one from the 'div'
3656 part of the outcome to keep the invariant intact. */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003657
Tim Peters47e52ee2004-08-30 02:44:38 +00003658/* Compute
3659 * *pdiv, *pmod = divmod(v, w)
3660 * NULL can be passed for pdiv or pmod, in which case that part of
3661 * the result is simply thrown away. The caller owns a reference to
3662 * each of these it requests (does not pass NULL for).
3663 */
Guido van Rossume32e0141992-01-19 16:31:05 +00003664static int
Tim Peters5af4e6c2002-08-12 02:31:19 +00003665l_divmod(PyLongObject *v, PyLongObject *w,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003666 PyLongObject **pdiv, PyLongObject **pmod)
Guido van Rossume32e0141992-01-19 16:31:05 +00003667{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003668 PyLongObject *div, *mod;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003669
Yury Selivanove0b23092016-02-11 10:26:27 -05003670 if (Py_ABS(Py_SIZE(v)) == 1 && Py_ABS(Py_SIZE(w)) == 1) {
3671 /* Fast path for single-digit longs */
3672 div = NULL;
3673 if (pdiv != NULL) {
3674 div = (PyLongObject *)fast_floor_div(v, w);
3675 if (div == NULL) {
3676 return -1;
3677 }
3678 }
3679 if (pmod != NULL) {
3680 mod = (PyLongObject *)fast_mod(v, w);
3681 if (mod == NULL) {
3682 Py_XDECREF(div);
3683 return -1;
3684 }
3685 *pmod = mod;
3686 }
3687 if (pdiv != NULL) {
3688 /* We only want to set `*pdiv` when `*pmod` is
3689 set successfully. */
3690 *pdiv = div;
3691 }
3692 return 0;
3693 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003694 if (long_divrem(v, w, &div, &mod) < 0)
3695 return -1;
3696 if ((Py_SIZE(mod) < 0 && Py_SIZE(w) > 0) ||
3697 (Py_SIZE(mod) > 0 && Py_SIZE(w) < 0)) {
3698 PyLongObject *temp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003699 temp = (PyLongObject *) long_add(mod, w);
3700 Py_DECREF(mod);
3701 mod = temp;
3702 if (mod == NULL) {
3703 Py_DECREF(div);
3704 return -1;
3705 }
Serhiy Storchakaba85d692017-03-30 09:09:41 +03003706 temp = (PyLongObject *) long_sub(div, (PyLongObject *)_PyLong_One);
3707 if (temp == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003708 Py_DECREF(mod);
3709 Py_DECREF(div);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003710 return -1;
3711 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003712 Py_DECREF(div);
3713 div = temp;
3714 }
3715 if (pdiv != NULL)
3716 *pdiv = div;
3717 else
3718 Py_DECREF(div);
Tim Peters47e52ee2004-08-30 02:44:38 +00003719
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003720 if (pmod != NULL)
3721 *pmod = mod;
3722 else
3723 Py_DECREF(mod);
Tim Peters47e52ee2004-08-30 02:44:38 +00003724
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003725 return 0;
Guido van Rossume32e0141992-01-19 16:31:05 +00003726}
3727
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003728static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003729long_div(PyObject *a, PyObject *b)
Guido van Rossume32e0141992-01-19 16:31:05 +00003730{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003731 PyLongObject *div;
Neil Schemenauerba872e22001-01-04 01:46:03 +00003732
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003733 CHECK_BINOP(a, b);
Yury Selivanove0b23092016-02-11 10:26:27 -05003734
3735 if (Py_ABS(Py_SIZE(a)) == 1 && Py_ABS(Py_SIZE(b)) == 1) {
3736 return fast_floor_div((PyLongObject*)a, (PyLongObject*)b);
3737 }
3738
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003739 if (l_divmod((PyLongObject*)a, (PyLongObject*)b, &div, NULL) < 0)
3740 div = NULL;
3741 return (PyObject *)div;
Guido van Rossume32e0141992-01-19 16:31:05 +00003742}
3743
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003744/* PyLong/PyLong -> float, with correctly rounded result. */
3745
3746#define MANT_DIG_DIGITS (DBL_MANT_DIG / PyLong_SHIFT)
3747#define MANT_DIG_BITS (DBL_MANT_DIG % PyLong_SHIFT)
3748
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003749static PyObject *
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003750long_true_divide(PyObject *v, PyObject *w)
Tim Peters20dab9f2001-09-04 05:31:47 +00003751{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003752 PyLongObject *a, *b, *x;
3753 Py_ssize_t a_size, b_size, shift, extra_bits, diff, x_size, x_bits;
3754 digit mask, low;
3755 int inexact, negate, a_is_small, b_is_small;
3756 double dx, result;
Tim Peterse2a60002001-09-04 06:17:36 +00003757
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003758 CHECK_BINOP(v, w);
3759 a = (PyLongObject *)v;
3760 b = (PyLongObject *)w;
Tim Peterse2a60002001-09-04 06:17:36 +00003761
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003762 /*
3763 Method in a nutshell:
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003764
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003765 0. reduce to case a, b > 0; filter out obvious underflow/overflow
3766 1. choose a suitable integer 'shift'
3767 2. use integer arithmetic to compute x = floor(2**-shift*a/b)
3768 3. adjust x for correct rounding
3769 4. convert x to a double dx with the same value
3770 5. return ldexp(dx, shift).
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003771
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003772 In more detail:
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003773
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003774 0. For any a, a/0 raises ZeroDivisionError; for nonzero b, 0/b
3775 returns either 0.0 or -0.0, depending on the sign of b. For a and
3776 b both nonzero, ignore signs of a and b, and add the sign back in
3777 at the end. Now write a_bits and b_bits for the bit lengths of a
3778 and b respectively (that is, a_bits = 1 + floor(log_2(a)); likewise
3779 for b). Then
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003780
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003781 2**(a_bits - b_bits - 1) < a/b < 2**(a_bits - b_bits + 1).
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003782
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003783 So if a_bits - b_bits > DBL_MAX_EXP then a/b > 2**DBL_MAX_EXP and
3784 so overflows. Similarly, if a_bits - b_bits < DBL_MIN_EXP -
3785 DBL_MANT_DIG - 1 then a/b underflows to 0. With these cases out of
3786 the way, we can assume that
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003787
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003788 DBL_MIN_EXP - DBL_MANT_DIG - 1 <= a_bits - b_bits <= DBL_MAX_EXP.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003789
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003790 1. The integer 'shift' is chosen so that x has the right number of
3791 bits for a double, plus two or three extra bits that will be used
3792 in the rounding decisions. Writing a_bits and b_bits for the
3793 number of significant bits in a and b respectively, a
3794 straightforward formula for shift is:
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003795
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003796 shift = a_bits - b_bits - DBL_MANT_DIG - 2
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003797
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003798 This is fine in the usual case, but if a/b is smaller than the
3799 smallest normal float then it can lead to double rounding on an
3800 IEEE 754 platform, giving incorrectly rounded results. So we
3801 adjust the formula slightly. The actual formula used is:
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003802
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003803 shift = MAX(a_bits - b_bits, DBL_MIN_EXP) - DBL_MANT_DIG - 2
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003804
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003805 2. The quantity x is computed by first shifting a (left -shift bits
3806 if shift <= 0, right shift bits if shift > 0) and then dividing by
3807 b. For both the shift and the division, we keep track of whether
3808 the result is inexact, in a flag 'inexact'; this information is
3809 needed at the rounding stage.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003810
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003811 With the choice of shift above, together with our assumption that
3812 a_bits - b_bits >= DBL_MIN_EXP - DBL_MANT_DIG - 1, it follows
3813 that x >= 1.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003814
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003815 3. Now x * 2**shift <= a/b < (x+1) * 2**shift. We want to replace
3816 this with an exactly representable float of the form
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003817
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003818 round(x/2**extra_bits) * 2**(extra_bits+shift).
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003819
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003820 For float representability, we need x/2**extra_bits <
3821 2**DBL_MANT_DIG and extra_bits + shift >= DBL_MIN_EXP -
3822 DBL_MANT_DIG. This translates to the condition:
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003823
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003824 extra_bits >= MAX(x_bits, DBL_MIN_EXP - shift) - DBL_MANT_DIG
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003825
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003826 To round, we just modify the bottom digit of x in-place; this can
3827 end up giving a digit with value > PyLONG_MASK, but that's not a
3828 problem since digits can hold values up to 2*PyLONG_MASK+1.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003829
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003830 With the original choices for shift above, extra_bits will always
3831 be 2 or 3. Then rounding under the round-half-to-even rule, we
3832 round up iff the most significant of the extra bits is 1, and
3833 either: (a) the computation of x in step 2 had an inexact result,
3834 or (b) at least one other of the extra bits is 1, or (c) the least
3835 significant bit of x (above those to be rounded) is 1.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003836
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003837 4. Conversion to a double is straightforward; all floating-point
3838 operations involved in the conversion are exact, so there's no
3839 danger of rounding errors.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003840
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003841 5. Use ldexp(x, shift) to compute x*2**shift, the final result.
3842 The result will always be exactly representable as a double, except
3843 in the case that it overflows. To avoid dependence on the exact
3844 behaviour of ldexp on overflow, we check for overflow before
3845 applying ldexp. The result of ldexp is adjusted for sign before
3846 returning.
3847 */
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003848
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003849 /* Reduce to case where a and b are both positive. */
Victor Stinner45e8e2f2014-05-14 17:24:35 +02003850 a_size = Py_ABS(Py_SIZE(a));
3851 b_size = Py_ABS(Py_SIZE(b));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003852 negate = (Py_SIZE(a) < 0) ^ (Py_SIZE(b) < 0);
3853 if (b_size == 0) {
3854 PyErr_SetString(PyExc_ZeroDivisionError,
3855 "division by zero");
3856 goto error;
3857 }
3858 if (a_size == 0)
3859 goto underflow_or_zero;
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003860
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003861 /* Fast path for a and b small (exactly representable in a double).
3862 Relies on floating-point division being correctly rounded; results
3863 may be subject to double rounding on x86 machines that operate with
3864 the x87 FPU set to 64-bit precision. */
3865 a_is_small = a_size <= MANT_DIG_DIGITS ||
3866 (a_size == MANT_DIG_DIGITS+1 &&
3867 a->ob_digit[MANT_DIG_DIGITS] >> MANT_DIG_BITS == 0);
3868 b_is_small = b_size <= MANT_DIG_DIGITS ||
3869 (b_size == MANT_DIG_DIGITS+1 &&
3870 b->ob_digit[MANT_DIG_DIGITS] >> MANT_DIG_BITS == 0);
3871 if (a_is_small && b_is_small) {
3872 double da, db;
3873 da = a->ob_digit[--a_size];
3874 while (a_size > 0)
3875 da = da * PyLong_BASE + a->ob_digit[--a_size];
3876 db = b->ob_digit[--b_size];
3877 while (b_size > 0)
3878 db = db * PyLong_BASE + b->ob_digit[--b_size];
3879 result = da / db;
3880 goto success;
3881 }
Tim Peterse2a60002001-09-04 06:17:36 +00003882
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003883 /* Catch obvious cases of underflow and overflow */
3884 diff = a_size - b_size;
3885 if (diff > PY_SSIZE_T_MAX/PyLong_SHIFT - 1)
3886 /* Extreme overflow */
3887 goto overflow;
3888 else if (diff < 1 - PY_SSIZE_T_MAX/PyLong_SHIFT)
3889 /* Extreme underflow */
3890 goto underflow_or_zero;
3891 /* Next line is now safe from overflowing a Py_ssize_t */
3892 diff = diff * PyLong_SHIFT + bits_in_digit(a->ob_digit[a_size - 1]) -
3893 bits_in_digit(b->ob_digit[b_size - 1]);
3894 /* Now diff = a_bits - b_bits. */
3895 if (diff > DBL_MAX_EXP)
3896 goto overflow;
3897 else if (diff < DBL_MIN_EXP - DBL_MANT_DIG - 1)
3898 goto underflow_or_zero;
Tim Peterse2a60002001-09-04 06:17:36 +00003899
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003900 /* Choose value for shift; see comments for step 1 above. */
Victor Stinner640c35c2013-06-04 23:14:37 +02003901 shift = Py_MAX(diff, DBL_MIN_EXP) - DBL_MANT_DIG - 2;
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003902
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003903 inexact = 0;
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003904
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003905 /* x = abs(a * 2**-shift) */
3906 if (shift <= 0) {
3907 Py_ssize_t i, shift_digits = -shift / PyLong_SHIFT;
3908 digit rem;
3909 /* x = a << -shift */
3910 if (a_size >= PY_SSIZE_T_MAX - 1 - shift_digits) {
3911 /* In practice, it's probably impossible to end up
3912 here. Both a and b would have to be enormous,
3913 using close to SIZE_T_MAX bytes of memory each. */
3914 PyErr_SetString(PyExc_OverflowError,
Mark Dickinson22b20182010-05-10 21:27:53 +00003915 "intermediate overflow during division");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003916 goto error;
3917 }
3918 x = _PyLong_New(a_size + shift_digits + 1);
3919 if (x == NULL)
3920 goto error;
3921 for (i = 0; i < shift_digits; i++)
3922 x->ob_digit[i] = 0;
3923 rem = v_lshift(x->ob_digit + shift_digits, a->ob_digit,
3924 a_size, -shift % PyLong_SHIFT);
3925 x->ob_digit[a_size + shift_digits] = rem;
3926 }
3927 else {
3928 Py_ssize_t shift_digits = shift / PyLong_SHIFT;
3929 digit rem;
3930 /* x = a >> shift */
3931 assert(a_size >= shift_digits);
3932 x = _PyLong_New(a_size - shift_digits);
3933 if (x == NULL)
3934 goto error;
3935 rem = v_rshift(x->ob_digit, a->ob_digit + shift_digits,
3936 a_size - shift_digits, shift % PyLong_SHIFT);
3937 /* set inexact if any of the bits shifted out is nonzero */
3938 if (rem)
3939 inexact = 1;
3940 while (!inexact && shift_digits > 0)
3941 if (a->ob_digit[--shift_digits])
3942 inexact = 1;
3943 }
3944 long_normalize(x);
3945 x_size = Py_SIZE(x);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003946
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003947 /* x //= b. If the remainder is nonzero, set inexact. We own the only
3948 reference to x, so it's safe to modify it in-place. */
3949 if (b_size == 1) {
3950 digit rem = inplace_divrem1(x->ob_digit, x->ob_digit, x_size,
3951 b->ob_digit[0]);
3952 long_normalize(x);
3953 if (rem)
3954 inexact = 1;
3955 }
3956 else {
3957 PyLongObject *div, *rem;
3958 div = x_divrem(x, b, &rem);
3959 Py_DECREF(x);
3960 x = div;
3961 if (x == NULL)
3962 goto error;
3963 if (Py_SIZE(rem))
3964 inexact = 1;
3965 Py_DECREF(rem);
3966 }
Victor Stinner45e8e2f2014-05-14 17:24:35 +02003967 x_size = Py_ABS(Py_SIZE(x));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003968 assert(x_size > 0); /* result of division is never zero */
3969 x_bits = (x_size-1)*PyLong_SHIFT+bits_in_digit(x->ob_digit[x_size-1]);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003970
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003971 /* The number of extra bits that have to be rounded away. */
Victor Stinner640c35c2013-06-04 23:14:37 +02003972 extra_bits = Py_MAX(x_bits, DBL_MIN_EXP - shift) - DBL_MANT_DIG;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003973 assert(extra_bits == 2 || extra_bits == 3);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003974
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003975 /* Round by directly modifying the low digit of x. */
3976 mask = (digit)1 << (extra_bits - 1);
3977 low = x->ob_digit[0] | inexact;
Mark Dickinsondc590a42016-08-21 10:23:23 +01003978 if ((low & mask) && (low & (3U*mask-1U)))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003979 low += mask;
Mark Dickinsondc590a42016-08-21 10:23:23 +01003980 x->ob_digit[0] = low & ~(2U*mask-1U);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003981
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003982 /* Convert x to a double dx; the conversion is exact. */
3983 dx = x->ob_digit[--x_size];
3984 while (x_size > 0)
3985 dx = dx * PyLong_BASE + x->ob_digit[--x_size];
3986 Py_DECREF(x);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003987
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003988 /* Check whether ldexp result will overflow a double. */
3989 if (shift + x_bits >= DBL_MAX_EXP &&
3990 (shift + x_bits > DBL_MAX_EXP || dx == ldexp(1.0, (int)x_bits)))
3991 goto overflow;
3992 result = ldexp(dx, (int)shift);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003993
3994 success:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003995 return PyFloat_FromDouble(negate ? -result : result);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003996
3997 underflow_or_zero:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003998 return PyFloat_FromDouble(negate ? -0.0 : 0.0);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003999
4000 overflow:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004001 PyErr_SetString(PyExc_OverflowError,
4002 "integer division result too large for a float");
Mark Dickinsoncbb62742009-12-27 15:09:50 +00004003 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004004 return NULL;
Tim Peters20dab9f2001-09-04 05:31:47 +00004005}
4006
4007static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00004008long_mod(PyObject *a, PyObject *b)
Guido van Rossume32e0141992-01-19 16:31:05 +00004009{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004010 PyLongObject *mod;
Neil Schemenauerba872e22001-01-04 01:46:03 +00004011
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004012 CHECK_BINOP(a, b);
4013
Yury Selivanove0b23092016-02-11 10:26:27 -05004014 if (Py_ABS(Py_SIZE(a)) == 1 && Py_ABS(Py_SIZE(b)) == 1) {
4015 return fast_mod((PyLongObject*)a, (PyLongObject*)b);
4016 }
4017
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004018 if (l_divmod((PyLongObject*)a, (PyLongObject*)b, NULL, &mod) < 0)
4019 mod = NULL;
4020 return (PyObject *)mod;
Guido van Rossume32e0141992-01-19 16:31:05 +00004021}
4022
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004023static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00004024long_divmod(PyObject *a, PyObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00004025{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004026 PyLongObject *div, *mod;
4027 PyObject *z;
Neil Schemenauerba872e22001-01-04 01:46:03 +00004028
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004029 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00004030
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004031 if (l_divmod((PyLongObject*)a, (PyLongObject*)b, &div, &mod) < 0) {
4032 return NULL;
4033 }
4034 z = PyTuple_New(2);
4035 if (z != NULL) {
4036 PyTuple_SetItem(z, 0, (PyObject *) div);
4037 PyTuple_SetItem(z, 1, (PyObject *) mod);
4038 }
4039 else {
4040 Py_DECREF(div);
4041 Py_DECREF(mod);
4042 }
4043 return z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00004044}
4045
Tim Peters47e52ee2004-08-30 02:44:38 +00004046/* pow(v, w, x) */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004047static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00004048long_pow(PyObject *v, PyObject *w, PyObject *x)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00004049{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004050 PyLongObject *a, *b, *c; /* a,b,c = v,w,x */
4051 int negativeOutput = 0; /* if x<0 return negative output */
Neil Schemenauerba872e22001-01-04 01:46:03 +00004052
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004053 PyLongObject *z = NULL; /* accumulated result */
4054 Py_ssize_t i, j, k; /* counters */
4055 PyLongObject *temp = NULL;
Tim Peters47e52ee2004-08-30 02:44:38 +00004056
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004057 /* 5-ary values. If the exponent is large enough, table is
4058 * precomputed so that table[i] == a**i % c for i in range(32).
4059 */
4060 PyLongObject *table[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
4061 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
Tim Peters47e52ee2004-08-30 02:44:38 +00004062
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004063 /* a, b, c = v, w, x */
4064 CHECK_BINOP(v, w);
4065 a = (PyLongObject*)v; Py_INCREF(a);
4066 b = (PyLongObject*)w; Py_INCREF(b);
4067 if (PyLong_Check(x)) {
4068 c = (PyLongObject *)x;
4069 Py_INCREF(x);
4070 }
4071 else if (x == Py_None)
4072 c = NULL;
4073 else {
4074 Py_DECREF(a);
4075 Py_DECREF(b);
Brian Curtindfc80e32011-08-10 20:28:54 -05004076 Py_RETURN_NOTIMPLEMENTED;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004077 }
Tim Peters4c483c42001-09-05 06:24:58 +00004078
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004079 if (Py_SIZE(b) < 0) { /* if exponent is negative */
4080 if (c) {
Mark Dickinson0c346d82014-04-11 14:34:40 -04004081 PyErr_SetString(PyExc_ValueError, "pow() 2nd argument "
Mark Dickinson22b20182010-05-10 21:27:53 +00004082 "cannot be negative when 3rd argument specified");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004083 goto Error;
4084 }
4085 else {
4086 /* else return a float. This works because we know
4087 that this calls float_pow() which converts its
4088 arguments to double. */
4089 Py_DECREF(a);
4090 Py_DECREF(b);
4091 return PyFloat_Type.tp_as_number->nb_power(v, w, x);
4092 }
4093 }
Tim Peters47e52ee2004-08-30 02:44:38 +00004094
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004095 if (c) {
4096 /* if modulus == 0:
4097 raise ValueError() */
4098 if (Py_SIZE(c) == 0) {
4099 PyErr_SetString(PyExc_ValueError,
4100 "pow() 3rd argument cannot be 0");
4101 goto Error;
4102 }
Tim Peters47e52ee2004-08-30 02:44:38 +00004103
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004104 /* if modulus < 0:
4105 negativeOutput = True
4106 modulus = -modulus */
4107 if (Py_SIZE(c) < 0) {
4108 negativeOutput = 1;
4109 temp = (PyLongObject *)_PyLong_Copy(c);
4110 if (temp == NULL)
4111 goto Error;
4112 Py_DECREF(c);
4113 c = temp;
4114 temp = NULL;
Victor Stinner8aed6f12013-07-17 22:31:17 +02004115 _PyLong_Negate(&c);
4116 if (c == NULL)
4117 goto Error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004118 }
Tim Peters47e52ee2004-08-30 02:44:38 +00004119
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004120 /* if modulus == 1:
4121 return 0 */
4122 if ((Py_SIZE(c) == 1) && (c->ob_digit[0] == 1)) {
4123 z = (PyLongObject *)PyLong_FromLong(0L);
4124 goto Done;
4125 }
Tim Peters47e52ee2004-08-30 02:44:38 +00004126
Tim Peters81a93152013-10-05 16:53:52 -05004127 /* Reduce base by modulus in some cases:
4128 1. If base < 0. Forcing the base non-negative makes things easier.
4129 2. If base is obviously larger than the modulus. The "small
4130 exponent" case later can multiply directly by base repeatedly,
4131 while the "large exponent" case multiplies directly by base 31
4132 times. It can be unboundedly faster to multiply by
4133 base % modulus instead.
4134 We could _always_ do this reduction, but l_divmod() isn't cheap,
4135 so we only do it when it buys something. */
4136 if (Py_SIZE(a) < 0 || Py_SIZE(a) > Py_SIZE(c)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004137 if (l_divmod(a, c, NULL, &temp) < 0)
4138 goto Error;
4139 Py_DECREF(a);
4140 a = temp;
4141 temp = NULL;
4142 }
4143 }
Tim Peters47e52ee2004-08-30 02:44:38 +00004144
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004145 /* At this point a, b, and c are guaranteed non-negative UNLESS
4146 c is NULL, in which case a may be negative. */
Tim Peters47e52ee2004-08-30 02:44:38 +00004147
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004148 z = (PyLongObject *)PyLong_FromLong(1L);
4149 if (z == NULL)
4150 goto Error;
Tim Peters47e52ee2004-08-30 02:44:38 +00004151
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004152 /* Perform a modular reduction, X = X % c, but leave X alone if c
4153 * is NULL.
4154 */
4155#define REDUCE(X) \
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00004156 do { \
4157 if (c != NULL) { \
4158 if (l_divmod(X, c, NULL, &temp) < 0) \
4159 goto Error; \
4160 Py_XDECREF(X); \
4161 X = temp; \
4162 temp = NULL; \
4163 } \
4164 } while(0)
Tim Peters47e52ee2004-08-30 02:44:38 +00004165
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004166 /* Multiply two values, then reduce the result:
4167 result = X*Y % c. If c is NULL, skip the mod. */
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00004168#define MULT(X, Y, result) \
4169 do { \
4170 temp = (PyLongObject *)long_mul(X, Y); \
4171 if (temp == NULL) \
4172 goto Error; \
4173 Py_XDECREF(result); \
4174 result = temp; \
4175 temp = NULL; \
4176 REDUCE(result); \
4177 } while(0)
Tim Peters47e52ee2004-08-30 02:44:38 +00004178
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004179 if (Py_SIZE(b) <= FIVEARY_CUTOFF) {
4180 /* Left-to-right binary exponentiation (HAC Algorithm 14.79) */
4181 /* http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf */
4182 for (i = Py_SIZE(b) - 1; i >= 0; --i) {
4183 digit bi = b->ob_digit[i];
Tim Peters47e52ee2004-08-30 02:44:38 +00004184
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004185 for (j = (digit)1 << (PyLong_SHIFT-1); j != 0; j >>= 1) {
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00004186 MULT(z, z, z);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004187 if (bi & j)
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00004188 MULT(z, a, z);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004189 }
4190 }
4191 }
4192 else {
4193 /* Left-to-right 5-ary exponentiation (HAC Algorithm 14.82) */
4194 Py_INCREF(z); /* still holds 1L */
4195 table[0] = z;
4196 for (i = 1; i < 32; ++i)
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00004197 MULT(table[i-1], a, table[i]);
Tim Peters47e52ee2004-08-30 02:44:38 +00004198
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004199 for (i = Py_SIZE(b) - 1; i >= 0; --i) {
4200 const digit bi = b->ob_digit[i];
Tim Peters47e52ee2004-08-30 02:44:38 +00004201
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004202 for (j = PyLong_SHIFT - 5; j >= 0; j -= 5) {
4203 const int index = (bi >> j) & 0x1f;
4204 for (k = 0; k < 5; ++k)
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00004205 MULT(z, z, z);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004206 if (index)
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00004207 MULT(z, table[index], z);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004208 }
4209 }
4210 }
Tim Peters47e52ee2004-08-30 02:44:38 +00004211
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004212 if (negativeOutput && (Py_SIZE(z) != 0)) {
4213 temp = (PyLongObject *)long_sub(z, c);
4214 if (temp == NULL)
4215 goto Error;
4216 Py_DECREF(z);
4217 z = temp;
4218 temp = NULL;
4219 }
4220 goto Done;
Tim Peters47e52ee2004-08-30 02:44:38 +00004221
Mark Dickinson22b20182010-05-10 21:27:53 +00004222 Error:
Victor Stinner8aed6f12013-07-17 22:31:17 +02004223 Py_CLEAR(z);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004224 /* fall through */
Mark Dickinson22b20182010-05-10 21:27:53 +00004225 Done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004226 if (Py_SIZE(b) > FIVEARY_CUTOFF) {
4227 for (i = 0; i < 32; ++i)
4228 Py_XDECREF(table[i]);
4229 }
4230 Py_DECREF(a);
4231 Py_DECREF(b);
4232 Py_XDECREF(c);
4233 Py_XDECREF(temp);
4234 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00004235}
4236
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004237static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00004238long_invert(PyLongObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00004239{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004240 /* Implement ~x as -(x+1) */
4241 PyLongObject *x;
Victor Stinner45e8e2f2014-05-14 17:24:35 +02004242 if (Py_ABS(Py_SIZE(v)) <=1)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004243 return PyLong_FromLong(-(MEDIUM_VALUE(v)+1));
Serhiy Storchakaba85d692017-03-30 09:09:41 +03004244 x = (PyLongObject *) long_add(v, (PyLongObject *)_PyLong_One);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004245 if (x == NULL)
4246 return NULL;
Mark Dickinson583c6e82016-08-29 16:40:29 +01004247 _PyLong_Negate(&x);
4248 /* No need for maybe_small_long here, since any small
4249 longs will have been caught in the Py_SIZE <= 1 fast path. */
4250 return (PyObject *)x;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00004251}
4252
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004253static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00004254long_neg(PyLongObject *v)
Guido van Rossumc6913e71991-11-19 20:26:46 +00004255{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004256 PyLongObject *z;
Victor Stinner45e8e2f2014-05-14 17:24:35 +02004257 if (Py_ABS(Py_SIZE(v)) <= 1)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004258 return PyLong_FromLong(-MEDIUM_VALUE(v));
4259 z = (PyLongObject *)_PyLong_Copy(v);
4260 if (z != NULL)
4261 Py_SIZE(z) = -(Py_SIZE(v));
4262 return (PyObject *)z;
Guido van Rossumc6913e71991-11-19 20:26:46 +00004263}
4264
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004265static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00004266long_abs(PyLongObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00004267{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004268 if (Py_SIZE(v) < 0)
4269 return long_neg(v);
4270 else
4271 return long_long((PyObject *)v);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00004272}
4273
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00004274static int
Jack Diederich4dafcc42006-11-28 19:15:13 +00004275long_bool(PyLongObject *v)
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00004276{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004277 return Py_SIZE(v) != 0;
Guido van Rossumc6913e71991-11-19 20:26:46 +00004278}
4279
Serhiy Storchaka918403c2017-03-30 09:47:07 +03004280/* wordshift, remshift = divmod(shiftby, PyLong_SHIFT) */
4281static int
4282divmod_shift(PyLongObject *shiftby, Py_ssize_t *wordshift, digit *remshift)
4283{
4284 assert(PyLong_Check((PyObject *)shiftby));
4285 assert(Py_SIZE(shiftby) >= 0);
4286 Py_ssize_t lshiftby = PyLong_AsSsize_t((PyObject *)shiftby);
4287 if (lshiftby >= 0) {
4288 *wordshift = lshiftby / PyLong_SHIFT;
4289 *remshift = lshiftby % PyLong_SHIFT;
4290 return 0;
4291 }
4292 /* PyLong_Check(shiftby) is true and Py_SIZE(shiftby) >= 0, so it must
4293 be that PyLong_AsSsize_t raised an OverflowError. */
4294 assert(PyErr_ExceptionMatches(PyExc_OverflowError));
4295 PyErr_Clear();
4296 PyLongObject *wordshift_obj = divrem1(shiftby, PyLong_SHIFT, remshift);
4297 if (wordshift_obj == NULL) {
4298 return -1;
4299 }
4300 *wordshift = PyLong_AsSsize_t((PyObject *)wordshift_obj);
4301 Py_DECREF(wordshift_obj);
4302 if (*wordshift >= 0 && *wordshift < PY_SSIZE_T_MAX / (Py_ssize_t)sizeof(digit)) {
4303 return 0;
4304 }
4305 PyErr_Clear();
4306 /* Clip the value. With such large wordshift the right shift
4307 returns 0 and the left shift raises an error in _PyLong_New(). */
4308 *wordshift = PY_SSIZE_T_MAX / sizeof(digit);
4309 *remshift = 0;
4310 return 0;
4311}
4312
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004313static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00004314long_rshift(PyLongObject *a, PyLongObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00004315{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004316 PyLongObject *z = NULL;
Serhiy Storchaka918403c2017-03-30 09:47:07 +03004317 Py_ssize_t newsize, wordshift, hishift, i, j;
4318 digit loshift, lomask, himask;
Tim Peters5af4e6c2002-08-12 02:31:19 +00004319
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004320 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00004321
Serhiy Storchaka918403c2017-03-30 09:47:07 +03004322 if (Py_SIZE(b) < 0) {
4323 PyErr_SetString(PyExc_ValueError,
4324 "negative shift count");
4325 return NULL;
4326 }
4327
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004328 if (Py_SIZE(a) < 0) {
4329 /* Right shifting negative numbers is harder */
4330 PyLongObject *a1, *a2;
4331 a1 = (PyLongObject *) long_invert(a);
4332 if (a1 == NULL)
Mark Dickinson92ca5352016-09-17 17:50:50 +01004333 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004334 a2 = (PyLongObject *) long_rshift(a1, b);
4335 Py_DECREF(a1);
4336 if (a2 == NULL)
Mark Dickinson92ca5352016-09-17 17:50:50 +01004337 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004338 z = (PyLongObject *) long_invert(a2);
4339 Py_DECREF(a2);
4340 }
4341 else {
Serhiy Storchaka918403c2017-03-30 09:47:07 +03004342 if (divmod_shift(b, &wordshift, &loshift) < 0)
Mark Dickinson92ca5352016-09-17 17:50:50 +01004343 return NULL;
Serhiy Storchaka918403c2017-03-30 09:47:07 +03004344 newsize = Py_SIZE(a) - wordshift;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004345 if (newsize <= 0)
4346 return PyLong_FromLong(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004347 hishift = PyLong_SHIFT - loshift;
4348 lomask = ((digit)1 << hishift) - 1;
4349 himask = PyLong_MASK ^ lomask;
4350 z = _PyLong_New(newsize);
4351 if (z == NULL)
Mark Dickinson92ca5352016-09-17 17:50:50 +01004352 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004353 for (i = 0, j = wordshift; i < newsize; i++, j++) {
4354 z->ob_digit[i] = (a->ob_digit[j] >> loshift) & lomask;
4355 if (i+1 < newsize)
Mark Dickinson22b20182010-05-10 21:27:53 +00004356 z->ob_digit[i] |= (a->ob_digit[j+1] << hishift) & himask;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004357 }
Mark Dickinson92ca5352016-09-17 17:50:50 +01004358 z = maybe_small_long(long_normalize(z));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004359 }
Mark Dickinson92ca5352016-09-17 17:50:50 +01004360 return (PyObject *)z;
Guido van Rossumc6913e71991-11-19 20:26:46 +00004361}
4362
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004363static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00004364long_lshift(PyObject *v, PyObject *w)
Guido van Rossumc6913e71991-11-19 20:26:46 +00004365{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004366 /* This version due to Tim Peters */
4367 PyLongObject *a = (PyLongObject*)v;
4368 PyLongObject *b = (PyLongObject*)w;
4369 PyLongObject *z = NULL;
Serhiy Storchaka918403c2017-03-30 09:47:07 +03004370 Py_ssize_t oldsize, newsize, wordshift, i, j;
4371 digit remshift;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004372 twodigits accum;
Tim Peters5af4e6c2002-08-12 02:31:19 +00004373
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004374 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00004375
Serhiy Storchaka918403c2017-03-30 09:47:07 +03004376 if (Py_SIZE(b) < 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004377 PyErr_SetString(PyExc_ValueError, "negative shift count");
Victor Stinner8aed6f12013-07-17 22:31:17 +02004378 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004379 }
Mark Dickinson82a95272016-08-29 19:27:06 +01004380 if (Py_SIZE(a) == 0) {
4381 return PyLong_FromLong(0);
4382 }
4383
Serhiy Storchaka918403c2017-03-30 09:47:07 +03004384 if (divmod_shift(b, &wordshift, &remshift) < 0)
4385 return NULL;
Victor Stinner45e8e2f2014-05-14 17:24:35 +02004386 oldsize = Py_ABS(Py_SIZE(a));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004387 newsize = oldsize + wordshift;
4388 if (remshift)
4389 ++newsize;
4390 z = _PyLong_New(newsize);
4391 if (z == NULL)
Victor Stinner8aed6f12013-07-17 22:31:17 +02004392 return NULL;
4393 if (Py_SIZE(a) < 0) {
4394 assert(Py_REFCNT(z) == 1);
4395 Py_SIZE(z) = -Py_SIZE(z);
4396 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004397 for (i = 0; i < wordshift; i++)
4398 z->ob_digit[i] = 0;
4399 accum = 0;
4400 for (i = wordshift, j = 0; j < oldsize; i++, j++) {
4401 accum |= (twodigits)a->ob_digit[j] << remshift;
4402 z->ob_digit[i] = (digit)(accum & PyLong_MASK);
4403 accum >>= PyLong_SHIFT;
4404 }
4405 if (remshift)
4406 z->ob_digit[newsize-1] = (digit)accum;
4407 else
4408 assert(!accum);
4409 z = long_normalize(z);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004410 return (PyObject *) maybe_small_long(z);
Guido van Rossumc6913e71991-11-19 20:26:46 +00004411}
4412
Mark Dickinson27a87a22009-10-25 20:43:34 +00004413/* Compute two's complement of digit vector a[0:m], writing result to
4414 z[0:m]. The digit vector a need not be normalized, but should not
4415 be entirely zero. a and z may point to the same digit vector. */
4416
4417static void
4418v_complement(digit *z, digit *a, Py_ssize_t m)
4419{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004420 Py_ssize_t i;
4421 digit carry = 1;
4422 for (i = 0; i < m; ++i) {
4423 carry += a[i] ^ PyLong_MASK;
4424 z[i] = carry & PyLong_MASK;
4425 carry >>= PyLong_SHIFT;
4426 }
4427 assert(carry == 0);
Mark Dickinson27a87a22009-10-25 20:43:34 +00004428}
Guido van Rossum4c260ff1992-01-14 18:36:43 +00004429
4430/* Bitwise and/xor/or operations */
4431
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004432static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00004433long_bitwise(PyLongObject *a,
Benjamin Peterson513762f2012-12-26 16:43:33 -06004434 char op, /* '&', '|', '^' */
Mark Dickinson22b20182010-05-10 21:27:53 +00004435 PyLongObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00004436{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004437 int nega, negb, negz;
4438 Py_ssize_t size_a, size_b, size_z, i;
4439 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00004440
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004441 /* Bitwise operations for negative numbers operate as though
4442 on a two's complement representation. So convert arguments
4443 from sign-magnitude to two's complement, and convert the
4444 result back to sign-magnitude at the end. */
Mark Dickinson27a87a22009-10-25 20:43:34 +00004445
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004446 /* If a is negative, replace it by its two's complement. */
Victor Stinner45e8e2f2014-05-14 17:24:35 +02004447 size_a = Py_ABS(Py_SIZE(a));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004448 nega = Py_SIZE(a) < 0;
4449 if (nega) {
4450 z = _PyLong_New(size_a);
4451 if (z == NULL)
4452 return NULL;
4453 v_complement(z->ob_digit, a->ob_digit, size_a);
4454 a = z;
4455 }
4456 else
4457 /* Keep reference count consistent. */
4458 Py_INCREF(a);
Mark Dickinson27a87a22009-10-25 20:43:34 +00004459
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004460 /* Same for b. */
Victor Stinner45e8e2f2014-05-14 17:24:35 +02004461 size_b = Py_ABS(Py_SIZE(b));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004462 negb = Py_SIZE(b) < 0;
4463 if (negb) {
4464 z = _PyLong_New(size_b);
4465 if (z == NULL) {
4466 Py_DECREF(a);
4467 return NULL;
4468 }
4469 v_complement(z->ob_digit, b->ob_digit, size_b);
4470 b = z;
4471 }
4472 else
4473 Py_INCREF(b);
Tim Peters5af4e6c2002-08-12 02:31:19 +00004474
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004475 /* Swap a and b if necessary to ensure size_a >= size_b. */
4476 if (size_a < size_b) {
4477 z = a; a = b; b = z;
4478 size_z = size_a; size_a = size_b; size_b = size_z;
4479 negz = nega; nega = negb; negb = negz;
4480 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00004481
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004482 /* JRH: The original logic here was to allocate the result value (z)
4483 as the longer of the two operands. However, there are some cases
4484 where the result is guaranteed to be shorter than that: AND of two
4485 positives, OR of two negatives: use the shorter number. AND with
4486 mixed signs: use the positive number. OR with mixed signs: use the
4487 negative number.
4488 */
4489 switch (op) {
4490 case '^':
4491 negz = nega ^ negb;
4492 size_z = size_a;
4493 break;
4494 case '&':
4495 negz = nega & negb;
4496 size_z = negb ? size_a : size_b;
4497 break;
4498 case '|':
4499 negz = nega | negb;
4500 size_z = negb ? size_b : size_a;
4501 break;
4502 default:
4503 PyErr_BadArgument();
4504 return NULL;
4505 }
Guido van Rossumbd3a5271998-08-11 15:04:47 +00004506
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004507 /* We allow an extra digit if z is negative, to make sure that
4508 the final two's complement of z doesn't overflow. */
4509 z = _PyLong_New(size_z + negz);
4510 if (z == NULL) {
4511 Py_DECREF(a);
4512 Py_DECREF(b);
4513 return NULL;
4514 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00004515
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004516 /* Compute digits for overlap of a and b. */
4517 switch(op) {
4518 case '&':
4519 for (i = 0; i < size_b; ++i)
4520 z->ob_digit[i] = a->ob_digit[i] & b->ob_digit[i];
4521 break;
4522 case '|':
4523 for (i = 0; i < size_b; ++i)
4524 z->ob_digit[i] = a->ob_digit[i] | b->ob_digit[i];
4525 break;
4526 case '^':
4527 for (i = 0; i < size_b; ++i)
4528 z->ob_digit[i] = a->ob_digit[i] ^ b->ob_digit[i];
4529 break;
4530 default:
4531 PyErr_BadArgument();
4532 return NULL;
4533 }
Mark Dickinson27a87a22009-10-25 20:43:34 +00004534
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004535 /* Copy any remaining digits of a, inverting if necessary. */
4536 if (op == '^' && negb)
4537 for (; i < size_z; ++i)
4538 z->ob_digit[i] = a->ob_digit[i] ^ PyLong_MASK;
4539 else if (i < size_z)
4540 memcpy(&z->ob_digit[i], &a->ob_digit[i],
4541 (size_z-i)*sizeof(digit));
Mark Dickinson27a87a22009-10-25 20:43:34 +00004542
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004543 /* Complement result if negative. */
4544 if (negz) {
4545 Py_SIZE(z) = -(Py_SIZE(z));
4546 z->ob_digit[size_z] = PyLong_MASK;
4547 v_complement(z->ob_digit, z->ob_digit, size_z+1);
4548 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00004549
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004550 Py_DECREF(a);
4551 Py_DECREF(b);
4552 return (PyObject *)maybe_small_long(long_normalize(z));
Guido van Rossumc6913e71991-11-19 20:26:46 +00004553}
4554
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004555static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00004556long_and(PyObject *a, PyObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00004557{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004558 PyObject *c;
4559 CHECK_BINOP(a, b);
4560 c = long_bitwise((PyLongObject*)a, '&', (PyLongObject*)b);
4561 return c;
Guido van Rossumc6913e71991-11-19 20:26:46 +00004562}
4563
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004564static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00004565long_xor(PyObject *a, PyObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00004566{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004567 PyObject *c;
4568 CHECK_BINOP(a, b);
4569 c = long_bitwise((PyLongObject*)a, '^', (PyLongObject*)b);
4570 return c;
Guido van Rossumc6913e71991-11-19 20:26:46 +00004571}
4572
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004573static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00004574long_or(PyObject *a, PyObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00004575{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004576 PyObject *c;
4577 CHECK_BINOP(a, b);
4578 c = long_bitwise((PyLongObject*)a, '|', (PyLongObject*)b);
4579 return c;
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00004580}
4581
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004582static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00004583long_long(PyObject *v)
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004584{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004585 if (PyLong_CheckExact(v))
4586 Py_INCREF(v);
4587 else
4588 v = _PyLong_Copy((PyLongObject *)v);
4589 return v;
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004590}
4591
Serhiy Storchaka48e47aa2015-05-13 00:19:51 +03004592PyObject *
4593_PyLong_GCD(PyObject *aarg, PyObject *barg)
4594{
4595 PyLongObject *a, *b, *c = NULL, *d = NULL, *r;
4596 stwodigits x, y, q, s, t, c_carry, d_carry;
4597 stwodigits A, B, C, D, T;
4598 int nbits, k;
4599 Py_ssize_t size_a, size_b, alloc_a, alloc_b;
4600 digit *a_digit, *b_digit, *c_digit, *d_digit, *a_end, *b_end;
4601
4602 a = (PyLongObject *)aarg;
4603 b = (PyLongObject *)barg;
4604 size_a = Py_SIZE(a);
4605 size_b = Py_SIZE(b);
4606 if (-2 <= size_a && size_a <= 2 && -2 <= size_b && size_b <= 2) {
4607 Py_INCREF(a);
4608 Py_INCREF(b);
4609 goto simple;
4610 }
4611
4612 /* Initial reduction: make sure that 0 <= b <= a. */
4613 a = (PyLongObject *)long_abs(a);
4614 if (a == NULL)
4615 return NULL;
4616 b = (PyLongObject *)long_abs(b);
4617 if (b == NULL) {
4618 Py_DECREF(a);
4619 return NULL;
4620 }
4621 if (long_compare(a, b) < 0) {
4622 r = a;
4623 a = b;
4624 b = r;
4625 }
4626 /* We now own references to a and b */
4627
4628 alloc_a = Py_SIZE(a);
4629 alloc_b = Py_SIZE(b);
4630 /* reduce until a fits into 2 digits */
4631 while ((size_a = Py_SIZE(a)) > 2) {
4632 nbits = bits_in_digit(a->ob_digit[size_a-1]);
4633 /* extract top 2*PyLong_SHIFT bits of a into x, along with
4634 corresponding bits of b into y */
4635 size_b = Py_SIZE(b);
4636 assert(size_b <= size_a);
4637 if (size_b == 0) {
4638 if (size_a < alloc_a) {
4639 r = (PyLongObject *)_PyLong_Copy(a);
4640 Py_DECREF(a);
4641 }
4642 else
4643 r = a;
4644 Py_DECREF(b);
4645 Py_XDECREF(c);
4646 Py_XDECREF(d);
4647 return (PyObject *)r;
4648 }
4649 x = (((twodigits)a->ob_digit[size_a-1] << (2*PyLong_SHIFT-nbits)) |
4650 ((twodigits)a->ob_digit[size_a-2] << (PyLong_SHIFT-nbits)) |
4651 (a->ob_digit[size_a-3] >> nbits));
4652
4653 y = ((size_b >= size_a - 2 ? b->ob_digit[size_a-3] >> nbits : 0) |
4654 (size_b >= size_a - 1 ? (twodigits)b->ob_digit[size_a-2] << (PyLong_SHIFT-nbits) : 0) |
4655 (size_b >= size_a ? (twodigits)b->ob_digit[size_a-1] << (2*PyLong_SHIFT-nbits) : 0));
4656
4657 /* inner loop of Lehmer's algorithm; A, B, C, D never grow
4658 larger than PyLong_MASK during the algorithm. */
4659 A = 1; B = 0; C = 0; D = 1;
4660 for (k=0;; k++) {
4661 if (y-C == 0)
4662 break;
4663 q = (x+(A-1))/(y-C);
4664 s = B+q*D;
4665 t = x-q*y;
4666 if (s > t)
4667 break;
4668 x = y; y = t;
4669 t = A+q*C; A = D; B = C; C = s; D = t;
4670 }
4671
4672 if (k == 0) {
4673 /* no progress; do a Euclidean step */
4674 if (l_divmod(a, b, NULL, &r) < 0)
4675 goto error;
4676 Py_DECREF(a);
4677 a = b;
4678 b = r;
4679 alloc_a = alloc_b;
4680 alloc_b = Py_SIZE(b);
4681 continue;
4682 }
4683
4684 /*
4685 a, b = A*b-B*a, D*a-C*b if k is odd
4686 a, b = A*a-B*b, D*b-C*a if k is even
4687 */
4688 if (k&1) {
4689 T = -A; A = -B; B = T;
4690 T = -C; C = -D; D = T;
4691 }
4692 if (c != NULL)
4693 Py_SIZE(c) = size_a;
4694 else if (Py_REFCNT(a) == 1) {
4695 Py_INCREF(a);
4696 c = a;
4697 }
4698 else {
4699 alloc_a = size_a;
4700 c = _PyLong_New(size_a);
4701 if (c == NULL)
4702 goto error;
4703 }
4704
4705 if (d != NULL)
4706 Py_SIZE(d) = size_a;
4707 else if (Py_REFCNT(b) == 1 && size_a <= alloc_b) {
4708 Py_INCREF(b);
4709 d = b;
4710 Py_SIZE(d) = size_a;
4711 }
4712 else {
4713 alloc_b = size_a;
4714 d = _PyLong_New(size_a);
4715 if (d == NULL)
4716 goto error;
4717 }
4718 a_end = a->ob_digit + size_a;
4719 b_end = b->ob_digit + size_b;
4720
4721 /* compute new a and new b in parallel */
4722 a_digit = a->ob_digit;
4723 b_digit = b->ob_digit;
4724 c_digit = c->ob_digit;
4725 d_digit = d->ob_digit;
4726 c_carry = 0;
4727 d_carry = 0;
4728 while (b_digit < b_end) {
4729 c_carry += (A * *a_digit) - (B * *b_digit);
4730 d_carry += (D * *b_digit++) - (C * *a_digit++);
4731 *c_digit++ = (digit)(c_carry & PyLong_MASK);
4732 *d_digit++ = (digit)(d_carry & PyLong_MASK);
4733 c_carry >>= PyLong_SHIFT;
4734 d_carry >>= PyLong_SHIFT;
4735 }
4736 while (a_digit < a_end) {
4737 c_carry += A * *a_digit;
4738 d_carry -= C * *a_digit++;
4739 *c_digit++ = (digit)(c_carry & PyLong_MASK);
4740 *d_digit++ = (digit)(d_carry & PyLong_MASK);
4741 c_carry >>= PyLong_SHIFT;
4742 d_carry >>= PyLong_SHIFT;
4743 }
4744 assert(c_carry == 0);
4745 assert(d_carry == 0);
4746
4747 Py_INCREF(c);
4748 Py_INCREF(d);
4749 Py_DECREF(a);
4750 Py_DECREF(b);
4751 a = long_normalize(c);
4752 b = long_normalize(d);
4753 }
4754 Py_XDECREF(c);
4755 Py_XDECREF(d);
4756
4757simple:
4758 assert(Py_REFCNT(a) > 0);
4759 assert(Py_REFCNT(b) > 0);
Victor Stinner5783fd22015-09-19 13:39:03 +02004760/* Issue #24999: use two shifts instead of ">> 2*PyLong_SHIFT" to avoid
4761 undefined behaviour when LONG_MAX type is smaller than 60 bits */
4762#if LONG_MAX >> PyLong_SHIFT >> PyLong_SHIFT
Serhiy Storchaka48e47aa2015-05-13 00:19:51 +03004763 /* a fits into a long, so b must too */
4764 x = PyLong_AsLong((PyObject *)a);
4765 y = PyLong_AsLong((PyObject *)b);
Benjamin Petersond953f8e2016-09-06 10:51:19 -07004766#elif PY_LLONG_MAX >> PyLong_SHIFT >> PyLong_SHIFT
Serhiy Storchaka48e47aa2015-05-13 00:19:51 +03004767 x = PyLong_AsLongLong((PyObject *)a);
4768 y = PyLong_AsLongLong((PyObject *)b);
4769#else
4770# error "_PyLong_GCD"
4771#endif
4772 x = Py_ABS(x);
4773 y = Py_ABS(y);
4774 Py_DECREF(a);
4775 Py_DECREF(b);
4776
4777 /* usual Euclidean algorithm for longs */
4778 while (y != 0) {
4779 t = y;
4780 y = x % y;
4781 x = t;
4782 }
Victor Stinner5783fd22015-09-19 13:39:03 +02004783#if LONG_MAX >> PyLong_SHIFT >> PyLong_SHIFT
Serhiy Storchaka48e47aa2015-05-13 00:19:51 +03004784 return PyLong_FromLong(x);
Benjamin Petersond953f8e2016-09-06 10:51:19 -07004785#elif PY_LLONG_MAX >> PyLong_SHIFT >> PyLong_SHIFT
Serhiy Storchaka48e47aa2015-05-13 00:19:51 +03004786 return PyLong_FromLongLong(x);
4787#else
4788# error "_PyLong_GCD"
4789#endif
4790
4791error:
4792 Py_DECREF(a);
4793 Py_DECREF(b);
4794 Py_XDECREF(c);
4795 Py_XDECREF(d);
4796 return NULL;
4797}
4798
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004799static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00004800long_float(PyObject *v)
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004801{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004802 double result;
4803 result = PyLong_AsDouble(v);
4804 if (result == -1.0 && PyErr_Occurred())
4805 return NULL;
4806 return PyFloat_FromDouble(result);
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004807}
4808
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004809static PyObject *
Serhiy Storchaka18b250f2017-03-19 08:51:07 +02004810long_subtype_new(PyTypeObject *type, PyObject *x, PyObject *obase);
4811
4812/*[clinic input]
4813@classmethod
4814int.__new__ as long_new
4815 x: object(c_default="NULL") = 0
4816 /
4817 base as obase: object(c_default="NULL") = 10
4818[clinic start generated code]*/
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004819
Tim Peters6d6c1a32001-08-02 04:15:00 +00004820static PyObject *
Serhiy Storchaka18b250f2017-03-19 08:51:07 +02004821long_new_impl(PyTypeObject *type, PyObject *x, PyObject *obase)
4822/*[clinic end generated code: output=e47cfe777ab0f24c input=81c98f418af9eb6f]*/
Tim Peters6d6c1a32001-08-02 04:15:00 +00004823{
Gregory P. Smitha689e522012-12-25 22:38:32 -08004824 Py_ssize_t base;
Tim Peters6d6c1a32001-08-02 04:15:00 +00004825
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004826 if (type != &PyLong_Type)
Serhiy Storchaka18b250f2017-03-19 08:51:07 +02004827 return long_subtype_new(type, x, obase); /* Wimp out */
Serhiy Storchaka0b386d52012-12-28 09:42:11 +02004828 if (x == NULL) {
4829 if (obase != NULL) {
4830 PyErr_SetString(PyExc_TypeError,
4831 "int() missing string argument");
4832 return NULL;
4833 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004834 return PyLong_FromLong(0L);
Serhiy Storchaka0b386d52012-12-28 09:42:11 +02004835 }
Mark Dickinsonf9a5a8e2010-05-26 20:07:58 +00004836 if (obase == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004837 return PyNumber_Long(x);
Mark Dickinsonf9a5a8e2010-05-26 20:07:58 +00004838
Gregory P. Smitha689e522012-12-25 22:38:32 -08004839 base = PyNumber_AsSsize_t(obase, NULL);
Mark Dickinsonf9a5a8e2010-05-26 20:07:58 +00004840 if (base == -1 && PyErr_Occurred())
4841 return NULL;
Gregory P. Smitha689e522012-12-25 22:38:32 -08004842 if ((base != 0 && base < 2) || base > 36) {
Mark Dickinsonf9a5a8e2010-05-26 20:07:58 +00004843 PyErr_SetString(PyExc_ValueError,
Serhiy Storchaka0b386d52012-12-28 09:42:11 +02004844 "int() base must be >= 2 and <= 36");
Mark Dickinsonf9a5a8e2010-05-26 20:07:58 +00004845 return NULL;
4846 }
4847
4848 if (PyUnicode_Check(x))
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02004849 return PyLong_FromUnicodeObject(x, (int)base);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004850 else if (PyByteArray_Check(x) || PyBytes_Check(x)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004851 char *string;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004852 if (PyByteArray_Check(x))
4853 string = PyByteArray_AS_STRING(x);
4854 else
4855 string = PyBytes_AS_STRING(x);
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03004856 return _PyLong_FromBytes(string, Py_SIZE(x), (int)base);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004857 }
4858 else {
4859 PyErr_SetString(PyExc_TypeError,
Mark Dickinson22b20182010-05-10 21:27:53 +00004860 "int() can't convert non-string with explicit base");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004861 return NULL;
4862 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00004863}
4864
Serhiy Storchaka95949422013-08-27 19:40:23 +03004865/* Wimpy, slow approach to tp_new calls for subtypes of int:
4866 first create a regular int from whatever arguments we got,
Guido van Rossumbef14172001-08-29 15:47:46 +00004867 then allocate a subtype instance and initialize it from
Serhiy Storchaka95949422013-08-27 19:40:23 +03004868 the regular int. The regular int is then thrown away.
Guido van Rossumbef14172001-08-29 15:47:46 +00004869*/
4870static PyObject *
Serhiy Storchaka18b250f2017-03-19 08:51:07 +02004871long_subtype_new(PyTypeObject *type, PyObject *x, PyObject *obase)
Guido van Rossumbef14172001-08-29 15:47:46 +00004872{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004873 PyLongObject *tmp, *newobj;
4874 Py_ssize_t i, n;
Guido van Rossumbef14172001-08-29 15:47:46 +00004875
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004876 assert(PyType_IsSubtype(type, &PyLong_Type));
Serhiy Storchaka18b250f2017-03-19 08:51:07 +02004877 tmp = (PyLongObject *)long_new_impl(&PyLong_Type, x, obase);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004878 if (tmp == NULL)
4879 return NULL;
Serhiy Storchaka15095802015-11-25 15:47:01 +02004880 assert(PyLong_Check(tmp));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004881 n = Py_SIZE(tmp);
4882 if (n < 0)
4883 n = -n;
4884 newobj = (PyLongObject *)type->tp_alloc(type, n);
4885 if (newobj == NULL) {
4886 Py_DECREF(tmp);
4887 return NULL;
4888 }
4889 assert(PyLong_Check(newobj));
4890 Py_SIZE(newobj) = Py_SIZE(tmp);
4891 for (i = 0; i < n; i++)
4892 newobj->ob_digit[i] = tmp->ob_digit[i];
4893 Py_DECREF(tmp);
4894 return (PyObject *)newobj;
Guido van Rossumbef14172001-08-29 15:47:46 +00004895}
4896
Serhiy Storchaka495e8802017-02-01 23:12:20 +02004897/*[clinic input]
4898int.__getnewargs__
4899[clinic start generated code]*/
4900
Guido van Rossum5d9113d2003-01-29 17:58:45 +00004901static PyObject *
Serhiy Storchaka495e8802017-02-01 23:12:20 +02004902int___getnewargs___impl(PyObject *self)
4903/*[clinic end generated code: output=839a49de3f00b61b input=5904770ab1fb8c75]*/
Guido van Rossum5d9113d2003-01-29 17:58:45 +00004904{
Serhiy Storchaka495e8802017-02-01 23:12:20 +02004905 return Py_BuildValue("(N)", _PyLong_Copy((PyLongObject *)self));
Guido van Rossum5d9113d2003-01-29 17:58:45 +00004906}
4907
Guido van Rossumb43daf72007-08-01 18:08:08 +00004908static PyObject *
Mark Dickinson6bf19002009-05-02 17:57:52 +00004909long_get0(PyLongObject *v, void *context) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004910 return PyLong_FromLong(0L);
Mark Dickinson6bf19002009-05-02 17:57:52 +00004911}
4912
4913static PyObject *
4914long_get1(PyLongObject *v, void *context) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004915 return PyLong_FromLong(1L);
Guido van Rossumb43daf72007-08-01 18:08:08 +00004916}
4917
Serhiy Storchaka495e8802017-02-01 23:12:20 +02004918/*[clinic input]
4919int.__format__
4920
4921 format_spec: unicode
4922 /
4923[clinic start generated code]*/
4924
Guido van Rossum2fa33db2007-08-23 22:07:24 +00004925static PyObject *
Serhiy Storchaka495e8802017-02-01 23:12:20 +02004926int___format___impl(PyObject *self, PyObject *format_spec)
4927/*[clinic end generated code: output=b4929dee9ae18689 input=e31944a9b3e428b7]*/
Eric Smith8c663262007-08-25 02:26:07 +00004928{
Victor Stinnerd3f08822012-05-29 12:57:52 +02004929 _PyUnicodeWriter writer;
4930 int ret;
Eric Smith4a7d76d2008-05-30 18:10:19 +00004931
Victor Stinner8f674cc2013-04-17 23:02:17 +02004932 _PyUnicodeWriter_Init(&writer);
Victor Stinnerd3f08822012-05-29 12:57:52 +02004933 ret = _PyLong_FormatAdvancedWriter(
4934 &writer,
4935 self,
4936 format_spec, 0, PyUnicode_GET_LENGTH(format_spec));
4937 if (ret == -1) {
4938 _PyUnicodeWriter_Dealloc(&writer);
4939 return NULL;
4940 }
4941 return _PyUnicodeWriter_Finish(&writer);
Eric Smith8c663262007-08-25 02:26:07 +00004942}
4943
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004944/* Return a pair (q, r) such that a = b * q + r, and
4945 abs(r) <= abs(b)/2, with equality possible only if q is even.
4946 In other words, q == a / b, rounded to the nearest integer using
4947 round-half-to-even. */
4948
4949PyObject *
Mark Dickinsonfa68a612010-06-07 18:47:09 +00004950_PyLong_DivmodNear(PyObject *a, PyObject *b)
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004951{
4952 PyLongObject *quo = NULL, *rem = NULL;
Serhiy Storchakaba85d692017-03-30 09:09:41 +03004953 PyObject *twice_rem, *result, *temp;
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004954 int cmp, quo_is_odd, quo_is_neg;
4955
4956 /* Equivalent Python code:
4957
4958 def divmod_near(a, b):
4959 q, r = divmod(a, b)
4960 # round up if either r / b > 0.5, or r / b == 0.5 and q is odd.
4961 # The expression r / b > 0.5 is equivalent to 2 * r > b if b is
4962 # positive, 2 * r < b if b negative.
4963 greater_than_half = 2*r > b if b > 0 else 2*r < b
4964 exactly_half = 2*r == b
4965 if greater_than_half or exactly_half and q % 2 == 1:
4966 q += 1
4967 r -= b
4968 return q, r
4969
4970 */
4971 if (!PyLong_Check(a) || !PyLong_Check(b)) {
4972 PyErr_SetString(PyExc_TypeError,
4973 "non-integer arguments in division");
4974 return NULL;
4975 }
4976
4977 /* Do a and b have different signs? If so, quotient is negative. */
4978 quo_is_neg = (Py_SIZE(a) < 0) != (Py_SIZE(b) < 0);
4979
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004980 if (long_divrem((PyLongObject*)a, (PyLongObject*)b, &quo, &rem) < 0)
4981 goto error;
4982
4983 /* compare twice the remainder with the divisor, to see
4984 if we need to adjust the quotient and remainder */
Serhiy Storchakaba85d692017-03-30 09:09:41 +03004985 twice_rem = long_lshift((PyObject *)rem, _PyLong_One);
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004986 if (twice_rem == NULL)
4987 goto error;
4988 if (quo_is_neg) {
4989 temp = long_neg((PyLongObject*)twice_rem);
4990 Py_DECREF(twice_rem);
4991 twice_rem = temp;
4992 if (twice_rem == NULL)
4993 goto error;
4994 }
4995 cmp = long_compare((PyLongObject *)twice_rem, (PyLongObject *)b);
4996 Py_DECREF(twice_rem);
4997
4998 quo_is_odd = Py_SIZE(quo) != 0 && ((quo->ob_digit[0] & 1) != 0);
4999 if ((Py_SIZE(b) < 0 ? cmp < 0 : cmp > 0) || (cmp == 0 && quo_is_odd)) {
5000 /* fix up quotient */
5001 if (quo_is_neg)
Serhiy Storchakaba85d692017-03-30 09:09:41 +03005002 temp = long_sub(quo, (PyLongObject *)_PyLong_One);
Mark Dickinson7f1bf802010-05-26 16:02:59 +00005003 else
Serhiy Storchakaba85d692017-03-30 09:09:41 +03005004 temp = long_add(quo, (PyLongObject *)_PyLong_One);
Mark Dickinson7f1bf802010-05-26 16:02:59 +00005005 Py_DECREF(quo);
5006 quo = (PyLongObject *)temp;
5007 if (quo == NULL)
5008 goto error;
5009 /* and remainder */
5010 if (quo_is_neg)
5011 temp = long_add(rem, (PyLongObject *)b);
5012 else
5013 temp = long_sub(rem, (PyLongObject *)b);
5014 Py_DECREF(rem);
5015 rem = (PyLongObject *)temp;
5016 if (rem == NULL)
5017 goto error;
5018 }
5019
5020 result = PyTuple_New(2);
5021 if (result == NULL)
5022 goto error;
5023
5024 /* PyTuple_SET_ITEM steals references */
5025 PyTuple_SET_ITEM(result, 0, (PyObject *)quo);
5026 PyTuple_SET_ITEM(result, 1, (PyObject *)rem);
Mark Dickinson7f1bf802010-05-26 16:02:59 +00005027 return result;
5028
5029 error:
5030 Py_XDECREF(quo);
5031 Py_XDECREF(rem);
Mark Dickinson7f1bf802010-05-26 16:02:59 +00005032 return NULL;
5033}
5034
Eric Smith8c663262007-08-25 02:26:07 +00005035static PyObject *
Guido van Rossum2fa33db2007-08-23 22:07:24 +00005036long_round(PyObject *self, PyObject *args)
5037{
Mark Dickinson7f1bf802010-05-26 16:02:59 +00005038 PyObject *o_ndigits=NULL, *temp, *result, *ndigits;
Guido van Rossum2fa33db2007-08-23 22:07:24 +00005039
Mark Dickinson7f1bf802010-05-26 16:02:59 +00005040 /* To round an integer m to the nearest 10**n (n positive), we make use of
5041 * the divmod_near operation, defined by:
5042 *
5043 * divmod_near(a, b) = (q, r)
5044 *
5045 * where q is the nearest integer to the quotient a / b (the
5046 * nearest even integer in the case of a tie) and r == a - q * b.
5047 * Hence q * b = a - r is the nearest multiple of b to a,
5048 * preferring even multiples in the case of a tie.
5049 *
5050 * So the nearest multiple of 10**n to m is:
5051 *
5052 * m - divmod_near(m, 10**n)[1].
5053 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005054 if (!PyArg_ParseTuple(args, "|O", &o_ndigits))
5055 return NULL;
5056 if (o_ndigits == NULL)
5057 return long_long(self);
Guido van Rossum2fa33db2007-08-23 22:07:24 +00005058
Mark Dickinson7f1bf802010-05-26 16:02:59 +00005059 ndigits = PyNumber_Index(o_ndigits);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005060 if (ndigits == NULL)
5061 return NULL;
Mark Dickinson1124e712009-01-28 21:25:58 +00005062
Mark Dickinson7f1bf802010-05-26 16:02:59 +00005063 /* if ndigits >= 0 then no rounding is necessary; return self unchanged */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005064 if (Py_SIZE(ndigits) >= 0) {
5065 Py_DECREF(ndigits);
5066 return long_long(self);
5067 }
Mark Dickinson1124e712009-01-28 21:25:58 +00005068
Mark Dickinson7f1bf802010-05-26 16:02:59 +00005069 /* result = self - divmod_near(self, 10 ** -ndigits)[1] */
5070 temp = long_neg((PyLongObject*)ndigits);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005071 Py_DECREF(ndigits);
Mark Dickinson7f1bf802010-05-26 16:02:59 +00005072 ndigits = temp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005073 if (ndigits == NULL)
Mark Dickinson7f1bf802010-05-26 16:02:59 +00005074 return NULL;
Mark Dickinson1124e712009-01-28 21:25:58 +00005075
Mark Dickinson7f1bf802010-05-26 16:02:59 +00005076 result = PyLong_FromLong(10L);
5077 if (result == NULL) {
5078 Py_DECREF(ndigits);
5079 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005080 }
Mark Dickinson1124e712009-01-28 21:25:58 +00005081
Mark Dickinson7f1bf802010-05-26 16:02:59 +00005082 temp = long_pow(result, ndigits, Py_None);
5083 Py_DECREF(ndigits);
5084 Py_DECREF(result);
5085 result = temp;
5086 if (result == NULL)
5087 return NULL;
5088
Mark Dickinsonfa68a612010-06-07 18:47:09 +00005089 temp = _PyLong_DivmodNear(self, result);
Mark Dickinson7f1bf802010-05-26 16:02:59 +00005090 Py_DECREF(result);
5091 result = temp;
5092 if (result == NULL)
5093 return NULL;
5094
5095 temp = long_sub((PyLongObject *)self,
5096 (PyLongObject *)PyTuple_GET_ITEM(result, 1));
5097 Py_DECREF(result);
5098 result = temp;
5099
5100 return result;
Guido van Rossum2fa33db2007-08-23 22:07:24 +00005101}
5102
Serhiy Storchaka495e8802017-02-01 23:12:20 +02005103/*[clinic input]
5104int.__sizeof__ -> Py_ssize_t
5105
5106Returns size in memory, in bytes.
5107[clinic start generated code]*/
5108
5109static Py_ssize_t
5110int___sizeof___impl(PyObject *self)
5111/*[clinic end generated code: output=3303f008eaa6a0a5 input=9b51620c76fc4507]*/
Martin v. Löwis00709aa2008-06-04 14:18:43 +00005112{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005113 Py_ssize_t res;
Martin v. Löwis00709aa2008-06-04 14:18:43 +00005114
Serhiy Storchaka495e8802017-02-01 23:12:20 +02005115 res = offsetof(PyLongObject, ob_digit) + Py_ABS(Py_SIZE(self))*sizeof(digit);
5116 return res;
Martin v. Löwis00709aa2008-06-04 14:18:43 +00005117}
5118
Serhiy Storchaka495e8802017-02-01 23:12:20 +02005119/*[clinic input]
5120int.bit_length
5121
5122Number of bits necessary to represent self in binary.
5123
5124>>> bin(37)
5125'0b100101'
5126>>> (37).bit_length()
51276
5128[clinic start generated code]*/
5129
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00005130static PyObject *
Serhiy Storchaka495e8802017-02-01 23:12:20 +02005131int_bit_length_impl(PyObject *self)
5132/*[clinic end generated code: output=fc1977c9353d6a59 input=e4eb7a587e849a32]*/
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00005133{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005134 PyLongObject *result, *x, *y;
Serhiy Storchakab2e64f92016-11-08 20:34:22 +02005135 Py_ssize_t ndigits;
5136 int msd_bits;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005137 digit msd;
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00005138
Serhiy Storchaka495e8802017-02-01 23:12:20 +02005139 assert(self != NULL);
5140 assert(PyLong_Check(self));
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00005141
Serhiy Storchaka495e8802017-02-01 23:12:20 +02005142 ndigits = Py_ABS(Py_SIZE(self));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005143 if (ndigits == 0)
5144 return PyLong_FromLong(0);
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00005145
Serhiy Storchaka495e8802017-02-01 23:12:20 +02005146 msd = ((PyLongObject *)self)->ob_digit[ndigits-1];
Serhiy Storchakab2e64f92016-11-08 20:34:22 +02005147 msd_bits = bits_in_digit(msd);
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00005148
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005149 if (ndigits <= PY_SSIZE_T_MAX/PyLong_SHIFT)
5150 return PyLong_FromSsize_t((ndigits-1)*PyLong_SHIFT + msd_bits);
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00005151
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005152 /* expression above may overflow; use Python integers instead */
5153 result = (PyLongObject *)PyLong_FromSsize_t(ndigits - 1);
5154 if (result == NULL)
5155 return NULL;
5156 x = (PyLongObject *)PyLong_FromLong(PyLong_SHIFT);
5157 if (x == NULL)
5158 goto error;
5159 y = (PyLongObject *)long_mul(result, x);
5160 Py_DECREF(x);
5161 if (y == NULL)
5162 goto error;
5163 Py_DECREF(result);
5164 result = y;
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00005165
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005166 x = (PyLongObject *)PyLong_FromLong((long)msd_bits);
5167 if (x == NULL)
5168 goto error;
5169 y = (PyLongObject *)long_add(result, x);
5170 Py_DECREF(x);
5171 if (y == NULL)
5172 goto error;
5173 Py_DECREF(result);
5174 result = y;
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00005175
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005176 return (PyObject *)result;
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00005177
Mark Dickinson22b20182010-05-10 21:27:53 +00005178 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005179 Py_DECREF(result);
5180 return NULL;
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00005181}
5182
Christian Heimes53876d92008-04-19 00:31:39 +00005183#if 0
5184static PyObject *
5185long_is_finite(PyObject *v)
5186{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005187 Py_RETURN_TRUE;
Christian Heimes53876d92008-04-19 00:31:39 +00005188}
5189#endif
5190
Serhiy Storchaka495e8802017-02-01 23:12:20 +02005191/*[clinic input]
5192int.to_bytes
5193
5194 length: Py_ssize_t
5195 Length of bytes object to use. An OverflowError is raised if the
5196 integer is not representable with the given number of bytes.
5197 byteorder: unicode
5198 The byte order used to represent the integer. If byteorder is 'big',
5199 the most significant byte is at the beginning of the byte array. If
5200 byteorder is 'little', the most significant byte is at the end of the
5201 byte array. To request the native byte order of the host system, use
5202 `sys.byteorder' as the byte order value.
5203 *
5204 signed as is_signed: bool = False
5205 Determines whether two's complement is used to represent the integer.
5206 If signed is False and a negative integer is given, an OverflowError
5207 is raised.
5208
5209Return an array of bytes representing an integer.
5210[clinic start generated code]*/
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005211
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005212static PyObject *
Serhiy Storchaka495e8802017-02-01 23:12:20 +02005213int_to_bytes_impl(PyObject *self, Py_ssize_t length, PyObject *byteorder,
5214 int is_signed)
5215/*[clinic end generated code: output=89c801df114050a3 input=ddac63f4c7bf414c]*/
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005216{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005217 int little_endian;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005218 PyObject *bytes;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005219
Serhiy Storchaka196a7bc2017-02-02 16:54:45 +02005220 if (_PyUnicode_EqualToASCIIId(byteorder, &PyId_little))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005221 little_endian = 1;
Serhiy Storchaka196a7bc2017-02-02 16:54:45 +02005222 else if (_PyUnicode_EqualToASCIIId(byteorder, &PyId_big))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005223 little_endian = 0;
5224 else {
5225 PyErr_SetString(PyExc_ValueError,
5226 "byteorder must be either 'little' or 'big'");
5227 return NULL;
5228 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005229
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005230 if (length < 0) {
5231 PyErr_SetString(PyExc_ValueError,
5232 "length argument must be non-negative");
5233 return NULL;
5234 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005235
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005236 bytes = PyBytes_FromStringAndSize(NULL, length);
5237 if (bytes == NULL)
5238 return NULL;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005239
Serhiy Storchaka495e8802017-02-01 23:12:20 +02005240 if (_PyLong_AsByteArray((PyLongObject *)self,
5241 (unsigned char *)PyBytes_AS_STRING(bytes),
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005242 length, little_endian, is_signed) < 0) {
5243 Py_DECREF(bytes);
5244 return NULL;
5245 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005246
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005247 return bytes;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005248}
5249
Serhiy Storchaka495e8802017-02-01 23:12:20 +02005250/*[clinic input]
5251@classmethod
5252int.from_bytes
5253
5254 bytes as bytes_obj: object
5255 Holds the array of bytes to convert. The argument must either
5256 support the buffer protocol or be an iterable object producing bytes.
5257 Bytes and bytearray are examples of built-in objects that support the
5258 buffer protocol.
5259 byteorder: unicode
5260 The byte order used to represent the integer. If byteorder is 'big',
5261 the most significant byte is at the beginning of the byte array. If
5262 byteorder is 'little', the most significant byte is at the end of the
5263 byte array. To request the native byte order of the host system, use
5264 `sys.byteorder' as the byte order value.
5265 *
5266 signed as is_signed: bool = False
5267 Indicates whether two's complement is used to represent the integer.
5268
5269Return the integer represented by the given array of bytes.
5270[clinic start generated code]*/
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005271
5272static PyObject *
Serhiy Storchaka495e8802017-02-01 23:12:20 +02005273int_from_bytes_impl(PyTypeObject *type, PyObject *bytes_obj,
5274 PyObject *byteorder, int is_signed)
5275/*[clinic end generated code: output=efc5d68e31f9314f input=cdf98332b6a821b0]*/
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005276{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005277 int little_endian;
Serhiy Storchaka495e8802017-02-01 23:12:20 +02005278 PyObject *long_obj, *bytes;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005279
Serhiy Storchaka196a7bc2017-02-02 16:54:45 +02005280 if (_PyUnicode_EqualToASCIIId(byteorder, &PyId_little))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005281 little_endian = 1;
Serhiy Storchaka196a7bc2017-02-02 16:54:45 +02005282 else if (_PyUnicode_EqualToASCIIId(byteorder, &PyId_big))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005283 little_endian = 0;
5284 else {
5285 PyErr_SetString(PyExc_ValueError,
5286 "byteorder must be either 'little' or 'big'");
5287 return NULL;
5288 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005289
Serhiy Storchaka495e8802017-02-01 23:12:20 +02005290 bytes = PyObject_Bytes(bytes_obj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005291 if (bytes == NULL)
5292 return NULL;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005293
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005294 long_obj = _PyLong_FromByteArray(
5295 (unsigned char *)PyBytes_AS_STRING(bytes), Py_SIZE(bytes),
5296 little_endian, is_signed);
5297 Py_DECREF(bytes);
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005298
Serhiy Storchakaea36c942016-05-12 10:37:58 +03005299 if (type != &PyLong_Type) {
Victor Stinnerde4ae3d2016-12-04 22:59:09 +01005300 Py_SETREF(long_obj, PyObject_CallFunctionObjArgs((PyObject *)type,
5301 long_obj, NULL));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005302 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005303
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005304 return long_obj;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005305}
5306
Guido van Rossum5d9113d2003-01-29 17:58:45 +00005307static PyMethodDef long_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005308 {"conjugate", (PyCFunction)long_long, METH_NOARGS,
5309 "Returns self, the complex conjugate of any int."},
Serhiy Storchaka495e8802017-02-01 23:12:20 +02005310 INT_BIT_LENGTH_METHODDEF
Christian Heimes53876d92008-04-19 00:31:39 +00005311#if 0
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005312 {"is_finite", (PyCFunction)long_is_finite, METH_NOARGS,
5313 "Returns always True."},
Christian Heimes53876d92008-04-19 00:31:39 +00005314#endif
Serhiy Storchaka495e8802017-02-01 23:12:20 +02005315 INT_TO_BYTES_METHODDEF
5316 INT_FROM_BYTES_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005317 {"__trunc__", (PyCFunction)long_long, METH_NOARGS,
5318 "Truncating an Integral returns itself."},
5319 {"__floor__", (PyCFunction)long_long, METH_NOARGS,
5320 "Flooring an Integral returns itself."},
5321 {"__ceil__", (PyCFunction)long_long, METH_NOARGS,
5322 "Ceiling of an Integral returns itself."},
5323 {"__round__", (PyCFunction)long_round, METH_VARARGS,
5324 "Rounding an Integral returns itself.\n"
5325 "Rounding with an ndigits argument also returns an integer."},
Serhiy Storchaka495e8802017-02-01 23:12:20 +02005326 INT___GETNEWARGS___METHODDEF
5327 INT___FORMAT___METHODDEF
5328 INT___SIZEOF___METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005329 {NULL, NULL} /* sentinel */
Guido van Rossum5d9113d2003-01-29 17:58:45 +00005330};
5331
Guido van Rossumb43daf72007-08-01 18:08:08 +00005332static PyGetSetDef long_getset[] = {
Mark Dickinson6bf19002009-05-02 17:57:52 +00005333 {"real",
Guido van Rossumb43daf72007-08-01 18:08:08 +00005334 (getter)long_long, (setter)NULL,
5335 "the real part of a complex number",
5336 NULL},
Mark Dickinson6bf19002009-05-02 17:57:52 +00005337 {"imag",
5338 (getter)long_get0, (setter)NULL,
Guido van Rossumb43daf72007-08-01 18:08:08 +00005339 "the imaginary part of a complex number",
Mark Dickinson6bf19002009-05-02 17:57:52 +00005340 NULL},
5341 {"numerator",
Guido van Rossumb43daf72007-08-01 18:08:08 +00005342 (getter)long_long, (setter)NULL,
5343 "the numerator of a rational number in lowest terms",
5344 NULL},
Mark Dickinson6bf19002009-05-02 17:57:52 +00005345 {"denominator",
5346 (getter)long_get1, (setter)NULL,
Guido van Rossumb43daf72007-08-01 18:08:08 +00005347 "the denominator of a rational number in lowest terms",
Mark Dickinson6bf19002009-05-02 17:57:52 +00005348 NULL},
Guido van Rossumb43daf72007-08-01 18:08:08 +00005349 {NULL} /* Sentinel */
5350};
5351
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00005352PyDoc_STRVAR(long_doc,
svelankar390a0962017-03-08 19:29:01 -05005353"int([x]) -> integer\n\
Chris Jerdonek83fe2e12012-10-07 14:48:36 -07005354int(x, base=10) -> integer\n\
Tim Peters6d6c1a32001-08-02 04:15:00 +00005355\n\
Chris Jerdonek83fe2e12012-10-07 14:48:36 -07005356Convert a number or string to an integer, or return 0 if no arguments\n\
5357are given. If x is a number, return x.__int__(). For floating point\n\
5358numbers, this truncates towards zero.\n\
5359\n\
5360If x is not a number or if base is given, then x must be a string,\n\
5361bytes, or bytearray instance representing an integer literal in the\n\
5362given base. The literal can be preceded by '+' or '-' and be surrounded\n\
5363by whitespace. The base defaults to 10. Valid bases are 0 and 2-36.\n\
5364Base 0 means to interpret the base from the string as an integer literal.\n\
5365>>> int('0b100', base=0)\n\
53664");
Tim Peters6d6c1a32001-08-02 04:15:00 +00005367
Guido van Rossumc0b618a1997-05-02 03:12:38 +00005368static PyNumberMethods long_as_number = {
Mark Dickinson22b20182010-05-10 21:27:53 +00005369 (binaryfunc)long_add, /*nb_add*/
5370 (binaryfunc)long_sub, /*nb_subtract*/
5371 (binaryfunc)long_mul, /*nb_multiply*/
5372 long_mod, /*nb_remainder*/
5373 long_divmod, /*nb_divmod*/
5374 long_pow, /*nb_power*/
5375 (unaryfunc)long_neg, /*nb_negative*/
5376 (unaryfunc)long_long, /*tp_positive*/
5377 (unaryfunc)long_abs, /*tp_absolute*/
5378 (inquiry)long_bool, /*tp_bool*/
5379 (unaryfunc)long_invert, /*nb_invert*/
5380 long_lshift, /*nb_lshift*/
5381 (binaryfunc)long_rshift, /*nb_rshift*/
5382 long_and, /*nb_and*/
5383 long_xor, /*nb_xor*/
5384 long_or, /*nb_or*/
5385 long_long, /*nb_int*/
5386 0, /*nb_reserved*/
5387 long_float, /*nb_float*/
5388 0, /* nb_inplace_add */
5389 0, /* nb_inplace_subtract */
5390 0, /* nb_inplace_multiply */
5391 0, /* nb_inplace_remainder */
5392 0, /* nb_inplace_power */
5393 0, /* nb_inplace_lshift */
5394 0, /* nb_inplace_rshift */
5395 0, /* nb_inplace_and */
5396 0, /* nb_inplace_xor */
5397 0, /* nb_inplace_or */
5398 long_div, /* nb_floor_divide */
5399 long_true_divide, /* nb_true_divide */
5400 0, /* nb_inplace_floor_divide */
5401 0, /* nb_inplace_true_divide */
5402 long_long, /* nb_index */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00005403};
5404
Guido van Rossumc0b618a1997-05-02 03:12:38 +00005405PyTypeObject PyLong_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005406 PyVarObject_HEAD_INIT(&PyType_Type, 0)
5407 "int", /* tp_name */
5408 offsetof(PyLongObject, ob_digit), /* tp_basicsize */
5409 sizeof(digit), /* tp_itemsize */
5410 long_dealloc, /* tp_dealloc */
5411 0, /* tp_print */
5412 0, /* tp_getattr */
5413 0, /* tp_setattr */
5414 0, /* tp_reserved */
5415 long_to_decimal_string, /* tp_repr */
5416 &long_as_number, /* tp_as_number */
5417 0, /* tp_as_sequence */
5418 0, /* tp_as_mapping */
5419 (hashfunc)long_hash, /* tp_hash */
5420 0, /* tp_call */
5421 long_to_decimal_string, /* tp_str */
5422 PyObject_GenericGetAttr, /* tp_getattro */
5423 0, /* tp_setattro */
5424 0, /* tp_as_buffer */
5425 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE |
5426 Py_TPFLAGS_LONG_SUBCLASS, /* tp_flags */
5427 long_doc, /* tp_doc */
5428 0, /* tp_traverse */
5429 0, /* tp_clear */
5430 long_richcompare, /* tp_richcompare */
5431 0, /* tp_weaklistoffset */
5432 0, /* tp_iter */
5433 0, /* tp_iternext */
5434 long_methods, /* tp_methods */
5435 0, /* tp_members */
5436 long_getset, /* tp_getset */
5437 0, /* tp_base */
5438 0, /* tp_dict */
5439 0, /* tp_descr_get */
5440 0, /* tp_descr_set */
5441 0, /* tp_dictoffset */
5442 0, /* tp_init */
5443 0, /* tp_alloc */
5444 long_new, /* tp_new */
5445 PyObject_Del, /* tp_free */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00005446};
Guido van Rossumddefaf32007-01-14 03:31:43 +00005447
Mark Dickinsonbd792642009-03-18 20:06:12 +00005448static PyTypeObject Int_InfoType;
5449
5450PyDoc_STRVAR(int_info__doc__,
5451"sys.int_info\n\
5452\n\
5453A struct sequence that holds information about Python's\n\
5454internal representation of integers. The attributes are read only.");
5455
5456static PyStructSequence_Field int_info_fields[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005457 {"bits_per_digit", "size of a digit in bits"},
Mark Dickinson22b20182010-05-10 21:27:53 +00005458 {"sizeof_digit", "size in bytes of the C type used to represent a digit"},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005459 {NULL, NULL}
Mark Dickinsonbd792642009-03-18 20:06:12 +00005460};
5461
5462static PyStructSequence_Desc int_info_desc = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005463 "sys.int_info", /* name */
5464 int_info__doc__, /* doc */
5465 int_info_fields, /* fields */
5466 2 /* number of fields */
Mark Dickinsonbd792642009-03-18 20:06:12 +00005467};
5468
5469PyObject *
5470PyLong_GetInfo(void)
5471{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005472 PyObject* int_info;
5473 int field = 0;
5474 int_info = PyStructSequence_New(&Int_InfoType);
5475 if (int_info == NULL)
5476 return NULL;
5477 PyStructSequence_SET_ITEM(int_info, field++,
5478 PyLong_FromLong(PyLong_SHIFT));
5479 PyStructSequence_SET_ITEM(int_info, field++,
5480 PyLong_FromLong(sizeof(digit)));
5481 if (PyErr_Occurred()) {
5482 Py_CLEAR(int_info);
5483 return NULL;
5484 }
5485 return int_info;
Mark Dickinsonbd792642009-03-18 20:06:12 +00005486}
5487
Guido van Rossumddefaf32007-01-14 03:31:43 +00005488int
5489_PyLong_Init(void)
5490{
5491#if NSMALLNEGINTS + NSMALLPOSINTS > 0
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005492 int ival, size;
5493 PyLongObject *v = small_ints;
Christian Heimesdfc12ed2008-01-31 15:16:38 +00005494
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005495 for (ival = -NSMALLNEGINTS; ival < NSMALLPOSINTS; ival++, v++) {
5496 size = (ival < 0) ? -1 : ((ival == 0) ? 0 : 1);
5497 if (Py_TYPE(v) == &PyLong_Type) {
5498 /* The element is already initialized, most likely
5499 * the Python interpreter was initialized before.
5500 */
5501 Py_ssize_t refcnt;
5502 PyObject* op = (PyObject*)v;
Christian Heimesdfc12ed2008-01-31 15:16:38 +00005503
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005504 refcnt = Py_REFCNT(op) < 0 ? 0 : Py_REFCNT(op);
5505 _Py_NewReference(op);
5506 /* _Py_NewReference sets the ref count to 1 but
5507 * the ref count might be larger. Set the refcnt
5508 * to the original refcnt + 1 */
5509 Py_REFCNT(op) = refcnt + 1;
5510 assert(Py_SIZE(op) == size);
Victor Stinner12174a52014-08-15 23:17:38 +02005511 assert(v->ob_digit[0] == (digit)abs(ival));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005512 }
5513 else {
Christian Heimesd3afe782013-12-04 09:27:47 +01005514 (void)PyObject_INIT(v, &PyLong_Type);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005515 }
5516 Py_SIZE(v) = size;
Victor Stinner12174a52014-08-15 23:17:38 +02005517 v->ob_digit[0] = (digit)abs(ival);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005518 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00005519#endif
Serhiy Storchakaba85d692017-03-30 09:09:41 +03005520 _PyLong_Zero = PyLong_FromLong(0);
5521 if (_PyLong_Zero == NULL)
5522 return 0;
5523 _PyLong_One = PyLong_FromLong(1);
5524 if (_PyLong_One == NULL)
5525 return 0;
5526
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005527 /* initialize int_info */
Victor Stinner1c8f0592013-07-22 22:24:54 +02005528 if (Int_InfoType.tp_name == NULL) {
5529 if (PyStructSequence_InitType2(&Int_InfoType, &int_info_desc) < 0)
5530 return 0;
5531 }
Mark Dickinsonbd792642009-03-18 20:06:12 +00005532
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005533 return 1;
Guido van Rossumddefaf32007-01-14 03:31:43 +00005534}
5535
5536void
5537PyLong_Fini(void)
5538{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005539 /* Integers are currently statically allocated. Py_DECREF is not
5540 needed, but Python must forget about the reference or multiple
5541 reinitializations will fail. */
Serhiy Storchakaba85d692017-03-30 09:09:41 +03005542 Py_CLEAR(_PyLong_One);
5543 Py_CLEAR(_PyLong_Zero);
Guido van Rossumddefaf32007-01-14 03:31:43 +00005544#if NSMALLNEGINTS + NSMALLPOSINTS > 0
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005545 int i;
5546 PyLongObject *v = small_ints;
5547 for (i = 0; i < NSMALLNEGINTS + NSMALLPOSINTS; i++, v++) {
5548 _Py_DEC_REFTOTAL;
5549 _Py_ForgetReference((PyObject*)v);
5550 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00005551#endif
5552}