blob: 43dedf25485e31f4e65bcf3a95f6033bc8424c23 [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +00001
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00002/* Integer object implementation */
3
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004#include "Python.h"
Barry Warsaw226ae6c1999-10-12 19:54:53 +00005#include <ctype.h>
Mark Dickinson6736cf82009-04-20 21:13:33 +00006#include <float.h>
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00007
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00008static PyObject *int_int(PyIntObject *v);
9
Guido van Rossum2e1d4331993-12-24 10:22:45 +000010long
Fred Drakea2f55112000-07-09 15:16:51 +000011PyInt_GetMax(void)
Guido van Rossum2e1d4331993-12-24 10:22:45 +000012{
13 return LONG_MAX; /* To initialize sys.maxint */
14}
15
Guido van Rossum3f5da241990-12-20 15:06:42 +000016/* Integers are quite normal objects, to make object handling uniform.
17 (Using odd pointers to represent integers would save much space
18 but require extra checks for this special case throughout the code.)
Tim Peters29c0afc2002-04-28 16:57:34 +000019 Since a typical Python program spends much of its time allocating
Guido van Rossum3f5da241990-12-20 15:06:42 +000020 and deallocating integers, these operations should be very fast.
21 Therefore we use a dedicated allocation scheme with a much lower
22 overhead (in space and time) than straight malloc(): a simple
23 dedicated free list, filled when necessary with memory from malloc().
Tim Peters29c0afc2002-04-28 16:57:34 +000024
25 block_list is a singly-linked list of all PyIntBlocks ever allocated,
26 linked via their next members. PyIntBlocks are never returned to the
27 system before shutdown (PyInt_Fini).
28
29 free_list is a singly-linked list of available PyIntObjects, linked
30 via abuse of their ob_type members.
Guido van Rossum3f5da241990-12-20 15:06:42 +000031*/
32
33#define BLOCK_SIZE 1000 /* 1K less typical malloc overhead */
Guido van Rossum3fce8831999-03-12 19:43:17 +000034#define BHEAD_SIZE 8 /* Enough for a 64-bit pointer */
35#define N_INTOBJECTS ((BLOCK_SIZE - BHEAD_SIZE) / sizeof(PyIntObject))
Guido van Rossumda084ed1999-03-10 22:55:24 +000036
Guido van Rossum3fce8831999-03-12 19:43:17 +000037struct _intblock {
38 struct _intblock *next;
39 PyIntObject objects[N_INTOBJECTS];
40};
41
42typedef struct _intblock PyIntBlock;
43
44static PyIntBlock *block_list = NULL;
45static PyIntObject *free_list = NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +000046
Guido van Rossumc0b618a1997-05-02 03:12:38 +000047static PyIntObject *
Fred Drakea2f55112000-07-09 15:16:51 +000048fill_free_list(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +000049{
Guido van Rossumc0b618a1997-05-02 03:12:38 +000050 PyIntObject *p, *q;
Tim Peters29c0afc2002-04-28 16:57:34 +000051 /* Python's object allocator isn't appropriate for large blocks. */
Guido van Rossumb18618d2000-05-03 23:44:39 +000052 p = (PyIntObject *) PyMem_MALLOC(sizeof(PyIntBlock));
Guido van Rossum3f5da241990-12-20 15:06:42 +000053 if (p == NULL)
Guido van Rossumb18618d2000-05-03 23:44:39 +000054 return (PyIntObject *) PyErr_NoMemory();
Guido van Rossum3fce8831999-03-12 19:43:17 +000055 ((PyIntBlock *)p)->next = block_list;
56 block_list = (PyIntBlock *)p;
Tim Peters29c0afc2002-04-28 16:57:34 +000057 /* Link the int objects together, from rear to front, then return
58 the address of the last int object in the block. */
Guido van Rossum3fce8831999-03-12 19:43:17 +000059 p = &((PyIntBlock *)p)->objects[0];
Guido van Rossum3f5da241990-12-20 15:06:42 +000060 q = p + N_INTOBJECTS;
61 while (--q > p)
Christian Heimese93237d2007-12-19 02:37:44 +000062 Py_TYPE(q) = (struct _typeobject *)(q-1);
63 Py_TYPE(q) = NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +000064 return p + N_INTOBJECTS - 1;
65}
66
Sjoerd Mullender842d2cc1993-10-15 16:18:48 +000067#ifndef NSMALLPOSINTS
Georg Brandl418a1ef2006-02-22 11:30:06 +000068#define NSMALLPOSINTS 257
Sjoerd Mullender842d2cc1993-10-15 16:18:48 +000069#endif
70#ifndef NSMALLNEGINTS
Neal Norwitzc91ed402002-12-30 22:29:22 +000071#define NSMALLNEGINTS 5
Sjoerd Mullender842d2cc1993-10-15 16:18:48 +000072#endif
73#if NSMALLNEGINTS + NSMALLPOSINTS > 0
74/* References to small integers are saved in this array so that they
75 can be shared.
76 The integers that are saved are those in the range
77 -NSMALLNEGINTS (inclusive) to NSMALLPOSINTS (not inclusive).
78*/
Guido van Rossumc0b618a1997-05-02 03:12:38 +000079static PyIntObject *small_ints[NSMALLNEGINTS + NSMALLPOSINTS];
Sjoerd Mullender842d2cc1993-10-15 16:18:48 +000080#endif
81#ifdef COUNT_ALLOCS
Martin v. Löwisb90304a2009-01-07 18:40:40 +000082Py_ssize_t quick_int_allocs;
83Py_ssize_t quick_neg_int_allocs;
Sjoerd Mullender842d2cc1993-10-15 16:18:48 +000084#endif
Guido van Rossum3f5da241990-12-20 15:06:42 +000085
Guido van Rossumc0b618a1997-05-02 03:12:38 +000086PyObject *
Fred Drakea2f55112000-07-09 15:16:51 +000087PyInt_FromLong(long ival)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000088{
Guido van Rossumc0b618a1997-05-02 03:12:38 +000089 register PyIntObject *v;
Sjoerd Mullender842d2cc1993-10-15 16:18:48 +000090#if NSMALLNEGINTS + NSMALLPOSINTS > 0
Neal Norwitzc91ed402002-12-30 22:29:22 +000091 if (-NSMALLNEGINTS <= ival && ival < NSMALLPOSINTS) {
92 v = small_ints[ival + NSMALLNEGINTS];
Guido van Rossumc0b618a1997-05-02 03:12:38 +000093 Py_INCREF(v);
Sjoerd Mullender842d2cc1993-10-15 16:18:48 +000094#ifdef COUNT_ALLOCS
95 if (ival >= 0)
96 quick_int_allocs++;
97 else
98 quick_neg_int_allocs++;
99#endif
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000100 return (PyObject *) v;
Sjoerd Mullender842d2cc1993-10-15 16:18:48 +0000101 }
102#endif
Guido van Rossum3f5da241990-12-20 15:06:42 +0000103 if (free_list == NULL) {
104 if ((free_list = fill_free_list()) == NULL)
105 return NULL;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000106 }
Guido van Rossume3a8e7e2002-08-19 19:26:42 +0000107 /* Inline PyObject_New */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000108 v = free_list;
Christian Heimese93237d2007-12-19 02:37:44 +0000109 free_list = (PyIntObject *)Py_TYPE(v);
Guido van Rossumb18618d2000-05-03 23:44:39 +0000110 PyObject_INIT(v, &PyInt_Type);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000111 v->ob_ival = ival;
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000112 return (PyObject *) v;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000113}
114
Martin v. Löwis18e16552006-02-15 17:27:45 +0000115PyObject *
116PyInt_FromSize_t(size_t ival)
117{
118 if (ival <= LONG_MAX)
119 return PyInt_FromLong((long)ival);
120 return _PyLong_FromSize_t(ival);
121}
122
123PyObject *
124PyInt_FromSsize_t(Py_ssize_t ival)
125{
126 if (ival >= LONG_MIN && ival <= LONG_MAX)
127 return PyInt_FromLong((long)ival);
128 return _PyLong_FromSsize_t(ival);
129}
130
Guido van Rossum3f5da241990-12-20 15:06:42 +0000131static void
Fred Drakea2f55112000-07-09 15:16:51 +0000132int_dealloc(PyIntObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000133{
Guido van Rossumdea6ef92001-09-11 16:13:52 +0000134 if (PyInt_CheckExact(v)) {
Christian Heimese93237d2007-12-19 02:37:44 +0000135 Py_TYPE(v) = (struct _typeobject *)free_list;
Guido van Rossumbef14172001-08-29 15:47:46 +0000136 free_list = v;
137 }
138 else
Christian Heimese93237d2007-12-19 02:37:44 +0000139 Py_TYPE(v)->tp_free((PyObject *)v);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000140}
141
Guido van Rossum93646982002-04-26 00:53:34 +0000142static void
143int_free(PyIntObject *v)
144{
Christian Heimese93237d2007-12-19 02:37:44 +0000145 Py_TYPE(v) = (struct _typeobject *)free_list;
Guido van Rossum93646982002-04-26 00:53:34 +0000146 free_list = v;
147}
148
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000149long
Fred Drakea2f55112000-07-09 15:16:51 +0000150PyInt_AsLong(register PyObject *op)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000151{
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000152 PyNumberMethods *nb;
153 PyIntObject *io;
Guido van Rossumbf8c0e31994-08-29 12:48:32 +0000154 long val;
Tim Petersa3c01ce2001-12-04 23:05:10 +0000155
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000156 if (op && PyInt_Check(op))
157 return PyInt_AS_LONG((PyIntObject*) op);
Tim Petersa3c01ce2001-12-04 23:05:10 +0000158
Christian Heimese93237d2007-12-19 02:37:44 +0000159 if (op == NULL || (nb = Py_TYPE(op)->tp_as_number) == NULL ||
Guido van Rossumbf8c0e31994-08-29 12:48:32 +0000160 nb->nb_int == NULL) {
Guido van Rossumc18a6f42000-05-09 14:27:48 +0000161 PyErr_SetString(PyExc_TypeError, "an integer is required");
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000162 return -1;
163 }
Tim Petersa3c01ce2001-12-04 23:05:10 +0000164
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000165 io = (PyIntObject*) (*nb->nb_int) (op);
Guido van Rossumbf8c0e31994-08-29 12:48:32 +0000166 if (io == NULL)
167 return -1;
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000168 if (!PyInt_Check(io)) {
Walter Dörwaldf1715402002-11-19 20:49:15 +0000169 if (PyLong_Check(io)) {
170 /* got a long? => retry int conversion */
171 val = PyLong_AsLong((PyObject *)io);
Thomas Heller850566b2003-02-20 20:32:11 +0000172 Py_DECREF(io);
173 if ((val == -1) && PyErr_Occurred())
Walter Dörwaldf1715402002-11-19 20:49:15 +0000174 return -1;
Thomas Heller850566b2003-02-20 20:32:11 +0000175 return val;
Walter Dörwaldf1715402002-11-19 20:49:15 +0000176 }
177 else
178 {
Thomas Hellera4ea6032003-04-17 18:55:45 +0000179 Py_DECREF(io);
Walter Dörwaldf1715402002-11-19 20:49:15 +0000180 PyErr_SetString(PyExc_TypeError,
181 "nb_int should return int object");
182 return -1;
183 }
Guido van Rossumbf8c0e31994-08-29 12:48:32 +0000184 }
Tim Petersa3c01ce2001-12-04 23:05:10 +0000185
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000186 val = PyInt_AS_LONG(io);
187 Py_DECREF(io);
Tim Petersa3c01ce2001-12-04 23:05:10 +0000188
Guido van Rossumbf8c0e31994-08-29 12:48:32 +0000189 return val;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000190}
191
Martin v. Löwis18e16552006-02-15 17:27:45 +0000192Py_ssize_t
193PyInt_AsSsize_t(register PyObject *op)
194{
Thomas Woutersb1410fb2006-02-15 23:08:56 +0000195#if SIZEOF_SIZE_T != SIZEOF_LONG
Martin v. Löwis18e16552006-02-15 17:27:45 +0000196 PyNumberMethods *nb;
197 PyIntObject *io;
198 Py_ssize_t val;
Thomas Woutersb1410fb2006-02-15 23:08:56 +0000199#endif
Neal Norwitz8a87f5d2006-08-12 17:03:09 +0000200
201 if (op == NULL) {
202 PyErr_SetString(PyExc_TypeError, "an integer is required");
203 return -1;
204 }
205
206 if (PyInt_Check(op))
207 return PyInt_AS_LONG((PyIntObject*) op);
208 if (PyLong_Check(op))
Martin v. Löwis18e16552006-02-15 17:27:45 +0000209 return _PyLong_AsSsize_t(op);
Thomas Woutersb1410fb2006-02-15 23:08:56 +0000210#if SIZEOF_SIZE_T == SIZEOF_LONG
Martin v. Löwis18e16552006-02-15 17:27:45 +0000211 return PyInt_AsLong(op);
212#else
213
Christian Heimese93237d2007-12-19 02:37:44 +0000214 if ((nb = Py_TYPE(op)->tp_as_number) == NULL ||
Martin v. Löwis18e16552006-02-15 17:27:45 +0000215 (nb->nb_int == NULL && nb->nb_long == 0)) {
216 PyErr_SetString(PyExc_TypeError, "an integer is required");
217 return -1;
218 }
219
Kristján Valur Jónssonabe1d482007-05-07 16:46:54 +0000220 if (nb->nb_long != 0)
Martin v. Löwis18e16552006-02-15 17:27:45 +0000221 io = (PyIntObject*) (*nb->nb_long) (op);
Kristján Valur Jónssonabe1d482007-05-07 16:46:54 +0000222 else
Martin v. Löwis18e16552006-02-15 17:27:45 +0000223 io = (PyIntObject*) (*nb->nb_int) (op);
Martin v. Löwis18e16552006-02-15 17:27:45 +0000224 if (io == NULL)
225 return -1;
226 if (!PyInt_Check(io)) {
227 if (PyLong_Check(io)) {
228 /* got a long? => retry int conversion */
229 val = _PyLong_AsSsize_t((PyObject *)io);
230 Py_DECREF(io);
231 if ((val == -1) && PyErr_Occurred())
232 return -1;
233 return val;
234 }
235 else
236 {
237 Py_DECREF(io);
238 PyErr_SetString(PyExc_TypeError,
239 "nb_int should return int object");
240 return -1;
241 }
242 }
243
244 val = PyInt_AS_LONG(io);
245 Py_DECREF(io);
246
247 return val;
248#endif
249}
250
Thomas Hellera4ea6032003-04-17 18:55:45 +0000251unsigned long
252PyInt_AsUnsignedLongMask(register PyObject *op)
253{
254 PyNumberMethods *nb;
255 PyIntObject *io;
256 unsigned long val;
257
258 if (op && PyInt_Check(op))
259 return PyInt_AS_LONG((PyIntObject*) op);
260 if (op && PyLong_Check(op))
261 return PyLong_AsUnsignedLongMask(op);
262
Christian Heimese93237d2007-12-19 02:37:44 +0000263 if (op == NULL || (nb = Py_TYPE(op)->tp_as_number) == NULL ||
Thomas Hellera4ea6032003-04-17 18:55:45 +0000264 nb->nb_int == NULL) {
265 PyErr_SetString(PyExc_TypeError, "an integer is required");
Skip Montanaro429433b2006-04-18 00:35:43 +0000266 return (unsigned long)-1;
Thomas Hellera4ea6032003-04-17 18:55:45 +0000267 }
268
269 io = (PyIntObject*) (*nb->nb_int) (op);
270 if (io == NULL)
Skip Montanaro429433b2006-04-18 00:35:43 +0000271 return (unsigned long)-1;
Thomas Hellera4ea6032003-04-17 18:55:45 +0000272 if (!PyInt_Check(io)) {
273 if (PyLong_Check(io)) {
274 val = PyLong_AsUnsignedLongMask((PyObject *)io);
275 Py_DECREF(io);
276 if (PyErr_Occurred())
Skip Montanaro429433b2006-04-18 00:35:43 +0000277 return (unsigned long)-1;
Thomas Hellera4ea6032003-04-17 18:55:45 +0000278 return val;
279 }
280 else
281 {
282 Py_DECREF(io);
283 PyErr_SetString(PyExc_TypeError,
284 "nb_int should return int object");
Skip Montanaro429433b2006-04-18 00:35:43 +0000285 return (unsigned long)-1;
Thomas Hellera4ea6032003-04-17 18:55:45 +0000286 }
287 }
288
289 val = PyInt_AS_LONG(io);
290 Py_DECREF(io);
291
292 return val;
293}
294
295#ifdef HAVE_LONG_LONG
296unsigned PY_LONG_LONG
297PyInt_AsUnsignedLongLongMask(register PyObject *op)
298{
299 PyNumberMethods *nb;
300 PyIntObject *io;
301 unsigned PY_LONG_LONG val;
302
303 if (op && PyInt_Check(op))
304 return PyInt_AS_LONG((PyIntObject*) op);
305 if (op && PyLong_Check(op))
306 return PyLong_AsUnsignedLongLongMask(op);
307
Christian Heimese93237d2007-12-19 02:37:44 +0000308 if (op == NULL || (nb = Py_TYPE(op)->tp_as_number) == NULL ||
Thomas Hellera4ea6032003-04-17 18:55:45 +0000309 nb->nb_int == NULL) {
310 PyErr_SetString(PyExc_TypeError, "an integer is required");
Skip Montanaro429433b2006-04-18 00:35:43 +0000311 return (unsigned PY_LONG_LONG)-1;
Thomas Hellera4ea6032003-04-17 18:55:45 +0000312 }
313
314 io = (PyIntObject*) (*nb->nb_int) (op);
315 if (io == NULL)
Skip Montanaro429433b2006-04-18 00:35:43 +0000316 return (unsigned PY_LONG_LONG)-1;
Thomas Hellera4ea6032003-04-17 18:55:45 +0000317 if (!PyInt_Check(io)) {
318 if (PyLong_Check(io)) {
319 val = PyLong_AsUnsignedLongLongMask((PyObject *)io);
320 Py_DECREF(io);
321 if (PyErr_Occurred())
Skip Montanaro429433b2006-04-18 00:35:43 +0000322 return (unsigned PY_LONG_LONG)-1;
Thomas Hellera4ea6032003-04-17 18:55:45 +0000323 return val;
324 }
325 else
326 {
327 Py_DECREF(io);
328 PyErr_SetString(PyExc_TypeError,
329 "nb_int should return int object");
Skip Montanaro429433b2006-04-18 00:35:43 +0000330 return (unsigned PY_LONG_LONG)-1;
Thomas Hellera4ea6032003-04-17 18:55:45 +0000331 }
332 }
333
334 val = PyInt_AS_LONG(io);
335 Py_DECREF(io);
336
337 return val;
338}
339#endif
340
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000341PyObject *
Fred Drakea2f55112000-07-09 15:16:51 +0000342PyInt_FromString(char *s, char **pend, int base)
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000343{
344 char *end;
345 long x;
Thomas Wouters9cb28bea2006-04-11 23:50:33 +0000346 Py_ssize_t slen;
347 PyObject *sobj, *srepr;
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000348
349 if ((base != 0 && base < 2) || base > 36) {
Guido van Rossum47710652003-02-12 20:48:22 +0000350 PyErr_SetString(PyExc_ValueError,
351 "int() base must be >= 2 and <= 36");
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000352 return NULL;
353 }
354
355 while (*s && isspace(Py_CHARMASK(*s)))
356 s++;
357 errno = 0;
Guido van Rossum47710652003-02-12 20:48:22 +0000358 if (base == 0 && s[0] == '0') {
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000359 x = (long) PyOS_strtoul(s, &end, base);
Guido van Rossum47710652003-02-12 20:48:22 +0000360 if (x < 0)
Guido van Rossum6c9e1302003-11-29 23:52:13 +0000361 return PyLong_FromString(s, pend, base);
Guido van Rossum47710652003-02-12 20:48:22 +0000362 }
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000363 else
364 x = PyOS_strtol(s, &end, base);
Martin v. Löwis2b6727b2001-03-06 12:12:02 +0000365 if (end == s || !isalnum(Py_CHARMASK(end[-1])))
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000366 goto bad;
367 while (*end && isspace(Py_CHARMASK(*end)))
368 end++;
369 if (*end != '\0') {
370 bad:
Thomas Wouters9cb28bea2006-04-11 23:50:33 +0000371 slen = strlen(s) < 200 ? strlen(s) : 200;
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000372 sobj = PyString_FromStringAndSize(s, slen);
Thomas Wouters9cb28bea2006-04-11 23:50:33 +0000373 if (sobj == NULL)
374 return NULL;
375 srepr = PyObject_Repr(sobj);
376 Py_DECREF(sobj);
377 if (srepr == NULL)
378 return NULL;
379 PyErr_Format(PyExc_ValueError,
380 "invalid literal for int() with base %d: %s",
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000381 base, PyString_AS_STRING(srepr));
Thomas Wouters9cb28bea2006-04-11 23:50:33 +0000382 Py_DECREF(srepr);
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000383 return NULL;
384 }
Tim Petersc8854432004-08-25 02:14:08 +0000385 else if (errno != 0)
Walter Dörwald07e14762002-11-06 16:15:14 +0000386 return PyLong_FromString(s, pend, base);
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000387 if (pend)
388 *pend = end;
389 return PyInt_FromLong(x);
390}
391
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000392#ifdef Py_USING_UNICODE
Guido van Rossum9e896b32000-04-05 20:11:21 +0000393PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +0000394PyInt_FromUnicode(Py_UNICODE *s, Py_ssize_t length, int base)
Guido van Rossum9e896b32000-04-05 20:11:21 +0000395{
Walter Dörwald07e14762002-11-06 16:15:14 +0000396 PyObject *result;
Anthony Baxter377be112006-04-11 06:54:30 +0000397 char *buffer = (char *)PyMem_MALLOC(length+1);
Tim Petersa3c01ce2001-12-04 23:05:10 +0000398
Walter Dörwald07e14762002-11-06 16:15:14 +0000399 if (buffer == NULL)
Neal Norwitzd501d1f2007-05-16 04:33:50 +0000400 return PyErr_NoMemory();
Walter Dörwald07e14762002-11-06 16:15:14 +0000401
402 if (PyUnicode_EncodeDecimal(s, length, buffer, NULL)) {
403 PyMem_FREE(buffer);
Guido van Rossum9e896b32000-04-05 20:11:21 +0000404 return NULL;
405 }
Walter Dörwald07e14762002-11-06 16:15:14 +0000406 result = PyInt_FromString(buffer, NULL, base);
407 PyMem_FREE(buffer);
408 return result;
Guido van Rossum9e896b32000-04-05 20:11:21 +0000409}
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000410#endif
Guido van Rossum9e896b32000-04-05 20:11:21 +0000411
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000412/* Methods */
413
Neil Schemenauer139e72a2001-01-04 01:45:33 +0000414/* Integers are seen as the "smallest" of all numeric types and thus
415 don't have any knowledge about conversion of other types to
416 integers. */
417
418#define CONVERT_TO_LONG(obj, lng) \
419 if (PyInt_Check(obj)) { \
420 lng = PyInt_AS_LONG(obj); \
421 } \
422 else { \
423 Py_INCREF(Py_NotImplemented); \
424 return Py_NotImplemented; \
425 }
426
Guido van Rossum719f5fa1992-03-27 17:31:02 +0000427/* ARGSUSED */
Guido van Rossum90933611991-06-07 16:10:43 +0000428static int
Fred Drakea2f55112000-07-09 15:16:51 +0000429int_print(PyIntObject *v, FILE *fp, int flags)
430 /* flags -- not used but required by interface */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000431{
Brett Cannon01531592007-09-17 03:28:34 +0000432 long int_val = v->ob_ival;
433 Py_BEGIN_ALLOW_THREADS
434 fprintf(fp, "%ld", int_val);
435 Py_END_ALLOW_THREADS
Guido van Rossum90933611991-06-07 16:10:43 +0000436 return 0;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000437}
438
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000439static int
Fred Drakea2f55112000-07-09 15:16:51 +0000440int_compare(PyIntObject *v, PyIntObject *w)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000441{
442 register long i = v->ob_ival;
443 register long j = w->ob_ival;
444 return (i < j) ? -1 : (i > j) ? 1 : 0;
445}
446
Guido van Rossum9bfef441993-03-29 10:43:31 +0000447static long
Fred Drakea2f55112000-07-09 15:16:51 +0000448int_hash(PyIntObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000449{
Guido van Rossum541cdd81997-01-06 22:53:20 +0000450 /* XXX If this is changed, you also need to change the way
451 Python's long, float and complex types are hashed. */
Guido van Rossum9bfef441993-03-29 10:43:31 +0000452 long x = v -> ob_ival;
453 if (x == -1)
454 x = -2;
455 return x;
456}
457
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000458static PyObject *
Fred Drakea2f55112000-07-09 15:16:51 +0000459int_add(PyIntObject *v, PyIntObject *w)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000460{
461 register long a, b, x;
Neil Schemenauer139e72a2001-01-04 01:45:33 +0000462 CONVERT_TO_LONG(v, a);
463 CONVERT_TO_LONG(w, b);
Mark Dickinson34398182009-12-02 17:33:41 +0000464 /* casts in the line below avoid undefined behaviour on overflow */
465 x = (long)((unsigned long)a + b);
Guido van Rossume27f7952001-08-23 02:59:04 +0000466 if ((x^a) >= 0 || (x^b) >= 0)
467 return PyInt_FromLong(x);
Guido van Rossume27f7952001-08-23 02:59:04 +0000468 return PyLong_Type.tp_as_number->nb_add((PyObject *)v, (PyObject *)w);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000469}
470
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000471static PyObject *
Fred Drakea2f55112000-07-09 15:16:51 +0000472int_sub(PyIntObject *v, PyIntObject *w)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000473{
474 register long a, b, x;
Neil Schemenauer139e72a2001-01-04 01:45:33 +0000475 CONVERT_TO_LONG(v, a);
476 CONVERT_TO_LONG(w, b);
Mark Dickinson34398182009-12-02 17:33:41 +0000477 /* casts in the line below avoid undefined behaviour on overflow */
478 x = (long)((unsigned long)a - b);
Guido van Rossume27f7952001-08-23 02:59:04 +0000479 if ((x^a) >= 0 || (x^~b) >= 0)
480 return PyInt_FromLong(x);
Guido van Rossume27f7952001-08-23 02:59:04 +0000481 return PyLong_Type.tp_as_number->nb_subtract((PyObject *)v,
482 (PyObject *)w);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000483}
484
Guido van Rossumbf8c0e31994-08-29 12:48:32 +0000485/*
Tim Petersa3c01ce2001-12-04 23:05:10 +0000486Integer overflow checking for * is painful: Python tried a couple ways, but
487they didn't work on all platforms, or failed in endcases (a product of
488-sys.maxint-1 has been a particular pain).
Guido van Rossumbf8c0e31994-08-29 12:48:32 +0000489
Tim Petersa3c01ce2001-12-04 23:05:10 +0000490Here's another way:
Guido van Rossumbf8c0e31994-08-29 12:48:32 +0000491
Tim Petersa3c01ce2001-12-04 23:05:10 +0000492The native long product x*y is either exactly right or *way* off, being
493just the last n bits of the true product, where n is the number of bits
494in a long (the delivered product is the true product plus i*2**n for
495some integer i).
Guido van Rossumbf8c0e31994-08-29 12:48:32 +0000496
Tim Petersa3c01ce2001-12-04 23:05:10 +0000497The native double product (double)x * (double)y is subject to three
498rounding errors: on a sizeof(long)==8 box, each cast to double can lose
499info, and even on a sizeof(long)==4 box, the multiplication can lose info.
500But, unlike the native long product, it's not in *range* trouble: even
501if sizeof(long)==32 (256-bit longs), the product easily fits in the
502dynamic range of a double. So the leading 50 (or so) bits of the double
503product are correct.
Guido van Rossumbf8c0e31994-08-29 12:48:32 +0000504
Tim Petersa3c01ce2001-12-04 23:05:10 +0000505We check these two ways against each other, and declare victory if they're
506approximately the same. Else, because the native long product is the only
507one that can lose catastrophic amounts of information, it's the native long
508product that must have overflowed.
Guido van Rossumbf8c0e31994-08-29 12:48:32 +0000509*/
510
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000511static PyObject *
Neil Schemenauer139e72a2001-01-04 01:45:33 +0000512int_mul(PyObject *v, PyObject *w)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000513{
Tim Petersa3c01ce2001-12-04 23:05:10 +0000514 long a, b;
515 long longprod; /* a*b in native long arithmetic */
516 double doubled_longprod; /* (double)longprod */
517 double doubleprod; /* (double)a * (double)b */
Guido van Rossumbf8c0e31994-08-29 12:48:32 +0000518
Neil Schemenauer139e72a2001-01-04 01:45:33 +0000519 CONVERT_TO_LONG(v, a);
520 CONVERT_TO_LONG(w, b);
Mark Dickinson34398182009-12-02 17:33:41 +0000521 /* casts in the next line avoid undefined behaviour on overflow */
522 longprod = (long)((unsigned long)a * b);
Tim Petersa3c01ce2001-12-04 23:05:10 +0000523 doubleprod = (double)a * (double)b;
524 doubled_longprod = (double)longprod;
Guido van Rossumbf8c0e31994-08-29 12:48:32 +0000525
Tim Petersa3c01ce2001-12-04 23:05:10 +0000526 /* Fast path for normal case: small multiplicands, and no info
527 is lost in either method. */
528 if (doubled_longprod == doubleprod)
529 return PyInt_FromLong(longprod);
Guido van Rossumbf8c0e31994-08-29 12:48:32 +0000530
Tim Petersa3c01ce2001-12-04 23:05:10 +0000531 /* Somebody somewhere lost info. Close enough, or way off? Note
532 that a != 0 and b != 0 (else doubled_longprod == doubleprod == 0).
533 The difference either is or isn't significant compared to the
534 true value (of which doubleprod is a good approximation).
535 */
536 {
537 const double diff = doubled_longprod - doubleprod;
538 const double absdiff = diff >= 0.0 ? diff : -diff;
539 const double absprod = doubleprod >= 0.0 ? doubleprod :
540 -doubleprod;
541 /* absdiff/absprod <= 1/32 iff
542 32 * absdiff <= absprod -- 5 good bits is "close enough" */
543 if (32.0 * absdiff <= absprod)
544 return PyInt_FromLong(longprod);
Tim Petersa3c01ce2001-12-04 23:05:10 +0000545 else
546 return PyLong_Type.tp_as_number->nb_multiply(v, w);
Guido van Rossumbf8c0e31994-08-29 12:48:32 +0000547 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000548}
549
Armin Rigo7ccbca92006-10-04 12:17:45 +0000550/* Integer overflow checking for unary negation: on a 2's-complement
551 * box, -x overflows iff x is the most negative long. In this case we
552 * get -x == x. However, -x is undefined (by C) if x /is/ the most
553 * negative long (it's a signed overflow case), and some compilers care.
554 * So we cast x to unsigned long first. However, then other compilers
555 * warn about applying unary minus to an unsigned operand. Hence the
556 * weird "0-".
557 */
558#define UNARY_NEG_WOULD_OVERFLOW(x) \
559 ((x) < 0 && (unsigned long)(x) == 0-(unsigned long)(x))
560
Guido van Rossume27f7952001-08-23 02:59:04 +0000561/* Return type of i_divmod */
562enum divmod_result {
563 DIVMOD_OK, /* Correct result */
564 DIVMOD_OVERFLOW, /* Overflow, try again using longs */
565 DIVMOD_ERROR /* Exception raised */
566};
567
568static enum divmod_result
Tim Peters1dad6a82001-06-18 19:21:11 +0000569i_divmod(register long x, register long y,
Fred Drakea2f55112000-07-09 15:16:51 +0000570 long *p_xdivy, long *p_xmody)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000571{
Guido van Rossum2b16a6f1992-01-19 16:28:51 +0000572 long xdivy, xmody;
Tim Petersa3c01ce2001-12-04 23:05:10 +0000573
Tim Peters1dad6a82001-06-18 19:21:11 +0000574 if (y == 0) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000575 PyErr_SetString(PyExc_ZeroDivisionError,
Fred Drake661ea262000-10-24 19:57:45 +0000576 "integer division or modulo by zero");
Guido van Rossume27f7952001-08-23 02:59:04 +0000577 return DIVMOD_ERROR;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000578 }
Tim Peters1dad6a82001-06-18 19:21:11 +0000579 /* (-sys.maxint-1)/-1 is the only overflow case. */
Armin Rigo7ccbca92006-10-04 12:17:45 +0000580 if (y == -1 && UNARY_NEG_WOULD_OVERFLOW(x))
Guido van Rossume27f7952001-08-23 02:59:04 +0000581 return DIVMOD_OVERFLOW;
Tim Peters1dad6a82001-06-18 19:21:11 +0000582 xdivy = x / y;
583 xmody = x - xdivy * y;
584 /* If the signs of x and y differ, and the remainder is non-0,
585 * C89 doesn't define whether xdivy is now the floor or the
586 * ceiling of the infinitely precise quotient. We want the floor,
587 * and we have it iff the remainder's sign matches y's.
588 */
589 if (xmody && ((y ^ xmody) < 0) /* i.e. and signs differ */) {
590 xmody += y;
591 --xdivy;
592 assert(xmody && ((y ^ xmody) >= 0));
Guido van Rossum00466951991-05-05 20:08:27 +0000593 }
Guido van Rossum2b16a6f1992-01-19 16:28:51 +0000594 *p_xdivy = xdivy;
595 *p_xmody = xmody;
Guido van Rossume27f7952001-08-23 02:59:04 +0000596 return DIVMOD_OK;
Guido van Rossum2b16a6f1992-01-19 16:28:51 +0000597}
598
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000599static PyObject *
Fred Drakea2f55112000-07-09 15:16:51 +0000600int_div(PyIntObject *x, PyIntObject *y)
Guido van Rossum2b16a6f1992-01-19 16:28:51 +0000601{
Neil Schemenauer139e72a2001-01-04 01:45:33 +0000602 long xi, yi;
Guido van Rossum2b16a6f1992-01-19 16:28:51 +0000603 long d, m;
Neil Schemenauer139e72a2001-01-04 01:45:33 +0000604 CONVERT_TO_LONG(x, xi);
605 CONVERT_TO_LONG(y, yi);
Guido van Rossume27f7952001-08-23 02:59:04 +0000606 switch (i_divmod(xi, yi, &d, &m)) {
607 case DIVMOD_OK:
608 return PyInt_FromLong(d);
609 case DIVMOD_OVERFLOW:
610 return PyLong_Type.tp_as_number->nb_divide((PyObject *)x,
611 (PyObject *)y);
612 default:
Guido van Rossum2b16a6f1992-01-19 16:28:51 +0000613 return NULL;
Guido van Rossume27f7952001-08-23 02:59:04 +0000614 }
Guido van Rossum2b16a6f1992-01-19 16:28:51 +0000615}
616
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000617static PyObject *
Guido van Rossum393661d2001-08-31 17:40:15 +0000618int_classic_div(PyIntObject *x, PyIntObject *y)
619{
620 long xi, yi;
621 long d, m;
622 CONVERT_TO_LONG(x, xi);
623 CONVERT_TO_LONG(y, yi);
624 if (Py_DivisionWarningFlag &&
625 PyErr_Warn(PyExc_DeprecationWarning, "classic int division") < 0)
626 return NULL;
627 switch (i_divmod(xi, yi, &d, &m)) {
628 case DIVMOD_OK:
629 return PyInt_FromLong(d);
630 case DIVMOD_OVERFLOW:
631 return PyLong_Type.tp_as_number->nb_divide((PyObject *)x,
632 (PyObject *)y);
633 default:
634 return NULL;
635 }
636}
637
638static PyObject *
Tim Peters9c1d7fd2001-09-04 05:52:47 +0000639int_true_divide(PyObject *v, PyObject *w)
640{
Tim Peterse2a60002001-09-04 06:17:36 +0000641 /* If they aren't both ints, give someone else a chance. In
642 particular, this lets int/long get handled by longs, which
643 underflows to 0 gracefully if the long is too big to convert
644 to float. */
645 if (PyInt_Check(v) && PyInt_Check(w))
646 return PyFloat_Type.tp_as_number->nb_true_divide(v, w);
647 Py_INCREF(Py_NotImplemented);
648 return Py_NotImplemented;
Tim Peters9c1d7fd2001-09-04 05:52:47 +0000649}
650
651static PyObject *
Fred Drakea2f55112000-07-09 15:16:51 +0000652int_mod(PyIntObject *x, PyIntObject *y)
Guido van Rossum2b16a6f1992-01-19 16:28:51 +0000653{
Neil Schemenauer139e72a2001-01-04 01:45:33 +0000654 long xi, yi;
Guido van Rossum2b16a6f1992-01-19 16:28:51 +0000655 long d, m;
Neil Schemenauer139e72a2001-01-04 01:45:33 +0000656 CONVERT_TO_LONG(x, xi);
657 CONVERT_TO_LONG(y, yi);
Guido van Rossume27f7952001-08-23 02:59:04 +0000658 switch (i_divmod(xi, yi, &d, &m)) {
659 case DIVMOD_OK:
660 return PyInt_FromLong(m);
661 case DIVMOD_OVERFLOW:
662 return PyLong_Type.tp_as_number->nb_remainder((PyObject *)x,
663 (PyObject *)y);
664 default:
Guido van Rossum2b16a6f1992-01-19 16:28:51 +0000665 return NULL;
Guido van Rossume27f7952001-08-23 02:59:04 +0000666 }
Guido van Rossum2b16a6f1992-01-19 16:28:51 +0000667}
668
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000669static PyObject *
Fred Drakea2f55112000-07-09 15:16:51 +0000670int_divmod(PyIntObject *x, PyIntObject *y)
Guido van Rossum2b16a6f1992-01-19 16:28:51 +0000671{
Neil Schemenauer139e72a2001-01-04 01:45:33 +0000672 long xi, yi;
Guido van Rossum2b16a6f1992-01-19 16:28:51 +0000673 long d, m;
Neil Schemenauer139e72a2001-01-04 01:45:33 +0000674 CONVERT_TO_LONG(x, xi);
675 CONVERT_TO_LONG(y, yi);
Guido van Rossume27f7952001-08-23 02:59:04 +0000676 switch (i_divmod(xi, yi, &d, &m)) {
677 case DIVMOD_OK:
678 return Py_BuildValue("(ll)", d, m);
679 case DIVMOD_OVERFLOW:
680 return PyLong_Type.tp_as_number->nb_divmod((PyObject *)x,
681 (PyObject *)y);
682 default:
Guido van Rossum2b16a6f1992-01-19 16:28:51 +0000683 return NULL;
Guido van Rossume27f7952001-08-23 02:59:04 +0000684 }
Guido van Rossum00466951991-05-05 20:08:27 +0000685}
686
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000687static PyObject *
Fred Drakea2f55112000-07-09 15:16:51 +0000688int_pow(PyIntObject *v, PyIntObject *w, PyIntObject *z)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000689{
Guido van Rossum9478dd41996-12-06 20:14:43 +0000690 register long iv, iw, iz=0, ix, temp, prev;
Neil Schemenauer139e72a2001-01-04 01:45:33 +0000691 CONVERT_TO_LONG(v, iv);
692 CONVERT_TO_LONG(w, iw);
Guido van Rossumbf8c0e31994-08-29 12:48:32 +0000693 if (iw < 0) {
Tim Peters32f453e2001-09-03 08:35:41 +0000694 if ((PyObject *)z != Py_None) {
Tim Peters4c483c42001-09-05 06:24:58 +0000695 PyErr_SetString(PyExc_TypeError, "pow() 2nd argument "
696 "cannot be negative when 3rd argument specified");
Tim Peters32f453e2001-09-03 08:35:41 +0000697 return NULL;
698 }
Guido van Rossumb82fedc2001-07-12 11:19:45 +0000699 /* Return a float. This works because we know that
700 this calls float_pow() which converts its
701 arguments to double. */
702 return PyFloat_Type.tp_as_number->nb_power(
703 (PyObject *)v, (PyObject *)w, (PyObject *)z);
Guido van Rossumbf8c0e31994-08-29 12:48:32 +0000704 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000705 if ((PyObject *)z != Py_None) {
Neil Schemenauer139e72a2001-01-04 01:45:33 +0000706 CONVERT_TO_LONG(z, iz);
Guido van Rossum9478dd41996-12-06 20:14:43 +0000707 if (iz == 0) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000708 PyErr_SetString(PyExc_ValueError,
Tim Peters4c483c42001-09-05 06:24:58 +0000709 "pow() 3rd argument cannot be 0");
Guido van Rossum9478dd41996-12-06 20:14:43 +0000710 return NULL;
711 }
Guido van Rossumbf8c0e31994-08-29 12:48:32 +0000712 }
713 /*
714 * XXX: The original exponentiation code stopped looping
715 * when temp hit zero; this code will continue onwards
716 * unnecessarily, but at least it won't cause any errors.
717 * Hopefully the speed improvement from the fast exponentiation
718 * will compensate for the slight inefficiency.
719 * XXX: Better handling of overflows is desperately needed.
720 */
721 temp = iv;
722 ix = 1;
723 while (iw > 0) {
724 prev = ix; /* Save value for overflow check */
Tim Petersa3c01ce2001-12-04 23:05:10 +0000725 if (iw & 1) {
Guido van Rossumbf8c0e31994-08-29 12:48:32 +0000726 ix = ix*temp;
727 if (temp == 0)
728 break; /* Avoid ix / 0 */
Guido van Rossume27f7952001-08-23 02:59:04 +0000729 if (ix / temp != prev) {
Guido van Rossume27f7952001-08-23 02:59:04 +0000730 return PyLong_Type.tp_as_number->nb_power(
731 (PyObject *)v,
732 (PyObject *)w,
Tim Peters31960db2001-08-23 21:28:33 +0000733 (PyObject *)z);
Guido van Rossume27f7952001-08-23 02:59:04 +0000734 }
Guido van Rossumbf8c0e31994-08-29 12:48:32 +0000735 }
736 iw >>= 1; /* Shift exponent down by 1 bit */
737 if (iw==0) break;
738 prev = temp;
739 temp *= temp; /* Square the value of temp */
Tim Petersc8854432004-08-25 02:14:08 +0000740 if (prev != 0 && temp / prev != prev) {
Guido van Rossume27f7952001-08-23 02:59:04 +0000741 return PyLong_Type.tp_as_number->nb_power(
742 (PyObject *)v, (PyObject *)w, (PyObject *)z);
743 }
Guido van Rossum9478dd41996-12-06 20:14:43 +0000744 if (iz) {
Guido van Rossumbf8c0e31994-08-29 12:48:32 +0000745 /* If we did a multiplication, perform a modulo */
746 ix = ix % iz;
747 temp = temp % iz;
748 }
749 }
Guido van Rossum9478dd41996-12-06 20:14:43 +0000750 if (iz) {
Neil Schemenauer139e72a2001-01-04 01:45:33 +0000751 long div, mod;
Guido van Rossume27f7952001-08-23 02:59:04 +0000752 switch (i_divmod(ix, iz, &div, &mod)) {
753 case DIVMOD_OK:
754 ix = mod;
755 break;
756 case DIVMOD_OVERFLOW:
757 return PyLong_Type.tp_as_number->nb_power(
758 (PyObject *)v, (PyObject *)w, (PyObject *)z);
759 default:
760 return NULL;
761 }
Guido van Rossumbf8c0e31994-08-29 12:48:32 +0000762 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000763 return PyInt_FromLong(ix);
Tim Petersa3c01ce2001-12-04 23:05:10 +0000764}
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000765
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000766static PyObject *
Fred Drakea2f55112000-07-09 15:16:51 +0000767int_neg(PyIntObject *v)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000768{
Martin v. Löwis820d6ac2006-10-04 05:47:34 +0000769 register long a;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000770 a = v->ob_ival;
Armin Rigo7ccbca92006-10-04 12:17:45 +0000771 /* check for overflow */
772 if (UNARY_NEG_WOULD_OVERFLOW(a)) {
Tim Petersc8854432004-08-25 02:14:08 +0000773 PyObject *o = PyLong_FromLong(a);
Neal Norwitzfa56e2d2003-01-19 15:40:09 +0000774 if (o != NULL) {
775 PyObject *result = PyNumber_Negative(o);
776 Py_DECREF(o);
777 return result;
778 }
779 return NULL;
Guido van Rossume27f7952001-08-23 02:59:04 +0000780 }
Martin v. Löwis820d6ac2006-10-04 05:47:34 +0000781 return PyInt_FromLong(-a);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000782}
783
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000784static PyObject *
Fred Drakea2f55112000-07-09 15:16:51 +0000785int_abs(PyIntObject *v)
Guido van Rossum00466951991-05-05 20:08:27 +0000786{
787 if (v->ob_ival >= 0)
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +0000788 return int_int(v);
Guido van Rossum00466951991-05-05 20:08:27 +0000789 else
790 return int_neg(v);
791}
792
Guido van Rossum0bff0151991-05-14 12:05:32 +0000793static int
Fred Drakea2f55112000-07-09 15:16:51 +0000794int_nonzero(PyIntObject *v)
Guido van Rossum0bff0151991-05-14 12:05:32 +0000795{
796 return v->ob_ival != 0;
797}
798
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000799static PyObject *
Fred Drakea2f55112000-07-09 15:16:51 +0000800int_invert(PyIntObject *v)
Guido van Rossum7928cd71991-10-24 14:59:31 +0000801{
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000802 return PyInt_FromLong(~v->ob_ival);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000803}
804
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000805static PyObject *
Fred Drakea2f55112000-07-09 15:16:51 +0000806int_lshift(PyIntObject *v, PyIntObject *w)
Guido van Rossum7928cd71991-10-24 14:59:31 +0000807{
Guido van Rossum078151d2002-08-11 04:24:12 +0000808 long a, b, c;
Raymond Hettingera006c372004-06-26 23:22:57 +0000809 PyObject *vv, *ww, *result;
810
Neil Schemenauer139e72a2001-01-04 01:45:33 +0000811 CONVERT_TO_LONG(v, a);
812 CONVERT_TO_LONG(w, b);
Guido van Rossumf3b351f1992-01-14 18:33:22 +0000813 if (b < 0) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000814 PyErr_SetString(PyExc_ValueError, "negative shift count");
Guido van Rossumf3b351f1992-01-14 18:33:22 +0000815 return NULL;
816 }
Tim Peters73a1dfe2001-09-11 21:44:14 +0000817 if (a == 0 || b == 0)
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +0000818 return int_int(v);
Guido van Rossum72481a31993-10-26 15:21:51 +0000819 if (b >= LONG_BIT) {
Raymond Hettingera006c372004-06-26 23:22:57 +0000820 vv = PyLong_FromLong(PyInt_AS_LONG(v));
821 if (vv == NULL)
822 return NULL;
823 ww = PyLong_FromLong(PyInt_AS_LONG(w));
824 if (ww == NULL) {
825 Py_DECREF(vv);
826 return NULL;
827 }
828 result = PyNumber_Lshift(vv, ww);
829 Py_DECREF(vv);
830 Py_DECREF(ww);
831 return result;
Guido van Rossumf3b351f1992-01-14 18:33:22 +0000832 }
Tim Petersda1a2212002-08-11 17:54:42 +0000833 c = a << b;
834 if (a != Py_ARITHMETIC_RIGHT_SHIFT(long, c, b)) {
Raymond Hettingera006c372004-06-26 23:22:57 +0000835 vv = PyLong_FromLong(PyInt_AS_LONG(v));
836 if (vv == NULL)
837 return NULL;
838 ww = PyLong_FromLong(PyInt_AS_LONG(w));
839 if (ww == NULL) {
840 Py_DECREF(vv);
841 return NULL;
842 }
843 result = PyNumber_Lshift(vv, ww);
844 Py_DECREF(vv);
845 Py_DECREF(ww);
846 return result;
Guido van Rossum078151d2002-08-11 04:24:12 +0000847 }
848 return PyInt_FromLong(c);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000849}
850
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000851static PyObject *
Fred Drakea2f55112000-07-09 15:16:51 +0000852int_rshift(PyIntObject *v, PyIntObject *w)
Guido van Rossum7928cd71991-10-24 14:59:31 +0000853{
854 register long a, b;
Neil Schemenauer139e72a2001-01-04 01:45:33 +0000855 CONVERT_TO_LONG(v, a);
856 CONVERT_TO_LONG(w, b);
Guido van Rossumf3b351f1992-01-14 18:33:22 +0000857 if (b < 0) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000858 PyErr_SetString(PyExc_ValueError, "negative shift count");
Guido van Rossumf3b351f1992-01-14 18:33:22 +0000859 return NULL;
860 }
Tim Peters73a1dfe2001-09-11 21:44:14 +0000861 if (a == 0 || b == 0)
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +0000862 return int_int(v);
Guido van Rossum72481a31993-10-26 15:21:51 +0000863 if (b >= LONG_BIT) {
Guido van Rossumf3b351f1992-01-14 18:33:22 +0000864 if (a < 0)
865 a = -1;
866 else
867 a = 0;
868 }
869 else {
Tim Peters7d3a5112000-07-08 04:17:21 +0000870 a = Py_ARITHMETIC_RIGHT_SHIFT(long, a, b);
Guido van Rossumf3b351f1992-01-14 18:33:22 +0000871 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000872 return PyInt_FromLong(a);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000873}
874
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000875static PyObject *
Fred Drakea2f55112000-07-09 15:16:51 +0000876int_and(PyIntObject *v, PyIntObject *w)
Guido van Rossum7928cd71991-10-24 14:59:31 +0000877{
878 register long a, b;
Neil Schemenauer139e72a2001-01-04 01:45:33 +0000879 CONVERT_TO_LONG(v, a);
880 CONVERT_TO_LONG(w, b);
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000881 return PyInt_FromLong(a & b);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000882}
883
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000884static PyObject *
Fred Drakea2f55112000-07-09 15:16:51 +0000885int_xor(PyIntObject *v, PyIntObject *w)
Guido van Rossum7928cd71991-10-24 14:59:31 +0000886{
887 register long a, b;
Neil Schemenauer139e72a2001-01-04 01:45:33 +0000888 CONVERT_TO_LONG(v, a);
889 CONVERT_TO_LONG(w, b);
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000890 return PyInt_FromLong(a ^ b);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000891}
892
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000893static PyObject *
Fred Drakea2f55112000-07-09 15:16:51 +0000894int_or(PyIntObject *v, PyIntObject *w)
Guido van Rossum7928cd71991-10-24 14:59:31 +0000895{
896 register long a, b;
Neil Schemenauer139e72a2001-01-04 01:45:33 +0000897 CONVERT_TO_LONG(v, a);
898 CONVERT_TO_LONG(w, b);
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000899 return PyInt_FromLong(a | b);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000900}
901
Guido van Rossum1952e382001-09-19 01:25:16 +0000902static int
903int_coerce(PyObject **pv, PyObject **pw)
904{
905 if (PyInt_Check(*pw)) {
906 Py_INCREF(*pv);
907 Py_INCREF(*pw);
908 return 0;
909 }
910 return 1; /* Can't do it */
911}
912
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000913static PyObject *
Fred Drakea2f55112000-07-09 15:16:51 +0000914int_int(PyIntObject *v)
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000915{
Brett Cannonc3647ac2005-04-26 03:45:26 +0000916 if (PyInt_CheckExact(v))
917 Py_INCREF(v);
918 else
919 v = (PyIntObject *)PyInt_FromLong(v->ob_ival);
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000920 return (PyObject *)v;
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000921}
922
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000923static PyObject *
Fred Drakea2f55112000-07-09 15:16:51 +0000924int_long(PyIntObject *v)
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000925{
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000926 return PyLong_FromLong((v -> ob_ival));
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000927}
928
Mark Dickinson6736cf82009-04-20 21:13:33 +0000929static const unsigned char BitLengthTable[32] = {
930 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
931 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
932};
933
934static int
935bits_in_ulong(unsigned long d)
936{
937 int d_bits = 0;
938 while (d >= 32) {
939 d_bits += 6;
940 d >>= 6;
941 }
942 d_bits += (int)BitLengthTable[d];
943 return d_bits;
944}
945
946#if 8*SIZEOF_LONG-1 <= DBL_MANT_DIG
947/* Every Python int can be exactly represented as a float. */
948
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000949static PyObject *
Fred Drakea2f55112000-07-09 15:16:51 +0000950int_float(PyIntObject *v)
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000951{
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000952 return PyFloat_FromDouble((double)(v -> ob_ival));
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000953}
954
Mark Dickinson6736cf82009-04-20 21:13:33 +0000955#else
956/* Here not all Python ints are exactly representable as floats, so we may
957 have to round. We do this manually, since the C standards don't specify
958 whether converting an integer to a float rounds up or down */
959
960static PyObject *
961int_float(PyIntObject *v)
962{
963 unsigned long abs_ival, lsb;
964 int round_up;
965
966 if (v->ob_ival < 0)
967 abs_ival = 0U-(unsigned long)v->ob_ival;
968 else
969 abs_ival = (unsigned long)v->ob_ival;
970 if (abs_ival < (1L << DBL_MANT_DIG))
971 /* small integer; no need to round */
972 return PyFloat_FromDouble((double)v->ob_ival);
973
974 /* Round abs_ival to MANT_DIG significant bits, using the
975 round-half-to-even rule. abs_ival & lsb picks out the 'rounding'
976 bit: the first bit after the most significant MANT_DIG bits of
977 abs_ival. We round up if this bit is set, provided that either:
978
979 (1) abs_ival isn't exactly halfway between two floats, in which
980 case at least one of the bits following the rounding bit must be
981 set; i.e., abs_ival & lsb-1 != 0, or:
982
983 (2) the resulting rounded value has least significant bit 0; or
984 in other words the bit above the rounding bit is set (this is the
985 'to-even' bit of round-half-to-even); i.e., abs_ival & 2*lsb != 0
986
987 The condition "(1) or (2)" equates to abs_ival & 3*lsb-1 != 0. */
988
989 lsb = 1L << (bits_in_ulong(abs_ival)-DBL_MANT_DIG-1);
990 round_up = (abs_ival & lsb) && (abs_ival & (3*lsb-1));
991 abs_ival &= -2*lsb;
992 if (round_up)
993 abs_ival += 2*lsb;
994 return PyFloat_FromDouble(v->ob_ival < 0 ?
995 -(double)abs_ival :
996 (double)abs_ival);
997}
998
999#endif
1000
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001001static PyObject *
Fred Drakea2f55112000-07-09 15:16:51 +00001002int_oct(PyIntObject *v)
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001003{
Eric Smith5e527eb2008-02-10 01:36:53 +00001004 return _PyInt_Format(v, 8, 0);
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001005}
1006
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001007static PyObject *
Fred Drakea2f55112000-07-09 15:16:51 +00001008int_hex(PyIntObject *v)
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001009{
Eric Smith5e527eb2008-02-10 01:36:53 +00001010 return _PyInt_Format(v, 16, 0);
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001011}
1012
Jeremy Hylton938ace62002-07-17 16:30:39 +00001013static PyObject *
Guido van Rossumbef14172001-08-29 15:47:46 +00001014int_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
1015
Tim Peters6d6c1a32001-08-02 04:15:00 +00001016static PyObject *
1017int_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
1018{
1019 PyObject *x = NULL;
1020 int base = -909;
Martin v. Löwis15e62742006-02-27 16:46:16 +00001021 static char *kwlist[] = {"x", "base", 0};
Tim Peters6d6c1a32001-08-02 04:15:00 +00001022
Guido van Rossumbef14172001-08-29 15:47:46 +00001023 if (type != &PyInt_Type)
1024 return int_subtype_new(type, args, kwds); /* Wimp out */
Tim Peters6d6c1a32001-08-02 04:15:00 +00001025 if (!PyArg_ParseTupleAndKeywords(args, kwds, "|Oi:int", kwlist,
1026 &x, &base))
1027 return NULL;
1028 if (x == NULL)
1029 return PyInt_FromLong(0L);
1030 if (base == -909)
1031 return PyNumber_Int(x);
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001032 if (PyString_Check(x)) {
Georg Brandl2c1375c2006-10-12 11:27:59 +00001033 /* Since PyInt_FromString doesn't have a length parameter,
1034 * check here for possible NULs in the string. */
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001035 char *string = PyString_AS_STRING(x);
1036 if (strlen(string) != PyString_Size(x)) {
Georg Brandl2c1375c2006-10-12 11:27:59 +00001037 /* create a repr() of the input string,
1038 * just like PyInt_FromString does */
1039 PyObject *srepr;
1040 srepr = PyObject_Repr(x);
1041 if (srepr == NULL)
1042 return NULL;
1043 PyErr_Format(PyExc_ValueError,
1044 "invalid literal for int() with base %d: %s",
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001045 base, PyString_AS_STRING(srepr));
Georg Brandl2c1375c2006-10-12 11:27:59 +00001046 Py_DECREF(srepr);
1047 return NULL;
1048 }
1049 return PyInt_FromString(string, NULL, base);
1050 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001051#ifdef Py_USING_UNICODE
Tim Peters6d6c1a32001-08-02 04:15:00 +00001052 if (PyUnicode_Check(x))
1053 return PyInt_FromUnicode(PyUnicode_AS_UNICODE(x),
1054 PyUnicode_GET_SIZE(x),
1055 base);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001056#endif
Tim Peters6d6c1a32001-08-02 04:15:00 +00001057 PyErr_SetString(PyExc_TypeError,
1058 "int() can't convert non-string with explicit base");
1059 return NULL;
1060}
1061
Guido van Rossumbef14172001-08-29 15:47:46 +00001062/* Wimpy, slow approach to tp_new calls for subtypes of int:
1063 first create a regular int from whatever arguments we got,
1064 then allocate a subtype instance and initialize its ob_ival
1065 from the regular int. The regular int is then thrown away.
1066*/
1067static PyObject *
1068int_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
1069{
Anthony Baxter377be112006-04-11 06:54:30 +00001070 PyObject *tmp, *newobj;
Neal Norwitzde8b94c2003-02-10 02:12:43 +00001071 long ival;
Guido van Rossumbef14172001-08-29 15:47:46 +00001072
1073 assert(PyType_IsSubtype(type, &PyInt_Type));
1074 tmp = int_new(&PyInt_Type, args, kwds);
1075 if (tmp == NULL)
1076 return NULL;
Neal Norwitzde8b94c2003-02-10 02:12:43 +00001077 if (!PyInt_Check(tmp)) {
Neal Norwitzde8b94c2003-02-10 02:12:43 +00001078 ival = PyLong_AsLong(tmp);
Michael W. Hudson71665dc2003-08-11 17:32:02 +00001079 if (ival == -1 && PyErr_Occurred()) {
1080 Py_DECREF(tmp);
Neal Norwitzde8b94c2003-02-10 02:12:43 +00001081 return NULL;
Michael W. Hudson71665dc2003-08-11 17:32:02 +00001082 }
Neal Norwitzde8b94c2003-02-10 02:12:43 +00001083 } else {
1084 ival = ((PyIntObject *)tmp)->ob_ival;
1085 }
1086
Anthony Baxter377be112006-04-11 06:54:30 +00001087 newobj = type->tp_alloc(type, 0);
1088 if (newobj == NULL) {
Raymond Hettingerf4667932003-06-28 20:04:25 +00001089 Py_DECREF(tmp);
Guido van Rossumbef14172001-08-29 15:47:46 +00001090 return NULL;
Raymond Hettingerf4667932003-06-28 20:04:25 +00001091 }
Anthony Baxter377be112006-04-11 06:54:30 +00001092 ((PyIntObject *)newobj)->ob_ival = ival;
Guido van Rossumbef14172001-08-29 15:47:46 +00001093 Py_DECREF(tmp);
Anthony Baxter377be112006-04-11 06:54:30 +00001094 return newobj;
Guido van Rossumbef14172001-08-29 15:47:46 +00001095}
1096
Guido van Rossum5d9113d2003-01-29 17:58:45 +00001097static PyObject *
1098int_getnewargs(PyIntObject *v)
1099{
1100 return Py_BuildValue("(l)", v->ob_ival);
1101}
1102
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001103static PyObject *
Mark Dickinson85e269b2009-05-03 20:39:06 +00001104int_get0(PyIntObject *v, void *context) {
1105 return PyInt_FromLong(0L);
1106}
1107
1108static PyObject *
1109int_get1(PyIntObject *v, void *context) {
1110 return PyInt_FromLong(1L);
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001111}
1112
Mark Dickinson4b9d4732009-09-27 16:05:21 +00001113/* Convert an integer to a decimal string. On many platforms, this
1114 will be significantly faster than the general arbitrary-base
1115 conversion machinery in _PyInt_Format, thanks to optimization
1116 opportunities offered by division by a compile-time constant. */
1117static PyObject *
1118int_to_decimal_string(PyIntObject *v) {
1119 char buf[sizeof(long)*CHAR_BIT/3+6], *p, *bufend;
1120 long n = v->ob_ival;
1121 unsigned long absn;
1122 p = bufend = buf + sizeof(buf);
Mark Dickinson3d6790e2009-11-16 19:17:16 +00001123 absn = n < 0 ? 0UL - n : n;
Mark Dickinson4b9d4732009-09-27 16:05:21 +00001124 do {
1125 *--p = '0' + absn % 10;
1126 absn /= 10;
1127 } while (absn);
1128 if (n < 0)
1129 *--p = '-';
1130 return PyString_FromStringAndSize(p, bufend - p);
1131}
1132
Eric Smith5e527eb2008-02-10 01:36:53 +00001133/* Convert an integer to the given base. Returns a string.
1134 If base is 2, 8 or 16, add the proper prefix '0b', '0o' or '0x'.
1135 If newstyle is zero, then use the pre-2.6 behavior of octal having
1136 a leading "0" */
1137PyAPI_FUNC(PyObject*)
1138_PyInt_Format(PyIntObject *v, int base, int newstyle)
1139{
1140 /* There are no doubt many, many ways to optimize this, using code
1141 similar to _PyLong_Format */
1142 long n = v->ob_ival;
1143 int negative = n < 0;
1144 int is_zero = n == 0;
1145
1146 /* For the reasoning behind this size, see
1147 http://c-faq.com/misc/hexio.html. Then, add a few bytes for
1148 the possible sign and prefix "0[box]" */
1149 char buf[sizeof(n)*CHAR_BIT+6];
1150
1151 /* Start by pointing to the end of the buffer. We fill in from
1152 the back forward. */
1153 char* p = &buf[sizeof(buf)];
1154
1155 assert(base >= 2 && base <= 36);
1156
Mark Dickinson4b9d4732009-09-27 16:05:21 +00001157 /* Special case base 10, for speed */
1158 if (base == 10)
1159 return int_to_decimal_string(v);
1160
Eric Smith5e527eb2008-02-10 01:36:53 +00001161 do {
1162 /* I'd use i_divmod, except it doesn't produce the results
1163 I want when n is negative. So just duplicate the salient
1164 part here. */
1165 long div = n / base;
1166 long mod = n - div * base;
1167
1168 /* convert abs(mod) to the right character in [0-9, a-z] */
1169 char cdigit = (char)(mod < 0 ? -mod : mod);
1170 cdigit += (cdigit < 10) ? '0' : 'a'-10;
1171 *--p = cdigit;
1172
1173 n = div;
1174 } while(n);
1175
1176 if (base == 2) {
1177 *--p = 'b';
1178 *--p = '0';
1179 }
1180 else if (base == 8) {
1181 if (newstyle) {
1182 *--p = 'o';
1183 *--p = '0';
1184 }
1185 else
1186 if (!is_zero)
1187 *--p = '0';
1188 }
1189 else if (base == 16) {
1190 *--p = 'x';
1191 *--p = '0';
1192 }
Mark Dickinson4b9d4732009-09-27 16:05:21 +00001193 else {
Eric Smith5e527eb2008-02-10 01:36:53 +00001194 *--p = '#';
1195 *--p = '0' + base%10;
1196 if (base > 10)
1197 *--p = '0' + base/10;
1198 }
1199 if (negative)
1200 *--p = '-';
1201
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001202 return PyString_FromStringAndSize(p, &buf[sizeof(buf)] - p);
Eric Smith5e527eb2008-02-10 01:36:53 +00001203}
1204
Eric Smitha9f7d622008-02-17 19:46:49 +00001205static PyObject *
1206int__format__(PyObject *self, PyObject *args)
1207{
1208 PyObject *format_spec;
1209
1210 if (!PyArg_ParseTuple(args, "O:__format__", &format_spec))
1211 return NULL;
Christian Heimes593daf52008-05-26 12:51:38 +00001212 if (PyBytes_Check(format_spec))
Eric Smithdc13b792008-05-30 18:10:04 +00001213 return _PyInt_FormatAdvanced(self,
1214 PyBytes_AS_STRING(format_spec),
1215 PyBytes_GET_SIZE(format_spec));
Eric Smitha9f7d622008-02-17 19:46:49 +00001216 if (PyUnicode_Check(format_spec)) {
1217 /* Convert format_spec to a str */
Eric Smithdc13b792008-05-30 18:10:04 +00001218 PyObject *result;
1219 PyObject *str_spec = PyObject_Str(format_spec);
Eric Smitha9f7d622008-02-17 19:46:49 +00001220
Eric Smithdc13b792008-05-30 18:10:04 +00001221 if (str_spec == NULL)
1222 return NULL;
Eric Smitha9f7d622008-02-17 19:46:49 +00001223
Eric Smithdc13b792008-05-30 18:10:04 +00001224 result = _PyInt_FormatAdvanced(self,
1225 PyBytes_AS_STRING(str_spec),
1226 PyBytes_GET_SIZE(str_spec));
Eric Smitha9f7d622008-02-17 19:46:49 +00001227
Eric Smithdc13b792008-05-30 18:10:04 +00001228 Py_DECREF(str_spec);
Eric Smitha9f7d622008-02-17 19:46:49 +00001229 return result;
1230 }
1231 PyErr_SetString(PyExc_TypeError, "__format__ requires str or unicode");
1232 return NULL;
1233}
1234
Mark Dickinson1a707982008-12-17 16:14:37 +00001235static PyObject *
1236int_bit_length(PyIntObject *v)
1237{
1238 unsigned long n;
Mark Dickinson1a707982008-12-17 16:14:37 +00001239
1240 if (v->ob_ival < 0)
1241 /* avoid undefined behaviour when v->ob_ival == -LONG_MAX-1 */
1242 n = 0U-(unsigned long)v->ob_ival;
1243 else
1244 n = (unsigned long)v->ob_ival;
1245
Mark Dickinson6736cf82009-04-20 21:13:33 +00001246 return PyInt_FromLong(bits_in_ulong(n));
Mark Dickinson1a707982008-12-17 16:14:37 +00001247}
1248
1249PyDoc_STRVAR(int_bit_length_doc,
1250"int.bit_length() -> int\n\
1251\n\
1252Number of bits necessary to represent self in binary.\n\
1253>>> bin(37)\n\
1254'0b100101'\n\
1255>>> (37).bit_length()\n\
12566");
1257
Christian Heimes6f341092008-04-18 23:13:07 +00001258#if 0
1259static PyObject *
1260int_is_finite(PyObject *v)
1261{
1262 Py_RETURN_TRUE;
1263}
1264#endif
1265
Guido van Rossum5d9113d2003-01-29 17:58:45 +00001266static PyMethodDef int_methods[] = {
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001267 {"conjugate", (PyCFunction)int_int, METH_NOARGS,
1268 "Returns self, the complex conjugate of any int."},
Mark Dickinson1a707982008-12-17 16:14:37 +00001269 {"bit_length", (PyCFunction)int_bit_length, METH_NOARGS,
1270 int_bit_length_doc},
Christian Heimes6f341092008-04-18 23:13:07 +00001271#if 0
1272 {"is_finite", (PyCFunction)int_is_finite, METH_NOARGS,
1273 "Returns always True."},
1274#endif
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001275 {"__trunc__", (PyCFunction)int_int, METH_NOARGS,
1276 "Truncating an Integral returns itself."},
Guido van Rossum5d9113d2003-01-29 17:58:45 +00001277 {"__getnewargs__", (PyCFunction)int_getnewargs, METH_NOARGS},
Eric Smitha9f7d622008-02-17 19:46:49 +00001278 {"__format__", (PyCFunction)int__format__, METH_VARARGS},
Guido van Rossum5d9113d2003-01-29 17:58:45 +00001279 {NULL, NULL} /* sentinel */
1280};
1281
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001282static PyGetSetDef int_getset[] = {
Mark Dickinson85e269b2009-05-03 20:39:06 +00001283 {"real",
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001284 (getter)int_int, (setter)NULL,
1285 "the real part of a complex number",
1286 NULL},
Mark Dickinson85e269b2009-05-03 20:39:06 +00001287 {"imag",
1288 (getter)int_get0, (setter)NULL,
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001289 "the imaginary part of a complex number",
Mark Dickinson85e269b2009-05-03 20:39:06 +00001290 NULL},
1291 {"numerator",
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001292 (getter)int_int, (setter)NULL,
1293 "the numerator of a rational number in lowest terms",
1294 NULL},
Mark Dickinson85e269b2009-05-03 20:39:06 +00001295 {"denominator",
1296 (getter)int_get1, (setter)NULL,
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001297 "the denominator of a rational number in lowest terms",
Mark Dickinson85e269b2009-05-03 20:39:06 +00001298 NULL},
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001299 {NULL} /* Sentinel */
1300};
1301
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001302PyDoc_STRVAR(int_doc,
Tim Peters6d6c1a32001-08-02 04:15:00 +00001303"int(x[, base]) -> integer\n\
1304\n\
1305Convert a string or number to an integer, if possible. A floating point\n\
1306argument will be truncated towards zero (this does not include a string\n\
1307representation of a floating point number!) When converting a string, use\n\
1308the optional base. It is an error to supply a base when converting a\n\
Gustavo Niemeyer37e65022007-01-10 16:15:48 +00001309non-string. If base is zero, the proper base is guessed based on the\n\
Gustavo Niemeyera443bc82007-01-10 16:13:40 +00001310string content. If the argument is outside the integer range a\n\
1311long object will be returned instead.");
Tim Peters6d6c1a32001-08-02 04:15:00 +00001312
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001313static PyNumberMethods int_as_number = {
Neil Schemenauer139e72a2001-01-04 01:45:33 +00001314 (binaryfunc)int_add, /*nb_add*/
1315 (binaryfunc)int_sub, /*nb_subtract*/
1316 (binaryfunc)int_mul, /*nb_multiply*/
Guido van Rossum393661d2001-08-31 17:40:15 +00001317 (binaryfunc)int_classic_div, /*nb_divide*/
Neil Schemenauer139e72a2001-01-04 01:45:33 +00001318 (binaryfunc)int_mod, /*nb_remainder*/
1319 (binaryfunc)int_divmod, /*nb_divmod*/
1320 (ternaryfunc)int_pow, /*nb_power*/
1321 (unaryfunc)int_neg, /*nb_negative*/
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001322 (unaryfunc)int_int, /*nb_positive*/
Neil Schemenauer139e72a2001-01-04 01:45:33 +00001323 (unaryfunc)int_abs, /*nb_absolute*/
1324 (inquiry)int_nonzero, /*nb_nonzero*/
1325 (unaryfunc)int_invert, /*nb_invert*/
1326 (binaryfunc)int_lshift, /*nb_lshift*/
1327 (binaryfunc)int_rshift, /*nb_rshift*/
1328 (binaryfunc)int_and, /*nb_and*/
1329 (binaryfunc)int_xor, /*nb_xor*/
1330 (binaryfunc)int_or, /*nb_or*/
Guido van Rossum1952e382001-09-19 01:25:16 +00001331 int_coerce, /*nb_coerce*/
Neil Schemenauer139e72a2001-01-04 01:45:33 +00001332 (unaryfunc)int_int, /*nb_int*/
1333 (unaryfunc)int_long, /*nb_long*/
1334 (unaryfunc)int_float, /*nb_float*/
1335 (unaryfunc)int_oct, /*nb_oct*/
1336 (unaryfunc)int_hex, /*nb_hex*/
1337 0, /*nb_inplace_add*/
1338 0, /*nb_inplace_subtract*/
1339 0, /*nb_inplace_multiply*/
1340 0, /*nb_inplace_divide*/
1341 0, /*nb_inplace_remainder*/
1342 0, /*nb_inplace_power*/
1343 0, /*nb_inplace_lshift*/
1344 0, /*nb_inplace_rshift*/
1345 0, /*nb_inplace_and*/
1346 0, /*nb_inplace_xor*/
1347 0, /*nb_inplace_or*/
Guido van Rossum4668b002001-08-08 05:00:18 +00001348 (binaryfunc)int_div, /* nb_floor_divide */
1349 int_true_divide, /* nb_true_divide */
1350 0, /* nb_inplace_floor_divide */
1351 0, /* nb_inplace_true_divide */
Neal Norwitz8a87f5d2006-08-12 17:03:09 +00001352 (unaryfunc)int_int, /* nb_index */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001353};
1354
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001355PyTypeObject PyInt_Type = {
Martin v. Löwis68192102007-07-21 06:55:02 +00001356 PyVarObject_HEAD_INIT(&PyType_Type, 0)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001357 "int",
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001358 sizeof(PyIntObject),
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001359 0,
Tim Peters6d6c1a32001-08-02 04:15:00 +00001360 (destructor)int_dealloc, /* tp_dealloc */
1361 (printfunc)int_print, /* tp_print */
1362 0, /* tp_getattr */
1363 0, /* tp_setattr */
1364 (cmpfunc)int_compare, /* tp_compare */
Mark Dickinson4b9d4732009-09-27 16:05:21 +00001365 (reprfunc)int_to_decimal_string, /* tp_repr */
Tim Peters6d6c1a32001-08-02 04:15:00 +00001366 &int_as_number, /* tp_as_number */
1367 0, /* tp_as_sequence */
1368 0, /* tp_as_mapping */
1369 (hashfunc)int_hash, /* tp_hash */
Mark Dickinson4b9d4732009-09-27 16:05:21 +00001370 0, /* tp_call */
1371 (reprfunc)int_to_decimal_string, /* tp_str */
Tim Peters6d6c1a32001-08-02 04:15:00 +00001372 PyObject_GenericGetAttr, /* tp_getattro */
1373 0, /* tp_setattro */
1374 0, /* tp_as_buffer */
Guido van Rossumbef14172001-08-29 15:47:46 +00001375 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES |
Neal Norwitzee3a1b52007-02-25 19:44:48 +00001376 Py_TPFLAGS_BASETYPE | Py_TPFLAGS_INT_SUBCLASS, /* tp_flags */
Tim Peters6d6c1a32001-08-02 04:15:00 +00001377 int_doc, /* tp_doc */
1378 0, /* tp_traverse */
1379 0, /* tp_clear */
1380 0, /* tp_richcompare */
1381 0, /* tp_weaklistoffset */
1382 0, /* tp_iter */
1383 0, /* tp_iternext */
Guido van Rossum5d9113d2003-01-29 17:58:45 +00001384 int_methods, /* tp_methods */
Tim Peters6d6c1a32001-08-02 04:15:00 +00001385 0, /* tp_members */
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001386 int_getset, /* tp_getset */
Tim Peters6d6c1a32001-08-02 04:15:00 +00001387 0, /* tp_base */
1388 0, /* tp_dict */
1389 0, /* tp_descr_get */
1390 0, /* tp_descr_set */
1391 0, /* tp_dictoffset */
1392 0, /* tp_init */
1393 0, /* tp_alloc */
1394 int_new, /* tp_new */
Guido van Rossum93646982002-04-26 00:53:34 +00001395 (freefunc)int_free, /* tp_free */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001396};
Guido van Rossumfbbd57e1997-08-05 02:16:08 +00001397
Neal Norwitzc91ed402002-12-30 22:29:22 +00001398int
Neal Norwitzb2501f42002-12-31 03:42:13 +00001399_PyInt_Init(void)
Neal Norwitzc91ed402002-12-30 22:29:22 +00001400{
1401 PyIntObject *v;
1402 int ival;
1403#if NSMALLNEGINTS + NSMALLPOSINTS > 0
1404 for (ival = -NSMALLNEGINTS; ival < NSMALLPOSINTS; ival++) {
Raymond Hettingerb32e6402004-02-08 18:54:37 +00001405 if (!free_list && (free_list = fill_free_list()) == NULL)
Neal Norwitzc91ed402002-12-30 22:29:22 +00001406 return 0;
1407 /* PyObject_New is inlined */
1408 v = free_list;
Christian Heimese93237d2007-12-19 02:37:44 +00001409 free_list = (PyIntObject *)Py_TYPE(v);
Neal Norwitzc91ed402002-12-30 22:29:22 +00001410 PyObject_INIT(v, &PyInt_Type);
1411 v->ob_ival = ival;
1412 small_ints[ival + NSMALLNEGINTS] = v;
1413 }
1414#endif
1415 return 1;
1416}
1417
Gregory P. Smith2fe77062008-07-06 03:35:58 +00001418int
1419PyInt_ClearFreeList(void)
Guido van Rossumfbbd57e1997-08-05 02:16:08 +00001420{
Guido van Rossum3fce8831999-03-12 19:43:17 +00001421 PyIntObject *p;
1422 PyIntBlock *list, *next;
Gregory P. Smith2fe77062008-07-06 03:35:58 +00001423 int i;
1424 int u; /* remaining unfreed ints per block */
1425 int freelist_size = 0;
Guido van Rossumfbbd57e1997-08-05 02:16:08 +00001426
Guido van Rossumda084ed1999-03-10 22:55:24 +00001427 list = block_list;
1428 block_list = NULL;
Guido van Rossum51288bc1999-03-19 20:30:39 +00001429 free_list = NULL;
Guido van Rossumda084ed1999-03-10 22:55:24 +00001430 while (list != NULL) {
Gregory P. Smith2fe77062008-07-06 03:35:58 +00001431 u = 0;
1432 for (i = 0, p = &list->objects[0];
1433 i < N_INTOBJECTS;
1434 i++, p++) {
Guido van Rossumdea6ef92001-09-11 16:13:52 +00001435 if (PyInt_CheckExact(p) && p->ob_refcnt != 0)
Gregory P. Smith2fe77062008-07-06 03:35:58 +00001436 u++;
Guido van Rossumda084ed1999-03-10 22:55:24 +00001437 }
Guido van Rossum3fce8831999-03-12 19:43:17 +00001438 next = list->next;
Gregory P. Smith2fe77062008-07-06 03:35:58 +00001439 if (u) {
Guido van Rossum3fce8831999-03-12 19:43:17 +00001440 list->next = block_list;
1441 block_list = list;
Gregory P. Smith2fe77062008-07-06 03:35:58 +00001442 for (i = 0, p = &list->objects[0];
1443 i < N_INTOBJECTS;
1444 i++, p++) {
Guido van Rossumdea6ef92001-09-11 16:13:52 +00001445 if (!PyInt_CheckExact(p) ||
Guido van Rossumbef14172001-08-29 15:47:46 +00001446 p->ob_refcnt == 0) {
Christian Heimese93237d2007-12-19 02:37:44 +00001447 Py_TYPE(p) = (struct _typeobject *)
Guido van Rossum51288bc1999-03-19 20:30:39 +00001448 free_list;
1449 free_list = p;
1450 }
1451#if NSMALLNEGINTS + NSMALLPOSINTS > 0
1452 else if (-NSMALLNEGINTS <= p->ob_ival &&
1453 p->ob_ival < NSMALLPOSINTS &&
1454 small_ints[p->ob_ival +
1455 NSMALLNEGINTS] == NULL) {
1456 Py_INCREF(p);
1457 small_ints[p->ob_ival +
1458 NSMALLNEGINTS] = p;
1459 }
1460#endif
1461 }
Guido van Rossumda084ed1999-03-10 22:55:24 +00001462 }
1463 else {
Tim Peters29c0afc2002-04-28 16:57:34 +00001464 PyMem_FREE(list);
Guido van Rossumda084ed1999-03-10 22:55:24 +00001465 }
Gregory P. Smith2fe77062008-07-06 03:35:58 +00001466 freelist_size += u;
Guido van Rossum3fce8831999-03-12 19:43:17 +00001467 list = next;
Guido van Rossumda084ed1999-03-10 22:55:24 +00001468 }
Christian Heimes422051a2008-02-04 18:00:12 +00001469
Gregory P. Smith2fe77062008-07-06 03:35:58 +00001470 return freelist_size;
Christian Heimes422051a2008-02-04 18:00:12 +00001471}
1472
1473void
1474PyInt_Fini(void)
1475{
1476 PyIntObject *p;
1477 PyIntBlock *list;
Gregory P. Smith2fe77062008-07-06 03:35:58 +00001478 int i;
1479 int u; /* total unfreed ints per block */
Christian Heimes422051a2008-02-04 18:00:12 +00001480
1481#if NSMALLNEGINTS + NSMALLPOSINTS > 0
Christian Heimes422051a2008-02-04 18:00:12 +00001482 PyIntObject **q;
1483
1484 i = NSMALLNEGINTS + NSMALLPOSINTS;
1485 q = small_ints;
1486 while (--i >= 0) {
1487 Py_XDECREF(*q);
1488 *q++ = NULL;
1489 }
1490#endif
Gregory P. Smith2fe77062008-07-06 03:35:58 +00001491 u = PyInt_ClearFreeList();
Guido van Rossum3fce8831999-03-12 19:43:17 +00001492 if (!Py_VerboseFlag)
1493 return;
1494 fprintf(stderr, "# cleanup ints");
Gregory P. Smith2fe77062008-07-06 03:35:58 +00001495 if (!u) {
Guido van Rossum3fce8831999-03-12 19:43:17 +00001496 fprintf(stderr, "\n");
1497 }
1498 else {
1499 fprintf(stderr,
Gregory P. Smith2fe77062008-07-06 03:35:58 +00001500 ": %d unfreed int%s\n",
1501 u, u == 1 ? "" : "s");
Guido van Rossum3fce8831999-03-12 19:43:17 +00001502 }
1503 if (Py_VerboseFlag > 1) {
1504 list = block_list;
1505 while (list != NULL) {
Gregory P. Smith2fe77062008-07-06 03:35:58 +00001506 for (i = 0, p = &list->objects[0];
1507 i < N_INTOBJECTS;
1508 i++, p++) {
Guido van Rossumdea6ef92001-09-11 16:13:52 +00001509 if (PyInt_CheckExact(p) && p->ob_refcnt != 0)
Thomas Wouters8b87a0b2006-03-01 05:41:20 +00001510 /* XXX(twouters) cast refcount to
1511 long until %zd is universally
1512 available
1513 */
Guido van Rossum3fce8831999-03-12 19:43:17 +00001514 fprintf(stderr,
Thomas Wouters8b87a0b2006-03-01 05:41:20 +00001515 "# <int at %p, refcnt=%ld, val=%ld>\n",
1516 p, (long)p->ob_refcnt,
1517 p->ob_ival);
Guido van Rossum3fce8831999-03-12 19:43:17 +00001518 }
1519 list = list->next;
Guido van Rossumda084ed1999-03-10 22:55:24 +00001520 }
1521 }
Guido van Rossumfbbd57e1997-08-05 02:16:08 +00001522}