[Bug #1472827] Make saxutils.XMLGenerator handle \r\n\t in attribute values by escapi...
[python.git] / Objects / object.c
blob59d39605d25802c252264981f495f33ee2f819eb
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 #ifdef Py_USING_UNICODE
735 /* Special case for Unicode */
736 if (PyUnicode_Check(v) || PyUnicode_Check(w)) {
737 c = PyUnicode_Compare(v, w);
738 if (!PyErr_Occurred())
739 return c;
740 /* TypeErrors are ignored: if Unicode coercion fails due
741 to one of the arguments not having the right type, we
742 continue as defined by the coercion protocol (see
743 above). Luckily, decoding errors are reported as
744 ValueErrors and are not masked by this technique. */
745 if (!PyErr_ExceptionMatches(PyExc_TypeError))
746 return -2;
747 PyErr_Clear();
749 #endif
751 /* None is smaller than anything */
752 if (v == Py_None)
753 return -1;
754 if (w == Py_None)
755 return 1;
757 /* different type: compare type names; numbers are smaller */
758 if (PyNumber_Check(v))
759 vname = "";
760 else
761 vname = v->ob_type->tp_name;
762 if (PyNumber_Check(w))
763 wname = "";
764 else
765 wname = w->ob_type->tp_name;
766 c = strcmp(vname, wname);
767 if (c < 0)
768 return -1;
769 if (c > 0)
770 return 1;
771 /* Same type name, or (more likely) incomparable numeric types */
772 return ((Py_uintptr_t)(v->ob_type) < (
773 Py_uintptr_t)(w->ob_type)) ? -1 : 1;
776 /* Do a 3-way comparison, by hook or by crook. Return:
777 -2 for an exception (but see below);
778 -1 if v < w;
779 0 if v == w;
780 1 if v > w;
781 BUT: if the object implements a tp_compare function, it returns
782 whatever this function returns (whether with an exception or not).
784 static int
785 do_cmp(PyObject *v, PyObject *w)
787 int c;
788 cmpfunc f;
790 if (v->ob_type == w->ob_type
791 && (f = v->ob_type->tp_compare) != NULL) {
792 c = (*f)(v, w);
793 if (PyInstance_Check(v)) {
794 /* Instance tp_compare has a different signature.
795 But if it returns undefined we fall through. */
796 if (c != 2)
797 return c;
798 /* Else fall through to try_rich_to_3way_compare() */
800 else
801 return adjust_tp_compare(c);
803 /* We only get here if one of the following is true:
804 a) v and w have different types
805 b) v and w have the same type, which doesn't have tp_compare
806 c) v and w are instances, and either __cmp__ is not defined or
807 __cmp__ returns NotImplemented
809 c = try_rich_to_3way_compare(v, w);
810 if (c < 2)
811 return c;
812 c = try_3way_compare(v, w);
813 if (c < 2)
814 return c;
815 return default_3way_compare(v, w);
818 /* Compare v to w. Return
819 -1 if v < w or exception (PyErr_Occurred() true in latter case).
820 0 if v == w.
821 1 if v > w.
822 XXX The docs (C API manual) say the return value is undefined in case
823 XXX of error.
826 PyObject_Compare(PyObject *v, PyObject *w)
828 int result;
830 if (v == NULL || w == NULL) {
831 PyErr_BadInternalCall();
832 return -1;
834 if (v == w)
835 return 0;
836 if (Py_EnterRecursiveCall(" in cmp"))
837 return -1;
838 result = do_cmp(v, w);
839 Py_LeaveRecursiveCall();
840 return result < 0 ? -1 : result;
843 /* Return (new reference to) Py_True or Py_False. */
844 static PyObject *
845 convert_3way_to_object(int op, int c)
847 PyObject *result;
848 switch (op) {
849 case Py_LT: c = c < 0; break;
850 case Py_LE: c = c <= 0; break;
851 case Py_EQ: c = c == 0; break;
852 case Py_NE: c = c != 0; break;
853 case Py_GT: c = c > 0; break;
854 case Py_GE: c = c >= 0; break;
856 result = c ? Py_True : Py_False;
857 Py_INCREF(result);
858 return result;
861 /* We want a rich comparison but don't have one. Try a 3-way cmp instead.
862 Return
863 NULL if error
864 Py_True if v op w
865 Py_False if not (v op w)
867 static PyObject *
868 try_3way_to_rich_compare(PyObject *v, PyObject *w, int op)
870 int c;
872 c = try_3way_compare(v, w);
873 if (c >= 2)
874 c = default_3way_compare(v, w);
875 if (c <= -2)
876 return NULL;
877 return convert_3way_to_object(op, c);
880 /* Do rich comparison on v and w. Return
881 NULL if error
882 Else a new reference to an object other than Py_NotImplemented, usually(?):
883 Py_True if v op w
884 Py_False if not (v op w)
886 static PyObject *
887 do_richcmp(PyObject *v, PyObject *w, int op)
889 PyObject *res;
891 res = try_rich_compare(v, w, op);
892 if (res != Py_NotImplemented)
893 return res;
894 Py_DECREF(res);
896 return try_3way_to_rich_compare(v, w, op);
899 /* Return:
900 NULL for exception;
901 some object not equal to NotImplemented if it is implemented
902 (this latter object may not be a Boolean).
904 PyObject *
905 PyObject_RichCompare(PyObject *v, PyObject *w, int op)
907 PyObject *res;
909 assert(Py_LT <= op && op <= Py_GE);
910 if (Py_EnterRecursiveCall(" in cmp"))
911 return NULL;
913 /* If the types are equal, and not old-style instances, try to
914 get out cheap (don't bother with coercions etc.). */
915 if (v->ob_type == w->ob_type && !PyInstance_Check(v)) {
916 cmpfunc fcmp;
917 richcmpfunc frich = RICHCOMPARE(v->ob_type);
918 /* If the type has richcmp, try it first. try_rich_compare
919 tries it two-sided, which is not needed since we've a
920 single type only. */
921 if (frich != NULL) {
922 res = (*frich)(v, w, op);
923 if (res != Py_NotImplemented)
924 goto Done;
925 Py_DECREF(res);
927 /* No richcmp, or this particular richmp not implemented.
928 Try 3-way cmp. */
929 fcmp = v->ob_type->tp_compare;
930 if (fcmp != NULL) {
931 int c = (*fcmp)(v, w);
932 c = adjust_tp_compare(c);
933 if (c == -2) {
934 res = NULL;
935 goto Done;
937 res = convert_3way_to_object(op, c);
938 goto Done;
942 /* Fast path not taken, or couldn't deliver a useful result. */
943 res = do_richcmp(v, w, op);
944 Done:
945 Py_LeaveRecursiveCall();
946 return res;
949 /* Return -1 if error; 1 if v op w; 0 if not (v op w). */
951 PyObject_RichCompareBool(PyObject *v, PyObject *w, int op)
953 PyObject *res;
954 int ok;
956 /* Quick result when objects are the same.
957 Guarantees that identity implies equality. */
958 if (v == w) {
959 if (op == Py_EQ)
960 return 1;
961 else if (op == Py_NE)
962 return 0;
965 res = PyObject_RichCompare(v, w, op);
966 if (res == NULL)
967 return -1;
968 if (PyBool_Check(res))
969 ok = (res == Py_True);
970 else
971 ok = PyObject_IsTrue(res);
972 Py_DECREF(res);
973 return ok;
976 /* Set of hash utility functions to help maintaining the invariant that
977 if a==b then hash(a)==hash(b)
979 All the utility functions (_Py_Hash*()) return "-1" to signify an error.
982 long
983 _Py_HashDouble(double v)
985 double intpart, fractpart;
986 int expo;
987 long hipart;
988 long x; /* the final hash value */
989 /* This is designed so that Python numbers of different types
990 * that compare equal hash to the same value; otherwise comparisons
991 * of mapping keys will turn out weird.
994 fractpart = modf(v, &intpart);
995 if (fractpart == 0.0) {
996 /* This must return the same hash as an equal int or long. */
997 if (intpart > LONG_MAX || -intpart > LONG_MAX) {
998 /* Convert to long and use its hash. */
999 PyObject *plong; /* converted to Python long */
1000 if (Py_IS_INFINITY(intpart))
1001 /* can't convert to long int -- arbitrary */
1002 v = v < 0 ? -271828.0 : 314159.0;
1003 plong = PyLong_FromDouble(v);
1004 if (plong == NULL)
1005 return -1;
1006 x = PyObject_Hash(plong);
1007 Py_DECREF(plong);
1008 return x;
1010 /* Fits in a C long == a Python int, so is its own hash. */
1011 x = (long)intpart;
1012 if (x == -1)
1013 x = -2;
1014 return x;
1016 /* The fractional part is non-zero, so we don't have to worry about
1017 * making this match the hash of some other type.
1018 * Use frexp to get at the bits in the double.
1019 * Since the VAX D double format has 56 mantissa bits, which is the
1020 * most of any double format in use, each of these parts may have as
1021 * many as (but no more than) 56 significant bits.
1022 * So, assuming sizeof(long) >= 4, each part can be broken into two
1023 * longs; frexp and multiplication are used to do that.
1024 * Also, since the Cray double format has 15 exponent bits, which is
1025 * the most of any double format in use, shifting the exponent field
1026 * left by 15 won't overflow a long (again assuming sizeof(long) >= 4).
1028 v = frexp(v, &expo);
1029 v *= 2147483648.0; /* 2**31 */
1030 hipart = (long)v; /* take the top 32 bits */
1031 v = (v - (double)hipart) * 2147483648.0; /* get the next 32 bits */
1032 x = hipart + (long)v + (expo << 15);
1033 if (x == -1)
1034 x = -2;
1035 return x;
1038 long
1039 _Py_HashPointer(void *p)
1041 #if SIZEOF_LONG >= SIZEOF_VOID_P
1042 return (long)p;
1043 #else
1044 /* convert to a Python long and hash that */
1045 PyObject* longobj;
1046 long x;
1048 if ((longobj = PyLong_FromVoidPtr(p)) == NULL) {
1049 x = -1;
1050 goto finally;
1052 x = PyObject_Hash(longobj);
1054 finally:
1055 Py_XDECREF(longobj);
1056 return x;
1057 #endif
1061 long
1062 PyObject_Hash(PyObject *v)
1064 PyTypeObject *tp = v->ob_type;
1065 if (tp->tp_hash != NULL)
1066 return (*tp->tp_hash)(v);
1067 if (tp->tp_compare == NULL && RICHCOMPARE(tp) == NULL) {
1068 return _Py_HashPointer(v); /* Use address as hash value */
1070 /* If there's a cmp but no hash defined, the object can't be hashed */
1071 PyErr_SetString(PyExc_TypeError, "unhashable type");
1072 return -1;
1075 PyObject *
1076 PyObject_GetAttrString(PyObject *v, const char *name)
1078 PyObject *w, *res;
1080 if (v->ob_type->tp_getattr != NULL)
1081 return (*v->ob_type->tp_getattr)(v, (char*)name);
1082 w = PyString_InternFromString(name);
1083 if (w == NULL)
1084 return NULL;
1085 res = PyObject_GetAttr(v, w);
1086 Py_XDECREF(w);
1087 return res;
1091 PyObject_HasAttrString(PyObject *v, const char *name)
1093 PyObject *res = PyObject_GetAttrString(v, name);
1094 if (res != NULL) {
1095 Py_DECREF(res);
1096 return 1;
1098 PyErr_Clear();
1099 return 0;
1103 PyObject_SetAttrString(PyObject *v, const char *name, PyObject *w)
1105 PyObject *s;
1106 int res;
1108 if (v->ob_type->tp_setattr != NULL)
1109 return (*v->ob_type->tp_setattr)(v, (char*)name, w);
1110 s = PyString_InternFromString(name);
1111 if (s == NULL)
1112 return -1;
1113 res = PyObject_SetAttr(v, s, w);
1114 Py_XDECREF(s);
1115 return res;
1118 PyObject *
1119 PyObject_GetAttr(PyObject *v, PyObject *name)
1121 PyTypeObject *tp = v->ob_type;
1123 if (!PyString_Check(name)) {
1124 #ifdef Py_USING_UNICODE
1125 /* The Unicode to string conversion is done here because the
1126 existing tp_getattro slots expect a string object as name
1127 and we wouldn't want to break those. */
1128 if (PyUnicode_Check(name)) {
1129 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
1130 if (name == NULL)
1131 return NULL;
1133 else
1134 #endif
1136 PyErr_SetString(PyExc_TypeError,
1137 "attribute name must be string");
1138 return NULL;
1141 if (tp->tp_getattro != NULL)
1142 return (*tp->tp_getattro)(v, name);
1143 if (tp->tp_getattr != NULL)
1144 return (*tp->tp_getattr)(v, PyString_AS_STRING(name));
1145 PyErr_Format(PyExc_AttributeError,
1146 "'%.50s' object has no attribute '%.400s'",
1147 tp->tp_name, PyString_AS_STRING(name));
1148 return NULL;
1152 PyObject_HasAttr(PyObject *v, PyObject *name)
1154 PyObject *res = PyObject_GetAttr(v, name);
1155 if (res != NULL) {
1156 Py_DECREF(res);
1157 return 1;
1159 PyErr_Clear();
1160 return 0;
1164 PyObject_SetAttr(PyObject *v, PyObject *name, PyObject *value)
1166 PyTypeObject *tp = v->ob_type;
1167 int err;
1169 if (!PyString_Check(name)){
1170 #ifdef Py_USING_UNICODE
1171 /* The Unicode to string conversion is done here because the
1172 existing tp_setattro slots expect a string object as name
1173 and we wouldn't want to break those. */
1174 if (PyUnicode_Check(name)) {
1175 name = PyUnicode_AsEncodedString(name, NULL, NULL);
1176 if (name == NULL)
1177 return -1;
1179 else
1180 #endif
1182 PyErr_SetString(PyExc_TypeError,
1183 "attribute name must be string");
1184 return -1;
1187 else
1188 Py_INCREF(name);
1190 PyString_InternInPlace(&name);
1191 if (tp->tp_setattro != NULL) {
1192 err = (*tp->tp_setattro)(v, name, value);
1193 Py_DECREF(name);
1194 return err;
1196 if (tp->tp_setattr != NULL) {
1197 err = (*tp->tp_setattr)(v, PyString_AS_STRING(name), value);
1198 Py_DECREF(name);
1199 return err;
1201 Py_DECREF(name);
1202 if (tp->tp_getattr == NULL && tp->tp_getattro == NULL)
1203 PyErr_Format(PyExc_TypeError,
1204 "'%.100s' object has no attributes "
1205 "(%s .%.100s)",
1206 tp->tp_name,
1207 value==NULL ? "del" : "assign to",
1208 PyString_AS_STRING(name));
1209 else
1210 PyErr_Format(PyExc_TypeError,
1211 "'%.100s' object has only read-only attributes "
1212 "(%s .%.100s)",
1213 tp->tp_name,
1214 value==NULL ? "del" : "assign to",
1215 PyString_AS_STRING(name));
1216 return -1;
1219 /* Helper to get a pointer to an object's __dict__ slot, if any */
1221 PyObject **
1222 _PyObject_GetDictPtr(PyObject *obj)
1224 Py_ssize_t dictoffset;
1225 PyTypeObject *tp = obj->ob_type;
1227 if (!(tp->tp_flags & Py_TPFLAGS_HAVE_CLASS))
1228 return NULL;
1229 dictoffset = tp->tp_dictoffset;
1230 if (dictoffset == 0)
1231 return NULL;
1232 if (dictoffset < 0) {
1233 Py_ssize_t tsize;
1234 size_t size;
1236 tsize = ((PyVarObject *)obj)->ob_size;
1237 if (tsize < 0)
1238 tsize = -tsize;
1239 size = _PyObject_VAR_SIZE(tp, tsize);
1241 dictoffset += (long)size;
1242 assert(dictoffset > 0);
1243 assert(dictoffset % SIZEOF_VOID_P == 0);
1245 return (PyObject **) ((char *)obj + dictoffset);
1248 PyObject *
1249 PyObject_SelfIter(PyObject *obj)
1251 Py_INCREF(obj);
1252 return obj;
1255 /* Generic GetAttr functions - put these in your tp_[gs]etattro slot */
1257 PyObject *
1258 PyObject_GenericGetAttr(PyObject *obj, PyObject *name)
1260 PyTypeObject *tp = obj->ob_type;
1261 PyObject *descr = NULL;
1262 PyObject *res = NULL;
1263 descrgetfunc f;
1264 Py_ssize_t dictoffset;
1265 PyObject **dictptr;
1267 if (!PyString_Check(name)){
1268 #ifdef Py_USING_UNICODE
1269 /* The Unicode to string conversion is done here because the
1270 existing tp_setattro slots expect a string object as name
1271 and we wouldn't want to break those. */
1272 if (PyUnicode_Check(name)) {
1273 name = PyUnicode_AsEncodedString(name, NULL, NULL);
1274 if (name == NULL)
1275 return NULL;
1277 else
1278 #endif
1280 PyErr_SetString(PyExc_TypeError,
1281 "attribute name must be string");
1282 return NULL;
1285 else
1286 Py_INCREF(name);
1288 if (tp->tp_dict == NULL) {
1289 if (PyType_Ready(tp) < 0)
1290 goto done;
1293 /* Inline _PyType_Lookup */
1295 Py_ssize_t i, n;
1296 PyObject *mro, *base, *dict;
1298 /* Look in tp_dict of types in MRO */
1299 mro = tp->tp_mro;
1300 assert(mro != NULL);
1301 assert(PyTuple_Check(mro));
1302 n = PyTuple_GET_SIZE(mro);
1303 for (i = 0; i < n; i++) {
1304 base = PyTuple_GET_ITEM(mro, i);
1305 if (PyClass_Check(base))
1306 dict = ((PyClassObject *)base)->cl_dict;
1307 else {
1308 assert(PyType_Check(base));
1309 dict = ((PyTypeObject *)base)->tp_dict;
1311 assert(dict && PyDict_Check(dict));
1312 descr = PyDict_GetItem(dict, name);
1313 if (descr != NULL)
1314 break;
1318 Py_XINCREF(descr);
1320 f = NULL;
1321 if (descr != NULL &&
1322 PyType_HasFeature(descr->ob_type, Py_TPFLAGS_HAVE_CLASS)) {
1323 f = descr->ob_type->tp_descr_get;
1324 if (f != NULL && PyDescr_IsData(descr)) {
1325 res = f(descr, obj, (PyObject *)obj->ob_type);
1326 Py_DECREF(descr);
1327 goto done;
1331 /* Inline _PyObject_GetDictPtr */
1332 dictoffset = tp->tp_dictoffset;
1333 if (dictoffset != 0) {
1334 PyObject *dict;
1335 if (dictoffset < 0) {
1336 Py_ssize_t tsize;
1337 size_t size;
1339 tsize = ((PyVarObject *)obj)->ob_size;
1340 if (tsize < 0)
1341 tsize = -tsize;
1342 size = _PyObject_VAR_SIZE(tp, tsize);
1344 dictoffset += (long)size;
1345 assert(dictoffset > 0);
1346 assert(dictoffset % SIZEOF_VOID_P == 0);
1348 dictptr = (PyObject **) ((char *)obj + dictoffset);
1349 dict = *dictptr;
1350 if (dict != NULL) {
1351 res = PyDict_GetItem(dict, name);
1352 if (res != NULL) {
1353 Py_INCREF(res);
1354 Py_XDECREF(descr);
1355 goto done;
1360 if (f != NULL) {
1361 res = f(descr, obj, (PyObject *)obj->ob_type);
1362 Py_DECREF(descr);
1363 goto done;
1366 if (descr != NULL) {
1367 res = descr;
1368 /* descr was already increfed above */
1369 goto done;
1372 PyErr_Format(PyExc_AttributeError,
1373 "'%.50s' object has no attribute '%.400s'",
1374 tp->tp_name, PyString_AS_STRING(name));
1375 done:
1376 Py_DECREF(name);
1377 return res;
1381 PyObject_GenericSetAttr(PyObject *obj, PyObject *name, PyObject *value)
1383 PyTypeObject *tp = obj->ob_type;
1384 PyObject *descr;
1385 descrsetfunc f;
1386 PyObject **dictptr;
1387 int res = -1;
1389 if (!PyString_Check(name)){
1390 #ifdef Py_USING_UNICODE
1391 /* The Unicode to string conversion is done here because the
1392 existing tp_setattro slots expect a string object as name
1393 and we wouldn't want to break those. */
1394 if (PyUnicode_Check(name)) {
1395 name = PyUnicode_AsEncodedString(name, NULL, NULL);
1396 if (name == NULL)
1397 return -1;
1399 else
1400 #endif
1402 PyErr_SetString(PyExc_TypeError,
1403 "attribute name must be string");
1404 return -1;
1407 else
1408 Py_INCREF(name);
1410 if (tp->tp_dict == NULL) {
1411 if (PyType_Ready(tp) < 0)
1412 goto done;
1415 descr = _PyType_Lookup(tp, name);
1416 f = NULL;
1417 if (descr != NULL &&
1418 PyType_HasFeature(descr->ob_type, Py_TPFLAGS_HAVE_CLASS)) {
1419 f = descr->ob_type->tp_descr_set;
1420 if (f != NULL && PyDescr_IsData(descr)) {
1421 res = f(descr, obj, value);
1422 goto done;
1426 dictptr = _PyObject_GetDictPtr(obj);
1427 if (dictptr != NULL) {
1428 PyObject *dict = *dictptr;
1429 if (dict == NULL && value != NULL) {
1430 dict = PyDict_New();
1431 if (dict == NULL)
1432 goto done;
1433 *dictptr = dict;
1435 if (dict != NULL) {
1436 if (value == NULL)
1437 res = PyDict_DelItem(dict, name);
1438 else
1439 res = PyDict_SetItem(dict, name, value);
1440 if (res < 0 && PyErr_ExceptionMatches(PyExc_KeyError))
1441 PyErr_SetObject(PyExc_AttributeError, name);
1442 goto done;
1446 if (f != NULL) {
1447 res = f(descr, obj, value);
1448 goto done;
1451 if (descr == NULL) {
1452 PyErr_Format(PyExc_AttributeError,
1453 "'%.50s' object has no attribute '%.400s'",
1454 tp->tp_name, PyString_AS_STRING(name));
1455 goto done;
1458 PyErr_Format(PyExc_AttributeError,
1459 "'%.50s' object attribute '%.400s' is read-only",
1460 tp->tp_name, PyString_AS_STRING(name));
1461 done:
1462 Py_DECREF(name);
1463 return res;
1466 /* Test a value used as condition, e.g., in a for or if statement.
1467 Return -1 if an error occurred */
1470 PyObject_IsTrue(PyObject *v)
1472 Py_ssize_t res;
1473 if (v == Py_True)
1474 return 1;
1475 if (v == Py_False)
1476 return 0;
1477 if (v == Py_None)
1478 return 0;
1479 else if (v->ob_type->tp_as_number != NULL &&
1480 v->ob_type->tp_as_number->nb_nonzero != NULL)
1481 res = (*v->ob_type->tp_as_number->nb_nonzero)(v);
1482 else if (v->ob_type->tp_as_mapping != NULL &&
1483 v->ob_type->tp_as_mapping->mp_length != NULL)
1484 res = (*v->ob_type->tp_as_mapping->mp_length)(v);
1485 else if (v->ob_type->tp_as_sequence != NULL &&
1486 v->ob_type->tp_as_sequence->sq_length != NULL)
1487 res = (*v->ob_type->tp_as_sequence->sq_length)(v);
1488 else
1489 return 1;
1490 /* if it is negative, it should be either -1 or -2 */
1491 return (res > 0) ? 1 : Py_SAFE_DOWNCAST(res, Py_ssize_t, int);
1494 /* equivalent of 'not v'
1495 Return -1 if an error occurred */
1498 PyObject_Not(PyObject *v)
1500 int res;
1501 res = PyObject_IsTrue(v);
1502 if (res < 0)
1503 return res;
1504 return res == 0;
1507 /* Coerce two numeric types to the "larger" one.
1508 Increment the reference count on each argument.
1509 Return value:
1510 -1 if an error occurred;
1511 0 if the coercion succeeded (and then the reference counts are increased);
1512 1 if no coercion is possible (and no error is raised).
1515 PyNumber_CoerceEx(PyObject **pv, PyObject **pw)
1517 register PyObject *v = *pv;
1518 register PyObject *w = *pw;
1519 int res;
1521 /* Shortcut only for old-style types */
1522 if (v->ob_type == w->ob_type &&
1523 !PyType_HasFeature(v->ob_type, Py_TPFLAGS_CHECKTYPES))
1525 Py_INCREF(v);
1526 Py_INCREF(w);
1527 return 0;
1529 if (v->ob_type->tp_as_number && v->ob_type->tp_as_number->nb_coerce) {
1530 res = (*v->ob_type->tp_as_number->nb_coerce)(pv, pw);
1531 if (res <= 0)
1532 return res;
1534 if (w->ob_type->tp_as_number && w->ob_type->tp_as_number->nb_coerce) {
1535 res = (*w->ob_type->tp_as_number->nb_coerce)(pw, pv);
1536 if (res <= 0)
1537 return res;
1539 return 1;
1542 /* Coerce two numeric types to the "larger" one.
1543 Increment the reference count on each argument.
1544 Return -1 and raise an exception if no coercion is possible
1545 (and then no reference count is incremented).
1548 PyNumber_Coerce(PyObject **pv, PyObject **pw)
1550 int err = PyNumber_CoerceEx(pv, pw);
1551 if (err <= 0)
1552 return err;
1553 PyErr_SetString(PyExc_TypeError, "number coercion failed");
1554 return -1;
1558 /* Test whether an object can be called */
1561 PyCallable_Check(PyObject *x)
1563 if (x == NULL)
1564 return 0;
1565 if (PyInstance_Check(x)) {
1566 PyObject *call = PyObject_GetAttrString(x, "__call__");
1567 if (call == NULL) {
1568 PyErr_Clear();
1569 return 0;
1571 /* Could test recursively but don't, for fear of endless
1572 recursion if some joker sets self.__call__ = self */
1573 Py_DECREF(call);
1574 return 1;
1576 else {
1577 return x->ob_type->tp_call != NULL;
1581 /* Helper for PyObject_Dir.
1582 Merge the __dict__ of aclass into dict, and recursively also all
1583 the __dict__s of aclass's base classes. The order of merging isn't
1584 defined, as it's expected that only the final set of dict keys is
1585 interesting.
1586 Return 0 on success, -1 on error.
1589 static int
1590 merge_class_dict(PyObject* dict, PyObject* aclass)
1592 PyObject *classdict;
1593 PyObject *bases;
1595 assert(PyDict_Check(dict));
1596 assert(aclass);
1598 /* Merge in the type's dict (if any). */
1599 classdict = PyObject_GetAttrString(aclass, "__dict__");
1600 if (classdict == NULL)
1601 PyErr_Clear();
1602 else {
1603 int status = PyDict_Update(dict, classdict);
1604 Py_DECREF(classdict);
1605 if (status < 0)
1606 return -1;
1609 /* Recursively merge in the base types' (if any) dicts. */
1610 bases = PyObject_GetAttrString(aclass, "__bases__");
1611 if (bases == NULL)
1612 PyErr_Clear();
1613 else {
1614 /* We have no guarantee that bases is a real tuple */
1615 Py_ssize_t i, n;
1616 n = PySequence_Size(bases); /* This better be right */
1617 if (n < 0)
1618 PyErr_Clear();
1619 else {
1620 for (i = 0; i < n; i++) {
1621 int status;
1622 PyObject *base = PySequence_GetItem(bases, i);
1623 if (base == NULL) {
1624 Py_DECREF(bases);
1625 return -1;
1627 status = merge_class_dict(dict, base);
1628 Py_DECREF(base);
1629 if (status < 0) {
1630 Py_DECREF(bases);
1631 return -1;
1635 Py_DECREF(bases);
1637 return 0;
1640 /* Helper for PyObject_Dir.
1641 If obj has an attr named attrname that's a list, merge its string
1642 elements into keys of dict.
1643 Return 0 on success, -1 on error. Errors due to not finding the attr,
1644 or the attr not being a list, are suppressed.
1647 static int
1648 merge_list_attr(PyObject* dict, PyObject* obj, const char *attrname)
1650 PyObject *list;
1651 int result = 0;
1653 assert(PyDict_Check(dict));
1654 assert(obj);
1655 assert(attrname);
1657 list = PyObject_GetAttrString(obj, attrname);
1658 if (list == NULL)
1659 PyErr_Clear();
1661 else if (PyList_Check(list)) {
1662 int i;
1663 for (i = 0; i < PyList_GET_SIZE(list); ++i) {
1664 PyObject *item = PyList_GET_ITEM(list, i);
1665 if (PyString_Check(item)) {
1666 result = PyDict_SetItem(dict, item, Py_None);
1667 if (result < 0)
1668 break;
1673 Py_XDECREF(list);
1674 return result;
1677 /* Like __builtin__.dir(arg). See bltinmodule.c's builtin_dir for the
1678 docstring, which should be kept in synch with this implementation. */
1680 PyObject *
1681 PyObject_Dir(PyObject *arg)
1683 /* Set exactly one of these non-NULL before the end. */
1684 PyObject *result = NULL; /* result list */
1685 PyObject *masterdict = NULL; /* result is masterdict.keys() */
1687 /* If NULL arg, return the locals. */
1688 if (arg == NULL) {
1689 PyObject *locals = PyEval_GetLocals();
1690 if (locals == NULL)
1691 goto error;
1692 result = PyMapping_Keys(locals);
1693 if (result == NULL)
1694 goto error;
1697 /* Elif this is some form of module, we only want its dict. */
1698 else if (PyModule_Check(arg)) {
1699 masterdict = PyObject_GetAttrString(arg, "__dict__");
1700 if (masterdict == NULL)
1701 goto error;
1702 if (!PyDict_Check(masterdict)) {
1703 PyErr_SetString(PyExc_TypeError,
1704 "module.__dict__ is not a dictionary");
1705 goto error;
1709 /* Elif some form of type or class, grab its dict and its bases.
1710 We deliberately don't suck up its __class__, as methods belonging
1711 to the metaclass would probably be more confusing than helpful. */
1712 else if (PyType_Check(arg) || PyClass_Check(arg)) {
1713 masterdict = PyDict_New();
1714 if (masterdict == NULL)
1715 goto error;
1716 if (merge_class_dict(masterdict, arg) < 0)
1717 goto error;
1720 /* Else look at its dict, and the attrs reachable from its class. */
1721 else {
1722 PyObject *itsclass;
1723 /* Create a dict to start with. CAUTION: Not everything
1724 responding to __dict__ returns a dict! */
1725 masterdict = PyObject_GetAttrString(arg, "__dict__");
1726 if (masterdict == NULL) {
1727 PyErr_Clear();
1728 masterdict = PyDict_New();
1730 else if (!PyDict_Check(masterdict)) {
1731 Py_DECREF(masterdict);
1732 masterdict = PyDict_New();
1734 else {
1735 /* The object may have returned a reference to its
1736 dict, so copy it to avoid mutating it. */
1737 PyObject *temp = PyDict_Copy(masterdict);
1738 Py_DECREF(masterdict);
1739 masterdict = temp;
1741 if (masterdict == NULL)
1742 goto error;
1744 /* Merge in __members__ and __methods__ (if any).
1745 XXX Would like this to go away someday; for now, it's
1746 XXX needed to get at im_self etc of method objects. */
1747 if (merge_list_attr(masterdict, arg, "__members__") < 0)
1748 goto error;
1749 if (merge_list_attr(masterdict, arg, "__methods__") < 0)
1750 goto error;
1752 /* Merge in attrs reachable from its class.
1753 CAUTION: Not all objects have a __class__ attr. */
1754 itsclass = PyObject_GetAttrString(arg, "__class__");
1755 if (itsclass == NULL)
1756 PyErr_Clear();
1757 else {
1758 int status = merge_class_dict(masterdict, itsclass);
1759 Py_DECREF(itsclass);
1760 if (status < 0)
1761 goto error;
1765 assert((result == NULL) ^ (masterdict == NULL));
1766 if (masterdict != NULL) {
1767 /* The result comes from its keys. */
1768 assert(result == NULL);
1769 result = PyDict_Keys(masterdict);
1770 if (result == NULL)
1771 goto error;
1774 assert(result);
1775 if (!PyList_Check(result)) {
1776 PyErr_SetString(PyExc_TypeError,
1777 "Expected keys() to be a list.");
1778 goto error;
1780 if (PyList_Sort(result) != 0)
1781 goto error;
1782 else
1783 goto normal_return;
1785 error:
1786 Py_XDECREF(result);
1787 result = NULL;
1788 /* fall through */
1789 normal_return:
1790 Py_XDECREF(masterdict);
1791 return result;
1795 NoObject is usable as a non-NULL undefined value, used by the macro None.
1796 There is (and should be!) no way to create other objects of this type,
1797 so there is exactly one (which is indestructible, by the way).
1798 (XXX This type and the type of NotImplemented below should be unified.)
1801 /* ARGSUSED */
1802 static PyObject *
1803 none_repr(PyObject *op)
1805 return PyString_FromString("None");
1808 /* ARGUSED */
1809 static void
1810 none_dealloc(PyObject* ignore)
1812 /* This should never get called, but we also don't want to SEGV if
1813 * we accidently decref None out of existance.
1815 Py_FatalError("deallocating None");
1819 static PyTypeObject PyNone_Type = {
1820 PyObject_HEAD_INIT(&PyType_Type)
1822 "NoneType",
1825 none_dealloc, /*tp_dealloc*/ /*never called*/
1826 0, /*tp_print*/
1827 0, /*tp_getattr*/
1828 0, /*tp_setattr*/
1829 0, /*tp_compare*/
1830 none_repr, /*tp_repr*/
1831 0, /*tp_as_number*/
1832 0, /*tp_as_sequence*/
1833 0, /*tp_as_mapping*/
1834 0, /*tp_hash */
1837 PyObject _Py_NoneStruct = {
1838 PyObject_HEAD_INIT(&PyNone_Type)
1841 /* NotImplemented is an object that can be used to signal that an
1842 operation is not implemented for the given type combination. */
1844 static PyObject *
1845 NotImplemented_repr(PyObject *op)
1847 return PyString_FromString("NotImplemented");
1850 static PyTypeObject PyNotImplemented_Type = {
1851 PyObject_HEAD_INIT(&PyType_Type)
1853 "NotImplementedType",
1856 none_dealloc, /*tp_dealloc*/ /*never called*/
1857 0, /*tp_print*/
1858 0, /*tp_getattr*/
1859 0, /*tp_setattr*/
1860 0, /*tp_compare*/
1861 NotImplemented_repr, /*tp_repr*/
1862 0, /*tp_as_number*/
1863 0, /*tp_as_sequence*/
1864 0, /*tp_as_mapping*/
1865 0, /*tp_hash */
1868 PyObject _Py_NotImplementedStruct = {
1869 PyObject_HEAD_INIT(&PyNotImplemented_Type)
1872 void
1873 _Py_ReadyTypes(void)
1875 if (PyType_Ready(&PyType_Type) < 0)
1876 Py_FatalError("Can't initialize 'type'");
1878 if (PyType_Ready(&_PyWeakref_RefType) < 0)
1879 Py_FatalError("Can't initialize 'weakref'");
1881 if (PyType_Ready(&PyBool_Type) < 0)
1882 Py_FatalError("Can't initialize 'bool'");
1884 if (PyType_Ready(&PyString_Type) < 0)
1885 Py_FatalError("Can't initialize 'str'");
1887 if (PyType_Ready(&PyList_Type) < 0)
1888 Py_FatalError("Can't initialize 'list'");
1890 if (PyType_Ready(&PyNone_Type) < 0)
1891 Py_FatalError("Can't initialize type(None)");
1893 if (PyType_Ready(&PyNotImplemented_Type) < 0)
1894 Py_FatalError("Can't initialize type(NotImplemented)");
1898 #ifdef Py_TRACE_REFS
1900 void
1901 _Py_NewReference(PyObject *op)
1903 _Py_INC_REFTOTAL;
1904 op->ob_refcnt = 1;
1905 _Py_AddToAllObjects(op, 1);
1906 _Py_INC_TPALLOCS(op);
1909 void
1910 _Py_ForgetReference(register PyObject *op)
1912 #ifdef SLOW_UNREF_CHECK
1913 register PyObject *p;
1914 #endif
1915 if (op->ob_refcnt < 0)
1916 Py_FatalError("UNREF negative refcnt");
1917 if (op == &refchain ||
1918 op->_ob_prev->_ob_next != op || op->_ob_next->_ob_prev != op)
1919 Py_FatalError("UNREF invalid object");
1920 #ifdef SLOW_UNREF_CHECK
1921 for (p = refchain._ob_next; p != &refchain; p = p->_ob_next) {
1922 if (p == op)
1923 break;
1925 if (p == &refchain) /* Not found */
1926 Py_FatalError("UNREF unknown object");
1927 #endif
1928 op->_ob_next->_ob_prev = op->_ob_prev;
1929 op->_ob_prev->_ob_next = op->_ob_next;
1930 op->_ob_next = op->_ob_prev = NULL;
1931 _Py_INC_TPFREES(op);
1934 void
1935 _Py_Dealloc(PyObject *op)
1937 destructor dealloc = op->ob_type->tp_dealloc;
1938 _Py_ForgetReference(op);
1939 (*dealloc)(op);
1942 /* Print all live objects. Because PyObject_Print is called, the
1943 * interpreter must be in a healthy state.
1945 void
1946 _Py_PrintReferences(FILE *fp)
1948 PyObject *op;
1949 fprintf(fp, "Remaining objects:\n");
1950 for (op = refchain._ob_next; op != &refchain; op = op->_ob_next) {
1951 fprintf(fp, "%p [%" PY_FORMAT_SIZE_T "d] ", op, op->ob_refcnt);
1952 if (PyObject_Print(op, fp, 0) != 0)
1953 PyErr_Clear();
1954 putc('\n', fp);
1958 /* Print the addresses of all live objects. Unlike _Py_PrintReferences, this
1959 * doesn't make any calls to the Python C API, so is always safe to call.
1961 void
1962 _Py_PrintReferenceAddresses(FILE *fp)
1964 PyObject *op;
1965 fprintf(fp, "Remaining object addresses:\n");
1966 for (op = refchain._ob_next; op != &refchain; op = op->_ob_next)
1967 fprintf(fp, "%p [%" PY_FORMAT_SIZE_T "d] %s\n", op,
1968 op->ob_refcnt, op->ob_type->tp_name);
1971 PyObject *
1972 _Py_GetObjects(PyObject *self, PyObject *args)
1974 int i, n;
1975 PyObject *t = NULL;
1976 PyObject *res, *op;
1978 if (!PyArg_ParseTuple(args, "i|O", &n, &t))
1979 return NULL;
1980 op = refchain._ob_next;
1981 res = PyList_New(0);
1982 if (res == NULL)
1983 return NULL;
1984 for (i = 0; (n == 0 || i < n) && op != &refchain; i++) {
1985 while (op == self || op == args || op == res || op == t ||
1986 (t != NULL && op->ob_type != (PyTypeObject *) t)) {
1987 op = op->_ob_next;
1988 if (op == &refchain)
1989 return res;
1991 if (PyList_Append(res, op) < 0) {
1992 Py_DECREF(res);
1993 return NULL;
1995 op = op->_ob_next;
1997 return res;
2000 #endif
2003 /* Hack to force loading of cobject.o */
2004 PyTypeObject *_Py_cobject_hack = &PyCObject_Type;
2007 /* Hack to force loading of abstract.o */
2008 Py_ssize_t (*_Py_abstract_hack)(PyObject *) = PyObject_Size;
2011 /* Python's malloc wrappers (see pymem.h) */
2013 void *
2014 PyMem_Malloc(size_t nbytes)
2016 return PyMem_MALLOC(nbytes);
2019 void *
2020 PyMem_Realloc(void *p, size_t nbytes)
2022 return PyMem_REALLOC(p, nbytes);
2025 void
2026 PyMem_Free(void *p)
2028 PyMem_FREE(p);
2032 /* These methods are used to control infinite recursion in repr, str, print,
2033 etc. Container objects that may recursively contain themselves,
2034 e.g. builtin dictionaries and lists, should used Py_ReprEnter() and
2035 Py_ReprLeave() to avoid infinite recursion.
2037 Py_ReprEnter() returns 0 the first time it is called for a particular
2038 object and 1 every time thereafter. It returns -1 if an exception
2039 occurred. Py_ReprLeave() has no return value.
2041 See dictobject.c and listobject.c for examples of use.
2044 #define KEY "Py_Repr"
2047 Py_ReprEnter(PyObject *obj)
2049 PyObject *dict;
2050 PyObject *list;
2051 Py_ssize_t i;
2053 dict = PyThreadState_GetDict();
2054 if (dict == NULL)
2055 return 0;
2056 list = PyDict_GetItemString(dict, KEY);
2057 if (list == NULL) {
2058 list = PyList_New(0);
2059 if (list == NULL)
2060 return -1;
2061 if (PyDict_SetItemString(dict, KEY, list) < 0)
2062 return -1;
2063 Py_DECREF(list);
2065 i = PyList_GET_SIZE(list);
2066 while (--i >= 0) {
2067 if (PyList_GET_ITEM(list, i) == obj)
2068 return 1;
2070 PyList_Append(list, obj);
2071 return 0;
2074 void
2075 Py_ReprLeave(PyObject *obj)
2077 PyObject *dict;
2078 PyObject *list;
2079 Py_ssize_t i;
2081 dict = PyThreadState_GetDict();
2082 if (dict == NULL)
2083 return;
2084 list = PyDict_GetItemString(dict, KEY);
2085 if (list == NULL || !PyList_Check(list))
2086 return;
2087 i = PyList_GET_SIZE(list);
2088 /* Count backwards because we always expect obj to be list[-1] */
2089 while (--i >= 0) {
2090 if (PyList_GET_ITEM(list, i) == obj) {
2091 PyList_SetSlice(list, i, i + 1, NULL);
2092 break;
2097 /* Trashcan support. */
2099 /* Current call-stack depth of tp_dealloc calls. */
2100 int _PyTrash_delete_nesting = 0;
2102 /* List of objects that still need to be cleaned up, singly linked via their
2103 * gc headers' gc_prev pointers.
2105 PyObject *_PyTrash_delete_later = NULL;
2107 /* Add op to the _PyTrash_delete_later list. Called when the current
2108 * call-stack depth gets large. op must be a currently untracked gc'ed
2109 * object, with refcount 0. Py_DECREF must already have been called on it.
2111 void
2112 _PyTrash_deposit_object(PyObject *op)
2114 assert(PyObject_IS_GC(op));
2115 assert(_Py_AS_GC(op)->gc.gc_refs == _PyGC_REFS_UNTRACKED);
2116 assert(op->ob_refcnt == 0);
2117 _Py_AS_GC(op)->gc.gc_prev = (PyGC_Head *)_PyTrash_delete_later;
2118 _PyTrash_delete_later = op;
2121 /* Dealloccate all the objects in the _PyTrash_delete_later list. Called when
2122 * the call-stack unwinds again.
2124 void
2125 _PyTrash_destroy_chain(void)
2127 while (_PyTrash_delete_later) {
2128 PyObject *op = _PyTrash_delete_later;
2129 destructor dealloc = op->ob_type->tp_dealloc;
2131 _PyTrash_delete_later =
2132 (PyObject*) _Py_AS_GC(op)->gc.gc_prev;
2134 /* Call the deallocator directly. This used to try to
2135 * fool Py_DECREF into calling it indirectly, but
2136 * Py_DECREF was already called on this object, and in
2137 * assorted non-release builds calling Py_DECREF again ends
2138 * up distorting allocation statistics.
2140 assert(op->ob_refcnt == 0);
2141 ++_PyTrash_delete_nesting;
2142 (*dealloc)(op);
2143 --_PyTrash_delete_nesting;
2147 #ifdef __cplusplus
2149 #endif