Added new optional credentials argument to SMTPHandler.__init__, and smtp.login(...
[python.git] / Objects / object.c
blob9e254676b4f2bee7bcadc11938d6672f35514991
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;
33 /* Object allocation routines used by NEWOBJ and NEWVAROBJ macros.
34 These are used by the individual routines for object creation.
35 Do not call them otherwise, they do not initialize the object! */
37 #ifdef Py_TRACE_REFS
38 /* Head of circular doubly-linked list of all objects. These are linked
39 * together via the _ob_prev and _ob_next members of a PyObject, which
40 * exist only in a Py_TRACE_REFS build.
42 static PyObject refchain = {&refchain, &refchain};
44 /* Insert op at the front of the list of all objects. If force is true,
45 * op is added even if _ob_prev and _ob_next are non-NULL already. If
46 * force is false amd _ob_prev or _ob_next are non-NULL, do nothing.
47 * force should be true if and only if op points to freshly allocated,
48 * uninitialized memory, or you've unlinked op from the list and are
49 * relinking it into the front.
50 * Note that objects are normally added to the list via _Py_NewReference,
51 * which is called by PyObject_Init. Not all objects are initialized that
52 * way, though; exceptions include statically allocated type objects, and
53 * statically allocated singletons (like Py_True and Py_None).
55 void
56 _Py_AddToAllObjects(PyObject *op, int force)
58 #ifdef Py_DEBUG
59 if (!force) {
60 /* If it's initialized memory, op must be in or out of
61 * the list unambiguously.
63 assert((op->_ob_prev == NULL) == (op->_ob_next == NULL));
65 #endif
66 if (force || op->_ob_prev == NULL) {
67 op->_ob_next = refchain._ob_next;
68 op->_ob_prev = &refchain;
69 refchain._ob_next->_ob_prev = op;
70 refchain._ob_next = op;
73 #endif /* Py_TRACE_REFS */
75 #ifdef COUNT_ALLOCS
76 static PyTypeObject *type_list;
77 /* All types are added to type_list, at least when
78 they get one object created. That makes them
79 immortal, which unfortunately contributes to
80 garbage itself. If unlist_types_without_objects
81 is set, they will be removed from the type_list
82 once the last object is deallocated. */
83 int unlist_types_without_objects;
84 extern int tuple_zero_allocs, fast_tuple_allocs;
85 extern int quick_int_allocs, quick_neg_int_allocs;
86 extern int null_strings, one_strings;
87 void
88 dump_counts(FILE* f)
90 PyTypeObject *tp;
92 for (tp = type_list; tp; tp = tp->tp_next)
93 fprintf(f, "%s alloc'd: %d, freed: %d, max in use: %d\n",
94 tp->tp_name, tp->tp_allocs, tp->tp_frees,
95 tp->tp_maxalloc);
96 fprintf(f, "fast tuple allocs: %d, empty: %d\n",
97 fast_tuple_allocs, tuple_zero_allocs);
98 fprintf(f, "fast int allocs: pos: %d, neg: %d\n",
99 quick_int_allocs, quick_neg_int_allocs);
100 fprintf(f, "null strings: %d, 1-strings: %d\n",
101 null_strings, one_strings);
104 PyObject *
105 get_counts(void)
107 PyTypeObject *tp;
108 PyObject *result;
109 PyObject *v;
111 result = PyList_New(0);
112 if (result == NULL)
113 return NULL;
114 for (tp = type_list; tp; tp = tp->tp_next) {
115 v = Py_BuildValue("(snnn)", tp->tp_name, tp->tp_allocs,
116 tp->tp_frees, tp->tp_maxalloc);
117 if (v == NULL) {
118 Py_DECREF(result);
119 return NULL;
121 if (PyList_Append(result, v) < 0) {
122 Py_DECREF(v);
123 Py_DECREF(result);
124 return NULL;
126 Py_DECREF(v);
128 return result;
131 void
132 inc_count(PyTypeObject *tp)
134 if (tp->tp_next == NULL && tp->tp_prev == NULL) {
135 /* first time; insert in linked list */
136 if (tp->tp_next != NULL) /* sanity check */
137 Py_FatalError("XXX inc_count sanity check");
138 if (type_list)
139 type_list->tp_prev = tp;
140 tp->tp_next = type_list;
141 /* Note that as of Python 2.2, heap-allocated type objects
142 * can go away, but this code requires that they stay alive
143 * until program exit. That's why we're careful with
144 * refcounts here. type_list gets a new reference to tp,
145 * while ownership of the reference type_list used to hold
146 * (if any) was transferred to tp->tp_next in the line above.
147 * tp is thus effectively immortal after this.
149 Py_INCREF(tp);
150 type_list = tp;
151 #ifdef Py_TRACE_REFS
152 /* Also insert in the doubly-linked list of all objects,
153 * if not already there.
155 _Py_AddToAllObjects((PyObject *)tp, 0);
156 #endif
158 tp->tp_allocs++;
159 if (tp->tp_allocs - tp->tp_frees > tp->tp_maxalloc)
160 tp->tp_maxalloc = tp->tp_allocs - tp->tp_frees;
163 void dec_count(PyTypeObject *tp)
165 tp->tp_frees++;
166 if (unlist_types_without_objects &&
167 tp->tp_allocs == tp->tp_frees) {
168 /* unlink the type from type_list */
169 if (tp->tp_prev)
170 tp->tp_prev->tp_next = tp->tp_next;
171 else
172 type_list = tp->tp_next;
173 if (tp->tp_next)
174 tp->tp_next->tp_prev = tp->tp_prev;
175 tp->tp_next = tp->tp_prev = NULL;
176 Py_DECREF(tp);
180 #endif
182 #ifdef Py_REF_DEBUG
183 /* Log a fatal error; doesn't return. */
184 void
185 _Py_NegativeRefcount(const char *fname, int lineno, PyObject *op)
187 char buf[300];
189 PyOS_snprintf(buf, sizeof(buf),
190 "%s:%i object at %p has negative ref count "
191 "%" PY_FORMAT_SIZE_T "d",
192 fname, lineno, op, op->ob_refcnt);
193 Py_FatalError(buf);
196 #endif /* Py_REF_DEBUG */
198 void
199 Py_IncRef(PyObject *o)
201 Py_XINCREF(o);
204 void
205 Py_DecRef(PyObject *o)
207 Py_XDECREF(o);
210 PyObject *
211 PyObject_Init(PyObject *op, PyTypeObject *tp)
213 if (op == NULL)
214 return PyErr_NoMemory();
215 /* Any changes should be reflected in PyObject_INIT (objimpl.h) */
216 op->ob_type = tp;
217 _Py_NewReference(op);
218 return op;
221 PyVarObject *
222 PyObject_InitVar(PyVarObject *op, PyTypeObject *tp, Py_ssize_t size)
224 if (op == NULL)
225 return (PyVarObject *) PyErr_NoMemory();
226 /* Any changes should be reflected in PyObject_INIT_VAR */
227 op->ob_size = size;
228 op->ob_type = tp;
229 _Py_NewReference((PyObject *)op);
230 return op;
233 PyObject *
234 _PyObject_New(PyTypeObject *tp)
236 PyObject *op;
237 op = (PyObject *) PyObject_MALLOC(_PyObject_SIZE(tp));
238 if (op == NULL)
239 return PyErr_NoMemory();
240 return PyObject_INIT(op, tp);
243 PyVarObject *
244 _PyObject_NewVar(PyTypeObject *tp, Py_ssize_t nitems)
246 PyVarObject *op;
247 const size_t size = _PyObject_VAR_SIZE(tp, nitems);
248 op = (PyVarObject *) PyObject_MALLOC(size);
249 if (op == NULL)
250 return (PyVarObject *)PyErr_NoMemory();
251 return PyObject_INIT_VAR(op, tp, nitems);
254 /* for binary compatibility with 2.2 */
255 #undef _PyObject_Del
256 void
257 _PyObject_Del(PyObject *op)
259 PyObject_FREE(op);
262 /* Implementation of PyObject_Print with recursion checking */
263 static int
264 internal_print(PyObject *op, FILE *fp, int flags, int nesting)
266 int ret = 0;
267 if (nesting > 10) {
268 PyErr_SetString(PyExc_RuntimeError, "print recursion");
269 return -1;
271 if (PyErr_CheckSignals())
272 return -1;
273 #ifdef USE_STACKCHECK
274 if (PyOS_CheckStack()) {
275 PyErr_SetString(PyExc_MemoryError, "stack overflow");
276 return -1;
278 #endif
279 clearerr(fp); /* Clear any previous error condition */
280 if (op == NULL) {
281 fprintf(fp, "<nil>");
283 else {
284 if (op->ob_refcnt <= 0)
285 /* XXX(twouters) cast refcount to long until %zd is
286 universally available */
287 fprintf(fp, "<refcnt %ld at %p>",
288 (long)op->ob_refcnt, op);
289 else if (op->ob_type->tp_print == NULL) {
290 PyObject *s;
291 if (flags & Py_PRINT_RAW)
292 s = PyObject_Str(op);
293 else
294 s = PyObject_Repr(op);
295 if (s == NULL)
296 ret = -1;
297 else {
298 ret = internal_print(s, fp, Py_PRINT_RAW,
299 nesting+1);
301 Py_XDECREF(s);
303 else
304 ret = (*op->ob_type->tp_print)(op, fp, flags);
306 if (ret == 0) {
307 if (ferror(fp)) {
308 PyErr_SetFromErrno(PyExc_IOError);
309 clearerr(fp);
310 ret = -1;
313 return ret;
317 PyObject_Print(PyObject *op, FILE *fp, int flags)
319 return internal_print(op, fp, flags, 0);
323 /* For debugging convenience. See Misc/gdbinit for some useful gdb hooks */
324 void _PyObject_Dump(PyObject* op)
326 if (op == NULL)
327 fprintf(stderr, "NULL\n");
328 else {
329 fprintf(stderr, "object : ");
330 (void)PyObject_Print(op, stderr, 0);
331 /* XXX(twouters) cast refcount to long until %zd is
332 universally available */
333 fprintf(stderr, "\n"
334 "type : %s\n"
335 "refcount: %ld\n"
336 "address : %p\n",
337 op->ob_type==NULL ? "NULL" : op->ob_type->tp_name,
338 (long)op->ob_refcnt,
339 op);
343 PyObject *
344 PyObject_Repr(PyObject *v)
346 if (PyErr_CheckSignals())
347 return NULL;
348 #ifdef USE_STACKCHECK
349 if (PyOS_CheckStack()) {
350 PyErr_SetString(PyExc_MemoryError, "stack overflow");
351 return NULL;
353 #endif
354 if (v == NULL)
355 return PyString_FromString("<NULL>");
356 else if (v->ob_type->tp_repr == NULL)
357 return PyString_FromFormat("<%s object at %p>",
358 v->ob_type->tp_name, v);
359 else {
360 PyObject *res;
361 res = (*v->ob_type->tp_repr)(v);
362 if (res == NULL)
363 return NULL;
364 #ifdef Py_USING_UNICODE
365 if (PyUnicode_Check(res)) {
366 PyObject* str;
367 str = PyUnicode_AsEncodedString(res, NULL, NULL);
368 Py_DECREF(res);
369 if (str)
370 res = str;
371 else
372 return NULL;
374 #endif
375 if (!PyString_Check(res)) {
376 PyErr_Format(PyExc_TypeError,
377 "__repr__ returned non-string (type %.200s)",
378 res->ob_type->tp_name);
379 Py_DECREF(res);
380 return NULL;
382 return res;
386 PyObject *
387 _PyObject_Str(PyObject *v)
389 PyObject *res;
390 int type_ok;
391 if (v == NULL)
392 return PyString_FromString("<NULL>");
393 if (PyString_CheckExact(v)) {
394 Py_INCREF(v);
395 return v;
397 #ifdef Py_USING_UNICODE
398 if (PyUnicode_CheckExact(v)) {
399 Py_INCREF(v);
400 return v;
402 #endif
403 if (v->ob_type->tp_str == NULL)
404 return PyObject_Repr(v);
406 res = (*v->ob_type->tp_str)(v);
407 if (res == NULL)
408 return NULL;
409 type_ok = PyString_Check(res);
410 #ifdef Py_USING_UNICODE
411 type_ok = type_ok || PyUnicode_Check(res);
412 #endif
413 if (!type_ok) {
414 PyErr_Format(PyExc_TypeError,
415 "__str__ returned non-string (type %.200s)",
416 res->ob_type->tp_name);
417 Py_DECREF(res);
418 return NULL;
420 return res;
423 PyObject *
424 PyObject_Str(PyObject *v)
426 PyObject *res = _PyObject_Str(v);
427 if (res == NULL)
428 return NULL;
429 #ifdef Py_USING_UNICODE
430 if (PyUnicode_Check(res)) {
431 PyObject* str;
432 str = PyUnicode_AsEncodedString(res, NULL, NULL);
433 Py_DECREF(res);
434 if (str)
435 res = str;
436 else
437 return NULL;
439 #endif
440 assert(PyString_Check(res));
441 return res;
444 #ifdef Py_USING_UNICODE
445 PyObject *
446 PyObject_Unicode(PyObject *v)
448 PyObject *res;
449 PyObject *func;
450 PyObject *str;
451 static PyObject *unicodestr;
453 if (v == NULL) {
454 res = PyString_FromString("<NULL>");
455 if (res == NULL)
456 return NULL;
457 str = PyUnicode_FromEncodedObject(res, NULL, "strict");
458 Py_DECREF(res);
459 return str;
460 } else if (PyUnicode_CheckExact(v)) {
461 Py_INCREF(v);
462 return v;
464 /* XXX As soon as we have a tp_unicode slot, we should
465 check this before trying the __unicode__
466 method. */
467 if (unicodestr == NULL) {
468 unicodestr= PyString_InternFromString("__unicode__");
469 if (unicodestr == NULL)
470 return NULL;
472 func = PyObject_GetAttr(v, unicodestr);
473 if (func != NULL) {
474 res = PyEval_CallObject(func, (PyObject *)NULL);
475 Py_DECREF(func);
477 else {
478 PyErr_Clear();
479 if (PyUnicode_Check(v)) {
480 /* For a Unicode subtype that's didn't overwrite __unicode__,
481 return a true Unicode object with the same data. */
482 return PyUnicode_FromUnicode(PyUnicode_AS_UNICODE(v),
483 PyUnicode_GET_SIZE(v));
485 if (PyString_CheckExact(v)) {
486 Py_INCREF(v);
487 res = v;
489 else {
490 if (v->ob_type->tp_str != NULL)
491 res = (*v->ob_type->tp_str)(v);
492 else
493 res = PyObject_Repr(v);
496 if (res == NULL)
497 return NULL;
498 if (!PyUnicode_Check(res)) {
499 str = PyUnicode_FromEncodedObject(res, NULL, "strict");
500 Py_DECREF(res);
501 res = str;
503 return res;
505 #endif
508 /* Helper to warn about deprecated tp_compare return values. Return:
509 -2 for an exception;
510 -1 if v < w;
511 0 if v == w;
512 1 if v > w.
513 (This function cannot return 2.)
515 static int
516 adjust_tp_compare(int c)
518 if (PyErr_Occurred()) {
519 if (c != -1 && c != -2) {
520 PyObject *t, *v, *tb;
521 PyErr_Fetch(&t, &v, &tb);
522 if (PyErr_Warn(PyExc_RuntimeWarning,
523 "tp_compare didn't return -1 or -2 "
524 "for exception") < 0) {
525 Py_XDECREF(t);
526 Py_XDECREF(v);
527 Py_XDECREF(tb);
529 else
530 PyErr_Restore(t, v, tb);
532 return -2;
534 else if (c < -1 || c > 1) {
535 if (PyErr_Warn(PyExc_RuntimeWarning,
536 "tp_compare didn't return -1, 0 or 1") < 0)
537 return -2;
538 else
539 return c < -1 ? -1 : 1;
541 else {
542 assert(c >= -1 && c <= 1);
543 return c;
548 /* Macro to get the tp_richcompare field of a type if defined */
549 #define RICHCOMPARE(t) (PyType_HasFeature((t), Py_TPFLAGS_HAVE_RICHCOMPARE) \
550 ? (t)->tp_richcompare : NULL)
552 /* Map rich comparison operators to their swapped version, e.g. LT --> GT */
553 int _Py_SwappedOp[] = {Py_GT, Py_GE, Py_EQ, Py_NE, Py_LT, Py_LE};
555 /* Try a genuine rich comparison, returning an object. Return:
556 NULL for exception;
557 NotImplemented if this particular rich comparison is not implemented or
558 undefined;
559 some object not equal to NotImplemented if it is implemented
560 (this latter object may not be a Boolean).
562 static PyObject *
563 try_rich_compare(PyObject *v, PyObject *w, int op)
565 richcmpfunc f;
566 PyObject *res;
568 if (v->ob_type != w->ob_type &&
569 PyType_IsSubtype(w->ob_type, v->ob_type) &&
570 (f = RICHCOMPARE(w->ob_type)) != NULL) {
571 res = (*f)(w, v, _Py_SwappedOp[op]);
572 if (res != Py_NotImplemented)
573 return res;
574 Py_DECREF(res);
576 if ((f = RICHCOMPARE(v->ob_type)) != NULL) {
577 res = (*f)(v, w, op);
578 if (res != Py_NotImplemented)
579 return res;
580 Py_DECREF(res);
582 if ((f = RICHCOMPARE(w->ob_type)) != NULL) {
583 return (*f)(w, v, _Py_SwappedOp[op]);
585 res = Py_NotImplemented;
586 Py_INCREF(res);
587 return res;
590 /* Try a genuine rich comparison, returning an int. Return:
591 -1 for exception (including the case where try_rich_compare() returns an
592 object that's not a Boolean);
593 0 if the outcome is false;
594 1 if the outcome is true;
595 2 if this particular rich comparison is not implemented or undefined.
597 static int
598 try_rich_compare_bool(PyObject *v, PyObject *w, int op)
600 PyObject *res;
601 int ok;
603 if (RICHCOMPARE(v->ob_type) == NULL && RICHCOMPARE(w->ob_type) == NULL)
604 return 2; /* Shortcut, avoid INCREF+DECREF */
605 res = try_rich_compare(v, w, op);
606 if (res == NULL)
607 return -1;
608 if (res == Py_NotImplemented) {
609 Py_DECREF(res);
610 return 2;
612 ok = PyObject_IsTrue(res);
613 Py_DECREF(res);
614 return ok;
617 /* Try rich comparisons to determine a 3-way comparison. Return:
618 -2 for an exception;
619 -1 if v < w;
620 0 if v == w;
621 1 if v > w;
622 2 if this particular rich comparison is not implemented or undefined.
624 static int
625 try_rich_to_3way_compare(PyObject *v, PyObject *w)
627 static struct { int op; int outcome; } tries[3] = {
628 /* Try this operator, and if it is true, use this outcome: */
629 {Py_EQ, 0},
630 {Py_LT, -1},
631 {Py_GT, 1},
633 int i;
635 if (RICHCOMPARE(v->ob_type) == NULL && RICHCOMPARE(w->ob_type) == NULL)
636 return 2; /* Shortcut */
638 for (i = 0; i < 3; i++) {
639 switch (try_rich_compare_bool(v, w, tries[i].op)) {
640 case -1:
641 return -2;
642 case 1:
643 return tries[i].outcome;
647 return 2;
650 /* Try a 3-way comparison, returning an int. Return:
651 -2 for an exception;
652 -1 if v < w;
653 0 if v == w;
654 1 if v > w;
655 2 if this particular 3-way comparison is not implemented or undefined.
657 static int
658 try_3way_compare(PyObject *v, PyObject *w)
660 int c;
661 cmpfunc f;
663 /* Comparisons involving instances are given to instance_compare,
664 which has the same return conventions as this function. */
666 f = v->ob_type->tp_compare;
667 if (PyInstance_Check(v))
668 return (*f)(v, w);
669 if (PyInstance_Check(w))
670 return (*w->ob_type->tp_compare)(v, w);
672 /* If both have the same (non-NULL) tp_compare, use it. */
673 if (f != NULL && f == w->ob_type->tp_compare) {
674 c = (*f)(v, w);
675 return adjust_tp_compare(c);
678 /* If either tp_compare is _PyObject_SlotCompare, that's safe. */
679 if (f == _PyObject_SlotCompare ||
680 w->ob_type->tp_compare == _PyObject_SlotCompare)
681 return _PyObject_SlotCompare(v, w);
683 /* If we're here, v and w,
684 a) are not instances;
685 b) have different types or a type without tp_compare; and
686 c) don't have a user-defined tp_compare.
687 tp_compare implementations in C assume that both arguments
688 have their type, so we give up if the coercion fails or if
689 it yields types which are still incompatible (which can
690 happen with a user-defined nb_coerce).
692 c = PyNumber_CoerceEx(&v, &w);
693 if (c < 0)
694 return -2;
695 if (c > 0)
696 return 2;
697 f = v->ob_type->tp_compare;
698 if (f != NULL && f == w->ob_type->tp_compare) {
699 c = (*f)(v, w);
700 Py_DECREF(v);
701 Py_DECREF(w);
702 return adjust_tp_compare(c);
705 /* No comparison defined */
706 Py_DECREF(v);
707 Py_DECREF(w);
708 return 2;
711 /* Final fallback 3-way comparison, returning an int. Return:
712 -2 if an error occurred;
713 -1 if v < w;
714 0 if v == w;
715 1 if v > w.
717 static int
718 default_3way_compare(PyObject *v, PyObject *w)
720 int c;
721 const char *vname, *wname;
723 if (v->ob_type == w->ob_type) {
724 /* When comparing these pointers, they must be cast to
725 * integer types (i.e. Py_uintptr_t, our spelling of C9X's
726 * uintptr_t). ANSI specifies that pointer compares other
727 * than == and != to non-related structures are undefined.
729 Py_uintptr_t vv = (Py_uintptr_t)v;
730 Py_uintptr_t ww = (Py_uintptr_t)w;
731 return (vv < ww) ? -1 : (vv > ww) ? 1 : 0;
734 /* None is smaller than anything */
735 if (v == Py_None)
736 return -1;
737 if (w == Py_None)
738 return 1;
740 /* different type: compare type names; numbers are smaller */
741 if (PyNumber_Check(v))
742 vname = "";
743 else
744 vname = v->ob_type->tp_name;
745 if (PyNumber_Check(w))
746 wname = "";
747 else
748 wname = w->ob_type->tp_name;
749 c = strcmp(vname, wname);
750 if (c < 0)
751 return -1;
752 if (c > 0)
753 return 1;
754 /* Same type name, or (more likely) incomparable numeric types */
755 return ((Py_uintptr_t)(v->ob_type) < (
756 Py_uintptr_t)(w->ob_type)) ? -1 : 1;
759 /* Do a 3-way comparison, by hook or by crook. Return:
760 -2 for an exception (but see below);
761 -1 if v < w;
762 0 if v == w;
763 1 if v > w;
764 BUT: if the object implements a tp_compare function, it returns
765 whatever this function returns (whether with an exception or not).
767 static int
768 do_cmp(PyObject *v, PyObject *w)
770 int c;
771 cmpfunc f;
773 if (v->ob_type == w->ob_type
774 && (f = v->ob_type->tp_compare) != NULL) {
775 c = (*f)(v, w);
776 if (PyInstance_Check(v)) {
777 /* Instance tp_compare has a different signature.
778 But if it returns undefined we fall through. */
779 if (c != 2)
780 return c;
781 /* Else fall through to try_rich_to_3way_compare() */
783 else
784 return adjust_tp_compare(c);
786 /* We only get here if one of the following is true:
787 a) v and w have different types
788 b) v and w have the same type, which doesn't have tp_compare
789 c) v and w are instances, and either __cmp__ is not defined or
790 __cmp__ returns NotImplemented
792 c = try_rich_to_3way_compare(v, w);
793 if (c < 2)
794 return c;
795 c = try_3way_compare(v, w);
796 if (c < 2)
797 return c;
798 return default_3way_compare(v, w);
801 /* Compare v to w. Return
802 -1 if v < w or exception (PyErr_Occurred() true in latter case).
803 0 if v == w.
804 1 if v > w.
805 XXX The docs (C API manual) say the return value is undefined in case
806 XXX of error.
809 PyObject_Compare(PyObject *v, PyObject *w)
811 int result;
813 if (v == NULL || w == NULL) {
814 PyErr_BadInternalCall();
815 return -1;
817 if (v == w)
818 return 0;
819 if (Py_EnterRecursiveCall(" in cmp"))
820 return -1;
821 result = do_cmp(v, w);
822 Py_LeaveRecursiveCall();
823 return result < 0 ? -1 : result;
826 /* Return (new reference to) Py_True or Py_False. */
827 static PyObject *
828 convert_3way_to_object(int op, int c)
830 PyObject *result;
831 switch (op) {
832 case Py_LT: c = c < 0; break;
833 case Py_LE: c = c <= 0; break;
834 case Py_EQ: c = c == 0; break;
835 case Py_NE: c = c != 0; break;
836 case Py_GT: c = c > 0; break;
837 case Py_GE: c = c >= 0; break;
839 result = c ? Py_True : Py_False;
840 Py_INCREF(result);
841 return result;
844 /* We want a rich comparison but don't have one. Try a 3-way cmp instead.
845 Return
846 NULL if error
847 Py_True if v op w
848 Py_False if not (v op w)
850 static PyObject *
851 try_3way_to_rich_compare(PyObject *v, PyObject *w, int op)
853 int c;
855 c = try_3way_compare(v, w);
856 if (c >= 2)
857 c = default_3way_compare(v, w);
858 if (c <= -2)
859 return NULL;
860 return convert_3way_to_object(op, c);
863 /* Do rich comparison on v and w. Return
864 NULL if error
865 Else a new reference to an object other than Py_NotImplemented, usually(?):
866 Py_True if v op w
867 Py_False if not (v op w)
869 static PyObject *
870 do_richcmp(PyObject *v, PyObject *w, int op)
872 PyObject *res;
874 res = try_rich_compare(v, w, op);
875 if (res != Py_NotImplemented)
876 return res;
877 Py_DECREF(res);
879 return try_3way_to_rich_compare(v, w, op);
882 /* Return:
883 NULL for exception;
884 some object not equal to NotImplemented if it is implemented
885 (this latter object may not be a Boolean).
887 PyObject *
888 PyObject_RichCompare(PyObject *v, PyObject *w, int op)
890 PyObject *res;
892 assert(Py_LT <= op && op <= Py_GE);
893 if (Py_EnterRecursiveCall(" in cmp"))
894 return NULL;
896 /* If the types are equal, and not old-style instances, try to
897 get out cheap (don't bother with coercions etc.). */
898 if (v->ob_type == w->ob_type && !PyInstance_Check(v)) {
899 cmpfunc fcmp;
900 richcmpfunc frich = RICHCOMPARE(v->ob_type);
901 /* If the type has richcmp, try it first. try_rich_compare
902 tries it two-sided, which is not needed since we've a
903 single type only. */
904 if (frich != NULL) {
905 res = (*frich)(v, w, op);
906 if (res != Py_NotImplemented)
907 goto Done;
908 Py_DECREF(res);
910 /* No richcmp, or this particular richmp not implemented.
911 Try 3-way cmp. */
912 fcmp = v->ob_type->tp_compare;
913 if (fcmp != NULL) {
914 int c = (*fcmp)(v, w);
915 c = adjust_tp_compare(c);
916 if (c == -2) {
917 res = NULL;
918 goto Done;
920 res = convert_3way_to_object(op, c);
921 goto Done;
925 /* Fast path not taken, or couldn't deliver a useful result. */
926 res = do_richcmp(v, w, op);
927 Done:
928 Py_LeaveRecursiveCall();
929 return res;
932 /* Return -1 if error; 1 if v op w; 0 if not (v op w). */
934 PyObject_RichCompareBool(PyObject *v, PyObject *w, int op)
936 PyObject *res;
937 int ok;
939 /* Quick result when objects are the same.
940 Guarantees that identity implies equality. */
941 if (v == w) {
942 if (op == Py_EQ)
943 return 1;
944 else if (op == Py_NE)
945 return 0;
948 res = PyObject_RichCompare(v, w, op);
949 if (res == NULL)
950 return -1;
951 if (PyBool_Check(res))
952 ok = (res == Py_True);
953 else
954 ok = PyObject_IsTrue(res);
955 Py_DECREF(res);
956 return ok;
959 /* Set of hash utility functions to help maintaining the invariant that
960 if a==b then hash(a)==hash(b)
962 All the utility functions (_Py_Hash*()) return "-1" to signify an error.
965 long
966 _Py_HashDouble(double v)
968 double intpart, fractpart;
969 int expo;
970 long hipart;
971 long x; /* the final hash value */
972 /* This is designed so that Python numbers of different types
973 * that compare equal hash to the same value; otherwise comparisons
974 * of mapping keys will turn out weird.
977 fractpart = modf(v, &intpart);
978 if (fractpart == 0.0) {
979 /* This must return the same hash as an equal int or long. */
980 if (intpart > LONG_MAX || -intpart > LONG_MAX) {
981 /* Convert to long and use its hash. */
982 PyObject *plong; /* converted to Python long */
983 if (Py_IS_INFINITY(intpart))
984 /* can't convert to long int -- arbitrary */
985 v = v < 0 ? -271828.0 : 314159.0;
986 plong = PyLong_FromDouble(v);
987 if (plong == NULL)
988 return -1;
989 x = PyObject_Hash(plong);
990 Py_DECREF(plong);
991 return x;
993 /* Fits in a C long == a Python int, so is its own hash. */
994 x = (long)intpart;
995 if (x == -1)
996 x = -2;
997 return x;
999 /* The fractional part is non-zero, so we don't have to worry about
1000 * making this match the hash of some other type.
1001 * Use frexp to get at the bits in the double.
1002 * Since the VAX D double format has 56 mantissa bits, which is the
1003 * most of any double format in use, each of these parts may have as
1004 * many as (but no more than) 56 significant bits.
1005 * So, assuming sizeof(long) >= 4, each part can be broken into two
1006 * longs; frexp and multiplication are used to do that.
1007 * Also, since the Cray double format has 15 exponent bits, which is
1008 * the most of any double format in use, shifting the exponent field
1009 * left by 15 won't overflow a long (again assuming sizeof(long) >= 4).
1011 v = frexp(v, &expo);
1012 v *= 2147483648.0; /* 2**31 */
1013 hipart = (long)v; /* take the top 32 bits */
1014 v = (v - (double)hipart) * 2147483648.0; /* get the next 32 bits */
1015 x = hipart + (long)v + (expo << 15);
1016 if (x == -1)
1017 x = -2;
1018 return x;
1021 long
1022 _Py_HashPointer(void *p)
1024 #if SIZEOF_LONG >= SIZEOF_VOID_P
1025 return (long)p;
1026 #else
1027 /* convert to a Python long and hash that */
1028 PyObject* longobj;
1029 long x;
1031 if ((longobj = PyLong_FromVoidPtr(p)) == NULL) {
1032 x = -1;
1033 goto finally;
1035 x = PyObject_Hash(longobj);
1037 finally:
1038 Py_XDECREF(longobj);
1039 return x;
1040 #endif
1044 long
1045 PyObject_Hash(PyObject *v)
1047 PyTypeObject *tp = v->ob_type;
1048 if (tp->tp_hash != NULL)
1049 return (*tp->tp_hash)(v);
1050 if (tp->tp_compare == NULL && RICHCOMPARE(tp) == NULL) {
1051 return _Py_HashPointer(v); /* Use address as hash value */
1053 /* If there's a cmp but no hash defined, the object can't be hashed */
1054 PyErr_Format(PyExc_TypeError, "unhashable type: '%.200s'",
1055 v->ob_type->tp_name);
1056 return -1;
1059 PyObject *
1060 PyObject_GetAttrString(PyObject *v, const char *name)
1062 PyObject *w, *res;
1064 if (v->ob_type->tp_getattr != NULL)
1065 return (*v->ob_type->tp_getattr)(v, (char*)name);
1066 w = PyString_InternFromString(name);
1067 if (w == NULL)
1068 return NULL;
1069 res = PyObject_GetAttr(v, w);
1070 Py_XDECREF(w);
1071 return res;
1075 PyObject_HasAttrString(PyObject *v, const char *name)
1077 PyObject *res = PyObject_GetAttrString(v, name);
1078 if (res != NULL) {
1079 Py_DECREF(res);
1080 return 1;
1082 PyErr_Clear();
1083 return 0;
1087 PyObject_SetAttrString(PyObject *v, const char *name, PyObject *w)
1089 PyObject *s;
1090 int res;
1092 if (v->ob_type->tp_setattr != NULL)
1093 return (*v->ob_type->tp_setattr)(v, (char*)name, w);
1094 s = PyString_InternFromString(name);
1095 if (s == NULL)
1096 return -1;
1097 res = PyObject_SetAttr(v, s, w);
1098 Py_XDECREF(s);
1099 return res;
1102 PyObject *
1103 PyObject_GetAttr(PyObject *v, PyObject *name)
1105 PyTypeObject *tp = v->ob_type;
1107 if (!PyString_Check(name)) {
1108 #ifdef Py_USING_UNICODE
1109 /* The Unicode to string conversion is done here because the
1110 existing tp_getattro slots expect a string object as name
1111 and we wouldn't want to break those. */
1112 if (PyUnicode_Check(name)) {
1113 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
1114 if (name == NULL)
1115 return NULL;
1117 else
1118 #endif
1120 PyErr_Format(PyExc_TypeError,
1121 "attribute name must be string, not '%.200s'",
1122 name->ob_type->tp_name);
1123 return NULL;
1126 if (tp->tp_getattro != NULL)
1127 return (*tp->tp_getattro)(v, name);
1128 if (tp->tp_getattr != NULL)
1129 return (*tp->tp_getattr)(v, PyString_AS_STRING(name));
1130 PyErr_Format(PyExc_AttributeError,
1131 "'%.50s' object has no attribute '%.400s'",
1132 tp->tp_name, PyString_AS_STRING(name));
1133 return NULL;
1137 PyObject_HasAttr(PyObject *v, PyObject *name)
1139 PyObject *res = PyObject_GetAttr(v, name);
1140 if (res != NULL) {
1141 Py_DECREF(res);
1142 return 1;
1144 PyErr_Clear();
1145 return 0;
1149 PyObject_SetAttr(PyObject *v, PyObject *name, PyObject *value)
1151 PyTypeObject *tp = v->ob_type;
1152 int err;
1154 if (!PyString_Check(name)){
1155 #ifdef Py_USING_UNICODE
1156 /* The Unicode to string conversion is done here because the
1157 existing tp_setattro slots expect a string object as name
1158 and we wouldn't want to break those. */
1159 if (PyUnicode_Check(name)) {
1160 name = PyUnicode_AsEncodedString(name, NULL, NULL);
1161 if (name == NULL)
1162 return -1;
1164 else
1165 #endif
1167 PyErr_Format(PyExc_TypeError,
1168 "attribute name must be string, not '%.200s'",
1169 name->ob_type->tp_name);
1170 return -1;
1173 else
1174 Py_INCREF(name);
1176 PyString_InternInPlace(&name);
1177 if (tp->tp_setattro != NULL) {
1178 err = (*tp->tp_setattro)(v, name, value);
1179 Py_DECREF(name);
1180 return err;
1182 if (tp->tp_setattr != NULL) {
1183 err = (*tp->tp_setattr)(v, PyString_AS_STRING(name), value);
1184 Py_DECREF(name);
1185 return err;
1187 Py_DECREF(name);
1188 if (tp->tp_getattr == NULL && tp->tp_getattro == NULL)
1189 PyErr_Format(PyExc_TypeError,
1190 "'%.100s' object has no attributes "
1191 "(%s .%.100s)",
1192 tp->tp_name,
1193 value==NULL ? "del" : "assign to",
1194 PyString_AS_STRING(name));
1195 else
1196 PyErr_Format(PyExc_TypeError,
1197 "'%.100s' object has only read-only attributes "
1198 "(%s .%.100s)",
1199 tp->tp_name,
1200 value==NULL ? "del" : "assign to",
1201 PyString_AS_STRING(name));
1202 return -1;
1205 /* Helper to get a pointer to an object's __dict__ slot, if any */
1207 PyObject **
1208 _PyObject_GetDictPtr(PyObject *obj)
1210 Py_ssize_t dictoffset;
1211 PyTypeObject *tp = obj->ob_type;
1213 if (!(tp->tp_flags & Py_TPFLAGS_HAVE_CLASS))
1214 return NULL;
1215 dictoffset = tp->tp_dictoffset;
1216 if (dictoffset == 0)
1217 return NULL;
1218 if (dictoffset < 0) {
1219 Py_ssize_t tsize;
1220 size_t size;
1222 tsize = ((PyVarObject *)obj)->ob_size;
1223 if (tsize < 0)
1224 tsize = -tsize;
1225 size = _PyObject_VAR_SIZE(tp, tsize);
1227 dictoffset += (long)size;
1228 assert(dictoffset > 0);
1229 assert(dictoffset % SIZEOF_VOID_P == 0);
1231 return (PyObject **) ((char *)obj + dictoffset);
1234 PyObject *
1235 PyObject_SelfIter(PyObject *obj)
1237 Py_INCREF(obj);
1238 return obj;
1241 /* Generic GetAttr functions - put these in your tp_[gs]etattro slot */
1243 PyObject *
1244 PyObject_GenericGetAttr(PyObject *obj, PyObject *name)
1246 PyTypeObject *tp = obj->ob_type;
1247 PyObject *descr = NULL;
1248 PyObject *res = NULL;
1249 descrgetfunc f;
1250 Py_ssize_t dictoffset;
1251 PyObject **dictptr;
1253 if (!PyString_Check(name)){
1254 #ifdef Py_USING_UNICODE
1255 /* The Unicode to string conversion is done here because the
1256 existing tp_setattro slots expect a string object as name
1257 and we wouldn't want to break those. */
1258 if (PyUnicode_Check(name)) {
1259 name = PyUnicode_AsEncodedString(name, NULL, NULL);
1260 if (name == NULL)
1261 return NULL;
1263 else
1264 #endif
1266 PyErr_Format(PyExc_TypeError,
1267 "attribute name must be string, not '%.200s'",
1268 name->ob_type->tp_name);
1269 return NULL;
1272 else
1273 Py_INCREF(name);
1275 if (tp->tp_dict == NULL) {
1276 if (PyType_Ready(tp) < 0)
1277 goto done;
1280 /* Inline _PyType_Lookup */
1282 Py_ssize_t i, n;
1283 PyObject *mro, *base, *dict;
1285 /* Look in tp_dict of types in MRO */
1286 mro = tp->tp_mro;
1287 assert(mro != NULL);
1288 assert(PyTuple_Check(mro));
1289 n = PyTuple_GET_SIZE(mro);
1290 for (i = 0; i < n; i++) {
1291 base = PyTuple_GET_ITEM(mro, i);
1292 if (PyClass_Check(base))
1293 dict = ((PyClassObject *)base)->cl_dict;
1294 else {
1295 assert(PyType_Check(base));
1296 dict = ((PyTypeObject *)base)->tp_dict;
1298 assert(dict && PyDict_Check(dict));
1299 descr = PyDict_GetItem(dict, name);
1300 if (descr != NULL)
1301 break;
1305 Py_XINCREF(descr);
1307 f = NULL;
1308 if (descr != NULL &&
1309 PyType_HasFeature(descr->ob_type, Py_TPFLAGS_HAVE_CLASS)) {
1310 f = descr->ob_type->tp_descr_get;
1311 if (f != NULL && PyDescr_IsData(descr)) {
1312 res = f(descr, obj, (PyObject *)obj->ob_type);
1313 Py_DECREF(descr);
1314 goto done;
1318 /* Inline _PyObject_GetDictPtr */
1319 dictoffset = tp->tp_dictoffset;
1320 if (dictoffset != 0) {
1321 PyObject *dict;
1322 if (dictoffset < 0) {
1323 Py_ssize_t tsize;
1324 size_t size;
1326 tsize = ((PyVarObject *)obj)->ob_size;
1327 if (tsize < 0)
1328 tsize = -tsize;
1329 size = _PyObject_VAR_SIZE(tp, tsize);
1331 dictoffset += (long)size;
1332 assert(dictoffset > 0);
1333 assert(dictoffset % SIZEOF_VOID_P == 0);
1335 dictptr = (PyObject **) ((char *)obj + dictoffset);
1336 dict = *dictptr;
1337 if (dict != NULL) {
1338 res = PyDict_GetItem(dict, name);
1339 if (res != NULL) {
1340 Py_INCREF(res);
1341 Py_XDECREF(descr);
1342 goto done;
1347 if (f != NULL) {
1348 res = f(descr, obj, (PyObject *)obj->ob_type);
1349 Py_DECREF(descr);
1350 goto done;
1353 if (descr != NULL) {
1354 res = descr;
1355 /* descr was already increfed above */
1356 goto done;
1359 PyErr_Format(PyExc_AttributeError,
1360 "'%.50s' object has no attribute '%.400s'",
1361 tp->tp_name, PyString_AS_STRING(name));
1362 done:
1363 Py_DECREF(name);
1364 return res;
1368 PyObject_GenericSetAttr(PyObject *obj, PyObject *name, PyObject *value)
1370 PyTypeObject *tp = obj->ob_type;
1371 PyObject *descr;
1372 descrsetfunc f;
1373 PyObject **dictptr;
1374 int res = -1;
1376 if (!PyString_Check(name)){
1377 #ifdef Py_USING_UNICODE
1378 /* The Unicode to string conversion is done here because the
1379 existing tp_setattro slots expect a string object as name
1380 and we wouldn't want to break those. */
1381 if (PyUnicode_Check(name)) {
1382 name = PyUnicode_AsEncodedString(name, NULL, NULL);
1383 if (name == NULL)
1384 return -1;
1386 else
1387 #endif
1389 PyErr_Format(PyExc_TypeError,
1390 "attribute name must be string, not '%.200s'",
1391 name->ob_type->tp_name);
1392 return -1;
1395 else
1396 Py_INCREF(name);
1398 if (tp->tp_dict == NULL) {
1399 if (PyType_Ready(tp) < 0)
1400 goto done;
1403 descr = _PyType_Lookup(tp, name);
1404 f = NULL;
1405 if (descr != NULL &&
1406 PyType_HasFeature(descr->ob_type, Py_TPFLAGS_HAVE_CLASS)) {
1407 f = descr->ob_type->tp_descr_set;
1408 if (f != NULL && PyDescr_IsData(descr)) {
1409 res = f(descr, obj, value);
1410 goto done;
1414 dictptr = _PyObject_GetDictPtr(obj);
1415 if (dictptr != NULL) {
1416 PyObject *dict = *dictptr;
1417 if (dict == NULL && value != NULL) {
1418 dict = PyDict_New();
1419 if (dict == NULL)
1420 goto done;
1421 *dictptr = dict;
1423 if (dict != NULL) {
1424 if (value == NULL)
1425 res = PyDict_DelItem(dict, name);
1426 else
1427 res = PyDict_SetItem(dict, name, value);
1428 if (res < 0 && PyErr_ExceptionMatches(PyExc_KeyError))
1429 PyErr_SetObject(PyExc_AttributeError, name);
1430 goto done;
1434 if (f != NULL) {
1435 res = f(descr, obj, value);
1436 goto done;
1439 if (descr == NULL) {
1440 PyErr_Format(PyExc_AttributeError,
1441 "'%.100s' object has no attribute '%.200s'",
1442 tp->tp_name, PyString_AS_STRING(name));
1443 goto done;
1446 PyErr_Format(PyExc_AttributeError,
1447 "'%.50s' object attribute '%.400s' is read-only",
1448 tp->tp_name, PyString_AS_STRING(name));
1449 done:
1450 Py_DECREF(name);
1451 return res;
1454 /* Test a value used as condition, e.g., in a for or if statement.
1455 Return -1 if an error occurred */
1458 PyObject_IsTrue(PyObject *v)
1460 Py_ssize_t res;
1461 if (v == Py_True)
1462 return 1;
1463 if (v == Py_False)
1464 return 0;
1465 if (v == Py_None)
1466 return 0;
1467 else if (v->ob_type->tp_as_number != NULL &&
1468 v->ob_type->tp_as_number->nb_nonzero != NULL)
1469 res = (*v->ob_type->tp_as_number->nb_nonzero)(v);
1470 else if (v->ob_type->tp_as_mapping != NULL &&
1471 v->ob_type->tp_as_mapping->mp_length != NULL)
1472 res = (*v->ob_type->tp_as_mapping->mp_length)(v);
1473 else if (v->ob_type->tp_as_sequence != NULL &&
1474 v->ob_type->tp_as_sequence->sq_length != NULL)
1475 res = (*v->ob_type->tp_as_sequence->sq_length)(v);
1476 else
1477 return 1;
1478 /* if it is negative, it should be either -1 or -2 */
1479 return (res > 0) ? 1 : Py_SAFE_DOWNCAST(res, Py_ssize_t, int);
1482 /* equivalent of 'not v'
1483 Return -1 if an error occurred */
1486 PyObject_Not(PyObject *v)
1488 int res;
1489 res = PyObject_IsTrue(v);
1490 if (res < 0)
1491 return res;
1492 return res == 0;
1495 /* Coerce two numeric types to the "larger" one.
1496 Increment the reference count on each argument.
1497 Return value:
1498 -1 if an error occurred;
1499 0 if the coercion succeeded (and then the reference counts are increased);
1500 1 if no coercion is possible (and no error is raised).
1503 PyNumber_CoerceEx(PyObject **pv, PyObject **pw)
1505 register PyObject *v = *pv;
1506 register PyObject *w = *pw;
1507 int res;
1509 /* Shortcut only for old-style types */
1510 if (v->ob_type == w->ob_type &&
1511 !PyType_HasFeature(v->ob_type, Py_TPFLAGS_CHECKTYPES))
1513 Py_INCREF(v);
1514 Py_INCREF(w);
1515 return 0;
1517 if (v->ob_type->tp_as_number && v->ob_type->tp_as_number->nb_coerce) {
1518 res = (*v->ob_type->tp_as_number->nb_coerce)(pv, pw);
1519 if (res <= 0)
1520 return res;
1522 if (w->ob_type->tp_as_number && w->ob_type->tp_as_number->nb_coerce) {
1523 res = (*w->ob_type->tp_as_number->nb_coerce)(pw, pv);
1524 if (res <= 0)
1525 return res;
1527 return 1;
1530 /* Coerce two numeric types to the "larger" one.
1531 Increment the reference count on each argument.
1532 Return -1 and raise an exception if no coercion is possible
1533 (and then no reference count is incremented).
1536 PyNumber_Coerce(PyObject **pv, PyObject **pw)
1538 int err = PyNumber_CoerceEx(pv, pw);
1539 if (err <= 0)
1540 return err;
1541 PyErr_SetString(PyExc_TypeError, "number coercion failed");
1542 return -1;
1546 /* Test whether an object can be called */
1549 PyCallable_Check(PyObject *x)
1551 if (x == NULL)
1552 return 0;
1553 if (PyInstance_Check(x)) {
1554 PyObject *call = PyObject_GetAttrString(x, "__call__");
1555 if (call == NULL) {
1556 PyErr_Clear();
1557 return 0;
1559 /* Could test recursively but don't, for fear of endless
1560 recursion if some joker sets self.__call__ = self */
1561 Py_DECREF(call);
1562 return 1;
1564 else {
1565 return x->ob_type->tp_call != NULL;
1569 /* ------------------------- PyObject_Dir() helpers ------------------------- */
1571 /* Helper for PyObject_Dir.
1572 Merge the __dict__ of aclass into dict, and recursively also all
1573 the __dict__s of aclass's base classes. The order of merging isn't
1574 defined, as it's expected that only the final set of dict keys is
1575 interesting.
1576 Return 0 on success, -1 on error.
1579 static int
1580 merge_class_dict(PyObject* dict, PyObject* aclass)
1582 PyObject *classdict;
1583 PyObject *bases;
1585 assert(PyDict_Check(dict));
1586 assert(aclass);
1588 /* Merge in the type's dict (if any). */
1589 classdict = PyObject_GetAttrString(aclass, "__dict__");
1590 if (classdict == NULL)
1591 PyErr_Clear();
1592 else {
1593 int status = PyDict_Update(dict, classdict);
1594 Py_DECREF(classdict);
1595 if (status < 0)
1596 return -1;
1599 /* Recursively merge in the base types' (if any) dicts. */
1600 bases = PyObject_GetAttrString(aclass, "__bases__");
1601 if (bases == NULL)
1602 PyErr_Clear();
1603 else {
1604 /* We have no guarantee that bases is a real tuple */
1605 Py_ssize_t i, n;
1606 n = PySequence_Size(bases); /* This better be right */
1607 if (n < 0)
1608 PyErr_Clear();
1609 else {
1610 for (i = 0; i < n; i++) {
1611 int status;
1612 PyObject *base = PySequence_GetItem(bases, i);
1613 if (base == NULL) {
1614 Py_DECREF(bases);
1615 return -1;
1617 status = merge_class_dict(dict, base);
1618 Py_DECREF(base);
1619 if (status < 0) {
1620 Py_DECREF(bases);
1621 return -1;
1625 Py_DECREF(bases);
1627 return 0;
1630 /* Helper for PyObject_Dir.
1631 If obj has an attr named attrname that's a list, merge its string
1632 elements into keys of dict.
1633 Return 0 on success, -1 on error. Errors due to not finding the attr,
1634 or the attr not being a list, are suppressed.
1637 static int
1638 merge_list_attr(PyObject* dict, PyObject* obj, const char *attrname)
1640 PyObject *list;
1641 int result = 0;
1643 assert(PyDict_Check(dict));
1644 assert(obj);
1645 assert(attrname);
1647 list = PyObject_GetAttrString(obj, attrname);
1648 if (list == NULL)
1649 PyErr_Clear();
1651 else if (PyList_Check(list)) {
1652 int i;
1653 for (i = 0; i < PyList_GET_SIZE(list); ++i) {
1654 PyObject *item = PyList_GET_ITEM(list, i);
1655 if (PyString_Check(item)) {
1656 result = PyDict_SetItem(dict, item, Py_None);
1657 if (result < 0)
1658 break;
1663 Py_XDECREF(list);
1664 return result;
1667 /* Helper for PyObject_Dir without arguments: returns the local scope. */
1668 static PyObject *
1669 _dir_locals(void)
1671 PyObject *names;
1672 PyObject *locals = PyEval_GetLocals();
1674 if (locals == NULL) {
1675 PyErr_SetString(PyExc_SystemError, "frame does not exist");
1676 return NULL;
1679 names = PyMapping_Keys(locals);
1680 if (!names)
1681 return NULL;
1682 if (!PyList_Check(names)) {
1683 PyErr_Format(PyExc_TypeError,
1684 "dir(): expected keys() of locals to be a list, "
1685 "not '%.200s'", names->ob_type->tp_name);
1686 Py_DECREF(names);
1687 return NULL;
1689 /* the locals don't need to be DECREF'd */
1690 return names;
1693 /* Helper for PyObject_Dir of type objects: returns __dict__ and __bases__.
1694 We deliberately don't suck up its __class__, as methods belonging to the
1695 metaclass would probably be more confusing than helpful.
1697 static PyObject *
1698 _specialized_dir_type(PyObject *obj)
1700 PyObject *result = NULL;
1701 PyObject *dict = PyDict_New();
1703 if (dict != NULL && merge_class_dict(dict, obj) == 0)
1704 result = PyDict_Keys(dict);
1706 Py_XDECREF(dict);
1707 return result;
1710 /* Helper for PyObject_Dir of module objects: returns the module's __dict__. */
1711 static PyObject *
1712 _specialized_dir_module(PyObject *obj)
1714 PyObject *result = NULL;
1715 PyObject *dict = PyObject_GetAttrString(obj, "__dict__");
1717 if (dict != NULL) {
1718 if (PyDict_Check(dict))
1719 result = PyDict_Keys(dict);
1720 else {
1721 PyErr_Format(PyExc_TypeError,
1722 "%.200s.__dict__ is not a dictionary",
1723 PyModule_GetName(obj));
1727 Py_XDECREF(dict);
1728 return result;
1731 /* Helper for PyObject_Dir of generic objects: returns __dict__, __class__,
1732 and recursively up the __class__.__bases__ chain.
1734 static PyObject *
1735 _generic_dir(PyObject *obj)
1737 PyObject *result = NULL;
1738 PyObject *dict = NULL;
1739 PyObject *itsclass = NULL;
1741 /* Get __dict__ (which may or may not be a real dict...) */
1742 dict = PyObject_GetAttrString(obj, "__dict__");
1743 if (dict == NULL) {
1744 PyErr_Clear();
1745 dict = PyDict_New();
1747 else if (!PyDict_Check(dict)) {
1748 Py_DECREF(dict);
1749 dict = PyDict_New();
1751 else {
1752 /* Copy __dict__ to avoid mutating it. */
1753 PyObject *temp = PyDict_Copy(dict);
1754 Py_DECREF(dict);
1755 dict = temp;
1758 if (dict == NULL)
1759 goto error;
1761 /* Merge in __members__ and __methods__ (if any).
1762 * This is removed in Python 3000. */
1763 if (merge_list_attr(dict, obj, "__members__") < 0)
1764 goto error;
1765 if (merge_list_attr(dict, obj, "__methods__") < 0)
1766 goto error;
1768 /* Merge in attrs reachable from its class. */
1769 itsclass = PyObject_GetAttrString(obj, "__class__");
1770 if (itsclass == NULL)
1771 /* XXX(tomer): Perhaps fall back to obj->ob_type if no
1772 __class__ exists? */
1773 PyErr_Clear();
1774 else {
1775 if (merge_class_dict(dict, itsclass) != 0)
1776 goto error;
1779 result = PyDict_Keys(dict);
1780 /* fall through */
1781 error:
1782 Py_XDECREF(itsclass);
1783 Py_XDECREF(dict);
1784 return result;
1787 /* Helper for PyObject_Dir: object introspection.
1788 This calls one of the above specialized versions if no __dir__ method
1789 exists. */
1790 static PyObject *
1791 _dir_object(PyObject *obj)
1793 PyObject *result = NULL;
1794 PyObject *dirfunc = PyObject_GetAttrString((PyObject *)obj->ob_type,
1795 "__dir__");
1797 assert(obj);
1798 if (dirfunc == NULL) {
1799 /* use default implementation */
1800 PyErr_Clear();
1801 if (PyModule_Check(obj))
1802 result = _specialized_dir_module(obj);
1803 else if (PyType_Check(obj) || PyClass_Check(obj))
1804 result = _specialized_dir_type(obj);
1805 else
1806 result = _generic_dir(obj);
1808 else {
1809 /* use __dir__ */
1810 result = PyObject_CallFunctionObjArgs(dirfunc, obj, NULL);
1811 Py_DECREF(dirfunc);
1812 if (result == NULL)
1813 return NULL;
1815 /* result must be a list */
1816 /* XXX(gbrandl): could also check if all items are strings */
1817 if (!PyList_Check(result)) {
1818 PyErr_Format(PyExc_TypeError,
1819 "__dir__() must return a list, not %.200s",
1820 result->ob_type->tp_name);
1821 Py_DECREF(result);
1822 result = NULL;
1826 return result;
1829 /* Implementation of dir() -- if obj is NULL, returns the names in the current
1830 (local) scope. Otherwise, performs introspection of the object: returns a
1831 sorted list of attribute names (supposedly) accessible from the object
1833 PyObject *
1834 PyObject_Dir(PyObject *obj)
1836 PyObject * result;
1838 if (obj == NULL)
1839 /* no object -- introspect the locals */
1840 result = _dir_locals();
1841 else
1842 /* object -- introspect the object */
1843 result = _dir_object(obj);
1845 assert(result == NULL || PyList_Check(result));
1847 if (result != NULL && PyList_Sort(result) != 0) {
1848 /* sorting the list failed */
1849 Py_DECREF(result);
1850 result = NULL;
1853 return result;
1857 NoObject is usable as a non-NULL undefined value, used by the macro None.
1858 There is (and should be!) no way to create other objects of this type,
1859 so there is exactly one (which is indestructible, by the way).
1860 (XXX This type and the type of NotImplemented below should be unified.)
1863 /* ARGSUSED */
1864 static PyObject *
1865 none_repr(PyObject *op)
1867 return PyString_FromString("None");
1870 /* ARGUSED */
1871 static void
1872 none_dealloc(PyObject* ignore)
1874 /* This should never get called, but we also don't want to SEGV if
1875 * we accidently decref None out of existance.
1877 Py_FatalError("deallocating None");
1881 static PyTypeObject PyNone_Type = {
1882 PyObject_HEAD_INIT(&PyType_Type)
1884 "NoneType",
1887 none_dealloc, /*tp_dealloc*/ /*never called*/
1888 0, /*tp_print*/
1889 0, /*tp_getattr*/
1890 0, /*tp_setattr*/
1891 0, /*tp_compare*/
1892 none_repr, /*tp_repr*/
1893 0, /*tp_as_number*/
1894 0, /*tp_as_sequence*/
1895 0, /*tp_as_mapping*/
1896 0, /*tp_hash */
1899 PyObject _Py_NoneStruct = {
1900 PyObject_HEAD_INIT(&PyNone_Type)
1903 /* NotImplemented is an object that can be used to signal that an
1904 operation is not implemented for the given type combination. */
1906 static PyObject *
1907 NotImplemented_repr(PyObject *op)
1909 return PyString_FromString("NotImplemented");
1912 static PyTypeObject PyNotImplemented_Type = {
1913 PyObject_HEAD_INIT(&PyType_Type)
1915 "NotImplementedType",
1918 none_dealloc, /*tp_dealloc*/ /*never called*/
1919 0, /*tp_print*/
1920 0, /*tp_getattr*/
1921 0, /*tp_setattr*/
1922 0, /*tp_compare*/
1923 NotImplemented_repr, /*tp_repr*/
1924 0, /*tp_as_number*/
1925 0, /*tp_as_sequence*/
1926 0, /*tp_as_mapping*/
1927 0, /*tp_hash */
1930 PyObject _Py_NotImplementedStruct = {
1931 PyObject_HEAD_INIT(&PyNotImplemented_Type)
1934 void
1935 _Py_ReadyTypes(void)
1937 if (PyType_Ready(&PyType_Type) < 0)
1938 Py_FatalError("Can't initialize 'type'");
1940 if (PyType_Ready(&_PyWeakref_RefType) < 0)
1941 Py_FatalError("Can't initialize 'weakref'");
1943 if (PyType_Ready(&PyBool_Type) < 0)
1944 Py_FatalError("Can't initialize 'bool'");
1946 if (PyType_Ready(&PyString_Type) < 0)
1947 Py_FatalError("Can't initialize 'str'");
1949 if (PyType_Ready(&PyList_Type) < 0)
1950 Py_FatalError("Can't initialize 'list'");
1952 if (PyType_Ready(&PyNone_Type) < 0)
1953 Py_FatalError("Can't initialize type(None)");
1955 if (PyType_Ready(&PyNotImplemented_Type) < 0)
1956 Py_FatalError("Can't initialize type(NotImplemented)");
1960 #ifdef Py_TRACE_REFS
1962 void
1963 _Py_NewReference(PyObject *op)
1965 _Py_INC_REFTOTAL;
1966 op->ob_refcnt = 1;
1967 _Py_AddToAllObjects(op, 1);
1968 _Py_INC_TPALLOCS(op);
1971 void
1972 _Py_ForgetReference(register PyObject *op)
1974 #ifdef SLOW_UNREF_CHECK
1975 register PyObject *p;
1976 #endif
1977 if (op->ob_refcnt < 0)
1978 Py_FatalError("UNREF negative refcnt");
1979 if (op == &refchain ||
1980 op->_ob_prev->_ob_next != op || op->_ob_next->_ob_prev != op)
1981 Py_FatalError("UNREF invalid object");
1982 #ifdef SLOW_UNREF_CHECK
1983 for (p = refchain._ob_next; p != &refchain; p = p->_ob_next) {
1984 if (p == op)
1985 break;
1987 if (p == &refchain) /* Not found */
1988 Py_FatalError("UNREF unknown object");
1989 #endif
1990 op->_ob_next->_ob_prev = op->_ob_prev;
1991 op->_ob_prev->_ob_next = op->_ob_next;
1992 op->_ob_next = op->_ob_prev = NULL;
1993 _Py_INC_TPFREES(op);
1996 void
1997 _Py_Dealloc(PyObject *op)
1999 destructor dealloc = op->ob_type->tp_dealloc;
2000 _Py_ForgetReference(op);
2001 (*dealloc)(op);
2004 /* Print all live objects. Because PyObject_Print is called, the
2005 * interpreter must be in a healthy state.
2007 void
2008 _Py_PrintReferences(FILE *fp)
2010 PyObject *op;
2011 fprintf(fp, "Remaining objects:\n");
2012 for (op = refchain._ob_next; op != &refchain; op = op->_ob_next) {
2013 fprintf(fp, "%p [%" PY_FORMAT_SIZE_T "d] ", op, op->ob_refcnt);
2014 if (PyObject_Print(op, fp, 0) != 0)
2015 PyErr_Clear();
2016 putc('\n', fp);
2020 /* Print the addresses of all live objects. Unlike _Py_PrintReferences, this
2021 * doesn't make any calls to the Python C API, so is always safe to call.
2023 void
2024 _Py_PrintReferenceAddresses(FILE *fp)
2026 PyObject *op;
2027 fprintf(fp, "Remaining object addresses:\n");
2028 for (op = refchain._ob_next; op != &refchain; op = op->_ob_next)
2029 fprintf(fp, "%p [%" PY_FORMAT_SIZE_T "d] %s\n", op,
2030 op->ob_refcnt, op->ob_type->tp_name);
2033 PyObject *
2034 _Py_GetObjects(PyObject *self, PyObject *args)
2036 int i, n;
2037 PyObject *t = NULL;
2038 PyObject *res, *op;
2040 if (!PyArg_ParseTuple(args, "i|O", &n, &t))
2041 return NULL;
2042 op = refchain._ob_next;
2043 res = PyList_New(0);
2044 if (res == NULL)
2045 return NULL;
2046 for (i = 0; (n == 0 || i < n) && op != &refchain; i++) {
2047 while (op == self || op == args || op == res || op == t ||
2048 (t != NULL && op->ob_type != (PyTypeObject *) t)) {
2049 op = op->_ob_next;
2050 if (op == &refchain)
2051 return res;
2053 if (PyList_Append(res, op) < 0) {
2054 Py_DECREF(res);
2055 return NULL;
2057 op = op->_ob_next;
2059 return res;
2062 #endif
2065 /* Hack to force loading of cobject.o */
2066 PyTypeObject *_Py_cobject_hack = &PyCObject_Type;
2069 /* Hack to force loading of abstract.o */
2070 Py_ssize_t (*_Py_abstract_hack)(PyObject *) = PyObject_Size;
2073 /* Python's malloc wrappers (see pymem.h) */
2075 void *
2076 PyMem_Malloc(size_t nbytes)
2078 return PyMem_MALLOC(nbytes);
2081 void *
2082 PyMem_Realloc(void *p, size_t nbytes)
2084 return PyMem_REALLOC(p, nbytes);
2087 void
2088 PyMem_Free(void *p)
2090 PyMem_FREE(p);
2094 /* These methods are used to control infinite recursion in repr, str, print,
2095 etc. Container objects that may recursively contain themselves,
2096 e.g. builtin dictionaries and lists, should used Py_ReprEnter() and
2097 Py_ReprLeave() to avoid infinite recursion.
2099 Py_ReprEnter() returns 0 the first time it is called for a particular
2100 object and 1 every time thereafter. It returns -1 if an exception
2101 occurred. Py_ReprLeave() has no return value.
2103 See dictobject.c and listobject.c for examples of use.
2106 #define KEY "Py_Repr"
2109 Py_ReprEnter(PyObject *obj)
2111 PyObject *dict;
2112 PyObject *list;
2113 Py_ssize_t i;
2115 dict = PyThreadState_GetDict();
2116 if (dict == NULL)
2117 return 0;
2118 list = PyDict_GetItemString(dict, KEY);
2119 if (list == NULL) {
2120 list = PyList_New(0);
2121 if (list == NULL)
2122 return -1;
2123 if (PyDict_SetItemString(dict, KEY, list) < 0)
2124 return -1;
2125 Py_DECREF(list);
2127 i = PyList_GET_SIZE(list);
2128 while (--i >= 0) {
2129 if (PyList_GET_ITEM(list, i) == obj)
2130 return 1;
2132 PyList_Append(list, obj);
2133 return 0;
2136 void
2137 Py_ReprLeave(PyObject *obj)
2139 PyObject *dict;
2140 PyObject *list;
2141 Py_ssize_t i;
2143 dict = PyThreadState_GetDict();
2144 if (dict == NULL)
2145 return;
2146 list = PyDict_GetItemString(dict, KEY);
2147 if (list == NULL || !PyList_Check(list))
2148 return;
2149 i = PyList_GET_SIZE(list);
2150 /* Count backwards because we always expect obj to be list[-1] */
2151 while (--i >= 0) {
2152 if (PyList_GET_ITEM(list, i) == obj) {
2153 PyList_SetSlice(list, i, i + 1, NULL);
2154 break;
2159 /* Trashcan support. */
2161 /* Current call-stack depth of tp_dealloc calls. */
2162 int _PyTrash_delete_nesting = 0;
2164 /* List of objects that still need to be cleaned up, singly linked via their
2165 * gc headers' gc_prev pointers.
2167 PyObject *_PyTrash_delete_later = NULL;
2169 /* Add op to the _PyTrash_delete_later list. Called when the current
2170 * call-stack depth gets large. op must be a currently untracked gc'ed
2171 * object, with refcount 0. Py_DECREF must already have been called on it.
2173 void
2174 _PyTrash_deposit_object(PyObject *op)
2176 assert(PyObject_IS_GC(op));
2177 assert(_Py_AS_GC(op)->gc.gc_refs == _PyGC_REFS_UNTRACKED);
2178 assert(op->ob_refcnt == 0);
2179 _Py_AS_GC(op)->gc.gc_prev = (PyGC_Head *)_PyTrash_delete_later;
2180 _PyTrash_delete_later = op;
2183 /* Dealloccate all the objects in the _PyTrash_delete_later list. Called when
2184 * the call-stack unwinds again.
2186 void
2187 _PyTrash_destroy_chain(void)
2189 while (_PyTrash_delete_later) {
2190 PyObject *op = _PyTrash_delete_later;
2191 destructor dealloc = op->ob_type->tp_dealloc;
2193 _PyTrash_delete_later =
2194 (PyObject*) _Py_AS_GC(op)->gc.gc_prev;
2196 /* Call the deallocator directly. This used to try to
2197 * fool Py_DECREF into calling it indirectly, but
2198 * Py_DECREF was already called on this object, and in
2199 * assorted non-release builds calling Py_DECREF again ends
2200 * up distorting allocation statistics.
2202 assert(op->ob_refcnt == 0);
2203 ++_PyTrash_delete_nesting;
2204 (*dealloc)(op);
2205 --_PyTrash_delete_nesting;
2209 #ifdef __cplusplus
2211 #endif