blob: 6c2bd7717c01ce2a94145bae7f5268d132681d4f [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +00001
Benjamin Peterson722954a2011-06-11 16:33:35 -05002/* Generic object operations; and implementation of None */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00003
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004#include "Python.h"
Victor Stinner621cebe2018-11-12 16:53:38 +01005#include "pycore_pystate.h"
Victor Stinner27e2d1f2018-11-01 00:52:28 +01006#include "pycore_context.h"
Benjamin Petersonfd838e62009-04-20 02:09:13 +00007#include "frameobject.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00008
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00009#ifdef __cplusplus
10extern "C" {
11#endif
12
Victor Stinner626bff82018-10-25 17:31:10 +020013/* Defined in tracemalloc.c */
14extern void _PyMem_DumpTraceback(int fd, const void *ptr);
15
Victor Stinnerbd303c12013-11-07 23:07:29 +010016_Py_IDENTIFIER(Py_Repr);
17_Py_IDENTIFIER(__bytes__);
18_Py_IDENTIFIER(__dir__);
19_Py_IDENTIFIER(__isabstractmethod__);
Victor Stinnerbd303c12013-11-07 23:07:29 +010020
Tim Peters34592512002-07-11 06:23:50 +000021#ifdef Py_REF_DEBUG
Neal Norwitz84632ee2006-03-04 20:00:59 +000022Py_ssize_t _Py_RefTotal;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000023
24Py_ssize_t
25_Py_GetRefTotal(void)
26{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000027 PyObject *o;
28 Py_ssize_t total = _Py_RefTotal;
Antoine Pitrou9d952542013-08-24 21:07:07 +020029 o = _PySet_Dummy;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000030 if (o != NULL)
31 total -= o->ob_refcnt;
32 return total;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000033}
Nick Coghland6009512014-11-20 21:39:37 +100034
35void
36_PyDebug_PrintTotalRefs(void) {
Eric Snowdae02762017-09-14 00:35:58 -070037 fprintf(stderr,
38 "[%" PY_FORMAT_SIZE_T "d refs, "
39 "%" PY_FORMAT_SIZE_T "d blocks]\n",
40 _Py_GetRefTotal(), _Py_GetAllocatedBlocks());
Nick Coghland6009512014-11-20 21:39:37 +100041}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000042#endif /* Py_REF_DEBUG */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000043
Guido van Rossum3f5da241990-12-20 15:06:42 +000044/* Object allocation routines used by NEWOBJ and NEWVAROBJ macros.
45 These are used by the individual routines for object creation.
46 Do not call them otherwise, they do not initialize the object! */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000047
Tim Peters78be7992003-03-23 02:51:01 +000048#ifdef Py_TRACE_REFS
Tim Peters7571a0f2003-03-23 17:52:28 +000049/* Head of circular doubly-linked list of all objects. These are linked
50 * together via the _ob_prev and _ob_next members of a PyObject, which
51 * exist only in a Py_TRACE_REFS build.
52 */
Tim Peters78be7992003-03-23 02:51:01 +000053static PyObject refchain = {&refchain, &refchain};
Tim Peters36eb4df2003-03-23 03:33:13 +000054
Tim Peters7571a0f2003-03-23 17:52:28 +000055/* Insert op at the front of the list of all objects. If force is true,
56 * op is added even if _ob_prev and _ob_next are non-NULL already. If
57 * force is false amd _ob_prev or _ob_next are non-NULL, do nothing.
58 * force should be true if and only if op points to freshly allocated,
59 * uninitialized memory, or you've unlinked op from the list and are
Tim Peters51f8d382003-03-23 18:06:08 +000060 * relinking it into the front.
Tim Peters7571a0f2003-03-23 17:52:28 +000061 * Note that objects are normally added to the list via _Py_NewReference,
62 * which is called by PyObject_Init. Not all objects are initialized that
63 * way, though; exceptions include statically allocated type objects, and
64 * statically allocated singletons (like Py_True and Py_None).
65 */
Tim Peters36eb4df2003-03-23 03:33:13 +000066void
Tim Peters7571a0f2003-03-23 17:52:28 +000067_Py_AddToAllObjects(PyObject *op, int force)
Tim Peters36eb4df2003-03-23 03:33:13 +000068{
Tim Peters7571a0f2003-03-23 17:52:28 +000069#ifdef Py_DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000070 if (!force) {
71 /* If it's initialized memory, op must be in or out of
72 * the list unambiguously.
73 */
Victor Stinner24702042018-10-26 17:16:37 +020074 _PyObject_ASSERT(op, (op->_ob_prev == NULL) == (op->_ob_next == NULL));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000075 }
Tim Peters78be7992003-03-23 02:51:01 +000076#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000077 if (force || op->_ob_prev == NULL) {
78 op->_ob_next = refchain._ob_next;
79 op->_ob_prev = &refchain;
80 refchain._ob_next->_ob_prev = op;
81 refchain._ob_next = op;
82 }
Tim Peters7571a0f2003-03-23 17:52:28 +000083}
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000084#endif /* Py_TRACE_REFS */
Tim Peters78be7992003-03-23 02:51:01 +000085
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +000086#ifdef COUNT_ALLOCS
Guido van Rossumc0b618a1997-05-02 03:12:38 +000087static PyTypeObject *type_list;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000088/* All types are added to type_list, at least when
89 they get one object created. That makes them
90 immortal, which unfortunately contributes to
91 garbage itself. If unlist_types_without_objects
92 is set, they will be removed from the type_list
93 once the last object is deallocated. */
Benjamin Petersona4a37fe2009-01-11 17:13:55 +000094static int unlist_types_without_objects;
Pablo Galindo49c75a82018-10-28 15:02:17 +000095extern Py_ssize_t _Py_tuple_zero_allocs, _Py_fast_tuple_allocs;
96extern Py_ssize_t _Py_quick_int_allocs, _Py_quick_neg_int_allocs;
97extern Py_ssize_t _Py_null_strings, _Py_one_strings;
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +000098void
Pablo Galindo49c75a82018-10-28 15:02:17 +000099_Py_dump_counts(FILE* f)
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000100{
Victor Stinnercaba55b2018-08-03 15:33:52 +0200101 PyInterpreterState *interp = _PyInterpreterState_Get();
Eddie Elizondo745dc652018-02-21 20:55:18 -0800102 if (!interp->core_config.show_alloc_count) {
Serhiy Storchaka7e160ce2016-07-03 21:03:53 +0300103 return;
Victor Stinner25420fe2017-11-20 18:12:22 -0800104 }
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000105
Eddie Elizondo745dc652018-02-21 20:55:18 -0800106 PyTypeObject *tp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000107 for (tp = type_list; tp; tp = tp->tp_next)
108 fprintf(f, "%s alloc'd: %" PY_FORMAT_SIZE_T "d, "
109 "freed: %" PY_FORMAT_SIZE_T "d, "
110 "max in use: %" PY_FORMAT_SIZE_T "d\n",
111 tp->tp_name, tp->tp_allocs, tp->tp_frees,
112 tp->tp_maxalloc);
113 fprintf(f, "fast tuple allocs: %" PY_FORMAT_SIZE_T "d, "
114 "empty: %" PY_FORMAT_SIZE_T "d\n",
Pablo Galindo49c75a82018-10-28 15:02:17 +0000115 _Py_fast_tuple_allocs, _Py_tuple_zero_allocs);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000116 fprintf(f, "fast int allocs: pos: %" PY_FORMAT_SIZE_T "d, "
117 "neg: %" PY_FORMAT_SIZE_T "d\n",
Pablo Galindo49c75a82018-10-28 15:02:17 +0000118 _Py_quick_int_allocs, _Py_quick_neg_int_allocs);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000119 fprintf(f, "null strings: %" PY_FORMAT_SIZE_T "d, "
120 "1-strings: %" PY_FORMAT_SIZE_T "d\n",
Pablo Galindo49c75a82018-10-28 15:02:17 +0000121 _Py_null_strings, _Py_one_strings);
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000122}
123
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +0000124PyObject *
Pablo Galindo49c75a82018-10-28 15:02:17 +0000125_Py_get_counts(void)
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +0000126{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000127 PyTypeObject *tp;
128 PyObject *result;
129 PyObject *v;
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +0000130
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000131 result = PyList_New(0);
132 if (result == NULL)
133 return NULL;
134 for (tp = type_list; tp; tp = tp->tp_next) {
135 v = Py_BuildValue("(snnn)", tp->tp_name, tp->tp_allocs,
136 tp->tp_frees, tp->tp_maxalloc);
137 if (v == NULL) {
138 Py_DECREF(result);
139 return NULL;
140 }
141 if (PyList_Append(result, v) < 0) {
142 Py_DECREF(v);
143 Py_DECREF(result);
144 return NULL;
145 }
146 Py_DECREF(v);
147 }
148 return result;
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +0000149}
150
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000151void
Pablo Galindo49c75a82018-10-28 15:02:17 +0000152_Py_inc_count(PyTypeObject *tp)
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000153{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000154 if (tp->tp_next == NULL && tp->tp_prev == NULL) {
155 /* first time; insert in linked list */
156 if (tp->tp_next != NULL) /* sanity check */
Pablo Galindo49c75a82018-10-28 15:02:17 +0000157 Py_FatalError("XXX _Py_inc_count sanity check");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000158 if (type_list)
159 type_list->tp_prev = tp;
160 tp->tp_next = type_list;
161 /* Note that as of Python 2.2, heap-allocated type objects
162 * can go away, but this code requires that they stay alive
163 * until program exit. That's why we're careful with
164 * refcounts here. type_list gets a new reference to tp,
165 * while ownership of the reference type_list used to hold
166 * (if any) was transferred to tp->tp_next in the line above.
167 * tp is thus effectively immortal after this.
168 */
169 Py_INCREF(tp);
170 type_list = tp;
Tim Peters3e40c7f2003-03-23 03:04:32 +0000171#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000172 /* Also insert in the doubly-linked list of all objects,
173 * if not already there.
174 */
175 _Py_AddToAllObjects((PyObject *)tp, 0);
Tim Peters78be7992003-03-23 02:51:01 +0000176#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000177 }
178 tp->tp_allocs++;
179 if (tp->tp_allocs - tp->tp_frees > tp->tp_maxalloc)
180 tp->tp_maxalloc = tp->tp_allocs - tp->tp_frees;
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000181}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000182
Pablo Galindo49c75a82018-10-28 15:02:17 +0000183void _Py_dec_count(PyTypeObject *tp)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000184{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000185 tp->tp_frees++;
186 if (unlist_types_without_objects &&
187 tp->tp_allocs == tp->tp_frees) {
188 /* unlink the type from type_list */
189 if (tp->tp_prev)
190 tp->tp_prev->tp_next = tp->tp_next;
191 else
192 type_list = tp->tp_next;
193 if (tp->tp_next)
194 tp->tp_next->tp_prev = tp->tp_prev;
195 tp->tp_next = tp->tp_prev = NULL;
196 Py_DECREF(tp);
197 }
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000198}
199
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000200#endif
201
Tim Peters7c321a82002-07-09 02:57:01 +0000202#ifdef Py_REF_DEBUG
203/* Log a fatal error; doesn't return. */
204void
Victor Stinner18618e652018-10-25 17:28:11 +0200205_Py_NegativeRefcount(const char *filename, int lineno, PyObject *op)
Tim Peters7c321a82002-07-09 02:57:01 +0000206{
Victor Stinnerf1d002c2018-11-21 23:53:44 +0100207 _PyObject_AssertFailed(op, NULL, "object has negative ref count",
Victor Stinner3ec9af72018-10-26 02:12:34 +0200208 filename, lineno, __func__);
Tim Peters7c321a82002-07-09 02:57:01 +0000209}
210
211#endif /* Py_REF_DEBUG */
212
Thomas Heller1328b522004-04-22 17:23:49 +0000213void
214Py_IncRef(PyObject *o)
215{
216 Py_XINCREF(o);
217}
218
219void
220Py_DecRef(PyObject *o)
221{
222 Py_XDECREF(o);
223}
224
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000225PyObject *
Fred Drake100814d2000-07-09 15:48:49 +0000226PyObject_Init(PyObject *op, PyTypeObject *tp)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000227{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000228 if (op == NULL)
229 return PyErr_NoMemory();
230 /* Any changes should be reflected in PyObject_INIT (objimpl.h) */
231 Py_TYPE(op) = tp;
232 _Py_NewReference(op);
233 return op;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000234}
235
Guido van Rossumb18618d2000-05-03 23:44:39 +0000236PyVarObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +0000237PyObject_InitVar(PyVarObject *op, PyTypeObject *tp, Py_ssize_t size)
Guido van Rossumb18618d2000-05-03 23:44:39 +0000238{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000239 if (op == NULL)
240 return (PyVarObject *) PyErr_NoMemory();
241 /* Any changes should be reflected in PyObject_INIT_VAR */
242 op->ob_size = size;
243 Py_TYPE(op) = tp;
244 _Py_NewReference((PyObject *)op);
245 return op;
Guido van Rossumb18618d2000-05-03 23:44:39 +0000246}
247
248PyObject *
Fred Drake100814d2000-07-09 15:48:49 +0000249_PyObject_New(PyTypeObject *tp)
Guido van Rossumb18618d2000-05-03 23:44:39 +0000250{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000251 PyObject *op;
252 op = (PyObject *) PyObject_MALLOC(_PyObject_SIZE(tp));
253 if (op == NULL)
254 return PyErr_NoMemory();
255 return PyObject_INIT(op, tp);
Guido van Rossumb18618d2000-05-03 23:44:39 +0000256}
257
Guido van Rossumd0c87ee1997-05-15 21:31:03 +0000258PyVarObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +0000259_PyObject_NewVar(PyTypeObject *tp, Py_ssize_t nitems)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000260{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000261 PyVarObject *op;
262 const size_t size = _PyObject_VAR_SIZE(tp, nitems);
263 op = (PyVarObject *) PyObject_MALLOC(size);
264 if (op == NULL)
265 return (PyVarObject *)PyErr_NoMemory();
266 return PyObject_INIT_VAR(op, tp, nitems);
Guido van Rossumb18618d2000-05-03 23:44:39 +0000267}
268
Antoine Pitrou796564c2013-07-30 19:59:21 +0200269void
270PyObject_CallFinalizer(PyObject *self)
271{
272 PyTypeObject *tp = Py_TYPE(self);
273
274 /* The former could happen on heaptypes created from the C API, e.g.
275 PyType_FromSpec(). */
276 if (!PyType_HasFeature(tp, Py_TPFLAGS_HAVE_FINALIZE) ||
277 tp->tp_finalize == NULL)
278 return;
279 /* tp_finalize should only be called once. */
280 if (PyType_IS_GC(tp) && _PyGC_FINALIZED(self))
281 return;
282
283 tp->tp_finalize(self);
INADA Naoki5ac9e6e2018-07-10 17:19:53 +0900284 if (PyType_IS_GC(tp)) {
285 _PyGC_SET_FINALIZED(self);
286 }
Antoine Pitrou796564c2013-07-30 19:59:21 +0200287}
288
289int
290PyObject_CallFinalizerFromDealloc(PyObject *self)
291{
292 Py_ssize_t refcnt;
293
294 /* Temporarily resurrect the object. */
295 if (self->ob_refcnt != 0) {
296 Py_FatalError("PyObject_CallFinalizerFromDealloc called on "
297 "object with a non-zero refcount");
298 }
299 self->ob_refcnt = 1;
300
301 PyObject_CallFinalizer(self);
302
303 /* Undo the temporary resurrection; can't use DECREF here, it would
304 * cause a recursive call.
305 */
Victor Stinner24702042018-10-26 17:16:37 +0200306 _PyObject_ASSERT_WITH_MSG(self,
307 self->ob_refcnt > 0,
308 "refcount is too small");
Antoine Pitrou796564c2013-07-30 19:59:21 +0200309 if (--self->ob_refcnt == 0)
310 return 0; /* this is the normal path out */
311
312 /* tp_finalize resurrected it! Make it look like the original Py_DECREF
313 * never happened.
314 */
315 refcnt = self->ob_refcnt;
316 _Py_NewReference(self);
317 self->ob_refcnt = refcnt;
318
Victor Stinner24702042018-10-26 17:16:37 +0200319 _PyObject_ASSERT(self,
320 (!PyType_IS_GC(Py_TYPE(self))
321 || _PyObject_GC_IS_TRACKED(self)));
Antoine Pitrou796564c2013-07-30 19:59:21 +0200322 /* If Py_REF_DEBUG, _Py_NewReference bumped _Py_RefTotal, so
323 * we need to undo that. */
324 _Py_DEC_REFTOTAL;
325 /* If Py_TRACE_REFS, _Py_NewReference re-added self to the object
326 * chain, so no more to do there.
327 * If COUNT_ALLOCS, the original decref bumped tp_frees, and
328 * _Py_NewReference bumped tp_allocs: both of those need to be
329 * undone.
330 */
331#ifdef COUNT_ALLOCS
332 --Py_TYPE(self)->tp_frees;
333 --Py_TYPE(self)->tp_allocs;
334#endif
335 return -1;
336}
337
Antoine Pitrouc47bd4a2010-07-27 22:08:27 +0000338int
339PyObject_Print(PyObject *op, FILE *fp, int flags)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000340{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000341 int ret = 0;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000342 if (PyErr_CheckSignals())
343 return -1;
Guido van Rossum9b00dfa1998-04-28 16:06:54 +0000344#ifdef USE_STACKCHECK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000345 if (PyOS_CheckStack()) {
346 PyErr_SetString(PyExc_MemoryError, "stack overflow");
347 return -1;
348 }
Guido van Rossum9b00dfa1998-04-28 16:06:54 +0000349#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000350 clearerr(fp); /* Clear any previous error condition */
351 if (op == NULL) {
352 Py_BEGIN_ALLOW_THREADS
353 fprintf(fp, "<nil>");
354 Py_END_ALLOW_THREADS
355 }
356 else {
Victor Stinner3ec9af72018-10-26 02:12:34 +0200357 if (op->ob_refcnt <= 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000358 /* XXX(twouters) cast refcount to long until %zd is
359 universally available */
360 Py_BEGIN_ALLOW_THREADS
361 fprintf(fp, "<refcnt %ld at %p>",
362 (long)op->ob_refcnt, op);
363 Py_END_ALLOW_THREADS
Victor Stinner3ec9af72018-10-26 02:12:34 +0200364 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000365 else {
366 PyObject *s;
367 if (flags & Py_PRINT_RAW)
368 s = PyObject_Str(op);
369 else
370 s = PyObject_Repr(op);
371 if (s == NULL)
372 ret = -1;
373 else if (PyBytes_Check(s)) {
374 fwrite(PyBytes_AS_STRING(s), 1,
375 PyBytes_GET_SIZE(s), fp);
376 }
377 else if (PyUnicode_Check(s)) {
378 PyObject *t;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200379 t = PyUnicode_AsEncodedString(s, "utf-8", "backslashreplace");
Zackery Spytzae62f012018-10-06 00:44:25 -0600380 if (t == NULL) {
381 ret = -1;
382 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000383 else {
384 fwrite(PyBytes_AS_STRING(t), 1,
385 PyBytes_GET_SIZE(t), fp);
Victor Stinnerba6b4302010-05-17 09:33:42 +0000386 Py_DECREF(t);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000387 }
388 }
389 else {
390 PyErr_Format(PyExc_TypeError,
391 "str() or repr() returned '%.100s'",
392 s->ob_type->tp_name);
393 ret = -1;
394 }
395 Py_XDECREF(s);
396 }
397 }
398 if (ret == 0) {
399 if (ferror(fp)) {
Serhiy Storchaka55fe1ae2017-04-16 10:46:38 +0300400 PyErr_SetFromErrno(PyExc_OSError);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000401 clearerr(fp);
402 ret = -1;
403 }
404 }
405 return ret;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000406}
407
Guido van Rossum38938152006-08-21 23:36:26 +0000408/* For debugging convenience. Set a breakpoint here and call it from your DLL */
409void
Thomas Woutersb2137042007-02-01 18:02:27 +0000410_Py_BreakPoint(void)
Guido van Rossum38938152006-08-21 23:36:26 +0000411{
412}
413
Neal Norwitz1a997502003-01-13 20:13:12 +0000414
Victor Stinner82af0b62018-10-23 17:39:40 +0200415/* Heuristic checking if the object memory has been deallocated.
416 Rely on the debug hooks on Python memory allocators which fills the memory
417 with DEADBYTE (0xDB) when memory is deallocated.
418
419 The function can be used to prevent segmentation fault on dereferencing
420 pointers like 0xdbdbdbdbdbdbdbdb. Such pointer is very unlikely to be mapped
421 in memory. */
422int
423_PyObject_IsFreed(PyObject *op)
424{
Victor Stinner2cf5d322018-11-22 16:32:57 +0100425 uintptr_t ptr = (uintptr_t)op;
426 if (_PyMem_IsFreed(&ptr, sizeof(ptr))) {
427 return 1;
428 }
Victor Stinner82af0b62018-10-23 17:39:40 +0200429 int freed = _PyMem_IsFreed(&op->ob_type, sizeof(op->ob_type));
430 /* ignore op->ob_ref: the value can have be modified
431 by Py_INCREF() and Py_DECREF(). */
432#ifdef Py_TRACE_REFS
433 freed &= _PyMem_IsFreed(&op->_ob_next, sizeof(op->_ob_next));
434 freed &= _PyMem_IsFreed(&op->_ob_prev, sizeof(op->_ob_prev));
435#endif
436 return freed;
437}
438
439
Barry Warsaw9bf16442001-01-23 16:24:35 +0000440/* For debugging convenience. See Misc/gdbinit for some useful gdb hooks */
Guido van Rossum38938152006-08-21 23:36:26 +0000441void
442_PyObject_Dump(PyObject* op)
Barry Warsaw9bf16442001-01-23 16:24:35 +0000443{
Victor Stinner82af0b62018-10-23 17:39:40 +0200444 if (op == NULL) {
445 fprintf(stderr, "<NULL object>\n");
446 fflush(stderr);
447 return;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000448 }
Victor Stinner82af0b62018-10-23 17:39:40 +0200449
450 if (_PyObject_IsFreed(op)) {
451 /* It seems like the object memory has been freed:
452 don't access it to prevent a segmentation fault. */
453 fprintf(stderr, "<freed object>\n");
Victor Stinner2cf5d322018-11-22 16:32:57 +0100454 return;
Victor Stinner82af0b62018-10-23 17:39:40 +0200455 }
456
457 PyGILState_STATE gil;
458 PyObject *error_type, *error_value, *error_traceback;
459
460 fprintf(stderr, "object : ");
461 fflush(stderr);
462 gil = PyGILState_Ensure();
463
464 PyErr_Fetch(&error_type, &error_value, &error_traceback);
465 (void)PyObject_Print(op, stderr, 0);
466 fflush(stderr);
467 PyErr_Restore(error_type, error_value, error_traceback);
468
469 PyGILState_Release(gil);
470 /* XXX(twouters) cast refcount to long until %zd is
471 universally available */
472 fprintf(stderr, "\n"
473 "type : %s\n"
474 "refcount: %ld\n"
475 "address : %p\n",
476 Py_TYPE(op)==NULL ? "NULL" : Py_TYPE(op)->tp_name,
477 (long)op->ob_refcnt,
478 op);
479 fflush(stderr);
Barry Warsaw9bf16442001-01-23 16:24:35 +0000480}
Barry Warsaw903138f2001-01-23 16:33:18 +0000481
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000482PyObject *
Fred Drake100814d2000-07-09 15:48:49 +0000483PyObject_Repr(PyObject *v)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000484{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000485 PyObject *res;
486 if (PyErr_CheckSignals())
487 return NULL;
Guido van Rossum9b00dfa1998-04-28 16:06:54 +0000488#ifdef USE_STACKCHECK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000489 if (PyOS_CheckStack()) {
490 PyErr_SetString(PyExc_MemoryError, "stack overflow");
491 return NULL;
492 }
Guido van Rossum9b00dfa1998-04-28 16:06:54 +0000493#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000494 if (v == NULL)
495 return PyUnicode_FromString("<NULL>");
496 if (Py_TYPE(v)->tp_repr == NULL)
497 return PyUnicode_FromFormat("<%s object at %p>",
498 v->ob_type->tp_name, v);
Victor Stinner33824f62013-08-26 14:05:19 +0200499
500#ifdef Py_DEBUG
501 /* PyObject_Repr() must not be called with an exception set,
Victor Stinnera8cb5152017-01-18 14:12:51 +0100502 because it can clear it (directly or indirectly) and so the
Martin Panter9955a372015-10-07 10:26:23 +0000503 caller loses its exception */
Victor Stinner33824f62013-08-26 14:05:19 +0200504 assert(!PyErr_Occurred());
505#endif
506
Serhiy Storchaka1fb72d22017-12-03 22:12:11 +0200507 /* It is possible for a type to have a tp_repr representation that loops
508 infinitely. */
509 if (Py_EnterRecursiveCall(" while getting the repr of an object"))
510 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000511 res = (*v->ob_type->tp_repr)(v);
Serhiy Storchaka1fb72d22017-12-03 22:12:11 +0200512 Py_LeaveRecursiveCall();
Victor Stinner0a54cf12011-12-01 03:22:44 +0100513 if (res == NULL)
514 return NULL;
515 if (!PyUnicode_Check(res)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000516 PyErr_Format(PyExc_TypeError,
517 "__repr__ returned non-string (type %.200s)",
518 res->ob_type->tp_name);
519 Py_DECREF(res);
520 return NULL;
521 }
Victor Stinnerdb88ae52011-12-01 02:15:00 +0100522#ifndef Py_DEBUG
523 if (PyUnicode_READY(res) < 0)
524 return NULL;
525#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000526 return res;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000527}
528
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000529PyObject *
Guido van Rossum98297ee2007-11-06 21:34:58 +0000530PyObject_Str(PyObject *v)
Guido van Rossumc6004111993-11-05 10:22:19 +0000531{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000532 PyObject *res;
533 if (PyErr_CheckSignals())
534 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +0000535#ifdef USE_STACKCHECK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000536 if (PyOS_CheckStack()) {
537 PyErr_SetString(PyExc_MemoryError, "stack overflow");
538 return NULL;
539 }
Guido van Rossum98297ee2007-11-06 21:34:58 +0000540#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000541 if (v == NULL)
542 return PyUnicode_FromString("<NULL>");
543 if (PyUnicode_CheckExact(v)) {
Victor Stinnerdb88ae52011-12-01 02:15:00 +0100544#ifndef Py_DEBUG
Victor Stinner4ead7c72011-11-20 19:48:36 +0100545 if (PyUnicode_READY(v) < 0)
546 return NULL;
Victor Stinnerdb88ae52011-12-01 02:15:00 +0100547#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000548 Py_INCREF(v);
549 return v;
550 }
551 if (Py_TYPE(v)->tp_str == NULL)
552 return PyObject_Repr(v);
Guido van Rossum4f288ab2001-05-01 16:53:37 +0000553
Victor Stinner33824f62013-08-26 14:05:19 +0200554#ifdef Py_DEBUG
555 /* PyObject_Str() must not be called with an exception set,
Victor Stinnera8cb5152017-01-18 14:12:51 +0100556 because it can clear it (directly or indirectly) and so the
Nick Coghland979e432014-02-09 10:43:21 +1000557 caller loses its exception */
Victor Stinner33824f62013-08-26 14:05:19 +0200558 assert(!PyErr_Occurred());
559#endif
560
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000561 /* It is possible for a type to have a tp_str representation that loops
562 infinitely. */
563 if (Py_EnterRecursiveCall(" while getting the str of an object"))
564 return NULL;
565 res = (*Py_TYPE(v)->tp_str)(v);
566 Py_LeaveRecursiveCall();
567 if (res == NULL)
568 return NULL;
569 if (!PyUnicode_Check(res)) {
570 PyErr_Format(PyExc_TypeError,
571 "__str__ returned non-string (type %.200s)",
572 Py_TYPE(res)->tp_name);
573 Py_DECREF(res);
574 return NULL;
575 }
Victor Stinnerdb88ae52011-12-01 02:15:00 +0100576#ifndef Py_DEBUG
Victor Stinner4ead7c72011-11-20 19:48:36 +0100577 if (PyUnicode_READY(res) < 0)
578 return NULL;
Victor Stinnerdb88ae52011-12-01 02:15:00 +0100579#endif
Victor Stinner4ead7c72011-11-20 19:48:36 +0100580 assert(_PyUnicode_CheckConsistency(res, 1));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000581 return res;
Neil Schemenauercf52c072005-08-12 17:34:58 +0000582}
583
Georg Brandl559e5d72008-06-11 18:37:52 +0000584PyObject *
585PyObject_ASCII(PyObject *v)
586{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000587 PyObject *repr, *ascii, *res;
Georg Brandl559e5d72008-06-11 18:37:52 +0000588
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000589 repr = PyObject_Repr(v);
590 if (repr == NULL)
591 return NULL;
Georg Brandl559e5d72008-06-11 18:37:52 +0000592
Victor Stinneraf037572013-04-14 18:44:10 +0200593 if (PyUnicode_IS_ASCII(repr))
594 return repr;
595
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000596 /* repr is guaranteed to be a PyUnicode object by PyObject_Repr */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200597 ascii = _PyUnicode_AsASCIIString(repr, "backslashreplace");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000598 Py_DECREF(repr);
599 if (ascii == NULL)
600 return NULL;
Georg Brandl559e5d72008-06-11 18:37:52 +0000601
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000602 res = PyUnicode_DecodeASCII(
603 PyBytes_AS_STRING(ascii),
604 PyBytes_GET_SIZE(ascii),
605 NULL);
606
607 Py_DECREF(ascii);
608 return res;
Georg Brandl559e5d72008-06-11 18:37:52 +0000609}
Guido van Rossuma3af41d2001-01-18 22:07:06 +0000610
Benjamin Petersonc15a0732008-08-26 16:46:47 +0000611PyObject *
612PyObject_Bytes(PyObject *v)
613{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000614 PyObject *result, *func;
Benjamin Petersonc15a0732008-08-26 16:46:47 +0000615
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000616 if (v == NULL)
617 return PyBytes_FromString("<NULL>");
Benjamin Petersonc15a0732008-08-26 16:46:47 +0000618
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000619 if (PyBytes_CheckExact(v)) {
620 Py_INCREF(v);
621 return v;
622 }
Benjamin Petersonc15a0732008-08-26 16:46:47 +0000623
Benjamin Petersonce798522012-01-22 11:24:29 -0500624 func = _PyObject_LookupSpecial(v, &PyId___bytes__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000625 if (func != NULL) {
Victor Stinnerf17c3de2016-12-06 18:46:19 +0100626 result = _PyObject_CallNoArg(func);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000627 Py_DECREF(func);
628 if (result == NULL)
Benjamin Peterson41ece392010-09-11 16:39:57 +0000629 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000630 if (!PyBytes_Check(result)) {
Benjamin Peterson41ece392010-09-11 16:39:57 +0000631 PyErr_Format(PyExc_TypeError,
632 "__bytes__ returned non-bytes (type %.200s)",
633 Py_TYPE(result)->tp_name);
634 Py_DECREF(result);
635 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000636 }
637 return result;
638 }
639 else if (PyErr_Occurred())
640 return NULL;
641 return PyBytes_FromObject(v);
Benjamin Petersonc15a0732008-08-26 16:46:47 +0000642}
643
Mark Dickinsonc008a172009-02-01 13:59:22 +0000644/* For Python 3.0.1 and later, the old three-way comparison has been
645 completely removed in favour of rich comparisons. PyObject_Compare() and
646 PyObject_Cmp() are gone, and the builtin cmp function no longer exists.
Mark Dickinsone94c6792009-02-02 20:36:42 +0000647 The old tp_compare slot has been renamed to tp_reserved, and should no
Mark Dickinsonc008a172009-02-01 13:59:22 +0000648 longer be used. Use tp_richcompare instead.
Guido van Rossum98297ee2007-11-06 21:34:58 +0000649
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000650 See (*) below for practical amendments.
651
Mark Dickinsonc008a172009-02-01 13:59:22 +0000652 tp_richcompare gets called with a first argument of the appropriate type
653 and a second object of an arbitrary type. We never do any kind of
654 coercion.
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000655
Mark Dickinsonc008a172009-02-01 13:59:22 +0000656 The tp_richcompare slot should return an object, as follows:
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000657
658 NULL if an exception occurred
659 NotImplemented if the requested comparison is not implemented
660 any other false value if the requested comparison is false
661 any other true value if the requested comparison is true
662
663 The PyObject_RichCompare[Bool]() wrappers raise TypeError when they get
664 NotImplemented.
665
666 (*) Practical amendments:
667
668 - If rich comparison returns NotImplemented, == and != are decided by
669 comparing the object pointer (i.e. falling back to the base object
670 implementation).
671
Guido van Rossuma4073002002-05-31 20:03:54 +0000672*/
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000673
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000674/* Map rich comparison operators to their swapped version, e.g. LT <--> GT */
Brett Cannona5ca2e72004-09-25 01:37:24 +0000675int _Py_SwappedOp[] = {Py_GT, Py_GE, Py_EQ, Py_NE, Py_LT, Py_LE};
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +0000676
Serhiy Storchaka2d06e842015-12-25 19:53:18 +0200677static const char * const opstrings[] = {"<", "<=", "==", "!=", ">", ">="};
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000678
679/* Perform a rich comparison, raising TypeError when the requested comparison
680 operator is not supported. */
Guido van Rossume797ec12001-01-17 15:24:28 +0000681static PyObject *
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000682do_richcompare(PyObject *v, PyObject *w, int op)
Guido van Rossume797ec12001-01-17 15:24:28 +0000683{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000684 richcmpfunc f;
685 PyObject *res;
686 int checked_reverse_op = 0;
Guido van Rossume797ec12001-01-17 15:24:28 +0000687
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000688 if (v->ob_type != w->ob_type &&
689 PyType_IsSubtype(w->ob_type, v->ob_type) &&
690 (f = w->ob_type->tp_richcompare) != NULL) {
691 checked_reverse_op = 1;
692 res = (*f)(w, v, _Py_SwappedOp[op]);
693 if (res != Py_NotImplemented)
694 return res;
695 Py_DECREF(res);
696 }
697 if ((f = v->ob_type->tp_richcompare) != NULL) {
698 res = (*f)(v, w, op);
699 if (res != Py_NotImplemented)
700 return res;
701 Py_DECREF(res);
702 }
703 if (!checked_reverse_op && (f = w->ob_type->tp_richcompare) != NULL) {
704 res = (*f)(w, v, _Py_SwappedOp[op]);
705 if (res != Py_NotImplemented)
706 return res;
707 Py_DECREF(res);
708 }
709 /* If neither object implements it, provide a sensible default
710 for == and !=, but raise an exception for ordering. */
711 switch (op) {
712 case Py_EQ:
713 res = (v == w) ? Py_True : Py_False;
714 break;
715 case Py_NE:
716 res = (v != w) ? Py_True : Py_False;
717 break;
718 default:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000719 PyErr_Format(PyExc_TypeError,
Victor Stinner91108f02015-10-14 18:25:31 +0200720 "'%s' not supported between instances of '%.100s' and '%.100s'",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000721 opstrings[op],
Victor Stinner91108f02015-10-14 18:25:31 +0200722 v->ob_type->tp_name,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000723 w->ob_type->tp_name);
724 return NULL;
725 }
726 Py_INCREF(res);
727 return res;
Guido van Rossume797ec12001-01-17 15:24:28 +0000728}
729
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000730/* Perform a rich comparison with object result. This wraps do_richcompare()
731 with a check for NULL arguments and a recursion check. */
Guido van Rossume797ec12001-01-17 15:24:28 +0000732
Guido van Rossume797ec12001-01-17 15:24:28 +0000733PyObject *
734PyObject_RichCompare(PyObject *v, PyObject *w, int op)
735{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000736 PyObject *res;
Guido van Rossume797ec12001-01-17 15:24:28 +0000737
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000738 assert(Py_LT <= op && op <= Py_GE);
739 if (v == NULL || w == NULL) {
740 if (!PyErr_Occurred())
741 PyErr_BadInternalCall();
742 return NULL;
743 }
744 if (Py_EnterRecursiveCall(" in comparison"))
745 return NULL;
746 res = do_richcompare(v, w, op);
747 Py_LeaveRecursiveCall();
748 return res;
Guido van Rossume797ec12001-01-17 15:24:28 +0000749}
750
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000751/* Perform a rich comparison with integer result. This wraps
752 PyObject_RichCompare(), returning -1 for error, 0 for false, 1 for true. */
Guido van Rossume797ec12001-01-17 15:24:28 +0000753int
754PyObject_RichCompareBool(PyObject *v, PyObject *w, int op)
755{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000756 PyObject *res;
757 int ok;
Guido van Rossume797ec12001-01-17 15:24:28 +0000758
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000759 /* Quick result when objects are the same.
760 Guarantees that identity implies equality. */
761 if (v == w) {
762 if (op == Py_EQ)
763 return 1;
764 else if (op == Py_NE)
765 return 0;
766 }
Mark Dickinson4a1f5932008-11-12 23:23:36 +0000767
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000768 res = PyObject_RichCompare(v, w, op);
769 if (res == NULL)
770 return -1;
771 if (PyBool_Check(res))
772 ok = (res == Py_True);
773 else
774 ok = PyObject_IsTrue(res);
775 Py_DECREF(res);
776 return ok;
Guido van Rossume797ec12001-01-17 15:24:28 +0000777}
Fred Drake13634cf2000-06-29 19:17:04 +0000778
Antoine Pitrouce4a9da2011-11-21 20:46:33 +0100779Py_hash_t
Nick Coghland1abd252008-07-15 15:46:38 +0000780PyObject_HashNotImplemented(PyObject *v)
781{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000782 PyErr_Format(PyExc_TypeError, "unhashable type: '%.200s'",
783 Py_TYPE(v)->tp_name);
784 return -1;
Nick Coghland1abd252008-07-15 15:46:38 +0000785}
Fred Drake13634cf2000-06-29 19:17:04 +0000786
Benjamin Peterson8f67d082010-10-17 20:54:53 +0000787Py_hash_t
Fred Drake100814d2000-07-09 15:48:49 +0000788PyObject_Hash(PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000789{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000790 PyTypeObject *tp = Py_TYPE(v);
791 if (tp->tp_hash != NULL)
792 return (*tp->tp_hash)(v);
793 /* To keep to the general practice that inheriting
794 * solely from object in C code should work without
795 * an explicit call to PyType_Ready, we implicitly call
796 * PyType_Ready here and then check the tp_hash slot again
797 */
798 if (tp->tp_dict == NULL) {
799 if (PyType_Ready(tp) < 0)
800 return -1;
801 if (tp->tp_hash != NULL)
802 return (*tp->tp_hash)(v);
803 }
804 /* Otherwise, the object can't be hashed */
805 return PyObject_HashNotImplemented(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000806}
807
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000808PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000809PyObject_GetAttrString(PyObject *v, const char *name)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000810{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000811 PyObject *w, *res;
Guido van Rossumd8eb1b31996-08-09 20:52:03 +0000812
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000813 if (Py_TYPE(v)->tp_getattr != NULL)
814 return (*Py_TYPE(v)->tp_getattr)(v, (char*)name);
INADA Naoki3e8d6cb2017-02-21 23:57:25 +0900815 w = PyUnicode_FromString(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000816 if (w == NULL)
817 return NULL;
818 res = PyObject_GetAttr(v, w);
Victor Stinner59af08f2012-03-22 02:09:08 +0100819 Py_DECREF(w);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000820 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000821}
822
823int
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000824PyObject_HasAttrString(PyObject *v, const char *name)
Guido van Rossumed18fdc1993-07-11 19:55:34 +0000825{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000826 PyObject *res = PyObject_GetAttrString(v, name);
827 if (res != NULL) {
828 Py_DECREF(res);
829 return 1;
830 }
831 PyErr_Clear();
832 return 0;
Guido van Rossumed18fdc1993-07-11 19:55:34 +0000833}
834
835int
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000836PyObject_SetAttrString(PyObject *v, const char *name, PyObject *w)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000837{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000838 PyObject *s;
839 int res;
Guido van Rossumd8eb1b31996-08-09 20:52:03 +0000840
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000841 if (Py_TYPE(v)->tp_setattr != NULL)
842 return (*Py_TYPE(v)->tp_setattr)(v, (char*)name, w);
843 s = PyUnicode_InternFromString(name);
844 if (s == NULL)
845 return -1;
846 res = PyObject_SetAttr(v, s, w);
847 Py_XDECREF(s);
848 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000849}
850
Benjamin Petersonbfebb7b2011-12-15 15:34:02 -0500851int
852_PyObject_IsAbstract(PyObject *obj)
853{
854 int res;
855 PyObject* isabstract;
Benjamin Petersonbfebb7b2011-12-15 15:34:02 -0500856
857 if (obj == NULL)
858 return 0;
859
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200860 res = _PyObject_LookupAttrId(obj, &PyId___isabstractmethod__, &isabstract);
861 if (res > 0) {
862 res = PyObject_IsTrue(isabstract);
863 Py_DECREF(isabstract);
Benjamin Petersonbfebb7b2011-12-15 15:34:02 -0500864 }
Benjamin Petersonbfebb7b2011-12-15 15:34:02 -0500865 return res;
866}
867
Guido van Rossum98ff96a1997-05-20 18:34:44 +0000868PyObject *
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200869_PyObject_GetAttrId(PyObject *v, _Py_Identifier *name)
870{
871 PyObject *result;
Martin v. Löwisd10759f2011-11-07 13:00:05 +0100872 PyObject *oname = _PyUnicode_FromId(name); /* borrowed */
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200873 if (!oname)
874 return NULL;
875 result = PyObject_GetAttr(v, oname);
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200876 return result;
877}
878
879int
880_PyObject_HasAttrId(PyObject *v, _Py_Identifier *name)
881{
882 int result;
Martin v. Löwisd10759f2011-11-07 13:00:05 +0100883 PyObject *oname = _PyUnicode_FromId(name); /* borrowed */
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200884 if (!oname)
885 return -1;
886 result = PyObject_HasAttr(v, oname);
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200887 return result;
888}
889
890int
891_PyObject_SetAttrId(PyObject *v, _Py_Identifier *name, PyObject *w)
892{
893 int result;
Martin v. Löwisd10759f2011-11-07 13:00:05 +0100894 PyObject *oname = _PyUnicode_FromId(name); /* borrowed */
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200895 if (!oname)
896 return -1;
897 result = PyObject_SetAttr(v, oname, w);
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200898 return result;
899}
900
901PyObject *
Fred Drake100814d2000-07-09 15:48:49 +0000902PyObject_GetAttr(PyObject *v, PyObject *name)
Guido van Rossum98ff96a1997-05-20 18:34:44 +0000903{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000904 PyTypeObject *tp = Py_TYPE(v);
Tim Peters6d6c1a32001-08-02 04:15:00 +0000905
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000906 if (!PyUnicode_Check(name)) {
907 PyErr_Format(PyExc_TypeError,
908 "attribute name must be string, not '%.200s'",
909 name->ob_type->tp_name);
910 return NULL;
911 }
912 if (tp->tp_getattro != NULL)
913 return (*tp->tp_getattro)(v, name);
914 if (tp->tp_getattr != NULL) {
Serhiy Storchaka2a404b62017-01-22 23:07:07 +0200915 const char *name_str = PyUnicode_AsUTF8(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000916 if (name_str == NULL)
917 return NULL;
Serhiy Storchaka2a404b62017-01-22 23:07:07 +0200918 return (*tp->tp_getattr)(v, (char *)name_str);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000919 }
920 PyErr_Format(PyExc_AttributeError,
921 "'%.50s' object has no attribute '%U'",
922 tp->tp_name, name);
923 return NULL;
Guido van Rossum98ff96a1997-05-20 18:34:44 +0000924}
925
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200926int
927_PyObject_LookupAttr(PyObject *v, PyObject *name, PyObject **result)
INADA Naoki378edee2018-01-16 20:52:41 +0900928{
929 PyTypeObject *tp = Py_TYPE(v);
INADA Naoki378edee2018-01-16 20:52:41 +0900930
931 if (!PyUnicode_Check(name)) {
932 PyErr_Format(PyExc_TypeError,
933 "attribute name must be string, not '%.200s'",
934 name->ob_type->tp_name);
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200935 *result = NULL;
936 return -1;
INADA Naoki378edee2018-01-16 20:52:41 +0900937 }
938
939 if (tp->tp_getattro == PyObject_GenericGetAttr) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200940 *result = _PyObject_GenericGetAttrWithDict(v, name, NULL, 1);
941 if (*result != NULL) {
942 return 1;
943 }
944 if (PyErr_Occurred()) {
945 return -1;
946 }
947 return 0;
INADA Naoki378edee2018-01-16 20:52:41 +0900948 }
949 if (tp->tp_getattro != NULL) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200950 *result = (*tp->tp_getattro)(v, name);
INADA Naoki378edee2018-01-16 20:52:41 +0900951 }
952 else if (tp->tp_getattr != NULL) {
953 const char *name_str = PyUnicode_AsUTF8(name);
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200954 if (name_str == NULL) {
955 *result = NULL;
956 return -1;
957 }
958 *result = (*tp->tp_getattr)(v, (char *)name_str);
INADA Naoki378edee2018-01-16 20:52:41 +0900959 }
INADA Naokie76daeb2018-01-26 16:22:51 +0900960 else {
961 *result = NULL;
962 return 0;
963 }
964
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200965 if (*result != NULL) {
966 return 1;
INADA Naoki378edee2018-01-16 20:52:41 +0900967 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200968 if (!PyErr_ExceptionMatches(PyExc_AttributeError)) {
969 return -1;
970 }
971 PyErr_Clear();
972 return 0;
973}
974
975int
976_PyObject_LookupAttrId(PyObject *v, _Py_Identifier *name, PyObject **result)
977{
978 PyObject *oname = _PyUnicode_FromId(name); /* borrowed */
979 if (!oname) {
980 *result = NULL;
981 return -1;
982 }
983 return _PyObject_LookupAttr(v, oname, result);
INADA Naoki378edee2018-01-16 20:52:41 +0900984}
985
Guido van Rossum98ff96a1997-05-20 18:34:44 +0000986int
Fred Drake100814d2000-07-09 15:48:49 +0000987PyObject_HasAttr(PyObject *v, PyObject *name)
Guido van Rossum98ff96a1997-05-20 18:34:44 +0000988{
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200989 PyObject *res;
990 if (_PyObject_LookupAttr(v, name, &res) < 0) {
991 PyErr_Clear();
992 return 0;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000993 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200994 if (res == NULL) {
995 return 0;
996 }
997 Py_DECREF(res);
998 return 1;
Guido van Rossum98ff96a1997-05-20 18:34:44 +0000999}
1000
1001int
Fred Drake100814d2000-07-09 15:48:49 +00001002PyObject_SetAttr(PyObject *v, PyObject *name, PyObject *value)
Guido van Rossum98ff96a1997-05-20 18:34:44 +00001003{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001004 PyTypeObject *tp = Py_TYPE(v);
1005 int err;
Marc-André Lemburge44e5072000-09-18 16:20:57 +00001006
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001007 if (!PyUnicode_Check(name)) {
1008 PyErr_Format(PyExc_TypeError,
1009 "attribute name must be string, not '%.200s'",
1010 name->ob_type->tp_name);
1011 return -1;
1012 }
1013 Py_INCREF(name);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001014
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001015 PyUnicode_InternInPlace(&name);
1016 if (tp->tp_setattro != NULL) {
1017 err = (*tp->tp_setattro)(v, name, value);
1018 Py_DECREF(name);
1019 return err;
1020 }
1021 if (tp->tp_setattr != NULL) {
Serhiy Storchaka2a404b62017-01-22 23:07:07 +02001022 const char *name_str = PyUnicode_AsUTF8(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001023 if (name_str == NULL)
1024 return -1;
Serhiy Storchaka2a404b62017-01-22 23:07:07 +02001025 err = (*tp->tp_setattr)(v, (char *)name_str, value);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001026 Py_DECREF(name);
1027 return err;
1028 }
1029 Py_DECREF(name);
Victor Stinner24702042018-10-26 17:16:37 +02001030 _PyObject_ASSERT(name, name->ob_refcnt >= 1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001031 if (tp->tp_getattr == NULL && tp->tp_getattro == NULL)
1032 PyErr_Format(PyExc_TypeError,
1033 "'%.100s' object has no attributes "
1034 "(%s .%U)",
1035 tp->tp_name,
1036 value==NULL ? "del" : "assign to",
1037 name);
1038 else
1039 PyErr_Format(PyExc_TypeError,
1040 "'%.100s' object has only read-only attributes "
1041 "(%s .%U)",
1042 tp->tp_name,
1043 value==NULL ? "del" : "assign to",
1044 name);
1045 return -1;
Tim Peters6d6c1a32001-08-02 04:15:00 +00001046}
1047
1048/* Helper to get a pointer to an object's __dict__ slot, if any */
1049
1050PyObject **
1051_PyObject_GetDictPtr(PyObject *obj)
1052{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001053 Py_ssize_t dictoffset;
1054 PyTypeObject *tp = Py_TYPE(obj);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001055
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001056 dictoffset = tp->tp_dictoffset;
1057 if (dictoffset == 0)
1058 return NULL;
1059 if (dictoffset < 0) {
1060 Py_ssize_t tsize;
1061 size_t size;
Guido van Rossum2eb0b872002-03-01 22:24:49 +00001062
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001063 tsize = ((PyVarObject *)obj)->ob_size;
1064 if (tsize < 0)
1065 tsize = -tsize;
1066 size = _PyObject_VAR_SIZE(tp, tsize);
Guido van Rossum2eb0b872002-03-01 22:24:49 +00001067
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001068 dictoffset += (long)size;
Victor Stinner24702042018-10-26 17:16:37 +02001069 _PyObject_ASSERT(obj, dictoffset > 0);
1070 _PyObject_ASSERT(obj, dictoffset % SIZEOF_VOID_P == 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001071 }
1072 return (PyObject **) ((char *)obj + dictoffset);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001073}
1074
Tim Peters6d6c1a32001-08-02 04:15:00 +00001075PyObject *
Raymond Hettinger1da1dbf2003-03-17 19:46:11 +00001076PyObject_SelfIter(PyObject *obj)
Raymond Hettinger01538262003-03-17 08:24:35 +00001077{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001078 Py_INCREF(obj);
1079 return obj;
Raymond Hettinger01538262003-03-17 08:24:35 +00001080}
1081
Amaury Forgeot d'Arcf343e012009-01-12 23:58:21 +00001082/* Helper used when the __next__ method is removed from a type:
1083 tp_iternext is never NULL and can be safely called without checking
1084 on every iteration.
1085 */
1086
1087PyObject *
1088_PyObject_NextNotImplemented(PyObject *self)
1089{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001090 PyErr_Format(PyExc_TypeError,
1091 "'%.200s' object is not iterable",
1092 Py_TYPE(self)->tp_name);
1093 return NULL;
Amaury Forgeot d'Arcf343e012009-01-12 23:58:21 +00001094}
1095
Yury Selivanovf2392132016-12-13 19:03:51 -05001096
1097/* Specialized version of _PyObject_GenericGetAttrWithDict
1098 specifically for the LOAD_METHOD opcode.
1099
1100 Return 1 if a method is found, 0 if it's a regular attribute
1101 from __dict__ or something returned by using a descriptor
1102 protocol.
1103
1104 `method` will point to the resolved attribute or NULL. In the
1105 latter case, an error will be set.
1106*/
1107int
1108_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method)
1109{
1110 PyTypeObject *tp = Py_TYPE(obj);
1111 PyObject *descr;
1112 descrgetfunc f = NULL;
1113 PyObject **dictptr, *dict;
1114 PyObject *attr;
1115 int meth_found = 0;
1116
1117 assert(*method == NULL);
1118
1119 if (Py_TYPE(obj)->tp_getattro != PyObject_GenericGetAttr
1120 || !PyUnicode_Check(name)) {
1121 *method = PyObject_GetAttr(obj, name);
1122 return 0;
1123 }
1124
1125 if (tp->tp_dict == NULL && PyType_Ready(tp) < 0)
1126 return 0;
1127
1128 descr = _PyType_Lookup(tp, name);
1129 if (descr != NULL) {
1130 Py_INCREF(descr);
INADA Naoki5566bbb2017-02-03 07:43:03 +09001131 if (PyFunction_Check(descr) ||
1132 (Py_TYPE(descr) == &PyMethodDescr_Type)) {
Yury Selivanovf2392132016-12-13 19:03:51 -05001133 meth_found = 1;
1134 } else {
1135 f = descr->ob_type->tp_descr_get;
1136 if (f != NULL && PyDescr_IsData(descr)) {
1137 *method = f(descr, obj, (PyObject *)obj->ob_type);
1138 Py_DECREF(descr);
1139 return 0;
1140 }
1141 }
1142 }
1143
1144 dictptr = _PyObject_GetDictPtr(obj);
1145 if (dictptr != NULL && (dict = *dictptr) != NULL) {
1146 Py_INCREF(dict);
1147 attr = PyDict_GetItem(dict, name);
1148 if (attr != NULL) {
1149 Py_INCREF(attr);
1150 *method = attr;
1151 Py_DECREF(dict);
1152 Py_XDECREF(descr);
1153 return 0;
1154 }
1155 Py_DECREF(dict);
1156 }
1157
1158 if (meth_found) {
1159 *method = descr;
1160 return 1;
1161 }
1162
1163 if (f != NULL) {
1164 *method = f(descr, obj, (PyObject *)Py_TYPE(obj));
1165 Py_DECREF(descr);
1166 return 0;
1167 }
1168
1169 if (descr != NULL) {
1170 *method = descr;
1171 return 0;
1172 }
1173
1174 PyErr_Format(PyExc_AttributeError,
1175 "'%.50s' object has no attribute '%U'",
1176 tp->tp_name, name);
1177 return 0;
1178}
1179
1180/* Generic GetAttr functions - put these in your tp_[gs]etattro slot. */
Michael W. Hudson1593f502004-09-14 17:09:47 +00001181
Raymond Hettinger01538262003-03-17 08:24:35 +00001182PyObject *
INADA Naoki378edee2018-01-16 20:52:41 +09001183_PyObject_GenericGetAttrWithDict(PyObject *obj, PyObject *name,
1184 PyObject *dict, int suppress)
Tim Peters6d6c1a32001-08-02 04:15:00 +00001185{
Yury Selivanovf2392132016-12-13 19:03:51 -05001186 /* Make sure the logic of _PyObject_GetMethod is in sync with
1187 this method.
INADA Naoki378edee2018-01-16 20:52:41 +09001188
1189 When suppress=1, this function suppress AttributeError.
Yury Selivanovf2392132016-12-13 19:03:51 -05001190 */
1191
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001192 PyTypeObject *tp = Py_TYPE(obj);
1193 PyObject *descr = NULL;
1194 PyObject *res = NULL;
1195 descrgetfunc f;
1196 Py_ssize_t dictoffset;
1197 PyObject **dictptr;
Tim Peters6d6c1a32001-08-02 04:15:00 +00001198
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001199 if (!PyUnicode_Check(name)){
1200 PyErr_Format(PyExc_TypeError,
1201 "attribute name must be string, not '%.200s'",
1202 name->ob_type->tp_name);
1203 return NULL;
1204 }
Serhiy Storchaka55c861f2016-04-17 20:31:51 +03001205 Py_INCREF(name);
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001206
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001207 if (tp->tp_dict == NULL) {
1208 if (PyType_Ready(tp) < 0)
1209 goto done;
1210 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001211
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001212 descr = _PyType_Lookup(tp, name);
Michael W. Hudsonb2c7de42003-08-15 13:07:47 +00001213
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001214 f = NULL;
1215 if (descr != NULL) {
Serhiy Storchaka55c861f2016-04-17 20:31:51 +03001216 Py_INCREF(descr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001217 f = descr->ob_type->tp_descr_get;
1218 if (f != NULL && PyDescr_IsData(descr)) {
1219 res = f(descr, obj, (PyObject *)obj->ob_type);
INADA Naoki378edee2018-01-16 20:52:41 +09001220 if (res == NULL && suppress &&
1221 PyErr_ExceptionMatches(PyExc_AttributeError)) {
1222 PyErr_Clear();
1223 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001224 goto done;
1225 }
1226 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001227
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001228 if (dict == NULL) {
1229 /* Inline _PyObject_GetDictPtr */
1230 dictoffset = tp->tp_dictoffset;
1231 if (dictoffset != 0) {
1232 if (dictoffset < 0) {
1233 Py_ssize_t tsize;
1234 size_t size;
Guido van Rossumc66ff442002-08-19 16:50:48 +00001235
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001236 tsize = ((PyVarObject *)obj)->ob_size;
1237 if (tsize < 0)
1238 tsize = -tsize;
1239 size = _PyObject_VAR_SIZE(tp, tsize);
Victor Stinner24702042018-10-26 17:16:37 +02001240 _PyObject_ASSERT(obj, size <= PY_SSIZE_T_MAX);
Guido van Rossumc66ff442002-08-19 16:50:48 +00001241
Serhiy Storchaka55c861f2016-04-17 20:31:51 +03001242 dictoffset += (Py_ssize_t)size;
Victor Stinner24702042018-10-26 17:16:37 +02001243 _PyObject_ASSERT(obj, dictoffset > 0);
1244 _PyObject_ASSERT(obj, dictoffset % SIZEOF_VOID_P == 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001245 }
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001246 dictptr = (PyObject **) ((char *)obj + dictoffset);
1247 dict = *dictptr;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001248 }
1249 }
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001250 if (dict != NULL) {
1251 Py_INCREF(dict);
1252 res = PyDict_GetItem(dict, name);
1253 if (res != NULL) {
1254 Py_INCREF(res);
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001255 Py_DECREF(dict);
1256 goto done;
1257 }
1258 Py_DECREF(dict);
1259 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001260
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001261 if (f != NULL) {
1262 res = f(descr, obj, (PyObject *)Py_TYPE(obj));
INADA Naoki378edee2018-01-16 20:52:41 +09001263 if (res == NULL && suppress &&
1264 PyErr_ExceptionMatches(PyExc_AttributeError)) {
1265 PyErr_Clear();
1266 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001267 goto done;
1268 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001269
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001270 if (descr != NULL) {
1271 res = descr;
Victor Stinner2d01dc02012-03-09 00:44:13 +01001272 descr = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001273 goto done;
1274 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001275
INADA Naoki378edee2018-01-16 20:52:41 +09001276 if (!suppress) {
1277 PyErr_Format(PyExc_AttributeError,
1278 "'%.50s' object has no attribute '%U'",
1279 tp->tp_name, name);
1280 }
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001281 done:
Victor Stinner2d01dc02012-03-09 00:44:13 +01001282 Py_XDECREF(descr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001283 Py_DECREF(name);
1284 return res;
Tim Peters6d6c1a32001-08-02 04:15:00 +00001285}
1286
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001287PyObject *
1288PyObject_GenericGetAttr(PyObject *obj, PyObject *name)
1289{
INADA Naoki378edee2018-01-16 20:52:41 +09001290 return _PyObject_GenericGetAttrWithDict(obj, name, NULL, 0);
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001291}
1292
Tim Peters6d6c1a32001-08-02 04:15:00 +00001293int
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001294_PyObject_GenericSetAttrWithDict(PyObject *obj, PyObject *name,
1295 PyObject *value, PyObject *dict)
Tim Peters6d6c1a32001-08-02 04:15:00 +00001296{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001297 PyTypeObject *tp = Py_TYPE(obj);
1298 PyObject *descr;
1299 descrsetfunc f;
1300 PyObject **dictptr;
1301 int res = -1;
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001302
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001303 if (!PyUnicode_Check(name)){
1304 PyErr_Format(PyExc_TypeError,
1305 "attribute name must be string, not '%.200s'",
1306 name->ob_type->tp_name);
1307 return -1;
1308 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001309
Benjamin Peterson74529ad2012-03-09 07:25:32 -08001310 if (tp->tp_dict == NULL && PyType_Ready(tp) < 0)
1311 return -1;
1312
1313 Py_INCREF(name);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001314
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001315 descr = _PyType_Lookup(tp, name);
Victor Stinner2d01dc02012-03-09 00:44:13 +01001316
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001317 if (descr != NULL) {
Serhiy Storchaka55c861f2016-04-17 20:31:51 +03001318 Py_INCREF(descr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001319 f = descr->ob_type->tp_descr_set;
Serhiy Storchaka55c861f2016-04-17 20:31:51 +03001320 if (f != NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001321 res = f(descr, obj, value);
1322 goto done;
1323 }
1324 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001325
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001326 if (dict == NULL) {
1327 dictptr = _PyObject_GetDictPtr(obj);
Serhiy Storchaka55c861f2016-04-17 20:31:51 +03001328 if (dictptr == NULL) {
1329 if (descr == NULL) {
1330 PyErr_Format(PyExc_AttributeError,
1331 "'%.100s' object has no attribute '%U'",
1332 tp->tp_name, name);
1333 }
1334 else {
1335 PyErr_Format(PyExc_AttributeError,
1336 "'%.50s' object attribute '%U' is read-only",
1337 tp->tp_name, name);
1338 }
Benjamin Peterson7d95e402012-04-23 11:24:50 -04001339 goto done;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001340 }
Serhiy Storchaka55c861f2016-04-17 20:31:51 +03001341 res = _PyObjectDict_SetItem(tp, dictptr, name, value);
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001342 }
Serhiy Storchaka55c861f2016-04-17 20:31:51 +03001343 else {
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001344 Py_INCREF(dict);
1345 if (value == NULL)
1346 res = PyDict_DelItem(dict, name);
1347 else
1348 res = PyDict_SetItem(dict, name, value);
Benjamin Peterson74529ad2012-03-09 07:25:32 -08001349 Py_DECREF(dict);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001350 }
Serhiy Storchaka55c861f2016-04-17 20:31:51 +03001351 if (res < 0 && PyErr_ExceptionMatches(PyExc_KeyError))
1352 PyErr_SetObject(PyExc_AttributeError, name);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001353
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001354 done:
Victor Stinner2d01dc02012-03-09 00:44:13 +01001355 Py_XDECREF(descr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001356 Py_DECREF(name);
1357 return res;
Guido van Rossum98ff96a1997-05-20 18:34:44 +00001358}
1359
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001360int
1361PyObject_GenericSetAttr(PyObject *obj, PyObject *name, PyObject *value)
1362{
1363 return _PyObject_GenericSetAttrWithDict(obj, name, value, NULL);
1364}
1365
Benjamin Peterson8eb12692012-02-19 19:59:10 -05001366int
1367PyObject_GenericSetDict(PyObject *obj, PyObject *value, void *context)
1368{
Serhiy Storchaka576f1322016-01-05 21:27:54 +02001369 PyObject **dictptr = _PyObject_GetDictPtr(obj);
Benjamin Peterson8eb12692012-02-19 19:59:10 -05001370 if (dictptr == NULL) {
1371 PyErr_SetString(PyExc_AttributeError,
1372 "This object has no __dict__");
1373 return -1;
1374 }
1375 if (value == NULL) {
1376 PyErr_SetString(PyExc_TypeError, "cannot delete __dict__");
1377 return -1;
1378 }
1379 if (!PyDict_Check(value)) {
1380 PyErr_Format(PyExc_TypeError,
1381 "__dict__ must be set to a dictionary, "
1382 "not a '%.200s'", Py_TYPE(value)->tp_name);
1383 return -1;
1384 }
Serhiy Storchaka576f1322016-01-05 21:27:54 +02001385 Py_INCREF(value);
Serhiy Storchakaec397562016-04-06 09:50:03 +03001386 Py_XSETREF(*dictptr, value);
Benjamin Peterson8eb12692012-02-19 19:59:10 -05001387 return 0;
1388}
1389
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001390
Guido van Rossum6ac258d1993-05-12 08:24:20 +00001391/* Test a value used as condition, e.g., in a for or if statement.
1392 Return -1 if an error occurred */
1393
1394int
Fred Drake100814d2000-07-09 15:48:49 +00001395PyObject_IsTrue(PyObject *v)
Guido van Rossum6ac258d1993-05-12 08:24:20 +00001396{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001397 Py_ssize_t res;
1398 if (v == Py_True)
1399 return 1;
1400 if (v == Py_False)
1401 return 0;
1402 if (v == Py_None)
1403 return 0;
1404 else if (v->ob_type->tp_as_number != NULL &&
1405 v->ob_type->tp_as_number->nb_bool != NULL)
1406 res = (*v->ob_type->tp_as_number->nb_bool)(v);
1407 else if (v->ob_type->tp_as_mapping != NULL &&
1408 v->ob_type->tp_as_mapping->mp_length != NULL)
1409 res = (*v->ob_type->tp_as_mapping->mp_length)(v);
1410 else if (v->ob_type->tp_as_sequence != NULL &&
1411 v->ob_type->tp_as_sequence->sq_length != NULL)
1412 res = (*v->ob_type->tp_as_sequence->sq_length)(v);
1413 else
1414 return 1;
1415 /* if it is negative, it should be either -1 or -2 */
1416 return (res > 0) ? 1 : Py_SAFE_DOWNCAST(res, Py_ssize_t, int);
Guido van Rossum6ac258d1993-05-12 08:24:20 +00001417}
1418
Tim Peters803526b2002-07-07 05:13:56 +00001419/* equivalent of 'not v'
Guido van Rossumc3d3f961998-04-09 17:53:59 +00001420 Return -1 if an error occurred */
1421
1422int
Fred Drake100814d2000-07-09 15:48:49 +00001423PyObject_Not(PyObject *v)
Guido van Rossumc3d3f961998-04-09 17:53:59 +00001424{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001425 int res;
1426 res = PyObject_IsTrue(v);
1427 if (res < 0)
1428 return res;
1429 return res == 0;
Guido van Rossumc3d3f961998-04-09 17:53:59 +00001430}
1431
Guido van Rossum49b11fe1995-01-26 00:38:22 +00001432/* Test whether an object can be called */
1433
1434int
Fred Drake100814d2000-07-09 15:48:49 +00001435PyCallable_Check(PyObject *x)
Guido van Rossum49b11fe1995-01-26 00:38:22 +00001436{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001437 if (x == NULL)
1438 return 0;
1439 return x->ob_type->tp_call != NULL;
Guido van Rossum49b11fe1995-01-26 00:38:22 +00001440}
1441
Tim Peters7eea37e2001-09-04 22:08:56 +00001442
Georg Brandle32b4222007-03-10 22:13:27 +00001443/* Helper for PyObject_Dir without arguments: returns the local scope. */
1444static PyObject *
Guido van Rossumad7d8d12007-04-13 01:39:34 +00001445_dir_locals(void)
Tim Peters305b5852001-09-17 02:38:46 +00001446{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001447 PyObject *names;
Victor Stinner41bb43a2013-10-29 01:19:37 +01001448 PyObject *locals;
Tim Peters305b5852001-09-17 02:38:46 +00001449
Victor Stinner41bb43a2013-10-29 01:19:37 +01001450 locals = PyEval_GetLocals();
1451 if (locals == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001452 return NULL;
Tim Peters305b5852001-09-17 02:38:46 +00001453
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001454 names = PyMapping_Keys(locals);
1455 if (!names)
1456 return NULL;
1457 if (!PyList_Check(names)) {
1458 PyErr_Format(PyExc_TypeError,
1459 "dir(): expected keys() of locals to be a list, "
1460 "not '%.200s'", Py_TYPE(names)->tp_name);
1461 Py_DECREF(names);
1462 return NULL;
1463 }
Benjamin Peterson3bbb7222011-06-11 16:12:08 -05001464 if (PyList_Sort(names)) {
1465 Py_DECREF(names);
1466 return NULL;
1467 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001468 /* the locals don't need to be DECREF'd */
1469 return names;
Georg Brandle32b4222007-03-10 22:13:27 +00001470}
1471
Benjamin Peterson82b00c12011-05-24 11:09:06 -05001472/* Helper for PyObject_Dir: object introspection. */
Georg Brandle32b4222007-03-10 22:13:27 +00001473static PyObject *
1474_dir_object(PyObject *obj)
1475{
Benjamin Peterson3bbb7222011-06-11 16:12:08 -05001476 PyObject *result, *sorted;
Benjamin Petersonce798522012-01-22 11:24:29 -05001477 PyObject *dirfunc = _PyObject_LookupSpecial(obj, &PyId___dir__);
Georg Brandle32b4222007-03-10 22:13:27 +00001478
Victor Stinner24702042018-10-26 17:16:37 +02001479 assert(obj != NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001480 if (dirfunc == NULL) {
Benjamin Peterson82b00c12011-05-24 11:09:06 -05001481 if (!PyErr_Occurred())
1482 PyErr_SetString(PyExc_TypeError, "object does not provide __dir__");
1483 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001484 }
Benjamin Peterson82b00c12011-05-24 11:09:06 -05001485 /* use __dir__ */
Victor Stinnerf17c3de2016-12-06 18:46:19 +01001486 result = _PyObject_CallNoArg(dirfunc);
Benjamin Peterson82b00c12011-05-24 11:09:06 -05001487 Py_DECREF(dirfunc);
1488 if (result == NULL)
1489 return NULL;
Benjamin Peterson3bbb7222011-06-11 16:12:08 -05001490 /* return sorted(result) */
1491 sorted = PySequence_List(result);
1492 Py_DECREF(result);
1493 if (sorted == NULL)
1494 return NULL;
1495 if (PyList_Sort(sorted)) {
1496 Py_DECREF(sorted);
1497 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001498 }
Benjamin Peterson3bbb7222011-06-11 16:12:08 -05001499 return sorted;
Georg Brandle32b4222007-03-10 22:13:27 +00001500}
1501
1502/* Implementation of dir() -- if obj is NULL, returns the names in the current
1503 (local) scope. Otherwise, performs introspection of the object: returns a
1504 sorted list of attribute names (supposedly) accessible from the object
1505*/
1506PyObject *
1507PyObject_Dir(PyObject *obj)
1508{
Benjamin Peterson3bbb7222011-06-11 16:12:08 -05001509 return (obj == NULL) ? _dir_locals() : _dir_object(obj);
Tim Peters7eea37e2001-09-04 22:08:56 +00001510}
Guido van Rossum49b11fe1995-01-26 00:38:22 +00001511
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001512/*
Raymond Hettinger66d2be82011-07-28 09:55:13 -07001513None is a non-NULL undefined value.
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001514There is (and should be!) no way to create other objects of this type,
Guido van Rossum3f5da241990-12-20 15:06:42 +00001515so there is exactly one (which is indestructible, by the way).
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001516*/
1517
Guido van Rossum0c182a11992-03-27 17:26:13 +00001518/* ARGSUSED */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001519static PyObject *
Fred Drake100814d2000-07-09 15:48:49 +00001520none_repr(PyObject *op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001521{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001522 return PyUnicode_FromString("None");
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001523}
1524
Barry Warsaw9bf16442001-01-23 16:24:35 +00001525/* ARGUSED */
1526static void
Tim Peters803526b2002-07-07 05:13:56 +00001527none_dealloc(PyObject* ignore)
Barry Warsaw9bf16442001-01-23 16:24:35 +00001528{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001529 /* This should never get called, but we also don't want to SEGV if
1530 * we accidentally decref None out of existence.
1531 */
1532 Py_FatalError("deallocating None");
Barry Warsaw9bf16442001-01-23 16:24:35 +00001533}
1534
Benjamin Petersonc4607ae2011-07-29 18:19:43 -05001535static PyObject *
1536none_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
1537{
Serhiy Storchaka5ab81d72016-12-16 16:18:57 +02001538 if (PyTuple_GET_SIZE(args) || (kwargs && PyDict_GET_SIZE(kwargs))) {
Benjamin Petersonc4607ae2011-07-29 18:19:43 -05001539 PyErr_SetString(PyExc_TypeError, "NoneType takes no arguments");
1540 return NULL;
1541 }
1542 Py_RETURN_NONE;
1543}
1544
Raymond Hettinger66d2be82011-07-28 09:55:13 -07001545static int
1546none_bool(PyObject *v)
1547{
1548 return 0;
1549}
1550
1551static PyNumberMethods none_as_number = {
1552 0, /* nb_add */
1553 0, /* nb_subtract */
1554 0, /* nb_multiply */
1555 0, /* nb_remainder */
1556 0, /* nb_divmod */
1557 0, /* nb_power */
1558 0, /* nb_negative */
1559 0, /* nb_positive */
1560 0, /* nb_absolute */
1561 (inquiry)none_bool, /* nb_bool */
1562 0, /* nb_invert */
1563 0, /* nb_lshift */
1564 0, /* nb_rshift */
1565 0, /* nb_and */
1566 0, /* nb_xor */
1567 0, /* nb_or */
1568 0, /* nb_int */
1569 0, /* nb_reserved */
1570 0, /* nb_float */
1571 0, /* nb_inplace_add */
1572 0, /* nb_inplace_subtract */
1573 0, /* nb_inplace_multiply */
1574 0, /* nb_inplace_remainder */
1575 0, /* nb_inplace_power */
1576 0, /* nb_inplace_lshift */
1577 0, /* nb_inplace_rshift */
1578 0, /* nb_inplace_and */
1579 0, /* nb_inplace_xor */
1580 0, /* nb_inplace_or */
1581 0, /* nb_floor_divide */
1582 0, /* nb_true_divide */
1583 0, /* nb_inplace_floor_divide */
1584 0, /* nb_inplace_true_divide */
1585 0, /* nb_index */
1586};
Barry Warsaw9bf16442001-01-23 16:24:35 +00001587
Alexandre Vassalotti65846c62013-11-30 17:55:48 -08001588PyTypeObject _PyNone_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001589 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1590 "NoneType",
1591 0,
1592 0,
1593 none_dealloc, /*tp_dealloc*/ /*never called*/
1594 0, /*tp_print*/
1595 0, /*tp_getattr*/
1596 0, /*tp_setattr*/
1597 0, /*tp_reserved*/
1598 none_repr, /*tp_repr*/
Raymond Hettinger66d2be82011-07-28 09:55:13 -07001599 &none_as_number, /*tp_as_number*/
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001600 0, /*tp_as_sequence*/
1601 0, /*tp_as_mapping*/
1602 0, /*tp_hash */
Benjamin Petersonc4607ae2011-07-29 18:19:43 -05001603 0, /*tp_call */
1604 0, /*tp_str */
1605 0, /*tp_getattro */
1606 0, /*tp_setattro */
1607 0, /*tp_as_buffer */
1608 Py_TPFLAGS_DEFAULT, /*tp_flags */
1609 0, /*tp_doc */
1610 0, /*tp_traverse */
1611 0, /*tp_clear */
1612 0, /*tp_richcompare */
1613 0, /*tp_weaklistoffset */
1614 0, /*tp_iter */
1615 0, /*tp_iternext */
1616 0, /*tp_methods */
1617 0, /*tp_members */
1618 0, /*tp_getset */
1619 0, /*tp_base */
1620 0, /*tp_dict */
1621 0, /*tp_descr_get */
1622 0, /*tp_descr_set */
1623 0, /*tp_dictoffset */
1624 0, /*tp_init */
1625 0, /*tp_alloc */
1626 none_new, /*tp_new */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001627};
1628
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001629PyObject _Py_NoneStruct = {
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00001630 _PyObject_EXTRA_INIT
Alexandre Vassalotti65846c62013-11-30 17:55:48 -08001631 1, &_PyNone_Type
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001632};
1633
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +00001634/* NotImplemented is an object that can be used to signal that an
1635 operation is not implemented for the given type combination. */
1636
1637static PyObject *
1638NotImplemented_repr(PyObject *op)
1639{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001640 return PyUnicode_FromString("NotImplemented");
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +00001641}
1642
Benjamin Peterson18d7d7a2011-07-29 18:27:44 -05001643static PyObject *
Siddhesh Poyarekar55edd0c2018-04-30 00:29:33 +05301644NotImplemented_reduce(PyObject *op, PyObject *Py_UNUSED(ignored))
Alexandre Vassalottic49477b2013-11-24 02:53:45 -08001645{
1646 return PyUnicode_FromString("NotImplemented");
1647}
1648
1649static PyMethodDef notimplemented_methods[] = {
Siddhesh Poyarekar55edd0c2018-04-30 00:29:33 +05301650 {"__reduce__", NotImplemented_reduce, METH_NOARGS, NULL},
Alexandre Vassalottic49477b2013-11-24 02:53:45 -08001651 {NULL, NULL}
1652};
1653
1654static PyObject *
Benjamin Peterson18d7d7a2011-07-29 18:27:44 -05001655notimplemented_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
1656{
Serhiy Storchaka5ab81d72016-12-16 16:18:57 +02001657 if (PyTuple_GET_SIZE(args) || (kwargs && PyDict_GET_SIZE(kwargs))) {
Benjamin Peterson18d7d7a2011-07-29 18:27:44 -05001658 PyErr_SetString(PyExc_TypeError, "NotImplementedType takes no arguments");
1659 return NULL;
1660 }
Brian Curtindfc80e32011-08-10 20:28:54 -05001661 Py_RETURN_NOTIMPLEMENTED;
Benjamin Peterson18d7d7a2011-07-29 18:27:44 -05001662}
1663
Armin Ronacher226b1db2012-10-06 14:28:58 +02001664static void
1665notimplemented_dealloc(PyObject* ignore)
1666{
1667 /* This should never get called, but we also don't want to SEGV if
1668 * we accidentally decref NotImplemented out of existence.
1669 */
1670 Py_FatalError("deallocating NotImplemented");
1671}
1672
Alexandre Vassalotti65846c62013-11-30 17:55:48 -08001673PyTypeObject _PyNotImplemented_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001674 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1675 "NotImplementedType",
1676 0,
1677 0,
Armin Ronacher226b1db2012-10-06 14:28:58 +02001678 notimplemented_dealloc, /*tp_dealloc*/ /*never called*/
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001679 0, /*tp_print*/
1680 0, /*tp_getattr*/
1681 0, /*tp_setattr*/
1682 0, /*tp_reserved*/
1683 NotImplemented_repr, /*tp_repr*/
1684 0, /*tp_as_number*/
1685 0, /*tp_as_sequence*/
1686 0, /*tp_as_mapping*/
1687 0, /*tp_hash */
Benjamin Peterson18d7d7a2011-07-29 18:27:44 -05001688 0, /*tp_call */
1689 0, /*tp_str */
1690 0, /*tp_getattro */
1691 0, /*tp_setattro */
1692 0, /*tp_as_buffer */
1693 Py_TPFLAGS_DEFAULT, /*tp_flags */
1694 0, /*tp_doc */
1695 0, /*tp_traverse */
1696 0, /*tp_clear */
1697 0, /*tp_richcompare */
1698 0, /*tp_weaklistoffset */
1699 0, /*tp_iter */
1700 0, /*tp_iternext */
Alexandre Vassalottic49477b2013-11-24 02:53:45 -08001701 notimplemented_methods, /*tp_methods */
Benjamin Peterson18d7d7a2011-07-29 18:27:44 -05001702 0, /*tp_members */
1703 0, /*tp_getset */
1704 0, /*tp_base */
1705 0, /*tp_dict */
1706 0, /*tp_descr_get */
1707 0, /*tp_descr_set */
1708 0, /*tp_dictoffset */
1709 0, /*tp_init */
1710 0, /*tp_alloc */
1711 notimplemented_new, /*tp_new */
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +00001712};
1713
1714PyObject _Py_NotImplementedStruct = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001715 _PyObject_EXTRA_INIT
Alexandre Vassalotti65846c62013-11-30 17:55:48 -08001716 1, &_PyNotImplemented_Type
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +00001717};
1718
Guido van Rossumba21a492001-08-16 08:17:26 +00001719void
1720_Py_ReadyTypes(void)
1721{
Victor Stinner5a1bb4e2014-06-02 14:10:59 +02001722 if (PyType_Ready(&PyBaseObject_Type) < 0)
1723 Py_FatalError("Can't initialize object type");
1724
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001725 if (PyType_Ready(&PyType_Type) < 0)
1726 Py_FatalError("Can't initialize type type");
Guido van Rossumba21a492001-08-16 08:17:26 +00001727
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001728 if (PyType_Ready(&_PyWeakref_RefType) < 0)
1729 Py_FatalError("Can't initialize weakref type");
Fred Drake0a4dd392004-07-02 18:57:45 +00001730
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001731 if (PyType_Ready(&_PyWeakref_CallableProxyType) < 0)
1732 Py_FatalError("Can't initialize callable weakref proxy type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001733
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001734 if (PyType_Ready(&_PyWeakref_ProxyType) < 0)
1735 Py_FatalError("Can't initialize weakref proxy type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001736
Victor Stinner5a1bb4e2014-06-02 14:10:59 +02001737 if (PyType_Ready(&PyLong_Type) < 0)
1738 Py_FatalError("Can't initialize int type");
1739
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001740 if (PyType_Ready(&PyBool_Type) < 0)
1741 Py_FatalError("Can't initialize bool type");
Guido van Rossum77f6a652002-04-03 22:41:51 +00001742
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001743 if (PyType_Ready(&PyByteArray_Type) < 0)
1744 Py_FatalError("Can't initialize bytearray type");
Guido van Rossum4dfe8a12006-04-22 23:28:04 +00001745
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001746 if (PyType_Ready(&PyBytes_Type) < 0)
1747 Py_FatalError("Can't initialize 'str'");
Guido van Rossumcacfc072002-05-24 19:01:59 +00001748
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001749 if (PyType_Ready(&PyList_Type) < 0)
1750 Py_FatalError("Can't initialize list type");
Guido van Rossumba21a492001-08-16 08:17:26 +00001751
Alexandre Vassalotti65846c62013-11-30 17:55:48 -08001752 if (PyType_Ready(&_PyNone_Type) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001753 Py_FatalError("Can't initialize None type");
Guido van Rossumba21a492001-08-16 08:17:26 +00001754
Alexandre Vassalotti65846c62013-11-30 17:55:48 -08001755 if (PyType_Ready(&_PyNotImplemented_Type) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001756 Py_FatalError("Can't initialize NotImplemented type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001757
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001758 if (PyType_Ready(&PyTraceBack_Type) < 0)
1759 Py_FatalError("Can't initialize traceback type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001760
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001761 if (PyType_Ready(&PySuper_Type) < 0)
1762 Py_FatalError("Can't initialize super type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001763
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001764 if (PyType_Ready(&PyRange_Type) < 0)
1765 Py_FatalError("Can't initialize range type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001766
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001767 if (PyType_Ready(&PyDict_Type) < 0)
1768 Py_FatalError("Can't initialize dict type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001769
Benjamin Petersondb87c992016-11-06 13:01:07 -08001770 if (PyType_Ready(&PyDictKeys_Type) < 0)
1771 Py_FatalError("Can't initialize dict keys type");
1772
1773 if (PyType_Ready(&PyDictValues_Type) < 0)
1774 Py_FatalError("Can't initialize dict values type");
1775
1776 if (PyType_Ready(&PyDictItems_Type) < 0)
1777 Py_FatalError("Can't initialize dict items type");
1778
Rémi Lapeyre6531bf62018-11-06 01:38:54 +01001779 if (PyType_Ready(&PyDictRevIterKey_Type) < 0)
1780 Py_FatalError("Can't initialize reversed dict keys type");
1781
1782 if (PyType_Ready(&PyDictRevIterValue_Type) < 0)
1783 Py_FatalError("Can't initialize reversed dict values type");
1784
1785 if (PyType_Ready(&PyDictRevIterItem_Type) < 0)
1786 Py_FatalError("Can't initialize reversed dict items type");
1787
Eric Snow96c6af92015-05-29 22:21:39 -06001788 if (PyType_Ready(&PyODict_Type) < 0)
1789 Py_FatalError("Can't initialize OrderedDict type");
1790
1791 if (PyType_Ready(&PyODictKeys_Type) < 0)
1792 Py_FatalError("Can't initialize odict_keys type");
1793
1794 if (PyType_Ready(&PyODictItems_Type) < 0)
1795 Py_FatalError("Can't initialize odict_items type");
1796
1797 if (PyType_Ready(&PyODictValues_Type) < 0)
1798 Py_FatalError("Can't initialize odict_values type");
1799
1800 if (PyType_Ready(&PyODictIter_Type) < 0)
1801 Py_FatalError("Can't initialize odict_keyiterator type");
1802
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001803 if (PyType_Ready(&PySet_Type) < 0)
1804 Py_FatalError("Can't initialize set type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001805
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001806 if (PyType_Ready(&PyUnicode_Type) < 0)
1807 Py_FatalError("Can't initialize str type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001808
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001809 if (PyType_Ready(&PySlice_Type) < 0)
1810 Py_FatalError("Can't initialize slice type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001811
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001812 if (PyType_Ready(&PyStaticMethod_Type) < 0)
1813 Py_FatalError("Can't initialize static method type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001814
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001815 if (PyType_Ready(&PyComplex_Type) < 0)
1816 Py_FatalError("Can't initialize complex type");
Skip Montanaroba1e0f42009-10-18 14:25:35 +00001817
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001818 if (PyType_Ready(&PyFloat_Type) < 0)
1819 Py_FatalError("Can't initialize float type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001820
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001821 if (PyType_Ready(&PyFrozenSet_Type) < 0)
1822 Py_FatalError("Can't initialize frozenset type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001823
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001824 if (PyType_Ready(&PyProperty_Type) < 0)
1825 Py_FatalError("Can't initialize property type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001826
Stefan Krah9a2d99e2012-02-25 12:24:21 +01001827 if (PyType_Ready(&_PyManagedBuffer_Type) < 0)
1828 Py_FatalError("Can't initialize managed buffer type");
1829
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001830 if (PyType_Ready(&PyMemoryView_Type) < 0)
1831 Py_FatalError("Can't initialize memoryview type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001832
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001833 if (PyType_Ready(&PyTuple_Type) < 0)
1834 Py_FatalError("Can't initialize tuple type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001835
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001836 if (PyType_Ready(&PyEnum_Type) < 0)
1837 Py_FatalError("Can't initialize enumerate type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001838
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001839 if (PyType_Ready(&PyReversed_Type) < 0)
1840 Py_FatalError("Can't initialize reversed type");
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001841
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001842 if (PyType_Ready(&PyStdPrinter_Type) < 0)
1843 Py_FatalError("Can't initialize StdPrinter");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001844
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001845 if (PyType_Ready(&PyCode_Type) < 0)
1846 Py_FatalError("Can't initialize code type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001847
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001848 if (PyType_Ready(&PyFrame_Type) < 0)
1849 Py_FatalError("Can't initialize frame type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001850
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001851 if (PyType_Ready(&PyCFunction_Type) < 0)
1852 Py_FatalError("Can't initialize builtin function type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001853
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001854 if (PyType_Ready(&PyMethod_Type) < 0)
1855 Py_FatalError("Can't initialize method type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001856
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001857 if (PyType_Ready(&PyFunction_Type) < 0)
1858 Py_FatalError("Can't initialize function type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001859
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001860 if (PyType_Ready(&PyDictProxy_Type) < 0)
1861 Py_FatalError("Can't initialize dict proxy type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001862
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001863 if (PyType_Ready(&PyGen_Type) < 0)
1864 Py_FatalError("Can't initialize generator type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001865
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001866 if (PyType_Ready(&PyGetSetDescr_Type) < 0)
1867 Py_FatalError("Can't initialize get-set descriptor type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001868
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001869 if (PyType_Ready(&PyWrapperDescr_Type) < 0)
1870 Py_FatalError("Can't initialize wrapper type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001871
Benjamin Petersoneff61f62011-09-01 16:32:31 -04001872 if (PyType_Ready(&_PyMethodWrapper_Type) < 0)
1873 Py_FatalError("Can't initialize method wrapper type");
1874
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001875 if (PyType_Ready(&PyEllipsis_Type) < 0)
1876 Py_FatalError("Can't initialize ellipsis type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001877
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001878 if (PyType_Ready(&PyMemberDescr_Type) < 0)
1879 Py_FatalError("Can't initialize member descriptor type");
Benjamin Peterson8bc5b682009-05-09 18:10:51 +00001880
Barry Warsaw409da152012-06-03 16:18:47 -04001881 if (PyType_Ready(&_PyNamespace_Type) < 0)
1882 Py_FatalError("Can't initialize namespace type");
Benjamin Petersone8ea97f2012-10-30 23:27:52 -04001883
Benjamin Petersonc4311282012-10-30 23:21:10 -04001884 if (PyType_Ready(&PyCapsule_Type) < 0)
1885 Py_FatalError("Can't initialize capsule type");
1886
1887 if (PyType_Ready(&PyLongRangeIter_Type) < 0)
1888 Py_FatalError("Can't initialize long range iterator type");
1889
1890 if (PyType_Ready(&PyCell_Type) < 0)
1891 Py_FatalError("Can't initialize cell type");
1892
1893 if (PyType_Ready(&PyInstanceMethod_Type) < 0)
1894 Py_FatalError("Can't initialize instance method type");
1895
1896 if (PyType_Ready(&PyClassMethodDescr_Type) < 0)
1897 Py_FatalError("Can't initialize class method descr type");
1898
1899 if (PyType_Ready(&PyMethodDescr_Type) < 0)
1900 Py_FatalError("Can't initialize method descr type");
1901
1902 if (PyType_Ready(&PyCallIter_Type) < 0)
1903 Py_FatalError("Can't initialize call iter type");
1904
1905 if (PyType_Ready(&PySeqIter_Type) < 0)
1906 Py_FatalError("Can't initialize sequence iterator type");
Yury Selivanov5376ba92015-06-22 12:19:30 -04001907
1908 if (PyType_Ready(&PyCoro_Type) < 0)
1909 Py_FatalError("Can't initialize coroutine type");
1910
1911 if (PyType_Ready(&_PyCoroWrapper_Type) < 0)
1912 Py_FatalError("Can't initialize coroutine wrapper type");
Guido van Rossumba21a492001-08-16 08:17:26 +00001913}
1914
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001915
Guido van Rossum84a90321996-05-22 16:34:47 +00001916#ifdef Py_TRACE_REFS
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001917
Guido van Rossumaacdc9d1996-08-12 21:32:12 +00001918void
Fred Drake100814d2000-07-09 15:48:49 +00001919_Py_NewReference(PyObject *op)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001920{
Victor Stinner9e00e802018-10-25 13:31:16 +02001921 if (_Py_tracemalloc_config.tracing) {
1922 _PyTraceMalloc_NewReference(op);
1923 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001924 _Py_INC_REFTOTAL;
1925 op->ob_refcnt = 1;
1926 _Py_AddToAllObjects(op, 1);
1927 _Py_INC_TPALLOCS(op);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001928}
1929
Guido van Rossumaacdc9d1996-08-12 21:32:12 +00001930void
Antoine Pitrou9ed5f272013-08-13 20:18:52 +02001931_Py_ForgetReference(PyObject *op)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001932{
Guido van Rossumbffd6832000-01-20 22:32:56 +00001933#ifdef SLOW_UNREF_CHECK
Antoine Pitrou9ed5f272013-08-13 20:18:52 +02001934 PyObject *p;
Guido van Rossumbffd6832000-01-20 22:32:56 +00001935#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001936 if (op->ob_refcnt < 0)
1937 Py_FatalError("UNREF negative refcnt");
1938 if (op == &refchain ||
1939 op->_ob_prev->_ob_next != op || op->_ob_next->_ob_prev != op) {
1940 fprintf(stderr, "* ob\n");
1941 _PyObject_Dump(op);
1942 fprintf(stderr, "* op->_ob_prev->_ob_next\n");
1943 _PyObject_Dump(op->_ob_prev->_ob_next);
1944 fprintf(stderr, "* op->_ob_next->_ob_prev\n");
1945 _PyObject_Dump(op->_ob_next->_ob_prev);
1946 Py_FatalError("UNREF invalid object");
1947 }
Guido van Rossum2e8f6141992-09-03 20:32:55 +00001948#ifdef SLOW_UNREF_CHECK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001949 for (p = refchain._ob_next; p != &refchain; p = p->_ob_next) {
1950 if (p == op)
1951 break;
1952 }
1953 if (p == &refchain) /* Not found */
1954 Py_FatalError("UNREF unknown object");
Guido van Rossum2e8f6141992-09-03 20:32:55 +00001955#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001956 op->_ob_next->_ob_prev = op->_ob_prev;
1957 op->_ob_prev->_ob_next = op->_ob_next;
1958 op->_ob_next = op->_ob_prev = NULL;
1959 _Py_INC_TPFREES(op);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001960}
1961
Tim Peters269b2a62003-04-17 19:52:29 +00001962/* Print all live objects. Because PyObject_Print is called, the
1963 * interpreter must be in a healthy state.
1964 */
Guido van Rossumaacdc9d1996-08-12 21:32:12 +00001965void
Fred Drake100814d2000-07-09 15:48:49 +00001966_Py_PrintReferences(FILE *fp)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001967{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001968 PyObject *op;
1969 fprintf(fp, "Remaining objects:\n");
1970 for (op = refchain._ob_next; op != &refchain; op = op->_ob_next) {
1971 fprintf(fp, "%p [%" PY_FORMAT_SIZE_T "d] ", op, op->ob_refcnt);
1972 if (PyObject_Print(op, fp, 0) != 0)
1973 PyErr_Clear();
1974 putc('\n', fp);
1975 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001976}
1977
Tim Peters269b2a62003-04-17 19:52:29 +00001978/* Print the addresses of all live objects. Unlike _Py_PrintReferences, this
1979 * doesn't make any calls to the Python C API, so is always safe to call.
1980 */
1981void
1982_Py_PrintReferenceAddresses(FILE *fp)
1983{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001984 PyObject *op;
1985 fprintf(fp, "Remaining object addresses:\n");
1986 for (op = refchain._ob_next; op != &refchain; op = op->_ob_next)
1987 fprintf(fp, "%p [%" PY_FORMAT_SIZE_T "d] %s\n", op,
1988 op->ob_refcnt, Py_TYPE(op)->tp_name);
Tim Peters269b2a62003-04-17 19:52:29 +00001989}
1990
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +00001991PyObject *
Fred Drake100814d2000-07-09 15:48:49 +00001992_Py_GetObjects(PyObject *self, PyObject *args)
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +00001993{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001994 int i, n;
1995 PyObject *t = NULL;
1996 PyObject *res, *op;
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +00001997
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001998 if (!PyArg_ParseTuple(args, "i|O", &n, &t))
1999 return NULL;
2000 op = refchain._ob_next;
2001 res = PyList_New(0);
2002 if (res == NULL)
2003 return NULL;
2004 for (i = 0; (n == 0 || i < n) && op != &refchain; i++) {
2005 while (op == self || op == args || op == res || op == t ||
2006 (t != NULL && Py_TYPE(op) != (PyTypeObject *) t)) {
2007 op = op->_ob_next;
2008 if (op == &refchain)
2009 return res;
2010 }
2011 if (PyList_Append(res, op) < 0) {
2012 Py_DECREF(res);
2013 return NULL;
2014 }
2015 op = op->_ob_next;
2016 }
2017 return res;
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +00002018}
2019
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00002020#endif
Guido van Rossum97ead3f1996-01-12 01:24:09 +00002021
Benjamin Petersonb173f782009-05-05 22:31:58 +00002022
Guido van Rossum84a90321996-05-22 16:34:47 +00002023/* Hack to force loading of abstract.o */
Martin v. Löwis18e16552006-02-15 17:27:45 +00002024Py_ssize_t (*_Py_abstract_hack)(PyObject *) = PyObject_Size;
Guido van Rossume09fb551997-08-05 02:04:34 +00002025
2026
David Malcolm49526f42012-06-22 14:55:41 -04002027void
2028_PyObject_DebugTypeStats(FILE *out)
2029{
2030 _PyCFunction_DebugMallocStats(out);
2031 _PyDict_DebugMallocStats(out);
2032 _PyFloat_DebugMallocStats(out);
2033 _PyFrame_DebugMallocStats(out);
2034 _PyList_DebugMallocStats(out);
2035 _PyMethod_DebugMallocStats(out);
David Malcolm49526f42012-06-22 14:55:41 -04002036 _PyTuple_DebugMallocStats(out);
2037}
Guido van Rossumb18618d2000-05-03 23:44:39 +00002038
Guido van Rossum86610361998-04-10 22:32:46 +00002039/* These methods are used to control infinite recursion in repr, str, print,
2040 etc. Container objects that may recursively contain themselves,
Martin Panter8d56c022016-05-29 04:13:35 +00002041 e.g. builtin dictionaries and lists, should use Py_ReprEnter() and
Guido van Rossum86610361998-04-10 22:32:46 +00002042 Py_ReprLeave() to avoid infinite recursion.
2043
2044 Py_ReprEnter() returns 0 the first time it is called for a particular
2045 object and 1 every time thereafter. It returns -1 if an exception
2046 occurred. Py_ReprLeave() has no return value.
2047
2048 See dictobject.c and listobject.c for examples of use.
2049*/
2050
Guido van Rossum86610361998-04-10 22:32:46 +00002051int
Fred Drake100814d2000-07-09 15:48:49 +00002052Py_ReprEnter(PyObject *obj)
Guido van Rossum86610361998-04-10 22:32:46 +00002053{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002054 PyObject *dict;
2055 PyObject *list;
2056 Py_ssize_t i;
Guido van Rossum86610361998-04-10 22:32:46 +00002057
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002058 dict = PyThreadState_GetDict();
Antoine Pitrou04d17d32014-03-31 22:04:38 +02002059 /* Ignore a missing thread-state, so that this function can be called
2060 early on startup. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002061 if (dict == NULL)
2062 return 0;
Victor Stinner7a07e452013-11-06 18:57:29 +01002063 list = _PyDict_GetItemId(dict, &PyId_Py_Repr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002064 if (list == NULL) {
2065 list = PyList_New(0);
2066 if (list == NULL)
2067 return -1;
Victor Stinner7a07e452013-11-06 18:57:29 +01002068 if (_PyDict_SetItemId(dict, &PyId_Py_Repr, list) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002069 return -1;
2070 Py_DECREF(list);
2071 }
2072 i = PyList_GET_SIZE(list);
2073 while (--i >= 0) {
2074 if (PyList_GET_ITEM(list, i) == obj)
2075 return 1;
2076 }
Victor Stinnere901d1f2013-07-17 21:58:41 +02002077 if (PyList_Append(list, obj) < 0)
2078 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002079 return 0;
Guido van Rossum86610361998-04-10 22:32:46 +00002080}
2081
2082void
Fred Drake100814d2000-07-09 15:48:49 +00002083Py_ReprLeave(PyObject *obj)
Guido van Rossum86610361998-04-10 22:32:46 +00002084{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002085 PyObject *dict;
2086 PyObject *list;
2087 Py_ssize_t i;
Victor Stinner1b634932013-07-16 22:24:44 +02002088 PyObject *error_type, *error_value, *error_traceback;
2089
2090 PyErr_Fetch(&error_type, &error_value, &error_traceback);
Guido van Rossum86610361998-04-10 22:32:46 +00002091
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002092 dict = PyThreadState_GetDict();
2093 if (dict == NULL)
Victor Stinner1b634932013-07-16 22:24:44 +02002094 goto finally;
2095
Victor Stinner7a07e452013-11-06 18:57:29 +01002096 list = _PyDict_GetItemId(dict, &PyId_Py_Repr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002097 if (list == NULL || !PyList_Check(list))
Victor Stinner1b634932013-07-16 22:24:44 +02002098 goto finally;
2099
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002100 i = PyList_GET_SIZE(list);
2101 /* Count backwards because we always expect obj to be list[-1] */
2102 while (--i >= 0) {
2103 if (PyList_GET_ITEM(list, i) == obj) {
2104 PyList_SetSlice(list, i, i + 1, NULL);
2105 break;
2106 }
2107 }
Victor Stinner1b634932013-07-16 22:24:44 +02002108
2109finally:
2110 /* ignore exceptions because there is no way to report them. */
2111 PyErr_Restore(error_type, error_value, error_traceback);
Guido van Rossum86610361998-04-10 22:32:46 +00002112}
Guido van Rossumd724b232000-03-13 16:01:29 +00002113
Tim Peters803526b2002-07-07 05:13:56 +00002114/* Trashcan support. */
Guido van Rossumd724b232000-03-13 16:01:29 +00002115
Tim Peters803526b2002-07-07 05:13:56 +00002116/* Add op to the _PyTrash_delete_later list. Called when the current
2117 * call-stack depth gets large. op must be a currently untracked gc'ed
2118 * object, with refcount 0. Py_DECREF must already have been called on it.
2119 */
Guido van Rossumd724b232000-03-13 16:01:29 +00002120void
Fred Drake100814d2000-07-09 15:48:49 +00002121_PyTrash_deposit_object(PyObject *op)
Guido van Rossumd724b232000-03-13 16:01:29 +00002122{
Victor Stinner24702042018-10-26 17:16:37 +02002123 _PyObject_ASSERT(op, PyObject_IS_GC(op));
2124 _PyObject_ASSERT(op, !_PyObject_GC_IS_TRACKED(op));
2125 _PyObject_ASSERT(op, op->ob_refcnt == 0);
INADA Naoki5ac9e6e2018-07-10 17:19:53 +09002126 _PyGCHead_SET_PREV(_Py_AS_GC(op), _PyRuntime.gc.trash_delete_later);
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002127 _PyRuntime.gc.trash_delete_later = op;
Guido van Rossumd724b232000-03-13 16:01:29 +00002128}
2129
Antoine Pitrou2b0218a2012-09-06 00:59:49 +02002130/* The equivalent API, using per-thread state recursion info */
2131void
2132_PyTrash_thread_deposit_object(PyObject *op)
2133{
Victor Stinner50b48572018-11-01 01:51:40 +01002134 PyThreadState *tstate = _PyThreadState_GET();
Victor Stinner24702042018-10-26 17:16:37 +02002135 _PyObject_ASSERT(op, PyObject_IS_GC(op));
2136 _PyObject_ASSERT(op, !_PyObject_GC_IS_TRACKED(op));
2137 _PyObject_ASSERT(op, op->ob_refcnt == 0);
INADA Naoki5ac9e6e2018-07-10 17:19:53 +09002138 _PyGCHead_SET_PREV(_Py_AS_GC(op), tstate->trash_delete_later);
Antoine Pitrou2b0218a2012-09-06 00:59:49 +02002139 tstate->trash_delete_later = op;
2140}
2141
Tim Peters803526b2002-07-07 05:13:56 +00002142/* Dealloccate all the objects in the _PyTrash_delete_later list. Called when
2143 * the call-stack unwinds again.
2144 */
Guido van Rossumd724b232000-03-13 16:01:29 +00002145void
Fred Drake100814d2000-07-09 15:48:49 +00002146_PyTrash_destroy_chain(void)
Guido van Rossumd724b232000-03-13 16:01:29 +00002147{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002148 while (_PyRuntime.gc.trash_delete_later) {
2149 PyObject *op = _PyRuntime.gc.trash_delete_later;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002150 destructor dealloc = Py_TYPE(op)->tp_dealloc;
Neil Schemenauerf589c052002-03-29 03:05:54 +00002151
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002152 _PyRuntime.gc.trash_delete_later =
INADA Naoki5ac9e6e2018-07-10 17:19:53 +09002153 (PyObject*) _PyGCHead_PREV(_Py_AS_GC(op));
Neil Schemenauerf589c052002-03-29 03:05:54 +00002154
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002155 /* Call the deallocator directly. This used to try to
2156 * fool Py_DECREF into calling it indirectly, but
2157 * Py_DECREF was already called on this object, and in
2158 * assorted non-release builds calling Py_DECREF again ends
2159 * up distorting allocation statistics.
2160 */
Victor Stinner24702042018-10-26 17:16:37 +02002161 _PyObject_ASSERT(op, op->ob_refcnt == 0);
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002162 ++_PyRuntime.gc.trash_delete_nesting;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002163 (*dealloc)(op);
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002164 --_PyRuntime.gc.trash_delete_nesting;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002165 }
Guido van Rossumd724b232000-03-13 16:01:29 +00002166}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002167
Antoine Pitrou2b0218a2012-09-06 00:59:49 +02002168/* The equivalent API, using per-thread state recursion info */
2169void
2170_PyTrash_thread_destroy_chain(void)
2171{
Victor Stinner50b48572018-11-01 01:51:40 +01002172 PyThreadState *tstate = _PyThreadState_GET();
Xiang Zhanga66f9c62017-05-13 13:36:14 +08002173 /* We need to increase trash_delete_nesting here, otherwise,
2174 _PyTrash_thread_destroy_chain will be called recursively
2175 and then possibly crash. An example that may crash without
2176 increase:
2177 N = 500000 # need to be large enough
2178 ob = object()
2179 tups = [(ob,) for i in range(N)]
2180 for i in range(49):
2181 tups = [(tup,) for tup in tups]
2182 del tups
2183 */
2184 assert(tstate->trash_delete_nesting == 0);
2185 ++tstate->trash_delete_nesting;
Antoine Pitrou2b0218a2012-09-06 00:59:49 +02002186 while (tstate->trash_delete_later) {
2187 PyObject *op = tstate->trash_delete_later;
2188 destructor dealloc = Py_TYPE(op)->tp_dealloc;
2189
2190 tstate->trash_delete_later =
INADA Naoki5ac9e6e2018-07-10 17:19:53 +09002191 (PyObject*) _PyGCHead_PREV(_Py_AS_GC(op));
Antoine Pitrou2b0218a2012-09-06 00:59:49 +02002192
2193 /* Call the deallocator directly. This used to try to
2194 * fool Py_DECREF into calling it indirectly, but
2195 * Py_DECREF was already called on this object, and in
2196 * assorted non-release builds calling Py_DECREF again ends
2197 * up distorting allocation statistics.
2198 */
Victor Stinner24702042018-10-26 17:16:37 +02002199 _PyObject_ASSERT(op, op->ob_refcnt == 0);
Antoine Pitrou2b0218a2012-09-06 00:59:49 +02002200 (*dealloc)(op);
Xiang Zhanga66f9c62017-05-13 13:36:14 +08002201 assert(tstate->trash_delete_nesting == 1);
Antoine Pitrou2b0218a2012-09-06 00:59:49 +02002202 }
Xiang Zhanga66f9c62017-05-13 13:36:14 +08002203 --tstate->trash_delete_nesting;
Antoine Pitrou2b0218a2012-09-06 00:59:49 +02002204}
2205
Victor Stinner626bff82018-10-25 17:31:10 +02002206
2207void
Victor Stinnerf1d002c2018-11-21 23:53:44 +01002208_PyObject_AssertFailed(PyObject *obj, const char *expr, const char *msg,
Victor Stinner626bff82018-10-25 17:31:10 +02002209 const char *file, int line, const char *function)
2210{
Victor Stinnerf1d002c2018-11-21 23:53:44 +01002211 fprintf(stderr, "%s:%d: ", file, line);
2212 if (function) {
2213 fprintf(stderr, "%s: ", function);
2214 }
Victor Stinner626bff82018-10-25 17:31:10 +02002215 fflush(stderr);
Victor Stinnerf1d002c2018-11-21 23:53:44 +01002216 if (expr) {
2217 fprintf(stderr, "Assertion \"%s\" failed", expr);
Victor Stinner626bff82018-10-25 17:31:10 +02002218 }
2219 else {
Victor Stinnerf1d002c2018-11-21 23:53:44 +01002220 fprintf(stderr, "Assertion failed");
Victor Stinner626bff82018-10-25 17:31:10 +02002221 }
2222 fflush(stderr);
Victor Stinnerf1d002c2018-11-21 23:53:44 +01002223 if (msg) {
2224 fprintf(stderr, ": %s", msg);
2225 }
2226 fprintf(stderr, "\n");
2227 fflush(stderr);
Victor Stinner626bff82018-10-25 17:31:10 +02002228
2229 if (obj == NULL) {
2230 fprintf(stderr, "<NULL object>\n");
2231 }
2232 else if (_PyObject_IsFreed(obj)) {
2233 /* It seems like the object memory has been freed:
2234 don't access it to prevent a segmentation fault. */
2235 fprintf(stderr, "<Freed object>\n");
2236 }
2237 else {
2238 /* Diplay the traceback where the object has been allocated.
2239 Do it before dumping repr(obj), since repr() is more likely
2240 to crash than dumping the traceback. */
2241 void *ptr;
2242 PyTypeObject *type = Py_TYPE(obj);
2243 if (PyType_IS_GC(type)) {
2244 ptr = (void *)((char *)obj - sizeof(PyGC_Head));
2245 }
2246 else {
2247 ptr = (void *)obj;
2248 }
2249 _PyMem_DumpTraceback(fileno(stderr), ptr);
2250
2251 /* This might succeed or fail, but we're about to abort, so at least
2252 try to provide any extra info we can: */
2253 _PyObject_Dump(obj);
2254 }
2255 fflush(stderr);
2256
2257 Py_FatalError("_PyObject_AssertFailed");
2258}
2259
Victor Stinner3c09dca2018-10-30 14:48:26 +01002260
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00002261#undef _Py_Dealloc
Victor Stinner3c09dca2018-10-30 14:48:26 +01002262
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00002263void
2264_Py_Dealloc(PyObject *op)
2265{
Victor Stinner3c09dca2018-10-30 14:48:26 +01002266 destructor dealloc = Py_TYPE(op)->tp_dealloc;
2267#ifdef Py_TRACE_REFS
2268 _Py_ForgetReference(op);
2269#else
2270 _Py_INC_TPFREES(op);
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00002271#endif
Victor Stinner3c09dca2018-10-30 14:48:26 +01002272 (*dealloc)(op);
2273}
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00002274
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002275#ifdef __cplusplus
2276}
2277#endif