2 /* Generic object operations; and implementation of None (NoObject) */
11 Py_ssize_t _Py_RefTotal
;
17 Py_ssize_t total
= _Py_RefTotal
;
18 /* ignore the references to the dummy object of the dicts and sets
19 because they are not reliable and not useful (now that the
20 hash table code is well-tested) */
23 total
-= o
->ob_refcnt
;
26 total
-= o
->ob_refcnt
;
29 #endif /* Py_REF_DEBUG */
31 int Py_DivisionWarningFlag
;
33 /* Object allocation routines used by NEWOBJ and NEWVAROBJ macros.
34 These are used by the individual routines for object creation.
35 Do not call them otherwise, they do not initialize the object! */
38 /* Head of circular doubly-linked list of all objects. These are linked
39 * together via the _ob_prev and _ob_next members of a PyObject, which
40 * exist only in a Py_TRACE_REFS build.
42 static PyObject refchain
= {&refchain
, &refchain
};
44 /* Insert op at the front of the list of all objects. If force is true,
45 * op is added even if _ob_prev and _ob_next are non-NULL already. If
46 * force is false amd _ob_prev or _ob_next are non-NULL, do nothing.
47 * force should be true if and only if op points to freshly allocated,
48 * uninitialized memory, or you've unlinked op from the list and are
49 * relinking it into the front.
50 * Note that objects are normally added to the list via _Py_NewReference,
51 * which is called by PyObject_Init. Not all objects are initialized that
52 * way, though; exceptions include statically allocated type objects, and
53 * statically allocated singletons (like Py_True and Py_None).
56 _Py_AddToAllObjects(PyObject
*op
, int force
)
60 /* If it's initialized memory, op must be in or out of
61 * the list unambiguously.
63 assert((op
->_ob_prev
== NULL
) == (op
->_ob_next
== NULL
));
66 if (force
|| op
->_ob_prev
== NULL
) {
67 op
->_ob_next
= refchain
._ob_next
;
68 op
->_ob_prev
= &refchain
;
69 refchain
._ob_next
->_ob_prev
= op
;
70 refchain
._ob_next
= op
;
73 #endif /* Py_TRACE_REFS */
76 static PyTypeObject
*type_list
;
77 /* All types are added to type_list, at least when
78 they get one object created. That makes them
79 immortal, which unfortunately contributes to
80 garbage itself. If unlist_types_without_objects
81 is set, they will be removed from the type_list
82 once the last object is deallocated. */
83 int unlist_types_without_objects
;
84 extern int tuple_zero_allocs
, fast_tuple_allocs
;
85 extern int quick_int_allocs
, quick_neg_int_allocs
;
86 extern int null_strings
, one_strings
;
92 for (tp
= type_list
; tp
; tp
= tp
->tp_next
)
93 fprintf(f
, "%s alloc'd: %d, freed: %d, max in use: %d\n",
94 tp
->tp_name
, tp
->tp_allocs
, tp
->tp_frees
,
96 fprintf(f
, "fast tuple allocs: %d, empty: %d\n",
97 fast_tuple_allocs
, tuple_zero_allocs
);
98 fprintf(f
, "fast int allocs: pos: %d, neg: %d\n",
99 quick_int_allocs
, quick_neg_int_allocs
);
100 fprintf(f
, "null strings: %d, 1-strings: %d\n",
101 null_strings
, one_strings
);
111 result
= PyList_New(0);
114 for (tp
= type_list
; tp
; tp
= tp
->tp_next
) {
115 v
= Py_BuildValue("(snnn)", tp
->tp_name
, tp
->tp_allocs
,
116 tp
->tp_frees
, tp
->tp_maxalloc
);
121 if (PyList_Append(result
, v
) < 0) {
132 inc_count(PyTypeObject
*tp
)
134 if (tp
->tp_next
== NULL
&& tp
->tp_prev
== NULL
) {
135 /* first time; insert in linked list */
136 if (tp
->tp_next
!= NULL
) /* sanity check */
137 Py_FatalError("XXX inc_count sanity check");
139 type_list
->tp_prev
= tp
;
140 tp
->tp_next
= type_list
;
141 /* Note that as of Python 2.2, heap-allocated type objects
142 * can go away, but this code requires that they stay alive
143 * until program exit. That's why we're careful with
144 * refcounts here. type_list gets a new reference to tp,
145 * while ownership of the reference type_list used to hold
146 * (if any) was transferred to tp->tp_next in the line above.
147 * tp is thus effectively immortal after this.
152 /* Also insert in the doubly-linked list of all objects,
153 * if not already there.
155 _Py_AddToAllObjects((PyObject
*)tp
, 0);
159 if (tp
->tp_allocs
- tp
->tp_frees
> tp
->tp_maxalloc
)
160 tp
->tp_maxalloc
= tp
->tp_allocs
- tp
->tp_frees
;
163 void dec_count(PyTypeObject
*tp
)
166 if (unlist_types_without_objects
&&
167 tp
->tp_allocs
== tp
->tp_frees
) {
168 /* unlink the type from type_list */
170 tp
->tp_prev
->tp_next
= tp
->tp_next
;
172 type_list
= tp
->tp_next
;
174 tp
->tp_next
->tp_prev
= tp
->tp_prev
;
175 tp
->tp_next
= tp
->tp_prev
= NULL
;
183 /* Log a fatal error; doesn't return. */
185 _Py_NegativeRefcount(const char *fname
, int lineno
, PyObject
*op
)
189 PyOS_snprintf(buf
, sizeof(buf
),
190 "%s:%i object at %p has negative ref count "
191 "%" PY_FORMAT_SIZE_T
"d",
192 fname
, lineno
, op
, op
->ob_refcnt
);
196 #endif /* Py_REF_DEBUG */
199 Py_IncRef(PyObject
*o
)
205 Py_DecRef(PyObject
*o
)
211 PyObject_Init(PyObject
*op
, PyTypeObject
*tp
)
214 return PyErr_NoMemory();
215 /* Any changes should be reflected in PyObject_INIT (objimpl.h) */
217 _Py_NewReference(op
);
222 PyObject_InitVar(PyVarObject
*op
, PyTypeObject
*tp
, Py_ssize_t size
)
225 return (PyVarObject
*) PyErr_NoMemory();
226 /* Any changes should be reflected in PyObject_INIT_VAR */
229 _Py_NewReference((PyObject
*)op
);
234 _PyObject_New(PyTypeObject
*tp
)
237 op
= (PyObject
*) PyObject_MALLOC(_PyObject_SIZE(tp
));
239 return PyErr_NoMemory();
240 return PyObject_INIT(op
, tp
);
244 _PyObject_NewVar(PyTypeObject
*tp
, Py_ssize_t nitems
)
247 const size_t size
= _PyObject_VAR_SIZE(tp
, nitems
);
248 op
= (PyVarObject
*) PyObject_MALLOC(size
);
250 return (PyVarObject
*)PyErr_NoMemory();
251 return PyObject_INIT_VAR(op
, tp
, nitems
);
254 /* for binary compatibility with 2.2 */
257 _PyObject_Del(PyObject
*op
)
262 /* Implementation of PyObject_Print with recursion checking */
264 internal_print(PyObject
*op
, FILE *fp
, int flags
, int nesting
)
268 PyErr_SetString(PyExc_RuntimeError
, "print recursion");
271 if (PyErr_CheckSignals())
273 #ifdef USE_STACKCHECK
274 if (PyOS_CheckStack()) {
275 PyErr_SetString(PyExc_MemoryError
, "stack overflow");
279 clearerr(fp
); /* Clear any previous error condition */
281 fprintf(fp
, "<nil>");
284 if (op
->ob_refcnt
<= 0)
285 /* XXX(twouters) cast refcount to long until %zd is
286 universally available */
287 fprintf(fp
, "<refcnt %ld at %p>",
288 (long)op
->ob_refcnt
, op
);
289 else if (op
->ob_type
->tp_print
== NULL
) {
291 if (flags
& Py_PRINT_RAW
)
292 s
= PyObject_Str(op
);
294 s
= PyObject_Repr(op
);
298 ret
= internal_print(s
, fp
, Py_PRINT_RAW
,
304 ret
= (*op
->ob_type
->tp_print
)(op
, fp
, flags
);
308 PyErr_SetFromErrno(PyExc_IOError
);
317 PyObject_Print(PyObject
*op
, FILE *fp
, int flags
)
319 return internal_print(op
, fp
, flags
, 0);
323 /* For debugging convenience. See Misc/gdbinit for some useful gdb hooks */
324 void _PyObject_Dump(PyObject
* op
)
327 fprintf(stderr
, "NULL\n");
329 fprintf(stderr
, "object : ");
330 (void)PyObject_Print(op
, stderr
, 0);
331 /* XXX(twouters) cast refcount to long until %zd is
332 universally available */
337 op
->ob_type
==NULL
? "NULL" : op
->ob_type
->tp_name
,
344 PyObject_Repr(PyObject
*v
)
346 if (PyErr_CheckSignals())
348 #ifdef USE_STACKCHECK
349 if (PyOS_CheckStack()) {
350 PyErr_SetString(PyExc_MemoryError
, "stack overflow");
355 return PyString_FromString("<NULL>");
356 else if (v
->ob_type
->tp_repr
== NULL
)
357 return PyString_FromFormat("<%s object at %p>",
358 v
->ob_type
->tp_name
, v
);
361 res
= (*v
->ob_type
->tp_repr
)(v
);
364 #ifdef Py_USING_UNICODE
365 if (PyUnicode_Check(res
)) {
367 str
= PyUnicode_AsEncodedString(res
, NULL
, NULL
);
375 if (!PyString_Check(res
)) {
376 PyErr_Format(PyExc_TypeError
,
377 "__repr__ returned non-string (type %.200s)",
378 res
->ob_type
->tp_name
);
387 _PyObject_Str(PyObject
*v
)
392 return PyString_FromString("<NULL>");
393 if (PyString_CheckExact(v
)) {
397 #ifdef Py_USING_UNICODE
398 if (PyUnicode_CheckExact(v
)) {
403 if (v
->ob_type
->tp_str
== NULL
)
404 return PyObject_Repr(v
);
406 res
= (*v
->ob_type
->tp_str
)(v
);
409 type_ok
= PyString_Check(res
);
410 #ifdef Py_USING_UNICODE
411 type_ok
= type_ok
|| PyUnicode_Check(res
);
414 PyErr_Format(PyExc_TypeError
,
415 "__str__ returned non-string (type %.200s)",
416 res
->ob_type
->tp_name
);
424 PyObject_Str(PyObject
*v
)
426 PyObject
*res
= _PyObject_Str(v
);
429 #ifdef Py_USING_UNICODE
430 if (PyUnicode_Check(res
)) {
432 str
= PyUnicode_AsEncodedString(res
, NULL
, NULL
);
440 assert(PyString_Check(res
));
444 #ifdef Py_USING_UNICODE
446 PyObject_Unicode(PyObject
*v
)
451 static PyObject
*unicodestr
;
454 res
= PyString_FromString("<NULL>");
457 str
= PyUnicode_FromEncodedObject(res
, NULL
, "strict");
460 } else if (PyUnicode_CheckExact(v
)) {
464 /* XXX As soon as we have a tp_unicode slot, we should
465 check this before trying the __unicode__
467 if (unicodestr
== NULL
) {
468 unicodestr
= PyString_InternFromString("__unicode__");
469 if (unicodestr
== NULL
)
472 func
= PyObject_GetAttr(v
, unicodestr
);
474 res
= PyEval_CallObject(func
, (PyObject
*)NULL
);
479 if (PyUnicode_Check(v
)) {
480 /* For a Unicode subtype that's didn't overwrite __unicode__,
481 return a true Unicode object with the same data. */
482 return PyUnicode_FromUnicode(PyUnicode_AS_UNICODE(v
),
483 PyUnicode_GET_SIZE(v
));
485 if (PyString_CheckExact(v
)) {
490 if (v
->ob_type
->tp_str
!= NULL
)
491 res
= (*v
->ob_type
->tp_str
)(v
);
493 res
= PyObject_Repr(v
);
498 if (!PyUnicode_Check(res
)) {
499 str
= PyUnicode_FromEncodedObject(res
, NULL
, "strict");
508 /* Helper to warn about deprecated tp_compare return values. Return:
513 (This function cannot return 2.)
516 adjust_tp_compare(int c
)
518 if (PyErr_Occurred()) {
519 if (c
!= -1 && c
!= -2) {
520 PyObject
*t
, *v
, *tb
;
521 PyErr_Fetch(&t
, &v
, &tb
);
522 if (PyErr_Warn(PyExc_RuntimeWarning
,
523 "tp_compare didn't return -1 or -2 "
524 "for exception") < 0) {
530 PyErr_Restore(t
, v
, tb
);
534 else if (c
< -1 || c
> 1) {
535 if (PyErr_Warn(PyExc_RuntimeWarning
,
536 "tp_compare didn't return -1, 0 or 1") < 0)
539 return c
< -1 ? -1 : 1;
542 assert(c
>= -1 && c
<= 1);
548 /* Macro to get the tp_richcompare field of a type if defined */
549 #define RICHCOMPARE(t) (PyType_HasFeature((t), Py_TPFLAGS_HAVE_RICHCOMPARE) \
550 ? (t)->tp_richcompare : NULL)
552 /* Map rich comparison operators to their swapped version, e.g. LT --> GT */
553 int _Py_SwappedOp
[] = {Py_GT
, Py_GE
, Py_EQ
, Py_NE
, Py_LT
, Py_LE
};
555 /* Try a genuine rich comparison, returning an object. Return:
557 NotImplemented if this particular rich comparison is not implemented or
559 some object not equal to NotImplemented if it is implemented
560 (this latter object may not be a Boolean).
563 try_rich_compare(PyObject
*v
, PyObject
*w
, int op
)
568 if (v
->ob_type
!= w
->ob_type
&&
569 PyType_IsSubtype(w
->ob_type
, v
->ob_type
) &&
570 (f
= RICHCOMPARE(w
->ob_type
)) != NULL
) {
571 res
= (*f
)(w
, v
, _Py_SwappedOp
[op
]);
572 if (res
!= Py_NotImplemented
)
576 if ((f
= RICHCOMPARE(v
->ob_type
)) != NULL
) {
577 res
= (*f
)(v
, w
, op
);
578 if (res
!= Py_NotImplemented
)
582 if ((f
= RICHCOMPARE(w
->ob_type
)) != NULL
) {
583 return (*f
)(w
, v
, _Py_SwappedOp
[op
]);
585 res
= Py_NotImplemented
;
590 /* Try a genuine rich comparison, returning an int. Return:
591 -1 for exception (including the case where try_rich_compare() returns an
592 object that's not a Boolean);
593 0 if the outcome is false;
594 1 if the outcome is true;
595 2 if this particular rich comparison is not implemented or undefined.
598 try_rich_compare_bool(PyObject
*v
, PyObject
*w
, int op
)
603 if (RICHCOMPARE(v
->ob_type
) == NULL
&& RICHCOMPARE(w
->ob_type
) == NULL
)
604 return 2; /* Shortcut, avoid INCREF+DECREF */
605 res
= try_rich_compare(v
, w
, op
);
608 if (res
== Py_NotImplemented
) {
612 ok
= PyObject_IsTrue(res
);
617 /* Try rich comparisons to determine a 3-way comparison. Return:
622 2 if this particular rich comparison is not implemented or undefined.
625 try_rich_to_3way_compare(PyObject
*v
, PyObject
*w
)
627 static struct { int op
; int outcome
; } tries
[3] = {
628 /* Try this operator, and if it is true, use this outcome: */
635 if (RICHCOMPARE(v
->ob_type
) == NULL
&& RICHCOMPARE(w
->ob_type
) == NULL
)
636 return 2; /* Shortcut */
638 for (i
= 0; i
< 3; i
++) {
639 switch (try_rich_compare_bool(v
, w
, tries
[i
].op
)) {
643 return tries
[i
].outcome
;
650 /* Try a 3-way comparison, returning an int. Return:
655 2 if this particular 3-way comparison is not implemented or undefined.
658 try_3way_compare(PyObject
*v
, PyObject
*w
)
663 /* Comparisons involving instances are given to instance_compare,
664 which has the same return conventions as this function. */
666 f
= v
->ob_type
->tp_compare
;
667 if (PyInstance_Check(v
))
669 if (PyInstance_Check(w
))
670 return (*w
->ob_type
->tp_compare
)(v
, w
);
672 /* If both have the same (non-NULL) tp_compare, use it. */
673 if (f
!= NULL
&& f
== w
->ob_type
->tp_compare
) {
675 return adjust_tp_compare(c
);
678 /* If either tp_compare is _PyObject_SlotCompare, that's safe. */
679 if (f
== _PyObject_SlotCompare
||
680 w
->ob_type
->tp_compare
== _PyObject_SlotCompare
)
681 return _PyObject_SlotCompare(v
, w
);
683 /* If we're here, v and w,
684 a) are not instances;
685 b) have different types or a type without tp_compare; and
686 c) don't have a user-defined tp_compare.
687 tp_compare implementations in C assume that both arguments
688 have their type, so we give up if the coercion fails or if
689 it yields types which are still incompatible (which can
690 happen with a user-defined nb_coerce).
692 c
= PyNumber_CoerceEx(&v
, &w
);
697 f
= v
->ob_type
->tp_compare
;
698 if (f
!= NULL
&& f
== w
->ob_type
->tp_compare
) {
702 return adjust_tp_compare(c
);
705 /* No comparison defined */
711 /* Final fallback 3-way comparison, returning an int. Return:
712 -2 if an error occurred;
718 default_3way_compare(PyObject
*v
, PyObject
*w
)
721 const char *vname
, *wname
;
723 if (v
->ob_type
== w
->ob_type
) {
724 /* When comparing these pointers, they must be cast to
725 * integer types (i.e. Py_uintptr_t, our spelling of C9X's
726 * uintptr_t). ANSI specifies that pointer compares other
727 * than == and != to non-related structures are undefined.
729 Py_uintptr_t vv
= (Py_uintptr_t
)v
;
730 Py_uintptr_t ww
= (Py_uintptr_t
)w
;
731 return (vv
< ww
) ? -1 : (vv
> ww
) ? 1 : 0;
734 #ifdef Py_USING_UNICODE
735 /* Special case for Unicode */
736 if (PyUnicode_Check(v
) || PyUnicode_Check(w
)) {
737 c
= PyUnicode_Compare(v
, w
);
738 if (!PyErr_Occurred())
740 /* TypeErrors are ignored: if Unicode coercion fails due
741 to one of the arguments not having the right type, we
742 continue as defined by the coercion protocol (see
743 above). Luckily, decoding errors are reported as
744 ValueErrors and are not masked by this technique. */
745 if (!PyErr_ExceptionMatches(PyExc_TypeError
))
751 /* None is smaller than anything */
757 /* different type: compare type names; numbers are smaller */
758 if (PyNumber_Check(v
))
761 vname
= v
->ob_type
->tp_name
;
762 if (PyNumber_Check(w
))
765 wname
= w
->ob_type
->tp_name
;
766 c
= strcmp(vname
, wname
);
771 /* Same type name, or (more likely) incomparable numeric types */
772 return ((Py_uintptr_t
)(v
->ob_type
) < (
773 Py_uintptr_t
)(w
->ob_type
)) ? -1 : 1;
776 /* Do a 3-way comparison, by hook or by crook. Return:
777 -2 for an exception (but see below);
781 BUT: if the object implements a tp_compare function, it returns
782 whatever this function returns (whether with an exception or not).
785 do_cmp(PyObject
*v
, PyObject
*w
)
790 if (v
->ob_type
== w
->ob_type
791 && (f
= v
->ob_type
->tp_compare
) != NULL
) {
793 if (PyInstance_Check(v
)) {
794 /* Instance tp_compare has a different signature.
795 But if it returns undefined we fall through. */
798 /* Else fall through to try_rich_to_3way_compare() */
801 return adjust_tp_compare(c
);
803 /* We only get here if one of the following is true:
804 a) v and w have different types
805 b) v and w have the same type, which doesn't have tp_compare
806 c) v and w are instances, and either __cmp__ is not defined or
807 __cmp__ returns NotImplemented
809 c
= try_rich_to_3way_compare(v
, w
);
812 c
= try_3way_compare(v
, w
);
815 return default_3way_compare(v
, w
);
818 /* Compare v to w. Return
819 -1 if v < w or exception (PyErr_Occurred() true in latter case).
822 XXX The docs (C API manual) say the return value is undefined in case
826 PyObject_Compare(PyObject
*v
, PyObject
*w
)
830 if (v
== NULL
|| w
== NULL
) {
831 PyErr_BadInternalCall();
836 if (Py_EnterRecursiveCall(" in cmp"))
838 result
= do_cmp(v
, w
);
839 Py_LeaveRecursiveCall();
840 return result
< 0 ? -1 : result
;
843 /* Return (new reference to) Py_True or Py_False. */
845 convert_3way_to_object(int op
, int c
)
849 case Py_LT
: c
= c
< 0; break;
850 case Py_LE
: c
= c
<= 0; break;
851 case Py_EQ
: c
= c
== 0; break;
852 case Py_NE
: c
= c
!= 0; break;
853 case Py_GT
: c
= c
> 0; break;
854 case Py_GE
: c
= c
>= 0; break;
856 result
= c
? Py_True
: Py_False
;
861 /* We want a rich comparison but don't have one. Try a 3-way cmp instead.
865 Py_False if not (v op w)
868 try_3way_to_rich_compare(PyObject
*v
, PyObject
*w
, int op
)
872 c
= try_3way_compare(v
, w
);
874 c
= default_3way_compare(v
, w
);
877 return convert_3way_to_object(op
, c
);
880 /* Do rich comparison on v and w. Return
882 Else a new reference to an object other than Py_NotImplemented, usually(?):
884 Py_False if not (v op w)
887 do_richcmp(PyObject
*v
, PyObject
*w
, int op
)
891 res
= try_rich_compare(v
, w
, op
);
892 if (res
!= Py_NotImplemented
)
896 return try_3way_to_rich_compare(v
, w
, op
);
901 some object not equal to NotImplemented if it is implemented
902 (this latter object may not be a Boolean).
905 PyObject_RichCompare(PyObject
*v
, PyObject
*w
, int op
)
909 assert(Py_LT
<= op
&& op
<= Py_GE
);
910 if (Py_EnterRecursiveCall(" in cmp"))
913 /* If the types are equal, and not old-style instances, try to
914 get out cheap (don't bother with coercions etc.). */
915 if (v
->ob_type
== w
->ob_type
&& !PyInstance_Check(v
)) {
917 richcmpfunc frich
= RICHCOMPARE(v
->ob_type
);
918 /* If the type has richcmp, try it first. try_rich_compare
919 tries it two-sided, which is not needed since we've a
922 res
= (*frich
)(v
, w
, op
);
923 if (res
!= Py_NotImplemented
)
927 /* No richcmp, or this particular richmp not implemented.
929 fcmp
= v
->ob_type
->tp_compare
;
931 int c
= (*fcmp
)(v
, w
);
932 c
= adjust_tp_compare(c
);
937 res
= convert_3way_to_object(op
, c
);
942 /* Fast path not taken, or couldn't deliver a useful result. */
943 res
= do_richcmp(v
, w
, op
);
945 Py_LeaveRecursiveCall();
949 /* Return -1 if error; 1 if v op w; 0 if not (v op w). */
951 PyObject_RichCompareBool(PyObject
*v
, PyObject
*w
, int op
)
956 /* Quick result when objects are the same.
957 Guarantees that identity implies equality. */
961 else if (op
== Py_NE
)
965 res
= PyObject_RichCompare(v
, w
, op
);
968 if (PyBool_Check(res
))
969 ok
= (res
== Py_True
);
971 ok
= PyObject_IsTrue(res
);
976 /* Set of hash utility functions to help maintaining the invariant that
977 if a==b then hash(a)==hash(b)
979 All the utility functions (_Py_Hash*()) return "-1" to signify an error.
983 _Py_HashDouble(double v
)
985 double intpart
, fractpart
;
988 long x
; /* the final hash value */
989 /* This is designed so that Python numbers of different types
990 * that compare equal hash to the same value; otherwise comparisons
991 * of mapping keys will turn out weird.
994 fractpart
= modf(v
, &intpart
);
995 if (fractpart
== 0.0) {
996 /* This must return the same hash as an equal int or long. */
997 if (intpart
> LONG_MAX
|| -intpart
> LONG_MAX
) {
998 /* Convert to long and use its hash. */
999 PyObject
*plong
; /* converted to Python long */
1000 if (Py_IS_INFINITY(intpart
))
1001 /* can't convert to long int -- arbitrary */
1002 v
= v
< 0 ? -271828.0 : 314159.0;
1003 plong
= PyLong_FromDouble(v
);
1006 x
= PyObject_Hash(plong
);
1010 /* Fits in a C long == a Python int, so is its own hash. */
1016 /* The fractional part is non-zero, so we don't have to worry about
1017 * making this match the hash of some other type.
1018 * Use frexp to get at the bits in the double.
1019 * Since the VAX D double format has 56 mantissa bits, which is the
1020 * most of any double format in use, each of these parts may have as
1021 * many as (but no more than) 56 significant bits.
1022 * So, assuming sizeof(long) >= 4, each part can be broken into two
1023 * longs; frexp and multiplication are used to do that.
1024 * Also, since the Cray double format has 15 exponent bits, which is
1025 * the most of any double format in use, shifting the exponent field
1026 * left by 15 won't overflow a long (again assuming sizeof(long) >= 4).
1028 v
= frexp(v
, &expo
);
1029 v
*= 2147483648.0; /* 2**31 */
1030 hipart
= (long)v
; /* take the top 32 bits */
1031 v
= (v
- (double)hipart
) * 2147483648.0; /* get the next 32 bits */
1032 x
= hipart
+ (long)v
+ (expo
<< 15);
1039 _Py_HashPointer(void *p
)
1041 #if SIZEOF_LONG >= SIZEOF_VOID_P
1044 /* convert to a Python long and hash that */
1048 if ((longobj
= PyLong_FromVoidPtr(p
)) == NULL
) {
1052 x
= PyObject_Hash(longobj
);
1055 Py_XDECREF(longobj
);
1062 PyObject_Hash(PyObject
*v
)
1064 PyTypeObject
*tp
= v
->ob_type
;
1065 if (tp
->tp_hash
!= NULL
)
1066 return (*tp
->tp_hash
)(v
);
1067 if (tp
->tp_compare
== NULL
&& RICHCOMPARE(tp
) == NULL
) {
1068 return _Py_HashPointer(v
); /* Use address as hash value */
1070 /* If there's a cmp but no hash defined, the object can't be hashed */
1071 PyErr_Format(PyExc_TypeError
, "unhashable type: '%.200s'",
1072 v
->ob_type
->tp_name
);
1077 PyObject_GetAttrString(PyObject
*v
, const char *name
)
1081 if (v
->ob_type
->tp_getattr
!= NULL
)
1082 return (*v
->ob_type
->tp_getattr
)(v
, (char*)name
);
1083 w
= PyString_InternFromString(name
);
1086 res
= PyObject_GetAttr(v
, w
);
1092 PyObject_HasAttrString(PyObject
*v
, const char *name
)
1094 PyObject
*res
= PyObject_GetAttrString(v
, name
);
1104 PyObject_SetAttrString(PyObject
*v
, const char *name
, PyObject
*w
)
1109 if (v
->ob_type
->tp_setattr
!= NULL
)
1110 return (*v
->ob_type
->tp_setattr
)(v
, (char*)name
, w
);
1111 s
= PyString_InternFromString(name
);
1114 res
= PyObject_SetAttr(v
, s
, w
);
1120 PyObject_GetAttr(PyObject
*v
, PyObject
*name
)
1122 PyTypeObject
*tp
= v
->ob_type
;
1124 if (!PyString_Check(name
)) {
1125 #ifdef Py_USING_UNICODE
1126 /* The Unicode to string conversion is done here because the
1127 existing tp_getattro slots expect a string object as name
1128 and we wouldn't want to break those. */
1129 if (PyUnicode_Check(name
)) {
1130 name
= _PyUnicode_AsDefaultEncodedString(name
, NULL
);
1137 PyErr_Format(PyExc_TypeError
,
1138 "attribute name must be string, not '%.200s'",
1139 name
->ob_type
->tp_name
);
1143 if (tp
->tp_getattro
!= NULL
)
1144 return (*tp
->tp_getattro
)(v
, name
);
1145 if (tp
->tp_getattr
!= NULL
)
1146 return (*tp
->tp_getattr
)(v
, PyString_AS_STRING(name
));
1147 PyErr_Format(PyExc_AttributeError
,
1148 "'%.50s' object has no attribute '%.400s'",
1149 tp
->tp_name
, PyString_AS_STRING(name
));
1154 PyObject_HasAttr(PyObject
*v
, PyObject
*name
)
1156 PyObject
*res
= PyObject_GetAttr(v
, name
);
1166 PyObject_SetAttr(PyObject
*v
, PyObject
*name
, PyObject
*value
)
1168 PyTypeObject
*tp
= v
->ob_type
;
1171 if (!PyString_Check(name
)){
1172 #ifdef Py_USING_UNICODE
1173 /* The Unicode to string conversion is done here because the
1174 existing tp_setattro slots expect a string object as name
1175 and we wouldn't want to break those. */
1176 if (PyUnicode_Check(name
)) {
1177 name
= PyUnicode_AsEncodedString(name
, NULL
, NULL
);
1184 PyErr_Format(PyExc_TypeError
,
1185 "attribute name must be string, not '%.200s'",
1186 name
->ob_type
->tp_name
);
1193 PyString_InternInPlace(&name
);
1194 if (tp
->tp_setattro
!= NULL
) {
1195 err
= (*tp
->tp_setattro
)(v
, name
, value
);
1199 if (tp
->tp_setattr
!= NULL
) {
1200 err
= (*tp
->tp_setattr
)(v
, PyString_AS_STRING(name
), value
);
1205 if (tp
->tp_getattr
== NULL
&& tp
->tp_getattro
== NULL
)
1206 PyErr_Format(PyExc_TypeError
,
1207 "'%.100s' object has no attributes "
1210 value
==NULL
? "del" : "assign to",
1211 PyString_AS_STRING(name
));
1213 PyErr_Format(PyExc_TypeError
,
1214 "'%.100s' object has only read-only attributes "
1217 value
==NULL
? "del" : "assign to",
1218 PyString_AS_STRING(name
));
1222 /* Helper to get a pointer to an object's __dict__ slot, if any */
1225 _PyObject_GetDictPtr(PyObject
*obj
)
1227 Py_ssize_t dictoffset
;
1228 PyTypeObject
*tp
= obj
->ob_type
;
1230 if (!(tp
->tp_flags
& Py_TPFLAGS_HAVE_CLASS
))
1232 dictoffset
= tp
->tp_dictoffset
;
1233 if (dictoffset
== 0)
1235 if (dictoffset
< 0) {
1239 tsize
= ((PyVarObject
*)obj
)->ob_size
;
1242 size
= _PyObject_VAR_SIZE(tp
, tsize
);
1244 dictoffset
+= (long)size
;
1245 assert(dictoffset
> 0);
1246 assert(dictoffset
% SIZEOF_VOID_P
== 0);
1248 return (PyObject
**) ((char *)obj
+ dictoffset
);
1252 PyObject_SelfIter(PyObject
*obj
)
1258 /* Generic GetAttr functions - put these in your tp_[gs]etattro slot */
1261 PyObject_GenericGetAttr(PyObject
*obj
, PyObject
*name
)
1263 PyTypeObject
*tp
= obj
->ob_type
;
1264 PyObject
*descr
= NULL
;
1265 PyObject
*res
= NULL
;
1267 Py_ssize_t dictoffset
;
1270 if (!PyString_Check(name
)){
1271 #ifdef Py_USING_UNICODE
1272 /* The Unicode to string conversion is done here because the
1273 existing tp_setattro slots expect a string object as name
1274 and we wouldn't want to break those. */
1275 if (PyUnicode_Check(name
)) {
1276 name
= PyUnicode_AsEncodedString(name
, NULL
, NULL
);
1283 PyErr_Format(PyExc_TypeError
,
1284 "attribute name must be string, not '%.200s'",
1285 name
->ob_type
->tp_name
);
1292 if (tp
->tp_dict
== NULL
) {
1293 if (PyType_Ready(tp
) < 0)
1297 /* Inline _PyType_Lookup */
1300 PyObject
*mro
, *base
, *dict
;
1302 /* Look in tp_dict of types in MRO */
1304 assert(mro
!= NULL
);
1305 assert(PyTuple_Check(mro
));
1306 n
= PyTuple_GET_SIZE(mro
);
1307 for (i
= 0; i
< n
; i
++) {
1308 base
= PyTuple_GET_ITEM(mro
, i
);
1309 if (PyClass_Check(base
))
1310 dict
= ((PyClassObject
*)base
)->cl_dict
;
1312 assert(PyType_Check(base
));
1313 dict
= ((PyTypeObject
*)base
)->tp_dict
;
1315 assert(dict
&& PyDict_Check(dict
));
1316 descr
= PyDict_GetItem(dict
, name
);
1325 if (descr
!= NULL
&&
1326 PyType_HasFeature(descr
->ob_type
, Py_TPFLAGS_HAVE_CLASS
)) {
1327 f
= descr
->ob_type
->tp_descr_get
;
1328 if (f
!= NULL
&& PyDescr_IsData(descr
)) {
1329 res
= f(descr
, obj
, (PyObject
*)obj
->ob_type
);
1335 /* Inline _PyObject_GetDictPtr */
1336 dictoffset
= tp
->tp_dictoffset
;
1337 if (dictoffset
!= 0) {
1339 if (dictoffset
< 0) {
1343 tsize
= ((PyVarObject
*)obj
)->ob_size
;
1346 size
= _PyObject_VAR_SIZE(tp
, tsize
);
1348 dictoffset
+= (long)size
;
1349 assert(dictoffset
> 0);
1350 assert(dictoffset
% SIZEOF_VOID_P
== 0);
1352 dictptr
= (PyObject
**) ((char *)obj
+ dictoffset
);
1355 res
= PyDict_GetItem(dict
, name
);
1365 res
= f(descr
, obj
, (PyObject
*)obj
->ob_type
);
1370 if (descr
!= NULL
) {
1372 /* descr was already increfed above */
1376 PyErr_Format(PyExc_AttributeError
,
1377 "'%.50s' object has no attribute '%.400s'",
1378 tp
->tp_name
, PyString_AS_STRING(name
));
1385 PyObject_GenericSetAttr(PyObject
*obj
, PyObject
*name
, PyObject
*value
)
1387 PyTypeObject
*tp
= obj
->ob_type
;
1393 if (!PyString_Check(name
)){
1394 #ifdef Py_USING_UNICODE
1395 /* The Unicode to string conversion is done here because the
1396 existing tp_setattro slots expect a string object as name
1397 and we wouldn't want to break those. */
1398 if (PyUnicode_Check(name
)) {
1399 name
= PyUnicode_AsEncodedString(name
, NULL
, NULL
);
1406 PyErr_Format(PyExc_TypeError
,
1407 "attribute name must be string, not '%.200s'",
1408 name
->ob_type
->tp_name
);
1415 if (tp
->tp_dict
== NULL
) {
1416 if (PyType_Ready(tp
) < 0)
1420 descr
= _PyType_Lookup(tp
, name
);
1422 if (descr
!= NULL
&&
1423 PyType_HasFeature(descr
->ob_type
, Py_TPFLAGS_HAVE_CLASS
)) {
1424 f
= descr
->ob_type
->tp_descr_set
;
1425 if (f
!= NULL
&& PyDescr_IsData(descr
)) {
1426 res
= f(descr
, obj
, value
);
1431 dictptr
= _PyObject_GetDictPtr(obj
);
1432 if (dictptr
!= NULL
) {
1433 PyObject
*dict
= *dictptr
;
1434 if (dict
== NULL
&& value
!= NULL
) {
1435 dict
= PyDict_New();
1442 res
= PyDict_DelItem(dict
, name
);
1444 res
= PyDict_SetItem(dict
, name
, value
);
1445 if (res
< 0 && PyErr_ExceptionMatches(PyExc_KeyError
))
1446 PyErr_SetObject(PyExc_AttributeError
, name
);
1452 res
= f(descr
, obj
, value
);
1456 if (descr
== NULL
) {
1457 PyErr_Format(PyExc_AttributeError
,
1458 "'%.100s' object has no attribute '%.200s'",
1459 tp
->tp_name
, PyString_AS_STRING(name
));
1463 PyErr_Format(PyExc_AttributeError
,
1464 "'%.50s' object attribute '%.400s' is read-only",
1465 tp
->tp_name
, PyString_AS_STRING(name
));
1471 /* Test a value used as condition, e.g., in a for or if statement.
1472 Return -1 if an error occurred */
1475 PyObject_IsTrue(PyObject
*v
)
1484 else if (v
->ob_type
->tp_as_number
!= NULL
&&
1485 v
->ob_type
->tp_as_number
->nb_nonzero
!= NULL
)
1486 res
= (*v
->ob_type
->tp_as_number
->nb_nonzero
)(v
);
1487 else if (v
->ob_type
->tp_as_mapping
!= NULL
&&
1488 v
->ob_type
->tp_as_mapping
->mp_length
!= NULL
)
1489 res
= (*v
->ob_type
->tp_as_mapping
->mp_length
)(v
);
1490 else if (v
->ob_type
->tp_as_sequence
!= NULL
&&
1491 v
->ob_type
->tp_as_sequence
->sq_length
!= NULL
)
1492 res
= (*v
->ob_type
->tp_as_sequence
->sq_length
)(v
);
1495 /* if it is negative, it should be either -1 or -2 */
1496 return (res
> 0) ? 1 : Py_SAFE_DOWNCAST(res
, Py_ssize_t
, int);
1499 /* equivalent of 'not v'
1500 Return -1 if an error occurred */
1503 PyObject_Not(PyObject
*v
)
1506 res
= PyObject_IsTrue(v
);
1512 /* Coerce two numeric types to the "larger" one.
1513 Increment the reference count on each argument.
1515 -1 if an error occurred;
1516 0 if the coercion succeeded (and then the reference counts are increased);
1517 1 if no coercion is possible (and no error is raised).
1520 PyNumber_CoerceEx(PyObject
**pv
, PyObject
**pw
)
1522 register PyObject
*v
= *pv
;
1523 register PyObject
*w
= *pw
;
1526 /* Shortcut only for old-style types */
1527 if (v
->ob_type
== w
->ob_type
&&
1528 !PyType_HasFeature(v
->ob_type
, Py_TPFLAGS_CHECKTYPES
))
1534 if (v
->ob_type
->tp_as_number
&& v
->ob_type
->tp_as_number
->nb_coerce
) {
1535 res
= (*v
->ob_type
->tp_as_number
->nb_coerce
)(pv
, pw
);
1539 if (w
->ob_type
->tp_as_number
&& w
->ob_type
->tp_as_number
->nb_coerce
) {
1540 res
= (*w
->ob_type
->tp_as_number
->nb_coerce
)(pw
, pv
);
1547 /* Coerce two numeric types to the "larger" one.
1548 Increment the reference count on each argument.
1549 Return -1 and raise an exception if no coercion is possible
1550 (and then no reference count is incremented).
1553 PyNumber_Coerce(PyObject
**pv
, PyObject
**pw
)
1555 int err
= PyNumber_CoerceEx(pv
, pw
);
1558 PyErr_SetString(PyExc_TypeError
, "number coercion failed");
1563 /* Test whether an object can be called */
1566 PyCallable_Check(PyObject
*x
)
1570 if (PyInstance_Check(x
)) {
1571 PyObject
*call
= PyObject_GetAttrString(x
, "__call__");
1576 /* Could test recursively but don't, for fear of endless
1577 recursion if some joker sets self.__call__ = self */
1582 return x
->ob_type
->tp_call
!= NULL
;
1586 /* Helper for PyObject_Dir.
1587 Merge the __dict__ of aclass into dict, and recursively also all
1588 the __dict__s of aclass's base classes. The order of merging isn't
1589 defined, as it's expected that only the final set of dict keys is
1591 Return 0 on success, -1 on error.
1595 merge_class_dict(PyObject
* dict
, PyObject
* aclass
)
1597 PyObject
*classdict
;
1600 assert(PyDict_Check(dict
));
1603 /* Merge in the type's dict (if any). */
1604 classdict
= PyObject_GetAttrString(aclass
, "__dict__");
1605 if (classdict
== NULL
)
1608 int status
= PyDict_Update(dict
, classdict
);
1609 Py_DECREF(classdict
);
1614 /* Recursively merge in the base types' (if any) dicts. */
1615 bases
= PyObject_GetAttrString(aclass
, "__bases__");
1619 /* We have no guarantee that bases is a real tuple */
1621 n
= PySequence_Size(bases
); /* This better be right */
1625 for (i
= 0; i
< n
; i
++) {
1627 PyObject
*base
= PySequence_GetItem(bases
, i
);
1632 status
= merge_class_dict(dict
, base
);
1645 /* Helper for PyObject_Dir.
1646 If obj has an attr named attrname that's a list, merge its string
1647 elements into keys of dict.
1648 Return 0 on success, -1 on error. Errors due to not finding the attr,
1649 or the attr not being a list, are suppressed.
1653 merge_list_attr(PyObject
* dict
, PyObject
* obj
, const char *attrname
)
1658 assert(PyDict_Check(dict
));
1662 list
= PyObject_GetAttrString(obj
, attrname
);
1666 else if (PyList_Check(list
)) {
1668 for (i
= 0; i
< PyList_GET_SIZE(list
); ++i
) {
1669 PyObject
*item
= PyList_GET_ITEM(list
, i
);
1670 if (PyString_Check(item
)) {
1671 result
= PyDict_SetItem(dict
, item
, Py_None
);
1682 /* Like __builtin__.dir(arg). See bltinmodule.c's builtin_dir for the
1683 docstring, which should be kept in synch with this implementation. */
1686 PyObject_Dir(PyObject
*arg
)
1688 /* Set exactly one of these non-NULL before the end. */
1689 PyObject
*result
= NULL
; /* result list */
1690 PyObject
*masterdict
= NULL
; /* result is masterdict.keys() */
1692 /* If NULL arg, return the locals. */
1694 PyObject
*locals
= PyEval_GetLocals();
1697 result
= PyMapping_Keys(locals
);
1702 /* Elif this is some form of module, we only want its dict. */
1703 else if (PyModule_Check(arg
)) {
1704 masterdict
= PyObject_GetAttrString(arg
, "__dict__");
1705 if (masterdict
== NULL
)
1707 if (!PyDict_Check(masterdict
)) {
1708 PyErr_SetString(PyExc_TypeError
,
1709 "module.__dict__ is not a dictionary");
1714 /* Elif some form of type or class, grab its dict and its bases.
1715 We deliberately don't suck up its __class__, as methods belonging
1716 to the metaclass would probably be more confusing than helpful. */
1717 else if (PyType_Check(arg
) || PyClass_Check(arg
)) {
1718 masterdict
= PyDict_New();
1719 if (masterdict
== NULL
)
1721 if (merge_class_dict(masterdict
, arg
) < 0)
1725 /* Else look at its dict, and the attrs reachable from its class. */
1728 /* Create a dict to start with. CAUTION: Not everything
1729 responding to __dict__ returns a dict! */
1730 masterdict
= PyObject_GetAttrString(arg
, "__dict__");
1731 if (masterdict
== NULL
) {
1733 masterdict
= PyDict_New();
1735 else if (!PyDict_Check(masterdict
)) {
1736 Py_DECREF(masterdict
);
1737 masterdict
= PyDict_New();
1740 /* The object may have returned a reference to its
1741 dict, so copy it to avoid mutating it. */
1742 PyObject
*temp
= PyDict_Copy(masterdict
);
1743 Py_DECREF(masterdict
);
1746 if (masterdict
== NULL
)
1749 /* Merge in __members__ and __methods__ (if any).
1750 XXX Would like this to go away someday; for now, it's
1751 XXX needed to get at im_self etc of method objects. */
1752 if (merge_list_attr(masterdict
, arg
, "__members__") < 0)
1754 if (merge_list_attr(masterdict
, arg
, "__methods__") < 0)
1757 /* Merge in attrs reachable from its class.
1758 CAUTION: Not all objects have a __class__ attr. */
1759 itsclass
= PyObject_GetAttrString(arg
, "__class__");
1760 if (itsclass
== NULL
)
1763 int status
= merge_class_dict(masterdict
, itsclass
);
1764 Py_DECREF(itsclass
);
1770 assert((result
== NULL
) ^ (masterdict
== NULL
));
1771 if (masterdict
!= NULL
) {
1772 /* The result comes from its keys. */
1773 assert(result
== NULL
);
1774 result
= PyDict_Keys(masterdict
);
1780 if (!PyList_Check(result
)) {
1781 PyErr_Format(PyExc_TypeError
,
1782 "Expected keys() to be a list, not '%.200s'",
1783 result
->ob_type
->tp_name
);
1786 if (PyList_Sort(result
) != 0)
1796 Py_XDECREF(masterdict
);
1801 NoObject is usable as a non-NULL undefined value, used by the macro None.
1802 There is (and should be!) no way to create other objects of this type,
1803 so there is exactly one (which is indestructible, by the way).
1804 (XXX This type and the type of NotImplemented below should be unified.)
1809 none_repr(PyObject
*op
)
1811 return PyString_FromString("None");
1816 none_dealloc(PyObject
* ignore
)
1818 /* This should never get called, but we also don't want to SEGV if
1819 * we accidently decref None out of existance.
1821 Py_FatalError("deallocating None");
1825 static PyTypeObject PyNone_Type
= {
1826 PyObject_HEAD_INIT(&PyType_Type
)
1831 none_dealloc
, /*tp_dealloc*/ /*never called*/
1836 none_repr
, /*tp_repr*/
1838 0, /*tp_as_sequence*/
1839 0, /*tp_as_mapping*/
1843 PyObject _Py_NoneStruct
= {
1844 PyObject_HEAD_INIT(&PyNone_Type
)
1847 /* NotImplemented is an object that can be used to signal that an
1848 operation is not implemented for the given type combination. */
1851 NotImplemented_repr(PyObject
*op
)
1853 return PyString_FromString("NotImplemented");
1856 static PyTypeObject PyNotImplemented_Type
= {
1857 PyObject_HEAD_INIT(&PyType_Type
)
1859 "NotImplementedType",
1862 none_dealloc
, /*tp_dealloc*/ /*never called*/
1867 NotImplemented_repr
, /*tp_repr*/
1869 0, /*tp_as_sequence*/
1870 0, /*tp_as_mapping*/
1874 PyObject _Py_NotImplementedStruct
= {
1875 PyObject_HEAD_INIT(&PyNotImplemented_Type
)
1879 _Py_ReadyTypes(void)
1881 if (PyType_Ready(&PyType_Type
) < 0)
1882 Py_FatalError("Can't initialize 'type'");
1884 if (PyType_Ready(&_PyWeakref_RefType
) < 0)
1885 Py_FatalError("Can't initialize 'weakref'");
1887 if (PyType_Ready(&PyBool_Type
) < 0)
1888 Py_FatalError("Can't initialize 'bool'");
1890 if (PyType_Ready(&PyString_Type
) < 0)
1891 Py_FatalError("Can't initialize 'str'");
1893 if (PyType_Ready(&PyList_Type
) < 0)
1894 Py_FatalError("Can't initialize 'list'");
1896 if (PyType_Ready(&PyNone_Type
) < 0)
1897 Py_FatalError("Can't initialize type(None)");
1899 if (PyType_Ready(&PyNotImplemented_Type
) < 0)
1900 Py_FatalError("Can't initialize type(NotImplemented)");
1904 #ifdef Py_TRACE_REFS
1907 _Py_NewReference(PyObject
*op
)
1911 _Py_AddToAllObjects(op
, 1);
1912 _Py_INC_TPALLOCS(op
);
1916 _Py_ForgetReference(register PyObject
*op
)
1918 #ifdef SLOW_UNREF_CHECK
1919 register PyObject
*p
;
1921 if (op
->ob_refcnt
< 0)
1922 Py_FatalError("UNREF negative refcnt");
1923 if (op
== &refchain
||
1924 op
->_ob_prev
->_ob_next
!= op
|| op
->_ob_next
->_ob_prev
!= op
)
1925 Py_FatalError("UNREF invalid object");
1926 #ifdef SLOW_UNREF_CHECK
1927 for (p
= refchain
._ob_next
; p
!= &refchain
; p
= p
->_ob_next
) {
1931 if (p
== &refchain
) /* Not found */
1932 Py_FatalError("UNREF unknown object");
1934 op
->_ob_next
->_ob_prev
= op
->_ob_prev
;
1935 op
->_ob_prev
->_ob_next
= op
->_ob_next
;
1936 op
->_ob_next
= op
->_ob_prev
= NULL
;
1937 _Py_INC_TPFREES(op
);
1941 _Py_Dealloc(PyObject
*op
)
1943 destructor dealloc
= op
->ob_type
->tp_dealloc
;
1944 _Py_ForgetReference(op
);
1948 /* Print all live objects. Because PyObject_Print is called, the
1949 * interpreter must be in a healthy state.
1952 _Py_PrintReferences(FILE *fp
)
1955 fprintf(fp
, "Remaining objects:\n");
1956 for (op
= refchain
._ob_next
; op
!= &refchain
; op
= op
->_ob_next
) {
1957 fprintf(fp
, "%p [%" PY_FORMAT_SIZE_T
"d] ", op
, op
->ob_refcnt
);
1958 if (PyObject_Print(op
, fp
, 0) != 0)
1964 /* Print the addresses of all live objects. Unlike _Py_PrintReferences, this
1965 * doesn't make any calls to the Python C API, so is always safe to call.
1968 _Py_PrintReferenceAddresses(FILE *fp
)
1971 fprintf(fp
, "Remaining object addresses:\n");
1972 for (op
= refchain
._ob_next
; op
!= &refchain
; op
= op
->_ob_next
)
1973 fprintf(fp
, "%p [%" PY_FORMAT_SIZE_T
"d] %s\n", op
,
1974 op
->ob_refcnt
, op
->ob_type
->tp_name
);
1978 _Py_GetObjects(PyObject
*self
, PyObject
*args
)
1984 if (!PyArg_ParseTuple(args
, "i|O", &n
, &t
))
1986 op
= refchain
._ob_next
;
1987 res
= PyList_New(0);
1990 for (i
= 0; (n
== 0 || i
< n
) && op
!= &refchain
; i
++) {
1991 while (op
== self
|| op
== args
|| op
== res
|| op
== t
||
1992 (t
!= NULL
&& op
->ob_type
!= (PyTypeObject
*) t
)) {
1994 if (op
== &refchain
)
1997 if (PyList_Append(res
, op
) < 0) {
2009 /* Hack to force loading of cobject.o */
2010 PyTypeObject
*_Py_cobject_hack
= &PyCObject_Type
;
2013 /* Hack to force loading of abstract.o */
2014 Py_ssize_t (*_Py_abstract_hack
)(PyObject
*) = PyObject_Size
;
2017 /* Python's malloc wrappers (see pymem.h) */
2020 PyMem_Malloc(size_t nbytes
)
2022 return PyMem_MALLOC(nbytes
);
2026 PyMem_Realloc(void *p
, size_t nbytes
)
2028 return PyMem_REALLOC(p
, nbytes
);
2038 /* These methods are used to control infinite recursion in repr, str, print,
2039 etc. Container objects that may recursively contain themselves,
2040 e.g. builtin dictionaries and lists, should used Py_ReprEnter() and
2041 Py_ReprLeave() to avoid infinite recursion.
2043 Py_ReprEnter() returns 0 the first time it is called for a particular
2044 object and 1 every time thereafter. It returns -1 if an exception
2045 occurred. Py_ReprLeave() has no return value.
2047 See dictobject.c and listobject.c for examples of use.
2050 #define KEY "Py_Repr"
2053 Py_ReprEnter(PyObject
*obj
)
2059 dict
= PyThreadState_GetDict();
2062 list
= PyDict_GetItemString(dict
, KEY
);
2064 list
= PyList_New(0);
2067 if (PyDict_SetItemString(dict
, KEY
, list
) < 0)
2071 i
= PyList_GET_SIZE(list
);
2073 if (PyList_GET_ITEM(list
, i
) == obj
)
2076 PyList_Append(list
, obj
);
2081 Py_ReprLeave(PyObject
*obj
)
2087 dict
= PyThreadState_GetDict();
2090 list
= PyDict_GetItemString(dict
, KEY
);
2091 if (list
== NULL
|| !PyList_Check(list
))
2093 i
= PyList_GET_SIZE(list
);
2094 /* Count backwards because we always expect obj to be list[-1] */
2096 if (PyList_GET_ITEM(list
, i
) == obj
) {
2097 PyList_SetSlice(list
, i
, i
+ 1, NULL
);
2103 /* Trashcan support. */
2105 /* Current call-stack depth of tp_dealloc calls. */
2106 int _PyTrash_delete_nesting
= 0;
2108 /* List of objects that still need to be cleaned up, singly linked via their
2109 * gc headers' gc_prev pointers.
2111 PyObject
*_PyTrash_delete_later
= NULL
;
2113 /* Add op to the _PyTrash_delete_later list. Called when the current
2114 * call-stack depth gets large. op must be a currently untracked gc'ed
2115 * object, with refcount 0. Py_DECREF must already have been called on it.
2118 _PyTrash_deposit_object(PyObject
*op
)
2120 assert(PyObject_IS_GC(op
));
2121 assert(_Py_AS_GC(op
)->gc
.gc_refs
== _PyGC_REFS_UNTRACKED
);
2122 assert(op
->ob_refcnt
== 0);
2123 _Py_AS_GC(op
)->gc
.gc_prev
= (PyGC_Head
*)_PyTrash_delete_later
;
2124 _PyTrash_delete_later
= op
;
2127 /* Dealloccate all the objects in the _PyTrash_delete_later list. Called when
2128 * the call-stack unwinds again.
2131 _PyTrash_destroy_chain(void)
2133 while (_PyTrash_delete_later
) {
2134 PyObject
*op
= _PyTrash_delete_later
;
2135 destructor dealloc
= op
->ob_type
->tp_dealloc
;
2137 _PyTrash_delete_later
=
2138 (PyObject
*) _Py_AS_GC(op
)->gc
.gc_prev
;
2140 /* Call the deallocator directly. This used to try to
2141 * fool Py_DECREF into calling it indirectly, but
2142 * Py_DECREF was already called on this object, and in
2143 * assorted non-release builds calling Py_DECREF again ends
2144 * up distorting allocation statistics.
2146 assert(op
->ob_refcnt
== 0);
2147 ++_PyTrash_delete_nesting
;
2149 --_PyTrash_delete_nesting
;