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