Silence the DeprecationWarning raised by importing mimetools in BaseHTTPServer.
[python.git] / Objects / object.c
blob9cd34b8d4e3b252b82c8472c5202cd36b6522ff1
2 /* Generic object operations; and implementation of None (NoObject) */
4 #include "Python.h"
6 #ifdef __cplusplus
7 extern "C" {
8 #endif
10 #ifdef Py_REF_DEBUG
11 Py_ssize_t _Py_RefTotal;
13 Py_ssize_t
14 _Py_GetRefTotal(void)
16 PyObject *o;
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) */
21 o = _PyDict_Dummy();
22 if (o != NULL)
23 total -= o->ob_refcnt;
24 o = _PySet_Dummy();
25 if (o != NULL)
26 total -= o->ob_refcnt;
27 return total;
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! */
38 #ifdef Py_TRACE_REFS
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).
56 void
57 _Py_AddToAllObjects(PyObject *op, int force)
59 #ifdef Py_DEBUG
60 if (!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));
66 #endif
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 */
76 #ifdef COUNT_ALLOCS
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;
88 void
89 dump_counts(FILE* f)
91 PyTypeObject *tp;
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,
96 tp->tp_maxalloc);
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);
105 PyObject *
106 get_counts(void)
108 PyTypeObject *tp;
109 PyObject *result;
110 PyObject *v;
112 result = PyList_New(0);
113 if (result == NULL)
114 return NULL;
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);
118 if (v == NULL) {
119 Py_DECREF(result);
120 return NULL;
122 if (PyList_Append(result, v) < 0) {
123 Py_DECREF(v);
124 Py_DECREF(result);
125 return NULL;
127 Py_DECREF(v);
129 return result;
132 void
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");
139 if (type_list)
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.
150 Py_INCREF(tp);
151 type_list = tp;
152 #ifdef Py_TRACE_REFS
153 /* Also insert in the doubly-linked list of all objects,
154 * if not already there.
156 _Py_AddToAllObjects((PyObject *)tp, 0);
157 #endif
159 tp->tp_allocs++;
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)
166 tp->tp_frees++;
167 if (unlist_types_without_objects &&
168 tp->tp_allocs == tp->tp_frees) {
169 /* unlink the type from type_list */
170 if (tp->tp_prev)
171 tp->tp_prev->tp_next = tp->tp_next;
172 else
173 type_list = tp->tp_next;
174 if (tp->tp_next)
175 tp->tp_next->tp_prev = tp->tp_prev;
176 tp->tp_next = tp->tp_prev = NULL;
177 Py_DECREF(tp);
181 #endif
183 #ifdef Py_REF_DEBUG
184 /* Log a fatal error; doesn't return. */
185 void
186 _Py_NegativeRefcount(const char *fname, int lineno, PyObject *op)
188 char buf[300];
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);
194 Py_FatalError(buf);
197 #endif /* Py_REF_DEBUG */
199 void
200 Py_IncRef(PyObject *o)
202 Py_XINCREF(o);
205 void
206 Py_DecRef(PyObject *o)
208 Py_XDECREF(o);
211 PyObject *
212 PyObject_Init(PyObject *op, PyTypeObject *tp)
214 if (op == NULL)
215 return PyErr_NoMemory();
216 /* Any changes should be reflected in PyObject_INIT (objimpl.h) */
217 Py_TYPE(op) = tp;
218 _Py_NewReference(op);
219 return op;
222 PyVarObject *
223 PyObject_InitVar(PyVarObject *op, PyTypeObject *tp, Py_ssize_t size)
225 if (op == NULL)
226 return (PyVarObject *) PyErr_NoMemory();
227 /* Any changes should be reflected in PyObject_INIT_VAR */
228 op->ob_size = size;
229 Py_TYPE(op) = tp;
230 _Py_NewReference((PyObject *)op);
231 return op;
234 PyObject *
235 _PyObject_New(PyTypeObject *tp)
237 PyObject *op;
238 op = (PyObject *) PyObject_MALLOC(_PyObject_SIZE(tp));
239 if (op == NULL)
240 return PyErr_NoMemory();
241 return PyObject_INIT(op, tp);
244 PyVarObject *
245 _PyObject_NewVar(PyTypeObject *tp, Py_ssize_t nitems)
247 PyVarObject *op;
248 const size_t size = _PyObject_VAR_SIZE(tp, nitems);
249 op = (PyVarObject *) PyObject_MALLOC(size);
250 if (op == NULL)
251 return (PyVarObject *)PyErr_NoMemory();
252 return PyObject_INIT_VAR(op, tp, nitems);
255 /* for binary compatibility with 2.2 */
256 #undef _PyObject_Del
257 void
258 _PyObject_Del(PyObject *op)
260 PyObject_FREE(op);
263 /* Implementation of PyObject_Print with recursion checking */
264 static int
265 internal_print(PyObject *op, FILE *fp, int flags, int nesting)
267 int ret = 0;
268 if (nesting > 10) {
269 PyErr_SetString(PyExc_RuntimeError, "print recursion");
270 return -1;
272 if (PyErr_CheckSignals())
273 return -1;
274 #ifdef USE_STACKCHECK
275 if (PyOS_CheckStack()) {
276 PyErr_SetString(PyExc_MemoryError, "stack overflow");
277 return -1;
279 #endif
280 clearerr(fp); /* Clear any previous error condition */
281 if (op == NULL) {
282 Py_BEGIN_ALLOW_THREADS
283 fprintf(fp, "<nil>");
284 Py_END_ALLOW_THREADS
286 else {
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);
293 Py_END_ALLOW_THREADS
294 else if (Py_TYPE(op)->tp_print == NULL) {
295 PyObject *s;
296 if (flags & Py_PRINT_RAW)
297 s = PyObject_Str(op);
298 else
299 s = PyObject_Repr(op);
300 if (s == NULL)
301 ret = -1;
302 else {
303 ret = internal_print(s, fp, Py_PRINT_RAW,
304 nesting+1);
306 Py_XDECREF(s);
308 else
309 ret = (*Py_TYPE(op)->tp_print)(op, fp, flags);
311 if (ret == 0) {
312 if (ferror(fp)) {
313 PyErr_SetFromErrno(PyExc_IOError);
314 clearerr(fp);
315 ret = -1;
318 return ret;
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)
331 if (op == NULL)
332 fprintf(stderr, "NULL\n");
333 else {
334 fprintf(stderr, "object : ");
335 (void)PyObject_Print(op, stderr, 0);
336 /* XXX(twouters) cast refcount to long until %zd is
337 universally available */
338 fprintf(stderr, "\n"
339 "type : %s\n"
340 "refcount: %ld\n"
341 "address : %p\n",
342 Py_TYPE(op)==NULL ? "NULL" : Py_TYPE(op)->tp_name,
343 (long)op->ob_refcnt,
344 op);
348 PyObject *
349 PyObject_Repr(PyObject *v)
351 if (PyErr_CheckSignals())
352 return NULL;
353 #ifdef USE_STACKCHECK
354 if (PyOS_CheckStack()) {
355 PyErr_SetString(PyExc_MemoryError, "stack overflow");
356 return NULL;
358 #endif
359 if (v == NULL)
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);
364 else {
365 PyObject *res;
366 res = (*Py_TYPE(v)->tp_repr)(v);
367 if (res == NULL)
368 return NULL;
369 #ifdef Py_USING_UNICODE
370 if (PyUnicode_Check(res)) {
371 PyObject* str;
372 str = PyUnicode_AsEncodedString(res, NULL, NULL);
373 Py_DECREF(res);
374 if (str)
375 res = str;
376 else
377 return NULL;
379 #endif
380 if (!PyString_Check(res)) {
381 PyErr_Format(PyExc_TypeError,
382 "__repr__ returned non-string (type %.200s)",
383 Py_TYPE(res)->tp_name);
384 Py_DECREF(res);
385 return NULL;
387 return res;
391 PyObject *
392 _PyObject_Str(PyObject *v)
394 PyObject *res;
395 int type_ok;
396 if (v == NULL)
397 return PyString_FromString("<NULL>");
398 if (PyString_CheckExact(v)) {
399 Py_INCREF(v);
400 return v;
402 #ifdef Py_USING_UNICODE
403 if (PyUnicode_CheckExact(v)) {
404 Py_INCREF(v);
405 return v;
407 #endif
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
412 infinitely. */
413 if (Py_EnterRecursiveCall(" while getting the str of an object"))
414 return NULL;
415 res = (*Py_TYPE(v)->tp_str)(v);
416 Py_LeaveRecursiveCall();
417 if (res == NULL)
418 return NULL;
419 type_ok = PyString_Check(res);
420 #ifdef Py_USING_UNICODE
421 type_ok = type_ok || PyUnicode_Check(res);
422 #endif
423 if (!type_ok) {
424 PyErr_Format(PyExc_TypeError,
425 "__str__ returned non-string (type %.200s)",
426 Py_TYPE(res)->tp_name);
427 Py_DECREF(res);
428 return NULL;
430 return res;
433 PyObject *
434 PyObject_Str(PyObject *v)
436 PyObject *res = _PyObject_Str(v);
437 if (res == NULL)
438 return NULL;
439 #ifdef Py_USING_UNICODE
440 if (PyUnicode_Check(res)) {
441 PyObject* str;
442 str = PyUnicode_AsEncodedString(res, NULL, NULL);
443 Py_DECREF(res);
444 if (str)
445 res = str;
446 else
447 return NULL;
449 #endif
450 assert(PyString_Check(res));
451 return res;
454 #ifdef Py_USING_UNICODE
455 PyObject *
456 PyObject_Unicode(PyObject *v)
458 PyObject *res;
459 PyObject *func;
460 PyObject *str;
461 int unicode_method_found = 0;
462 static PyObject *unicodestr;
464 if (v == NULL) {
465 res = PyString_FromString("<NULL>");
466 if (res == NULL)
467 return NULL;
468 str = PyUnicode_FromEncodedObject(res, NULL, "strict");
469 Py_DECREF(res);
470 return str;
471 } else if (PyUnicode_CheckExact(v)) {
472 Py_INCREF(v);
473 return v;
476 /* Try the __unicode__ method */
477 if (unicodestr == NULL) {
478 unicodestr= PyString_InternFromString("__unicode__");
479 if (unicodestr == NULL)
480 return 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);
486 if (func != NULL) {
487 unicode_method_found = 1;
488 res = PyObject_CallFunctionObjArgs(func, NULL);
489 Py_DECREF(func);
491 else {
492 PyErr_Clear();
495 else {
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);
499 if (func != NULL) {
500 unicode_method_found = 1;
501 res = PyObject_CallFunctionObjArgs(func, v, NULL);
503 else {
504 PyErr_Clear();
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)) {
517 Py_INCREF(v);
518 res = v;
520 else {
521 if (Py_TYPE(v)->tp_str != NULL)
522 res = (*Py_TYPE(v)->tp_str)(v);
523 else
524 res = PyObject_Repr(v);
528 if (res == NULL)
529 return NULL;
530 if (!PyUnicode_Check(res)) {
531 str = PyUnicode_FromEncodedObject(res, NULL, "strict");
532 Py_DECREF(res);
533 res = str;
535 return res;
537 #endif
540 /* Helper to warn about deprecated tp_compare return values. Return:
541 -2 for an exception;
542 -1 if v < w;
543 0 if v == w;
544 1 if v > w.
545 (This function cannot return 2.)
547 static int
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) {
557 Py_XDECREF(t);
558 Py_XDECREF(v);
559 Py_XDECREF(tb);
561 else
562 PyErr_Restore(t, v, tb);
564 return -2;
566 else if (c < -1 || c > 1) {
567 if (PyErr_Warn(PyExc_RuntimeWarning,
568 "tp_compare didn't return -1, 0 or 1") < 0)
569 return -2;
570 else
571 return c < -1 ? -1 : 1;
573 else {
574 assert(c >= -1 && c <= 1);
575 return c;
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:
588 NULL for exception;
589 NotImplemented if this particular rich comparison is not implemented or
590 undefined;
591 some object not equal to NotImplemented if it is implemented
592 (this latter object may not be a Boolean).
594 static PyObject *
595 try_rich_compare(PyObject *v, PyObject *w, int op)
597 richcmpfunc f;
598 PyObject *res;
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)
605 return res;
606 Py_DECREF(res);
608 if ((f = RICHCOMPARE(v->ob_type)) != NULL) {
609 res = (*f)(v, w, op);
610 if (res != Py_NotImplemented)
611 return res;
612 Py_DECREF(res);
614 if ((f = RICHCOMPARE(w->ob_type)) != NULL) {
615 return (*f)(w, v, _Py_SwappedOp[op]);
617 res = Py_NotImplemented;
618 Py_INCREF(res);
619 return res;
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.
629 static int
630 try_rich_compare_bool(PyObject *v, PyObject *w, int op)
632 PyObject *res;
633 int ok;
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);
638 if (res == NULL)
639 return -1;
640 if (res == Py_NotImplemented) {
641 Py_DECREF(res);
642 return 2;
644 ok = PyObject_IsTrue(res);
645 Py_DECREF(res);
646 return ok;
649 /* Try rich comparisons to determine a 3-way comparison. Return:
650 -2 for an exception;
651 -1 if v < w;
652 0 if v == w;
653 1 if v > w;
654 2 if this particular rich comparison is not implemented or undefined.
656 static int
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: */
661 {Py_EQ, 0},
662 {Py_LT, -1},
663 {Py_GT, 1},
665 int i;
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)) {
672 case -1:
673 return -2;
674 case 1:
675 return tries[i].outcome;
679 return 2;
682 /* Try a 3-way comparison, returning an int. Return:
683 -2 for an exception;
684 -1 if v < w;
685 0 if v == w;
686 1 if v > w;
687 2 if this particular 3-way comparison is not implemented or undefined.
689 static int
690 try_3way_compare(PyObject *v, PyObject *w)
692 int c;
693 cmpfunc f;
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))
700 return (*f)(v, w);
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) {
706 c = (*f)(v, w);
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);
725 if (c < 0)
726 return -2;
727 if (c > 0)
728 return 2;
729 f = v->ob_type->tp_compare;
730 if (f != NULL && f == w->ob_type->tp_compare) {
731 c = (*f)(v, w);
732 Py_DECREF(v);
733 Py_DECREF(w);
734 return adjust_tp_compare(c);
737 /* No comparison defined */
738 Py_DECREF(v);
739 Py_DECREF(w);
740 return 2;
743 /* Final fallback 3-way comparison, returning an int. Return:
744 -2 if an error occurred;
745 -1 if v < w;
746 0 if v == w;
747 1 if v > w.
749 static int
750 default_3way_compare(PyObject *v, PyObject *w)
752 int c;
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 */
767 if (v == Py_None)
768 return -1;
769 if (w == Py_None)
770 return 1;
772 /* different type: compare type names; numbers are smaller */
773 if (PyNumber_Check(v))
774 vname = "";
775 else
776 vname = v->ob_type->tp_name;
777 if (PyNumber_Check(w))
778 wname = "";
779 else
780 wname = w->ob_type->tp_name;
781 c = strcmp(vname, wname);
782 if (c < 0)
783 return -1;
784 if (c > 0)
785 return 1;
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);
793 -1 if v < w;
794 0 if v == w;
795 1 if v > w;
796 BUT: if the object implements a tp_compare function, it returns
797 whatever this function returns (whether with an exception or not).
799 static int
800 do_cmp(PyObject *v, PyObject *w)
802 int c;
803 cmpfunc f;
805 if (v->ob_type == w->ob_type
806 && (f = v->ob_type->tp_compare) != NULL) {
807 c = (*f)(v, w);
808 if (PyInstance_Check(v)) {
809 /* Instance tp_compare has a different signature.
810 But if it returns undefined we fall through. */
811 if (c != 2)
812 return c;
813 /* Else fall through to try_rich_to_3way_compare() */
815 else
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);
825 if (c < 2)
826 return c;
827 c = try_3way_compare(v, w);
828 if (c < 2)
829 return c;
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).
835 0 if v == w.
836 1 if v > w.
837 XXX The docs (C API manual) say the return value is undefined in case
838 XXX of error.
841 PyObject_Compare(PyObject *v, PyObject *w)
843 int result;
845 if (v == NULL || w == NULL) {
846 PyErr_BadInternalCall();
847 return -1;
849 if (v == w)
850 return 0;
851 if (Py_EnterRecursiveCall(" in cmp"))
852 return -1;
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. */
859 static PyObject *
860 convert_3way_to_object(int op, int c)
862 PyObject *result;
863 switch (op) {
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;
872 Py_INCREF(result);
873 return result;
876 /* We want a rich comparison but don't have one. Try a 3-way cmp instead.
877 Return
878 NULL if error
879 Py_True if v op w
880 Py_False if not (v op w)
882 static PyObject *
883 try_3way_to_rich_compare(PyObject *v, PyObject *w, int op)
885 int c;
887 c = try_3way_compare(v, w);
888 if (c >= 2) {
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 "
895 "in 3.x", 1) < 0) {
896 return NULL;
899 c = default_3way_compare(v, w);
901 if (c <= -2)
902 return NULL;
903 return convert_3way_to_object(op, c);
906 /* Do rich comparison on v and w. Return
907 NULL if error
908 Else a new reference to an object other than Py_NotImplemented, usually(?):
909 Py_True if v op w
910 Py_False if not (v op w)
912 static PyObject *
913 do_richcmp(PyObject *v, PyObject *w, int op)
915 PyObject *res;
917 res = try_rich_compare(v, w, op);
918 if (res != Py_NotImplemented)
919 return res;
920 Py_DECREF(res);
922 return try_3way_to_rich_compare(v, w, op);
925 /* Return:
926 NULL for exception;
927 some object not equal to NotImplemented if it is implemented
928 (this latter object may not be a Boolean).
930 PyObject *
931 PyObject_RichCompare(PyObject *v, PyObject *w, int op)
933 PyObject *res;
935 assert(Py_LT <= op && op <= Py_GE);
936 if (Py_EnterRecursiveCall(" in cmp"))
937 return NULL;
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)) {
942 cmpfunc fcmp;
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
946 single type only. */
947 if (frich != NULL) {
948 res = (*frich)(v, w, op);
949 if (res != Py_NotImplemented)
950 goto Done;
951 Py_DECREF(res);
953 /* No richcmp, or this particular richmp not implemented.
954 Try 3-way cmp. */
955 fcmp = v->ob_type->tp_compare;
956 if (fcmp != NULL) {
957 int c = (*fcmp)(v, w);
958 c = adjust_tp_compare(c);
959 if (c == -2) {
960 res = NULL;
961 goto Done;
963 res = convert_3way_to_object(op, c);
964 goto Done;
968 /* Fast path not taken, or couldn't deliver a useful result. */
969 res = do_richcmp(v, w, op);
970 Done:
971 Py_LeaveRecursiveCall();
972 return res;
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)
979 PyObject *res;
980 int ok;
982 /* Quick result when objects are the same.
983 Guarantees that identity implies equality. */
984 if (v == w) {
985 if (op == Py_EQ)
986 return 1;
987 else if (op == Py_NE)
988 return 0;
991 res = PyObject_RichCompare(v, w, op);
992 if (res == NULL)
993 return -1;
994 if (PyBool_Check(res))
995 ok = (res == Py_True);
996 else
997 ok = PyObject_IsTrue(res);
998 Py_DECREF(res);
999 return ok;
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.
1008 long
1009 _Py_HashDouble(double v)
1011 double intpart, fractpart;
1012 int expo;
1013 long hipart;
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);
1030 if (plong == NULL)
1031 return -1;
1032 x = PyObject_Hash(plong);
1033 Py_DECREF(plong);
1034 return x;
1036 /* Fits in a C long == a Python int, so is its own hash. */
1037 x = (long)intpart;
1038 if (x == -1)
1039 x = -2;
1040 return x;
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);
1059 if (x == -1)
1060 x = -2;
1061 return x;
1064 long
1065 _Py_HashPointer(void *p)
1067 #if SIZEOF_LONG >= SIZEOF_VOID_P
1068 return (long)p;
1069 #else
1070 /* convert to a Python long and hash that */
1071 PyObject* longobj;
1072 long x;
1074 if ((longobj = PyLong_FromVoidPtr(p)) == NULL) {
1075 x = -1;
1076 goto finally;
1078 x = PyObject_Hash(longobj);
1080 finally:
1081 Py_XDECREF(longobj);
1082 return x;
1083 #endif
1086 long
1087 PyObject_HashNotImplemented(PyObject *self)
1089 PyErr_Format(PyExc_TypeError, "unhashable type: '%.200s'",
1090 self->ob_type->tp_name);
1091 return -1;
1094 long
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);
1107 PyObject *
1108 PyObject_GetAttrString(PyObject *v, const char *name)
1110 PyObject *w, *res;
1112 if (Py_TYPE(v)->tp_getattr != NULL)
1113 return (*Py_TYPE(v)->tp_getattr)(v, (char*)name);
1114 w = PyString_InternFromString(name);
1115 if (w == NULL)
1116 return NULL;
1117 res = PyObject_GetAttr(v, w);
1118 Py_XDECREF(w);
1119 return res;
1123 PyObject_HasAttrString(PyObject *v, const char *name)
1125 PyObject *res = PyObject_GetAttrString(v, name);
1126 if (res != NULL) {
1127 Py_DECREF(res);
1128 return 1;
1130 PyErr_Clear();
1131 return 0;
1135 PyObject_SetAttrString(PyObject *v, const char *name, PyObject *w)
1137 PyObject *s;
1138 int res;
1140 if (Py_TYPE(v)->tp_setattr != NULL)
1141 return (*Py_TYPE(v)->tp_setattr)(v, (char*)name, w);
1142 s = PyString_InternFromString(name);
1143 if (s == NULL)
1144 return -1;
1145 res = PyObject_SetAttr(v, s, w);
1146 Py_XDECREF(s);
1147 return res;
1150 PyObject *
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);
1162 if (name == NULL)
1163 return NULL;
1165 else
1166 #endif
1168 PyErr_Format(PyExc_TypeError,
1169 "attribute name must be string, not '%.200s'",
1170 Py_TYPE(name)->tp_name);
1171 return NULL;
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));
1181 return NULL;
1185 PyObject_HasAttr(PyObject *v, PyObject *name)
1187 PyObject *res = PyObject_GetAttr(v, name);
1188 if (res != NULL) {
1189 Py_DECREF(res);
1190 return 1;
1192 PyErr_Clear();
1193 return 0;
1197 PyObject_SetAttr(PyObject *v, PyObject *name, PyObject *value)
1199 PyTypeObject *tp = Py_TYPE(v);
1200 int err;
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);
1209 if (name == NULL)
1210 return -1;
1212 else
1213 #endif
1215 PyErr_Format(PyExc_TypeError,
1216 "attribute name must be string, not '%.200s'",
1217 Py_TYPE(name)->tp_name);
1218 return -1;
1221 else
1222 Py_INCREF(name);
1224 PyString_InternInPlace(&name);
1225 if (tp->tp_setattro != NULL) {
1226 err = (*tp->tp_setattro)(v, name, value);
1227 Py_DECREF(name);
1228 return err;
1230 if (tp->tp_setattr != NULL) {
1231 err = (*tp->tp_setattr)(v, PyString_AS_STRING(name), value);
1232 Py_DECREF(name);
1233 return err;
1235 Py_DECREF(name);
1236 if (tp->tp_getattr == NULL && tp->tp_getattro == NULL)
1237 PyErr_Format(PyExc_TypeError,
1238 "'%.100s' object has no attributes "
1239 "(%s .%.100s)",
1240 tp->tp_name,
1241 value==NULL ? "del" : "assign to",
1242 PyString_AS_STRING(name));
1243 else
1244 PyErr_Format(PyExc_TypeError,
1245 "'%.100s' object has only read-only attributes "
1246 "(%s .%.100s)",
1247 tp->tp_name,
1248 value==NULL ? "del" : "assign to",
1249 PyString_AS_STRING(name));
1250 return -1;
1253 /* Helper to get a pointer to an object's __dict__ slot, if any */
1255 PyObject **
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))
1262 return NULL;
1263 dictoffset = tp->tp_dictoffset;
1264 if (dictoffset == 0)
1265 return NULL;
1266 if (dictoffset < 0) {
1267 Py_ssize_t tsize;
1268 size_t size;
1270 tsize = ((PyVarObject *)obj)->ob_size;
1271 if (tsize < 0)
1272 tsize = -tsize;
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);
1282 PyObject *
1283 PyObject_SelfIter(PyObject *obj)
1285 Py_INCREF(obj);
1286 return obj;
1289 /* Generic GetAttr functions - put these in your tp_[gs]etattro slot */
1291 PyObject *
1292 PyObject_GenericGetAttr(PyObject *obj, PyObject *name)
1294 PyTypeObject *tp = Py_TYPE(obj);
1295 PyObject *descr = NULL;
1296 PyObject *res = NULL;
1297 descrgetfunc f;
1298 Py_ssize_t dictoffset;
1299 PyObject **dictptr;
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);
1308 if (name == NULL)
1309 return NULL;
1311 else
1312 #endif
1314 PyErr_Format(PyExc_TypeError,
1315 "attribute name must be string, not '%.200s'",
1316 Py_TYPE(name)->tp_name);
1317 return NULL;
1320 else
1321 Py_INCREF(name);
1323 if (tp->tp_dict == NULL) {
1324 if (PyType_Ready(tp) < 0)
1325 goto done;
1328 #if 0 /* XXX this is not quite _PyType_Lookup anymore */
1329 /* Inline _PyType_Lookup */
1331 Py_ssize_t i, n;
1332 PyObject *mro, *base, *dict;
1334 /* Look in tp_dict of types in MRO */
1335 mro = tp->tp_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;
1343 else {
1344 assert(PyType_Check(base));
1345 dict = ((PyTypeObject *)base)->tp_dict;
1347 assert(dict && PyDict_Check(dict));
1348 descr = PyDict_GetItem(dict, name);
1349 if (descr != NULL)
1350 break;
1353 #else
1354 descr = _PyType_Lookup(tp, name);
1355 #endif
1357 Py_XINCREF(descr);
1359 f = NULL;
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);
1365 Py_DECREF(descr);
1366 goto done;
1370 /* Inline _PyObject_GetDictPtr */
1371 dictoffset = tp->tp_dictoffset;
1372 if (dictoffset != 0) {
1373 PyObject *dict;
1374 if (dictoffset < 0) {
1375 Py_ssize_t tsize;
1376 size_t size;
1378 tsize = ((PyVarObject *)obj)->ob_size;
1379 if (tsize < 0)
1380 tsize = -tsize;
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);
1388 dict = *dictptr;
1389 if (dict != NULL) {
1390 Py_INCREF(dict);
1391 res = PyDict_GetItem(dict, name);
1392 if (res != NULL) {
1393 Py_INCREF(res);
1394 Py_XDECREF(descr);
1395 Py_DECREF(dict);
1396 goto done;
1398 Py_DECREF(dict);
1402 if (f != NULL) {
1403 res = f(descr, obj, (PyObject *)Py_TYPE(obj));
1404 Py_DECREF(descr);
1405 goto done;
1408 if (descr != NULL) {
1409 res = descr;
1410 /* descr was already increfed above */
1411 goto done;
1414 PyErr_Format(PyExc_AttributeError,
1415 "'%.50s' object has no attribute '%.400s'",
1416 tp->tp_name, PyString_AS_STRING(name));
1417 done:
1418 Py_DECREF(name);
1419 return res;
1423 PyObject_GenericSetAttr(PyObject *obj, PyObject *name, PyObject *value)
1425 PyTypeObject *tp = Py_TYPE(obj);
1426 PyObject *descr;
1427 descrsetfunc f;
1428 PyObject **dictptr;
1429 int res = -1;
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);
1438 if (name == NULL)
1439 return -1;
1441 else
1442 #endif
1444 PyErr_Format(PyExc_TypeError,
1445 "attribute name must be string, not '%.200s'",
1446 Py_TYPE(name)->tp_name);
1447 return -1;
1450 else
1451 Py_INCREF(name);
1453 if (tp->tp_dict == NULL) {
1454 if (PyType_Ready(tp) < 0)
1455 goto done;
1458 descr = _PyType_Lookup(tp, name);
1459 f = NULL;
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);
1465 goto done;
1469 dictptr = _PyObject_GetDictPtr(obj);
1470 if (dictptr != NULL) {
1471 PyObject *dict = *dictptr;
1472 if (dict == NULL && value != NULL) {
1473 dict = PyDict_New();
1474 if (dict == NULL)
1475 goto done;
1476 *dictptr = dict;
1478 if (dict != NULL) {
1479 Py_INCREF(dict);
1480 if (value == NULL)
1481 res = PyDict_DelItem(dict, name);
1482 else
1483 res = PyDict_SetItem(dict, name, value);
1484 if (res < 0 && PyErr_ExceptionMatches(PyExc_KeyError))
1485 PyErr_SetObject(PyExc_AttributeError, name);
1486 Py_DECREF(dict);
1487 goto done;
1491 if (f != NULL) {
1492 res = f(descr, obj, value);
1493 goto done;
1496 if (descr == NULL) {
1497 PyErr_Format(PyExc_AttributeError,
1498 "'%.100s' object has no attribute '%.200s'",
1499 tp->tp_name, PyString_AS_STRING(name));
1500 goto done;
1503 PyErr_Format(PyExc_AttributeError,
1504 "'%.50s' object attribute '%.400s' is read-only",
1505 tp->tp_name, PyString_AS_STRING(name));
1506 done:
1507 Py_DECREF(name);
1508 return res;
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)
1517 Py_ssize_t res;
1518 if (v == Py_True)
1519 return 1;
1520 if (v == Py_False)
1521 return 0;
1522 if (v == Py_None)
1523 return 0;
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);
1533 else
1534 return 1;
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)
1545 int res;
1546 res = PyObject_IsTrue(v);
1547 if (res < 0)
1548 return res;
1549 return res == 0;
1552 /* Coerce two numeric types to the "larger" one.
1553 Increment the reference count on each argument.
1554 Return value:
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;
1564 int res;
1566 /* Shortcut only for old-style types */
1567 if (v->ob_type == w->ob_type &&
1568 !PyType_HasFeature(v->ob_type, Py_TPFLAGS_CHECKTYPES))
1570 Py_INCREF(v);
1571 Py_INCREF(w);
1572 return 0;
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);
1576 if (res <= 0)
1577 return res;
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);
1581 if (res <= 0)
1582 return res;
1584 return 1;
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);
1596 if (err <= 0)
1597 return err;
1598 PyErr_SetString(PyExc_TypeError, "number coercion failed");
1599 return -1;
1603 /* Test whether an object can be called */
1606 PyCallable_Check(PyObject *x)
1608 if (x == NULL)
1609 return 0;
1610 if (PyInstance_Check(x)) {
1611 PyObject *call = PyObject_GetAttrString(x, "__call__");
1612 if (call == NULL) {
1613 PyErr_Clear();
1614 return 0;
1616 /* Could test recursively but don't, for fear of endless
1617 recursion if some joker sets self.__call__ = self */
1618 Py_DECREF(call);
1619 return 1;
1621 else {
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
1632 interesting.
1633 Return 0 on success, -1 on error.
1636 static int
1637 merge_class_dict(PyObject* dict, PyObject* aclass)
1639 PyObject *classdict;
1640 PyObject *bases;
1642 assert(PyDict_Check(dict));
1643 assert(aclass);
1645 /* Merge in the type's dict (if any). */
1646 classdict = PyObject_GetAttrString(aclass, "__dict__");
1647 if (classdict == NULL)
1648 PyErr_Clear();
1649 else {
1650 int status = PyDict_Update(dict, classdict);
1651 Py_DECREF(classdict);
1652 if (status < 0)
1653 return -1;
1656 /* Recursively merge in the base types' (if any) dicts. */
1657 bases = PyObject_GetAttrString(aclass, "__bases__");
1658 if (bases == NULL)
1659 PyErr_Clear();
1660 else {
1661 /* We have no guarantee that bases is a real tuple */
1662 Py_ssize_t i, n;
1663 n = PySequence_Size(bases); /* This better be right */
1664 if (n < 0)
1665 PyErr_Clear();
1666 else {
1667 for (i = 0; i < n; i++) {
1668 int status;
1669 PyObject *base = PySequence_GetItem(bases, i);
1670 if (base == NULL) {
1671 Py_DECREF(bases);
1672 return -1;
1674 status = merge_class_dict(dict, base);
1675 Py_DECREF(base);
1676 if (status < 0) {
1677 Py_DECREF(bases);
1678 return -1;
1682 Py_DECREF(bases);
1684 return 0;
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.
1694 static int
1695 merge_list_attr(PyObject* dict, PyObject* obj, const char *attrname)
1697 PyObject *list;
1698 int result = 0;
1700 assert(PyDict_Check(dict));
1701 assert(obj);
1702 assert(attrname);
1704 list = PyObject_GetAttrString(obj, attrname);
1705 if (list == NULL)
1706 PyErr_Clear();
1708 else if (PyList_Check(list)) {
1709 int i;
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);
1714 if (result < 0)
1715 break;
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) {
1724 Py_XDECREF(list);
1725 return -1;
1730 Py_XDECREF(list);
1731 return result;
1734 /* Helper for PyObject_Dir without arguments: returns the local scope. */
1735 static PyObject *
1736 _dir_locals(void)
1738 PyObject *names;
1739 PyObject *locals = PyEval_GetLocals();
1741 if (locals == NULL) {
1742 PyErr_SetString(PyExc_SystemError, "frame does not exist");
1743 return NULL;
1746 names = PyMapping_Keys(locals);
1747 if (!names)
1748 return NULL;
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);
1753 Py_DECREF(names);
1754 return NULL;
1756 /* the locals don't need to be DECREF'd */
1757 return names;
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.
1764 static PyObject *
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);
1773 Py_XDECREF(dict);
1774 return result;
1777 /* Helper for PyObject_Dir of module objects: returns the module's __dict__. */
1778 static PyObject *
1779 _specialized_dir_module(PyObject *obj)
1781 PyObject *result = NULL;
1782 PyObject *dict = PyObject_GetAttrString(obj, "__dict__");
1784 if (dict != NULL) {
1785 if (PyDict_Check(dict))
1786 result = PyDict_Keys(dict);
1787 else {
1788 PyErr_Format(PyExc_TypeError,
1789 "%.200s.__dict__ is not a dictionary",
1790 PyModule_GetName(obj));
1794 Py_XDECREF(dict);
1795 return result;
1798 /* Helper for PyObject_Dir of generic objects: returns __dict__, __class__,
1799 and recursively up the __class__.__bases__ chain.
1801 static PyObject *
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__");
1810 if (dict == NULL) {
1811 PyErr_Clear();
1812 dict = PyDict_New();
1814 else if (!PyDict_Check(dict)) {
1815 Py_DECREF(dict);
1816 dict = PyDict_New();
1818 else {
1819 /* Copy __dict__ to avoid mutating it. */
1820 PyObject *temp = PyDict_Copy(dict);
1821 Py_DECREF(dict);
1822 dict = temp;
1825 if (dict == NULL)
1826 goto error;
1828 /* Merge in __members__ and __methods__ (if any).
1829 * This is removed in Python 3000. */
1830 if (merge_list_attr(dict, obj, "__members__") < 0)
1831 goto error;
1832 if (merge_list_attr(dict, obj, "__methods__") < 0)
1833 goto error;
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? */
1840 PyErr_Clear();
1841 else {
1842 if (merge_class_dict(dict, itsclass) != 0)
1843 goto error;
1846 result = PyDict_Keys(dict);
1847 /* fall through */
1848 error:
1849 Py_XDECREF(itsclass);
1850 Py_XDECREF(dict);
1851 return result;
1854 /* Helper for PyObject_Dir: object introspection.
1855 This calls one of the above specialized versions if no __dir__ method
1856 exists. */
1857 static PyObject *
1858 _dir_object(PyObject *obj)
1860 PyObject *result = NULL;
1861 PyObject *dirfunc = PyObject_GetAttrString((PyObject *)obj->ob_type,
1862 "__dir__");
1864 assert(obj);
1865 if (dirfunc == NULL) {
1866 /* use default implementation */
1867 PyErr_Clear();
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);
1872 else
1873 result = _generic_dir(obj);
1875 else {
1876 /* use __dir__ */
1877 result = PyObject_CallFunctionObjArgs(dirfunc, obj, NULL);
1878 Py_DECREF(dirfunc);
1879 if (result == NULL)
1880 return 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);
1888 Py_DECREF(result);
1889 result = NULL;
1893 return result;
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
1900 PyObject *
1901 PyObject_Dir(PyObject *obj)
1903 PyObject * result;
1905 if (obj == NULL)
1906 /* no object -- introspect the locals */
1907 result = _dir_locals();
1908 else
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 */
1916 Py_DECREF(result);
1917 result = NULL;
1920 return result;
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.)
1930 /* ARGSUSED */
1931 static PyObject *
1932 none_repr(PyObject *op)
1934 return PyString_FromString("None");
1937 /* ARGUSED */
1938 static void
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)
1950 "NoneType",
1953 none_dealloc, /*tp_dealloc*/ /*never called*/
1954 0, /*tp_print*/
1955 0, /*tp_getattr*/
1956 0, /*tp_setattr*/
1957 0, /*tp_compare*/
1958 none_repr, /*tp_repr*/
1959 0, /*tp_as_number*/
1960 0, /*tp_as_sequence*/
1961 0, /*tp_as_mapping*/
1962 (hashfunc)_Py_HashPointer, /*tp_hash */
1965 PyObject _Py_NoneStruct = {
1966 _PyObject_EXTRA_INIT
1967 1, &PyNone_Type
1970 /* NotImplemented is an object that can be used to signal that an
1971 operation is not implemented for the given type combination. */
1973 static PyObject *
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*/
1985 0, /*tp_print*/
1986 0, /*tp_getattr*/
1987 0, /*tp_setattr*/
1988 0, /*tp_compare*/
1989 NotImplemented_repr, /*tp_repr*/
1990 0, /*tp_as_number*/
1991 0, /*tp_as_sequence*/
1992 0, /*tp_as_mapping*/
1993 0, /*tp_hash */
1996 PyObject _Py_NotImplementedStruct = {
1997 _PyObject_EXTRA_INIT
1998 1, &PyNotImplemented_Type
2001 void
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
2032 void
2033 _Py_NewReference(PyObject *op)
2035 _Py_INC_REFTOTAL;
2036 op->ob_refcnt = 1;
2037 _Py_AddToAllObjects(op, 1);
2038 _Py_INC_TPALLOCS(op);
2041 void
2042 _Py_ForgetReference(register PyObject *op)
2044 #ifdef SLOW_UNREF_CHECK
2045 register PyObject *p;
2046 #endif
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) {
2054 if (p == op)
2055 break;
2057 if (p == &refchain) /* Not found */
2058 Py_FatalError("UNREF unknown object");
2059 #endif
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);
2066 void
2067 _Py_Dealloc(PyObject *op)
2069 destructor dealloc = Py_TYPE(op)->tp_dealloc;
2070 _Py_ForgetReference(op);
2071 (*dealloc)(op);
2074 /* Print all live objects. Because PyObject_Print is called, the
2075 * interpreter must be in a healthy state.
2077 void
2078 _Py_PrintReferences(FILE *fp)
2080 PyObject *op;
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)
2085 PyErr_Clear();
2086 putc('\n', fp);
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.
2093 void
2094 _Py_PrintReferenceAddresses(FILE *fp)
2096 PyObject *op;
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);
2103 PyObject *
2104 _Py_GetObjects(PyObject *self, PyObject *args)
2106 int i, n;
2107 PyObject *t = NULL;
2108 PyObject *res, *op;
2110 if (!PyArg_ParseTuple(args, "i|O", &n, &t))
2111 return NULL;
2112 op = refchain._ob_next;
2113 res = PyList_New(0);
2114 if (res == NULL)
2115 return NULL;
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)) {
2119 op = op->_ob_next;
2120 if (op == &refchain)
2121 return res;
2123 if (PyList_Append(res, op) < 0) {
2124 Py_DECREF(res);
2125 return NULL;
2127 op = op->_ob_next;
2129 return res;
2132 #endif
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) */
2145 void *
2146 PyMem_Malloc(size_t nbytes)
2148 return PyMem_MALLOC(nbytes);
2151 void *
2152 PyMem_Realloc(void *p, size_t nbytes)
2154 return PyMem_REALLOC(p, nbytes);
2157 void
2158 PyMem_Free(void *p)
2160 PyMem_FREE(p);
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)
2181 PyObject *dict;
2182 PyObject *list;
2183 Py_ssize_t i;
2185 dict = PyThreadState_GetDict();
2186 if (dict == NULL)
2187 return 0;
2188 list = PyDict_GetItemString(dict, KEY);
2189 if (list == NULL) {
2190 list = PyList_New(0);
2191 if (list == NULL)
2192 return -1;
2193 if (PyDict_SetItemString(dict, KEY, list) < 0)
2194 return -1;
2195 Py_DECREF(list);
2197 i = PyList_GET_SIZE(list);
2198 while (--i >= 0) {
2199 if (PyList_GET_ITEM(list, i) == obj)
2200 return 1;
2202 PyList_Append(list, obj);
2203 return 0;
2206 void
2207 Py_ReprLeave(PyObject *obj)
2209 PyObject *dict;
2210 PyObject *list;
2211 Py_ssize_t i;
2213 dict = PyThreadState_GetDict();
2214 if (dict == NULL)
2215 return;
2216 list = PyDict_GetItemString(dict, KEY);
2217 if (list == NULL || !PyList_Check(list))
2218 return;
2219 i = PyList_GET_SIZE(list);
2220 /* Count backwards because we always expect obj to be list[-1] */
2221 while (--i >= 0) {
2222 if (PyList_GET_ITEM(list, i) == obj) {
2223 PyList_SetSlice(list, i, i + 1, NULL);
2224 break;
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.
2243 void
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.
2256 void
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;
2274 (*dealloc)(op);
2275 --_PyTrash_delete_nesting;
2279 #ifdef __cplusplus
2281 #endif