]> git.proxmox.com Git - mirror_edk2.git/blob - AppPkg/Applications/Python/Python-2.7.2/Objects/object.c
EmbeddedPkg: Extend NvVarStoreFormattedLib LIBRARY_CLASS
[mirror_edk2.git] / AppPkg / Applications / Python / Python-2.7.2 / Objects / object.c
1
2 /* Generic object operations; and implementation of None (NoObject) */
3
4 #include "Python.h"
5 #include "frameobject.h"
6
7 #ifdef __cplusplus
8 extern "C" {
9 #endif
10
11 #ifdef Py_REF_DEBUG
12 Py_ssize_t _Py_RefTotal;
13
14 Py_ssize_t
15 _Py_GetRefTotal(void)
16 {
17 PyObject *o;
18 Py_ssize_t total = _Py_RefTotal;
19 /* ignore the references to the dummy object of the dicts and sets
20 because they are not reliable and not useful (now that the
21 hash table code is well-tested) */
22 o = _PyDict_Dummy();
23 if (o != NULL)
24 total -= o->ob_refcnt;
25 o = _PySet_Dummy();
26 if (o != NULL)
27 total -= o->ob_refcnt;
28 return total;
29 }
30 #endif /* Py_REF_DEBUG */
31
32 int Py_DivisionWarningFlag;
33 int Py_Py3kWarningFlag;
34
35 /* Object allocation routines used by NEWOBJ and NEWVAROBJ macros.
36 These are used by the individual routines for object creation.
37 Do not call them otherwise, they do not initialize the object! */
38
39 #ifdef Py_TRACE_REFS
40 /* Head of circular doubly-linked list of all objects. These are linked
41 * together via the _ob_prev and _ob_next members of a PyObject, which
42 * exist only in a Py_TRACE_REFS build.
43 */
44 static PyObject refchain = {&refchain, &refchain};
45
46 /* Insert op at the front of the list of all objects. If force is true,
47 * op is added even if _ob_prev and _ob_next are non-NULL already. If
48 * force is false amd _ob_prev or _ob_next are non-NULL, do nothing.
49 * force should be true if and only if op points to freshly allocated,
50 * uninitialized memory, or you've unlinked op from the list and are
51 * relinking it into the front.
52 * Note that objects are normally added to the list via _Py_NewReference,
53 * which is called by PyObject_Init. Not all objects are initialized that
54 * way, though; exceptions include statically allocated type objects, and
55 * statically allocated singletons (like Py_True and Py_None).
56 */
57 void
58 _Py_AddToAllObjects(PyObject *op, int force)
59 {
60 #ifdef Py_DEBUG
61 if (!force) {
62 /* If it's initialized memory, op must be in or out of
63 * the list unambiguously.
64 */
65 assert((op->_ob_prev == NULL) == (op->_ob_next == NULL));
66 }
67 #endif
68 if (force || op->_ob_prev == NULL) {
69 op->_ob_next = refchain._ob_next;
70 op->_ob_prev = &refchain;
71 refchain._ob_next->_ob_prev = op;
72 refchain._ob_next = op;
73 }
74 }
75 #endif /* Py_TRACE_REFS */
76
77 #ifdef COUNT_ALLOCS
78 static PyTypeObject *type_list;
79 /* All types are added to type_list, at least when
80 they get one object created. That makes them
81 immortal, which unfortunately contributes to
82 garbage itself. If unlist_types_without_objects
83 is set, they will be removed from the type_list
84 once the last object is deallocated. */
85 static int unlist_types_without_objects;
86 extern Py_ssize_t tuple_zero_allocs, fast_tuple_allocs;
87 extern Py_ssize_t quick_int_allocs, quick_neg_int_allocs;
88 extern Py_ssize_t null_strings, one_strings;
89 void
90 dump_counts(FILE* f)
91 {
92 PyTypeObject *tp;
93
94 for (tp = type_list; tp; tp = tp->tp_next)
95 fprintf(f, "%s alloc'd: %" PY_FORMAT_SIZE_T "d, "
96 "freed: %" PY_FORMAT_SIZE_T "d, "
97 "max in use: %" PY_FORMAT_SIZE_T "d\n",
98 tp->tp_name, tp->tp_allocs, tp->tp_frees,
99 tp->tp_maxalloc);
100 fprintf(f, "fast tuple allocs: %" PY_FORMAT_SIZE_T "d, "
101 "empty: %" PY_FORMAT_SIZE_T "d\n",
102 fast_tuple_allocs, tuple_zero_allocs);
103 fprintf(f, "fast int allocs: pos: %" PY_FORMAT_SIZE_T "d, "
104 "neg: %" PY_FORMAT_SIZE_T "d\n",
105 quick_int_allocs, quick_neg_int_allocs);
106 fprintf(f, "null strings: %" PY_FORMAT_SIZE_T "d, "
107 "1-strings: %" PY_FORMAT_SIZE_T "d\n",
108 null_strings, one_strings);
109 }
110
111 PyObject *
112 get_counts(void)
113 {
114 PyTypeObject *tp;
115 PyObject *result;
116 PyObject *v;
117
118 result = PyList_New(0);
119 if (result == NULL)
120 return NULL;
121 for (tp = type_list; tp; tp = tp->tp_next) {
122 v = Py_BuildValue("(snnn)", tp->tp_name, tp->tp_allocs,
123 tp->tp_frees, tp->tp_maxalloc);
124 if (v == NULL) {
125 Py_DECREF(result);
126 return NULL;
127 }
128 if (PyList_Append(result, v) < 0) {
129 Py_DECREF(v);
130 Py_DECREF(result);
131 return NULL;
132 }
133 Py_DECREF(v);
134 }
135 return result;
136 }
137
138 void
139 inc_count(PyTypeObject *tp)
140 {
141 if (tp->tp_next == NULL && tp->tp_prev == NULL) {
142 /* first time; insert in linked list */
143 if (tp->tp_next != NULL) /* sanity check */
144 Py_FatalError("XXX inc_count sanity check");
145 if (type_list)
146 type_list->tp_prev = tp;
147 tp->tp_next = type_list;
148 /* Note that as of Python 2.2, heap-allocated type objects
149 * can go away, but this code requires that they stay alive
150 * until program exit. That's why we're careful with
151 * refcounts here. type_list gets a new reference to tp,
152 * while ownership of the reference type_list used to hold
153 * (if any) was transferred to tp->tp_next in the line above.
154 * tp is thus effectively immortal after this.
155 */
156 Py_INCREF(tp);
157 type_list = tp;
158 #ifdef Py_TRACE_REFS
159 /* Also insert in the doubly-linked list of all objects,
160 * if not already there.
161 */
162 _Py_AddToAllObjects((PyObject *)tp, 0);
163 #endif
164 }
165 tp->tp_allocs++;
166 if (tp->tp_allocs - tp->tp_frees > tp->tp_maxalloc)
167 tp->tp_maxalloc = tp->tp_allocs - tp->tp_frees;
168 }
169
170 void dec_count(PyTypeObject *tp)
171 {
172 tp->tp_frees++;
173 if (unlist_types_without_objects &&
174 tp->tp_allocs == tp->tp_frees) {
175 /* unlink the type from type_list */
176 if (tp->tp_prev)
177 tp->tp_prev->tp_next = tp->tp_next;
178 else
179 type_list = tp->tp_next;
180 if (tp->tp_next)
181 tp->tp_next->tp_prev = tp->tp_prev;
182 tp->tp_next = tp->tp_prev = NULL;
183 Py_DECREF(tp);
184 }
185 }
186
187 #endif
188
189 #ifdef Py_REF_DEBUG
190 /* Log a fatal error; doesn't return. */
191 void
192 _Py_NegativeRefcount(const char *fname, int lineno, PyObject *op)
193 {
194 char buf[300];
195
196 PyOS_snprintf(buf, sizeof(buf),
197 "%s:%i object at %p has negative ref count "
198 "%" PY_FORMAT_SIZE_T "d",
199 fname, lineno, op, op->ob_refcnt);
200 Py_FatalError(buf);
201 }
202
203 #endif /* Py_REF_DEBUG */
204
205 void
206 Py_IncRef(PyObject *o)
207 {
208 Py_XINCREF(o);
209 }
210
211 void
212 Py_DecRef(PyObject *o)
213 {
214 Py_XDECREF(o);
215 }
216
217 PyObject *
218 PyObject_Init(PyObject *op, PyTypeObject *tp)
219 {
220 if (op == NULL)
221 return PyErr_NoMemory();
222 /* Any changes should be reflected in PyObject_INIT (objimpl.h) */
223 Py_TYPE(op) = tp;
224 _Py_NewReference(op);
225 return op;
226 }
227
228 PyVarObject *
229 PyObject_InitVar(PyVarObject *op, PyTypeObject *tp, Py_ssize_t size)
230 {
231 if (op == NULL)
232 return (PyVarObject *) PyErr_NoMemory();
233 /* Any changes should be reflected in PyObject_INIT_VAR */
234 op->ob_size = size;
235 Py_TYPE(op) = tp;
236 _Py_NewReference((PyObject *)op);
237 return op;
238 }
239
240 PyObject *
241 _PyObject_New(PyTypeObject *tp)
242 {
243 PyObject *op;
244 op = (PyObject *) PyObject_MALLOC(_PyObject_SIZE(tp));
245 if (op == NULL)
246 return PyErr_NoMemory();
247 return PyObject_INIT(op, tp);
248 }
249
250 PyVarObject *
251 _PyObject_NewVar(PyTypeObject *tp, Py_ssize_t nitems)
252 {
253 PyVarObject *op;
254 const size_t size = _PyObject_VAR_SIZE(tp, nitems);
255 op = (PyVarObject *) PyObject_MALLOC(size);
256 if (op == NULL)
257 return (PyVarObject *)PyErr_NoMemory();
258 return PyObject_INIT_VAR(op, tp, nitems);
259 }
260
261 /* for binary compatibility with 2.2 */
262 #undef _PyObject_Del
263 void
264 _PyObject_Del(PyObject *op)
265 {
266 PyObject_FREE(op);
267 }
268
269 /* Implementation of PyObject_Print with recursion checking */
270 static int
271 internal_print(PyObject *op, FILE *fp, int flags, int nesting)
272 {
273 int ret = 0;
274 if (nesting > 10) {
275 PyErr_SetString(PyExc_RuntimeError, "print recursion");
276 return -1;
277 }
278 if (PyErr_CheckSignals())
279 return -1;
280 #ifdef USE_STACKCHECK
281 if (PyOS_CheckStack()) {
282 PyErr_SetString(PyExc_MemoryError, "stack overflow");
283 return -1;
284 }
285 #endif
286 clearerr(fp); /* Clear any previous error condition */
287 if (op == NULL) {
288 Py_BEGIN_ALLOW_THREADS
289 fprintf(fp, "<nil>");
290 Py_END_ALLOW_THREADS
291 }
292 else {
293 if (op->ob_refcnt <= 0)
294 /* XXX(twouters) cast refcount to long until %zd is
295 universally available */
296 Py_BEGIN_ALLOW_THREADS
297 fprintf(fp, "<refcnt %ld at %p>",
298 (long)op->ob_refcnt, op);
299 Py_END_ALLOW_THREADS
300 else if (Py_TYPE(op)->tp_print == NULL) {
301 PyObject *s;
302 if (flags & Py_PRINT_RAW)
303 s = PyObject_Str(op);
304 else
305 s = PyObject_Repr(op);
306 if (s == NULL)
307 ret = -1;
308 else {
309 ret = internal_print(s, fp, Py_PRINT_RAW,
310 nesting+1);
311 }
312 Py_XDECREF(s);
313 }
314 else
315 ret = (*Py_TYPE(op)->tp_print)(op, fp, flags);
316 }
317 if (ret == 0) {
318 if (ferror(fp)) {
319 PyErr_SetFromErrno(PyExc_IOError);
320 clearerr(fp);
321 ret = -1;
322 }
323 }
324 return ret;
325 }
326
327 int
328 PyObject_Print(PyObject *op, FILE *fp, int flags)
329 {
330 return internal_print(op, fp, flags, 0);
331 }
332
333
334 /* For debugging convenience. See Misc/gdbinit for some useful gdb hooks */
335 void _PyObject_Dump(PyObject* op)
336 {
337 if (op == NULL)
338 fprintf(stderr, "NULL\n");
339 else {
340 #ifdef WITH_THREAD
341 PyGILState_STATE gil;
342 #endif
343 fprintf(stderr, "object : ");
344 #ifdef WITH_THREAD
345 gil = PyGILState_Ensure();
346 #endif
347 (void)PyObject_Print(op, stderr, 0);
348 #ifdef WITH_THREAD
349 PyGILState_Release(gil);
350 #endif
351 /* XXX(twouters) cast refcount to long until %zd is
352 universally available */
353 fprintf(stderr, "\n"
354 "type : %s\n"
355 "refcount: %ld\n"
356 "address : %p\n",
357 Py_TYPE(op)==NULL ? "NULL" : Py_TYPE(op)->tp_name,
358 (long)op->ob_refcnt,
359 op);
360 }
361 }
362
363 PyObject *
364 PyObject_Repr(PyObject *v)
365 {
366 if (PyErr_CheckSignals())
367 return NULL;
368 #ifdef USE_STACKCHECK
369 if (PyOS_CheckStack()) {
370 PyErr_SetString(PyExc_MemoryError, "stack overflow");
371 return NULL;
372 }
373 #endif
374 if (v == NULL)
375 return PyString_FromString("<NULL>");
376 else if (Py_TYPE(v)->tp_repr == NULL)
377 return PyString_FromFormat("<%s object at %p>",
378 Py_TYPE(v)->tp_name, v);
379 else {
380 PyObject *res;
381 res = (*Py_TYPE(v)->tp_repr)(v);
382 if (res == NULL)
383 return NULL;
384 #ifdef Py_USING_UNICODE
385 if (PyUnicode_Check(res)) {
386 PyObject* str;
387 str = PyUnicode_AsEncodedString(res, NULL, NULL);
388 Py_DECREF(res);
389 if (str)
390 res = str;
391 else
392 return NULL;
393 }
394 #endif
395 if (!PyString_Check(res)) {
396 PyErr_Format(PyExc_TypeError,
397 "__repr__ returned non-string (type %.200s)",
398 Py_TYPE(res)->tp_name);
399 Py_DECREF(res);
400 return NULL;
401 }
402 return res;
403 }
404 }
405
406 PyObject *
407 _PyObject_Str(PyObject *v)
408 {
409 PyObject *res;
410 int type_ok;
411 if (v == NULL)
412 return PyString_FromString("<NULL>");
413 if (PyString_CheckExact(v)) {
414 Py_INCREF(v);
415 return v;
416 }
417 #ifdef Py_USING_UNICODE
418 if (PyUnicode_CheckExact(v)) {
419 Py_INCREF(v);
420 return v;
421 }
422 #endif
423 if (Py_TYPE(v)->tp_str == NULL)
424 return PyObject_Repr(v);
425
426 /* It is possible for a type to have a tp_str representation that loops
427 infinitely. */
428 if (Py_EnterRecursiveCall(" while getting the str of an object"))
429 return NULL;
430 res = (*Py_TYPE(v)->tp_str)(v);
431 Py_LeaveRecursiveCall();
432 if (res == NULL)
433 return NULL;
434 type_ok = PyString_Check(res);
435 #ifdef Py_USING_UNICODE
436 type_ok = type_ok || PyUnicode_Check(res);
437 #endif
438 if (!type_ok) {
439 PyErr_Format(PyExc_TypeError,
440 "__str__ returned non-string (type %.200s)",
441 Py_TYPE(res)->tp_name);
442 Py_DECREF(res);
443 return NULL;
444 }
445 return res;
446 }
447
448 PyObject *
449 PyObject_Str(PyObject *v)
450 {
451 PyObject *res = _PyObject_Str(v);
452 if (res == NULL)
453 return NULL;
454 #ifdef Py_USING_UNICODE
455 if (PyUnicode_Check(res)) {
456 PyObject* str;
457 str = PyUnicode_AsEncodedString(res, NULL, NULL);
458 Py_DECREF(res);
459 if (str)
460 res = str;
461 else
462 return NULL;
463 }
464 #endif
465 assert(PyString_Check(res));
466 return res;
467 }
468
469 #ifdef Py_USING_UNICODE
470 PyObject *
471 PyObject_Unicode(PyObject *v)
472 {
473 PyObject *res = NULL;
474 PyObject *func = NULL;
475 PyObject *str = NULL;
476 int unicode_method_found = 0;
477 static PyObject *unicodestr = NULL;
478
479 if (v == NULL) {
480 res = PyString_FromString("<NULL>");
481 if (res == NULL)
482 return NULL;
483 str = PyUnicode_FromEncodedObject(res, NULL, "strict");
484 Py_DECREF(res);
485 return str;
486 } else if (PyUnicode_CheckExact(v)) {
487 Py_INCREF(v);
488 return v;
489 }
490
491 if (PyInstance_Check(v)) {
492 /* We're an instance of a classic class */
493 /* Try __unicode__ from the instance -- alas we have no type */
494 func = PyObject_GetAttr(v, unicodestr);
495 if (func != NULL) {
496 unicode_method_found = 1;
497 res = PyObject_CallFunctionObjArgs(func, NULL);
498 Py_DECREF(func);
499 }
500 else {
501 PyErr_Clear();
502 }
503 }
504 else {
505 /* Not a classic class instance, try __unicode__. */
506 func = _PyObject_LookupSpecial(v, "__unicode__", &unicodestr);
507 if (func != NULL) {
508 unicode_method_found = 1;
509 res = PyObject_CallFunctionObjArgs(func, NULL);
510 Py_DECREF(func);
511 }
512 else if (PyErr_Occurred())
513 return NULL;
514 }
515
516 /* Didn't find __unicode__ */
517 if (!unicode_method_found) {
518 if (PyUnicode_Check(v)) {
519 /* For a Unicode subtype that's didn't overwrite __unicode__,
520 return a true Unicode object with the same data. */
521 return PyUnicode_FromUnicode(PyUnicode_AS_UNICODE(v),
522 PyUnicode_GET_SIZE(v));
523 }
524 if (PyString_CheckExact(v)) {
525 Py_INCREF(v);
526 res = v;
527 }
528 else {
529 if (Py_TYPE(v)->tp_str != NULL)
530 res = (*Py_TYPE(v)->tp_str)(v);
531 else
532 res = PyObject_Repr(v);
533 }
534 }
535
536 if (res == NULL)
537 return NULL;
538 if (!PyUnicode_Check(res)) {
539 str = PyUnicode_FromEncodedObject(res, NULL, "strict");
540 Py_DECREF(res);
541 res = str;
542 }
543 return res;
544 }
545 #endif
546
547
548 /* Helper to warn about deprecated tp_compare return values. Return:
549 -2 for an exception;
550 -1 if v < w;
551 0 if v == w;
552 1 if v > w.
553 (This function cannot return 2.)
554 */
555 static int
556 adjust_tp_compare(int c)
557 {
558 if (PyErr_Occurred()) {
559 if (c != -1 && c != -2) {
560 PyObject *t, *v, *tb;
561 PyErr_Fetch(&t, &v, &tb);
562 if (PyErr_Warn(PyExc_RuntimeWarning,
563 "tp_compare didn't return -1 or -2 "
564 "for exception") < 0) {
565 Py_XDECREF(t);
566 Py_XDECREF(v);
567 Py_XDECREF(tb);
568 }
569 else
570 PyErr_Restore(t, v, tb);
571 }
572 return -2;
573 }
574 else if (c < -1 || c > 1) {
575 if (PyErr_Warn(PyExc_RuntimeWarning,
576 "tp_compare didn't return -1, 0 or 1") < 0)
577 return -2;
578 else
579 return c < -1 ? -1 : 1;
580 }
581 else {
582 assert(c >= -1 && c <= 1);
583 return c;
584 }
585 }
586
587
588 /* Macro to get the tp_richcompare field of a type if defined */
589 #define RICHCOMPARE(t) (PyType_HasFeature((t), Py_TPFLAGS_HAVE_RICHCOMPARE) \
590 ? (t)->tp_richcompare : NULL)
591
592 /* Map rich comparison operators to their swapped version, e.g. LT --> GT */
593 int _Py_SwappedOp[] = {Py_GT, Py_GE, Py_EQ, Py_NE, Py_LT, Py_LE};
594
595 /* Try a genuine rich comparison, returning an object. Return:
596 NULL for exception;
597 NotImplemented if this particular rich comparison is not implemented or
598 undefined;
599 some object not equal to NotImplemented if it is implemented
600 (this latter object may not be a Boolean).
601 */
602 static PyObject *
603 try_rich_compare(PyObject *v, PyObject *w, int op)
604 {
605 richcmpfunc f;
606 PyObject *res;
607
608 if (v->ob_type != w->ob_type &&
609 PyType_IsSubtype(w->ob_type, v->ob_type) &&
610 (f = RICHCOMPARE(w->ob_type)) != NULL) {
611 res = (*f)(w, v, _Py_SwappedOp[op]);
612 if (res != Py_NotImplemented)
613 return res;
614 Py_DECREF(res);
615 }
616 if ((f = RICHCOMPARE(v->ob_type)) != NULL) {
617 res = (*f)(v, w, op);
618 if (res != Py_NotImplemented)
619 return res;
620 Py_DECREF(res);
621 }
622 if ((f = RICHCOMPARE(w->ob_type)) != NULL) {
623 return (*f)(w, v, _Py_SwappedOp[op]);
624 }
625 res = Py_NotImplemented;
626 Py_INCREF(res);
627 return res;
628 }
629
630 /* Try a genuine rich comparison, returning an int. Return:
631 -1 for exception (including the case where try_rich_compare() returns an
632 object that's not a Boolean);
633 0 if the outcome is false;
634 1 if the outcome is true;
635 2 if this particular rich comparison is not implemented or undefined.
636 */
637 static int
638 try_rich_compare_bool(PyObject *v, PyObject *w, int op)
639 {
640 PyObject *res;
641 int ok;
642
643 if (RICHCOMPARE(v->ob_type) == NULL && RICHCOMPARE(w->ob_type) == NULL)
644 return 2; /* Shortcut, avoid INCREF+DECREF */
645 res = try_rich_compare(v, w, op);
646 if (res == NULL)
647 return -1;
648 if (res == Py_NotImplemented) {
649 Py_DECREF(res);
650 return 2;
651 }
652 ok = PyObject_IsTrue(res);
653 Py_DECREF(res);
654 return ok;
655 }
656
657 /* Try rich comparisons to determine a 3-way comparison. Return:
658 -2 for an exception;
659 -1 if v < w;
660 0 if v == w;
661 1 if v > w;
662 2 if this particular rich comparison is not implemented or undefined.
663 */
664 static int
665 try_rich_to_3way_compare(PyObject *v, PyObject *w)
666 {
667 static struct { int op; int outcome; } tries[3] = {
668 /* Try this operator, and if it is true, use this outcome: */
669 {Py_EQ, 0},
670 {Py_LT, -1},
671 {Py_GT, 1},
672 };
673 int i;
674
675 if (RICHCOMPARE(v->ob_type) == NULL && RICHCOMPARE(w->ob_type) == NULL)
676 return 2; /* Shortcut */
677
678 for (i = 0; i < 3; i++) {
679 switch (try_rich_compare_bool(v, w, tries[i].op)) {
680 case -1:
681 return -2;
682 case 1:
683 return tries[i].outcome;
684 }
685 }
686
687 return 2;
688 }
689
690 /* Try a 3-way comparison, returning an int. Return:
691 -2 for an exception;
692 -1 if v < w;
693 0 if v == w;
694 1 if v > w;
695 2 if this particular 3-way comparison is not implemented or undefined.
696 */
697 static int
698 try_3way_compare(PyObject *v, PyObject *w)
699 {
700 int c;
701 cmpfunc f;
702
703 /* Comparisons involving instances are given to instance_compare,
704 which has the same return conventions as this function. */
705
706 f = v->ob_type->tp_compare;
707 if (PyInstance_Check(v))
708 return (*f)(v, w);
709 if (PyInstance_Check(w))
710 return (*w->ob_type->tp_compare)(v, w);
711
712 /* If both have the same (non-NULL) tp_compare, use it. */
713 if (f != NULL && f == w->ob_type->tp_compare) {
714 c = (*f)(v, w);
715 return adjust_tp_compare(c);
716 }
717
718 /* If either tp_compare is _PyObject_SlotCompare, that's safe. */
719 if (f == _PyObject_SlotCompare ||
720 w->ob_type->tp_compare == _PyObject_SlotCompare)
721 return _PyObject_SlotCompare(v, w);
722
723 /* If we're here, v and w,
724 a) are not instances;
725 b) have different types or a type without tp_compare; and
726 c) don't have a user-defined tp_compare.
727 tp_compare implementations in C assume that both arguments
728 have their type, so we give up if the coercion fails or if
729 it yields types which are still incompatible (which can
730 happen with a user-defined nb_coerce).
731 */
732 c = PyNumber_CoerceEx(&v, &w);
733 if (c < 0)
734 return -2;
735 if (c > 0)
736 return 2;
737 f = v->ob_type->tp_compare;
738 if (f != NULL && f == w->ob_type->tp_compare) {
739 c = (*f)(v, w);
740 Py_DECREF(v);
741 Py_DECREF(w);
742 return adjust_tp_compare(c);
743 }
744
745 /* No comparison defined */
746 Py_DECREF(v);
747 Py_DECREF(w);
748 return 2;
749 }
750
751 /* Final fallback 3-way comparison, returning an int. Return:
752 -2 if an error occurred;
753 -1 if v < w;
754 0 if v == w;
755 1 if v > w.
756 */
757 static int
758 default_3way_compare(PyObject *v, PyObject *w)
759 {
760 int c;
761 const char *vname, *wname;
762
763 if (v->ob_type == w->ob_type) {
764 /* When comparing these pointers, they must be cast to
765 * integer types (i.e. Py_uintptr_t, our spelling of C9X's
766 * uintptr_t). ANSI specifies that pointer compares other
767 * than == and != to non-related structures are undefined.
768 */
769 Py_uintptr_t vv = (Py_uintptr_t)v;
770 Py_uintptr_t ww = (Py_uintptr_t)w;
771 return (vv < ww) ? -1 : (vv > ww) ? 1 : 0;
772 }
773
774 /* None is smaller than anything */
775 if (v == Py_None)
776 return -1;
777 if (w == Py_None)
778 return 1;
779
780 /* different type: compare type names; numbers are smaller */
781 if (PyNumber_Check(v))
782 vname = "";
783 else
784 vname = v->ob_type->tp_name;
785 if (PyNumber_Check(w))
786 wname = "";
787 else
788 wname = w->ob_type->tp_name;
789 c = strcmp(vname, wname);
790 if (c < 0)
791 return -1;
792 if (c > 0)
793 return 1;
794 /* Same type name, or (more likely) incomparable numeric types */
795 return ((Py_uintptr_t)(v->ob_type) < (
796 Py_uintptr_t)(w->ob_type)) ? -1 : 1;
797 }
798
799 /* Do a 3-way comparison, by hook or by crook. Return:
800 -2 for an exception (but see below);
801 -1 if v < w;
802 0 if v == w;
803 1 if v > w;
804 BUT: if the object implements a tp_compare function, it returns
805 whatever this function returns (whether with an exception or not).
806 */
807 static int
808 do_cmp(PyObject *v, PyObject *w)
809 {
810 int c;
811 cmpfunc f;
812
813 if (v->ob_type == w->ob_type
814 && (f = v->ob_type->tp_compare) != NULL) {
815 c = (*f)(v, w);
816 if (PyInstance_Check(v)) {
817 /* Instance tp_compare has a different signature.
818 But if it returns undefined we fall through. */
819 if (c != 2)
820 return c;
821 /* Else fall through to try_rich_to_3way_compare() */
822 }
823 else
824 return adjust_tp_compare(c);
825 }
826 /* We only get here if one of the following is true:
827 a) v and w have different types
828 b) v and w have the same type, which doesn't have tp_compare
829 c) v and w are instances, and either __cmp__ is not defined or
830 __cmp__ returns NotImplemented
831 */
832 c = try_rich_to_3way_compare(v, w);
833 if (c < 2)
834 return c;
835 c = try_3way_compare(v, w);
836 if (c < 2)
837 return c;
838 return default_3way_compare(v, w);
839 }
840
841 /* Compare v to w. Return
842 -1 if v < w or exception (PyErr_Occurred() true in latter case).
843 0 if v == w.
844 1 if v > w.
845 XXX The docs (C API manual) say the return value is undefined in case
846 XXX of error.
847 */
848 int
849 PyObject_Compare(PyObject *v, PyObject *w)
850 {
851 int result;
852
853 if (v == NULL || w == NULL) {
854 PyErr_BadInternalCall();
855 return -1;
856 }
857 if (v == w)
858 return 0;
859 if (Py_EnterRecursiveCall(" in cmp"))
860 return -1;
861 result = do_cmp(v, w);
862 Py_LeaveRecursiveCall();
863 return result < 0 ? -1 : result;
864 }
865
866 /* Return (new reference to) Py_True or Py_False. */
867 static PyObject *
868 convert_3way_to_object(int op, int c)
869 {
870 PyObject *result;
871 switch (op) {
872 case Py_LT: c = c < 0; break;
873 case Py_LE: c = c <= 0; break;
874 case Py_EQ: c = c == 0; break;
875 case Py_NE: c = c != 0; break;
876 case Py_GT: c = c > 0; break;
877 case Py_GE: c = c >= 0; break;
878 }
879 result = c ? Py_True : Py_False;
880 Py_INCREF(result);
881 return result;
882 }
883
884 /* We want a rich comparison but don't have one. Try a 3-way cmp instead.
885 Return
886 NULL if error
887 Py_True if v op w
888 Py_False if not (v op w)
889 */
890 static PyObject *
891 try_3way_to_rich_compare(PyObject *v, PyObject *w, int op)
892 {
893 int c;
894
895 c = try_3way_compare(v, w);
896 if (c >= 2) {
897
898 /* Py3K warning if types are not equal and comparison isn't == or != */
899 if (Py_Py3kWarningFlag &&
900 v->ob_type != w->ob_type && op != Py_EQ && op != Py_NE &&
901 PyErr_WarnEx(PyExc_DeprecationWarning,
902 "comparing unequal types not supported "
903 "in 3.x", 1) < 0) {
904 return NULL;
905 }
906
907 c = default_3way_compare(v, w);
908 }
909 if (c <= -2)
910 return NULL;
911 return convert_3way_to_object(op, c);
912 }
913
914 /* Do rich comparison on v and w. Return
915 NULL if error
916 Else a new reference to an object other than Py_NotImplemented, usually(?):
917 Py_True if v op w
918 Py_False if not (v op w)
919 */
920 static PyObject *
921 do_richcmp(PyObject *v, PyObject *w, int op)
922 {
923 PyObject *res;
924
925 res = try_rich_compare(v, w, op);
926 if (res != Py_NotImplemented)
927 return res;
928 Py_DECREF(res);
929
930 return try_3way_to_rich_compare(v, w, op);
931 }
932
933 /* Return:
934 NULL for exception;
935 some object not equal to NotImplemented if it is implemented
936 (this latter object may not be a Boolean).
937 */
938 PyObject *
939 PyObject_RichCompare(PyObject *v, PyObject *w, int op)
940 {
941 PyObject *res;
942
943 assert(Py_LT <= op && op <= Py_GE);
944 if (Py_EnterRecursiveCall(" in cmp"))
945 return NULL;
946
947 /* If the types are equal, and not old-style instances, try to
948 get out cheap (don't bother with coercions etc.). */
949 if (v->ob_type == w->ob_type && !PyInstance_Check(v)) {
950 cmpfunc fcmp;
951 richcmpfunc frich = RICHCOMPARE(v->ob_type);
952 /* If the type has richcmp, try it first. try_rich_compare
953 tries it two-sided, which is not needed since we've a
954 single type only. */
955 if (frich != NULL) {
956 res = (*frich)(v, w, op);
957 if (res != Py_NotImplemented)
958 goto Done;
959 Py_DECREF(res);
960 }
961 /* No richcmp, or this particular richmp not implemented.
962 Try 3-way cmp. */
963 fcmp = v->ob_type->tp_compare;
964 if (fcmp != NULL) {
965 int c = (*fcmp)(v, w);
966 c = adjust_tp_compare(c);
967 if (c == -2) {
968 res = NULL;
969 goto Done;
970 }
971 res = convert_3way_to_object(op, c);
972 goto Done;
973 }
974 }
975
976 /* Fast path not taken, or couldn't deliver a useful result. */
977 res = do_richcmp(v, w, op);
978 Done:
979 Py_LeaveRecursiveCall();
980 return res;
981 }
982
983 /* Return -1 if error; 1 if v op w; 0 if not (v op w). */
984 int
985 PyObject_RichCompareBool(PyObject *v, PyObject *w, int op)
986 {
987 PyObject *res;
988 int ok;
989
990 /* Quick result when objects are the same.
991 Guarantees that identity implies equality. */
992 if (v == w) {
993 if (op == Py_EQ)
994 return 1;
995 else if (op == Py_NE)
996 return 0;
997 }
998
999 res = PyObject_RichCompare(v, w, op);
1000 if (res == NULL)
1001 return -1;
1002 if (PyBool_Check(res))
1003 ok = (res == Py_True);
1004 else
1005 ok = PyObject_IsTrue(res);
1006 Py_DECREF(res);
1007 return ok;
1008 }
1009
1010 /* Set of hash utility functions to help maintaining the invariant that
1011 if a==b then hash(a)==hash(b)
1012
1013 All the utility functions (_Py_Hash*()) return "-1" to signify an error.
1014 */
1015
1016 long
1017 _Py_HashDouble(double v)
1018 {
1019 double intpart, fractpart;
1020 int expo;
1021 long hipart;
1022 long x; /* the final hash value */
1023 /* This is designed so that Python numbers of different types
1024 * that compare equal hash to the same value; otherwise comparisons
1025 * of mapping keys will turn out weird.
1026 */
1027
1028 if (!Py_IS_FINITE(v)) {
1029 if (Py_IS_INFINITY(v))
1030 return v < 0 ? -271828 : 314159;
1031 else
1032 return 0;
1033 }
1034 fractpart = modf(v, &intpart);
1035 if (fractpart == 0.0) {
1036 /* This must return the same hash as an equal int or long. */
1037 if (intpart > LONG_MAX/2 || -intpart > LONG_MAX/2) {
1038 /* Convert to long and use its hash. */
1039 PyObject *plong; /* converted to Python long */
1040 plong = PyLong_FromDouble(v);
1041 if (plong == NULL)
1042 return -1;
1043 x = PyObject_Hash(plong);
1044 Py_DECREF(plong);
1045 return x;
1046 }
1047 /* Fits in a C long == a Python int, so is its own hash. */
1048 x = (long)intpart;
1049 if (x == -1)
1050 x = -2;
1051 return x;
1052 }
1053 /* The fractional part is non-zero, so we don't have to worry about
1054 * making this match the hash of some other type.
1055 * Use frexp to get at the bits in the double.
1056 * Since the VAX D double format has 56 mantissa bits, which is the
1057 * most of any double format in use, each of these parts may have as
1058 * many as (but no more than) 56 significant bits.
1059 * So, assuming sizeof(long) >= 4, each part can be broken into two
1060 * longs; frexp and multiplication are used to do that.
1061 * Also, since the Cray double format has 15 exponent bits, which is
1062 * the most of any double format in use, shifting the exponent field
1063 * left by 15 won't overflow a long (again assuming sizeof(long) >= 4).
1064 */
1065 v = frexp(v, &expo);
1066 v *= 2147483648.0; /* 2**31 */
1067 hipart = (long)v; /* take the top 32 bits */
1068 v = (v - (double)hipart) * 2147483648.0; /* get the next 32 bits */
1069 x = hipart + (long)v + (expo << 15);
1070 if (x == -1)
1071 x = -2;
1072 return x;
1073 }
1074
1075 long
1076 _Py_HashPointer(void *p)
1077 {
1078 long x;
1079 size_t y = (size_t)p;
1080 /* bottom 3 or 4 bits are likely to be 0; rotate y by 4 to avoid
1081 excessive hash collisions for dicts and sets */
1082 y = (y >> 4) | (y << (8 * SIZEOF_VOID_P - 4));
1083 x = (long)y;
1084 if (x == -1)
1085 x = -2;
1086 return x;
1087 }
1088
1089 long
1090 PyObject_HashNotImplemented(PyObject *self)
1091 {
1092 PyErr_Format(PyExc_TypeError, "unhashable type: '%.200s'",
1093 self->ob_type->tp_name);
1094 return -1;
1095 }
1096
1097 long
1098 PyObject_Hash(PyObject *v)
1099 {
1100 PyTypeObject *tp = v->ob_type;
1101 if (tp->tp_hash != NULL)
1102 return (*tp->tp_hash)(v);
1103 /* To keep to the general practice that inheriting
1104 * solely from object in C code should work without
1105 * an explicit call to PyType_Ready, we implicitly call
1106 * PyType_Ready here and then check the tp_hash slot again
1107 */
1108 if (tp->tp_dict == NULL) {
1109 if (PyType_Ready(tp) < 0)
1110 return -1;
1111 if (tp->tp_hash != NULL)
1112 return (*tp->tp_hash)(v);
1113 }
1114 if (tp->tp_compare == NULL && RICHCOMPARE(tp) == NULL) {
1115 return _Py_HashPointer(v); /* Use address as hash value */
1116 }
1117 /* If there's a cmp but no hash defined, the object can't be hashed */
1118 return PyObject_HashNotImplemented(v);
1119 }
1120
1121 PyObject *
1122 PyObject_GetAttrString(PyObject *v, const char *name)
1123 {
1124 PyObject *w, *res;
1125
1126 if (Py_TYPE(v)->tp_getattr != NULL)
1127 return (*Py_TYPE(v)->tp_getattr)(v, (char*)name);
1128 w = PyString_InternFromString(name);
1129 if (w == NULL)
1130 return NULL;
1131 res = PyObject_GetAttr(v, w);
1132 Py_XDECREF(w);
1133 return res;
1134 }
1135
1136 int
1137 PyObject_HasAttrString(PyObject *v, const char *name)
1138 {
1139 PyObject *res = PyObject_GetAttrString(v, name);
1140 if (res != NULL) {
1141 Py_DECREF(res);
1142 return 1;
1143 }
1144 PyErr_Clear();
1145 return 0;
1146 }
1147
1148 int
1149 PyObject_SetAttrString(PyObject *v, const char *name, PyObject *w)
1150 {
1151 PyObject *s;
1152 int res;
1153
1154 if (Py_TYPE(v)->tp_setattr != NULL)
1155 return (*Py_TYPE(v)->tp_setattr)(v, (char*)name, w);
1156 s = PyString_InternFromString(name);
1157 if (s == NULL)
1158 return -1;
1159 res = PyObject_SetAttr(v, s, w);
1160 Py_XDECREF(s);
1161 return res;
1162 }
1163
1164 PyObject *
1165 PyObject_GetAttr(PyObject *v, PyObject *name)
1166 {
1167 PyTypeObject *tp = Py_TYPE(v);
1168
1169 if (!PyString_Check(name)) {
1170 #ifdef Py_USING_UNICODE
1171 /* The Unicode to string conversion is done here because the
1172 existing tp_getattro slots expect a string object as name
1173 and we wouldn't want to break those. */
1174 if (PyUnicode_Check(name)) {
1175 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
1176 if (name == NULL)
1177 return NULL;
1178 }
1179 else
1180 #endif
1181 {
1182 PyErr_Format(PyExc_TypeError,
1183 "attribute name must be string, not '%.200s'",
1184 Py_TYPE(name)->tp_name);
1185 return NULL;
1186 }
1187 }
1188 if (tp->tp_getattro != NULL)
1189 return (*tp->tp_getattro)(v, name);
1190 if (tp->tp_getattr != NULL)
1191 return (*tp->tp_getattr)(v, PyString_AS_STRING(name));
1192 PyErr_Format(PyExc_AttributeError,
1193 "'%.50s' object has no attribute '%.400s'",
1194 tp->tp_name, PyString_AS_STRING(name));
1195 return NULL;
1196 }
1197
1198 int
1199 PyObject_HasAttr(PyObject *v, PyObject *name)
1200 {
1201 PyObject *res = PyObject_GetAttr(v, name);
1202 if (res != NULL) {
1203 Py_DECREF(res);
1204 return 1;
1205 }
1206 PyErr_Clear();
1207 return 0;
1208 }
1209
1210 int
1211 PyObject_SetAttr(PyObject *v, PyObject *name, PyObject *value)
1212 {
1213 PyTypeObject *tp = Py_TYPE(v);
1214 int err;
1215
1216 if (!PyString_Check(name)){
1217 #ifdef Py_USING_UNICODE
1218 /* The Unicode to string conversion is done here because the
1219 existing tp_setattro slots expect a string object as name
1220 and we wouldn't want to break those. */
1221 if (PyUnicode_Check(name)) {
1222 name = PyUnicode_AsEncodedString(name, NULL, NULL);
1223 if (name == NULL)
1224 return -1;
1225 }
1226 else
1227 #endif
1228 {
1229 PyErr_Format(PyExc_TypeError,
1230 "attribute name must be string, not '%.200s'",
1231 Py_TYPE(name)->tp_name);
1232 return -1;
1233 }
1234 }
1235 else
1236 Py_INCREF(name);
1237
1238 PyString_InternInPlace(&name);
1239 if (tp->tp_setattro != NULL) {
1240 err = (*tp->tp_setattro)(v, name, value);
1241 Py_DECREF(name);
1242 return err;
1243 }
1244 if (tp->tp_setattr != NULL) {
1245 err = (*tp->tp_setattr)(v, PyString_AS_STRING(name), value);
1246 Py_DECREF(name);
1247 return err;
1248 }
1249 Py_DECREF(name);
1250 if (tp->tp_getattr == NULL && tp->tp_getattro == NULL)
1251 PyErr_Format(PyExc_TypeError,
1252 "'%.100s' object has no attributes "
1253 "(%s .%.100s)",
1254 tp->tp_name,
1255 value==NULL ? "del" : "assign to",
1256 PyString_AS_STRING(name));
1257 else
1258 PyErr_Format(PyExc_TypeError,
1259 "'%.100s' object has only read-only attributes "
1260 "(%s .%.100s)",
1261 tp->tp_name,
1262 value==NULL ? "del" : "assign to",
1263 PyString_AS_STRING(name));
1264 return -1;
1265 }
1266
1267 /* Helper to get a pointer to an object's __dict__ slot, if any */
1268
1269 PyObject **
1270 _PyObject_GetDictPtr(PyObject *obj)
1271 {
1272 Py_ssize_t dictoffset;
1273 PyTypeObject *tp = Py_TYPE(obj);
1274
1275 if (!(tp->tp_flags & Py_TPFLAGS_HAVE_CLASS))
1276 return NULL;
1277 dictoffset = tp->tp_dictoffset;
1278 if (dictoffset == 0)
1279 return NULL;
1280 if (dictoffset < 0) {
1281 Py_ssize_t tsize;
1282 size_t size;
1283
1284 tsize = ((PyVarObject *)obj)->ob_size;
1285 if (tsize < 0)
1286 tsize = -tsize;
1287 size = _PyObject_VAR_SIZE(tp, tsize);
1288
1289 dictoffset += (long)size;
1290 assert(dictoffset > 0);
1291 assert(dictoffset % SIZEOF_VOID_P == 0);
1292 }
1293 return (PyObject **) ((char *)obj + dictoffset);
1294 }
1295
1296 PyObject *
1297 PyObject_SelfIter(PyObject *obj)
1298 {
1299 Py_INCREF(obj);
1300 return obj;
1301 }
1302
1303 /* Helper used when the __next__ method is removed from a type:
1304 tp_iternext is never NULL and can be safely called without checking
1305 on every iteration.
1306 */
1307
1308 PyObject *
1309 _PyObject_NextNotImplemented(PyObject *self)
1310 {
1311 PyErr_Format(PyExc_TypeError,
1312 "'%.200s' object is not iterable",
1313 Py_TYPE(self)->tp_name);
1314 return NULL;
1315 }
1316
1317 /* Generic GetAttr functions - put these in your tp_[gs]etattro slot */
1318
1319 PyObject *
1320 _PyObject_GenericGetAttrWithDict(PyObject *obj, PyObject *name, PyObject *dict)
1321 {
1322 PyTypeObject *tp = Py_TYPE(obj);
1323 PyObject *descr = NULL;
1324 PyObject *res = NULL;
1325 descrgetfunc f;
1326 Py_ssize_t dictoffset;
1327 PyObject **dictptr;
1328
1329 if (!PyString_Check(name)){
1330 #ifdef Py_USING_UNICODE
1331 /* The Unicode to string conversion is done here because the
1332 existing tp_setattro slots expect a string object as name
1333 and we wouldn't want to break those. */
1334 if (PyUnicode_Check(name)) {
1335 name = PyUnicode_AsEncodedString(name, NULL, NULL);
1336 if (name == NULL)
1337 return NULL;
1338 }
1339 else
1340 #endif
1341 {
1342 PyErr_Format(PyExc_TypeError,
1343 "attribute name must be string, not '%.200s'",
1344 Py_TYPE(name)->tp_name);
1345 return NULL;
1346 }
1347 }
1348 else
1349 Py_INCREF(name);
1350
1351 if (tp->tp_dict == NULL) {
1352 if (PyType_Ready(tp) < 0)
1353 goto done;
1354 }
1355
1356 #if 0 /* XXX this is not quite _PyType_Lookup anymore */
1357 /* Inline _PyType_Lookup */
1358 {
1359 Py_ssize_t i, n;
1360 PyObject *mro, *base, *dict;
1361
1362 /* Look in tp_dict of types in MRO */
1363 mro = tp->tp_mro;
1364 assert(mro != NULL);
1365 assert(PyTuple_Check(mro));
1366 n = PyTuple_GET_SIZE(mro);
1367 for (i = 0; i < n; i++) {
1368 base = PyTuple_GET_ITEM(mro, i);
1369 if (PyClass_Check(base))
1370 dict = ((PyClassObject *)base)->cl_dict;
1371 else {
1372 assert(PyType_Check(base));
1373 dict = ((PyTypeObject *)base)->tp_dict;
1374 }
1375 assert(dict && PyDict_Check(dict));
1376 descr = PyDict_GetItem(dict, name);
1377 if (descr != NULL)
1378 break;
1379 }
1380 }
1381 #else
1382 descr = _PyType_Lookup(tp, name);
1383 #endif
1384
1385 Py_XINCREF(descr);
1386
1387 f = NULL;
1388 if (descr != NULL &&
1389 PyType_HasFeature(descr->ob_type, Py_TPFLAGS_HAVE_CLASS)) {
1390 f = descr->ob_type->tp_descr_get;
1391 if (f != NULL && PyDescr_IsData(descr)) {
1392 res = f(descr, obj, (PyObject *)obj->ob_type);
1393 Py_DECREF(descr);
1394 goto done;
1395 }
1396 }
1397
1398 if (dict == NULL) {
1399 /* Inline _PyObject_GetDictPtr */
1400 dictoffset = tp->tp_dictoffset;
1401 if (dictoffset != 0) {
1402 if (dictoffset < 0) {
1403 Py_ssize_t tsize;
1404 size_t size;
1405
1406 tsize = ((PyVarObject *)obj)->ob_size;
1407 if (tsize < 0)
1408 tsize = -tsize;
1409 size = _PyObject_VAR_SIZE(tp, tsize);
1410
1411 dictoffset += (long)size;
1412 assert(dictoffset > 0);
1413 assert(dictoffset % SIZEOF_VOID_P == 0);
1414 }
1415 dictptr = (PyObject **) ((char *)obj + dictoffset);
1416 dict = *dictptr;
1417 }
1418 }
1419 if (dict != NULL) {
1420 Py_INCREF(dict);
1421 res = PyDict_GetItem(dict, name);
1422 if (res != NULL) {
1423 Py_INCREF(res);
1424 Py_XDECREF(descr);
1425 Py_DECREF(dict);
1426 goto done;
1427 }
1428 Py_DECREF(dict);
1429 }
1430
1431 if (f != NULL) {
1432 res = f(descr, obj, (PyObject *)Py_TYPE(obj));
1433 Py_DECREF(descr);
1434 goto done;
1435 }
1436
1437 if (descr != NULL) {
1438 res = descr;
1439 /* descr was already increfed above */
1440 goto done;
1441 }
1442
1443 PyErr_Format(PyExc_AttributeError,
1444 "'%.50s' object has no attribute '%.400s'",
1445 tp->tp_name, PyString_AS_STRING(name));
1446 done:
1447 Py_DECREF(name);
1448 return res;
1449 }
1450
1451 PyObject *
1452 PyObject_GenericGetAttr(PyObject *obj, PyObject *name)
1453 {
1454 return _PyObject_GenericGetAttrWithDict(obj, name, NULL);
1455 }
1456
1457 int
1458 _PyObject_GenericSetAttrWithDict(PyObject *obj, PyObject *name,
1459 PyObject *value, PyObject *dict)
1460 {
1461 PyTypeObject *tp = Py_TYPE(obj);
1462 PyObject *descr;
1463 descrsetfunc f;
1464 PyObject **dictptr;
1465 int res = -1;
1466
1467 if (!PyString_Check(name)){
1468 #ifdef Py_USING_UNICODE
1469 /* The Unicode to string conversion is done here because the
1470 existing tp_setattro slots expect a string object as name
1471 and we wouldn't want to break those. */
1472 if (PyUnicode_Check(name)) {
1473 name = PyUnicode_AsEncodedString(name, NULL, NULL);
1474 if (name == NULL)
1475 return -1;
1476 }
1477 else
1478 #endif
1479 {
1480 PyErr_Format(PyExc_TypeError,
1481 "attribute name must be string, not '%.200s'",
1482 Py_TYPE(name)->tp_name);
1483 return -1;
1484 }
1485 }
1486 else
1487 Py_INCREF(name);
1488
1489 if (tp->tp_dict == NULL) {
1490 if (PyType_Ready(tp) < 0)
1491 goto done;
1492 }
1493
1494 descr = _PyType_Lookup(tp, name);
1495 f = NULL;
1496 if (descr != NULL &&
1497 PyType_HasFeature(descr->ob_type, Py_TPFLAGS_HAVE_CLASS)) {
1498 f = descr->ob_type->tp_descr_set;
1499 if (f != NULL && PyDescr_IsData(descr)) {
1500 res = f(descr, obj, value);
1501 goto done;
1502 }
1503 }
1504
1505 if (dict == NULL) {
1506 dictptr = _PyObject_GetDictPtr(obj);
1507 if (dictptr != NULL) {
1508 dict = *dictptr;
1509 if (dict == NULL && value != NULL) {
1510 dict = PyDict_New();
1511 if (dict == NULL)
1512 goto done;
1513 *dictptr = dict;
1514 }
1515 }
1516 }
1517 if (dict != NULL) {
1518 Py_INCREF(dict);
1519 if (value == NULL)
1520 res = PyDict_DelItem(dict, name);
1521 else
1522 res = PyDict_SetItem(dict, name, value);
1523 if (res < 0 && PyErr_ExceptionMatches(PyExc_KeyError))
1524 PyErr_SetObject(PyExc_AttributeError, name);
1525 Py_DECREF(dict);
1526 goto done;
1527 }
1528
1529 if (f != NULL) {
1530 res = f(descr, obj, value);
1531 goto done;
1532 }
1533
1534 if (descr == NULL) {
1535 PyErr_Format(PyExc_AttributeError,
1536 "'%.100s' object has no attribute '%.200s'",
1537 tp->tp_name, PyString_AS_STRING(name));
1538 goto done;
1539 }
1540
1541 PyErr_Format(PyExc_AttributeError,
1542 "'%.50s' object attribute '%.400s' is read-only",
1543 tp->tp_name, PyString_AS_STRING(name));
1544 done:
1545 Py_DECREF(name);
1546 return res;
1547 }
1548
1549 int
1550 PyObject_GenericSetAttr(PyObject *obj, PyObject *name, PyObject *value)
1551 {
1552 return _PyObject_GenericSetAttrWithDict(obj, name, value, NULL);
1553 }
1554
1555
1556 /* Test a value used as condition, e.g., in a for or if statement.
1557 Return -1 if an error occurred */
1558
1559 int
1560 PyObject_IsTrue(PyObject *v)
1561 {
1562 Py_ssize_t res;
1563 if (v == Py_True)
1564 return 1;
1565 if (v == Py_False)
1566 return 0;
1567 if (v == Py_None)
1568 return 0;
1569 else if (v->ob_type->tp_as_number != NULL &&
1570 v->ob_type->tp_as_number->nb_nonzero != NULL)
1571 res = (*v->ob_type->tp_as_number->nb_nonzero)(v);
1572 else if (v->ob_type->tp_as_mapping != NULL &&
1573 v->ob_type->tp_as_mapping->mp_length != NULL)
1574 res = (*v->ob_type->tp_as_mapping->mp_length)(v);
1575 else if (v->ob_type->tp_as_sequence != NULL &&
1576 v->ob_type->tp_as_sequence->sq_length != NULL)
1577 res = (*v->ob_type->tp_as_sequence->sq_length)(v);
1578 else
1579 return 1;
1580 /* if it is negative, it should be either -1 or -2 */
1581 return (res > 0) ? 1 : Py_SAFE_DOWNCAST(res, Py_ssize_t, int);
1582 }
1583
1584 /* equivalent of 'not v'
1585 Return -1 if an error occurred */
1586
1587 int
1588 PyObject_Not(PyObject *v)
1589 {
1590 int res;
1591 res = PyObject_IsTrue(v);
1592 if (res < 0)
1593 return res;
1594 return res == 0;
1595 }
1596
1597 /* Coerce two numeric types to the "larger" one.
1598 Increment the reference count on each argument.
1599 Return value:
1600 -1 if an error occurred;
1601 0 if the coercion succeeded (and then the reference counts are increased);
1602 1 if no coercion is possible (and no error is raised).
1603 */
1604 int
1605 PyNumber_CoerceEx(PyObject **pv, PyObject **pw)
1606 {
1607 register PyObject *v = *pv;
1608 register PyObject *w = *pw;
1609 int res;
1610
1611 /* Shortcut only for old-style types */
1612 if (v->ob_type == w->ob_type &&
1613 !PyType_HasFeature(v->ob_type, Py_TPFLAGS_CHECKTYPES))
1614 {
1615 Py_INCREF(v);
1616 Py_INCREF(w);
1617 return 0;
1618 }
1619 if (v->ob_type->tp_as_number && v->ob_type->tp_as_number->nb_coerce) {
1620 res = (*v->ob_type->tp_as_number->nb_coerce)(pv, pw);
1621 if (res <= 0)
1622 return res;
1623 }
1624 if (w->ob_type->tp_as_number && w->ob_type->tp_as_number->nb_coerce) {
1625 res = (*w->ob_type->tp_as_number->nb_coerce)(pw, pv);
1626 if (res <= 0)
1627 return res;
1628 }
1629 return 1;
1630 }
1631
1632 /* Coerce two numeric types to the "larger" one.
1633 Increment the reference count on each argument.
1634 Return -1 and raise an exception if no coercion is possible
1635 (and then no reference count is incremented).
1636 */
1637 int
1638 PyNumber_Coerce(PyObject **pv, PyObject **pw)
1639 {
1640 int err = PyNumber_CoerceEx(pv, pw);
1641 if (err <= 0)
1642 return err;
1643 PyErr_SetString(PyExc_TypeError, "number coercion failed");
1644 return -1;
1645 }
1646
1647
1648 /* Test whether an object can be called */
1649
1650 int
1651 PyCallable_Check(PyObject *x)
1652 {
1653 if (x == NULL)
1654 return 0;
1655 if (PyInstance_Check(x)) {
1656 PyObject *call = PyObject_GetAttrString(x, "__call__");
1657 if (call == NULL) {
1658 PyErr_Clear();
1659 return 0;
1660 }
1661 /* Could test recursively but don't, for fear of endless
1662 recursion if some joker sets self.__call__ = self */
1663 Py_DECREF(call);
1664 return 1;
1665 }
1666 else {
1667 return x->ob_type->tp_call != NULL;
1668 }
1669 }
1670
1671 /* ------------------------- PyObject_Dir() helpers ------------------------- */
1672
1673 /* Helper for PyObject_Dir.
1674 Merge the __dict__ of aclass into dict, and recursively also all
1675 the __dict__s of aclass's base classes. The order of merging isn't
1676 defined, as it's expected that only the final set of dict keys is
1677 interesting.
1678 Return 0 on success, -1 on error.
1679 */
1680
1681 static int
1682 merge_class_dict(PyObject* dict, PyObject* aclass)
1683 {
1684 PyObject *classdict;
1685 PyObject *bases;
1686
1687 assert(PyDict_Check(dict));
1688 assert(aclass);
1689
1690 /* Merge in the type's dict (if any). */
1691 classdict = PyObject_GetAttrString(aclass, "__dict__");
1692 if (classdict == NULL)
1693 PyErr_Clear();
1694 else {
1695 int status = PyDict_Update(dict, classdict);
1696 Py_DECREF(classdict);
1697 if (status < 0)
1698 return -1;
1699 }
1700
1701 /* Recursively merge in the base types' (if any) dicts. */
1702 bases = PyObject_GetAttrString(aclass, "__bases__");
1703 if (bases == NULL)
1704 PyErr_Clear();
1705 else {
1706 /* We have no guarantee that bases is a real tuple */
1707 Py_ssize_t i, n;
1708 n = PySequence_Size(bases); /* This better be right */
1709 if (n < 0)
1710 PyErr_Clear();
1711 else {
1712 for (i = 0; i < n; i++) {
1713 int status;
1714 PyObject *base = PySequence_GetItem(bases, i);
1715 if (base == NULL) {
1716 Py_DECREF(bases);
1717 return -1;
1718 }
1719 status = merge_class_dict(dict, base);
1720 Py_DECREF(base);
1721 if (status < 0) {
1722 Py_DECREF(bases);
1723 return -1;
1724 }
1725 }
1726 }
1727 Py_DECREF(bases);
1728 }
1729 return 0;
1730 }
1731
1732 /* Helper for PyObject_Dir.
1733 If obj has an attr named attrname that's a list, merge its string
1734 elements into keys of dict.
1735 Return 0 on success, -1 on error. Errors due to not finding the attr,
1736 or the attr not being a list, are suppressed.
1737 */
1738
1739 static int
1740 merge_list_attr(PyObject* dict, PyObject* obj, const char *attrname)
1741 {
1742 PyObject *list;
1743 int result = 0;
1744
1745 assert(PyDict_Check(dict));
1746 assert(obj);
1747 assert(attrname);
1748
1749 list = PyObject_GetAttrString(obj, attrname);
1750 if (list == NULL)
1751 PyErr_Clear();
1752
1753 else if (PyList_Check(list)) {
1754 int i;
1755 for (i = 0; i < PyList_GET_SIZE(list); ++i) {
1756 PyObject *item = PyList_GET_ITEM(list, i);
1757 if (PyString_Check(item)) {
1758 result = PyDict_SetItem(dict, item, Py_None);
1759 if (result < 0)
1760 break;
1761 }
1762 }
1763 if (Py_Py3kWarningFlag &&
1764 (strcmp(attrname, "__members__") == 0 ||
1765 strcmp(attrname, "__methods__") == 0)) {
1766 if (PyErr_WarnEx(PyExc_DeprecationWarning,
1767 "__members__ and __methods__ not "
1768 "supported in 3.x", 1) < 0) {
1769 Py_XDECREF(list);
1770 return -1;
1771 }
1772 }
1773 }
1774
1775 Py_XDECREF(list);
1776 return result;
1777 }
1778
1779 /* Helper for PyObject_Dir without arguments: returns the local scope. */
1780 static PyObject *
1781 _dir_locals(void)
1782 {
1783 PyObject *names;
1784 PyObject *locals = PyEval_GetLocals();
1785
1786 if (locals == NULL) {
1787 PyErr_SetString(PyExc_SystemError, "frame does not exist");
1788 return NULL;
1789 }
1790
1791 names = PyMapping_Keys(locals);
1792 if (!names)
1793 return NULL;
1794 if (!PyList_Check(names)) {
1795 PyErr_Format(PyExc_TypeError,
1796 "dir(): expected keys() of locals to be a list, "
1797 "not '%.200s'", Py_TYPE(names)->tp_name);
1798 Py_DECREF(names);
1799 return NULL;
1800 }
1801 /* the locals don't need to be DECREF'd */
1802 return names;
1803 }
1804
1805 /* Helper for PyObject_Dir of type objects: returns __dict__ and __bases__.
1806 We deliberately don't suck up its __class__, as methods belonging to the
1807 metaclass would probably be more confusing than helpful.
1808 */
1809 static PyObject *
1810 _specialized_dir_type(PyObject *obj)
1811 {
1812 PyObject *result = NULL;
1813 PyObject *dict = PyDict_New();
1814
1815 if (dict != NULL && merge_class_dict(dict, obj) == 0)
1816 result = PyDict_Keys(dict);
1817
1818 Py_XDECREF(dict);
1819 return result;
1820 }
1821
1822 /* Helper for PyObject_Dir of module objects: returns the module's __dict__. */
1823 static PyObject *
1824 _specialized_dir_module(PyObject *obj)
1825 {
1826 PyObject *result = NULL;
1827 PyObject *dict = PyObject_GetAttrString(obj, "__dict__");
1828
1829 if (dict != NULL) {
1830 if (PyDict_Check(dict))
1831 result = PyDict_Keys(dict);
1832 else {
1833 char *name = PyModule_GetName(obj);
1834 if (name)
1835 PyErr_Format(PyExc_TypeError,
1836 "%.200s.__dict__ is not a dictionary",
1837 name);
1838 }
1839 }
1840
1841 Py_XDECREF(dict);
1842 return result;
1843 }
1844
1845 /* Helper for PyObject_Dir of generic objects: returns __dict__, __class__,
1846 and recursively up the __class__.__bases__ chain.
1847 */
1848 static PyObject *
1849 _generic_dir(PyObject *obj)
1850 {
1851 PyObject *result = NULL;
1852 PyObject *dict = NULL;
1853 PyObject *itsclass = NULL;
1854
1855 /* Get __dict__ (which may or may not be a real dict...) */
1856 dict = PyObject_GetAttrString(obj, "__dict__");
1857 if (dict == NULL) {
1858 PyErr_Clear();
1859 dict = PyDict_New();
1860 }
1861 else if (!PyDict_Check(dict)) {
1862 Py_DECREF(dict);
1863 dict = PyDict_New();
1864 }
1865 else {
1866 /* Copy __dict__ to avoid mutating it. */
1867 PyObject *temp = PyDict_Copy(dict);
1868 Py_DECREF(dict);
1869 dict = temp;
1870 }
1871
1872 if (dict == NULL)
1873 goto error;
1874
1875 /* Merge in __members__ and __methods__ (if any).
1876 * This is removed in Python 3000. */
1877 if (merge_list_attr(dict, obj, "__members__") < 0)
1878 goto error;
1879 if (merge_list_attr(dict, obj, "__methods__") < 0)
1880 goto error;
1881
1882 /* Merge in attrs reachable from its class. */
1883 itsclass = PyObject_GetAttrString(obj, "__class__");
1884 if (itsclass == NULL)
1885 /* XXX(tomer): Perhaps fall back to obj->ob_type if no
1886 __class__ exists? */
1887 PyErr_Clear();
1888 else {
1889 if (merge_class_dict(dict, itsclass) != 0)
1890 goto error;
1891 }
1892
1893 result = PyDict_Keys(dict);
1894 /* fall through */
1895 error:
1896 Py_XDECREF(itsclass);
1897 Py_XDECREF(dict);
1898 return result;
1899 }
1900
1901 /* Helper for PyObject_Dir: object introspection.
1902 This calls one of the above specialized versions if no __dir__ method
1903 exists. */
1904 static PyObject *
1905 _dir_object(PyObject *obj)
1906 {
1907 PyObject *result = NULL;
1908 static PyObject *dir_str = NULL;
1909 PyObject *dirfunc;
1910
1911 assert(obj);
1912 if (PyInstance_Check(obj)) {
1913 dirfunc = PyObject_GetAttrString(obj, "__dir__");
1914 if (dirfunc == NULL) {
1915 if (PyErr_ExceptionMatches(PyExc_AttributeError))
1916 PyErr_Clear();
1917 else
1918 return NULL;
1919 }
1920 }
1921 else {
1922 dirfunc = _PyObject_LookupSpecial(obj, "__dir__", &dir_str);
1923 if (PyErr_Occurred())
1924 return NULL;
1925 }
1926 if (dirfunc == NULL) {
1927 /* use default implementation */
1928 if (PyModule_Check(obj))
1929 result = _specialized_dir_module(obj);
1930 else if (PyType_Check(obj) || PyClass_Check(obj))
1931 result = _specialized_dir_type(obj);
1932 else
1933 result = _generic_dir(obj);
1934 }
1935 else {
1936 /* use __dir__ */
1937 result = PyObject_CallFunctionObjArgs(dirfunc, NULL);
1938 Py_DECREF(dirfunc);
1939 if (result == NULL)
1940 return NULL;
1941
1942 /* result must be a list */
1943 /* XXX(gbrandl): could also check if all items are strings */
1944 if (!PyList_Check(result)) {
1945 PyErr_Format(PyExc_TypeError,
1946 "__dir__() must return a list, not %.200s",
1947 Py_TYPE(result)->tp_name);
1948 Py_DECREF(result);
1949 result = NULL;
1950 }
1951 }
1952
1953 return result;
1954 }
1955
1956 /* Implementation of dir() -- if obj is NULL, returns the names in the current
1957 (local) scope. Otherwise, performs introspection of the object: returns a
1958 sorted list of attribute names (supposedly) accessible from the object
1959 */
1960 PyObject *
1961 PyObject_Dir(PyObject *obj)
1962 {
1963 PyObject * result;
1964
1965 if (obj == NULL)
1966 /* no object -- introspect the locals */
1967 result = _dir_locals();
1968 else
1969 /* object -- introspect the object */
1970 result = _dir_object(obj);
1971
1972 assert(result == NULL || PyList_Check(result));
1973
1974 if (result != NULL && PyList_Sort(result) != 0) {
1975 /* sorting the list failed */
1976 Py_DECREF(result);
1977 result = NULL;
1978 }
1979
1980 return result;
1981 }
1982
1983 /*
1984 NoObject is usable as a non-NULL undefined value, used by the macro None.
1985 There is (and should be!) no way to create other objects of this type,
1986 so there is exactly one (which is indestructible, by the way).
1987 (XXX This type and the type of NotImplemented below should be unified.)
1988 */
1989
1990 /* ARGSUSED */
1991 static PyObject *
1992 none_repr(PyObject *op)
1993 {
1994 return PyString_FromString("None");
1995 }
1996
1997 /* ARGUSED */
1998 static void
1999 none_dealloc(PyObject* ignore)
2000 {
2001 /* This should never get called, but we also don't want to SEGV if
2002 * we accidentally decref None out of existence.
2003 */
2004 Py_FatalError("deallocating None");
2005 }
2006
2007
2008 static PyTypeObject PyNone_Type = {
2009 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2010 "NoneType",
2011 0,
2012 0,
2013 none_dealloc, /*tp_dealloc*/ /*never called*/
2014 0, /*tp_print*/
2015 0, /*tp_getattr*/
2016 0, /*tp_setattr*/
2017 0, /*tp_compare*/
2018 none_repr, /*tp_repr*/
2019 0, /*tp_as_number*/
2020 0, /*tp_as_sequence*/
2021 0, /*tp_as_mapping*/
2022 (hashfunc)_Py_HashPointer, /*tp_hash */
2023 };
2024
2025 PyObject _Py_NoneStruct = {
2026 _PyObject_EXTRA_INIT
2027 1, &PyNone_Type
2028 };
2029
2030 /* NotImplemented is an object that can be used to signal that an
2031 operation is not implemented for the given type combination. */
2032
2033 static PyObject *
2034 NotImplemented_repr(PyObject *op)
2035 {
2036 return PyString_FromString("NotImplemented");
2037 }
2038
2039 static PyTypeObject PyNotImplemented_Type = {
2040 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2041 "NotImplementedType",
2042 0,
2043 0,
2044 none_dealloc, /*tp_dealloc*/ /*never called*/
2045 0, /*tp_print*/
2046 0, /*tp_getattr*/
2047 0, /*tp_setattr*/
2048 0, /*tp_compare*/
2049 NotImplemented_repr, /*tp_repr*/
2050 0, /*tp_as_number*/
2051 0, /*tp_as_sequence*/
2052 0, /*tp_as_mapping*/
2053 0, /*tp_hash */
2054 };
2055
2056 PyObject _Py_NotImplementedStruct = {
2057 _PyObject_EXTRA_INIT
2058 1, &PyNotImplemented_Type
2059 };
2060
2061 void
2062 _Py_ReadyTypes(void)
2063 {
2064 if (PyType_Ready(&PyType_Type) < 0)
2065 Py_FatalError("Can't initialize type type");
2066
2067 if (PyType_Ready(&_PyWeakref_RefType) < 0)
2068 Py_FatalError("Can't initialize weakref type");
2069
2070 if (PyType_Ready(&_PyWeakref_CallableProxyType) < 0)
2071 Py_FatalError("Can't initialize callable weakref proxy type");
2072
2073 if (PyType_Ready(&_PyWeakref_ProxyType) < 0)
2074 Py_FatalError("Can't initialize weakref proxy type");
2075
2076 if (PyType_Ready(&PyBool_Type) < 0)
2077 Py_FatalError("Can't initialize bool type");
2078
2079 if (PyType_Ready(&PyString_Type) < 0)
2080 Py_FatalError("Can't initialize str type");
2081
2082 if (PyType_Ready(&PyByteArray_Type) < 0)
2083 Py_FatalError("Can't initialize bytearray type");
2084
2085 if (PyType_Ready(&PyList_Type) < 0)
2086 Py_FatalError("Can't initialize list type");
2087
2088 if (PyType_Ready(&PyNone_Type) < 0)
2089 Py_FatalError("Can't initialize None type");
2090
2091 if (PyType_Ready(&PyNotImplemented_Type) < 0)
2092 Py_FatalError("Can't initialize NotImplemented type");
2093
2094 if (PyType_Ready(&PyTraceBack_Type) < 0)
2095 Py_FatalError("Can't initialize traceback type");
2096
2097 if (PyType_Ready(&PySuper_Type) < 0)
2098 Py_FatalError("Can't initialize super type");
2099
2100 if (PyType_Ready(&PyBaseObject_Type) < 0)
2101 Py_FatalError("Can't initialize object type");
2102
2103 if (PyType_Ready(&PyRange_Type) < 0)
2104 Py_FatalError("Can't initialize xrange type");
2105
2106 if (PyType_Ready(&PyDict_Type) < 0)
2107 Py_FatalError("Can't initialize dict type");
2108
2109 if (PyType_Ready(&PySet_Type) < 0)
2110 Py_FatalError("Can't initialize set type");
2111
2112 if (PyType_Ready(&PyUnicode_Type) < 0)
2113 Py_FatalError("Can't initialize unicode type");
2114
2115 if (PyType_Ready(&PySlice_Type) < 0)
2116 Py_FatalError("Can't initialize slice type");
2117
2118 if (PyType_Ready(&PyStaticMethod_Type) < 0)
2119 Py_FatalError("Can't initialize static method type");
2120
2121 #ifndef WITHOUT_COMPLEX
2122 if (PyType_Ready(&PyComplex_Type) < 0)
2123 Py_FatalError("Can't initialize complex type");
2124 #endif
2125
2126 if (PyType_Ready(&PyFloat_Type) < 0)
2127 Py_FatalError("Can't initialize float type");
2128
2129 if (PyType_Ready(&PyBuffer_Type) < 0)
2130 Py_FatalError("Can't initialize buffer type");
2131
2132 if (PyType_Ready(&PyLong_Type) < 0)
2133 Py_FatalError("Can't initialize long type");
2134
2135 if (PyType_Ready(&PyInt_Type) < 0)
2136 Py_FatalError("Can't initialize int type");
2137
2138 if (PyType_Ready(&PyFrozenSet_Type) < 0)
2139 Py_FatalError("Can't initialize frozenset type");
2140
2141 if (PyType_Ready(&PyProperty_Type) < 0)
2142 Py_FatalError("Can't initialize property type");
2143
2144 if (PyType_Ready(&PyMemoryView_Type) < 0)
2145 Py_FatalError("Can't initialize memoryview type");
2146
2147 if (PyType_Ready(&PyTuple_Type) < 0)
2148 Py_FatalError("Can't initialize tuple type");
2149
2150 if (PyType_Ready(&PyEnum_Type) < 0)
2151 Py_FatalError("Can't initialize enumerate type");
2152
2153 if (PyType_Ready(&PyReversed_Type) < 0)
2154 Py_FatalError("Can't initialize reversed type");
2155
2156 if (PyType_Ready(&PyCode_Type) < 0)
2157 Py_FatalError("Can't initialize code type");
2158
2159 if (PyType_Ready(&PyFrame_Type) < 0)
2160 Py_FatalError("Can't initialize frame type");
2161
2162 if (PyType_Ready(&PyCFunction_Type) < 0)
2163 Py_FatalError("Can't initialize builtin function type");
2164
2165 if (PyType_Ready(&PyMethod_Type) < 0)
2166 Py_FatalError("Can't initialize method type");
2167
2168 if (PyType_Ready(&PyFunction_Type) < 0)
2169 Py_FatalError("Can't initialize function type");
2170
2171 if (PyType_Ready(&PyClass_Type) < 0)
2172 Py_FatalError("Can't initialize class type");
2173
2174 if (PyType_Ready(&PyDictProxy_Type) < 0)
2175 Py_FatalError("Can't initialize dict proxy type");
2176
2177 if (PyType_Ready(&PyGen_Type) < 0)
2178 Py_FatalError("Can't initialize generator type");
2179
2180 if (PyType_Ready(&PyGetSetDescr_Type) < 0)
2181 Py_FatalError("Can't initialize get-set descriptor type");
2182
2183 if (PyType_Ready(&PyWrapperDescr_Type) < 0)
2184 Py_FatalError("Can't initialize wrapper type");
2185
2186 if (PyType_Ready(&PyInstance_Type) < 0)
2187 Py_FatalError("Can't initialize instance type");
2188
2189 if (PyType_Ready(&PyEllipsis_Type) < 0)
2190 Py_FatalError("Can't initialize ellipsis type");
2191
2192 if (PyType_Ready(&PyMemberDescr_Type) < 0)
2193 Py_FatalError("Can't initialize member descriptor type");
2194
2195 if (PyType_Ready(&PyFile_Type) < 0)
2196 Py_FatalError("Can't initialize file type");
2197 }
2198
2199
2200 #ifdef Py_TRACE_REFS
2201
2202 void
2203 _Py_NewReference(PyObject *op)
2204 {
2205 _Py_INC_REFTOTAL;
2206 op->ob_refcnt = 1;
2207 _Py_AddToAllObjects(op, 1);
2208 _Py_INC_TPALLOCS(op);
2209 }
2210
2211 void
2212 _Py_ForgetReference(register PyObject *op)
2213 {
2214 #ifdef SLOW_UNREF_CHECK
2215 register PyObject *p;
2216 #endif
2217 if (op->ob_refcnt < 0)
2218 Py_FatalError("UNREF negative refcnt");
2219 if (op == &refchain ||
2220 op->_ob_prev->_ob_next != op || op->_ob_next->_ob_prev != op)
2221 Py_FatalError("UNREF invalid object");
2222 #ifdef SLOW_UNREF_CHECK
2223 for (p = refchain._ob_next; p != &refchain; p = p->_ob_next) {
2224 if (p == op)
2225 break;
2226 }
2227 if (p == &refchain) /* Not found */
2228 Py_FatalError("UNREF unknown object");
2229 #endif
2230 op->_ob_next->_ob_prev = op->_ob_prev;
2231 op->_ob_prev->_ob_next = op->_ob_next;
2232 op->_ob_next = op->_ob_prev = NULL;
2233 _Py_INC_TPFREES(op);
2234 }
2235
2236 void
2237 _Py_Dealloc(PyObject *op)
2238 {
2239 destructor dealloc = Py_TYPE(op)->tp_dealloc;
2240 _Py_ForgetReference(op);
2241 (*dealloc)(op);
2242 }
2243
2244 /* Print all live objects. Because PyObject_Print is called, the
2245 * interpreter must be in a healthy state.
2246 */
2247 void
2248 _Py_PrintReferences(FILE *fp)
2249 {
2250 PyObject *op;
2251 fprintf(fp, "Remaining objects:\n");
2252 for (op = refchain._ob_next; op != &refchain; op = op->_ob_next) {
2253 fprintf(fp, "%p [%" PY_FORMAT_SIZE_T "d] ", op, op->ob_refcnt);
2254 if (PyObject_Print(op, fp, 0) != 0)
2255 PyErr_Clear();
2256 putc('\n', fp);
2257 }
2258 }
2259
2260 /* Print the addresses of all live objects. Unlike _Py_PrintReferences, this
2261 * doesn't make any calls to the Python C API, so is always safe to call.
2262 */
2263 void
2264 _Py_PrintReferenceAddresses(FILE *fp)
2265 {
2266 PyObject *op;
2267 fprintf(fp, "Remaining object addresses:\n");
2268 for (op = refchain._ob_next; op != &refchain; op = op->_ob_next)
2269 fprintf(fp, "%p [%" PY_FORMAT_SIZE_T "d] %s\n", op,
2270 op->ob_refcnt, Py_TYPE(op)->tp_name);
2271 }
2272
2273 PyObject *
2274 _Py_GetObjects(PyObject *self, PyObject *args)
2275 {
2276 int i, n;
2277 PyObject *t = NULL;
2278 PyObject *res, *op;
2279
2280 if (!PyArg_ParseTuple(args, "i|O", &n, &t))
2281 return NULL;
2282 op = refchain._ob_next;
2283 res = PyList_New(0);
2284 if (res == NULL)
2285 return NULL;
2286 for (i = 0; (n == 0 || i < n) && op != &refchain; i++) {
2287 while (op == self || op == args || op == res || op == t ||
2288 (t != NULL && Py_TYPE(op) != (PyTypeObject *) t)) {
2289 op = op->_ob_next;
2290 if (op == &refchain)
2291 return res;
2292 }
2293 if (PyList_Append(res, op) < 0) {
2294 Py_DECREF(res);
2295 return NULL;
2296 }
2297 op = op->_ob_next;
2298 }
2299 return res;
2300 }
2301
2302 #endif
2303
2304
2305 /* Hack to force loading of capsule.o */
2306 PyTypeObject *_Py_capsule_hack = &PyCapsule_Type;
2307
2308
2309 /* Hack to force loading of cobject.o */
2310 PyTypeObject *_Py_cobject_hack = &PyCObject_Type;
2311
2312
2313 /* Hack to force loading of abstract.o */
2314 Py_ssize_t (*_Py_abstract_hack)(PyObject *) = PyObject_Size;
2315
2316
2317 /* Python's malloc wrappers (see pymem.h) */
2318
2319 void *
2320 PyMem_Malloc(size_t nbytes)
2321 {
2322 return PyMem_MALLOC(nbytes);
2323 }
2324
2325 void *
2326 PyMem_Realloc(void *p, size_t nbytes)
2327 {
2328 return PyMem_REALLOC(p, nbytes);
2329 }
2330
2331 void
2332 PyMem_Free(void *p)
2333 {
2334 PyMem_FREE(p);
2335 }
2336
2337
2338 /* These methods are used to control infinite recursion in repr, str, print,
2339 etc. Container objects that may recursively contain themselves,
2340 e.g. builtin dictionaries and lists, should used Py_ReprEnter() and
2341 Py_ReprLeave() to avoid infinite recursion.
2342
2343 Py_ReprEnter() returns 0 the first time it is called for a particular
2344 object and 1 every time thereafter. It returns -1 if an exception
2345 occurred. Py_ReprLeave() has no return value.
2346
2347 See dictobject.c and listobject.c for examples of use.
2348 */
2349
2350 #define KEY "Py_Repr"
2351
2352 int
2353 Py_ReprEnter(PyObject *obj)
2354 {
2355 PyObject *dict;
2356 PyObject *list;
2357 Py_ssize_t i;
2358
2359 dict = PyThreadState_GetDict();
2360 if (dict == NULL)
2361 return 0;
2362 list = PyDict_GetItemString(dict, KEY);
2363 if (list == NULL) {
2364 list = PyList_New(0);
2365 if (list == NULL)
2366 return -1;
2367 if (PyDict_SetItemString(dict, KEY, list) < 0)
2368 return -1;
2369 Py_DECREF(list);
2370 }
2371 i = PyList_GET_SIZE(list);
2372 while (--i >= 0) {
2373 if (PyList_GET_ITEM(list, i) == obj)
2374 return 1;
2375 }
2376 PyList_Append(list, obj);
2377 return 0;
2378 }
2379
2380 void
2381 Py_ReprLeave(PyObject *obj)
2382 {
2383 PyObject *dict;
2384 PyObject *list;
2385 Py_ssize_t i;
2386
2387 dict = PyThreadState_GetDict();
2388 if (dict == NULL)
2389 return;
2390 list = PyDict_GetItemString(dict, KEY);
2391 if (list == NULL || !PyList_Check(list))
2392 return;
2393 i = PyList_GET_SIZE(list);
2394 /* Count backwards because we always expect obj to be list[-1] */
2395 while (--i >= 0) {
2396 if (PyList_GET_ITEM(list, i) == obj) {
2397 PyList_SetSlice(list, i, i + 1, NULL);
2398 break;
2399 }
2400 }
2401 }
2402
2403 /* Trashcan support. */
2404
2405 /* Current call-stack depth of tp_dealloc calls. */
2406 int _PyTrash_delete_nesting = 0;
2407
2408 /* List of objects that still need to be cleaned up, singly linked via their
2409 * gc headers' gc_prev pointers.
2410 */
2411 PyObject *_PyTrash_delete_later = NULL;
2412
2413 /* Add op to the _PyTrash_delete_later list. Called when the current
2414 * call-stack depth gets large. op must be a currently untracked gc'ed
2415 * object, with refcount 0. Py_DECREF must already have been called on it.
2416 */
2417 void
2418 _PyTrash_deposit_object(PyObject *op)
2419 {
2420 assert(PyObject_IS_GC(op));
2421 assert(_Py_AS_GC(op)->gc.gc_refs == _PyGC_REFS_UNTRACKED);
2422 assert(op->ob_refcnt == 0);
2423 _Py_AS_GC(op)->gc.gc_prev = (PyGC_Head *)_PyTrash_delete_later;
2424 _PyTrash_delete_later = op;
2425 }
2426
2427 /* Dealloccate all the objects in the _PyTrash_delete_later list. Called when
2428 * the call-stack unwinds again.
2429 */
2430 void
2431 _PyTrash_destroy_chain(void)
2432 {
2433 while (_PyTrash_delete_later) {
2434 PyObject *op = _PyTrash_delete_later;
2435 destructor dealloc = Py_TYPE(op)->tp_dealloc;
2436
2437 _PyTrash_delete_later =
2438 (PyObject*) _Py_AS_GC(op)->gc.gc_prev;
2439
2440 /* Call the deallocator directly. This used to try to
2441 * fool Py_DECREF into calling it indirectly, but
2442 * Py_DECREF was already called on this object, and in
2443 * assorted non-release builds calling Py_DECREF again ends
2444 * up distorting allocation statistics.
2445 */
2446 assert(op->ob_refcnt == 0);
2447 ++_PyTrash_delete_nesting;
2448 (*dealloc)(op);
2449 --_PyTrash_delete_nesting;
2450 }
2451 }
2452
2453 #ifdef __cplusplus
2454 }
2455 #endif