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