1 2 /* Generic object operations; and implementation of None (NoObject) */ 3 4 #include "Python.h" 5 #include "frameobject.h" 6 7 #ifdef __cplusplus 8 extern "C" { 9 #endif 10 11 #ifdef Py_REF_DEBUG 12 Py_ssize_t _Py_RefTotal; 13 14 Py_ssize_t 15 _Py_GetRefTotal(void) 16 { 17 PyObject *o; 18 Py_ssize_t total = _Py_RefTotal; 19 /* ignore the references to the dummy object of the dicts and sets 20 because they are not reliable and not useful (now that the 21 hash table code is well-tested) */ 22 o = _PyDict_Dummy(); 23 if (o != NULL) 24 total -= o->ob_refcnt; 25 o = _PySet_Dummy(); 26 if (o != NULL) 27 total -= o->ob_refcnt; 28 return total; 29 } 30 #endif /* Py_REF_DEBUG */ 31 32 int Py_DivisionWarningFlag; 33 int Py_Py3kWarningFlag; 34 35 /* Object allocation routines used by NEWOBJ and NEWVAROBJ macros. 36 These are used by the individual routines for object creation. 37 Do not call them otherwise, they do not initialize the object! */ 38 39 #ifdef Py_TRACE_REFS 40 /* Head of circular doubly-linked list of all objects. These are linked 41 * together via the _ob_prev and _ob_next members of a PyObject, which 42 * exist only in a Py_TRACE_REFS build. 43 */ 44 static PyObject refchain = {&refchain, &refchain}; 45 46 /* Insert op at the front of the list of all objects. If force is true, 47 * op is added even if _ob_prev and _ob_next are non-NULL already. If 48 * force is false amd _ob_prev or _ob_next are non-NULL, do nothing. 49 * force should be true if and only if op points to freshly allocated, 50 * uninitialized memory, or you've unlinked op from the list and are 51 * relinking it into the front. 52 * Note that objects are normally added to the list via _Py_NewReference, 53 * which is called by PyObject_Init. Not all objects are initialized that 54 * way, though; exceptions include statically allocated type objects, and 55 * statically allocated singletons (like Py_True and Py_None). 56 */ 57 void 58 _Py_AddToAllObjects(PyObject *op, int force) 59 { 60 #ifdef Py_DEBUG 61 if (!force) { 62 /* If it's initialized memory, op must be in or out of 63 * the list unambiguously. 64 */ 65 assert((op->_ob_prev == NULL) == (op->_ob_next == NULL)); 66 } 67 #endif 68 if (force || op->_ob_prev == NULL) { 69 op->_ob_next = refchain._ob_next; 70 op->_ob_prev = &refchain; 71 refchain._ob_next->_ob_prev = op; 72 refchain._ob_next = op; 73 } 74 } 75 #endif /* Py_TRACE_REFS */ 76 77 #ifdef COUNT_ALLOCS 78 static PyTypeObject *type_list; 79 /* All types are added to type_list, at least when 80 they get one object created. That makes them 81 immortal, which unfortunately contributes to 82 garbage itself. If unlist_types_without_objects 83 is set, they will be removed from the type_list 84 once the last object is deallocated. */ 85 static int unlist_types_without_objects; 86 extern Py_ssize_t tuple_zero_allocs, fast_tuple_allocs; 87 extern Py_ssize_t quick_int_allocs, quick_neg_int_allocs; 88 extern Py_ssize_t null_strings, one_strings; 89 void 90 dump_counts(FILE* f) 91 { 92 PyTypeObject *tp; 93 94 for (tp = type_list; tp; tp = tp->tp_next) 95 fprintf(f, "%s alloc'd: %" PY_FORMAT_SIZE_T "d, " 96 "freed: %" PY_FORMAT_SIZE_T "d, " 97 "max in use: %" PY_FORMAT_SIZE_T "d\n", 98 tp->tp_name, tp->tp_allocs, tp->tp_frees, 99 tp->tp_maxalloc); 100 fprintf(f, "fast tuple allocs: %" PY_FORMAT_SIZE_T "d, " 101 "empty: %" PY_FORMAT_SIZE_T "d\n", 102 fast_tuple_allocs, tuple_zero_allocs); 103 fprintf(f, "fast int allocs: pos: %" PY_FORMAT_SIZE_T "d, " 104 "neg: %" PY_FORMAT_SIZE_T "d\n", 105 quick_int_allocs, quick_neg_int_allocs); 106 fprintf(f, "null strings: %" PY_FORMAT_SIZE_T "d, " 107 "1-strings: %" PY_FORMAT_SIZE_T "d\n", 108 null_strings, one_strings); 109 } 110 111 PyObject * 112 get_counts(void) 113 { 114 PyTypeObject *tp; 115 PyObject *result; 116 PyObject *v; 117 118 result = PyList_New(0); 119 if (result == NULL) 120 return NULL; 121 for (tp = type_list; tp; tp = tp->tp_next) { 122 v = Py_BuildValue("(snnn)", tp->tp_name, tp->tp_allocs, 123 tp->tp_frees, tp->tp_maxalloc); 124 if (v == NULL) { 125 Py_DECREF(result); 126 return NULL; 127 } 128 if (PyList_Append(result, v) < 0) { 129 Py_DECREF(v); 130 Py_DECREF(result); 131 return NULL; 132 } 133 Py_DECREF(v); 134 } 135 return result; 136 } 137 138 void 139 inc_count(PyTypeObject *tp) 140 { 141 if (tp->tp_next == NULL && tp->tp_prev == NULL) { 142 /* first time; insert in linked list */ 143 if (tp->tp_next != NULL) /* sanity check */ 144 Py_FatalError("XXX inc_count sanity check"); 145 if (type_list) 146 type_list->tp_prev = tp; 147 tp->tp_next = type_list; 148 /* Note that as of Python 2.2, heap-allocated type objects 149 * can go away, but this code requires that they stay alive 150 * until program exit. That's why we're careful with 151 * refcounts here. type_list gets a new reference to tp, 152 * while ownership of the reference type_list used to hold 153 * (if any) was transferred to tp->tp_next in the line above. 154 * tp is thus effectively immortal after this. 155 */ 156 Py_INCREF(tp); 157 type_list = tp; 158 #ifdef Py_TRACE_REFS 159 /* Also insert in the doubly-linked list of all objects, 160 * if not already there. 161 */ 162 _Py_AddToAllObjects((PyObject *)tp, 0); 163 #endif 164 } 165 tp->tp_allocs++; 166 if (tp->tp_allocs - tp->tp_frees > tp->tp_maxalloc) 167 tp->tp_maxalloc = tp->tp_allocs - tp->tp_frees; 168 } 169 170 void dec_count(PyTypeObject *tp) 171 { 172 tp->tp_frees++; 173 if (unlist_types_without_objects && 174 tp->tp_allocs == tp->tp_frees) { 175 /* unlink the type from type_list */ 176 if (tp->tp_prev) 177 tp->tp_prev->tp_next = tp->tp_next; 178 else 179 type_list = tp->tp_next; 180 if (tp->tp_next) 181 tp->tp_next->tp_prev = tp->tp_prev; 182 tp->tp_next = tp->tp_prev = NULL; 183 Py_DECREF(tp); 184 } 185 } 186 187 #endif 188 189 #ifdef Py_REF_DEBUG 190 /* Log a fatal error; doesn't return. */ 191 void 192 _Py_NegativeRefcount(const char *fname, int lineno, PyObject *op) 193 { 194 char buf[300]; 195 196 PyOS_snprintf(buf, sizeof(buf), 197 "%s:%i object at %p has negative ref count " 198 "%" PY_FORMAT_SIZE_T "d", 199 fname, lineno, op, op->ob_refcnt); 200 Py_FatalError(buf); 201 } 202 203 #endif /* Py_REF_DEBUG */ 204 205 void 206 Py_IncRef(PyObject *o) 207 { 208 Py_XINCREF(o); 209 } 210 211 void 212 Py_DecRef(PyObject *o) 213 { 214 Py_XDECREF(o); 215 } 216 217 PyObject * 218 PyObject_Init(PyObject *op, PyTypeObject *tp) 219 { 220 if (op == NULL) 221 return PyErr_NoMemory(); 222 /* Any changes should be reflected in PyObject_INIT (objimpl.h) */ 223 Py_TYPE(op) = tp; 224 _Py_NewReference(op); 225 return op; 226 } 227 228 PyVarObject * 229 PyObject_InitVar(PyVarObject *op, PyTypeObject *tp, Py_ssize_t size) 230 { 231 if (op == NULL) 232 return (PyVarObject *) PyErr_NoMemory(); 233 /* Any changes should be reflected in PyObject_INIT_VAR */ 234 op->ob_size = size; 235 Py_TYPE(op) = tp; 236 _Py_NewReference((PyObject *)op); 237 return op; 238 } 239 240 PyObject * 241 _PyObject_New(PyTypeObject *tp) 242 { 243 PyObject *op; 244 op = (PyObject *) PyObject_MALLOC(_PyObject_SIZE(tp)); 245 if (op == NULL) 246 return PyErr_NoMemory(); 247 return PyObject_INIT(op, tp); 248 } 249 250 PyVarObject * 251 _PyObject_NewVar(PyTypeObject *tp, Py_ssize_t nitems) 252 { 253 PyVarObject *op; 254 const size_t size = _PyObject_VAR_SIZE(tp, nitems); 255 op = (PyVarObject *) PyObject_MALLOC(size); 256 if (op == NULL) 257 return (PyVarObject *)PyErr_NoMemory(); 258 return PyObject_INIT_VAR(op, tp, nitems); 259 } 260 261 /* for binary compatibility with 2.2 */ 262 #undef _PyObject_Del 263 void 264 _PyObject_Del(PyObject *op) 265 { 266 PyObject_FREE(op); 267 } 268 269 /* Implementation of PyObject_Print with recursion checking */ 270 static int 271 internal_print(PyObject *op, FILE *fp, int flags, int nesting) 272 { 273 int ret = 0; 274 if (nesting > 10) { 275 PyErr_SetString(PyExc_RuntimeError, "print recursion"); 276 return -1; 277 } 278 if (PyErr_CheckSignals()) 279 return -1; 280 #ifdef USE_STACKCHECK 281 if (PyOS_CheckStack()) { 282 PyErr_SetString(PyExc_MemoryError, "stack overflow"); 283 return -1; 284 } 285 #endif 286 clearerr(fp); /* Clear any previous error condition */ 287 if (op == NULL) { 288 Py_BEGIN_ALLOW_THREADS 289 fprintf(fp, "<nil>"); 290 Py_END_ALLOW_THREADS 291 } 292 else { 293 if (op->ob_refcnt <= 0) 294 /* XXX(twouters) cast refcount to long until %zd is 295 universally available */ 296 Py_BEGIN_ALLOW_THREADS 297 fprintf(fp, "<refcnt %ld at %p>", 298 (long)op->ob_refcnt, op); 299 Py_END_ALLOW_THREADS 300 else if (Py_TYPE(op)->tp_print == NULL) { 301 PyObject *s; 302 if (flags & Py_PRINT_RAW) 303 s = PyObject_Str(op); 304 else 305 s = PyObject_Repr(op); 306 if (s == NULL) 307 ret = -1; 308 else { 309 ret = internal_print(s, fp, Py_PRINT_RAW, 310 nesting+1); 311 } 312 Py_XDECREF(s); 313 } 314 else 315 ret = (*Py_TYPE(op)->tp_print)(op, fp, flags); 316 } 317 if (ret == 0) { 318 if (ferror(fp)) { 319 PyErr_SetFromErrno(PyExc_IOError); 320 clearerr(fp); 321 ret = -1; 322 } 323 } 324 return ret; 325 } 326 327 int 328 PyObject_Print(PyObject *op, FILE *fp, int flags) 329 { 330 return internal_print(op, fp, flags, 0); 331 } 332 333 334 /* For debugging convenience. See Misc/gdbinit for some useful gdb hooks */ 335 void _PyObject_Dump(PyObject* op) 336 { 337 if (op == NULL) 338 fprintf(stderr, "NULL\n"); 339 else { 340 #ifdef WITH_THREAD 341 PyGILState_STATE gil; 342 #endif 343 fprintf(stderr, "object : "); 344 #ifdef WITH_THREAD 345 gil = PyGILState_Ensure(); 346 #endif 347 (void)PyObject_Print(op, stderr, 0); 348 #ifdef WITH_THREAD 349 PyGILState_Release(gil); 350 #endif 351 /* XXX(twouters) cast refcount to long until %zd is 352 universally available */ 353 fprintf(stderr, "\n" 354 "type : %s\n" 355 "refcount: %ld\n" 356 "address : %p\n", 357 Py_TYPE(op)==NULL ? "NULL" : Py_TYPE(op)->tp_name, 358 (long)op->ob_refcnt, 359 op); 360 } 361 } 362 363 PyObject * 364 PyObject_Repr(PyObject *v) 365 { 366 if (PyErr_CheckSignals()) 367 return NULL; 368 #ifdef USE_STACKCHECK 369 if (PyOS_CheckStack()) { 370 PyErr_SetString(PyExc_MemoryError, "stack overflow"); 371 return NULL; 372 } 373 #endif 374 if (v == NULL) 375 return PyString_FromString("<NULL>"); 376 else if (Py_TYPE(v)->tp_repr == NULL) 377 return PyString_FromFormat("<%s object at %p>", 378 Py_TYPE(v)->tp_name, v); 379 else { 380 PyObject *res; 381 res = (*Py_TYPE(v)->tp_repr)(v); 382 if (res == NULL) 383 return NULL; 384 #ifdef Py_USING_UNICODE 385 if (PyUnicode_Check(res)) { 386 PyObject* str; 387 str = PyUnicode_AsEncodedString(res, NULL, NULL); 388 Py_DECREF(res); 389 if (str) 390 res = str; 391 else 392 return NULL; 393 } 394 #endif 395 if (!PyString_Check(res)) { 396 PyErr_Format(PyExc_TypeError, 397 "__repr__ returned non-string (type %.200s)", 398 Py_TYPE(res)->tp_name); 399 Py_DECREF(res); 400 return NULL; 401 } 402 return res; 403 } 404 } 405 406 PyObject * 407 _PyObject_Str(PyObject *v) 408 { 409 PyObject *res; 410 int type_ok; 411 if (v == NULL) 412 return PyString_FromString("<NULL>"); 413 if (PyString_CheckExact(v)) { 414 Py_INCREF(v); 415 return v; 416 } 417 #ifdef Py_USING_UNICODE 418 if (PyUnicode_CheckExact(v)) { 419 Py_INCREF(v); 420 return v; 421 } 422 #endif 423 if (Py_TYPE(v)->tp_str == NULL) 424 return PyObject_Repr(v); 425 426 /* It is possible for a type to have a tp_str representation that loops 427 infinitely. */ 428 if (Py_EnterRecursiveCall(" while getting the str of an object")) 429 return NULL; 430 res = (*Py_TYPE(v)->tp_str)(v); 431 Py_LeaveRecursiveCall(); 432 if (res == NULL) 433 return NULL; 434 type_ok = PyString_Check(res); 435 #ifdef Py_USING_UNICODE 436 type_ok = type_ok || PyUnicode_Check(res); 437 #endif 438 if (!type_ok) { 439 PyErr_Format(PyExc_TypeError, 440 "__str__ returned non-string (type %.200s)", 441 Py_TYPE(res)->tp_name); 442 Py_DECREF(res); 443 return NULL; 444 } 445 return res; 446 } 447 448 PyObject * 449 PyObject_Str(PyObject *v) 450 { 451 PyObject *res = _PyObject_Str(v); 452 if (res == NULL) 453 return NULL; 454 #ifdef Py_USING_UNICODE 455 if (PyUnicode_Check(res)) { 456 PyObject* str; 457 str = PyUnicode_AsEncodedString(res, NULL, NULL); 458 Py_DECREF(res); 459 if (str) 460 res = str; 461 else 462 return NULL; 463 } 464 #endif 465 assert(PyString_Check(res)); 466 return res; 467 } 468 469 #ifdef Py_USING_UNICODE 470 PyObject * 471 PyObject_Unicode(PyObject *v) 472 { 473 PyObject *res = NULL; 474 PyObject *func = NULL; 475 PyObject *str = NULL; 476 int unicode_method_found = 0; 477 static PyObject *unicodestr = NULL; 478 479 if (v == NULL) { 480 res = PyString_FromString("<NULL>"); 481 if (res == NULL) 482 return NULL; 483 str = PyUnicode_FromEncodedObject(res, NULL, "strict"); 484 Py_DECREF(res); 485 return str; 486 } else if (PyUnicode_CheckExact(v)) { 487 Py_INCREF(v); 488 return v; 489 } 490 491 if (PyInstance_Check(v)) { 492 /* We're an instance of a classic class */ 493 /* Try __unicode__ from the instance -- alas we have no type */ 494 func = PyObject_GetAttr(v, unicodestr); 495 if (func != NULL) { 496 unicode_method_found = 1; 497 res = PyObject_CallFunctionObjArgs(func, NULL); 498 Py_DECREF(func); 499 } 500 else { 501 PyErr_Clear(); 502 } 503 } 504 else { 505 /* Not a classic class instance, try __unicode__. */ 506 func = _PyObject_LookupSpecial(v, "__unicode__", &unicodestr); 507 if (func != NULL) { 508 unicode_method_found = 1; 509 res = PyObject_CallFunctionObjArgs(func, NULL); 510 Py_DECREF(func); 511 } 512 else if (PyErr_Occurred()) 513 return NULL; 514 } 515 516 /* Didn't find __unicode__ */ 517 if (!unicode_method_found) { 518 if (PyUnicode_Check(v)) { 519 /* For a Unicode subtype that's didn't overwrite __unicode__, 520 return a true Unicode object with the same data. */ 521 return PyUnicode_FromUnicode(PyUnicode_AS_UNICODE(v), 522 PyUnicode_GET_SIZE(v)); 523 } 524 if (PyString_CheckExact(v)) { 525 Py_INCREF(v); 526 res = v; 527 } 528 else { 529 if (Py_TYPE(v)->tp_str != NULL) 530 res = (*Py_TYPE(v)->tp_str)(v); 531 else 532 res = PyObject_Repr(v); 533 } 534 } 535 536 if (res == NULL) 537 return NULL; 538 if (!PyUnicode_Check(res)) { 539 str = PyUnicode_FromEncodedObject(res, NULL, "strict"); 540 Py_DECREF(res); 541 res = str; 542 } 543 return res; 544 } 545 #endif 546 547 548 /* Helper to warn about deprecated tp_compare return values. Return: 549 -2 for an exception; 550 -1 if v < w; 551 0 if v == w; 552 1 if v > w. 553 (This function cannot return 2.) 554 */ 555 static int 556 adjust_tp_compare(int c) 557 { 558 if (PyErr_Occurred()) { 559 if (c != -1 && c != -2) { 560 PyObject *t, *v, *tb; 561 PyErr_Fetch(&t, &v, &tb); 562 if (PyErr_Warn(PyExc_RuntimeWarning, 563 "tp_compare didn't return -1 or -2 " 564 "for exception") < 0) { 565 Py_XDECREF(t); 566 Py_XDECREF(v); 567 Py_XDECREF(tb); 568 } 569 else 570 PyErr_Restore(t, v, tb); 571 } 572 return -2; 573 } 574 else if (c < -1 || c > 1) { 575 if (PyErr_Warn(PyExc_RuntimeWarning, 576 "tp_compare didn't return -1, 0 or 1") < 0) 577 return -2; 578 else 579 return c < -1 ? -1 : 1; 580 } 581 else { 582 assert(c >= -1 && c <= 1); 583 return c; 584 } 585 } 586 587 588 /* Macro to get the tp_richcompare field of a type if defined */ 589 #define RICHCOMPARE(t) (PyType_HasFeature((t), Py_TPFLAGS_HAVE_RICHCOMPARE) \ 590 ? (t)->tp_richcompare : NULL) 591 592 /* Map rich comparison operators to their swapped version, e.g. LT --> GT */ 593 int _Py_SwappedOp[] = {Py_GT, Py_GE, Py_EQ, Py_NE, Py_LT, Py_LE}; 594 595 /* Try a genuine rich comparison, returning an object. Return: 596 NULL for exception; 597 NotImplemented if this particular rich comparison is not implemented or 598 undefined; 599 some object not equal to NotImplemented if it is implemented 600 (this latter object may not be a Boolean). 601 */ 602 static PyObject * 603 try_rich_compare(PyObject *v, PyObject *w, int op) 604 { 605 richcmpfunc f; 606 PyObject *res; 607 608 if (v->ob_type != w->ob_type && 609 PyType_IsSubtype(w->ob_type, v->ob_type) && 610 (f = RICHCOMPARE(w->ob_type)) != NULL) { 611 res = (*f)(w, v, _Py_SwappedOp[op]); 612 if (res != Py_NotImplemented) 613 return res; 614 Py_DECREF(res); 615 } 616 if ((f = RICHCOMPARE(v->ob_type)) != NULL) { 617 res = (*f)(v, w, op); 618 if (res != Py_NotImplemented) 619 return res; 620 Py_DECREF(res); 621 } 622 if ((f = RICHCOMPARE(w->ob_type)) != NULL) { 623 return (*f)(w, v, _Py_SwappedOp[op]); 624 } 625 res = Py_NotImplemented; 626 Py_INCREF(res); 627 return res; 628 } 629 630 /* Try a genuine rich comparison, returning an int. Return: 631 -1 for exception (including the case where try_rich_compare() returns an 632 object that's not a Boolean); 633 0 if the outcome is false; 634 1 if the outcome is true; 635 2 if this particular rich comparison is not implemented or undefined. 636 */ 637 static int 638 try_rich_compare_bool(PyObject *v, PyObject *w, int op) 639 { 640 PyObject *res; 641 int ok; 642 643 if (RICHCOMPARE(v->ob_type) == NULL && RICHCOMPARE(w->ob_type) == NULL) 644 return 2; /* Shortcut, avoid INCREF+DECREF */ 645 res = try_rich_compare(v, w, op); 646 if (res == NULL) 647 return -1; 648 if (res == Py_NotImplemented) { 649 Py_DECREF(res); 650 return 2; 651 } 652 ok = PyObject_IsTrue(res); 653 Py_DECREF(res); 654 return ok; 655 } 656 657 /* Try rich comparisons to determine a 3-way comparison. Return: 658 -2 for an exception; 659 -1 if v < w; 660 0 if v == w; 661 1 if v > w; 662 2 if this particular rich comparison is not implemented or undefined. 663 */ 664 static int 665 try_rich_to_3way_compare(PyObject *v, PyObject *w) 666 { 667 static struct { int op; int outcome; } tries[3] = { 668 /* Try this operator, and if it is true, use this outcome: */ 669 {Py_EQ, 0}, 670 {Py_LT, -1}, 671 {Py_GT, 1}, 672 }; 673 int i; 674 675 if (RICHCOMPARE(v->ob_type) == NULL && RICHCOMPARE(w->ob_type) == NULL) 676 return 2; /* Shortcut */ 677 678 for (i = 0; i < 3; i++) { 679 switch (try_rich_compare_bool(v, w, tries[i].op)) { 680 case -1: 681 return -2; 682 case 1: 683 return tries[i].outcome; 684 } 685 } 686 687 return 2; 688 } 689 690 /* Try a 3-way comparison, returning an int. Return: 691 -2 for an exception; 692 -1 if v < w; 693 0 if v == w; 694 1 if v > w; 695 2 if this particular 3-way comparison is not implemented or undefined. 696 */ 697 static int 698 try_3way_compare(PyObject *v, PyObject *w) 699 { 700 int c; 701 cmpfunc f; 702 703 /* Comparisons involving instances are given to instance_compare, 704 which has the same return conventions as this function. */ 705 706 f = v->ob_type->tp_compare; 707 if (PyInstance_Check(v)) 708 return (*f)(v, w); 709 if (PyInstance_Check(w)) 710 return (*w->ob_type->tp_compare)(v, w); 711 712 /* If both have the same (non-NULL) tp_compare, use it. */ 713 if (f != NULL && f == w->ob_type->tp_compare) { 714 c = (*f)(v, w); 715 return adjust_tp_compare(c); 716 } 717 718 /* If either tp_compare is _PyObject_SlotCompare, that's safe. */ 719 if (f == _PyObject_SlotCompare || 720 w->ob_type->tp_compare == _PyObject_SlotCompare) 721 return _PyObject_SlotCompare(v, w); 722 723 /* If we're here, v and w, 724 a) are not instances; 725 b) have different types or a type without tp_compare; and 726 c) don't have a user-defined tp_compare. 727 tp_compare implementations in C assume that both arguments 728 have their type, so we give up if the coercion fails or if 729 it yields types which are still incompatible (which can 730 happen with a user-defined nb_coerce). 731 */ 732 c = PyNumber_CoerceEx(&v, &w); 733 if (c < 0) 734 return -2; 735 if (c > 0) 736 return 2; 737 f = v->ob_type->tp_compare; 738 if (f != NULL && f == w->ob_type->tp_compare) { 739 c = (*f)(v, w); 740 Py_DECREF(v); 741 Py_DECREF(w); 742 return adjust_tp_compare(c); 743 } 744 745 /* No comparison defined */ 746 Py_DECREF(v); 747 Py_DECREF(w); 748 return 2; 749 } 750 751 /* Final fallback 3-way comparison, returning an int. Return: 752 -2 if an error occurred; 753 -1 if v < w; 754 0 if v == w; 755 1 if v > w. 756 */ 757 static int 758 default_3way_compare(PyObject *v, PyObject *w) 759 { 760 int c; 761 const char *vname, *wname; 762 763 if (v->ob_type == w->ob_type) { 764 /* When comparing these pointers, they must be cast to 765 * integer types (i.e. Py_uintptr_t, our spelling of C9X's 766 * uintptr_t). ANSI specifies that pointer compares other 767 * than == and != to non-related structures are undefined. 768 */ 769 Py_uintptr_t vv = (Py_uintptr_t)v; 770 Py_uintptr_t ww = (Py_uintptr_t)w; 771 return (vv < ww) ? -1 : (vv > ww) ? 1 : 0; 772 } 773 774 /* None is smaller than anything */ 775 if (v == Py_None) 776 return -1; 777 if (w == Py_None) 778 return 1; 779 780 /* different type: compare type names; numbers are smaller */ 781 if (PyNumber_Check(v)) 782 vname = ""; 783 else 784 vname = v->ob_type->tp_name; 785 if (PyNumber_Check(w)) 786 wname = ""; 787 else 788 wname = w->ob_type->tp_name; 789 c = strcmp(vname, wname); 790 if (c < 0) 791 return -1; 792 if (c > 0) 793 return 1; 794 /* Same type name, or (more likely) incomparable numeric types */ 795 return ((Py_uintptr_t)(v->ob_type) < ( 796 Py_uintptr_t)(w->ob_type)) ? -1 : 1; 797 } 798 799 /* Do a 3-way comparison, by hook or by crook. Return: 800 -2 for an exception (but see below); 801 -1 if v < w; 802 0 if v == w; 803 1 if v > w; 804 BUT: if the object implements a tp_compare function, it returns 805 whatever this function returns (whether with an exception or not). 806 */ 807 static int 808 do_cmp(PyObject *v, PyObject *w) 809 { 810 int c; 811 cmpfunc f; 812 813 if (v->ob_type == w->ob_type 814 && (f = v->ob_type->tp_compare) != NULL) { 815 c = (*f)(v, w); 816 if (PyInstance_Check(v)) { 817 /* Instance tp_compare has a different signature. 818 But if it returns undefined we fall through. */ 819 if (c != 2) 820 return c; 821 /* Else fall through to try_rich_to_3way_compare() */ 822 } 823 else 824 return adjust_tp_compare(c); 825 } 826 /* We only get here if one of the following is true: 827 a) v and w have different types 828 b) v and w have the same type, which doesn't have tp_compare 829 c) v and w are instances, and either __cmp__ is not defined or 830 __cmp__ returns NotImplemented 831 */ 832 c = try_rich_to_3way_compare(v, w); 833 if (c < 2) 834 return c; 835 c = try_3way_compare(v, w); 836 if (c < 2) 837 return c; 838 return default_3way_compare(v, w); 839 } 840 841 /* Compare v to w. Return 842 -1 if v < w or exception (PyErr_Occurred() true in latter case). 843 0 if v == w. 844 1 if v > w. 845 XXX The docs (C API manual) say the return value is undefined in case 846 XXX of error. 847 */ 848 int 849 PyObject_Compare(PyObject *v, PyObject *w) 850 { 851 int result; 852 853 if (v == NULL || w == NULL) { 854 PyErr_BadInternalCall(); 855 return -1; 856 } 857 if (v == w) 858 return 0; 859 if (Py_EnterRecursiveCall(" in cmp")) 860 return -1; 861 result = do_cmp(v, w); 862 Py_LeaveRecursiveCall(); 863 return result < 0 ? -1 : result; 864 } 865 866 /* Return (new reference to) Py_True or Py_False. */ 867 static PyObject * 868 convert_3way_to_object(int op, int c) 869 { 870 PyObject *result; 871 switch (op) { 872 case Py_LT: c = c < 0; break; 873 case Py_LE: c = c <= 0; break; 874 case Py_EQ: c = c == 0; break; 875 case Py_NE: c = c != 0; break; 876 case Py_GT: c = c > 0; break; 877 case Py_GE: c = c >= 0; break; 878 } 879 result = c ? Py_True : Py_False; 880 Py_INCREF(result); 881 return result; 882 } 883 884 /* We want a rich comparison but don't have one. Try a 3-way cmp instead. 885 Return 886 NULL if error 887 Py_True if v op w 888 Py_False if not (v op w) 889 */ 890 static PyObject * 891 try_3way_to_rich_compare(PyObject *v, PyObject *w, int op) 892 { 893 int c; 894 895 c = try_3way_compare(v, w); 896 if (c >= 2) { 897 898 /* Py3K warning if types are not equal and comparison isn't == or != */ 899 if (Py_Py3kWarningFlag && 900 v->ob_type != w->ob_type && op != Py_EQ && op != Py_NE && 901 PyErr_WarnEx(PyExc_DeprecationWarning, 902 "comparing unequal types not supported " 903 "in 3.x", 1) < 0) { 904 return NULL; 905 } 906 907 c = default_3way_compare(v, w); 908 } 909 if (c <= -2) 910 return NULL; 911 return convert_3way_to_object(op, c); 912 } 913 914 /* Do rich comparison on v and w. Return 915 NULL if error 916 Else a new reference to an object other than Py_NotImplemented, usually(?): 917 Py_True if v op w 918 Py_False if not (v op w) 919 */ 920 static PyObject * 921 do_richcmp(PyObject *v, PyObject *w, int op) 922 { 923 PyObject *res; 924 925 res = try_rich_compare(v, w, op); 926 if (res != Py_NotImplemented) 927 return res; 928 Py_DECREF(res); 929 930 return try_3way_to_rich_compare(v, w, op); 931 } 932 933 /* Return: 934 NULL for exception; 935 some object not equal to NotImplemented if it is implemented 936 (this latter object may not be a Boolean). 937 */ 938 PyObject * 939 PyObject_RichCompare(PyObject *v, PyObject *w, int op) 940 { 941 PyObject *res; 942 943 assert(Py_LT <= op && op <= Py_GE); 944 if (Py_EnterRecursiveCall(" in cmp")) 945 return NULL; 946 947 /* If the types are equal, and not old-style instances, try to 948 get out cheap (don't bother with coercions etc.). */ 949 if (v->ob_type == w->ob_type && !PyInstance_Check(v)) { 950 cmpfunc fcmp; 951 richcmpfunc frich = RICHCOMPARE(v->ob_type); 952 /* If the type has richcmp, try it first. try_rich_compare 953 tries it two-sided, which is not needed since we've a 954 single type only. */ 955 if (frich != NULL) { 956 res = (*frich)(v, w, op); 957 if (res != Py_NotImplemented) 958 goto Done; 959 Py_DECREF(res); 960 } 961 /* No richcmp, or this particular richmp not implemented. 962 Try 3-way cmp. */ 963 fcmp = v->ob_type->tp_compare; 964 if (fcmp != NULL) { 965 int c = (*fcmp)(v, w); 966 c = adjust_tp_compare(c); 967 if (c == -2) { 968 res = NULL; 969 goto Done; 970 } 971 res = convert_3way_to_object(op, c); 972 goto Done; 973 } 974 } 975 976 /* Fast path not taken, or couldn't deliver a useful result. */ 977 res = do_richcmp(v, w, op); 978 Done: 979 Py_LeaveRecursiveCall(); 980 return res; 981 } 982 983 /* Return -1 if error; 1 if v op w; 0 if not (v op w). */ 984 int 985 PyObject_RichCompareBool(PyObject *v, PyObject *w, int op) 986 { 987 PyObject *res; 988 int ok; 989 990 /* Quick result when objects are the same. 991 Guarantees that identity implies equality. */ 992 if (v == w) { 993 if (op == Py_EQ) 994 return 1; 995 else if (op == Py_NE) 996 return 0; 997 } 998 999 res = PyObject_RichCompare(v, w, op); 1000 if (res == NULL) 1001 return -1; 1002 if (PyBool_Check(res)) 1003 ok = (res == Py_True); 1004 else 1005 ok = PyObject_IsTrue(res); 1006 Py_DECREF(res); 1007 return ok; 1008 } 1009 1010 /* Set of hash utility functions to help maintaining the invariant that 1011 if a==b then hash(a)==hash(b) 1012 1013 All the utility functions (_Py_Hash*()) return "-1" to signify an error. 1014 */ 1015 1016 long 1017 _Py_HashDouble(double v) 1018 { 1019 double intpart, fractpart; 1020 int expo; 1021 long hipart; 1022 long x; /* the final hash value */ 1023 /* This is designed so that Python numbers of different types 1024 * that compare equal hash to the same value; otherwise comparisons 1025 * of mapping keys will turn out weird. 1026 */ 1027 1028 if (!Py_IS_FINITE(v)) { 1029 if (Py_IS_INFINITY(v)) 1030 return v < 0 ? -271828 : 314159; 1031 else 1032 return 0; 1033 } 1034 fractpart = modf(v, &intpart); 1035 if (fractpart == 0.0) { 1036 /* This must return the same hash as an equal int or long. */ 1037 if (intpart > LONG_MAX/2 || -intpart > LONG_MAX/2) { 1038 /* Convert to long and use its hash. */ 1039 PyObject *plong; /* converted to Python long */ 1040 plong = PyLong_FromDouble(v); 1041 if (plong == NULL) 1042 return -1; 1043 x = PyObject_Hash(plong); 1044 Py_DECREF(plong); 1045 return x; 1046 } 1047 /* Fits in a C long == a Python int, so is its own hash. */ 1048 x = (long)intpart; 1049 if (x == -1) 1050 x = -2; 1051 return x; 1052 } 1053 /* The fractional part is non-zero, so we don't have to worry about 1054 * making this match the hash of some other type. 1055 * Use frexp to get at the bits in the double. 1056 * Since the VAX D double format has 56 mantissa bits, which is the 1057 * most of any double format in use, each of these parts may have as 1058 * many as (but no more than) 56 significant bits. 1059 * So, assuming sizeof(long) >= 4, each part can be broken into two 1060 * longs; frexp and multiplication are used to do that. 1061 * Also, since the Cray double format has 15 exponent bits, which is 1062 * the most of any double format in use, shifting the exponent field 1063 * left by 15 won't overflow a long (again assuming sizeof(long) >= 4). 1064 */ 1065 v = frexp(v, &expo); 1066 v *= 2147483648.0; /* 2**31 */ 1067 hipart = (long)v; /* take the top 32 bits */ 1068 v = (v - (double)hipart) * 2147483648.0; /* get the next 32 bits */ 1069 x = hipart + (long)v + (expo << 15); 1070 if (x == -1) 1071 x = -2; 1072 return x; 1073 } 1074 1075 long 1076 _Py_HashPointer(void *p) 1077 { 1078 long x; 1079 size_t y = (size_t)p; 1080 /* bottom 3 or 4 bits are likely to be 0; rotate y by 4 to avoid 1081 excessive hash collisions for dicts and sets */ 1082 y = (y >> 4) | (y << (8 * SIZEOF_VOID_P - 4)); 1083 x = (long)y; 1084 if (x == -1) 1085 x = -2; 1086 return x; 1087 } 1088 1089 long 1090 PyObject_HashNotImplemented(PyObject *self) 1091 { 1092 PyErr_Format(PyExc_TypeError, "unhashable type: '%.200s'", 1093 self->ob_type->tp_name); 1094 return -1; 1095 } 1096 1097 long 1098 PyObject_Hash(PyObject *v) 1099 { 1100 PyTypeObject *tp = v->ob_type; 1101 if (tp->tp_hash != NULL) 1102 return (*tp->tp_hash)(v); 1103 /* To keep to the general practice that inheriting 1104 * solely from object in C code should work without 1105 * an explicit call to PyType_Ready, we implicitly call 1106 * PyType_Ready here and then check the tp_hash slot again 1107 */ 1108 if (tp->tp_dict == NULL) { 1109 if (PyType_Ready(tp) < 0) 1110 return -1; 1111 if (tp->tp_hash != NULL) 1112 return (*tp->tp_hash)(v); 1113 } 1114 if (tp->tp_compare == NULL && RICHCOMPARE(tp) == NULL) { 1115 return _Py_HashPointer(v); /* Use address as hash value */ 1116 } 1117 /* If there's a cmp but no hash defined, the object can't be hashed */ 1118 return PyObject_HashNotImplemented(v); 1119 } 1120 1121 PyObject * 1122 PyObject_GetAttrString(PyObject *v, const char *name) 1123 { 1124 PyObject *w, *res; 1125 1126 if (Py_TYPE(v)->tp_getattr != NULL) 1127 return (*Py_TYPE(v)->tp_getattr)(v, (char*)name); 1128 w = PyString_InternFromString(name); 1129 if (w == NULL) 1130 return NULL; 1131 res = PyObject_GetAttr(v, w); 1132 Py_XDECREF(w); 1133 return res; 1134 } 1135 1136 int 1137 PyObject_HasAttrString(PyObject *v, const char *name) 1138 { 1139 PyObject *res = PyObject_GetAttrString(v, name); 1140 if (res != NULL) { 1141 Py_DECREF(res); 1142 return 1; 1143 } 1144 PyErr_Clear(); 1145 return 0; 1146 } 1147 1148 int 1149 PyObject_SetAttrString(PyObject *v, const char *name, PyObject *w) 1150 { 1151 PyObject *s; 1152 int res; 1153 1154 if (Py_TYPE(v)->tp_setattr != NULL) 1155 return (*Py_TYPE(v)->tp_setattr)(v, (char*)name, w); 1156 s = PyString_InternFromString(name); 1157 if (s == NULL) 1158 return -1; 1159 res = PyObject_SetAttr(v, s, w); 1160 Py_XDECREF(s); 1161 return res; 1162 } 1163 1164 PyObject * 1165 PyObject_GetAttr(PyObject *v, PyObject *name) 1166 { 1167 PyTypeObject *tp = Py_TYPE(v); 1168 1169 if (!PyString_Check(name)) { 1170 #ifdef Py_USING_UNICODE 1171 /* The Unicode to string conversion is done here because the 1172 existing tp_getattro slots expect a string object as name 1173 and we wouldn't want to break those. */ 1174 if (PyUnicode_Check(name)) { 1175 name = _PyUnicode_AsDefaultEncodedString(name, NULL); 1176 if (name == NULL) 1177 return NULL; 1178 } 1179 else 1180 #endif 1181 { 1182 PyErr_Format(PyExc_TypeError, 1183 "attribute name must be string, not '%.200s'", 1184 Py_TYPE(name)->tp_name); 1185 return NULL; 1186 } 1187 } 1188 if (tp->tp_getattro != NULL) 1189 return (*tp->tp_getattro)(v, name); 1190 if (tp->tp_getattr != NULL) 1191 return (*tp->tp_getattr)(v, PyString_AS_STRING(name)); 1192 PyErr_Format(PyExc_AttributeError, 1193 "'%.50s' object has no attribute '%.400s'", 1194 tp->tp_name, PyString_AS_STRING(name)); 1195 return NULL; 1196 } 1197 1198 int 1199 PyObject_HasAttr(PyObject *v, PyObject *name) 1200 { 1201 PyObject *res = PyObject_GetAttr(v, name); 1202 if (res != NULL) { 1203 Py_DECREF(res); 1204 return 1; 1205 } 1206 PyErr_Clear(); 1207 return 0; 1208 } 1209 1210 int 1211 PyObject_SetAttr(PyObject *v, PyObject *name, PyObject *value) 1212 { 1213 PyTypeObject *tp = Py_TYPE(v); 1214 int err; 1215 1216 if (!PyString_Check(name)){ 1217 #ifdef Py_USING_UNICODE 1218 /* The Unicode to string conversion is done here because the 1219 existing tp_setattro slots expect a string object as name 1220 and we wouldn't want to break those. */ 1221 if (PyUnicode_Check(name)) { 1222 name = PyUnicode_AsEncodedString(name, NULL, NULL); 1223 if (name == NULL) 1224 return -1; 1225 } 1226 else 1227 #endif 1228 { 1229 PyErr_Format(PyExc_TypeError, 1230 "attribute name must be string, not '%.200s'", 1231 Py_TYPE(name)->tp_name); 1232 return -1; 1233 } 1234 } 1235 else 1236 Py_INCREF(name); 1237 1238 PyString_InternInPlace(&name); 1239 if (tp->tp_setattro != NULL) { 1240 err = (*tp->tp_setattro)(v, name, value); 1241 Py_DECREF(name); 1242 return err; 1243 } 1244 if (tp->tp_setattr != NULL) { 1245 err = (*tp->tp_setattr)(v, PyString_AS_STRING(name), value); 1246 Py_DECREF(name); 1247 return err; 1248 } 1249 Py_DECREF(name); 1250 if (tp->tp_getattr == NULL && tp->tp_getattro == NULL) 1251 PyErr_Format(PyExc_TypeError, 1252 "'%.100s' object has no attributes " 1253 "(%s .%.100s)", 1254 tp->tp_name, 1255 value==NULL ? "del" : "assign to", 1256 PyString_AS_STRING(name)); 1257 else 1258 PyErr_Format(PyExc_TypeError, 1259 "'%.100s' object has only read-only attributes " 1260 "(%s .%.100s)", 1261 tp->tp_name, 1262 value==NULL ? "del" : "assign to", 1263 PyString_AS_STRING(name)); 1264 return -1; 1265 } 1266 1267 /* Helper to get a pointer to an object's __dict__ slot, if any */ 1268 1269 PyObject ** 1270 _PyObject_GetDictPtr(PyObject *obj) 1271 { 1272 Py_ssize_t dictoffset; 1273 PyTypeObject *tp = Py_TYPE(obj); 1274 1275 if (!(tp->tp_flags & Py_TPFLAGS_HAVE_CLASS)) 1276 return NULL; 1277 dictoffset = tp->tp_dictoffset; 1278 if (dictoffset == 0) 1279 return NULL; 1280 if (dictoffset < 0) { 1281 Py_ssize_t tsize; 1282 size_t size; 1283 1284 tsize = ((PyVarObject *)obj)->ob_size; 1285 if (tsize < 0) 1286 tsize = -tsize; 1287 size = _PyObject_VAR_SIZE(tp, tsize); 1288 1289 dictoffset += (long)size; 1290 assert(dictoffset > 0); 1291 assert(dictoffset % SIZEOF_VOID_P == 0); 1292 } 1293 return (PyObject **) ((char *)obj + dictoffset); 1294 } 1295 1296 PyObject * 1297 PyObject_SelfIter(PyObject *obj) 1298 { 1299 Py_INCREF(obj); 1300 return obj; 1301 } 1302 1303 /* Helper used when the __next__ method is removed from a type: 1304 tp_iternext is never NULL and can be safely called without checking 1305 on every iteration. 1306 */ 1307 1308 PyObject * 1309 _PyObject_NextNotImplemented(PyObject *self) 1310 { 1311 PyErr_Format(PyExc_TypeError, 1312 "'%.200s' object is not iterable", 1313 Py_TYPE(self)->tp_name); 1314 return NULL; 1315 } 1316 1317 /* Generic GetAttr functions - put these in your tp_[gs]etattro slot */ 1318 1319 PyObject * 1320 _PyObject_GenericGetAttrWithDict(PyObject *obj, PyObject *name, PyObject *dict) 1321 { 1322 PyTypeObject *tp = Py_TYPE(obj); 1323 PyObject *descr = NULL; 1324 PyObject *res = NULL; 1325 descrgetfunc f; 1326 Py_ssize_t dictoffset; 1327 PyObject **dictptr; 1328 1329 if (!PyString_Check(name)){ 1330 #ifdef Py_USING_UNICODE 1331 /* The Unicode to string conversion is done here because the 1332 existing tp_setattro slots expect a string object as name 1333 and we wouldn't want to break those. */ 1334 if (PyUnicode_Check(name)) { 1335 name = PyUnicode_AsEncodedString(name, NULL, NULL); 1336 if (name == NULL) 1337 return NULL; 1338 } 1339 else 1340 #endif 1341 { 1342 PyErr_Format(PyExc_TypeError, 1343 "attribute name must be string, not '%.200s'", 1344 Py_TYPE(name)->tp_name); 1345 return NULL; 1346 } 1347 } 1348 else 1349 Py_INCREF(name); 1350 1351 if (tp->tp_dict == NULL) { 1352 if (PyType_Ready(tp) < 0) 1353 goto done; 1354 } 1355 1356 #if 0 /* XXX this is not quite _PyType_Lookup anymore */ 1357 /* Inline _PyType_Lookup */ 1358 { 1359 Py_ssize_t i, n; 1360 PyObject *mro, *base, *dict; 1361 1362 /* Look in tp_dict of types in MRO */ 1363 mro = tp->tp_mro; 1364 assert(mro != NULL); 1365 assert(PyTuple_Check(mro)); 1366 n = PyTuple_GET_SIZE(mro); 1367 for (i = 0; i < n; i++) { 1368 base = PyTuple_GET_ITEM(mro, i); 1369 if (PyClass_Check(base)) 1370 dict = ((PyClassObject *)base)->cl_dict; 1371 else { 1372 assert(PyType_Check(base)); 1373 dict = ((PyTypeObject *)base)->tp_dict; 1374 } 1375 assert(dict && PyDict_Check(dict)); 1376 descr = PyDict_GetItem(dict, name); 1377 if (descr != NULL) 1378 break; 1379 } 1380 } 1381 #else 1382 descr = _PyType_Lookup(tp, name); 1383 #endif 1384 1385 Py_XINCREF(descr); 1386 1387 f = NULL; 1388 if (descr != NULL && 1389 PyType_HasFeature(descr->ob_type, Py_TPFLAGS_HAVE_CLASS)) { 1390 f = descr->ob_type->tp_descr_get; 1391 if (f != NULL && PyDescr_IsData(descr)) { 1392 res = f(descr, obj, (PyObject *)obj->ob_type); 1393 Py_DECREF(descr); 1394 goto done; 1395 } 1396 } 1397 1398 if (dict == NULL) { 1399 /* Inline _PyObject_GetDictPtr */ 1400 dictoffset = tp->tp_dictoffset; 1401 if (dictoffset != 0) { 1402 if (dictoffset < 0) { 1403 Py_ssize_t tsize; 1404 size_t size; 1405 1406 tsize = ((PyVarObject *)obj)->ob_size; 1407 if (tsize < 0) 1408 tsize = -tsize; 1409 size = _PyObject_VAR_SIZE(tp, tsize); 1410 1411 dictoffset += (long)size; 1412 assert(dictoffset > 0); 1413 assert(dictoffset % SIZEOF_VOID_P == 0); 1414 } 1415 dictptr = (PyObject **) ((char *)obj + dictoffset); 1416 dict = *dictptr; 1417 } 1418 } 1419 if (dict != NULL) { 1420 Py_INCREF(dict); 1421 res = PyDict_GetItem(dict, name); 1422 if (res != NULL) { 1423 Py_INCREF(res); 1424 Py_XDECREF(descr); 1425 Py_DECREF(dict); 1426 goto done; 1427 } 1428 Py_DECREF(dict); 1429 } 1430 1431 if (f != NULL) { 1432 res = f(descr, obj, (PyObject *)Py_TYPE(obj)); 1433 Py_DECREF(descr); 1434 goto done; 1435 } 1436 1437 if (descr != NULL) { 1438 res = descr; 1439 /* descr was already increfed above */ 1440 goto done; 1441 } 1442 1443 PyErr_Format(PyExc_AttributeError, 1444 "'%.50s' object has no attribute '%.400s'", 1445 tp->tp_name, PyString_AS_STRING(name)); 1446 done: 1447 Py_DECREF(name); 1448 return res; 1449 } 1450 1451 PyObject * 1452 PyObject_GenericGetAttr(PyObject *obj, PyObject *name) 1453 { 1454 return _PyObject_GenericGetAttrWithDict(obj, name, NULL); 1455 } 1456 1457 int 1458 _PyObject_GenericSetAttrWithDict(PyObject *obj, PyObject *name, 1459 PyObject *value, PyObject *dict) 1460 { 1461 PyTypeObject *tp = Py_TYPE(obj); 1462 PyObject *descr; 1463 descrsetfunc f; 1464 PyObject **dictptr; 1465 int res = -1; 1466 1467 if (!PyString_Check(name)){ 1468 #ifdef Py_USING_UNICODE 1469 /* The Unicode to string conversion is done here because the 1470 existing tp_setattro slots expect a string object as name 1471 and we wouldn't want to break those. */ 1472 if (PyUnicode_Check(name)) { 1473 name = PyUnicode_AsEncodedString(name, NULL, NULL); 1474 if (name == NULL) 1475 return -1; 1476 } 1477 else 1478 #endif 1479 { 1480 PyErr_Format(PyExc_TypeError, 1481 "attribute name must be string, not '%.200s'", 1482 Py_TYPE(name)->tp_name); 1483 return -1; 1484 } 1485 } 1486 else 1487 Py_INCREF(name); 1488 1489 if (tp->tp_dict == NULL) { 1490 if (PyType_Ready(tp) < 0) 1491 goto done; 1492 } 1493 1494 descr = _PyType_Lookup(tp, name); 1495 f = NULL; 1496 if (descr != NULL && 1497 PyType_HasFeature(descr->ob_type, Py_TPFLAGS_HAVE_CLASS)) { 1498 f = descr->ob_type->tp_descr_set; 1499 if (f != NULL && PyDescr_IsData(descr)) { 1500 res = f(descr, obj, value); 1501 goto done; 1502 } 1503 } 1504 1505 if (dict == NULL) { 1506 dictptr = _PyObject_GetDictPtr(obj); 1507 if (dictptr != NULL) { 1508 dict = *dictptr; 1509 if (dict == NULL && value != NULL) { 1510 dict = PyDict_New(); 1511 if (dict == NULL) 1512 goto done; 1513 *dictptr = dict; 1514 } 1515 } 1516 } 1517 if (dict != NULL) { 1518 Py_INCREF(dict); 1519 if (value == NULL) 1520 res = PyDict_DelItem(dict, name); 1521 else 1522 res = PyDict_SetItem(dict, name, value); 1523 if (res < 0 && PyErr_ExceptionMatches(PyExc_KeyError)) 1524 PyErr_SetObject(PyExc_AttributeError, name); 1525 Py_DECREF(dict); 1526 goto done; 1527 } 1528 1529 if (f != NULL) { 1530 res = f(descr, obj, value); 1531 goto done; 1532 } 1533 1534 if (descr == NULL) { 1535 PyErr_Format(PyExc_AttributeError, 1536 "'%.100s' object has no attribute '%.200s'", 1537 tp->tp_name, PyString_AS_STRING(name)); 1538 goto done; 1539 } 1540 1541 PyErr_Format(PyExc_AttributeError, 1542 "'%.50s' object attribute '%.400s' is read-only", 1543 tp->tp_name, PyString_AS_STRING(name)); 1544 done: 1545 Py_DECREF(name); 1546 return res; 1547 } 1548 1549 int 1550 PyObject_GenericSetAttr(PyObject *obj, PyObject *name, PyObject *value) 1551 { 1552 return _PyObject_GenericSetAttrWithDict(obj, name, value, NULL); 1553 } 1554 1555 1556 /* Test a value used as condition, e.g., in a for or if statement. 1557 Return -1 if an error occurred */ 1558 1559 int 1560 PyObject_IsTrue(PyObject *v) 1561 { 1562 Py_ssize_t res; 1563 if (v == Py_True) 1564 return 1; 1565 if (v == Py_False) 1566 return 0; 1567 if (v == Py_None) 1568 return 0; 1569 else if (v->ob_type->tp_as_number != NULL && 1570 v->ob_type->tp_as_number->nb_nonzero != NULL) 1571 res = (*v->ob_type->tp_as_number->nb_nonzero)(v); 1572 else if (v->ob_type->tp_as_mapping != NULL && 1573 v->ob_type->tp_as_mapping->mp_length != NULL) 1574 res = (*v->ob_type->tp_as_mapping->mp_length)(v); 1575 else if (v->ob_type->tp_as_sequence != NULL && 1576 v->ob_type->tp_as_sequence->sq_length != NULL) 1577 res = (*v->ob_type->tp_as_sequence->sq_length)(v); 1578 else 1579 return 1; 1580 /* if it is negative, it should be either -1 or -2 */ 1581 return (res > 0) ? 1 : Py_SAFE_DOWNCAST(res, Py_ssize_t, int); 1582 } 1583 1584 /* equivalent of 'not v' 1585 Return -1 if an error occurred */ 1586 1587 int 1588 PyObject_Not(PyObject *v) 1589 { 1590 int res; 1591 res = PyObject_IsTrue(v); 1592 if (res < 0) 1593 return res; 1594 return res == 0; 1595 } 1596 1597 /* Coerce two numeric types to the "larger" one. 1598 Increment the reference count on each argument. 1599 Return value: 1600 -1 if an error occurred; 1601 0 if the coercion succeeded (and then the reference counts are increased); 1602 1 if no coercion is possible (and no error is raised). 1603 */ 1604 int 1605 PyNumber_CoerceEx(PyObject **pv, PyObject **pw) 1606 { 1607 register PyObject *v = *pv; 1608 register PyObject *w = *pw; 1609 int res; 1610 1611 /* Shortcut only for old-style types */ 1612 if (v->ob_type == w->ob_type && 1613 !PyType_HasFeature(v->ob_type, Py_TPFLAGS_CHECKTYPES)) 1614 { 1615 Py_INCREF(v); 1616 Py_INCREF(w); 1617 return 0; 1618 } 1619 if (v->ob_type->tp_as_number && v->ob_type->tp_as_number->nb_coerce) { 1620 res = (*v->ob_type->tp_as_number->nb_coerce)(pv, pw); 1621 if (res <= 0) 1622 return res; 1623 } 1624 if (w->ob_type->tp_as_number && w->ob_type->tp_as_number->nb_coerce) { 1625 res = (*w->ob_type->tp_as_number->nb_coerce)(pw, pv); 1626 if (res <= 0) 1627 return res; 1628 } 1629 return 1; 1630 } 1631 1632 /* Coerce two numeric types to the "larger" one. 1633 Increment the reference count on each argument. 1634 Return -1 and raise an exception if no coercion is possible 1635 (and then no reference count is incremented). 1636 */ 1637 int 1638 PyNumber_Coerce(PyObject **pv, PyObject **pw) 1639 { 1640 int err = PyNumber_CoerceEx(pv, pw); 1641 if (err <= 0) 1642 return err; 1643 PyErr_SetString(PyExc_TypeError, "number coercion failed"); 1644 return -1; 1645 } 1646 1647 1648 /* Test whether an object can be called */ 1649 1650 int 1651 PyCallable_Check(PyObject *x) 1652 { 1653 if (x == NULL) 1654 return 0; 1655 if (PyInstance_Check(x)) { 1656 PyObject *call = PyObject_GetAttrString(x, "__call__"); 1657 if (call == NULL) { 1658 PyErr_Clear(); 1659 return 0; 1660 } 1661 /* Could test recursively but don't, for fear of endless 1662 recursion if some joker sets self.__call__ = self */ 1663 Py_DECREF(call); 1664 return 1; 1665 } 1666 else { 1667 return x->ob_type->tp_call != NULL; 1668 } 1669 } 1670 1671 /* ------------------------- PyObject_Dir() helpers ------------------------- */ 1672 1673 /* Helper for PyObject_Dir. 1674 Merge the __dict__ of aclass into dict, and recursively also all 1675 the __dict__s of aclass's base classes. The order of merging isn't 1676 defined, as it's expected that only the final set of dict keys is 1677 interesting. 1678 Return 0 on success, -1 on error. 1679 */ 1680 1681 static int 1682 merge_class_dict(PyObject* dict, PyObject* aclass) 1683 { 1684 PyObject *classdict; 1685 PyObject *bases; 1686 1687 assert(PyDict_Check(dict)); 1688 assert(aclass); 1689 1690 /* Merge in the type's dict (if any). */ 1691 classdict = PyObject_GetAttrString(aclass, "__dict__"); 1692 if (classdict == NULL) 1693 PyErr_Clear(); 1694 else { 1695 int status = PyDict_Update(dict, classdict); 1696 Py_DECREF(classdict); 1697 if (status < 0) 1698 return -1; 1699 } 1700 1701 /* Recursively merge in the base types' (if any) dicts. */ 1702 bases = PyObject_GetAttrString(aclass, "__bases__"); 1703 if (bases == NULL) 1704 PyErr_Clear(); 1705 else { 1706 /* We have no guarantee that bases is a real tuple */ 1707 Py_ssize_t i, n; 1708 n = PySequence_Size(bases); /* This better be right */ 1709 if (n < 0) 1710 PyErr_Clear(); 1711 else { 1712 for (i = 0; i < n; i++) { 1713 int status; 1714 PyObject *base = PySequence_GetItem(bases, i); 1715 if (base == NULL) { 1716 Py_DECREF(bases); 1717 return -1; 1718 } 1719 status = merge_class_dict(dict, base); 1720 Py_DECREF(base); 1721 if (status < 0) { 1722 Py_DECREF(bases); 1723 return -1; 1724 } 1725 } 1726 } 1727 Py_DECREF(bases); 1728 } 1729 return 0; 1730 } 1731 1732 /* Helper for PyObject_Dir. 1733 If obj has an attr named attrname that's a list, merge its string 1734 elements into keys of dict. 1735 Return 0 on success, -1 on error. Errors due to not finding the attr, 1736 or the attr not being a list, are suppressed. 1737 */ 1738 1739 static int 1740 merge_list_attr(PyObject* dict, PyObject* obj, const char *attrname) 1741 { 1742 PyObject *list; 1743 int result = 0; 1744 1745 assert(PyDict_Check(dict)); 1746 assert(obj); 1747 assert(attrname); 1748 1749 list = PyObject_GetAttrString(obj, attrname); 1750 if (list == NULL) 1751 PyErr_Clear(); 1752 1753 else if (PyList_Check(list)) { 1754 int i; 1755 for (i = 0; i < PyList_GET_SIZE(list); ++i) { 1756 PyObject *item = PyList_GET_ITEM(list, i); 1757 if (PyString_Check(item)) { 1758 result = PyDict_SetItem(dict, item, Py_None); 1759 if (result < 0) 1760 break; 1761 } 1762 } 1763 if (Py_Py3kWarningFlag && 1764 (strcmp(attrname, "__members__") == 0 || 1765 strcmp(attrname, "__methods__") == 0)) { 1766 if (PyErr_WarnEx(PyExc_DeprecationWarning, 1767 "__members__ and __methods__ not " 1768 "supported in 3.x", 1) < 0) { 1769 Py_XDECREF(list); 1770 return -1; 1771 } 1772 } 1773 } 1774 1775 Py_XDECREF(list); 1776 return result; 1777 } 1778 1779 /* Helper for PyObject_Dir without arguments: returns the local scope. */ 1780 static PyObject * 1781 _dir_locals(void) 1782 { 1783 PyObject *names; 1784 PyObject *locals = PyEval_GetLocals(); 1785 1786 if (locals == NULL) { 1787 PyErr_SetString(PyExc_SystemError, "frame does not exist"); 1788 return NULL; 1789 } 1790 1791 names = PyMapping_Keys(locals); 1792 if (!names) 1793 return NULL; 1794 if (!PyList_Check(names)) { 1795 PyErr_Format(PyExc_TypeError, 1796 "dir(): expected keys() of locals to be a list, " 1797 "not '%.200s'", Py_TYPE(names)->tp_name); 1798 Py_DECREF(names); 1799 return NULL; 1800 } 1801 /* the locals don't need to be DECREF'd */ 1802 return names; 1803 } 1804 1805 /* Helper for PyObject_Dir of type objects: returns __dict__ and __bases__. 1806 We deliberately don't suck up its __class__, as methods belonging to the 1807 metaclass would probably be more confusing than helpful. 1808 */ 1809 static PyObject * 1810 _specialized_dir_type(PyObject *obj) 1811 { 1812 PyObject *result = NULL; 1813 PyObject *dict = PyDict_New(); 1814 1815 if (dict != NULL && merge_class_dict(dict, obj) == 0) 1816 result = PyDict_Keys(dict); 1817 1818 Py_XDECREF(dict); 1819 return result; 1820 } 1821 1822 /* Helper for PyObject_Dir of module objects: returns the module's __dict__. */ 1823 static PyObject * 1824 _specialized_dir_module(PyObject *obj) 1825 { 1826 PyObject *result = NULL; 1827 PyObject *dict = PyObject_GetAttrString(obj, "__dict__"); 1828 1829 if (dict != NULL) { 1830 if (PyDict_Check(dict)) 1831 result = PyDict_Keys(dict); 1832 else { 1833 char *name = PyModule_GetName(obj); 1834 if (name) 1835 PyErr_Format(PyExc_TypeError, 1836 "%.200s.__dict__ is not a dictionary", 1837 name); 1838 } 1839 } 1840 1841 Py_XDECREF(dict); 1842 return result; 1843 } 1844 1845 /* Helper for PyObject_Dir of generic objects: returns __dict__, __class__, 1846 and recursively up the __class__.__bases__ chain. 1847 */ 1848 static PyObject * 1849 _generic_dir(PyObject *obj) 1850 { 1851 PyObject *result = NULL; 1852 PyObject *dict = NULL; 1853 PyObject *itsclass = NULL; 1854 1855 /* Get __dict__ (which may or may not be a real dict...) */ 1856 dict = PyObject_GetAttrString(obj, "__dict__"); 1857 if (dict == NULL) { 1858 PyErr_Clear(); 1859 dict = PyDict_New(); 1860 } 1861 else if (!PyDict_Check(dict)) { 1862 Py_DECREF(dict); 1863 dict = PyDict_New(); 1864 } 1865 else { 1866 /* Copy __dict__ to avoid mutating it. */ 1867 PyObject *temp = PyDict_Copy(dict); 1868 Py_DECREF(dict); 1869 dict = temp; 1870 } 1871 1872 if (dict == NULL) 1873 goto error; 1874 1875 /* Merge in __members__ and __methods__ (if any). 1876 * This is removed in Python 3000. */ 1877 if (merge_list_attr(dict, obj, "__members__") < 0) 1878 goto error; 1879 if (merge_list_attr(dict, obj, "__methods__") < 0) 1880 goto error; 1881 1882 /* Merge in attrs reachable from its class. */ 1883 itsclass = PyObject_GetAttrString(obj, "__class__"); 1884 if (itsclass == NULL) 1885 /* XXX(tomer): Perhaps fall back to obj->ob_type if no 1886 __class__ exists? */ 1887 PyErr_Clear(); 1888 else { 1889 if (merge_class_dict(dict, itsclass) != 0) 1890 goto error; 1891 } 1892 1893 result = PyDict_Keys(dict); 1894 /* fall through */ 1895 error: 1896 Py_XDECREF(itsclass); 1897 Py_XDECREF(dict); 1898 return result; 1899 } 1900 1901 /* Helper for PyObject_Dir: object introspection. 1902 This calls one of the above specialized versions if no __dir__ method 1903 exists. */ 1904 static PyObject * 1905 _dir_object(PyObject *obj) 1906 { 1907 PyObject *result = NULL; 1908 static PyObject *dir_str = NULL; 1909 PyObject *dirfunc; 1910 1911 assert(obj); 1912 if (PyInstance_Check(obj)) { 1913 dirfunc = PyObject_GetAttrString(obj, "__dir__"); 1914 if (dirfunc == NULL) { 1915 if (PyErr_ExceptionMatches(PyExc_AttributeError)) 1916 PyErr_Clear(); 1917 else 1918 return NULL; 1919 } 1920 } 1921 else { 1922 dirfunc = _PyObject_LookupSpecial(obj, "__dir__", &dir_str); 1923 if (PyErr_Occurred()) 1924 return NULL; 1925 } 1926 if (dirfunc == NULL) { 1927 /* use default implementation */ 1928 if (PyModule_Check(obj)) 1929 result = _specialized_dir_module(obj); 1930 else if (PyType_Check(obj) || PyClass_Check(obj)) 1931 result = _specialized_dir_type(obj); 1932 else 1933 result = _generic_dir(obj); 1934 } 1935 else { 1936 /* use __dir__ */ 1937 result = PyObject_CallFunctionObjArgs(dirfunc, NULL); 1938 Py_DECREF(dirfunc); 1939 if (result == NULL) 1940 return NULL; 1941 1942 /* result must be a list */ 1943 /* XXX(gbrandl): could also check if all items are strings */ 1944 if (!PyList_Check(result)) { 1945 PyErr_Format(PyExc_TypeError, 1946 "__dir__() must return a list, not %.200s", 1947 Py_TYPE(result)->tp_name); 1948 Py_DECREF(result); 1949 result = NULL; 1950 } 1951 } 1952 1953 return result; 1954 } 1955 1956 /* Implementation of dir() -- if obj is NULL, returns the names in the current 1957 (local) scope. Otherwise, performs introspection of the object: returns a 1958 sorted list of attribute names (supposedly) accessible from the object 1959 */ 1960 PyObject * 1961 PyObject_Dir(PyObject *obj) 1962 { 1963 PyObject * result; 1964 1965 if (obj == NULL) 1966 /* no object -- introspect the locals */ 1967 result = _dir_locals(); 1968 else 1969 /* object -- introspect the object */ 1970 result = _dir_object(obj); 1971 1972 assert(result == NULL || PyList_Check(result)); 1973 1974 if (result != NULL && PyList_Sort(result) != 0) { 1975 /* sorting the list failed */ 1976 Py_DECREF(result); 1977 result = NULL; 1978 } 1979 1980 return result; 1981 } 1982 1983 /* 1984 NoObject is usable as a non-NULL undefined value, used by the macro None. 1985 There is (and should be!) no way to create other objects of this type, 1986 so there is exactly one (which is indestructible, by the way). 1987 (XXX This type and the type of NotImplemented below should be unified.) 1988 */ 1989 1990 /* ARGSUSED */ 1991 static PyObject * 1992 none_repr(PyObject *op) 1993 { 1994 return PyString_FromString("None"); 1995 } 1996 1997 /* ARGUSED */ 1998 static void 1999 none_dealloc(PyObject* ignore) 2000 { 2001 /* This should never get called, but we also don't want to SEGV if 2002 * we accidentally decref None out of existence. 2003 */ 2004 Py_FatalError("deallocating None"); 2005 } 2006 2007 2008 static PyTypeObject PyNone_Type = { 2009 PyVarObject_HEAD_INIT(&PyType_Type, 0) 2010 "NoneType", 2011 0, 2012 0, 2013 none_dealloc, /*tp_dealloc*/ /*never called*/ 2014 0, /*tp_print*/ 2015 0, /*tp_getattr*/ 2016 0, /*tp_setattr*/ 2017 0, /*tp_compare*/ 2018 none_repr, /*tp_repr*/ 2019 0, /*tp_as_number*/ 2020 0, /*tp_as_sequence*/ 2021 0, /*tp_as_mapping*/ 2022 (hashfunc)_Py_HashPointer, /*tp_hash */ 2023 }; 2024 2025 PyObject _Py_NoneStruct = { 2026 _PyObject_EXTRA_INIT 2027 1, &PyNone_Type 2028 }; 2029 2030 /* NotImplemented is an object that can be used to signal that an 2031 operation is not implemented for the given type combination. */ 2032 2033 static PyObject * 2034 NotImplemented_repr(PyObject *op) 2035 { 2036 return PyString_FromString("NotImplemented"); 2037 } 2038 2039 static PyTypeObject PyNotImplemented_Type = { 2040 PyVarObject_HEAD_INIT(&PyType_Type, 0) 2041 "NotImplementedType", 2042 0, 2043 0, 2044 none_dealloc, /*tp_dealloc*/ /*never called*/ 2045 0, /*tp_print*/ 2046 0, /*tp_getattr*/ 2047 0, /*tp_setattr*/ 2048 0, /*tp_compare*/ 2049 NotImplemented_repr, /*tp_repr*/ 2050 0, /*tp_as_number*/ 2051 0, /*tp_as_sequence*/ 2052 0, /*tp_as_mapping*/ 2053 0, /*tp_hash */ 2054 }; 2055 2056 PyObject _Py_NotImplementedStruct = { 2057 _PyObject_EXTRA_INIT 2058 1, &PyNotImplemented_Type 2059 }; 2060 2061 void 2062 _Py_ReadyTypes(void) 2063 { 2064 if (PyType_Ready(&PyType_Type) < 0) 2065 Py_FatalError("Can't initialize type type"); 2066 2067 if (PyType_Ready(&_PyWeakref_RefType) < 0) 2068 Py_FatalError("Can't initialize weakref type"); 2069 2070 if (PyType_Ready(&_PyWeakref_CallableProxyType) < 0) 2071 Py_FatalError("Can't initialize callable weakref proxy type"); 2072 2073 if (PyType_Ready(&_PyWeakref_ProxyType) < 0) 2074 Py_FatalError("Can't initialize weakref proxy type"); 2075 2076 if (PyType_Ready(&PyBool_Type) < 0) 2077 Py_FatalError("Can't initialize bool type"); 2078 2079 if (PyType_Ready(&PyString_Type) < 0) 2080 Py_FatalError("Can't initialize str type"); 2081 2082 if (PyType_Ready(&PyByteArray_Type) < 0) 2083 Py_FatalError("Can't initialize bytearray type"); 2084 2085 if (PyType_Ready(&PyList_Type) < 0) 2086 Py_FatalError("Can't initialize list type"); 2087 2088 if (PyType_Ready(&PyNone_Type) < 0) 2089 Py_FatalError("Can't initialize None type"); 2090 2091 if (PyType_Ready(&PyNotImplemented_Type) < 0) 2092 Py_FatalError("Can't initialize NotImplemented type"); 2093 2094 if (PyType_Ready(&PyTraceBack_Type) < 0) 2095 Py_FatalError("Can't initialize traceback type"); 2096 2097 if (PyType_Ready(&PySuper_Type) < 0) 2098 Py_FatalError("Can't initialize super type"); 2099 2100 if (PyType_Ready(&PyBaseObject_Type) < 0) 2101 Py_FatalError("Can't initialize object type"); 2102 2103 if (PyType_Ready(&PyRange_Type) < 0) 2104 Py_FatalError("Can't initialize xrange type"); 2105 2106 if (PyType_Ready(&PyDict_Type) < 0) 2107 Py_FatalError("Can't initialize dict type"); 2108 2109 if (PyType_Ready(&PySet_Type) < 0) 2110 Py_FatalError("Can't initialize set type"); 2111 2112 if (PyType_Ready(&PyUnicode_Type) < 0) 2113 Py_FatalError("Can't initialize unicode type"); 2114 2115 if (PyType_Ready(&PySlice_Type) < 0) 2116 Py_FatalError("Can't initialize slice type"); 2117 2118 if (PyType_Ready(&PyStaticMethod_Type) < 0) 2119 Py_FatalError("Can't initialize static method type"); 2120 2121 #ifndef WITHOUT_COMPLEX 2122 if (PyType_Ready(&PyComplex_Type) < 0) 2123 Py_FatalError("Can't initialize complex type"); 2124 #endif 2125 2126 if (PyType_Ready(&PyFloat_Type) < 0) 2127 Py_FatalError("Can't initialize float type"); 2128 2129 if (PyType_Ready(&PyBuffer_Type) < 0) 2130 Py_FatalError("Can't initialize buffer type"); 2131 2132 if (PyType_Ready(&PyLong_Type) < 0) 2133 Py_FatalError("Can't initialize long type"); 2134 2135 if (PyType_Ready(&PyInt_Type) < 0) 2136 Py_FatalError("Can't initialize int type"); 2137 2138 if (PyType_Ready(&PyFrozenSet_Type) < 0) 2139 Py_FatalError("Can't initialize frozenset type"); 2140 2141 if (PyType_Ready(&PyProperty_Type) < 0) 2142 Py_FatalError("Can't initialize property type"); 2143 2144 if (PyType_Ready(&PyMemoryView_Type) < 0) 2145 Py_FatalError("Can't initialize memoryview type"); 2146 2147 if (PyType_Ready(&PyTuple_Type) < 0) 2148 Py_FatalError("Can't initialize tuple type"); 2149 2150 if (PyType_Ready(&PyEnum_Type) < 0) 2151 Py_FatalError("Can't initialize enumerate type"); 2152 2153 if (PyType_Ready(&PyReversed_Type) < 0) 2154 Py_FatalError("Can't initialize reversed type"); 2155 2156 if (PyType_Ready(&PyCode_Type) < 0) 2157 Py_FatalError("Can't initialize code type"); 2158 2159 if (PyType_Ready(&PyFrame_Type) < 0) 2160 Py_FatalError("Can't initialize frame type"); 2161 2162 if (PyType_Ready(&PyCFunction_Type) < 0) 2163 Py_FatalError("Can't initialize builtin function type"); 2164 2165 if (PyType_Ready(&PyMethod_Type) < 0) 2166 Py_FatalError("Can't initialize method type"); 2167 2168 if (PyType_Ready(&PyFunction_Type) < 0) 2169 Py_FatalError("Can't initialize function type"); 2170 2171 if (PyType_Ready(&PyClass_Type) < 0) 2172 Py_FatalError("Can't initialize class type"); 2173 2174 if (PyType_Ready(&PyDictProxy_Type) < 0) 2175 Py_FatalError("Can't initialize dict proxy type"); 2176 2177 if (PyType_Ready(&PyGen_Type) < 0) 2178 Py_FatalError("Can't initialize generator type"); 2179 2180 if (PyType_Ready(&PyGetSetDescr_Type) < 0) 2181 Py_FatalError("Can't initialize get-set descriptor type"); 2182 2183 if (PyType_Ready(&PyWrapperDescr_Type) < 0) 2184 Py_FatalError("Can't initialize wrapper type"); 2185 2186 if (PyType_Ready(&PyInstance_Type) < 0) 2187 Py_FatalError("Can't initialize instance type"); 2188 2189 if (PyType_Ready(&PyEllipsis_Type) < 0) 2190 Py_FatalError("Can't initialize ellipsis type"); 2191 2192 if (PyType_Ready(&PyMemberDescr_Type) < 0) 2193 Py_FatalError("Can't initialize member descriptor type"); 2194 2195 if (PyType_Ready(&PyFile_Type) < 0) 2196 Py_FatalError("Can't initialize file type"); 2197 } 2198 2199 2200 #ifdef Py_TRACE_REFS 2201 2202 void 2203 _Py_NewReference(PyObject *op) 2204 { 2205 _Py_INC_REFTOTAL; 2206 op->ob_refcnt = 1; 2207 _Py_AddToAllObjects(op, 1); 2208 _Py_INC_TPALLOCS(op); 2209 } 2210 2211 void 2212 _Py_ForgetReference(register PyObject *op) 2213 { 2214 #ifdef SLOW_UNREF_CHECK 2215 register PyObject *p; 2216 #endif 2217 if (op->ob_refcnt < 0) 2218 Py_FatalError("UNREF negative refcnt"); 2219 if (op == &refchain || 2220 op->_ob_prev->_ob_next != op || op->_ob_next->_ob_prev != op) 2221 Py_FatalError("UNREF invalid object"); 2222 #ifdef SLOW_UNREF_CHECK 2223 for (p = refchain._ob_next; p != &refchain; p = p->_ob_next) { 2224 if (p == op) 2225 break; 2226 } 2227 if (p == &refchain) /* Not found */ 2228 Py_FatalError("UNREF unknown object"); 2229 #endif 2230 op->_ob_next->_ob_prev = op->_ob_prev; 2231 op->_ob_prev->_ob_next = op->_ob_next; 2232 op->_ob_next = op->_ob_prev = NULL; 2233 _Py_INC_TPFREES(op); 2234 } 2235 2236 void 2237 _Py_Dealloc(PyObject *op) 2238 { 2239 destructor dealloc = Py_TYPE(op)->tp_dealloc; 2240 _Py_ForgetReference(op); 2241 (*dealloc)(op); 2242 } 2243 2244 /* Print all live objects. Because PyObject_Print is called, the 2245 * interpreter must be in a healthy state. 2246 */ 2247 void 2248 _Py_PrintReferences(FILE *fp) 2249 { 2250 PyObject *op; 2251 fprintf(fp, "Remaining objects:\n"); 2252 for (op = refchain._ob_next; op != &refchain; op = op->_ob_next) { 2253 fprintf(fp, "%p [%" PY_FORMAT_SIZE_T "d] ", op, op->ob_refcnt); 2254 if (PyObject_Print(op, fp, 0) != 0) 2255 PyErr_Clear(); 2256 putc('\n', fp); 2257 } 2258 } 2259 2260 /* Print the addresses of all live objects. Unlike _Py_PrintReferences, this 2261 * doesn't make any calls to the Python C API, so is always safe to call. 2262 */ 2263 void 2264 _Py_PrintReferenceAddresses(FILE *fp) 2265 { 2266 PyObject *op; 2267 fprintf(fp, "Remaining object addresses:\n"); 2268 for (op = refchain._ob_next; op != &refchain; op = op->_ob_next) 2269 fprintf(fp, "%p [%" PY_FORMAT_SIZE_T "d] %s\n", op, 2270 op->ob_refcnt, Py_TYPE(op)->tp_name); 2271 } 2272 2273 PyObject * 2274 _Py_GetObjects(PyObject *self, PyObject *args) 2275 { 2276 int i, n; 2277 PyObject *t = NULL; 2278 PyObject *res, *op; 2279 2280 if (!PyArg_ParseTuple(args, "i|O", &n, &t)) 2281 return NULL; 2282 op = refchain._ob_next; 2283 res = PyList_New(0); 2284 if (res == NULL) 2285 return NULL; 2286 for (i = 0; (n == 0 || i < n) && op != &refchain; i++) { 2287 while (op == self || op == args || op == res || op == t || 2288 (t != NULL && Py_TYPE(op) != (PyTypeObject *) t)) { 2289 op = op->_ob_next; 2290 if (op == &refchain) 2291 return res; 2292 } 2293 if (PyList_Append(res, op) < 0) { 2294 Py_DECREF(res); 2295 return NULL; 2296 } 2297 op = op->_ob_next; 2298 } 2299 return res; 2300 } 2301 2302 #endif 2303 2304 2305 /* Hack to force loading of capsule.o */ 2306 PyTypeObject *_Py_capsule_hack = &PyCapsule_Type; 2307 2308 2309 /* Hack to force loading of cobject.o */ 2310 PyTypeObject *_Py_cobject_hack = &PyCObject_Type; 2311 2312 2313 /* Hack to force loading of abstract.o */ 2314 Py_ssize_t (*_Py_abstract_hack)(PyObject *) = PyObject_Size; 2315 2316 2317 /* Python's malloc wrappers (see pymem.h) */ 2318 2319 void * 2320 PyMem_Malloc(size_t nbytes) 2321 { 2322 return PyMem_MALLOC(nbytes); 2323 } 2324 2325 void * 2326 PyMem_Realloc(void *p, size_t nbytes) 2327 { 2328 return PyMem_REALLOC(p, nbytes); 2329 } 2330 2331 void 2332 PyMem_Free(void *p) 2333 { 2334 PyMem_FREE(p); 2335 } 2336 2337 2338 /* These methods are used to control infinite recursion in repr, str, print, 2339 etc. Container objects that may recursively contain themselves, 2340 e.g. builtin dictionaries and lists, should used Py_ReprEnter() and 2341 Py_ReprLeave() to avoid infinite recursion. 2342 2343 Py_ReprEnter() returns 0 the first time it is called for a particular 2344 object and 1 every time thereafter. It returns -1 if an exception 2345 occurred. Py_ReprLeave() has no return value. 2346 2347 See dictobject.c and listobject.c for examples of use. 2348 */ 2349 2350 #define KEY "Py_Repr" 2351 2352 int 2353 Py_ReprEnter(PyObject *obj) 2354 { 2355 PyObject *dict; 2356 PyObject *list; 2357 Py_ssize_t i; 2358 2359 dict = PyThreadState_GetDict(); 2360 if (dict == NULL) 2361 return 0; 2362 list = PyDict_GetItemString(dict, KEY); 2363 if (list == NULL) { 2364 list = PyList_New(0); 2365 if (list == NULL) 2366 return -1; 2367 if (PyDict_SetItemString(dict, KEY, list) < 0) 2368 return -1; 2369 Py_DECREF(list); 2370 } 2371 i = PyList_GET_SIZE(list); 2372 while (--i >= 0) { 2373 if (PyList_GET_ITEM(list, i) == obj) 2374 return 1; 2375 } 2376 PyList_Append(list, obj); 2377 return 0; 2378 } 2379 2380 void 2381 Py_ReprLeave(PyObject *obj) 2382 { 2383 PyObject *dict; 2384 PyObject *list; 2385 Py_ssize_t i; 2386 2387 dict = PyThreadState_GetDict(); 2388 if (dict == NULL) 2389 return; 2390 list = PyDict_GetItemString(dict, KEY); 2391 if (list == NULL || !PyList_Check(list)) 2392 return; 2393 i = PyList_GET_SIZE(list); 2394 /* Count backwards because we always expect obj to be list[-1] */ 2395 while (--i >= 0) { 2396 if (PyList_GET_ITEM(list, i) == obj) { 2397 PyList_SetSlice(list, i, i + 1, NULL); 2398 break; 2399 } 2400 } 2401 } 2402 2403 /* Trashcan support. */ 2404 2405 /* Current call-stack depth of tp_dealloc calls. */ 2406 int _PyTrash_delete_nesting = 0; 2407 2408 /* List of objects that still need to be cleaned up, singly linked via their 2409 * gc headers' gc_prev pointers. 2410 */ 2411 PyObject *_PyTrash_delete_later = NULL; 2412 2413 /* Add op to the _PyTrash_delete_later list. Called when the current 2414 * call-stack depth gets large. op must be a currently untracked gc'ed 2415 * object, with refcount 0. Py_DECREF must already have been called on it. 2416 */ 2417 void 2418 _PyTrash_deposit_object(PyObject *op) 2419 { 2420 assert(PyObject_IS_GC(op)); 2421 assert(_Py_AS_GC(op)->gc.gc_refs == _PyGC_REFS_UNTRACKED); 2422 assert(op->ob_refcnt == 0); 2423 _Py_AS_GC(op)->gc.gc_prev = (PyGC_Head *)_PyTrash_delete_later; 2424 _PyTrash_delete_later = op; 2425 } 2426 2427 /* Dealloccate all the objects in the _PyTrash_delete_later list. Called when 2428 * the call-stack unwinds again. 2429 */ 2430 void 2431 _PyTrash_destroy_chain(void) 2432 { 2433 while (_PyTrash_delete_later) { 2434 PyObject *op = _PyTrash_delete_later; 2435 destructor dealloc = Py_TYPE(op)->tp_dealloc; 2436 2437 _PyTrash_delete_later = 2438 (PyObject*) _Py_AS_GC(op)->gc.gc_prev; 2439 2440 /* Call the deallocator directly. This used to try to 2441 * fool Py_DECREF into calling it indirectly, but 2442 * Py_DECREF was already called on this object, and in 2443 * assorted non-release builds calling Py_DECREF again ends 2444 * up distorting allocation statistics. 2445 */ 2446 assert(op->ob_refcnt == 0); 2447 ++_PyTrash_delete_nesting; 2448 (*dealloc)(op); 2449 --_PyTrash_delete_nesting; 2450 } 2451 } 2452 2453 #ifdef __cplusplus 2454 } 2455 #endif 2456