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
;
32 int Py_Py3kWarningFlag
;
34 /* Object allocation routines used by NEWOBJ and NEWVAROBJ macros.
35 These are used by the individual routines for object creation.
36 Do not call them otherwise, they do not initialize the object! */
39 /* Head of circular doubly-linked list of all objects. These are linked
40 * together via the _ob_prev and _ob_next members of a PyObject, which
41 * exist only in a Py_TRACE_REFS build.
43 static PyObject refchain
= {&refchain
, &refchain
};
45 /* Insert op at the front of the list of all objects. If force is true,
46 * op is added even if _ob_prev and _ob_next are non-NULL already. If
47 * force is false amd _ob_prev or _ob_next are non-NULL, do nothing.
48 * force should be true if and only if op points to freshly allocated,
49 * uninitialized memory, or you've unlinked op from the list and are
50 * relinking it into the front.
51 * Note that objects are normally added to the list via _Py_NewReference,
52 * which is called by PyObject_Init. Not all objects are initialized that
53 * way, though; exceptions include statically allocated type objects, and
54 * statically allocated singletons (like Py_True and Py_None).
57 _Py_AddToAllObjects(PyObject
*op
, int force
)
61 /* If it's initialized memory, op must be in or out of
62 * the list unambiguously.
64 assert((op
->_ob_prev
== NULL
) == (op
->_ob_next
== NULL
));
67 if (force
|| op
->_ob_prev
== NULL
) {
68 op
->_ob_next
= refchain
._ob_next
;
69 op
->_ob_prev
= &refchain
;
70 refchain
._ob_next
->_ob_prev
= op
;
71 refchain
._ob_next
= op
;
74 #endif /* Py_TRACE_REFS */
77 static PyTypeObject
*type_list
;
78 /* All types are added to type_list, at least when
79 they get one object created. That makes them
80 immortal, which unfortunately contributes to
81 garbage itself. If unlist_types_without_objects
82 is set, they will be removed from the type_list
83 once the last object is deallocated. */
84 int unlist_types_without_objects
;
85 extern int tuple_zero_allocs
, fast_tuple_allocs
;
86 extern int quick_int_allocs
, quick_neg_int_allocs
;
87 extern int null_strings
, one_strings
;
93 for (tp
= type_list
; tp
; tp
= tp
->tp_next
)
94 fprintf(f
, "%s alloc'd: %d, freed: %d, max in use: %d\n",
95 tp
->tp_name
, tp
->tp_allocs
, tp
->tp_frees
,
97 fprintf(f
, "fast tuple allocs: %d, empty: %d\n",
98 fast_tuple_allocs
, tuple_zero_allocs
);
99 fprintf(f
, "fast int allocs: pos: %d, neg: %d\n",
100 quick_int_allocs
, quick_neg_int_allocs
);
101 fprintf(f
, "null strings: %d, 1-strings: %d\n",
102 null_strings
, one_strings
);
112 result
= PyList_New(0);
115 for (tp
= type_list
; tp
; tp
= tp
->tp_next
) {
116 v
= Py_BuildValue("(snnn)", tp
->tp_name
, tp
->tp_allocs
,
117 tp
->tp_frees
, tp
->tp_maxalloc
);
122 if (PyList_Append(result
, v
) < 0) {
133 inc_count(PyTypeObject
*tp
)
135 if (tp
->tp_next
== NULL
&& tp
->tp_prev
== NULL
) {
136 /* first time; insert in linked list */
137 if (tp
->tp_next
!= NULL
) /* sanity check */
138 Py_FatalError("XXX inc_count sanity check");
140 type_list
->tp_prev
= tp
;
141 tp
->tp_next
= type_list
;
142 /* Note that as of Python 2.2, heap-allocated type objects
143 * can go away, but this code requires that they stay alive
144 * until program exit. That's why we're careful with
145 * refcounts here. type_list gets a new reference to tp,
146 * while ownership of the reference type_list used to hold
147 * (if any) was transferred to tp->tp_next in the line above.
148 * tp is thus effectively immortal after this.
153 /* Also insert in the doubly-linked list of all objects,
154 * if not already there.
156 _Py_AddToAllObjects((PyObject
*)tp
, 0);
160 if (tp
->tp_allocs
- tp
->tp_frees
> tp
->tp_maxalloc
)
161 tp
->tp_maxalloc
= tp
->tp_allocs
- tp
->tp_frees
;
164 void dec_count(PyTypeObject
*tp
)
167 if (unlist_types_without_objects
&&
168 tp
->tp_allocs
== tp
->tp_frees
) {
169 /* unlink the type from type_list */
171 tp
->tp_prev
->tp_next
= tp
->tp_next
;
173 type_list
= tp
->tp_next
;
175 tp
->tp_next
->tp_prev
= tp
->tp_prev
;
176 tp
->tp_next
= tp
->tp_prev
= NULL
;
184 /* Log a fatal error; doesn't return. */
186 _Py_NegativeRefcount(const char *fname
, int lineno
, PyObject
*op
)
190 PyOS_snprintf(buf
, sizeof(buf
),
191 "%s:%i object at %p has negative ref count "
192 "%" PY_FORMAT_SIZE_T
"d",
193 fname
, lineno
, op
, op
->ob_refcnt
);
197 #endif /* Py_REF_DEBUG */
200 Py_IncRef(PyObject
*o
)
206 Py_DecRef(PyObject
*o
)
212 PyObject_Init(PyObject
*op
, PyTypeObject
*tp
)
215 return PyErr_NoMemory();
216 /* Any changes should be reflected in PyObject_INIT (objimpl.h) */
218 _Py_NewReference(op
);
223 PyObject_InitVar(PyVarObject
*op
, PyTypeObject
*tp
, Py_ssize_t size
)
226 return (PyVarObject
*) PyErr_NoMemory();
227 /* Any changes should be reflected in PyObject_INIT_VAR */
230 _Py_NewReference((PyObject
*)op
);
235 _PyObject_New(PyTypeObject
*tp
)
238 op
= (PyObject
*) PyObject_MALLOC(_PyObject_SIZE(tp
));
240 return PyErr_NoMemory();
241 return PyObject_INIT(op
, tp
);
245 _PyObject_NewVar(PyTypeObject
*tp
, Py_ssize_t nitems
)
248 const size_t size
= _PyObject_VAR_SIZE(tp
, nitems
);
249 op
= (PyVarObject
*) PyObject_MALLOC(size
);
251 return (PyVarObject
*)PyErr_NoMemory();
252 return PyObject_INIT_VAR(op
, tp
, nitems
);
255 /* for binary compatibility with 2.2 */
258 _PyObject_Del(PyObject
*op
)
263 /* Implementation of PyObject_Print with recursion checking */
265 internal_print(PyObject
*op
, FILE *fp
, int flags
, int nesting
)
269 PyErr_SetString(PyExc_RuntimeError
, "print recursion");
272 if (PyErr_CheckSignals())
274 #ifdef USE_STACKCHECK
275 if (PyOS_CheckStack()) {
276 PyErr_SetString(PyExc_MemoryError
, "stack overflow");
280 clearerr(fp
); /* Clear any previous error condition */
282 Py_BEGIN_ALLOW_THREADS
283 fprintf(fp
, "<nil>");
287 if (op
->ob_refcnt
<= 0)
288 /* XXX(twouters) cast refcount to long until %zd is
289 universally available */
290 Py_BEGIN_ALLOW_THREADS
291 fprintf(fp
, "<refcnt %ld at %p>",
292 (long)op
->ob_refcnt
, op
);
294 else if (Py_TYPE(op
)->tp_print
== NULL
) {
296 if (flags
& Py_PRINT_RAW
)
297 s
= PyObject_Str(op
);
299 s
= PyObject_Repr(op
);
303 ret
= internal_print(s
, fp
, Py_PRINT_RAW
,
309 ret
= (*Py_TYPE(op
)->tp_print
)(op
, fp
, flags
);
313 PyErr_SetFromErrno(PyExc_IOError
);
322 PyObject_Print(PyObject
*op
, FILE *fp
, int flags
)
324 return internal_print(op
, fp
, flags
, 0);
328 /* For debugging convenience. See Misc/gdbinit for some useful gdb hooks */
329 void _PyObject_Dump(PyObject
* op
)
332 fprintf(stderr
, "NULL\n");
334 fprintf(stderr
, "object : ");
335 (void)PyObject_Print(op
, stderr
, 0);
336 /* XXX(twouters) cast refcount to long until %zd is
337 universally available */
342 Py_TYPE(op
)==NULL
? "NULL" : Py_TYPE(op
)->tp_name
,
349 PyObject_Repr(PyObject
*v
)
351 if (PyErr_CheckSignals())
353 #ifdef USE_STACKCHECK
354 if (PyOS_CheckStack()) {
355 PyErr_SetString(PyExc_MemoryError
, "stack overflow");
360 return PyString_FromString("<NULL>");
361 else if (Py_TYPE(v
)->tp_repr
== NULL
)
362 return PyString_FromFormat("<%s object at %p>",
363 Py_TYPE(v
)->tp_name
, v
);
366 res
= (*Py_TYPE(v
)->tp_repr
)(v
);
369 #ifdef Py_USING_UNICODE
370 if (PyUnicode_Check(res
)) {
372 str
= PyUnicode_AsEncodedString(res
, NULL
, NULL
);
380 if (!PyString_Check(res
)) {
381 PyErr_Format(PyExc_TypeError
,
382 "__repr__ returned non-string (type %.200s)",
383 Py_TYPE(res
)->tp_name
);
392 _PyObject_Str(PyObject
*v
)
397 return PyString_FromString("<NULL>");
398 if (PyString_CheckExact(v
)) {
402 #ifdef Py_USING_UNICODE
403 if (PyUnicode_CheckExact(v
)) {
408 if (Py_TYPE(v
)->tp_str
== NULL
)
409 return PyObject_Repr(v
);
411 /* It is possible for a type to have a tp_str representation that loops
413 if (Py_EnterRecursiveCall(" while getting the str of an object"))
415 res
= (*Py_TYPE(v
)->tp_str
)(v
);
416 Py_LeaveRecursiveCall();
419 type_ok
= PyString_Check(res
);
420 #ifdef Py_USING_UNICODE
421 type_ok
= type_ok
|| PyUnicode_Check(res
);
424 PyErr_Format(PyExc_TypeError
,
425 "__str__ returned non-string (type %.200s)",
426 Py_TYPE(res
)->tp_name
);
434 PyObject_Str(PyObject
*v
)
436 PyObject
*res
= _PyObject_Str(v
);
439 #ifdef Py_USING_UNICODE
440 if (PyUnicode_Check(res
)) {
442 str
= PyUnicode_AsEncodedString(res
, NULL
, NULL
);
450 assert(PyString_Check(res
));
454 #ifdef Py_USING_UNICODE
456 PyObject_Unicode(PyObject
*v
)
461 int unicode_method_found
= 0;
462 static PyObject
*unicodestr
;
465 res
= PyString_FromString("<NULL>");
468 str
= PyUnicode_FromEncodedObject(res
, NULL
, "strict");
471 } else if (PyUnicode_CheckExact(v
)) {
476 /* Try the __unicode__ method */
477 if (unicodestr
== NULL
) {
478 unicodestr
= PyString_InternFromString("__unicode__");
479 if (unicodestr
== NULL
)
482 if (PyInstance_Check(v
)) {
483 /* We're an instance of a classic class */
484 /* Try __unicode__ from the instance -- alas we have no type */
485 func
= PyObject_GetAttr(v
, unicodestr
);
487 unicode_method_found
= 1;
488 res
= PyObject_CallFunctionObjArgs(func
, NULL
);
496 /* Not a classic class instance, try __unicode__ from type */
497 /* _PyType_Lookup doesn't create a reference */
498 func
= _PyType_Lookup(Py_TYPE(v
), unicodestr
);
500 unicode_method_found
= 1;
501 res
= PyObject_CallFunctionObjArgs(func
, v
, NULL
);
508 /* Didn't find __unicode__ */
509 if (!unicode_method_found
) {
510 if (PyUnicode_Check(v
)) {
511 /* For a Unicode subtype that's didn't overwrite __unicode__,
512 return a true Unicode object with the same data. */
513 return PyUnicode_FromUnicode(PyUnicode_AS_UNICODE(v
),
514 PyUnicode_GET_SIZE(v
));
516 if (PyString_CheckExact(v
)) {
521 if (Py_TYPE(v
)->tp_str
!= NULL
)
522 res
= (*Py_TYPE(v
)->tp_str
)(v
);
524 res
= PyObject_Repr(v
);
530 if (!PyUnicode_Check(res
)) {
531 str
= PyUnicode_FromEncodedObject(res
, NULL
, "strict");
540 /* Helper to warn about deprecated tp_compare return values. Return:
545 (This function cannot return 2.)
548 adjust_tp_compare(int c
)
550 if (PyErr_Occurred()) {
551 if (c
!= -1 && c
!= -2) {
552 PyObject
*t
, *v
, *tb
;
553 PyErr_Fetch(&t
, &v
, &tb
);
554 if (PyErr_Warn(PyExc_RuntimeWarning
,
555 "tp_compare didn't return -1 or -2 "
556 "for exception") < 0) {
562 PyErr_Restore(t
, v
, tb
);
566 else if (c
< -1 || c
> 1) {
567 if (PyErr_Warn(PyExc_RuntimeWarning
,
568 "tp_compare didn't return -1, 0 or 1") < 0)
571 return c
< -1 ? -1 : 1;
574 assert(c
>= -1 && c
<= 1);
580 /* Macro to get the tp_richcompare field of a type if defined */
581 #define RICHCOMPARE(t) (PyType_HasFeature((t), Py_TPFLAGS_HAVE_RICHCOMPARE) \
582 ? (t)->tp_richcompare : NULL)
584 /* Map rich comparison operators to their swapped version, e.g. LT --> GT */
585 int _Py_SwappedOp
[] = {Py_GT
, Py_GE
, Py_EQ
, Py_NE
, Py_LT
, Py_LE
};
587 /* Try a genuine rich comparison, returning an object. Return:
589 NotImplemented if this particular rich comparison is not implemented or
591 some object not equal to NotImplemented if it is implemented
592 (this latter object may not be a Boolean).
595 try_rich_compare(PyObject
*v
, PyObject
*w
, int op
)
600 if (v
->ob_type
!= w
->ob_type
&&
601 PyType_IsSubtype(w
->ob_type
, v
->ob_type
) &&
602 (f
= RICHCOMPARE(w
->ob_type
)) != NULL
) {
603 res
= (*f
)(w
, v
, _Py_SwappedOp
[op
]);
604 if (res
!= Py_NotImplemented
)
608 if ((f
= RICHCOMPARE(v
->ob_type
)) != NULL
) {
609 res
= (*f
)(v
, w
, op
);
610 if (res
!= Py_NotImplemented
)
614 if ((f
= RICHCOMPARE(w
->ob_type
)) != NULL
) {
615 return (*f
)(w
, v
, _Py_SwappedOp
[op
]);
617 res
= Py_NotImplemented
;
622 /* Try a genuine rich comparison, returning an int. Return:
623 -1 for exception (including the case where try_rich_compare() returns an
624 object that's not a Boolean);
625 0 if the outcome is false;
626 1 if the outcome is true;
627 2 if this particular rich comparison is not implemented or undefined.
630 try_rich_compare_bool(PyObject
*v
, PyObject
*w
, int op
)
635 if (RICHCOMPARE(v
->ob_type
) == NULL
&& RICHCOMPARE(w
->ob_type
) == NULL
)
636 return 2; /* Shortcut, avoid INCREF+DECREF */
637 res
= try_rich_compare(v
, w
, op
);
640 if (res
== Py_NotImplemented
) {
644 ok
= PyObject_IsTrue(res
);
649 /* Try rich comparisons to determine a 3-way comparison. Return:
654 2 if this particular rich comparison is not implemented or undefined.
657 try_rich_to_3way_compare(PyObject
*v
, PyObject
*w
)
659 static struct { int op
; int outcome
; } tries
[3] = {
660 /* Try this operator, and if it is true, use this outcome: */
667 if (RICHCOMPARE(v
->ob_type
) == NULL
&& RICHCOMPARE(w
->ob_type
) == NULL
)
668 return 2; /* Shortcut */
670 for (i
= 0; i
< 3; i
++) {
671 switch (try_rich_compare_bool(v
, w
, tries
[i
].op
)) {
675 return tries
[i
].outcome
;
682 /* Try a 3-way comparison, returning an int. Return:
687 2 if this particular 3-way comparison is not implemented or undefined.
690 try_3way_compare(PyObject
*v
, PyObject
*w
)
695 /* Comparisons involving instances are given to instance_compare,
696 which has the same return conventions as this function. */
698 f
= v
->ob_type
->tp_compare
;
699 if (PyInstance_Check(v
))
701 if (PyInstance_Check(w
))
702 return (*w
->ob_type
->tp_compare
)(v
, w
);
704 /* If both have the same (non-NULL) tp_compare, use it. */
705 if (f
!= NULL
&& f
== w
->ob_type
->tp_compare
) {
707 return adjust_tp_compare(c
);
710 /* If either tp_compare is _PyObject_SlotCompare, that's safe. */
711 if (f
== _PyObject_SlotCompare
||
712 w
->ob_type
->tp_compare
== _PyObject_SlotCompare
)
713 return _PyObject_SlotCompare(v
, w
);
715 /* If we're here, v and w,
716 a) are not instances;
717 b) have different types or a type without tp_compare; and
718 c) don't have a user-defined tp_compare.
719 tp_compare implementations in C assume that both arguments
720 have their type, so we give up if the coercion fails or if
721 it yields types which are still incompatible (which can
722 happen with a user-defined nb_coerce).
724 c
= PyNumber_CoerceEx(&v
, &w
);
729 f
= v
->ob_type
->tp_compare
;
730 if (f
!= NULL
&& f
== w
->ob_type
->tp_compare
) {
734 return adjust_tp_compare(c
);
737 /* No comparison defined */
743 /* Final fallback 3-way comparison, returning an int. Return:
744 -2 if an error occurred;
750 default_3way_compare(PyObject
*v
, PyObject
*w
)
753 const char *vname
, *wname
;
755 if (v
->ob_type
== w
->ob_type
) {
756 /* When comparing these pointers, they must be cast to
757 * integer types (i.e. Py_uintptr_t, our spelling of C9X's
758 * uintptr_t). ANSI specifies that pointer compares other
759 * than == and != to non-related structures are undefined.
761 Py_uintptr_t vv
= (Py_uintptr_t
)v
;
762 Py_uintptr_t ww
= (Py_uintptr_t
)w
;
763 return (vv
< ww
) ? -1 : (vv
> ww
) ? 1 : 0;
766 /* None is smaller than anything */
772 /* different type: compare type names; numbers are smaller */
773 if (PyNumber_Check(v
))
776 vname
= v
->ob_type
->tp_name
;
777 if (PyNumber_Check(w
))
780 wname
= w
->ob_type
->tp_name
;
781 c
= strcmp(vname
, wname
);
786 /* Same type name, or (more likely) incomparable numeric types */
787 return ((Py_uintptr_t
)(v
->ob_type
) < (
788 Py_uintptr_t
)(w
->ob_type
)) ? -1 : 1;
791 /* Do a 3-way comparison, by hook or by crook. Return:
792 -2 for an exception (but see below);
796 BUT: if the object implements a tp_compare function, it returns
797 whatever this function returns (whether with an exception or not).
800 do_cmp(PyObject
*v
, PyObject
*w
)
805 if (v
->ob_type
== w
->ob_type
806 && (f
= v
->ob_type
->tp_compare
) != NULL
) {
808 if (PyInstance_Check(v
)) {
809 /* Instance tp_compare has a different signature.
810 But if it returns undefined we fall through. */
813 /* Else fall through to try_rich_to_3way_compare() */
816 return adjust_tp_compare(c
);
818 /* We only get here if one of the following is true:
819 a) v and w have different types
820 b) v and w have the same type, which doesn't have tp_compare
821 c) v and w are instances, and either __cmp__ is not defined or
822 __cmp__ returns NotImplemented
824 c
= try_rich_to_3way_compare(v
, w
);
827 c
= try_3way_compare(v
, w
);
830 return default_3way_compare(v
, w
);
833 /* Compare v to w. Return
834 -1 if v < w or exception (PyErr_Occurred() true in latter case).
837 XXX The docs (C API manual) say the return value is undefined in case
841 PyObject_Compare(PyObject
*v
, PyObject
*w
)
845 if (v
== NULL
|| w
== NULL
) {
846 PyErr_BadInternalCall();
851 if (Py_EnterRecursiveCall(" in cmp"))
853 result
= do_cmp(v
, w
);
854 Py_LeaveRecursiveCall();
855 return result
< 0 ? -1 : result
;
858 /* Return (new reference to) Py_True or Py_False. */
860 convert_3way_to_object(int op
, int c
)
864 case Py_LT
: c
= c
< 0; break;
865 case Py_LE
: c
= c
<= 0; break;
866 case Py_EQ
: c
= c
== 0; break;
867 case Py_NE
: c
= c
!= 0; break;
868 case Py_GT
: c
= c
> 0; break;
869 case Py_GE
: c
= c
>= 0; break;
871 result
= c
? Py_True
: Py_False
;
876 /* We want a rich comparison but don't have one. Try a 3-way cmp instead.
880 Py_False if not (v op w)
883 try_3way_to_rich_compare(PyObject
*v
, PyObject
*w
, int op
)
887 c
= try_3way_compare(v
, w
);
890 /* Py3K warning if types are not equal and comparison isn't == or != */
891 if (Py_Py3kWarningFlag
&&
892 v
->ob_type
!= w
->ob_type
&& op
!= Py_EQ
&& op
!= Py_NE
&&
893 PyErr_WarnEx(PyExc_DeprecationWarning
,
894 "comparing unequal types not supported "
899 c
= default_3way_compare(v
, w
);
903 return convert_3way_to_object(op
, c
);
906 /* Do rich comparison on v and w. Return
908 Else a new reference to an object other than Py_NotImplemented, usually(?):
910 Py_False if not (v op w)
913 do_richcmp(PyObject
*v
, PyObject
*w
, int op
)
917 res
= try_rich_compare(v
, w
, op
);
918 if (res
!= Py_NotImplemented
)
922 return try_3way_to_rich_compare(v
, w
, op
);
927 some object not equal to NotImplemented if it is implemented
928 (this latter object may not be a Boolean).
931 PyObject_RichCompare(PyObject
*v
, PyObject
*w
, int op
)
935 assert(Py_LT
<= op
&& op
<= Py_GE
);
936 if (Py_EnterRecursiveCall(" in cmp"))
939 /* If the types are equal, and not old-style instances, try to
940 get out cheap (don't bother with coercions etc.). */
941 if (v
->ob_type
== w
->ob_type
&& !PyInstance_Check(v
)) {
943 richcmpfunc frich
= RICHCOMPARE(v
->ob_type
);
944 /* If the type has richcmp, try it first. try_rich_compare
945 tries it two-sided, which is not needed since we've a
948 res
= (*frich
)(v
, w
, op
);
949 if (res
!= Py_NotImplemented
)
953 /* No richcmp, or this particular richmp not implemented.
955 fcmp
= v
->ob_type
->tp_compare
;
957 int c
= (*fcmp
)(v
, w
);
958 c
= adjust_tp_compare(c
);
963 res
= convert_3way_to_object(op
, c
);
968 /* Fast path not taken, or couldn't deliver a useful result. */
969 res
= do_richcmp(v
, w
, op
);
971 Py_LeaveRecursiveCall();
975 /* Return -1 if error; 1 if v op w; 0 if not (v op w). */
977 PyObject_RichCompareBool(PyObject
*v
, PyObject
*w
, int op
)
982 /* Quick result when objects are the same.
983 Guarantees that identity implies equality. */
987 else if (op
== Py_NE
)
991 res
= PyObject_RichCompare(v
, w
, op
);
994 if (PyBool_Check(res
))
995 ok
= (res
== Py_True
);
997 ok
= PyObject_IsTrue(res
);
1002 /* Set of hash utility functions to help maintaining the invariant that
1003 if a==b then hash(a)==hash(b)
1005 All the utility functions (_Py_Hash*()) return "-1" to signify an error.
1009 _Py_HashDouble(double v
)
1011 double intpart
, fractpart
;
1014 long x
; /* the final hash value */
1015 /* This is designed so that Python numbers of different types
1016 * that compare equal hash to the same value; otherwise comparisons
1017 * of mapping keys will turn out weird.
1020 fractpart
= modf(v
, &intpart
);
1021 if (fractpart
== 0.0) {
1022 /* This must return the same hash as an equal int or long. */
1023 if (intpart
> LONG_MAX
|| -intpart
> LONG_MAX
) {
1024 /* Convert to long and use its hash. */
1025 PyObject
*plong
; /* converted to Python long */
1026 if (Py_IS_INFINITY(intpart
))
1027 /* can't convert to long int -- arbitrary */
1028 v
= v
< 0 ? -271828.0 : 314159.0;
1029 plong
= PyLong_FromDouble(v
);
1032 x
= PyObject_Hash(plong
);
1036 /* Fits in a C long == a Python int, so is its own hash. */
1042 /* The fractional part is non-zero, so we don't have to worry about
1043 * making this match the hash of some other type.
1044 * Use frexp to get at the bits in the double.
1045 * Since the VAX D double format has 56 mantissa bits, which is the
1046 * most of any double format in use, each of these parts may have as
1047 * many as (but no more than) 56 significant bits.
1048 * So, assuming sizeof(long) >= 4, each part can be broken into two
1049 * longs; frexp and multiplication are used to do that.
1050 * Also, since the Cray double format has 15 exponent bits, which is
1051 * the most of any double format in use, shifting the exponent field
1052 * left by 15 won't overflow a long (again assuming sizeof(long) >= 4).
1054 v
= frexp(v
, &expo
);
1055 v
*= 2147483648.0; /* 2**31 */
1056 hipart
= (long)v
; /* take the top 32 bits */
1057 v
= (v
- (double)hipart
) * 2147483648.0; /* get the next 32 bits */
1058 x
= hipart
+ (long)v
+ (expo
<< 15);
1065 _Py_HashPointer(void *p
)
1067 #if SIZEOF_LONG >= SIZEOF_VOID_P
1070 /* convert to a Python long and hash that */
1074 if ((longobj
= PyLong_FromVoidPtr(p
)) == NULL
) {
1078 x
= PyObject_Hash(longobj
);
1081 Py_XDECREF(longobj
);
1087 PyObject_HashNotImplemented(PyObject
*self
)
1089 PyErr_Format(PyExc_TypeError
, "unhashable type: '%.200s'",
1090 self
->ob_type
->tp_name
);
1095 PyObject_Hash(PyObject
*v
)
1097 PyTypeObject
*tp
= v
->ob_type
;
1098 if (tp
->tp_hash
!= NULL
)
1099 return (*tp
->tp_hash
)(v
);
1100 if (tp
->tp_compare
== NULL
&& RICHCOMPARE(tp
) == NULL
) {
1101 return _Py_HashPointer(v
); /* Use address as hash value */
1103 /* If there's a cmp but no hash defined, the object can't be hashed */
1104 return PyObject_HashNotImplemented(v
);
1108 PyObject_GetAttrString(PyObject
*v
, const char *name
)
1112 if (Py_TYPE(v
)->tp_getattr
!= NULL
)
1113 return (*Py_TYPE(v
)->tp_getattr
)(v
, (char*)name
);
1114 w
= PyString_InternFromString(name
);
1117 res
= PyObject_GetAttr(v
, w
);
1123 PyObject_HasAttrString(PyObject
*v
, const char *name
)
1125 PyObject
*res
= PyObject_GetAttrString(v
, name
);
1135 PyObject_SetAttrString(PyObject
*v
, const char *name
, PyObject
*w
)
1140 if (Py_TYPE(v
)->tp_setattr
!= NULL
)
1141 return (*Py_TYPE(v
)->tp_setattr
)(v
, (char*)name
, w
);
1142 s
= PyString_InternFromString(name
);
1145 res
= PyObject_SetAttr(v
, s
, w
);
1151 PyObject_GetAttr(PyObject
*v
, PyObject
*name
)
1153 PyTypeObject
*tp
= Py_TYPE(v
);
1155 if (!PyString_Check(name
)) {
1156 #ifdef Py_USING_UNICODE
1157 /* The Unicode to string conversion is done here because the
1158 existing tp_getattro slots expect a string object as name
1159 and we wouldn't want to break those. */
1160 if (PyUnicode_Check(name
)) {
1161 name
= _PyUnicode_AsDefaultEncodedString(name
, NULL
);
1168 PyErr_Format(PyExc_TypeError
,
1169 "attribute name must be string, not '%.200s'",
1170 Py_TYPE(name
)->tp_name
);
1174 if (tp
->tp_getattro
!= NULL
)
1175 return (*tp
->tp_getattro
)(v
, name
);
1176 if (tp
->tp_getattr
!= NULL
)
1177 return (*tp
->tp_getattr
)(v
, PyString_AS_STRING(name
));
1178 PyErr_Format(PyExc_AttributeError
,
1179 "'%.50s' object has no attribute '%.400s'",
1180 tp
->tp_name
, PyString_AS_STRING(name
));
1185 PyObject_HasAttr(PyObject
*v
, PyObject
*name
)
1187 PyObject
*res
= PyObject_GetAttr(v
, name
);
1197 PyObject_SetAttr(PyObject
*v
, PyObject
*name
, PyObject
*value
)
1199 PyTypeObject
*tp
= Py_TYPE(v
);
1202 if (!PyString_Check(name
)){
1203 #ifdef Py_USING_UNICODE
1204 /* The Unicode to string conversion is done here because the
1205 existing tp_setattro slots expect a string object as name
1206 and we wouldn't want to break those. */
1207 if (PyUnicode_Check(name
)) {
1208 name
= PyUnicode_AsEncodedString(name
, NULL
, NULL
);
1215 PyErr_Format(PyExc_TypeError
,
1216 "attribute name must be string, not '%.200s'",
1217 Py_TYPE(name
)->tp_name
);
1224 PyString_InternInPlace(&name
);
1225 if (tp
->tp_setattro
!= NULL
) {
1226 err
= (*tp
->tp_setattro
)(v
, name
, value
);
1230 if (tp
->tp_setattr
!= NULL
) {
1231 err
= (*tp
->tp_setattr
)(v
, PyString_AS_STRING(name
), value
);
1236 if (tp
->tp_getattr
== NULL
&& tp
->tp_getattro
== NULL
)
1237 PyErr_Format(PyExc_TypeError
,
1238 "'%.100s' object has no attributes "
1241 value
==NULL
? "del" : "assign to",
1242 PyString_AS_STRING(name
));
1244 PyErr_Format(PyExc_TypeError
,
1245 "'%.100s' object has only read-only attributes "
1248 value
==NULL
? "del" : "assign to",
1249 PyString_AS_STRING(name
));
1253 /* Helper to get a pointer to an object's __dict__ slot, if any */
1256 _PyObject_GetDictPtr(PyObject
*obj
)
1258 Py_ssize_t dictoffset
;
1259 PyTypeObject
*tp
= Py_TYPE(obj
);
1261 if (!(tp
->tp_flags
& Py_TPFLAGS_HAVE_CLASS
))
1263 dictoffset
= tp
->tp_dictoffset
;
1264 if (dictoffset
== 0)
1266 if (dictoffset
< 0) {
1270 tsize
= ((PyVarObject
*)obj
)->ob_size
;
1273 size
= _PyObject_VAR_SIZE(tp
, tsize
);
1275 dictoffset
+= (long)size
;
1276 assert(dictoffset
> 0);
1277 assert(dictoffset
% SIZEOF_VOID_P
== 0);
1279 return (PyObject
**) ((char *)obj
+ dictoffset
);
1283 PyObject_SelfIter(PyObject
*obj
)
1289 /* Generic GetAttr functions - put these in your tp_[gs]etattro slot */
1292 PyObject_GenericGetAttr(PyObject
*obj
, PyObject
*name
)
1294 PyTypeObject
*tp
= Py_TYPE(obj
);
1295 PyObject
*descr
= NULL
;
1296 PyObject
*res
= NULL
;
1298 Py_ssize_t dictoffset
;
1301 if (!PyString_Check(name
)){
1302 #ifdef Py_USING_UNICODE
1303 /* The Unicode to string conversion is done here because the
1304 existing tp_setattro slots expect a string object as name
1305 and we wouldn't want to break those. */
1306 if (PyUnicode_Check(name
)) {
1307 name
= PyUnicode_AsEncodedString(name
, NULL
, NULL
);
1314 PyErr_Format(PyExc_TypeError
,
1315 "attribute name must be string, not '%.200s'",
1316 Py_TYPE(name
)->tp_name
);
1323 if (tp
->tp_dict
== NULL
) {
1324 if (PyType_Ready(tp
) < 0)
1328 #if 0 /* XXX this is not quite _PyType_Lookup anymore */
1329 /* Inline _PyType_Lookup */
1332 PyObject
*mro
, *base
, *dict
;
1334 /* Look in tp_dict of types in MRO */
1336 assert(mro
!= NULL
);
1337 assert(PyTuple_Check(mro
));
1338 n
= PyTuple_GET_SIZE(mro
);
1339 for (i
= 0; i
< n
; i
++) {
1340 base
= PyTuple_GET_ITEM(mro
, i
);
1341 if (PyClass_Check(base
))
1342 dict
= ((PyClassObject
*)base
)->cl_dict
;
1344 assert(PyType_Check(base
));
1345 dict
= ((PyTypeObject
*)base
)->tp_dict
;
1347 assert(dict
&& PyDict_Check(dict
));
1348 descr
= PyDict_GetItem(dict
, name
);
1354 descr
= _PyType_Lookup(tp
, name
);
1360 if (descr
!= NULL
&&
1361 PyType_HasFeature(descr
->ob_type
, Py_TPFLAGS_HAVE_CLASS
)) {
1362 f
= descr
->ob_type
->tp_descr_get
;
1363 if (f
!= NULL
&& PyDescr_IsData(descr
)) {
1364 res
= f(descr
, obj
, (PyObject
*)obj
->ob_type
);
1370 /* Inline _PyObject_GetDictPtr */
1371 dictoffset
= tp
->tp_dictoffset
;
1372 if (dictoffset
!= 0) {
1374 if (dictoffset
< 0) {
1378 tsize
= ((PyVarObject
*)obj
)->ob_size
;
1381 size
= _PyObject_VAR_SIZE(tp
, tsize
);
1383 dictoffset
+= (long)size
;
1384 assert(dictoffset
> 0);
1385 assert(dictoffset
% SIZEOF_VOID_P
== 0);
1387 dictptr
= (PyObject
**) ((char *)obj
+ dictoffset
);
1391 res
= PyDict_GetItem(dict
, name
);
1403 res
= f(descr
, obj
, (PyObject
*)Py_TYPE(obj
));
1408 if (descr
!= NULL
) {
1410 /* descr was already increfed above */
1414 PyErr_Format(PyExc_AttributeError
,
1415 "'%.50s' object has no attribute '%.400s'",
1416 tp
->tp_name
, PyString_AS_STRING(name
));
1423 PyObject_GenericSetAttr(PyObject
*obj
, PyObject
*name
, PyObject
*value
)
1425 PyTypeObject
*tp
= Py_TYPE(obj
);
1431 if (!PyString_Check(name
)){
1432 #ifdef Py_USING_UNICODE
1433 /* The Unicode to string conversion is done here because the
1434 existing tp_setattro slots expect a string object as name
1435 and we wouldn't want to break those. */
1436 if (PyUnicode_Check(name
)) {
1437 name
= PyUnicode_AsEncodedString(name
, NULL
, NULL
);
1444 PyErr_Format(PyExc_TypeError
,
1445 "attribute name must be string, not '%.200s'",
1446 Py_TYPE(name
)->tp_name
);
1453 if (tp
->tp_dict
== NULL
) {
1454 if (PyType_Ready(tp
) < 0)
1458 descr
= _PyType_Lookup(tp
, name
);
1460 if (descr
!= NULL
&&
1461 PyType_HasFeature(descr
->ob_type
, Py_TPFLAGS_HAVE_CLASS
)) {
1462 f
= descr
->ob_type
->tp_descr_set
;
1463 if (f
!= NULL
&& PyDescr_IsData(descr
)) {
1464 res
= f(descr
, obj
, value
);
1469 dictptr
= _PyObject_GetDictPtr(obj
);
1470 if (dictptr
!= NULL
) {
1471 PyObject
*dict
= *dictptr
;
1472 if (dict
== NULL
&& value
!= NULL
) {
1473 dict
= PyDict_New();
1481 res
= PyDict_DelItem(dict
, name
);
1483 res
= PyDict_SetItem(dict
, name
, value
);
1484 if (res
< 0 && PyErr_ExceptionMatches(PyExc_KeyError
))
1485 PyErr_SetObject(PyExc_AttributeError
, name
);
1492 res
= f(descr
, obj
, value
);
1496 if (descr
== NULL
) {
1497 PyErr_Format(PyExc_AttributeError
,
1498 "'%.100s' object has no attribute '%.200s'",
1499 tp
->tp_name
, PyString_AS_STRING(name
));
1503 PyErr_Format(PyExc_AttributeError
,
1504 "'%.50s' object attribute '%.400s' is read-only",
1505 tp
->tp_name
, PyString_AS_STRING(name
));
1511 /* Test a value used as condition, e.g., in a for or if statement.
1512 Return -1 if an error occurred */
1515 PyObject_IsTrue(PyObject
*v
)
1524 else if (v
->ob_type
->tp_as_number
!= NULL
&&
1525 v
->ob_type
->tp_as_number
->nb_nonzero
!= NULL
)
1526 res
= (*v
->ob_type
->tp_as_number
->nb_nonzero
)(v
);
1527 else if (v
->ob_type
->tp_as_mapping
!= NULL
&&
1528 v
->ob_type
->tp_as_mapping
->mp_length
!= NULL
)
1529 res
= (*v
->ob_type
->tp_as_mapping
->mp_length
)(v
);
1530 else if (v
->ob_type
->tp_as_sequence
!= NULL
&&
1531 v
->ob_type
->tp_as_sequence
->sq_length
!= NULL
)
1532 res
= (*v
->ob_type
->tp_as_sequence
->sq_length
)(v
);
1535 /* if it is negative, it should be either -1 or -2 */
1536 return (res
> 0) ? 1 : Py_SAFE_DOWNCAST(res
, Py_ssize_t
, int);
1539 /* equivalent of 'not v'
1540 Return -1 if an error occurred */
1543 PyObject_Not(PyObject
*v
)
1546 res
= PyObject_IsTrue(v
);
1552 /* Coerce two numeric types to the "larger" one.
1553 Increment the reference count on each argument.
1555 -1 if an error occurred;
1556 0 if the coercion succeeded (and then the reference counts are increased);
1557 1 if no coercion is possible (and no error is raised).
1560 PyNumber_CoerceEx(PyObject
**pv
, PyObject
**pw
)
1562 register PyObject
*v
= *pv
;
1563 register PyObject
*w
= *pw
;
1566 /* Shortcut only for old-style types */
1567 if (v
->ob_type
== w
->ob_type
&&
1568 !PyType_HasFeature(v
->ob_type
, Py_TPFLAGS_CHECKTYPES
))
1574 if (v
->ob_type
->tp_as_number
&& v
->ob_type
->tp_as_number
->nb_coerce
) {
1575 res
= (*v
->ob_type
->tp_as_number
->nb_coerce
)(pv
, pw
);
1579 if (w
->ob_type
->tp_as_number
&& w
->ob_type
->tp_as_number
->nb_coerce
) {
1580 res
= (*w
->ob_type
->tp_as_number
->nb_coerce
)(pw
, pv
);
1587 /* Coerce two numeric types to the "larger" one.
1588 Increment the reference count on each argument.
1589 Return -1 and raise an exception if no coercion is possible
1590 (and then no reference count is incremented).
1593 PyNumber_Coerce(PyObject
**pv
, PyObject
**pw
)
1595 int err
= PyNumber_CoerceEx(pv
, pw
);
1598 PyErr_SetString(PyExc_TypeError
, "number coercion failed");
1603 /* Test whether an object can be called */
1606 PyCallable_Check(PyObject
*x
)
1610 if (PyInstance_Check(x
)) {
1611 PyObject
*call
= PyObject_GetAttrString(x
, "__call__");
1616 /* Could test recursively but don't, for fear of endless
1617 recursion if some joker sets self.__call__ = self */
1622 return x
->ob_type
->tp_call
!= NULL
;
1626 /* ------------------------- PyObject_Dir() helpers ------------------------- */
1628 /* Helper for PyObject_Dir.
1629 Merge the __dict__ of aclass into dict, and recursively also all
1630 the __dict__s of aclass's base classes. The order of merging isn't
1631 defined, as it's expected that only the final set of dict keys is
1633 Return 0 on success, -1 on error.
1637 merge_class_dict(PyObject
* dict
, PyObject
* aclass
)
1639 PyObject
*classdict
;
1642 assert(PyDict_Check(dict
));
1645 /* Merge in the type's dict (if any). */
1646 classdict
= PyObject_GetAttrString(aclass
, "__dict__");
1647 if (classdict
== NULL
)
1650 int status
= PyDict_Update(dict
, classdict
);
1651 Py_DECREF(classdict
);
1656 /* Recursively merge in the base types' (if any) dicts. */
1657 bases
= PyObject_GetAttrString(aclass
, "__bases__");
1661 /* We have no guarantee that bases is a real tuple */
1663 n
= PySequence_Size(bases
); /* This better be right */
1667 for (i
= 0; i
< n
; i
++) {
1669 PyObject
*base
= PySequence_GetItem(bases
, i
);
1674 status
= merge_class_dict(dict
, base
);
1687 /* Helper for PyObject_Dir.
1688 If obj has an attr named attrname that's a list, merge its string
1689 elements into keys of dict.
1690 Return 0 on success, -1 on error. Errors due to not finding the attr,
1691 or the attr not being a list, are suppressed.
1695 merge_list_attr(PyObject
* dict
, PyObject
* obj
, const char *attrname
)
1700 assert(PyDict_Check(dict
));
1704 list
= PyObject_GetAttrString(obj
, attrname
);
1708 else if (PyList_Check(list
)) {
1710 for (i
= 0; i
< PyList_GET_SIZE(list
); ++i
) {
1711 PyObject
*item
= PyList_GET_ITEM(list
, i
);
1712 if (PyString_Check(item
)) {
1713 result
= PyDict_SetItem(dict
, item
, Py_None
);
1718 if (Py_Py3kWarningFlag
&&
1719 (strcmp(attrname
, "__members__") == 0 ||
1720 strcmp(attrname
, "__methods__") == 0)) {
1721 if (PyErr_WarnEx(PyExc_DeprecationWarning
,
1722 "__members__ and __methods__ not "
1723 "supported in 3.x", 1) < 0) {
1734 /* Helper for PyObject_Dir without arguments: returns the local scope. */
1739 PyObject
*locals
= PyEval_GetLocals();
1741 if (locals
== NULL
) {
1742 PyErr_SetString(PyExc_SystemError
, "frame does not exist");
1746 names
= PyMapping_Keys(locals
);
1749 if (!PyList_Check(names
)) {
1750 PyErr_Format(PyExc_TypeError
,
1751 "dir(): expected keys() of locals to be a list, "
1752 "not '%.200s'", Py_TYPE(names
)->tp_name
);
1756 /* the locals don't need to be DECREF'd */
1760 /* Helper for PyObject_Dir of type objects: returns __dict__ and __bases__.
1761 We deliberately don't suck up its __class__, as methods belonging to the
1762 metaclass would probably be more confusing than helpful.
1765 _specialized_dir_type(PyObject
*obj
)
1767 PyObject
*result
= NULL
;
1768 PyObject
*dict
= PyDict_New();
1770 if (dict
!= NULL
&& merge_class_dict(dict
, obj
) == 0)
1771 result
= PyDict_Keys(dict
);
1777 /* Helper for PyObject_Dir of module objects: returns the module's __dict__. */
1779 _specialized_dir_module(PyObject
*obj
)
1781 PyObject
*result
= NULL
;
1782 PyObject
*dict
= PyObject_GetAttrString(obj
, "__dict__");
1785 if (PyDict_Check(dict
))
1786 result
= PyDict_Keys(dict
);
1788 PyErr_Format(PyExc_TypeError
,
1789 "%.200s.__dict__ is not a dictionary",
1790 PyModule_GetName(obj
));
1798 /* Helper for PyObject_Dir of generic objects: returns __dict__, __class__,
1799 and recursively up the __class__.__bases__ chain.
1802 _generic_dir(PyObject
*obj
)
1804 PyObject
*result
= NULL
;
1805 PyObject
*dict
= NULL
;
1806 PyObject
*itsclass
= NULL
;
1808 /* Get __dict__ (which may or may not be a real dict...) */
1809 dict
= PyObject_GetAttrString(obj
, "__dict__");
1812 dict
= PyDict_New();
1814 else if (!PyDict_Check(dict
)) {
1816 dict
= PyDict_New();
1819 /* Copy __dict__ to avoid mutating it. */
1820 PyObject
*temp
= PyDict_Copy(dict
);
1828 /* Merge in __members__ and __methods__ (if any).
1829 * This is removed in Python 3000. */
1830 if (merge_list_attr(dict
, obj
, "__members__") < 0)
1832 if (merge_list_attr(dict
, obj
, "__methods__") < 0)
1835 /* Merge in attrs reachable from its class. */
1836 itsclass
= PyObject_GetAttrString(obj
, "__class__");
1837 if (itsclass
== NULL
)
1838 /* XXX(tomer): Perhaps fall back to obj->ob_type if no
1839 __class__ exists? */
1842 if (merge_class_dict(dict
, itsclass
) != 0)
1846 result
= PyDict_Keys(dict
);
1849 Py_XDECREF(itsclass
);
1854 /* Helper for PyObject_Dir: object introspection.
1855 This calls one of the above specialized versions if no __dir__ method
1858 _dir_object(PyObject
*obj
)
1860 PyObject
*result
= NULL
;
1861 PyObject
*dirfunc
= PyObject_GetAttrString((PyObject
*)obj
->ob_type
,
1865 if (dirfunc
== NULL
) {
1866 /* use default implementation */
1868 if (PyModule_Check(obj
))
1869 result
= _specialized_dir_module(obj
);
1870 else if (PyType_Check(obj
) || PyClass_Check(obj
))
1871 result
= _specialized_dir_type(obj
);
1873 result
= _generic_dir(obj
);
1877 result
= PyObject_CallFunctionObjArgs(dirfunc
, obj
, NULL
);
1882 /* result must be a list */
1883 /* XXX(gbrandl): could also check if all items are strings */
1884 if (!PyList_Check(result
)) {
1885 PyErr_Format(PyExc_TypeError
,
1886 "__dir__() must return a list, not %.200s",
1887 Py_TYPE(result
)->tp_name
);
1896 /* Implementation of dir() -- if obj is NULL, returns the names in the current
1897 (local) scope. Otherwise, performs introspection of the object: returns a
1898 sorted list of attribute names (supposedly) accessible from the object
1901 PyObject_Dir(PyObject
*obj
)
1906 /* no object -- introspect the locals */
1907 result
= _dir_locals();
1909 /* object -- introspect the object */
1910 result
= _dir_object(obj
);
1912 assert(result
== NULL
|| PyList_Check(result
));
1914 if (result
!= NULL
&& PyList_Sort(result
) != 0) {
1915 /* sorting the list failed */
1924 NoObject is usable as a non-NULL undefined value, used by the macro None.
1925 There is (and should be!) no way to create other objects of this type,
1926 so there is exactly one (which is indestructible, by the way).
1927 (XXX This type and the type of NotImplemented below should be unified.)
1932 none_repr(PyObject
*op
)
1934 return PyString_FromString("None");
1939 none_dealloc(PyObject
* ignore
)
1941 /* This should never get called, but we also don't want to SEGV if
1942 * we accidently decref None out of existance.
1944 Py_FatalError("deallocating None");
1948 static PyTypeObject PyNone_Type
= {
1949 PyVarObject_HEAD_INIT(&PyType_Type
, 0)
1953 none_dealloc
, /*tp_dealloc*/ /*never called*/
1958 none_repr
, /*tp_repr*/
1960 0, /*tp_as_sequence*/
1961 0, /*tp_as_mapping*/
1962 (hashfunc
)_Py_HashPointer
, /*tp_hash */
1965 PyObject _Py_NoneStruct
= {
1966 _PyObject_EXTRA_INIT
1970 /* NotImplemented is an object that can be used to signal that an
1971 operation is not implemented for the given type combination. */
1974 NotImplemented_repr(PyObject
*op
)
1976 return PyString_FromString("NotImplemented");
1979 static PyTypeObject PyNotImplemented_Type
= {
1980 PyVarObject_HEAD_INIT(&PyType_Type
, 0)
1981 "NotImplementedType",
1984 none_dealloc
, /*tp_dealloc*/ /*never called*/
1989 NotImplemented_repr
, /*tp_repr*/
1991 0, /*tp_as_sequence*/
1992 0, /*tp_as_mapping*/
1996 PyObject _Py_NotImplementedStruct
= {
1997 _PyObject_EXTRA_INIT
1998 1, &PyNotImplemented_Type
2002 _Py_ReadyTypes(void)
2004 if (PyType_Ready(&PyType_Type
) < 0)
2005 Py_FatalError("Can't initialize 'type'");
2007 if (PyType_Ready(&_PyWeakref_RefType
) < 0)
2008 Py_FatalError("Can't initialize 'weakref'");
2010 if (PyType_Ready(&PyBool_Type
) < 0)
2011 Py_FatalError("Can't initialize 'bool'");
2013 if (PyType_Ready(&PyString_Type
) < 0)
2014 Py_FatalError("Can't initialize 'str'");
2016 if (PyType_Ready(&PyByteArray_Type
) < 0)
2017 Py_FatalError("Can't initialize 'bytes'");
2019 if (PyType_Ready(&PyList_Type
) < 0)
2020 Py_FatalError("Can't initialize 'list'");
2022 if (PyType_Ready(&PyNone_Type
) < 0)
2023 Py_FatalError("Can't initialize type(None)");
2025 if (PyType_Ready(&PyNotImplemented_Type
) < 0)
2026 Py_FatalError("Can't initialize type(NotImplemented)");
2030 #ifdef Py_TRACE_REFS
2033 _Py_NewReference(PyObject
*op
)
2037 _Py_AddToAllObjects(op
, 1);
2038 _Py_INC_TPALLOCS(op
);
2042 _Py_ForgetReference(register PyObject
*op
)
2044 #ifdef SLOW_UNREF_CHECK
2045 register PyObject
*p
;
2047 if (op
->ob_refcnt
< 0)
2048 Py_FatalError("UNREF negative refcnt");
2049 if (op
== &refchain
||
2050 op
->_ob_prev
->_ob_next
!= op
|| op
->_ob_next
->_ob_prev
!= op
)
2051 Py_FatalError("UNREF invalid object");
2052 #ifdef SLOW_UNREF_CHECK
2053 for (p
= refchain
._ob_next
; p
!= &refchain
; p
= p
->_ob_next
) {
2057 if (p
== &refchain
) /* Not found */
2058 Py_FatalError("UNREF unknown object");
2060 op
->_ob_next
->_ob_prev
= op
->_ob_prev
;
2061 op
->_ob_prev
->_ob_next
= op
->_ob_next
;
2062 op
->_ob_next
= op
->_ob_prev
= NULL
;
2063 _Py_INC_TPFREES(op
);
2067 _Py_Dealloc(PyObject
*op
)
2069 destructor dealloc
= Py_TYPE(op
)->tp_dealloc
;
2070 _Py_ForgetReference(op
);
2074 /* Print all live objects. Because PyObject_Print is called, the
2075 * interpreter must be in a healthy state.
2078 _Py_PrintReferences(FILE *fp
)
2081 fprintf(fp
, "Remaining objects:\n");
2082 for (op
= refchain
._ob_next
; op
!= &refchain
; op
= op
->_ob_next
) {
2083 fprintf(fp
, "%p [%" PY_FORMAT_SIZE_T
"d] ", op
, op
->ob_refcnt
);
2084 if (PyObject_Print(op
, fp
, 0) != 0)
2090 /* Print the addresses of all live objects. Unlike _Py_PrintReferences, this
2091 * doesn't make any calls to the Python C API, so is always safe to call.
2094 _Py_PrintReferenceAddresses(FILE *fp
)
2097 fprintf(fp
, "Remaining object addresses:\n");
2098 for (op
= refchain
._ob_next
; op
!= &refchain
; op
= op
->_ob_next
)
2099 fprintf(fp
, "%p [%" PY_FORMAT_SIZE_T
"d] %s\n", op
,
2100 op
->ob_refcnt
, Py_TYPE(op
)->tp_name
);
2104 _Py_GetObjects(PyObject
*self
, PyObject
*args
)
2110 if (!PyArg_ParseTuple(args
, "i|O", &n
, &t
))
2112 op
= refchain
._ob_next
;
2113 res
= PyList_New(0);
2116 for (i
= 0; (n
== 0 || i
< n
) && op
!= &refchain
; i
++) {
2117 while (op
== self
|| op
== args
|| op
== res
|| op
== t
||
2118 (t
!= NULL
&& Py_TYPE(op
) != (PyTypeObject
*) t
)) {
2120 if (op
== &refchain
)
2123 if (PyList_Append(res
, op
) < 0) {
2135 /* Hack to force loading of cobject.o */
2136 PyTypeObject
*_Py_cobject_hack
= &PyCObject_Type
;
2139 /* Hack to force loading of abstract.o */
2140 Py_ssize_t (*_Py_abstract_hack
)(PyObject
*) = PyObject_Size
;
2143 /* Python's malloc wrappers (see pymem.h) */
2146 PyMem_Malloc(size_t nbytes
)
2148 return PyMem_MALLOC(nbytes
);
2152 PyMem_Realloc(void *p
, size_t nbytes
)
2154 return PyMem_REALLOC(p
, nbytes
);
2164 /* These methods are used to control infinite recursion in repr, str, print,
2165 etc. Container objects that may recursively contain themselves,
2166 e.g. builtin dictionaries and lists, should used Py_ReprEnter() and
2167 Py_ReprLeave() to avoid infinite recursion.
2169 Py_ReprEnter() returns 0 the first time it is called for a particular
2170 object and 1 every time thereafter. It returns -1 if an exception
2171 occurred. Py_ReprLeave() has no return value.
2173 See dictobject.c and listobject.c for examples of use.
2176 #define KEY "Py_Repr"
2179 Py_ReprEnter(PyObject
*obj
)
2185 dict
= PyThreadState_GetDict();
2188 list
= PyDict_GetItemString(dict
, KEY
);
2190 list
= PyList_New(0);
2193 if (PyDict_SetItemString(dict
, KEY
, list
) < 0)
2197 i
= PyList_GET_SIZE(list
);
2199 if (PyList_GET_ITEM(list
, i
) == obj
)
2202 PyList_Append(list
, obj
);
2207 Py_ReprLeave(PyObject
*obj
)
2213 dict
= PyThreadState_GetDict();
2216 list
= PyDict_GetItemString(dict
, KEY
);
2217 if (list
== NULL
|| !PyList_Check(list
))
2219 i
= PyList_GET_SIZE(list
);
2220 /* Count backwards because we always expect obj to be list[-1] */
2222 if (PyList_GET_ITEM(list
, i
) == obj
) {
2223 PyList_SetSlice(list
, i
, i
+ 1, NULL
);
2229 /* Trashcan support. */
2231 /* Current call-stack depth of tp_dealloc calls. */
2232 int _PyTrash_delete_nesting
= 0;
2234 /* List of objects that still need to be cleaned up, singly linked via their
2235 * gc headers' gc_prev pointers.
2237 PyObject
*_PyTrash_delete_later
= NULL
;
2239 /* Add op to the _PyTrash_delete_later list. Called when the current
2240 * call-stack depth gets large. op must be a currently untracked gc'ed
2241 * object, with refcount 0. Py_DECREF must already have been called on it.
2244 _PyTrash_deposit_object(PyObject
*op
)
2246 assert(PyObject_IS_GC(op
));
2247 assert(_Py_AS_GC(op
)->gc
.gc_refs
== _PyGC_REFS_UNTRACKED
);
2248 assert(op
->ob_refcnt
== 0);
2249 _Py_AS_GC(op
)->gc
.gc_prev
= (PyGC_Head
*)_PyTrash_delete_later
;
2250 _PyTrash_delete_later
= op
;
2253 /* Dealloccate all the objects in the _PyTrash_delete_later list. Called when
2254 * the call-stack unwinds again.
2257 _PyTrash_destroy_chain(void)
2259 while (_PyTrash_delete_later
) {
2260 PyObject
*op
= _PyTrash_delete_later
;
2261 destructor dealloc
= Py_TYPE(op
)->tp_dealloc
;
2263 _PyTrash_delete_later
=
2264 (PyObject
*) _Py_AS_GC(op
)->gc
.gc_prev
;
2266 /* Call the deallocator directly. This used to try to
2267 * fool Py_DECREF into calling it indirectly, but
2268 * Py_DECREF was already called on this object, and in
2269 * assorted non-release builds calling Py_DECREF again ends
2270 * up distorting allocation statistics.
2272 assert(op
->ob_refcnt
== 0);
2273 ++_PyTrash_delete_nesting
;
2275 --_PyTrash_delete_nesting
;