symbian-qemu-0.9.1-12/python-2.6.1/Objects/intobject.c
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 
       
     2 /* Integer object implementation */
       
     3 
       
     4 #include "Python.h"
       
     5 #include <ctype.h>
       
     6 
       
     7 static PyObject *int_int(PyIntObject *v);
       
     8 
       
     9 long
       
    10 PyInt_GetMax(void)
       
    11 {
       
    12 	return LONG_MAX;	/* To initialize sys.maxint */
       
    13 }
       
    14 
       
    15 /* Integers are quite normal objects, to make object handling uniform.
       
    16    (Using odd pointers to represent integers would save much space
       
    17    but require extra checks for this special case throughout the code.)
       
    18    Since a typical Python program spends much of its time allocating
       
    19    and deallocating integers, these operations should be very fast.
       
    20    Therefore we use a dedicated allocation scheme with a much lower
       
    21    overhead (in space and time) than straight malloc(): a simple
       
    22    dedicated free list, filled when necessary with memory from malloc().
       
    23 
       
    24    block_list is a singly-linked list of all PyIntBlocks ever allocated,
       
    25    linked via their next members.  PyIntBlocks are never returned to the
       
    26    system before shutdown (PyInt_Fini).
       
    27 
       
    28    free_list is a singly-linked list of available PyIntObjects, linked
       
    29    via abuse of their ob_type members.
       
    30 */
       
    31 
       
    32 #define BLOCK_SIZE	1000	/* 1K less typical malloc overhead */
       
    33 #define BHEAD_SIZE	8	/* Enough for a 64-bit pointer */
       
    34 #define N_INTOBJECTS	((BLOCK_SIZE - BHEAD_SIZE) / sizeof(PyIntObject))
       
    35 
       
    36 struct _intblock {
       
    37 	struct _intblock *next;
       
    38 	PyIntObject objects[N_INTOBJECTS];
       
    39 };
       
    40 
       
    41 typedef struct _intblock PyIntBlock;
       
    42 
       
    43 static PyIntBlock *block_list = NULL;
       
    44 static PyIntObject *free_list = NULL;
       
    45 
       
    46 static PyIntObject *
       
    47 fill_free_list(void)
       
    48 {
       
    49 	PyIntObject *p, *q;
       
    50 	/* Python's object allocator isn't appropriate for large blocks. */
       
    51 	p = (PyIntObject *) PyMem_MALLOC(sizeof(PyIntBlock));
       
    52 	if (p == NULL)
       
    53 		return (PyIntObject *) PyErr_NoMemory();
       
    54 	((PyIntBlock *)p)->next = block_list;
       
    55 	block_list = (PyIntBlock *)p;
       
    56 	/* Link the int objects together, from rear to front, then return
       
    57 	   the address of the last int object in the block. */
       
    58 	p = &((PyIntBlock *)p)->objects[0];
       
    59 	q = p + N_INTOBJECTS;
       
    60 	while (--q > p)
       
    61 		Py_TYPE(q) = (struct _typeobject *)(q-1);
       
    62 	Py_TYPE(q) = NULL;
       
    63 	return p + N_INTOBJECTS - 1;
       
    64 }
       
    65 
       
    66 #ifndef NSMALLPOSINTS
       
    67 #define NSMALLPOSINTS		257
       
    68 #endif
       
    69 #ifndef NSMALLNEGINTS
       
    70 #define NSMALLNEGINTS		5
       
    71 #endif
       
    72 #if NSMALLNEGINTS + NSMALLPOSINTS > 0
       
    73 /* References to small integers are saved in this array so that they
       
    74    can be shared.
       
    75    The integers that are saved are those in the range
       
    76    -NSMALLNEGINTS (inclusive) to NSMALLPOSINTS (not inclusive).
       
    77 */
       
    78 static PyIntObject *small_ints[NSMALLNEGINTS + NSMALLPOSINTS];
       
    79 #endif
       
    80 #ifdef COUNT_ALLOCS
       
    81 int quick_int_allocs, quick_neg_int_allocs;
       
    82 #endif
       
    83 
       
    84 PyObject *
       
    85 PyInt_FromLong(long ival)
       
    86 {
       
    87 	register PyIntObject *v;
       
    88 #if NSMALLNEGINTS + NSMALLPOSINTS > 0
       
    89 	if (-NSMALLNEGINTS <= ival && ival < NSMALLPOSINTS) {
       
    90 		v = small_ints[ival + NSMALLNEGINTS];
       
    91 		Py_INCREF(v);
       
    92 #ifdef COUNT_ALLOCS
       
    93 		if (ival >= 0)
       
    94 			quick_int_allocs++;
       
    95 		else
       
    96 			quick_neg_int_allocs++;
       
    97 #endif
       
    98 		return (PyObject *) v;
       
    99 	}
       
   100 #endif
       
   101 	if (free_list == NULL) {
       
   102 		if ((free_list = fill_free_list()) == NULL)
       
   103 			return NULL;
       
   104 	}
       
   105 	/* Inline PyObject_New */
       
   106 	v = free_list;
       
   107 	free_list = (PyIntObject *)Py_TYPE(v);
       
   108 	PyObject_INIT(v, &PyInt_Type);
       
   109 	v->ob_ival = ival;
       
   110 	return (PyObject *) v;
       
   111 }
       
   112 
       
   113 PyObject *
       
   114 PyInt_FromSize_t(size_t ival)
       
   115 {
       
   116 	if (ival <= LONG_MAX)
       
   117 		return PyInt_FromLong((long)ival);
       
   118 	return _PyLong_FromSize_t(ival);
       
   119 }
       
   120 
       
   121 PyObject *
       
   122 PyInt_FromSsize_t(Py_ssize_t ival)
       
   123 {
       
   124 	if (ival >= LONG_MIN && ival <= LONG_MAX)
       
   125 		return PyInt_FromLong((long)ival);
       
   126 	return _PyLong_FromSsize_t(ival);
       
   127 }
       
   128 
       
   129 static void
       
   130 int_dealloc(PyIntObject *v)
       
   131 {
       
   132 	if (PyInt_CheckExact(v)) {
       
   133 		Py_TYPE(v) = (struct _typeobject *)free_list;
       
   134 		free_list = v;
       
   135 	}
       
   136 	else
       
   137 		Py_TYPE(v)->tp_free((PyObject *)v);
       
   138 }
       
   139 
       
   140 static void
       
   141 int_free(PyIntObject *v)
       
   142 {
       
   143 	Py_TYPE(v) = (struct _typeobject *)free_list;
       
   144 	free_list = v;
       
   145 }
       
   146 
       
   147 long
       
   148 PyInt_AsLong(register PyObject *op)
       
   149 {
       
   150 	PyNumberMethods *nb;
       
   151 	PyIntObject *io;
       
   152 	long val;
       
   153 
       
   154 	if (op && PyInt_Check(op))
       
   155 		return PyInt_AS_LONG((PyIntObject*) op);
       
   156 
       
   157 	if (op == NULL || (nb = Py_TYPE(op)->tp_as_number) == NULL ||
       
   158 	    nb->nb_int == NULL) {
       
   159 		PyErr_SetString(PyExc_TypeError, "an integer is required");
       
   160 		return -1;
       
   161 	}
       
   162 
       
   163 	io = (PyIntObject*) (*nb->nb_int) (op);
       
   164 	if (io == NULL)
       
   165 		return -1;
       
   166 	if (!PyInt_Check(io)) {
       
   167 		if (PyLong_Check(io)) {
       
   168 			/* got a long? => retry int conversion */
       
   169 			val = PyLong_AsLong((PyObject *)io);
       
   170 			Py_DECREF(io);
       
   171 			if ((val == -1) && PyErr_Occurred())
       
   172 				return -1;
       
   173 			return val;
       
   174 		}
       
   175 		else
       
   176 		{
       
   177 			Py_DECREF(io);
       
   178 			PyErr_SetString(PyExc_TypeError,
       
   179 					"nb_int should return int object");
       
   180 			return -1;
       
   181 		}
       
   182 	}
       
   183 
       
   184 	val = PyInt_AS_LONG(io);
       
   185 	Py_DECREF(io);
       
   186 
       
   187 	return val;
       
   188 }
       
   189 
       
   190 Py_ssize_t
       
   191 PyInt_AsSsize_t(register PyObject *op)
       
   192 {
       
   193 #if SIZEOF_SIZE_T != SIZEOF_LONG
       
   194 	PyNumberMethods *nb;
       
   195 	PyIntObject *io;
       
   196 	Py_ssize_t val;
       
   197 #endif
       
   198 
       
   199 	if (op == NULL) {
       
   200 		PyErr_SetString(PyExc_TypeError, "an integer is required");
       
   201 		return -1;
       
   202 	}
       
   203 
       
   204 	if (PyInt_Check(op))
       
   205 		return PyInt_AS_LONG((PyIntObject*) op);
       
   206 	if (PyLong_Check(op))
       
   207 		return _PyLong_AsSsize_t(op);
       
   208 #if SIZEOF_SIZE_T == SIZEOF_LONG
       
   209 	return PyInt_AsLong(op);
       
   210 #else
       
   211 
       
   212 	if ((nb = Py_TYPE(op)->tp_as_number) == NULL ||
       
   213 	    (nb->nb_int == NULL && nb->nb_long == 0)) {
       
   214 		PyErr_SetString(PyExc_TypeError, "an integer is required");
       
   215 		return -1;
       
   216 	}
       
   217 
       
   218 	if (nb->nb_long != 0)
       
   219 		io = (PyIntObject*) (*nb->nb_long) (op);
       
   220 	else
       
   221 		io = (PyIntObject*) (*nb->nb_int) (op);
       
   222 	if (io == NULL)
       
   223 		return -1;
       
   224 	if (!PyInt_Check(io)) {
       
   225 		if (PyLong_Check(io)) {
       
   226 			/* got a long? => retry int conversion */
       
   227 			val = _PyLong_AsSsize_t((PyObject *)io);
       
   228 			Py_DECREF(io);
       
   229 			if ((val == -1) && PyErr_Occurred())
       
   230 				return -1;
       
   231 			return val;
       
   232 		}
       
   233 		else
       
   234 		{
       
   235 			Py_DECREF(io);
       
   236 			PyErr_SetString(PyExc_TypeError,
       
   237 					"nb_int should return int object");
       
   238 			return -1;
       
   239 		}
       
   240 	}
       
   241 
       
   242 	val = PyInt_AS_LONG(io);
       
   243 	Py_DECREF(io);
       
   244 
       
   245 	return val;
       
   246 #endif
       
   247 }
       
   248 
       
   249 unsigned long
       
   250 PyInt_AsUnsignedLongMask(register PyObject *op)
       
   251 {
       
   252 	PyNumberMethods *nb;
       
   253 	PyIntObject *io;
       
   254 	unsigned long val;
       
   255 
       
   256 	if (op && PyInt_Check(op))
       
   257 		return PyInt_AS_LONG((PyIntObject*) op);
       
   258 	if (op && PyLong_Check(op))
       
   259 		return PyLong_AsUnsignedLongMask(op);
       
   260 
       
   261 	if (op == NULL || (nb = Py_TYPE(op)->tp_as_number) == NULL ||
       
   262 	    nb->nb_int == NULL) {
       
   263 		PyErr_SetString(PyExc_TypeError, "an integer is required");
       
   264 		return (unsigned long)-1;
       
   265 	}
       
   266 
       
   267 	io = (PyIntObject*) (*nb->nb_int) (op);
       
   268 	if (io == NULL)
       
   269 		return (unsigned long)-1;
       
   270 	if (!PyInt_Check(io)) {
       
   271 		if (PyLong_Check(io)) {
       
   272 			val = PyLong_AsUnsignedLongMask((PyObject *)io);
       
   273 			Py_DECREF(io);
       
   274 			if (PyErr_Occurred())
       
   275 				return (unsigned long)-1;
       
   276 			return val;
       
   277 		}
       
   278 		else
       
   279 		{
       
   280 			Py_DECREF(io);
       
   281 			PyErr_SetString(PyExc_TypeError,
       
   282 					"nb_int should return int object");
       
   283 			return (unsigned long)-1;
       
   284 		}
       
   285 	}
       
   286 
       
   287 	val = PyInt_AS_LONG(io);
       
   288 	Py_DECREF(io);
       
   289 
       
   290 	return val;
       
   291 }
       
   292 
       
   293 #ifdef HAVE_LONG_LONG
       
   294 unsigned PY_LONG_LONG
       
   295 PyInt_AsUnsignedLongLongMask(register PyObject *op)
       
   296 {
       
   297 	PyNumberMethods *nb;
       
   298 	PyIntObject *io;
       
   299 	unsigned PY_LONG_LONG val;
       
   300 
       
   301 	if (op && PyInt_Check(op))
       
   302 		return PyInt_AS_LONG((PyIntObject*) op);
       
   303 	if (op && PyLong_Check(op))
       
   304 		return PyLong_AsUnsignedLongLongMask(op);
       
   305 
       
   306 	if (op == NULL || (nb = Py_TYPE(op)->tp_as_number) == NULL ||
       
   307 	    nb->nb_int == NULL) {
       
   308 		PyErr_SetString(PyExc_TypeError, "an integer is required");
       
   309 		return (unsigned PY_LONG_LONG)-1;
       
   310 	}
       
   311 
       
   312 	io = (PyIntObject*) (*nb->nb_int) (op);
       
   313 	if (io == NULL)
       
   314 		return (unsigned PY_LONG_LONG)-1;
       
   315 	if (!PyInt_Check(io)) {
       
   316 		if (PyLong_Check(io)) {
       
   317 			val = PyLong_AsUnsignedLongLongMask((PyObject *)io);
       
   318 			Py_DECREF(io);
       
   319 			if (PyErr_Occurred())
       
   320 				return (unsigned PY_LONG_LONG)-1;
       
   321 			return val;
       
   322 		}
       
   323 		else
       
   324 		{
       
   325 			Py_DECREF(io);
       
   326 			PyErr_SetString(PyExc_TypeError,
       
   327 					"nb_int should return int object");
       
   328 			return (unsigned PY_LONG_LONG)-1;
       
   329 		}
       
   330 	}
       
   331 
       
   332 	val = PyInt_AS_LONG(io);
       
   333 	Py_DECREF(io);
       
   334 
       
   335 	return val;
       
   336 }
       
   337 #endif
       
   338 
       
   339 PyObject *
       
   340 PyInt_FromString(char *s, char **pend, int base)
       
   341 {
       
   342 	char *end;
       
   343 	long x;
       
   344 	Py_ssize_t slen;
       
   345 	PyObject *sobj, *srepr;
       
   346 
       
   347 	if ((base != 0 && base < 2) || base > 36) {
       
   348 		PyErr_SetString(PyExc_ValueError,
       
   349 				"int() base must be >= 2 and <= 36");
       
   350 		return NULL;
       
   351 	}
       
   352 
       
   353 	while (*s && isspace(Py_CHARMASK(*s)))
       
   354 		s++;
       
   355 	errno = 0;
       
   356 	if (base == 0 && s[0] == '0') {
       
   357 		x = (long) PyOS_strtoul(s, &end, base);
       
   358 		if (x < 0)
       
   359 			return PyLong_FromString(s, pend, base);
       
   360 	}
       
   361 	else
       
   362 		x = PyOS_strtol(s, &end, base);
       
   363 	if (end == s || !isalnum(Py_CHARMASK(end[-1])))
       
   364 		goto bad;
       
   365 	while (*end && isspace(Py_CHARMASK(*end)))
       
   366 		end++;
       
   367 	if (*end != '\0') {
       
   368   bad:
       
   369 		slen = strlen(s) < 200 ? strlen(s) : 200;
       
   370 		sobj = PyString_FromStringAndSize(s, slen);
       
   371 		if (sobj == NULL)
       
   372 			return NULL;
       
   373 		srepr = PyObject_Repr(sobj);
       
   374 		Py_DECREF(sobj);
       
   375 		if (srepr == NULL)
       
   376 			return NULL;
       
   377 		PyErr_Format(PyExc_ValueError,
       
   378 			     "invalid literal for int() with base %d: %s",
       
   379 			     base, PyString_AS_STRING(srepr));
       
   380 		Py_DECREF(srepr);
       
   381 		return NULL;
       
   382 	}
       
   383 	else if (errno != 0)
       
   384 		return PyLong_FromString(s, pend, base);
       
   385 	if (pend)
       
   386 		*pend = end;
       
   387 	return PyInt_FromLong(x);
       
   388 }
       
   389 
       
   390 #ifdef Py_USING_UNICODE
       
   391 PyObject *
       
   392 PyInt_FromUnicode(Py_UNICODE *s, Py_ssize_t length, int base)
       
   393 {
       
   394 	PyObject *result;
       
   395 	char *buffer = (char *)PyMem_MALLOC(length+1);
       
   396 
       
   397 	if (buffer == NULL)
       
   398 		return PyErr_NoMemory();
       
   399 
       
   400 	if (PyUnicode_EncodeDecimal(s, length, buffer, NULL)) {
       
   401 		PyMem_FREE(buffer);
       
   402 		return NULL;
       
   403 	}
       
   404 	result = PyInt_FromString(buffer, NULL, base);
       
   405 	PyMem_FREE(buffer);
       
   406 	return result;
       
   407 }
       
   408 #endif
       
   409 
       
   410 /* Methods */
       
   411 
       
   412 /* Integers are seen as the "smallest" of all numeric types and thus
       
   413    don't have any knowledge about conversion of other types to
       
   414    integers. */
       
   415 
       
   416 #define CONVERT_TO_LONG(obj, lng)		\
       
   417 	if (PyInt_Check(obj)) {			\
       
   418 		lng = PyInt_AS_LONG(obj);	\
       
   419 	}					\
       
   420 	else {					\
       
   421 		Py_INCREF(Py_NotImplemented);	\
       
   422 		return Py_NotImplemented;	\
       
   423 	}
       
   424 
       
   425 /* ARGSUSED */
       
   426 static int
       
   427 int_print(PyIntObject *v, FILE *fp, int flags)
       
   428      /* flags -- not used but required by interface */
       
   429 {
       
   430 	long int_val = v->ob_ival;
       
   431 	Py_BEGIN_ALLOW_THREADS
       
   432 	fprintf(fp, "%ld", int_val);
       
   433 	Py_END_ALLOW_THREADS
       
   434 	return 0;
       
   435 }
       
   436 
       
   437 static PyObject *
       
   438 int_repr(PyIntObject *v)
       
   439 {
       
   440 	return _PyInt_Format(v, 10, 0);
       
   441 }
       
   442 
       
   443 static int
       
   444 int_compare(PyIntObject *v, PyIntObject *w)
       
   445 {
       
   446 	register long i = v->ob_ival;
       
   447 	register long j = w->ob_ival;
       
   448 	return (i < j) ? -1 : (i > j) ? 1 : 0;
       
   449 }
       
   450 
       
   451 static long
       
   452 int_hash(PyIntObject *v)
       
   453 {
       
   454 	/* XXX If this is changed, you also need to change the way
       
   455 	   Python's long, float and complex types are hashed. */
       
   456 	long x = v -> ob_ival;
       
   457 	if (x == -1)
       
   458 		x = -2;
       
   459 	return x;
       
   460 }
       
   461 
       
   462 static PyObject *
       
   463 int_add(PyIntObject *v, PyIntObject *w)
       
   464 {
       
   465 	register long a, b, x;
       
   466 	CONVERT_TO_LONG(v, a);
       
   467 	CONVERT_TO_LONG(w, b);
       
   468 	x = a + b;
       
   469 	if ((x^a) >= 0 || (x^b) >= 0)
       
   470 		return PyInt_FromLong(x);
       
   471 	return PyLong_Type.tp_as_number->nb_add((PyObject *)v, (PyObject *)w);
       
   472 }
       
   473 
       
   474 static PyObject *
       
   475 int_sub(PyIntObject *v, PyIntObject *w)
       
   476 {
       
   477 	register long a, b, x;
       
   478 	CONVERT_TO_LONG(v, a);
       
   479 	CONVERT_TO_LONG(w, b);
       
   480 	x = a - b;
       
   481 	if ((x^a) >= 0 || (x^~b) >= 0)
       
   482 		return PyInt_FromLong(x);
       
   483 	return PyLong_Type.tp_as_number->nb_subtract((PyObject *)v,
       
   484 						     (PyObject *)w);
       
   485 }
       
   486 
       
   487 /*
       
   488 Integer overflow checking for * is painful:  Python tried a couple ways, but
       
   489 they didn't work on all platforms, or failed in endcases (a product of
       
   490 -sys.maxint-1 has been a particular pain).
       
   491 
       
   492 Here's another way:
       
   493 
       
   494 The native long product x*y is either exactly right or *way* off, being
       
   495 just the last n bits of the true product, where n is the number of bits
       
   496 in a long (the delivered product is the true product plus i*2**n for
       
   497 some integer i).
       
   498 
       
   499 The native double product (double)x * (double)y is subject to three
       
   500 rounding errors:  on a sizeof(long)==8 box, each cast to double can lose
       
   501 info, and even on a sizeof(long)==4 box, the multiplication can lose info.
       
   502 But, unlike the native long product, it's not in *range* trouble:  even
       
   503 if sizeof(long)==32 (256-bit longs), the product easily fits in the
       
   504 dynamic range of a double.  So the leading 50 (or so) bits of the double
       
   505 product are correct.
       
   506 
       
   507 We check these two ways against each other, and declare victory if they're
       
   508 approximately the same.  Else, because the native long product is the only
       
   509 one that can lose catastrophic amounts of information, it's the native long
       
   510 product that must have overflowed.
       
   511 */
       
   512 
       
   513 static PyObject *
       
   514 int_mul(PyObject *v, PyObject *w)
       
   515 {
       
   516 	long a, b;
       
   517 	long longprod;			/* a*b in native long arithmetic */
       
   518 	double doubled_longprod;	/* (double)longprod */
       
   519 	double doubleprod;		/* (double)a * (double)b */
       
   520 
       
   521 	CONVERT_TO_LONG(v, a);
       
   522 	CONVERT_TO_LONG(w, b);
       
   523 	longprod = a * b;
       
   524 	doubleprod = (double)a * (double)b;
       
   525 	doubled_longprod = (double)longprod;
       
   526 
       
   527 	/* Fast path for normal case:  small multiplicands, and no info
       
   528 	   is lost in either method. */
       
   529 	if (doubled_longprod == doubleprod)
       
   530 		return PyInt_FromLong(longprod);
       
   531 
       
   532 	/* Somebody somewhere lost info.  Close enough, or way off?  Note
       
   533 	   that a != 0 and b != 0 (else doubled_longprod == doubleprod == 0).
       
   534 	   The difference either is or isn't significant compared to the
       
   535 	   true value (of which doubleprod is a good approximation).
       
   536 	*/
       
   537 	{
       
   538 		const double diff = doubled_longprod - doubleprod;
       
   539 		const double absdiff = diff >= 0.0 ? diff : -diff;
       
   540 		const double absprod = doubleprod >= 0.0 ? doubleprod :
       
   541 							  -doubleprod;
       
   542 		/* absdiff/absprod <= 1/32 iff
       
   543 		   32 * absdiff <= absprod -- 5 good bits is "close enough" */
       
   544 		if (32.0 * absdiff <= absprod)
       
   545 			return PyInt_FromLong(longprod);
       
   546 		else
       
   547 			return PyLong_Type.tp_as_number->nb_multiply(v, w);
       
   548 	}
       
   549 }
       
   550 
       
   551 /* Integer overflow checking for unary negation: on a 2's-complement
       
   552  * box, -x overflows iff x is the most negative long.  In this case we
       
   553  * get -x == x.  However, -x is undefined (by C) if x /is/ the most
       
   554  * negative long (it's a signed overflow case), and some compilers care.
       
   555  * So we cast x to unsigned long first.  However, then other compilers
       
   556  * warn about applying unary minus to an unsigned operand.  Hence the
       
   557  * weird "0-".
       
   558  */
       
   559 #define UNARY_NEG_WOULD_OVERFLOW(x)	\
       
   560 	((x) < 0 && (unsigned long)(x) == 0-(unsigned long)(x))
       
   561 
       
   562 /* Return type of i_divmod */
       
   563 enum divmod_result {
       
   564 	DIVMOD_OK,		/* Correct result */
       
   565 	DIVMOD_OVERFLOW,	/* Overflow, try again using longs */
       
   566 	DIVMOD_ERROR		/* Exception raised */
       
   567 };
       
   568 
       
   569 static enum divmod_result
       
   570 i_divmod(register long x, register long y,
       
   571          long *p_xdivy, long *p_xmody)
       
   572 {
       
   573 	long xdivy, xmody;
       
   574 
       
   575 	if (y == 0) {
       
   576 		PyErr_SetString(PyExc_ZeroDivisionError,
       
   577 				"integer division or modulo by zero");
       
   578 		return DIVMOD_ERROR;
       
   579 	}
       
   580 	/* (-sys.maxint-1)/-1 is the only overflow case. */
       
   581 	if (y == -1 && UNARY_NEG_WOULD_OVERFLOW(x))
       
   582 		return DIVMOD_OVERFLOW;
       
   583 	xdivy = x / y;
       
   584 	xmody = x - xdivy * y;
       
   585 	/* If the signs of x and y differ, and the remainder is non-0,
       
   586 	 * C89 doesn't define whether xdivy is now the floor or the
       
   587 	 * ceiling of the infinitely precise quotient.  We want the floor,
       
   588 	 * and we have it iff the remainder's sign matches y's.
       
   589 	 */
       
   590 	if (xmody && ((y ^ xmody) < 0) /* i.e. and signs differ */) {
       
   591 		xmody += y;
       
   592 		--xdivy;
       
   593 		assert(xmody && ((y ^ xmody) >= 0));
       
   594 	}
       
   595 	*p_xdivy = xdivy;
       
   596 	*p_xmody = xmody;
       
   597 	return DIVMOD_OK;
       
   598 }
       
   599 
       
   600 static PyObject *
       
   601 int_div(PyIntObject *x, PyIntObject *y)
       
   602 {
       
   603 	long xi, yi;
       
   604 	long d, m;
       
   605 	CONVERT_TO_LONG(x, xi);
       
   606 	CONVERT_TO_LONG(y, yi);
       
   607 	switch (i_divmod(xi, yi, &d, &m)) {
       
   608 	case DIVMOD_OK:
       
   609 		return PyInt_FromLong(d);
       
   610 	case DIVMOD_OVERFLOW:
       
   611 		return PyLong_Type.tp_as_number->nb_divide((PyObject *)x,
       
   612 							   (PyObject *)y);
       
   613 	default:
       
   614 		return NULL;
       
   615 	}
       
   616 }
       
   617 
       
   618 static PyObject *
       
   619 int_classic_div(PyIntObject *x, PyIntObject *y)
       
   620 {
       
   621 	long xi, yi;
       
   622 	long d, m;
       
   623 	CONVERT_TO_LONG(x, xi);
       
   624 	CONVERT_TO_LONG(y, yi);
       
   625 	if (Py_DivisionWarningFlag &&
       
   626 	    PyErr_Warn(PyExc_DeprecationWarning, "classic int division") < 0)
       
   627 		return NULL;
       
   628 	switch (i_divmod(xi, yi, &d, &m)) {
       
   629 	case DIVMOD_OK:
       
   630 		return PyInt_FromLong(d);
       
   631 	case DIVMOD_OVERFLOW:
       
   632 		return PyLong_Type.tp_as_number->nb_divide((PyObject *)x,
       
   633 							   (PyObject *)y);
       
   634 	default:
       
   635 		return NULL;
       
   636 	}
       
   637 }
       
   638 
       
   639 static PyObject *
       
   640 int_true_divide(PyObject *v, PyObject *w)
       
   641 {
       
   642 	/* If they aren't both ints, give someone else a chance.  In
       
   643 	   particular, this lets int/long get handled by longs, which
       
   644 	   underflows to 0 gracefully if the long is too big to convert
       
   645 	   to float. */
       
   646 	if (PyInt_Check(v) && PyInt_Check(w))
       
   647 		return PyFloat_Type.tp_as_number->nb_true_divide(v, w);
       
   648 	Py_INCREF(Py_NotImplemented);
       
   649 	return Py_NotImplemented;
       
   650 }
       
   651 
       
   652 static PyObject *
       
   653 int_mod(PyIntObject *x, PyIntObject *y)
       
   654 {
       
   655 	long xi, yi;
       
   656 	long d, m;
       
   657 	CONVERT_TO_LONG(x, xi);
       
   658 	CONVERT_TO_LONG(y, yi);
       
   659 	switch (i_divmod(xi, yi, &d, &m)) {
       
   660 	case DIVMOD_OK:
       
   661 		return PyInt_FromLong(m);
       
   662 	case DIVMOD_OVERFLOW:
       
   663 		return PyLong_Type.tp_as_number->nb_remainder((PyObject *)x,
       
   664 							      (PyObject *)y);
       
   665 	default:
       
   666 		return NULL;
       
   667 	}
       
   668 }
       
   669 
       
   670 static PyObject *
       
   671 int_divmod(PyIntObject *x, PyIntObject *y)
       
   672 {
       
   673 	long xi, yi;
       
   674 	long d, m;
       
   675 	CONVERT_TO_LONG(x, xi);
       
   676 	CONVERT_TO_LONG(y, yi);
       
   677 	switch (i_divmod(xi, yi, &d, &m)) {
       
   678 	case DIVMOD_OK:
       
   679 		return Py_BuildValue("(ll)", d, m);
       
   680 	case DIVMOD_OVERFLOW:
       
   681 		return PyLong_Type.tp_as_number->nb_divmod((PyObject *)x,
       
   682 							   (PyObject *)y);
       
   683 	default:
       
   684 		return NULL;
       
   685 	}
       
   686 }
       
   687 
       
   688 static PyObject *
       
   689 int_pow(PyIntObject *v, PyIntObject *w, PyIntObject *z)
       
   690 {
       
   691 	register long iv, iw, iz=0, ix, temp, prev;
       
   692 	CONVERT_TO_LONG(v, iv);
       
   693 	CONVERT_TO_LONG(w, iw);
       
   694 	if (iw < 0) {
       
   695 		if ((PyObject *)z != Py_None) {
       
   696 			PyErr_SetString(PyExc_TypeError, "pow() 2nd argument "
       
   697 			     "cannot be negative when 3rd argument specified");
       
   698 			return NULL;
       
   699 		}
       
   700 		/* Return a float.  This works because we know that
       
   701 		   this calls float_pow() which converts its
       
   702 		   arguments to double. */
       
   703 		return PyFloat_Type.tp_as_number->nb_power(
       
   704 			(PyObject *)v, (PyObject *)w, (PyObject *)z);
       
   705 	}
       
   706  	if ((PyObject *)z != Py_None) {
       
   707 		CONVERT_TO_LONG(z, iz);
       
   708 		if (iz == 0) {
       
   709 			PyErr_SetString(PyExc_ValueError,
       
   710 					"pow() 3rd argument cannot be 0");
       
   711 			return NULL;
       
   712 		}
       
   713 	}
       
   714 	/*
       
   715 	 * XXX: The original exponentiation code stopped looping
       
   716 	 * when temp hit zero; this code will continue onwards
       
   717 	 * unnecessarily, but at least it won't cause any errors.
       
   718 	 * Hopefully the speed improvement from the fast exponentiation
       
   719 	 * will compensate for the slight inefficiency.
       
   720 	 * XXX: Better handling of overflows is desperately needed.
       
   721 	 */
       
   722  	temp = iv;
       
   723 	ix = 1;
       
   724 	while (iw > 0) {
       
   725 	 	prev = ix;	/* Save value for overflow check */
       
   726 	 	if (iw & 1) {
       
   727 		 	ix = ix*temp;
       
   728 			if (temp == 0)
       
   729 				break; /* Avoid ix / 0 */
       
   730 			if (ix / temp != prev) {
       
   731 				return PyLong_Type.tp_as_number->nb_power(
       
   732 					(PyObject *)v,
       
   733 					(PyObject *)w,
       
   734 					(PyObject *)z);
       
   735 			}
       
   736 		}
       
   737 	 	iw >>= 1;	/* Shift exponent down by 1 bit */
       
   738 	        if (iw==0) break;
       
   739 	 	prev = temp;
       
   740 	 	temp *= temp;	/* Square the value of temp */
       
   741 	 	if (prev != 0 && temp / prev != prev) {
       
   742 			return PyLong_Type.tp_as_number->nb_power(
       
   743 				(PyObject *)v, (PyObject *)w, (PyObject *)z);
       
   744 		}
       
   745 	 	if (iz) {
       
   746 			/* If we did a multiplication, perform a modulo */
       
   747 		 	ix = ix % iz;
       
   748 		 	temp = temp % iz;
       
   749 		}
       
   750 	}
       
   751 	if (iz) {
       
   752 	 	long div, mod;
       
   753 		switch (i_divmod(ix, iz, &div, &mod)) {
       
   754 		case DIVMOD_OK:
       
   755 			ix = mod;
       
   756 			break;
       
   757 		case DIVMOD_OVERFLOW:
       
   758 			return PyLong_Type.tp_as_number->nb_power(
       
   759 				(PyObject *)v, (PyObject *)w, (PyObject *)z);
       
   760 		default:
       
   761 			return NULL;
       
   762 		}
       
   763 	}
       
   764 	return PyInt_FromLong(ix);
       
   765 }
       
   766 
       
   767 static PyObject *
       
   768 int_neg(PyIntObject *v)
       
   769 {
       
   770 	register long a;
       
   771 	a = v->ob_ival;
       
   772         /* check for overflow */
       
   773 	if (UNARY_NEG_WOULD_OVERFLOW(a)) {
       
   774 		PyObject *o = PyLong_FromLong(a);
       
   775 		if (o != NULL) {
       
   776 			PyObject *result = PyNumber_Negative(o);
       
   777 			Py_DECREF(o);
       
   778 			return result;
       
   779 		}
       
   780 		return NULL;
       
   781 	}
       
   782 	return PyInt_FromLong(-a);
       
   783 }
       
   784 
       
   785 static PyObject *
       
   786 int_abs(PyIntObject *v)
       
   787 {
       
   788 	if (v->ob_ival >= 0)
       
   789 		return int_int(v);
       
   790 	else
       
   791 		return int_neg(v);
       
   792 }
       
   793 
       
   794 static int
       
   795 int_nonzero(PyIntObject *v)
       
   796 {
       
   797 	return v->ob_ival != 0;
       
   798 }
       
   799 
       
   800 static PyObject *
       
   801 int_invert(PyIntObject *v)
       
   802 {
       
   803 	return PyInt_FromLong(~v->ob_ival);
       
   804 }
       
   805 
       
   806 static PyObject *
       
   807 int_lshift(PyIntObject *v, PyIntObject *w)
       
   808 {
       
   809 	long a, b, c;
       
   810 	PyObject *vv, *ww, *result;
       
   811 
       
   812 	CONVERT_TO_LONG(v, a);
       
   813 	CONVERT_TO_LONG(w, b);
       
   814 	if (b < 0) {
       
   815 		PyErr_SetString(PyExc_ValueError, "negative shift count");
       
   816 		return NULL;
       
   817 	}
       
   818 	if (a == 0 || b == 0)
       
   819 		return int_int(v);
       
   820 	if (b >= LONG_BIT) {
       
   821 		vv = PyLong_FromLong(PyInt_AS_LONG(v));
       
   822 		if (vv == NULL)
       
   823 			return NULL;
       
   824 		ww = PyLong_FromLong(PyInt_AS_LONG(w));
       
   825 		if (ww == NULL) {
       
   826 			Py_DECREF(vv);
       
   827 			return NULL;
       
   828 		}
       
   829 		result = PyNumber_Lshift(vv, ww);
       
   830 		Py_DECREF(vv);
       
   831 		Py_DECREF(ww);
       
   832 		return result;
       
   833 	}
       
   834 	c = a << b;
       
   835 	if (a != Py_ARITHMETIC_RIGHT_SHIFT(long, c, b)) {
       
   836 		vv = PyLong_FromLong(PyInt_AS_LONG(v));
       
   837 		if (vv == NULL)
       
   838 			return NULL;
       
   839 		ww = PyLong_FromLong(PyInt_AS_LONG(w));
       
   840 		if (ww == NULL) {
       
   841 			Py_DECREF(vv);
       
   842 			return NULL;
       
   843 		}
       
   844 		result = PyNumber_Lshift(vv, ww);
       
   845 		Py_DECREF(vv);
       
   846 		Py_DECREF(ww);
       
   847 		return result;
       
   848 	}
       
   849 	return PyInt_FromLong(c);
       
   850 }
       
   851 
       
   852 static PyObject *
       
   853 int_rshift(PyIntObject *v, PyIntObject *w)
       
   854 {
       
   855 	register long a, b;
       
   856 	CONVERT_TO_LONG(v, a);
       
   857 	CONVERT_TO_LONG(w, b);
       
   858 	if (b < 0) {
       
   859 		PyErr_SetString(PyExc_ValueError, "negative shift count");
       
   860 		return NULL;
       
   861 	}
       
   862 	if (a == 0 || b == 0)
       
   863 		return int_int(v);
       
   864 	if (b >= LONG_BIT) {
       
   865 		if (a < 0)
       
   866 			a = -1;
       
   867 		else
       
   868 			a = 0;
       
   869 	}
       
   870 	else {
       
   871 		a = Py_ARITHMETIC_RIGHT_SHIFT(long, a, b);
       
   872 	}
       
   873 	return PyInt_FromLong(a);
       
   874 }
       
   875 
       
   876 static PyObject *
       
   877 int_and(PyIntObject *v, PyIntObject *w)
       
   878 {
       
   879 	register long a, b;
       
   880 	CONVERT_TO_LONG(v, a);
       
   881 	CONVERT_TO_LONG(w, b);
       
   882 	return PyInt_FromLong(a & b);
       
   883 }
       
   884 
       
   885 static PyObject *
       
   886 int_xor(PyIntObject *v, PyIntObject *w)
       
   887 {
       
   888 	register long a, b;
       
   889 	CONVERT_TO_LONG(v, a);
       
   890 	CONVERT_TO_LONG(w, b);
       
   891 	return PyInt_FromLong(a ^ b);
       
   892 }
       
   893 
       
   894 static PyObject *
       
   895 int_or(PyIntObject *v, PyIntObject *w)
       
   896 {
       
   897 	register long a, b;
       
   898 	CONVERT_TO_LONG(v, a);
       
   899 	CONVERT_TO_LONG(w, b);
       
   900 	return PyInt_FromLong(a | b);
       
   901 }
       
   902 
       
   903 static int
       
   904 int_coerce(PyObject **pv, PyObject **pw)
       
   905 {
       
   906 	if (PyInt_Check(*pw)) {
       
   907 		Py_INCREF(*pv);
       
   908 		Py_INCREF(*pw);
       
   909 		return 0;
       
   910 	}
       
   911 	return 1; /* Can't do it */
       
   912 }
       
   913 
       
   914 static PyObject *
       
   915 int_int(PyIntObject *v)
       
   916 {
       
   917 	if (PyInt_CheckExact(v))
       
   918 		Py_INCREF(v);
       
   919 	else
       
   920 		v = (PyIntObject *)PyInt_FromLong(v->ob_ival);
       
   921 	return (PyObject *)v;
       
   922 }
       
   923 
       
   924 static PyObject *
       
   925 int_long(PyIntObject *v)
       
   926 {
       
   927 	return PyLong_FromLong((v -> ob_ival));
       
   928 }
       
   929 
       
   930 static PyObject *
       
   931 int_float(PyIntObject *v)
       
   932 {
       
   933 	return PyFloat_FromDouble((double)(v -> ob_ival));
       
   934 }
       
   935 
       
   936 static PyObject *
       
   937 int_oct(PyIntObject *v)
       
   938 {
       
   939 	return _PyInt_Format(v, 8, 0);
       
   940 }
       
   941 
       
   942 static PyObject *
       
   943 int_hex(PyIntObject *v)
       
   944 {
       
   945 	return _PyInt_Format(v, 16, 0);
       
   946 }
       
   947 
       
   948 static PyObject *
       
   949 int_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
       
   950 
       
   951 static PyObject *
       
   952 int_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
       
   953 {
       
   954 	PyObject *x = NULL;
       
   955 	int base = -909;
       
   956 	static char *kwlist[] = {"x", "base", 0};
       
   957 
       
   958 	if (type != &PyInt_Type)
       
   959 		return int_subtype_new(type, args, kwds); /* Wimp out */
       
   960 	if (!PyArg_ParseTupleAndKeywords(args, kwds, "|Oi:int", kwlist,
       
   961 					 &x, &base))
       
   962 		return NULL;
       
   963 	if (x == NULL)
       
   964 		return PyInt_FromLong(0L);
       
   965 	if (base == -909)
       
   966 		return PyNumber_Int(x);
       
   967 	if (PyString_Check(x)) {
       
   968 		/* Since PyInt_FromString doesn't have a length parameter,
       
   969 		 * check here for possible NULs in the string. */
       
   970 		char *string = PyString_AS_STRING(x);
       
   971 		if (strlen(string) != PyString_Size(x)) {
       
   972 			/* create a repr() of the input string,
       
   973 			 * just like PyInt_FromString does */
       
   974 			PyObject *srepr;
       
   975 			srepr = PyObject_Repr(x);
       
   976 			if (srepr == NULL)
       
   977 				return NULL;
       
   978 			PyErr_Format(PyExc_ValueError,
       
   979 			     "invalid literal for int() with base %d: %s",
       
   980 			     base, PyString_AS_STRING(srepr));
       
   981 			Py_DECREF(srepr);
       
   982 			return NULL;
       
   983 		}
       
   984 		return PyInt_FromString(string, NULL, base);
       
   985 	}
       
   986 #ifdef Py_USING_UNICODE
       
   987 	if (PyUnicode_Check(x))
       
   988 		return PyInt_FromUnicode(PyUnicode_AS_UNICODE(x),
       
   989 					 PyUnicode_GET_SIZE(x),
       
   990 					 base);
       
   991 #endif
       
   992 	PyErr_SetString(PyExc_TypeError,
       
   993 			"int() can't convert non-string with explicit base");
       
   994 	return NULL;
       
   995 }
       
   996 
       
   997 /* Wimpy, slow approach to tp_new calls for subtypes of int:
       
   998    first create a regular int from whatever arguments we got,
       
   999    then allocate a subtype instance and initialize its ob_ival
       
  1000    from the regular int.  The regular int is then thrown away.
       
  1001 */
       
  1002 static PyObject *
       
  1003 int_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
       
  1004 {
       
  1005 	PyObject *tmp, *newobj;
       
  1006 	long ival;
       
  1007 
       
  1008 	assert(PyType_IsSubtype(type, &PyInt_Type));
       
  1009 	tmp = int_new(&PyInt_Type, args, kwds);
       
  1010 	if (tmp == NULL)
       
  1011 		return NULL;
       
  1012 	if (!PyInt_Check(tmp)) {
       
  1013 		ival = PyLong_AsLong(tmp);
       
  1014 		if (ival == -1 && PyErr_Occurred()) {
       
  1015 			Py_DECREF(tmp);
       
  1016 			return NULL;
       
  1017 		}
       
  1018 	} else {
       
  1019 		ival = ((PyIntObject *)tmp)->ob_ival;
       
  1020 	}
       
  1021 
       
  1022 	newobj = type->tp_alloc(type, 0);
       
  1023 	if (newobj == NULL) {
       
  1024 		Py_DECREF(tmp);
       
  1025 		return NULL;
       
  1026 	}
       
  1027 	((PyIntObject *)newobj)->ob_ival = ival;
       
  1028 	Py_DECREF(tmp);
       
  1029 	return newobj;
       
  1030 }
       
  1031 
       
  1032 static PyObject *
       
  1033 int_getnewargs(PyIntObject *v)
       
  1034 {
       
  1035 	return Py_BuildValue("(l)", v->ob_ival);
       
  1036 }
       
  1037 
       
  1038 static PyObject *
       
  1039 int_getN(PyIntObject *v, void *context) {
       
  1040 	return PyInt_FromLong((Py_intptr_t)context);
       
  1041 }
       
  1042 
       
  1043 /* Convert an integer to the given base.  Returns a string.
       
  1044    If base is 2, 8 or 16, add the proper prefix '0b', '0o' or '0x'.
       
  1045    If newstyle is zero, then use the pre-2.6 behavior of octal having
       
  1046    a leading "0" */
       
  1047 PyAPI_FUNC(PyObject*)
       
  1048 _PyInt_Format(PyIntObject *v, int base, int newstyle)
       
  1049 {
       
  1050 	/* There are no doubt many, many ways to optimize this, using code
       
  1051 	   similar to _PyLong_Format */
       
  1052 	long n = v->ob_ival;
       
  1053 	int  negative = n < 0;
       
  1054 	int is_zero = n == 0;
       
  1055 
       
  1056 	/* For the reasoning behind this size, see
       
  1057 	   http://c-faq.com/misc/hexio.html. Then, add a few bytes for
       
  1058 	   the possible sign and prefix "0[box]" */
       
  1059 	char buf[sizeof(n)*CHAR_BIT+6];
       
  1060 
       
  1061 	/* Start by pointing to the end of the buffer.  We fill in from
       
  1062 	   the back forward. */
       
  1063 	char* p = &buf[sizeof(buf)];
       
  1064 
       
  1065 	assert(base >= 2 && base <= 36);
       
  1066 
       
  1067 	do {
       
  1068 		/* I'd use i_divmod, except it doesn't produce the results
       
  1069 		   I want when n is negative.  So just duplicate the salient
       
  1070 		   part here. */
       
  1071 		long div = n / base;
       
  1072 		long mod = n - div * base;
       
  1073 
       
  1074 		/* convert abs(mod) to the right character in [0-9, a-z] */
       
  1075 		char cdigit = (char)(mod < 0 ? -mod : mod);
       
  1076 		cdigit += (cdigit < 10) ? '0' : 'a'-10;
       
  1077 		*--p = cdigit;
       
  1078 
       
  1079 		n = div;
       
  1080 	} while(n);
       
  1081 
       
  1082 	if (base == 2) {
       
  1083 		*--p = 'b';
       
  1084 		*--p = '0';
       
  1085 	}
       
  1086 	else if (base == 8) {
       
  1087 		if (newstyle) {
       
  1088 			*--p = 'o';
       
  1089 			*--p = '0';
       
  1090 		}
       
  1091 		else
       
  1092 			if (!is_zero)
       
  1093 				*--p = '0';
       
  1094 	}
       
  1095 	else if (base == 16) {
       
  1096 		*--p = 'x';
       
  1097 		*--p = '0';
       
  1098 	}
       
  1099 	else if (base != 10) {
       
  1100 		*--p = '#';
       
  1101 		*--p = '0' + base%10;
       
  1102 		if (base > 10)
       
  1103 			*--p = '0' + base/10;
       
  1104 	}
       
  1105 	if (negative)
       
  1106 		*--p = '-';
       
  1107 
       
  1108 	return PyString_FromStringAndSize(p, &buf[sizeof(buf)] - p);
       
  1109 }
       
  1110 
       
  1111 static PyObject *
       
  1112 int__format__(PyObject *self, PyObject *args)
       
  1113 {
       
  1114 	PyObject *format_spec;
       
  1115 
       
  1116 	if (!PyArg_ParseTuple(args, "O:__format__", &format_spec))
       
  1117 		return NULL;
       
  1118 	if (PyBytes_Check(format_spec))
       
  1119 		return _PyInt_FormatAdvanced(self,
       
  1120 					     PyBytes_AS_STRING(format_spec),
       
  1121 					     PyBytes_GET_SIZE(format_spec));
       
  1122 	if (PyUnicode_Check(format_spec)) {
       
  1123 		/* Convert format_spec to a str */
       
  1124 		PyObject *result;
       
  1125 		PyObject *str_spec = PyObject_Str(format_spec);
       
  1126 
       
  1127 		if (str_spec == NULL)
       
  1128 			return NULL;
       
  1129 
       
  1130 		result = _PyInt_FormatAdvanced(self,
       
  1131 					       PyBytes_AS_STRING(str_spec),
       
  1132 					       PyBytes_GET_SIZE(str_spec));
       
  1133 
       
  1134 		Py_DECREF(str_spec);
       
  1135 		return result;
       
  1136 	}
       
  1137 	PyErr_SetString(PyExc_TypeError, "__format__ requires str or unicode");
       
  1138 	return NULL;
       
  1139 }
       
  1140 
       
  1141 #if 0
       
  1142 static PyObject *
       
  1143 int_is_finite(PyObject *v)
       
  1144 {
       
  1145 	Py_RETURN_TRUE;
       
  1146 }
       
  1147 #endif
       
  1148 
       
  1149 static PyMethodDef int_methods[] = {
       
  1150 	{"conjugate",	(PyCFunction)int_int,	METH_NOARGS,
       
  1151 	 "Returns self, the complex conjugate of any int."},
       
  1152 #if 0
       
  1153 	{"is_finite",	(PyCFunction)int_is_finite,	METH_NOARGS,
       
  1154 	 "Returns always True."},
       
  1155 #endif
       
  1156 	{"__trunc__",	(PyCFunction)int_int,	METH_NOARGS,
       
  1157          "Truncating an Integral returns itself."},
       
  1158 	{"__getnewargs__",	(PyCFunction)int_getnewargs,	METH_NOARGS},
       
  1159         {"__format__", (PyCFunction)int__format__, METH_VARARGS},
       
  1160 	{NULL,		NULL}		/* sentinel */
       
  1161 };
       
  1162 
       
  1163 static PyGetSetDef int_getset[] = {
       
  1164 	{"real", 
       
  1165 	 (getter)int_int, (setter)NULL,
       
  1166 	 "the real part of a complex number",
       
  1167 	 NULL},
       
  1168 	{"imag", 
       
  1169 	 (getter)int_getN, (setter)NULL,
       
  1170 	 "the imaginary part of a complex number",
       
  1171 	 (void*)0},
       
  1172 	{"numerator", 
       
  1173 	 (getter)int_int, (setter)NULL,
       
  1174 	 "the numerator of a rational number in lowest terms",
       
  1175 	 NULL},
       
  1176 	{"denominator", 
       
  1177 	 (getter)int_getN, (setter)NULL,
       
  1178 	 "the denominator of a rational number in lowest terms",
       
  1179 	 (void*)1},
       
  1180 	{NULL}  /* Sentinel */
       
  1181 };
       
  1182 
       
  1183 PyDoc_STRVAR(int_doc,
       
  1184 "int(x[, base]) -> integer\n\
       
  1185 \n\
       
  1186 Convert a string or number to an integer, if possible.  A floating point\n\
       
  1187 argument will be truncated towards zero (this does not include a string\n\
       
  1188 representation of a floating point number!)  When converting a string, use\n\
       
  1189 the optional base.  It is an error to supply a base when converting a\n\
       
  1190 non-string.  If base is zero, the proper base is guessed based on the\n\
       
  1191 string content.  If the argument is outside the integer range a\n\
       
  1192 long object will be returned instead.");
       
  1193 
       
  1194 static PyNumberMethods int_as_number = {
       
  1195 	(binaryfunc)int_add,	/*nb_add*/
       
  1196 	(binaryfunc)int_sub,	/*nb_subtract*/
       
  1197 	(binaryfunc)int_mul,	/*nb_multiply*/
       
  1198 	(binaryfunc)int_classic_div, /*nb_divide*/
       
  1199 	(binaryfunc)int_mod,	/*nb_remainder*/
       
  1200 	(binaryfunc)int_divmod,	/*nb_divmod*/
       
  1201 	(ternaryfunc)int_pow,	/*nb_power*/
       
  1202 	(unaryfunc)int_neg,	/*nb_negative*/
       
  1203 	(unaryfunc)int_int,	/*nb_positive*/
       
  1204 	(unaryfunc)int_abs,	/*nb_absolute*/
       
  1205 	(inquiry)int_nonzero,	/*nb_nonzero*/
       
  1206 	(unaryfunc)int_invert,	/*nb_invert*/
       
  1207 	(binaryfunc)int_lshift,	/*nb_lshift*/
       
  1208 	(binaryfunc)int_rshift,	/*nb_rshift*/
       
  1209 	(binaryfunc)int_and,	/*nb_and*/
       
  1210 	(binaryfunc)int_xor,	/*nb_xor*/
       
  1211 	(binaryfunc)int_or,	/*nb_or*/
       
  1212 	int_coerce,		/*nb_coerce*/
       
  1213 	(unaryfunc)int_int,	/*nb_int*/
       
  1214 	(unaryfunc)int_long,	/*nb_long*/
       
  1215 	(unaryfunc)int_float,	/*nb_float*/
       
  1216 	(unaryfunc)int_oct,	/*nb_oct*/
       
  1217 	(unaryfunc)int_hex, 	/*nb_hex*/
       
  1218 	0,			/*nb_inplace_add*/
       
  1219 	0,			/*nb_inplace_subtract*/
       
  1220 	0,			/*nb_inplace_multiply*/
       
  1221 	0,			/*nb_inplace_divide*/
       
  1222 	0,			/*nb_inplace_remainder*/
       
  1223 	0,			/*nb_inplace_power*/
       
  1224 	0,			/*nb_inplace_lshift*/
       
  1225 	0,			/*nb_inplace_rshift*/
       
  1226 	0,			/*nb_inplace_and*/
       
  1227 	0,			/*nb_inplace_xor*/
       
  1228 	0,			/*nb_inplace_or*/
       
  1229 	(binaryfunc)int_div,	/* nb_floor_divide */
       
  1230 	int_true_divide,	/* nb_true_divide */
       
  1231 	0,			/* nb_inplace_floor_divide */
       
  1232 	0,			/* nb_inplace_true_divide */
       
  1233 	(unaryfunc)int_int,	/* nb_index */
       
  1234 };
       
  1235 
       
  1236 PyTypeObject PyInt_Type = {
       
  1237 	PyVarObject_HEAD_INIT(&PyType_Type, 0)
       
  1238 	"int",
       
  1239 	sizeof(PyIntObject),
       
  1240 	0,
       
  1241 	(destructor)int_dealloc,		/* tp_dealloc */
       
  1242 	(printfunc)int_print,			/* tp_print */
       
  1243 	0,					/* tp_getattr */
       
  1244 	0,					/* tp_setattr */
       
  1245 	(cmpfunc)int_compare,			/* tp_compare */
       
  1246 	(reprfunc)int_repr,			/* tp_repr */
       
  1247 	&int_as_number,				/* tp_as_number */
       
  1248 	0,					/* tp_as_sequence */
       
  1249 	0,					/* tp_as_mapping */
       
  1250 	(hashfunc)int_hash,			/* tp_hash */
       
  1251         0,					/* tp_call */
       
  1252         (reprfunc)int_repr,			/* tp_str */
       
  1253 	PyObject_GenericGetAttr,		/* tp_getattro */
       
  1254 	0,					/* tp_setattro */
       
  1255 	0,					/* tp_as_buffer */
       
  1256 	Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES |
       
  1257 		Py_TPFLAGS_BASETYPE | Py_TPFLAGS_INT_SUBCLASS,	/* tp_flags */
       
  1258 	int_doc,				/* tp_doc */
       
  1259 	0,					/* tp_traverse */
       
  1260 	0,					/* tp_clear */
       
  1261 	0,					/* tp_richcompare */
       
  1262 	0,					/* tp_weaklistoffset */
       
  1263 	0,					/* tp_iter */
       
  1264 	0,					/* tp_iternext */
       
  1265 	int_methods,				/* tp_methods */
       
  1266 	0,					/* tp_members */
       
  1267 	int_getset,				/* tp_getset */
       
  1268 	0,					/* tp_base */
       
  1269 	0,					/* tp_dict */
       
  1270 	0,					/* tp_descr_get */
       
  1271 	0,					/* tp_descr_set */
       
  1272 	0,					/* tp_dictoffset */
       
  1273 	0,					/* tp_init */
       
  1274 	0,					/* tp_alloc */
       
  1275 	int_new,				/* tp_new */
       
  1276 	(freefunc)int_free,           		/* tp_free */
       
  1277 };
       
  1278 
       
  1279 int
       
  1280 _PyInt_Init(void)
       
  1281 {
       
  1282 	PyIntObject *v;
       
  1283 	int ival;
       
  1284 #if NSMALLNEGINTS + NSMALLPOSINTS > 0
       
  1285 	for (ival = -NSMALLNEGINTS; ival < NSMALLPOSINTS; ival++) {
       
  1286               if (!free_list && (free_list = fill_free_list()) == NULL)
       
  1287 			return 0;
       
  1288 		/* PyObject_New is inlined */
       
  1289 		v = free_list;
       
  1290 		free_list = (PyIntObject *)Py_TYPE(v);
       
  1291 		PyObject_INIT(v, &PyInt_Type);
       
  1292 		v->ob_ival = ival;
       
  1293 		small_ints[ival + NSMALLNEGINTS] = v;
       
  1294 	}
       
  1295 #endif
       
  1296 	return 1;
       
  1297 }
       
  1298 
       
  1299 int
       
  1300 PyInt_ClearFreeList(void)
       
  1301 {
       
  1302 	PyIntObject *p;
       
  1303 	PyIntBlock *list, *next;
       
  1304 	int i;
       
  1305 	int u;			/* remaining unfreed ints per block */
       
  1306 	int freelist_size = 0;
       
  1307 
       
  1308 	list = block_list;
       
  1309 	block_list = NULL;
       
  1310 	free_list = NULL;
       
  1311 	while (list != NULL) {
       
  1312 		u = 0;
       
  1313 		for (i = 0, p = &list->objects[0];
       
  1314 		     i < N_INTOBJECTS;
       
  1315 		     i++, p++) {
       
  1316 			if (PyInt_CheckExact(p) && p->ob_refcnt != 0)
       
  1317 				u++;
       
  1318 		}
       
  1319 		next = list->next;
       
  1320 		if (u) {
       
  1321 			list->next = block_list;
       
  1322 			block_list = list;
       
  1323 			for (i = 0, p = &list->objects[0];
       
  1324 			     i < N_INTOBJECTS;
       
  1325 			     i++, p++) {
       
  1326 				if (!PyInt_CheckExact(p) ||
       
  1327 				    p->ob_refcnt == 0) {
       
  1328 					Py_TYPE(p) = (struct _typeobject *)
       
  1329 						free_list;
       
  1330 					free_list = p;
       
  1331 				}
       
  1332 #if NSMALLNEGINTS + NSMALLPOSINTS > 0
       
  1333 				else if (-NSMALLNEGINTS <= p->ob_ival &&
       
  1334 					 p->ob_ival < NSMALLPOSINTS &&
       
  1335 					 small_ints[p->ob_ival +
       
  1336 						    NSMALLNEGINTS] == NULL) {
       
  1337 					Py_INCREF(p);
       
  1338 					small_ints[p->ob_ival +
       
  1339 						   NSMALLNEGINTS] = p;
       
  1340 				}
       
  1341 #endif
       
  1342 			}
       
  1343 		}
       
  1344 		else {
       
  1345 			PyMem_FREE(list);
       
  1346 		}
       
  1347 		freelist_size += u;
       
  1348 		list = next;
       
  1349 	}
       
  1350 
       
  1351 	return freelist_size;
       
  1352 }
       
  1353 
       
  1354 void
       
  1355 PyInt_Fini(void)
       
  1356 {
       
  1357 	PyIntObject *p;
       
  1358 	PyIntBlock *list;
       
  1359 	int i;
       
  1360 	int u;			/* total unfreed ints per block */
       
  1361 
       
  1362 #if NSMALLNEGINTS + NSMALLPOSINTS > 0
       
  1363 	PyIntObject **q;
       
  1364 
       
  1365 	i = NSMALLNEGINTS + NSMALLPOSINTS;
       
  1366 	q = small_ints;
       
  1367 	while (--i >= 0) {
       
  1368 		Py_XDECREF(*q);
       
  1369 		*q++ = NULL;
       
  1370 	}
       
  1371 #endif
       
  1372 	u = PyInt_ClearFreeList();
       
  1373 	if (!Py_VerboseFlag)
       
  1374 		return;
       
  1375 	fprintf(stderr, "# cleanup ints");
       
  1376 	if (!u) {
       
  1377 		fprintf(stderr, "\n");
       
  1378 	}
       
  1379 	else {
       
  1380 		fprintf(stderr,
       
  1381 			": %d unfreed int%s\n",
       
  1382 			u, u == 1 ? "" : "s");
       
  1383 	}
       
  1384 	if (Py_VerboseFlag > 1) {
       
  1385 		list = block_list;
       
  1386 		while (list != NULL) {
       
  1387 			for (i = 0, p = &list->objects[0];
       
  1388 			     i < N_INTOBJECTS;
       
  1389 			     i++, p++) {
       
  1390 				if (PyInt_CheckExact(p) && p->ob_refcnt != 0)
       
  1391 					/* XXX(twouters) cast refcount to
       
  1392 					   long until %zd is universally
       
  1393 					   available
       
  1394 					 */
       
  1395 					fprintf(stderr,
       
  1396 				"#   <int at %p, refcnt=%ld, val=%ld>\n",
       
  1397 						p, (long)p->ob_refcnt,
       
  1398 						p->ob_ival);
       
  1399 			}
       
  1400 			list = list->next;
       
  1401 		}
       
  1402 	}
       
  1403 }