blob: e7ec7aec490f8b35081ff4083599b7123128c632 [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 Stinner0fc91ee2019-04-12 21:51:34 +02005#include "pycore_object.h"
Victor Stinner621cebe2018-11-12 16:53:38 +01006#include "pycore_pystate.h"
Victor Stinner27e2d1f2018-11-01 00:52:28 +01007#include "pycore_context.h"
Benjamin Petersonfd838e62009-04-20 02:09:13 +00008#include "frameobject.h"
Eric Snowc11183c2019-03-15 16:35:46 -06009#include "interpreteridobject.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000010
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000011#ifdef __cplusplus
12extern "C" {
13#endif
14
Victor Stinner626bff82018-10-25 17:31:10 +020015/* Defined in tracemalloc.c */
16extern void _PyMem_DumpTraceback(int fd, const void *ptr);
17
Victor Stinnerbd303c12013-11-07 23:07:29 +010018_Py_IDENTIFIER(Py_Repr);
19_Py_IDENTIFIER(__bytes__);
20_Py_IDENTIFIER(__dir__);
21_Py_IDENTIFIER(__isabstractmethod__);
Victor Stinnerbd303c12013-11-07 23:07:29 +010022
Victor Stinner0fc91ee2019-04-12 21:51:34 +020023
24int
25_PyObject_CheckConsistency(PyObject *op, int check_content)
26{
27 _PyObject_ASSERT(op, op != NULL);
28 _PyObject_ASSERT(op, !_PyObject_IsFreed(op));
29 _PyObject_ASSERT(op, Py_REFCNT(op) >= 1);
30
31 PyTypeObject *type = op->ob_type;
32 _PyObject_ASSERT(op, type != NULL);
33 _PyType_CheckConsistency(type);
34
35 if (PyUnicode_Check(op)) {
36 _PyUnicode_CheckConsistency(op, check_content);
37 }
38 else if (PyDict_Check(op)) {
39 _PyDict_CheckConsistency(op, check_content);
40 }
41 return 1;
42}
43
44
Tim Peters34592512002-07-11 06:23:50 +000045#ifdef Py_REF_DEBUG
Neal Norwitz84632ee2006-03-04 20:00:59 +000046Py_ssize_t _Py_RefTotal;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000047
48Py_ssize_t
49_Py_GetRefTotal(void)
50{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000051 PyObject *o;
52 Py_ssize_t total = _Py_RefTotal;
Antoine Pitrou9d952542013-08-24 21:07:07 +020053 o = _PySet_Dummy;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000054 if (o != NULL)
55 total -= o->ob_refcnt;
56 return total;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000057}
Nick Coghland6009512014-11-20 21:39:37 +100058
59void
60_PyDebug_PrintTotalRefs(void) {
Eric Snowdae02762017-09-14 00:35:58 -070061 fprintf(stderr,
62 "[%" PY_FORMAT_SIZE_T "d refs, "
63 "%" PY_FORMAT_SIZE_T "d blocks]\n",
64 _Py_GetRefTotal(), _Py_GetAllocatedBlocks());
Nick Coghland6009512014-11-20 21:39:37 +100065}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000066#endif /* Py_REF_DEBUG */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000067
Guido van Rossum3f5da241990-12-20 15:06:42 +000068/* Object allocation routines used by NEWOBJ and NEWVAROBJ macros.
69 These are used by the individual routines for object creation.
70 Do not call them otherwise, they do not initialize the object! */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000071
Tim Peters78be7992003-03-23 02:51:01 +000072#ifdef Py_TRACE_REFS
Tim Peters7571a0f2003-03-23 17:52:28 +000073/* Head of circular doubly-linked list of all objects. These are linked
74 * together via the _ob_prev and _ob_next members of a PyObject, which
75 * exist only in a Py_TRACE_REFS build.
76 */
Tim Peters78be7992003-03-23 02:51:01 +000077static PyObject refchain = {&refchain, &refchain};
Tim Peters36eb4df2003-03-23 03:33:13 +000078
Tim Peters7571a0f2003-03-23 17:52:28 +000079/* Insert op at the front of the list of all objects. If force is true,
80 * op is added even if _ob_prev and _ob_next are non-NULL already. If
81 * force is false amd _ob_prev or _ob_next are non-NULL, do nothing.
82 * force should be true if and only if op points to freshly allocated,
83 * uninitialized memory, or you've unlinked op from the list and are
Tim Peters51f8d382003-03-23 18:06:08 +000084 * relinking it into the front.
Tim Peters7571a0f2003-03-23 17:52:28 +000085 * Note that objects are normally added to the list via _Py_NewReference,
86 * which is called by PyObject_Init. Not all objects are initialized that
87 * way, though; exceptions include statically allocated type objects, and
88 * statically allocated singletons (like Py_True and Py_None).
89 */
Tim Peters36eb4df2003-03-23 03:33:13 +000090void
Tim Peters7571a0f2003-03-23 17:52:28 +000091_Py_AddToAllObjects(PyObject *op, int force)
Tim Peters36eb4df2003-03-23 03:33:13 +000092{
Tim Peters7571a0f2003-03-23 17:52:28 +000093#ifdef Py_DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000094 if (!force) {
95 /* If it's initialized memory, op must be in or out of
96 * the list unambiguously.
97 */
Victor Stinner24702042018-10-26 17:16:37 +020098 _PyObject_ASSERT(op, (op->_ob_prev == NULL) == (op->_ob_next == NULL));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000099 }
Tim Peters78be7992003-03-23 02:51:01 +0000100#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000101 if (force || op->_ob_prev == NULL) {
102 op->_ob_next = refchain._ob_next;
103 op->_ob_prev = &refchain;
104 refchain._ob_next->_ob_prev = op;
105 refchain._ob_next = op;
106 }
Tim Peters7571a0f2003-03-23 17:52:28 +0000107}
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000108#endif /* Py_TRACE_REFS */
Tim Peters78be7992003-03-23 02:51:01 +0000109
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000110#ifdef COUNT_ALLOCS
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000111static PyTypeObject *type_list;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000112/* All types are added to type_list, at least when
113 they get one object created. That makes them
114 immortal, which unfortunately contributes to
115 garbage itself. If unlist_types_without_objects
116 is set, they will be removed from the type_list
117 once the last object is deallocated. */
Benjamin Petersona4a37fe2009-01-11 17:13:55 +0000118static int unlist_types_without_objects;
Pablo Galindo49c75a82018-10-28 15:02:17 +0000119extern Py_ssize_t _Py_tuple_zero_allocs, _Py_fast_tuple_allocs;
120extern Py_ssize_t _Py_quick_int_allocs, _Py_quick_neg_int_allocs;
121extern Py_ssize_t _Py_null_strings, _Py_one_strings;
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000122void
Pablo Galindo49c75a82018-10-28 15:02:17 +0000123_Py_dump_counts(FILE* f)
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000124{
Victor Stinnercaba55b2018-08-03 15:33:52 +0200125 PyInterpreterState *interp = _PyInterpreterState_Get();
Eddie Elizondo745dc652018-02-21 20:55:18 -0800126 if (!interp->core_config.show_alloc_count) {
Serhiy Storchaka7e160ce2016-07-03 21:03:53 +0300127 return;
Victor Stinner25420fe2017-11-20 18:12:22 -0800128 }
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000129
Eddie Elizondo745dc652018-02-21 20:55:18 -0800130 PyTypeObject *tp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000131 for (tp = type_list; tp; tp = tp->tp_next)
132 fprintf(f, "%s alloc'd: %" PY_FORMAT_SIZE_T "d, "
133 "freed: %" PY_FORMAT_SIZE_T "d, "
134 "max in use: %" PY_FORMAT_SIZE_T "d\n",
135 tp->tp_name, tp->tp_allocs, tp->tp_frees,
136 tp->tp_maxalloc);
137 fprintf(f, "fast tuple allocs: %" PY_FORMAT_SIZE_T "d, "
138 "empty: %" PY_FORMAT_SIZE_T "d\n",
Pablo Galindo49c75a82018-10-28 15:02:17 +0000139 _Py_fast_tuple_allocs, _Py_tuple_zero_allocs);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000140 fprintf(f, "fast int allocs: pos: %" PY_FORMAT_SIZE_T "d, "
141 "neg: %" PY_FORMAT_SIZE_T "d\n",
Pablo Galindo49c75a82018-10-28 15:02:17 +0000142 _Py_quick_int_allocs, _Py_quick_neg_int_allocs);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000143 fprintf(f, "null strings: %" PY_FORMAT_SIZE_T "d, "
144 "1-strings: %" PY_FORMAT_SIZE_T "d\n",
Pablo Galindo49c75a82018-10-28 15:02:17 +0000145 _Py_null_strings, _Py_one_strings);
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000146}
147
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +0000148PyObject *
Pablo Galindo49c75a82018-10-28 15:02:17 +0000149_Py_get_counts(void)
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +0000150{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000151 PyTypeObject *tp;
152 PyObject *result;
153 PyObject *v;
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +0000154
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000155 result = PyList_New(0);
156 if (result == NULL)
157 return NULL;
158 for (tp = type_list; tp; tp = tp->tp_next) {
159 v = Py_BuildValue("(snnn)", tp->tp_name, tp->tp_allocs,
160 tp->tp_frees, tp->tp_maxalloc);
161 if (v == NULL) {
162 Py_DECREF(result);
163 return NULL;
164 }
165 if (PyList_Append(result, v) < 0) {
166 Py_DECREF(v);
167 Py_DECREF(result);
168 return NULL;
169 }
170 Py_DECREF(v);
171 }
172 return result;
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +0000173}
174
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000175void
Pablo Galindo49c75a82018-10-28 15:02:17 +0000176_Py_inc_count(PyTypeObject *tp)
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000177{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000178 if (tp->tp_next == NULL && tp->tp_prev == NULL) {
179 /* first time; insert in linked list */
180 if (tp->tp_next != NULL) /* sanity check */
Pablo Galindo49c75a82018-10-28 15:02:17 +0000181 Py_FatalError("XXX _Py_inc_count sanity check");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000182 if (type_list)
183 type_list->tp_prev = tp;
184 tp->tp_next = type_list;
185 /* Note that as of Python 2.2, heap-allocated type objects
186 * can go away, but this code requires that they stay alive
187 * until program exit. That's why we're careful with
188 * refcounts here. type_list gets a new reference to tp,
189 * while ownership of the reference type_list used to hold
190 * (if any) was transferred to tp->tp_next in the line above.
191 * tp is thus effectively immortal after this.
192 */
193 Py_INCREF(tp);
194 type_list = tp;
Tim Peters3e40c7f2003-03-23 03:04:32 +0000195#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000196 /* Also insert in the doubly-linked list of all objects,
197 * if not already there.
198 */
199 _Py_AddToAllObjects((PyObject *)tp, 0);
Tim Peters78be7992003-03-23 02:51:01 +0000200#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000201 }
202 tp->tp_allocs++;
203 if (tp->tp_allocs - tp->tp_frees > tp->tp_maxalloc)
204 tp->tp_maxalloc = tp->tp_allocs - tp->tp_frees;
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000205}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000206
Pablo Galindo49c75a82018-10-28 15:02:17 +0000207void _Py_dec_count(PyTypeObject *tp)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000208{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000209 tp->tp_frees++;
210 if (unlist_types_without_objects &&
211 tp->tp_allocs == tp->tp_frees) {
212 /* unlink the type from type_list */
213 if (tp->tp_prev)
214 tp->tp_prev->tp_next = tp->tp_next;
215 else
216 type_list = tp->tp_next;
217 if (tp->tp_next)
218 tp->tp_next->tp_prev = tp->tp_prev;
219 tp->tp_next = tp->tp_prev = NULL;
220 Py_DECREF(tp);
221 }
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000222}
223
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000224#endif
225
Tim Peters7c321a82002-07-09 02:57:01 +0000226#ifdef Py_REF_DEBUG
227/* Log a fatal error; doesn't return. */
228void
Victor Stinner18618e652018-10-25 17:28:11 +0200229_Py_NegativeRefcount(const char *filename, int lineno, PyObject *op)
Tim Peters7c321a82002-07-09 02:57:01 +0000230{
Victor Stinnerf1d002c2018-11-21 23:53:44 +0100231 _PyObject_AssertFailed(op, NULL, "object has negative ref count",
Victor Stinner3ec9af72018-10-26 02:12:34 +0200232 filename, lineno, __func__);
Tim Peters7c321a82002-07-09 02:57:01 +0000233}
234
235#endif /* Py_REF_DEBUG */
236
Thomas Heller1328b522004-04-22 17:23:49 +0000237void
238Py_IncRef(PyObject *o)
239{
240 Py_XINCREF(o);
241}
242
243void
244Py_DecRef(PyObject *o)
245{
246 Py_XDECREF(o);
247}
248
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000249PyObject *
Fred Drake100814d2000-07-09 15:48:49 +0000250PyObject_Init(PyObject *op, PyTypeObject *tp)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000251{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000252 if (op == NULL)
253 return PyErr_NoMemory();
254 /* Any changes should be reflected in PyObject_INIT (objimpl.h) */
255 Py_TYPE(op) = tp;
Eddie Elizondo364f0b02019-03-27 07:52:18 -0400256 if (PyType_GetFlags(tp) & Py_TPFLAGS_HEAPTYPE) {
257 Py_INCREF(tp);
258 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000259 _Py_NewReference(op);
260 return op;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000261}
262
Guido van Rossumb18618d2000-05-03 23:44:39 +0000263PyVarObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +0000264PyObject_InitVar(PyVarObject *op, PyTypeObject *tp, Py_ssize_t size)
Guido van Rossumb18618d2000-05-03 23:44:39 +0000265{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000266 if (op == NULL)
267 return (PyVarObject *) PyErr_NoMemory();
268 /* Any changes should be reflected in PyObject_INIT_VAR */
Eddie Elizondo364f0b02019-03-27 07:52:18 -0400269 Py_SIZE(op) = size;
270 PyObject_Init((PyObject *)op, tp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000271 return op;
Guido van Rossumb18618d2000-05-03 23:44:39 +0000272}
273
274PyObject *
Fred Drake100814d2000-07-09 15:48:49 +0000275_PyObject_New(PyTypeObject *tp)
Guido van Rossumb18618d2000-05-03 23:44:39 +0000276{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000277 PyObject *op;
278 op = (PyObject *) PyObject_MALLOC(_PyObject_SIZE(tp));
279 if (op == NULL)
280 return PyErr_NoMemory();
281 return PyObject_INIT(op, tp);
Guido van Rossumb18618d2000-05-03 23:44:39 +0000282}
283
Guido van Rossumd0c87ee1997-05-15 21:31:03 +0000284PyVarObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +0000285_PyObject_NewVar(PyTypeObject *tp, Py_ssize_t nitems)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000286{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000287 PyVarObject *op;
288 const size_t size = _PyObject_VAR_SIZE(tp, nitems);
289 op = (PyVarObject *) PyObject_MALLOC(size);
290 if (op == NULL)
291 return (PyVarObject *)PyErr_NoMemory();
292 return PyObject_INIT_VAR(op, tp, nitems);
Guido van Rossumb18618d2000-05-03 23:44:39 +0000293}
294
Antoine Pitrou796564c2013-07-30 19:59:21 +0200295void
296PyObject_CallFinalizer(PyObject *self)
297{
298 PyTypeObject *tp = Py_TYPE(self);
299
300 /* The former could happen on heaptypes created from the C API, e.g.
301 PyType_FromSpec(). */
302 if (!PyType_HasFeature(tp, Py_TPFLAGS_HAVE_FINALIZE) ||
303 tp->tp_finalize == NULL)
304 return;
305 /* tp_finalize should only be called once. */
306 if (PyType_IS_GC(tp) && _PyGC_FINALIZED(self))
307 return;
308
309 tp->tp_finalize(self);
INADA Naoki5ac9e6e2018-07-10 17:19:53 +0900310 if (PyType_IS_GC(tp)) {
311 _PyGC_SET_FINALIZED(self);
312 }
Antoine Pitrou796564c2013-07-30 19:59:21 +0200313}
314
315int
316PyObject_CallFinalizerFromDealloc(PyObject *self)
317{
318 Py_ssize_t refcnt;
319
320 /* Temporarily resurrect the object. */
321 if (self->ob_refcnt != 0) {
322 Py_FatalError("PyObject_CallFinalizerFromDealloc called on "
323 "object with a non-zero refcount");
324 }
325 self->ob_refcnt = 1;
326
327 PyObject_CallFinalizer(self);
328
329 /* Undo the temporary resurrection; can't use DECREF here, it would
330 * cause a recursive call.
331 */
Victor Stinner24702042018-10-26 17:16:37 +0200332 _PyObject_ASSERT_WITH_MSG(self,
333 self->ob_refcnt > 0,
334 "refcount is too small");
Antoine Pitrou796564c2013-07-30 19:59:21 +0200335 if (--self->ob_refcnt == 0)
336 return 0; /* this is the normal path out */
337
338 /* tp_finalize resurrected it! Make it look like the original Py_DECREF
339 * never happened.
340 */
341 refcnt = self->ob_refcnt;
342 _Py_NewReference(self);
343 self->ob_refcnt = refcnt;
344
Victor Stinner24702042018-10-26 17:16:37 +0200345 _PyObject_ASSERT(self,
346 (!PyType_IS_GC(Py_TYPE(self))
347 || _PyObject_GC_IS_TRACKED(self)));
Antoine Pitrou796564c2013-07-30 19:59:21 +0200348 /* If Py_REF_DEBUG, _Py_NewReference bumped _Py_RefTotal, so
349 * we need to undo that. */
350 _Py_DEC_REFTOTAL;
351 /* If Py_TRACE_REFS, _Py_NewReference re-added self to the object
352 * chain, so no more to do there.
353 * If COUNT_ALLOCS, the original decref bumped tp_frees, and
354 * _Py_NewReference bumped tp_allocs: both of those need to be
355 * undone.
356 */
357#ifdef COUNT_ALLOCS
358 --Py_TYPE(self)->tp_frees;
359 --Py_TYPE(self)->tp_allocs;
360#endif
361 return -1;
362}
363
Antoine Pitrouc47bd4a2010-07-27 22:08:27 +0000364int
365PyObject_Print(PyObject *op, FILE *fp, int flags)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000366{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000367 int ret = 0;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000368 if (PyErr_CheckSignals())
369 return -1;
Guido van Rossum9b00dfa1998-04-28 16:06:54 +0000370#ifdef USE_STACKCHECK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000371 if (PyOS_CheckStack()) {
372 PyErr_SetString(PyExc_MemoryError, "stack overflow");
373 return -1;
374 }
Guido van Rossum9b00dfa1998-04-28 16:06:54 +0000375#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000376 clearerr(fp); /* Clear any previous error condition */
377 if (op == NULL) {
378 Py_BEGIN_ALLOW_THREADS
379 fprintf(fp, "<nil>");
380 Py_END_ALLOW_THREADS
381 }
382 else {
Victor Stinner3ec9af72018-10-26 02:12:34 +0200383 if (op->ob_refcnt <= 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000384 /* XXX(twouters) cast refcount to long until %zd is
385 universally available */
386 Py_BEGIN_ALLOW_THREADS
387 fprintf(fp, "<refcnt %ld at %p>",
388 (long)op->ob_refcnt, op);
389 Py_END_ALLOW_THREADS
Victor Stinner3ec9af72018-10-26 02:12:34 +0200390 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000391 else {
392 PyObject *s;
393 if (flags & Py_PRINT_RAW)
394 s = PyObject_Str(op);
395 else
396 s = PyObject_Repr(op);
397 if (s == NULL)
398 ret = -1;
399 else if (PyBytes_Check(s)) {
400 fwrite(PyBytes_AS_STRING(s), 1,
401 PyBytes_GET_SIZE(s), fp);
402 }
403 else if (PyUnicode_Check(s)) {
404 PyObject *t;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200405 t = PyUnicode_AsEncodedString(s, "utf-8", "backslashreplace");
Zackery Spytzae62f012018-10-06 00:44:25 -0600406 if (t == NULL) {
407 ret = -1;
408 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000409 else {
410 fwrite(PyBytes_AS_STRING(t), 1,
411 PyBytes_GET_SIZE(t), fp);
Victor Stinnerba6b4302010-05-17 09:33:42 +0000412 Py_DECREF(t);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000413 }
414 }
415 else {
416 PyErr_Format(PyExc_TypeError,
417 "str() or repr() returned '%.100s'",
418 s->ob_type->tp_name);
419 ret = -1;
420 }
421 Py_XDECREF(s);
422 }
423 }
424 if (ret == 0) {
425 if (ferror(fp)) {
Serhiy Storchaka55fe1ae2017-04-16 10:46:38 +0300426 PyErr_SetFromErrno(PyExc_OSError);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000427 clearerr(fp);
428 ret = -1;
429 }
430 }
431 return ret;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000432}
433
Guido van Rossum38938152006-08-21 23:36:26 +0000434/* For debugging convenience. Set a breakpoint here and call it from your DLL */
435void
Thomas Woutersb2137042007-02-01 18:02:27 +0000436_Py_BreakPoint(void)
Guido van Rossum38938152006-08-21 23:36:26 +0000437{
438}
439
Neal Norwitz1a997502003-01-13 20:13:12 +0000440
Victor Stinner4c409be2019-04-11 13:01:15 +0200441/* Heuristic checking if the object memory is uninitialized or deallocated.
442 Rely on the debug hooks on Python memory allocators:
443 see _PyMem_IsPtrFreed().
Victor Stinner82af0b62018-10-23 17:39:40 +0200444
445 The function can be used to prevent segmentation fault on dereferencing
Victor Stinner4c409be2019-04-11 13:01:15 +0200446 pointers like 0xDDDDDDDDDDDDDDDD. */
Victor Stinner82af0b62018-10-23 17:39:40 +0200447int
448_PyObject_IsFreed(PyObject *op)
449{
Victor Stinner2b00db62019-04-11 11:33:27 +0200450 if (_PyMem_IsPtrFreed(op) || _PyMem_IsPtrFreed(op->ob_type)) {
Victor Stinner2cf5d322018-11-22 16:32:57 +0100451 return 1;
452 }
Victor Stinner2b00db62019-04-11 11:33:27 +0200453 /* ignore op->ob_ref: its value can have be modified
Victor Stinner82af0b62018-10-23 17:39:40 +0200454 by Py_INCREF() and Py_DECREF(). */
455#ifdef Py_TRACE_REFS
Victor Stinner2b00db62019-04-11 11:33:27 +0200456 if (_PyMem_IsPtrFreed(op->_ob_next) || _PyMem_IsPtrFreed(op->_ob_prev)) {
457 return 1;
458 }
Victor Stinner82af0b62018-10-23 17:39:40 +0200459#endif
Victor Stinner2b00db62019-04-11 11:33:27 +0200460 return 0;
Victor Stinner82af0b62018-10-23 17:39:40 +0200461}
462
463
Barry Warsaw9bf16442001-01-23 16:24:35 +0000464/* For debugging convenience. See Misc/gdbinit for some useful gdb hooks */
Guido van Rossum38938152006-08-21 23:36:26 +0000465void
466_PyObject_Dump(PyObject* op)
Barry Warsaw9bf16442001-01-23 16:24:35 +0000467{
Victor Stinner82af0b62018-10-23 17:39:40 +0200468 if (op == NULL) {
469 fprintf(stderr, "<NULL object>\n");
470 fflush(stderr);
471 return;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000472 }
Victor Stinner82af0b62018-10-23 17:39:40 +0200473
474 if (_PyObject_IsFreed(op)) {
475 /* It seems like the object memory has been freed:
476 don't access it to prevent a segmentation fault. */
Victor Stinner2b00db62019-04-11 11:33:27 +0200477 fprintf(stderr, "<Freed object>\n");
Victor Stinner2cf5d322018-11-22 16:32:57 +0100478 return;
Victor Stinner82af0b62018-10-23 17:39:40 +0200479 }
480
481 PyGILState_STATE gil;
482 PyObject *error_type, *error_value, *error_traceback;
483
484 fprintf(stderr, "object : ");
485 fflush(stderr);
486 gil = PyGILState_Ensure();
487
488 PyErr_Fetch(&error_type, &error_value, &error_traceback);
489 (void)PyObject_Print(op, stderr, 0);
490 fflush(stderr);
491 PyErr_Restore(error_type, error_value, error_traceback);
492
493 PyGILState_Release(gil);
494 /* XXX(twouters) cast refcount to long until %zd is
495 universally available */
496 fprintf(stderr, "\n"
497 "type : %s\n"
498 "refcount: %ld\n"
499 "address : %p\n",
500 Py_TYPE(op)==NULL ? "NULL" : Py_TYPE(op)->tp_name,
501 (long)op->ob_refcnt,
502 op);
503 fflush(stderr);
Barry Warsaw9bf16442001-01-23 16:24:35 +0000504}
Barry Warsaw903138f2001-01-23 16:33:18 +0000505
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000506PyObject *
Fred Drake100814d2000-07-09 15:48:49 +0000507PyObject_Repr(PyObject *v)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000508{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000509 PyObject *res;
510 if (PyErr_CheckSignals())
511 return NULL;
Guido van Rossum9b00dfa1998-04-28 16:06:54 +0000512#ifdef USE_STACKCHECK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000513 if (PyOS_CheckStack()) {
514 PyErr_SetString(PyExc_MemoryError, "stack overflow");
515 return NULL;
516 }
Guido van Rossum9b00dfa1998-04-28 16:06:54 +0000517#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000518 if (v == NULL)
519 return PyUnicode_FromString("<NULL>");
520 if (Py_TYPE(v)->tp_repr == NULL)
521 return PyUnicode_FromFormat("<%s object at %p>",
522 v->ob_type->tp_name, v);
Victor Stinner33824f62013-08-26 14:05:19 +0200523
524#ifdef Py_DEBUG
525 /* PyObject_Repr() must not be called with an exception set,
Victor Stinnera8cb5152017-01-18 14:12:51 +0100526 because it can clear it (directly or indirectly) and so the
Martin Panter9955a372015-10-07 10:26:23 +0000527 caller loses its exception */
Victor Stinner33824f62013-08-26 14:05:19 +0200528 assert(!PyErr_Occurred());
529#endif
530
Serhiy Storchaka1fb72d22017-12-03 22:12:11 +0200531 /* It is possible for a type to have a tp_repr representation that loops
532 infinitely. */
533 if (Py_EnterRecursiveCall(" while getting the repr of an object"))
534 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000535 res = (*v->ob_type->tp_repr)(v);
Serhiy Storchaka1fb72d22017-12-03 22:12:11 +0200536 Py_LeaveRecursiveCall();
Victor Stinner0a54cf12011-12-01 03:22:44 +0100537 if (res == NULL)
538 return NULL;
539 if (!PyUnicode_Check(res)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000540 PyErr_Format(PyExc_TypeError,
541 "__repr__ returned non-string (type %.200s)",
542 res->ob_type->tp_name);
543 Py_DECREF(res);
544 return NULL;
545 }
Victor Stinnerdb88ae52011-12-01 02:15:00 +0100546#ifndef Py_DEBUG
547 if (PyUnicode_READY(res) < 0)
548 return NULL;
549#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000550 return res;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000551}
552
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000553PyObject *
Guido van Rossum98297ee2007-11-06 21:34:58 +0000554PyObject_Str(PyObject *v)
Guido van Rossumc6004111993-11-05 10:22:19 +0000555{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000556 PyObject *res;
557 if (PyErr_CheckSignals())
558 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +0000559#ifdef USE_STACKCHECK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000560 if (PyOS_CheckStack()) {
561 PyErr_SetString(PyExc_MemoryError, "stack overflow");
562 return NULL;
563 }
Guido van Rossum98297ee2007-11-06 21:34:58 +0000564#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000565 if (v == NULL)
566 return PyUnicode_FromString("<NULL>");
567 if (PyUnicode_CheckExact(v)) {
Victor Stinnerdb88ae52011-12-01 02:15:00 +0100568#ifndef Py_DEBUG
Victor Stinner4ead7c72011-11-20 19:48:36 +0100569 if (PyUnicode_READY(v) < 0)
570 return NULL;
Victor Stinnerdb88ae52011-12-01 02:15:00 +0100571#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000572 Py_INCREF(v);
573 return v;
574 }
575 if (Py_TYPE(v)->tp_str == NULL)
576 return PyObject_Repr(v);
Guido van Rossum4f288ab2001-05-01 16:53:37 +0000577
Victor Stinner33824f62013-08-26 14:05:19 +0200578#ifdef Py_DEBUG
579 /* PyObject_Str() must not be called with an exception set,
Victor Stinnera8cb5152017-01-18 14:12:51 +0100580 because it can clear it (directly or indirectly) and so the
Nick Coghland979e432014-02-09 10:43:21 +1000581 caller loses its exception */
Victor Stinner33824f62013-08-26 14:05:19 +0200582 assert(!PyErr_Occurred());
583#endif
584
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000585 /* It is possible for a type to have a tp_str representation that loops
586 infinitely. */
587 if (Py_EnterRecursiveCall(" while getting the str of an object"))
588 return NULL;
589 res = (*Py_TYPE(v)->tp_str)(v);
590 Py_LeaveRecursiveCall();
591 if (res == NULL)
592 return NULL;
593 if (!PyUnicode_Check(res)) {
594 PyErr_Format(PyExc_TypeError,
595 "__str__ returned non-string (type %.200s)",
596 Py_TYPE(res)->tp_name);
597 Py_DECREF(res);
598 return NULL;
599 }
Victor Stinnerdb88ae52011-12-01 02:15:00 +0100600#ifndef Py_DEBUG
Victor Stinner4ead7c72011-11-20 19:48:36 +0100601 if (PyUnicode_READY(res) < 0)
602 return NULL;
Victor Stinnerdb88ae52011-12-01 02:15:00 +0100603#endif
Victor Stinner4ead7c72011-11-20 19:48:36 +0100604 assert(_PyUnicode_CheckConsistency(res, 1));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000605 return res;
Neil Schemenauercf52c072005-08-12 17:34:58 +0000606}
607
Georg Brandl559e5d72008-06-11 18:37:52 +0000608PyObject *
609PyObject_ASCII(PyObject *v)
610{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000611 PyObject *repr, *ascii, *res;
Georg Brandl559e5d72008-06-11 18:37:52 +0000612
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000613 repr = PyObject_Repr(v);
614 if (repr == NULL)
615 return NULL;
Georg Brandl559e5d72008-06-11 18:37:52 +0000616
Victor Stinneraf037572013-04-14 18:44:10 +0200617 if (PyUnicode_IS_ASCII(repr))
618 return repr;
619
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000620 /* repr is guaranteed to be a PyUnicode object by PyObject_Repr */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200621 ascii = _PyUnicode_AsASCIIString(repr, "backslashreplace");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000622 Py_DECREF(repr);
623 if (ascii == NULL)
624 return NULL;
Georg Brandl559e5d72008-06-11 18:37:52 +0000625
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000626 res = PyUnicode_DecodeASCII(
627 PyBytes_AS_STRING(ascii),
628 PyBytes_GET_SIZE(ascii),
629 NULL);
630
631 Py_DECREF(ascii);
632 return res;
Georg Brandl559e5d72008-06-11 18:37:52 +0000633}
Guido van Rossuma3af41d2001-01-18 22:07:06 +0000634
Benjamin Petersonc15a0732008-08-26 16:46:47 +0000635PyObject *
636PyObject_Bytes(PyObject *v)
637{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000638 PyObject *result, *func;
Benjamin Petersonc15a0732008-08-26 16:46:47 +0000639
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000640 if (v == NULL)
641 return PyBytes_FromString("<NULL>");
Benjamin Petersonc15a0732008-08-26 16:46:47 +0000642
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000643 if (PyBytes_CheckExact(v)) {
644 Py_INCREF(v);
645 return v;
646 }
Benjamin Petersonc15a0732008-08-26 16:46:47 +0000647
Benjamin Petersonce798522012-01-22 11:24:29 -0500648 func = _PyObject_LookupSpecial(v, &PyId___bytes__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000649 if (func != NULL) {
Victor Stinnerf17c3de2016-12-06 18:46:19 +0100650 result = _PyObject_CallNoArg(func);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000651 Py_DECREF(func);
652 if (result == NULL)
Benjamin Peterson41ece392010-09-11 16:39:57 +0000653 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000654 if (!PyBytes_Check(result)) {
Benjamin Peterson41ece392010-09-11 16:39:57 +0000655 PyErr_Format(PyExc_TypeError,
656 "__bytes__ returned non-bytes (type %.200s)",
657 Py_TYPE(result)->tp_name);
658 Py_DECREF(result);
659 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000660 }
661 return result;
662 }
663 else if (PyErr_Occurred())
664 return NULL;
665 return PyBytes_FromObject(v);
Benjamin Petersonc15a0732008-08-26 16:46:47 +0000666}
667
Mark Dickinsonc008a172009-02-01 13:59:22 +0000668/* For Python 3.0.1 and later, the old three-way comparison has been
669 completely removed in favour of rich comparisons. PyObject_Compare() and
670 PyObject_Cmp() are gone, and the builtin cmp function no longer exists.
Mark Dickinsone94c6792009-02-02 20:36:42 +0000671 The old tp_compare slot has been renamed to tp_reserved, and should no
Mark Dickinsonc008a172009-02-01 13:59:22 +0000672 longer be used. Use tp_richcompare instead.
Guido van Rossum98297ee2007-11-06 21:34:58 +0000673
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000674 See (*) below for practical amendments.
675
Mark Dickinsonc008a172009-02-01 13:59:22 +0000676 tp_richcompare gets called with a first argument of the appropriate type
677 and a second object of an arbitrary type. We never do any kind of
678 coercion.
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000679
Mark Dickinsonc008a172009-02-01 13:59:22 +0000680 The tp_richcompare slot should return an object, as follows:
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000681
682 NULL if an exception occurred
683 NotImplemented if the requested comparison is not implemented
684 any other false value if the requested comparison is false
685 any other true value if the requested comparison is true
686
687 The PyObject_RichCompare[Bool]() wrappers raise TypeError when they get
688 NotImplemented.
689
690 (*) Practical amendments:
691
692 - If rich comparison returns NotImplemented, == and != are decided by
693 comparing the object pointer (i.e. falling back to the base object
694 implementation).
695
Guido van Rossuma4073002002-05-31 20:03:54 +0000696*/
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000697
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000698/* Map rich comparison operators to their swapped version, e.g. LT <--> GT */
Brett Cannona5ca2e72004-09-25 01:37:24 +0000699int _Py_SwappedOp[] = {Py_GT, Py_GE, Py_EQ, Py_NE, Py_LT, Py_LE};
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +0000700
Serhiy Storchaka2d06e842015-12-25 19:53:18 +0200701static const char * const opstrings[] = {"<", "<=", "==", "!=", ">", ">="};
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000702
703/* Perform a rich comparison, raising TypeError when the requested comparison
704 operator is not supported. */
Guido van Rossume797ec12001-01-17 15:24:28 +0000705static PyObject *
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000706do_richcompare(PyObject *v, PyObject *w, int op)
Guido van Rossume797ec12001-01-17 15:24:28 +0000707{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000708 richcmpfunc f;
709 PyObject *res;
710 int checked_reverse_op = 0;
Guido van Rossume797ec12001-01-17 15:24:28 +0000711
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000712 if (v->ob_type != w->ob_type &&
713 PyType_IsSubtype(w->ob_type, v->ob_type) &&
714 (f = w->ob_type->tp_richcompare) != NULL) {
715 checked_reverse_op = 1;
716 res = (*f)(w, v, _Py_SwappedOp[op]);
717 if (res != Py_NotImplemented)
718 return res;
719 Py_DECREF(res);
720 }
721 if ((f = v->ob_type->tp_richcompare) != NULL) {
722 res = (*f)(v, w, op);
723 if (res != Py_NotImplemented)
724 return res;
725 Py_DECREF(res);
726 }
727 if (!checked_reverse_op && (f = w->ob_type->tp_richcompare) != NULL) {
728 res = (*f)(w, v, _Py_SwappedOp[op]);
729 if (res != Py_NotImplemented)
730 return res;
731 Py_DECREF(res);
732 }
733 /* If neither object implements it, provide a sensible default
734 for == and !=, but raise an exception for ordering. */
735 switch (op) {
736 case Py_EQ:
737 res = (v == w) ? Py_True : Py_False;
738 break;
739 case Py_NE:
740 res = (v != w) ? Py_True : Py_False;
741 break;
742 default:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000743 PyErr_Format(PyExc_TypeError,
Victor Stinner91108f02015-10-14 18:25:31 +0200744 "'%s' not supported between instances of '%.100s' and '%.100s'",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000745 opstrings[op],
Victor Stinner91108f02015-10-14 18:25:31 +0200746 v->ob_type->tp_name,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000747 w->ob_type->tp_name);
748 return NULL;
749 }
750 Py_INCREF(res);
751 return res;
Guido van Rossume797ec12001-01-17 15:24:28 +0000752}
753
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000754/* Perform a rich comparison with object result. This wraps do_richcompare()
755 with a check for NULL arguments and a recursion check. */
Guido van Rossume797ec12001-01-17 15:24:28 +0000756
Guido van Rossume797ec12001-01-17 15:24:28 +0000757PyObject *
758PyObject_RichCompare(PyObject *v, PyObject *w, int op)
759{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000760 PyObject *res;
Guido van Rossume797ec12001-01-17 15:24:28 +0000761
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000762 assert(Py_LT <= op && op <= Py_GE);
763 if (v == NULL || w == NULL) {
764 if (!PyErr_Occurred())
765 PyErr_BadInternalCall();
766 return NULL;
767 }
768 if (Py_EnterRecursiveCall(" in comparison"))
769 return NULL;
770 res = do_richcompare(v, w, op);
771 Py_LeaveRecursiveCall();
772 return res;
Guido van Rossume797ec12001-01-17 15:24:28 +0000773}
774
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000775/* Perform a rich comparison with integer result. This wraps
776 PyObject_RichCompare(), returning -1 for error, 0 for false, 1 for true. */
Guido van Rossume797ec12001-01-17 15:24:28 +0000777int
778PyObject_RichCompareBool(PyObject *v, PyObject *w, int op)
779{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000780 PyObject *res;
781 int ok;
Guido van Rossume797ec12001-01-17 15:24:28 +0000782
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000783 /* Quick result when objects are the same.
784 Guarantees that identity implies equality. */
785 if (v == w) {
786 if (op == Py_EQ)
787 return 1;
788 else if (op == Py_NE)
789 return 0;
790 }
Mark Dickinson4a1f5932008-11-12 23:23:36 +0000791
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000792 res = PyObject_RichCompare(v, w, op);
793 if (res == NULL)
794 return -1;
795 if (PyBool_Check(res))
796 ok = (res == Py_True);
797 else
798 ok = PyObject_IsTrue(res);
799 Py_DECREF(res);
800 return ok;
Guido van Rossume797ec12001-01-17 15:24:28 +0000801}
Fred Drake13634cf2000-06-29 19:17:04 +0000802
Antoine Pitrouce4a9da2011-11-21 20:46:33 +0100803Py_hash_t
Nick Coghland1abd252008-07-15 15:46:38 +0000804PyObject_HashNotImplemented(PyObject *v)
805{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000806 PyErr_Format(PyExc_TypeError, "unhashable type: '%.200s'",
807 Py_TYPE(v)->tp_name);
808 return -1;
Nick Coghland1abd252008-07-15 15:46:38 +0000809}
Fred Drake13634cf2000-06-29 19:17:04 +0000810
Benjamin Peterson8f67d082010-10-17 20:54:53 +0000811Py_hash_t
Fred Drake100814d2000-07-09 15:48:49 +0000812PyObject_Hash(PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000813{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000814 PyTypeObject *tp = Py_TYPE(v);
815 if (tp->tp_hash != NULL)
816 return (*tp->tp_hash)(v);
817 /* To keep to the general practice that inheriting
818 * solely from object in C code should work without
819 * an explicit call to PyType_Ready, we implicitly call
820 * PyType_Ready here and then check the tp_hash slot again
821 */
822 if (tp->tp_dict == NULL) {
823 if (PyType_Ready(tp) < 0)
824 return -1;
825 if (tp->tp_hash != NULL)
826 return (*tp->tp_hash)(v);
827 }
828 /* Otherwise, the object can't be hashed */
829 return PyObject_HashNotImplemented(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000830}
831
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000832PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000833PyObject_GetAttrString(PyObject *v, const char *name)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000834{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000835 PyObject *w, *res;
Guido van Rossumd8eb1b31996-08-09 20:52:03 +0000836
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000837 if (Py_TYPE(v)->tp_getattr != NULL)
838 return (*Py_TYPE(v)->tp_getattr)(v, (char*)name);
INADA Naoki3e8d6cb2017-02-21 23:57:25 +0900839 w = PyUnicode_FromString(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000840 if (w == NULL)
841 return NULL;
842 res = PyObject_GetAttr(v, w);
Victor Stinner59af08f2012-03-22 02:09:08 +0100843 Py_DECREF(w);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000844 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000845}
846
847int
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000848PyObject_HasAttrString(PyObject *v, const char *name)
Guido van Rossumed18fdc1993-07-11 19:55:34 +0000849{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000850 PyObject *res = PyObject_GetAttrString(v, name);
851 if (res != NULL) {
852 Py_DECREF(res);
853 return 1;
854 }
855 PyErr_Clear();
856 return 0;
Guido van Rossumed18fdc1993-07-11 19:55:34 +0000857}
858
859int
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000860PyObject_SetAttrString(PyObject *v, const char *name, PyObject *w)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000861{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000862 PyObject *s;
863 int res;
Guido van Rossumd8eb1b31996-08-09 20:52:03 +0000864
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000865 if (Py_TYPE(v)->tp_setattr != NULL)
866 return (*Py_TYPE(v)->tp_setattr)(v, (char*)name, w);
867 s = PyUnicode_InternFromString(name);
868 if (s == NULL)
869 return -1;
870 res = PyObject_SetAttr(v, s, w);
871 Py_XDECREF(s);
872 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000873}
874
Benjamin Petersonbfebb7b2011-12-15 15:34:02 -0500875int
876_PyObject_IsAbstract(PyObject *obj)
877{
878 int res;
879 PyObject* isabstract;
Benjamin Petersonbfebb7b2011-12-15 15:34:02 -0500880
881 if (obj == NULL)
882 return 0;
883
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200884 res = _PyObject_LookupAttrId(obj, &PyId___isabstractmethod__, &isabstract);
885 if (res > 0) {
886 res = PyObject_IsTrue(isabstract);
887 Py_DECREF(isabstract);
Benjamin Petersonbfebb7b2011-12-15 15:34:02 -0500888 }
Benjamin Petersonbfebb7b2011-12-15 15:34:02 -0500889 return res;
890}
891
Guido van Rossum98ff96a1997-05-20 18:34:44 +0000892PyObject *
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200893_PyObject_GetAttrId(PyObject *v, _Py_Identifier *name)
894{
895 PyObject *result;
Martin v. Löwisd10759f2011-11-07 13:00:05 +0100896 PyObject *oname = _PyUnicode_FromId(name); /* borrowed */
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200897 if (!oname)
898 return NULL;
899 result = PyObject_GetAttr(v, oname);
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200900 return result;
901}
902
903int
904_PyObject_HasAttrId(PyObject *v, _Py_Identifier *name)
905{
906 int result;
Martin v. Löwisd10759f2011-11-07 13:00:05 +0100907 PyObject *oname = _PyUnicode_FromId(name); /* borrowed */
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200908 if (!oname)
909 return -1;
910 result = PyObject_HasAttr(v, oname);
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200911 return result;
912}
913
914int
915_PyObject_SetAttrId(PyObject *v, _Py_Identifier *name, PyObject *w)
916{
917 int result;
Martin v. Löwisd10759f2011-11-07 13:00:05 +0100918 PyObject *oname = _PyUnicode_FromId(name); /* borrowed */
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200919 if (!oname)
920 return -1;
921 result = PyObject_SetAttr(v, oname, w);
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200922 return result;
923}
924
925PyObject *
Fred Drake100814d2000-07-09 15:48:49 +0000926PyObject_GetAttr(PyObject *v, PyObject *name)
Guido van Rossum98ff96a1997-05-20 18:34:44 +0000927{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000928 PyTypeObject *tp = Py_TYPE(v);
Tim Peters6d6c1a32001-08-02 04:15:00 +0000929
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000930 if (!PyUnicode_Check(name)) {
931 PyErr_Format(PyExc_TypeError,
932 "attribute name must be string, not '%.200s'",
933 name->ob_type->tp_name);
934 return NULL;
935 }
936 if (tp->tp_getattro != NULL)
937 return (*tp->tp_getattro)(v, name);
938 if (tp->tp_getattr != NULL) {
Serhiy Storchaka2a404b62017-01-22 23:07:07 +0200939 const char *name_str = PyUnicode_AsUTF8(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000940 if (name_str == NULL)
941 return NULL;
Serhiy Storchaka2a404b62017-01-22 23:07:07 +0200942 return (*tp->tp_getattr)(v, (char *)name_str);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000943 }
944 PyErr_Format(PyExc_AttributeError,
945 "'%.50s' object has no attribute '%U'",
946 tp->tp_name, name);
947 return NULL;
Guido van Rossum98ff96a1997-05-20 18:34:44 +0000948}
949
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200950int
951_PyObject_LookupAttr(PyObject *v, PyObject *name, PyObject **result)
INADA Naoki378edee2018-01-16 20:52:41 +0900952{
953 PyTypeObject *tp = Py_TYPE(v);
INADA Naoki378edee2018-01-16 20:52:41 +0900954
955 if (!PyUnicode_Check(name)) {
956 PyErr_Format(PyExc_TypeError,
957 "attribute name must be string, not '%.200s'",
958 name->ob_type->tp_name);
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200959 *result = NULL;
960 return -1;
INADA Naoki378edee2018-01-16 20:52:41 +0900961 }
962
963 if (tp->tp_getattro == PyObject_GenericGetAttr) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200964 *result = _PyObject_GenericGetAttrWithDict(v, name, NULL, 1);
965 if (*result != NULL) {
966 return 1;
967 }
968 if (PyErr_Occurred()) {
969 return -1;
970 }
971 return 0;
INADA Naoki378edee2018-01-16 20:52:41 +0900972 }
973 if (tp->tp_getattro != NULL) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200974 *result = (*tp->tp_getattro)(v, name);
INADA Naoki378edee2018-01-16 20:52:41 +0900975 }
976 else if (tp->tp_getattr != NULL) {
977 const char *name_str = PyUnicode_AsUTF8(name);
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200978 if (name_str == NULL) {
979 *result = NULL;
980 return -1;
981 }
982 *result = (*tp->tp_getattr)(v, (char *)name_str);
INADA Naoki378edee2018-01-16 20:52:41 +0900983 }
INADA Naokie76daeb2018-01-26 16:22:51 +0900984 else {
985 *result = NULL;
986 return 0;
987 }
988
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200989 if (*result != NULL) {
990 return 1;
INADA Naoki378edee2018-01-16 20:52:41 +0900991 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200992 if (!PyErr_ExceptionMatches(PyExc_AttributeError)) {
993 return -1;
994 }
995 PyErr_Clear();
996 return 0;
997}
998
999int
1000_PyObject_LookupAttrId(PyObject *v, _Py_Identifier *name, PyObject **result)
1001{
1002 PyObject *oname = _PyUnicode_FromId(name); /* borrowed */
1003 if (!oname) {
1004 *result = NULL;
1005 return -1;
1006 }
1007 return _PyObject_LookupAttr(v, oname, result);
INADA Naoki378edee2018-01-16 20:52:41 +09001008}
1009
Guido van Rossum98ff96a1997-05-20 18:34:44 +00001010int
Fred Drake100814d2000-07-09 15:48:49 +00001011PyObject_HasAttr(PyObject *v, PyObject *name)
Guido van Rossum98ff96a1997-05-20 18:34:44 +00001012{
Serhiy Storchakaf320be72018-01-25 10:49:40 +02001013 PyObject *res;
1014 if (_PyObject_LookupAttr(v, name, &res) < 0) {
1015 PyErr_Clear();
1016 return 0;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001017 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02001018 if (res == NULL) {
1019 return 0;
1020 }
1021 Py_DECREF(res);
1022 return 1;
Guido van Rossum98ff96a1997-05-20 18:34:44 +00001023}
1024
1025int
Fred Drake100814d2000-07-09 15:48:49 +00001026PyObject_SetAttr(PyObject *v, PyObject *name, PyObject *value)
Guido van Rossum98ff96a1997-05-20 18:34:44 +00001027{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001028 PyTypeObject *tp = Py_TYPE(v);
1029 int err;
Marc-André Lemburge44e5072000-09-18 16:20:57 +00001030
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001031 if (!PyUnicode_Check(name)) {
1032 PyErr_Format(PyExc_TypeError,
1033 "attribute name must be string, not '%.200s'",
1034 name->ob_type->tp_name);
1035 return -1;
1036 }
1037 Py_INCREF(name);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001038
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001039 PyUnicode_InternInPlace(&name);
1040 if (tp->tp_setattro != NULL) {
1041 err = (*tp->tp_setattro)(v, name, value);
1042 Py_DECREF(name);
1043 return err;
1044 }
1045 if (tp->tp_setattr != NULL) {
Serhiy Storchaka2a404b62017-01-22 23:07:07 +02001046 const char *name_str = PyUnicode_AsUTF8(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001047 if (name_str == NULL)
1048 return -1;
Serhiy Storchaka2a404b62017-01-22 23:07:07 +02001049 err = (*tp->tp_setattr)(v, (char *)name_str, value);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001050 Py_DECREF(name);
1051 return err;
1052 }
1053 Py_DECREF(name);
Victor Stinner24702042018-10-26 17:16:37 +02001054 _PyObject_ASSERT(name, name->ob_refcnt >= 1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001055 if (tp->tp_getattr == NULL && tp->tp_getattro == NULL)
1056 PyErr_Format(PyExc_TypeError,
1057 "'%.100s' object has no attributes "
1058 "(%s .%U)",
1059 tp->tp_name,
1060 value==NULL ? "del" : "assign to",
1061 name);
1062 else
1063 PyErr_Format(PyExc_TypeError,
1064 "'%.100s' object has only read-only attributes "
1065 "(%s .%U)",
1066 tp->tp_name,
1067 value==NULL ? "del" : "assign to",
1068 name);
1069 return -1;
Tim Peters6d6c1a32001-08-02 04:15:00 +00001070}
1071
1072/* Helper to get a pointer to an object's __dict__ slot, if any */
1073
1074PyObject **
1075_PyObject_GetDictPtr(PyObject *obj)
1076{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001077 Py_ssize_t dictoffset;
1078 PyTypeObject *tp = Py_TYPE(obj);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001079
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001080 dictoffset = tp->tp_dictoffset;
1081 if (dictoffset == 0)
1082 return NULL;
1083 if (dictoffset < 0) {
1084 Py_ssize_t tsize;
1085 size_t size;
Guido van Rossum2eb0b872002-03-01 22:24:49 +00001086
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001087 tsize = ((PyVarObject *)obj)->ob_size;
1088 if (tsize < 0)
1089 tsize = -tsize;
1090 size = _PyObject_VAR_SIZE(tp, tsize);
Guido van Rossum2eb0b872002-03-01 22:24:49 +00001091
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001092 dictoffset += (long)size;
Victor Stinner24702042018-10-26 17:16:37 +02001093 _PyObject_ASSERT(obj, dictoffset > 0);
1094 _PyObject_ASSERT(obj, dictoffset % SIZEOF_VOID_P == 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001095 }
1096 return (PyObject **) ((char *)obj + dictoffset);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001097}
1098
Tim Peters6d6c1a32001-08-02 04:15:00 +00001099PyObject *
Raymond Hettinger1da1dbf2003-03-17 19:46:11 +00001100PyObject_SelfIter(PyObject *obj)
Raymond Hettinger01538262003-03-17 08:24:35 +00001101{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001102 Py_INCREF(obj);
1103 return obj;
Raymond Hettinger01538262003-03-17 08:24:35 +00001104}
1105
Amaury Forgeot d'Arcf343e012009-01-12 23:58:21 +00001106/* Helper used when the __next__ method is removed from a type:
1107 tp_iternext is never NULL and can be safely called without checking
1108 on every iteration.
1109 */
1110
1111PyObject *
1112_PyObject_NextNotImplemented(PyObject *self)
1113{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001114 PyErr_Format(PyExc_TypeError,
1115 "'%.200s' object is not iterable",
1116 Py_TYPE(self)->tp_name);
1117 return NULL;
Amaury Forgeot d'Arcf343e012009-01-12 23:58:21 +00001118}
1119
Yury Selivanovf2392132016-12-13 19:03:51 -05001120
1121/* Specialized version of _PyObject_GenericGetAttrWithDict
1122 specifically for the LOAD_METHOD opcode.
1123
1124 Return 1 if a method is found, 0 if it's a regular attribute
1125 from __dict__ or something returned by using a descriptor
1126 protocol.
1127
1128 `method` will point to the resolved attribute or NULL. In the
1129 latter case, an error will be set.
1130*/
1131int
1132_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method)
1133{
1134 PyTypeObject *tp = Py_TYPE(obj);
1135 PyObject *descr;
1136 descrgetfunc f = NULL;
1137 PyObject **dictptr, *dict;
1138 PyObject *attr;
1139 int meth_found = 0;
1140
1141 assert(*method == NULL);
1142
1143 if (Py_TYPE(obj)->tp_getattro != PyObject_GenericGetAttr
1144 || !PyUnicode_Check(name)) {
1145 *method = PyObject_GetAttr(obj, name);
1146 return 0;
1147 }
1148
1149 if (tp->tp_dict == NULL && PyType_Ready(tp) < 0)
1150 return 0;
1151
1152 descr = _PyType_Lookup(tp, name);
1153 if (descr != NULL) {
1154 Py_INCREF(descr);
INADA Naoki5566bbb2017-02-03 07:43:03 +09001155 if (PyFunction_Check(descr) ||
1156 (Py_TYPE(descr) == &PyMethodDescr_Type)) {
Yury Selivanovf2392132016-12-13 19:03:51 -05001157 meth_found = 1;
1158 } else {
1159 f = descr->ob_type->tp_descr_get;
1160 if (f != NULL && PyDescr_IsData(descr)) {
1161 *method = f(descr, obj, (PyObject *)obj->ob_type);
1162 Py_DECREF(descr);
1163 return 0;
1164 }
1165 }
1166 }
1167
1168 dictptr = _PyObject_GetDictPtr(obj);
1169 if (dictptr != NULL && (dict = *dictptr) != NULL) {
1170 Py_INCREF(dict);
Serhiy Storchakaa24107b2019-02-25 17:59:46 +02001171 attr = PyDict_GetItemWithError(dict, name);
Yury Selivanovf2392132016-12-13 19:03:51 -05001172 if (attr != NULL) {
1173 Py_INCREF(attr);
1174 *method = attr;
1175 Py_DECREF(dict);
1176 Py_XDECREF(descr);
1177 return 0;
1178 }
Serhiy Storchakaa24107b2019-02-25 17:59:46 +02001179 else {
1180 Py_DECREF(dict);
1181 if (PyErr_Occurred()) {
1182 Py_XDECREF(descr);
1183 return 0;
1184 }
1185 }
Yury Selivanovf2392132016-12-13 19:03:51 -05001186 }
1187
1188 if (meth_found) {
1189 *method = descr;
1190 return 1;
1191 }
1192
1193 if (f != NULL) {
1194 *method = f(descr, obj, (PyObject *)Py_TYPE(obj));
1195 Py_DECREF(descr);
1196 return 0;
1197 }
1198
1199 if (descr != NULL) {
1200 *method = descr;
1201 return 0;
1202 }
1203
1204 PyErr_Format(PyExc_AttributeError,
1205 "'%.50s' object has no attribute '%U'",
1206 tp->tp_name, name);
1207 return 0;
1208}
1209
1210/* Generic GetAttr functions - put these in your tp_[gs]etattro slot. */
Michael W. Hudson1593f502004-09-14 17:09:47 +00001211
Raymond Hettinger01538262003-03-17 08:24:35 +00001212PyObject *
INADA Naoki378edee2018-01-16 20:52:41 +09001213_PyObject_GenericGetAttrWithDict(PyObject *obj, PyObject *name,
1214 PyObject *dict, int suppress)
Tim Peters6d6c1a32001-08-02 04:15:00 +00001215{
Yury Selivanovf2392132016-12-13 19:03:51 -05001216 /* Make sure the logic of _PyObject_GetMethod is in sync with
1217 this method.
INADA Naoki378edee2018-01-16 20:52:41 +09001218
1219 When suppress=1, this function suppress AttributeError.
Yury Selivanovf2392132016-12-13 19:03:51 -05001220 */
1221
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001222 PyTypeObject *tp = Py_TYPE(obj);
1223 PyObject *descr = NULL;
1224 PyObject *res = NULL;
1225 descrgetfunc f;
1226 Py_ssize_t dictoffset;
1227 PyObject **dictptr;
Tim Peters6d6c1a32001-08-02 04:15:00 +00001228
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001229 if (!PyUnicode_Check(name)){
1230 PyErr_Format(PyExc_TypeError,
1231 "attribute name must be string, not '%.200s'",
1232 name->ob_type->tp_name);
1233 return NULL;
1234 }
Serhiy Storchaka55c861f2016-04-17 20:31:51 +03001235 Py_INCREF(name);
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001236
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001237 if (tp->tp_dict == NULL) {
1238 if (PyType_Ready(tp) < 0)
1239 goto done;
1240 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001241
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001242 descr = _PyType_Lookup(tp, name);
Michael W. Hudsonb2c7de42003-08-15 13:07:47 +00001243
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001244 f = NULL;
1245 if (descr != NULL) {
Serhiy Storchaka55c861f2016-04-17 20:31:51 +03001246 Py_INCREF(descr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001247 f = descr->ob_type->tp_descr_get;
1248 if (f != NULL && PyDescr_IsData(descr)) {
1249 res = f(descr, obj, (PyObject *)obj->ob_type);
INADA Naoki378edee2018-01-16 20:52:41 +09001250 if (res == NULL && suppress &&
1251 PyErr_ExceptionMatches(PyExc_AttributeError)) {
1252 PyErr_Clear();
1253 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001254 goto done;
1255 }
1256 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001257
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001258 if (dict == NULL) {
1259 /* Inline _PyObject_GetDictPtr */
1260 dictoffset = tp->tp_dictoffset;
1261 if (dictoffset != 0) {
1262 if (dictoffset < 0) {
1263 Py_ssize_t tsize;
1264 size_t size;
Guido van Rossumc66ff442002-08-19 16:50:48 +00001265
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001266 tsize = ((PyVarObject *)obj)->ob_size;
1267 if (tsize < 0)
1268 tsize = -tsize;
1269 size = _PyObject_VAR_SIZE(tp, tsize);
Victor Stinner24702042018-10-26 17:16:37 +02001270 _PyObject_ASSERT(obj, size <= PY_SSIZE_T_MAX);
Guido van Rossumc66ff442002-08-19 16:50:48 +00001271
Serhiy Storchaka55c861f2016-04-17 20:31:51 +03001272 dictoffset += (Py_ssize_t)size;
Victor Stinner24702042018-10-26 17:16:37 +02001273 _PyObject_ASSERT(obj, dictoffset > 0);
1274 _PyObject_ASSERT(obj, dictoffset % SIZEOF_VOID_P == 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001275 }
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001276 dictptr = (PyObject **) ((char *)obj + dictoffset);
1277 dict = *dictptr;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001278 }
1279 }
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001280 if (dict != NULL) {
1281 Py_INCREF(dict);
Serhiy Storchakaa24107b2019-02-25 17:59:46 +02001282 res = PyDict_GetItemWithError(dict, name);
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001283 if (res != NULL) {
1284 Py_INCREF(res);
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001285 Py_DECREF(dict);
1286 goto done;
1287 }
Serhiy Storchakaa24107b2019-02-25 17:59:46 +02001288 else {
1289 Py_DECREF(dict);
1290 if (PyErr_Occurred()) {
1291 if (suppress && PyErr_ExceptionMatches(PyExc_AttributeError)) {
1292 PyErr_Clear();
1293 }
1294 else {
1295 goto done;
1296 }
1297 }
1298 }
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001299 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001300
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001301 if (f != NULL) {
1302 res = f(descr, obj, (PyObject *)Py_TYPE(obj));
INADA Naoki378edee2018-01-16 20:52:41 +09001303 if (res == NULL && suppress &&
1304 PyErr_ExceptionMatches(PyExc_AttributeError)) {
1305 PyErr_Clear();
1306 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001307 goto done;
1308 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001309
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001310 if (descr != NULL) {
1311 res = descr;
Victor Stinner2d01dc02012-03-09 00:44:13 +01001312 descr = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001313 goto done;
1314 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001315
INADA Naoki378edee2018-01-16 20:52:41 +09001316 if (!suppress) {
1317 PyErr_Format(PyExc_AttributeError,
1318 "'%.50s' object has no attribute '%U'",
1319 tp->tp_name, name);
1320 }
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001321 done:
Victor Stinner2d01dc02012-03-09 00:44:13 +01001322 Py_XDECREF(descr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001323 Py_DECREF(name);
1324 return res;
Tim Peters6d6c1a32001-08-02 04:15:00 +00001325}
1326
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001327PyObject *
1328PyObject_GenericGetAttr(PyObject *obj, PyObject *name)
1329{
INADA Naoki378edee2018-01-16 20:52:41 +09001330 return _PyObject_GenericGetAttrWithDict(obj, name, NULL, 0);
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001331}
1332
Tim Peters6d6c1a32001-08-02 04:15:00 +00001333int
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001334_PyObject_GenericSetAttrWithDict(PyObject *obj, PyObject *name,
1335 PyObject *value, PyObject *dict)
Tim Peters6d6c1a32001-08-02 04:15:00 +00001336{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001337 PyTypeObject *tp = Py_TYPE(obj);
1338 PyObject *descr;
1339 descrsetfunc f;
1340 PyObject **dictptr;
1341 int res = -1;
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001342
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001343 if (!PyUnicode_Check(name)){
1344 PyErr_Format(PyExc_TypeError,
1345 "attribute name must be string, not '%.200s'",
1346 name->ob_type->tp_name);
1347 return -1;
1348 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001349
Benjamin Peterson74529ad2012-03-09 07:25:32 -08001350 if (tp->tp_dict == NULL && PyType_Ready(tp) < 0)
1351 return -1;
1352
1353 Py_INCREF(name);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001354
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001355 descr = _PyType_Lookup(tp, name);
Victor Stinner2d01dc02012-03-09 00:44:13 +01001356
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001357 if (descr != NULL) {
Serhiy Storchaka55c861f2016-04-17 20:31:51 +03001358 Py_INCREF(descr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001359 f = descr->ob_type->tp_descr_set;
Serhiy Storchaka55c861f2016-04-17 20:31:51 +03001360 if (f != NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001361 res = f(descr, obj, value);
1362 goto done;
1363 }
1364 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001365
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001366 if (dict == NULL) {
1367 dictptr = _PyObject_GetDictPtr(obj);
Serhiy Storchaka55c861f2016-04-17 20:31:51 +03001368 if (dictptr == NULL) {
1369 if (descr == NULL) {
1370 PyErr_Format(PyExc_AttributeError,
1371 "'%.100s' object has no attribute '%U'",
1372 tp->tp_name, name);
1373 }
1374 else {
1375 PyErr_Format(PyExc_AttributeError,
1376 "'%.50s' object attribute '%U' is read-only",
1377 tp->tp_name, name);
1378 }
Benjamin Peterson7d95e402012-04-23 11:24:50 -04001379 goto done;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001380 }
Serhiy Storchaka55c861f2016-04-17 20:31:51 +03001381 res = _PyObjectDict_SetItem(tp, dictptr, name, value);
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001382 }
Serhiy Storchaka55c861f2016-04-17 20:31:51 +03001383 else {
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001384 Py_INCREF(dict);
1385 if (value == NULL)
1386 res = PyDict_DelItem(dict, name);
1387 else
1388 res = PyDict_SetItem(dict, name, value);
Benjamin Peterson74529ad2012-03-09 07:25:32 -08001389 Py_DECREF(dict);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001390 }
Serhiy Storchaka55c861f2016-04-17 20:31:51 +03001391 if (res < 0 && PyErr_ExceptionMatches(PyExc_KeyError))
1392 PyErr_SetObject(PyExc_AttributeError, name);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001393
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001394 done:
Victor Stinner2d01dc02012-03-09 00:44:13 +01001395 Py_XDECREF(descr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001396 Py_DECREF(name);
1397 return res;
Guido van Rossum98ff96a1997-05-20 18:34:44 +00001398}
1399
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001400int
1401PyObject_GenericSetAttr(PyObject *obj, PyObject *name, PyObject *value)
1402{
1403 return _PyObject_GenericSetAttrWithDict(obj, name, value, NULL);
1404}
1405
Benjamin Peterson8eb12692012-02-19 19:59:10 -05001406int
1407PyObject_GenericSetDict(PyObject *obj, PyObject *value, void *context)
1408{
Serhiy Storchaka576f1322016-01-05 21:27:54 +02001409 PyObject **dictptr = _PyObject_GetDictPtr(obj);
Benjamin Peterson8eb12692012-02-19 19:59:10 -05001410 if (dictptr == NULL) {
1411 PyErr_SetString(PyExc_AttributeError,
1412 "This object has no __dict__");
1413 return -1;
1414 }
1415 if (value == NULL) {
1416 PyErr_SetString(PyExc_TypeError, "cannot delete __dict__");
1417 return -1;
1418 }
1419 if (!PyDict_Check(value)) {
1420 PyErr_Format(PyExc_TypeError,
1421 "__dict__ must be set to a dictionary, "
1422 "not a '%.200s'", Py_TYPE(value)->tp_name);
1423 return -1;
1424 }
Serhiy Storchaka576f1322016-01-05 21:27:54 +02001425 Py_INCREF(value);
Serhiy Storchakaec397562016-04-06 09:50:03 +03001426 Py_XSETREF(*dictptr, value);
Benjamin Peterson8eb12692012-02-19 19:59:10 -05001427 return 0;
1428}
1429
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001430
Guido van Rossum6ac258d1993-05-12 08:24:20 +00001431/* Test a value used as condition, e.g., in a for or if statement.
1432 Return -1 if an error occurred */
1433
1434int
Fred Drake100814d2000-07-09 15:48:49 +00001435PyObject_IsTrue(PyObject *v)
Guido van Rossum6ac258d1993-05-12 08:24:20 +00001436{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001437 Py_ssize_t res;
1438 if (v == Py_True)
1439 return 1;
1440 if (v == Py_False)
1441 return 0;
1442 if (v == Py_None)
1443 return 0;
1444 else if (v->ob_type->tp_as_number != NULL &&
1445 v->ob_type->tp_as_number->nb_bool != NULL)
1446 res = (*v->ob_type->tp_as_number->nb_bool)(v);
1447 else if (v->ob_type->tp_as_mapping != NULL &&
1448 v->ob_type->tp_as_mapping->mp_length != NULL)
1449 res = (*v->ob_type->tp_as_mapping->mp_length)(v);
1450 else if (v->ob_type->tp_as_sequence != NULL &&
1451 v->ob_type->tp_as_sequence->sq_length != NULL)
1452 res = (*v->ob_type->tp_as_sequence->sq_length)(v);
1453 else
1454 return 1;
1455 /* if it is negative, it should be either -1 or -2 */
1456 return (res > 0) ? 1 : Py_SAFE_DOWNCAST(res, Py_ssize_t, int);
Guido van Rossum6ac258d1993-05-12 08:24:20 +00001457}
1458
Tim Peters803526b2002-07-07 05:13:56 +00001459/* equivalent of 'not v'
Guido van Rossumc3d3f961998-04-09 17:53:59 +00001460 Return -1 if an error occurred */
1461
1462int
Fred Drake100814d2000-07-09 15:48:49 +00001463PyObject_Not(PyObject *v)
Guido van Rossumc3d3f961998-04-09 17:53:59 +00001464{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001465 int res;
1466 res = PyObject_IsTrue(v);
1467 if (res < 0)
1468 return res;
1469 return res == 0;
Guido van Rossumc3d3f961998-04-09 17:53:59 +00001470}
1471
Guido van Rossum49b11fe1995-01-26 00:38:22 +00001472/* Test whether an object can be called */
1473
1474int
Fred Drake100814d2000-07-09 15:48:49 +00001475PyCallable_Check(PyObject *x)
Guido van Rossum49b11fe1995-01-26 00:38:22 +00001476{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001477 if (x == NULL)
1478 return 0;
1479 return x->ob_type->tp_call != NULL;
Guido van Rossum49b11fe1995-01-26 00:38:22 +00001480}
1481
Tim Peters7eea37e2001-09-04 22:08:56 +00001482
Georg Brandle32b4222007-03-10 22:13:27 +00001483/* Helper for PyObject_Dir without arguments: returns the local scope. */
1484static PyObject *
Guido van Rossumad7d8d12007-04-13 01:39:34 +00001485_dir_locals(void)
Tim Peters305b5852001-09-17 02:38:46 +00001486{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001487 PyObject *names;
Victor Stinner41bb43a2013-10-29 01:19:37 +01001488 PyObject *locals;
Tim Peters305b5852001-09-17 02:38:46 +00001489
Victor Stinner41bb43a2013-10-29 01:19:37 +01001490 locals = PyEval_GetLocals();
1491 if (locals == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001492 return NULL;
Tim Peters305b5852001-09-17 02:38:46 +00001493
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001494 names = PyMapping_Keys(locals);
1495 if (!names)
1496 return NULL;
1497 if (!PyList_Check(names)) {
1498 PyErr_Format(PyExc_TypeError,
1499 "dir(): expected keys() of locals to be a list, "
1500 "not '%.200s'", Py_TYPE(names)->tp_name);
1501 Py_DECREF(names);
1502 return NULL;
1503 }
Benjamin Peterson3bbb7222011-06-11 16:12:08 -05001504 if (PyList_Sort(names)) {
1505 Py_DECREF(names);
1506 return NULL;
1507 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001508 /* the locals don't need to be DECREF'd */
1509 return names;
Georg Brandle32b4222007-03-10 22:13:27 +00001510}
1511
Benjamin Peterson82b00c12011-05-24 11:09:06 -05001512/* Helper for PyObject_Dir: object introspection. */
Georg Brandle32b4222007-03-10 22:13:27 +00001513static PyObject *
1514_dir_object(PyObject *obj)
1515{
Benjamin Peterson3bbb7222011-06-11 16:12:08 -05001516 PyObject *result, *sorted;
Benjamin Petersonce798522012-01-22 11:24:29 -05001517 PyObject *dirfunc = _PyObject_LookupSpecial(obj, &PyId___dir__);
Georg Brandle32b4222007-03-10 22:13:27 +00001518
Victor Stinner24702042018-10-26 17:16:37 +02001519 assert(obj != NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001520 if (dirfunc == NULL) {
Benjamin Peterson82b00c12011-05-24 11:09:06 -05001521 if (!PyErr_Occurred())
1522 PyErr_SetString(PyExc_TypeError, "object does not provide __dir__");
1523 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001524 }
Benjamin Peterson82b00c12011-05-24 11:09:06 -05001525 /* use __dir__ */
Victor Stinnerf17c3de2016-12-06 18:46:19 +01001526 result = _PyObject_CallNoArg(dirfunc);
Benjamin Peterson82b00c12011-05-24 11:09:06 -05001527 Py_DECREF(dirfunc);
1528 if (result == NULL)
1529 return NULL;
Benjamin Peterson3bbb7222011-06-11 16:12:08 -05001530 /* return sorted(result) */
1531 sorted = PySequence_List(result);
1532 Py_DECREF(result);
1533 if (sorted == NULL)
1534 return NULL;
1535 if (PyList_Sort(sorted)) {
1536 Py_DECREF(sorted);
1537 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001538 }
Benjamin Peterson3bbb7222011-06-11 16:12:08 -05001539 return sorted;
Georg Brandle32b4222007-03-10 22:13:27 +00001540}
1541
1542/* Implementation of dir() -- if obj is NULL, returns the names in the current
1543 (local) scope. Otherwise, performs introspection of the object: returns a
1544 sorted list of attribute names (supposedly) accessible from the object
1545*/
1546PyObject *
1547PyObject_Dir(PyObject *obj)
1548{
Benjamin Peterson3bbb7222011-06-11 16:12:08 -05001549 return (obj == NULL) ? _dir_locals() : _dir_object(obj);
Tim Peters7eea37e2001-09-04 22:08:56 +00001550}
Guido van Rossum49b11fe1995-01-26 00:38:22 +00001551
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001552/*
Raymond Hettinger66d2be82011-07-28 09:55:13 -07001553None is a non-NULL undefined value.
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001554There is (and should be!) no way to create other objects of this type,
Guido van Rossum3f5da241990-12-20 15:06:42 +00001555so there is exactly one (which is indestructible, by the way).
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001556*/
1557
Guido van Rossum0c182a11992-03-27 17:26:13 +00001558/* ARGSUSED */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001559static PyObject *
Fred Drake100814d2000-07-09 15:48:49 +00001560none_repr(PyObject *op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001561{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001562 return PyUnicode_FromString("None");
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001563}
1564
Barry Warsaw9bf16442001-01-23 16:24:35 +00001565/* ARGUSED */
1566static void
Tim Peters803526b2002-07-07 05:13:56 +00001567none_dealloc(PyObject* ignore)
Barry Warsaw9bf16442001-01-23 16:24:35 +00001568{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001569 /* This should never get called, but we also don't want to SEGV if
1570 * we accidentally decref None out of existence.
1571 */
1572 Py_FatalError("deallocating None");
Barry Warsaw9bf16442001-01-23 16:24:35 +00001573}
1574
Benjamin Petersonc4607ae2011-07-29 18:19:43 -05001575static PyObject *
1576none_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
1577{
Serhiy Storchaka5ab81d72016-12-16 16:18:57 +02001578 if (PyTuple_GET_SIZE(args) || (kwargs && PyDict_GET_SIZE(kwargs))) {
Benjamin Petersonc4607ae2011-07-29 18:19:43 -05001579 PyErr_SetString(PyExc_TypeError, "NoneType takes no arguments");
1580 return NULL;
1581 }
1582 Py_RETURN_NONE;
1583}
1584
Raymond Hettinger66d2be82011-07-28 09:55:13 -07001585static int
1586none_bool(PyObject *v)
1587{
1588 return 0;
1589}
1590
1591static PyNumberMethods none_as_number = {
1592 0, /* nb_add */
1593 0, /* nb_subtract */
1594 0, /* nb_multiply */
1595 0, /* nb_remainder */
1596 0, /* nb_divmod */
1597 0, /* nb_power */
1598 0, /* nb_negative */
1599 0, /* nb_positive */
1600 0, /* nb_absolute */
1601 (inquiry)none_bool, /* nb_bool */
1602 0, /* nb_invert */
1603 0, /* nb_lshift */
1604 0, /* nb_rshift */
1605 0, /* nb_and */
1606 0, /* nb_xor */
1607 0, /* nb_or */
1608 0, /* nb_int */
1609 0, /* nb_reserved */
1610 0, /* nb_float */
1611 0, /* nb_inplace_add */
1612 0, /* nb_inplace_subtract */
1613 0, /* nb_inplace_multiply */
1614 0, /* nb_inplace_remainder */
1615 0, /* nb_inplace_power */
1616 0, /* nb_inplace_lshift */
1617 0, /* nb_inplace_rshift */
1618 0, /* nb_inplace_and */
1619 0, /* nb_inplace_xor */
1620 0, /* nb_inplace_or */
1621 0, /* nb_floor_divide */
1622 0, /* nb_true_divide */
1623 0, /* nb_inplace_floor_divide */
1624 0, /* nb_inplace_true_divide */
1625 0, /* nb_index */
1626};
Barry Warsaw9bf16442001-01-23 16:24:35 +00001627
Alexandre Vassalotti65846c62013-11-30 17:55:48 -08001628PyTypeObject _PyNone_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001629 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1630 "NoneType",
1631 0,
1632 0,
1633 none_dealloc, /*tp_dealloc*/ /*never called*/
1634 0, /*tp_print*/
1635 0, /*tp_getattr*/
1636 0, /*tp_setattr*/
1637 0, /*tp_reserved*/
1638 none_repr, /*tp_repr*/
Raymond Hettinger66d2be82011-07-28 09:55:13 -07001639 &none_as_number, /*tp_as_number*/
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001640 0, /*tp_as_sequence*/
1641 0, /*tp_as_mapping*/
1642 0, /*tp_hash */
Benjamin Petersonc4607ae2011-07-29 18:19:43 -05001643 0, /*tp_call */
1644 0, /*tp_str */
1645 0, /*tp_getattro */
1646 0, /*tp_setattro */
1647 0, /*tp_as_buffer */
1648 Py_TPFLAGS_DEFAULT, /*tp_flags */
1649 0, /*tp_doc */
1650 0, /*tp_traverse */
1651 0, /*tp_clear */
1652 0, /*tp_richcompare */
1653 0, /*tp_weaklistoffset */
1654 0, /*tp_iter */
1655 0, /*tp_iternext */
1656 0, /*tp_methods */
1657 0, /*tp_members */
1658 0, /*tp_getset */
1659 0, /*tp_base */
1660 0, /*tp_dict */
1661 0, /*tp_descr_get */
1662 0, /*tp_descr_set */
1663 0, /*tp_dictoffset */
1664 0, /*tp_init */
1665 0, /*tp_alloc */
1666 none_new, /*tp_new */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001667};
1668
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001669PyObject _Py_NoneStruct = {
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00001670 _PyObject_EXTRA_INIT
Alexandre Vassalotti65846c62013-11-30 17:55:48 -08001671 1, &_PyNone_Type
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001672};
1673
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +00001674/* NotImplemented is an object that can be used to signal that an
1675 operation is not implemented for the given type combination. */
1676
1677static PyObject *
1678NotImplemented_repr(PyObject *op)
1679{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001680 return PyUnicode_FromString("NotImplemented");
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +00001681}
1682
Benjamin Peterson18d7d7a2011-07-29 18:27:44 -05001683static PyObject *
Siddhesh Poyarekar55edd0c2018-04-30 00:29:33 +05301684NotImplemented_reduce(PyObject *op, PyObject *Py_UNUSED(ignored))
Alexandre Vassalottic49477b2013-11-24 02:53:45 -08001685{
1686 return PyUnicode_FromString("NotImplemented");
1687}
1688
1689static PyMethodDef notimplemented_methods[] = {
Siddhesh Poyarekar55edd0c2018-04-30 00:29:33 +05301690 {"__reduce__", NotImplemented_reduce, METH_NOARGS, NULL},
Alexandre Vassalottic49477b2013-11-24 02:53:45 -08001691 {NULL, NULL}
1692};
1693
1694static PyObject *
Benjamin Peterson18d7d7a2011-07-29 18:27:44 -05001695notimplemented_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
1696{
Serhiy Storchaka5ab81d72016-12-16 16:18:57 +02001697 if (PyTuple_GET_SIZE(args) || (kwargs && PyDict_GET_SIZE(kwargs))) {
Benjamin Peterson18d7d7a2011-07-29 18:27:44 -05001698 PyErr_SetString(PyExc_TypeError, "NotImplementedType takes no arguments");
1699 return NULL;
1700 }
Brian Curtindfc80e32011-08-10 20:28:54 -05001701 Py_RETURN_NOTIMPLEMENTED;
Benjamin Peterson18d7d7a2011-07-29 18:27:44 -05001702}
1703
Armin Ronacher226b1db2012-10-06 14:28:58 +02001704static void
1705notimplemented_dealloc(PyObject* ignore)
1706{
1707 /* This should never get called, but we also don't want to SEGV if
1708 * we accidentally decref NotImplemented out of existence.
1709 */
1710 Py_FatalError("deallocating NotImplemented");
1711}
1712
Alexandre Vassalotti65846c62013-11-30 17:55:48 -08001713PyTypeObject _PyNotImplemented_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001714 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1715 "NotImplementedType",
1716 0,
1717 0,
Armin Ronacher226b1db2012-10-06 14:28:58 +02001718 notimplemented_dealloc, /*tp_dealloc*/ /*never called*/
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001719 0, /*tp_print*/
1720 0, /*tp_getattr*/
1721 0, /*tp_setattr*/
1722 0, /*tp_reserved*/
1723 NotImplemented_repr, /*tp_repr*/
1724 0, /*tp_as_number*/
1725 0, /*tp_as_sequence*/
1726 0, /*tp_as_mapping*/
1727 0, /*tp_hash */
Benjamin Peterson18d7d7a2011-07-29 18:27:44 -05001728 0, /*tp_call */
1729 0, /*tp_str */
1730 0, /*tp_getattro */
1731 0, /*tp_setattro */
1732 0, /*tp_as_buffer */
1733 Py_TPFLAGS_DEFAULT, /*tp_flags */
1734 0, /*tp_doc */
1735 0, /*tp_traverse */
1736 0, /*tp_clear */
1737 0, /*tp_richcompare */
1738 0, /*tp_weaklistoffset */
1739 0, /*tp_iter */
1740 0, /*tp_iternext */
Alexandre Vassalottic49477b2013-11-24 02:53:45 -08001741 notimplemented_methods, /*tp_methods */
Benjamin Peterson18d7d7a2011-07-29 18:27:44 -05001742 0, /*tp_members */
1743 0, /*tp_getset */
1744 0, /*tp_base */
1745 0, /*tp_dict */
1746 0, /*tp_descr_get */
1747 0, /*tp_descr_set */
1748 0, /*tp_dictoffset */
1749 0, /*tp_init */
1750 0, /*tp_alloc */
1751 notimplemented_new, /*tp_new */
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +00001752};
1753
1754PyObject _Py_NotImplementedStruct = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001755 _PyObject_EXTRA_INIT
Alexandre Vassalotti65846c62013-11-30 17:55:48 -08001756 1, &_PyNotImplemented_Type
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +00001757};
1758
Victor Stinner6d43f6f2019-01-22 21:18:05 +01001759_PyInitError
Victor Stinnerab672812019-01-23 15:04:40 +01001760_PyTypes_Init(void)
Guido van Rossumba21a492001-08-16 08:17:26 +00001761{
Victor Stinner6d43f6f2019-01-22 21:18:05 +01001762#define INIT_TYPE(TYPE, NAME) \
1763 do { \
1764 if (PyType_Ready(TYPE) < 0) { \
1765 return _Py_INIT_ERR("Can't initialize " NAME " type"); \
1766 } \
1767 } while (0)
Victor Stinner5a1bb4e2014-06-02 14:10:59 +02001768
Victor Stinner6d43f6f2019-01-22 21:18:05 +01001769 INIT_TYPE(&PyBaseObject_Type, "object");
1770 INIT_TYPE(&PyType_Type, "type");
1771 INIT_TYPE(&_PyWeakref_RefType, "weakref");
1772 INIT_TYPE(&_PyWeakref_CallableProxyType, "callable weakref proxy");
1773 INIT_TYPE(&_PyWeakref_ProxyType, "weakref proxy");
1774 INIT_TYPE(&PyLong_Type, "int");
1775 INIT_TYPE(&PyBool_Type, "bool");
1776 INIT_TYPE(&PyByteArray_Type, "bytearray");
1777 INIT_TYPE(&PyBytes_Type, "str");
1778 INIT_TYPE(&PyList_Type, "list");
1779 INIT_TYPE(&_PyNone_Type, "None");
1780 INIT_TYPE(&_PyNotImplemented_Type, "NotImplemented");
1781 INIT_TYPE(&PyTraceBack_Type, "traceback");
1782 INIT_TYPE(&PySuper_Type, "super");
1783 INIT_TYPE(&PyRange_Type, "range");
1784 INIT_TYPE(&PyDict_Type, "dict");
1785 INIT_TYPE(&PyDictKeys_Type, "dict keys");
1786 INIT_TYPE(&PyDictValues_Type, "dict values");
1787 INIT_TYPE(&PyDictItems_Type, "dict items");
1788 INIT_TYPE(&PyDictRevIterKey_Type, "reversed dict keys");
1789 INIT_TYPE(&PyDictRevIterValue_Type, "reversed dict values");
1790 INIT_TYPE(&PyDictRevIterItem_Type, "reversed dict items");
1791 INIT_TYPE(&PyODict_Type, "OrderedDict");
1792 INIT_TYPE(&PyODictKeys_Type, "odict_keys");
1793 INIT_TYPE(&PyODictItems_Type, "odict_items");
1794 INIT_TYPE(&PyODictValues_Type, "odict_values");
1795 INIT_TYPE(&PyODictIter_Type, "odict_keyiterator");
1796 INIT_TYPE(&PySet_Type, "set");
1797 INIT_TYPE(&PyUnicode_Type, "str");
1798 INIT_TYPE(&PySlice_Type, "slice");
1799 INIT_TYPE(&PyStaticMethod_Type, "static method");
1800 INIT_TYPE(&PyComplex_Type, "complex");
1801 INIT_TYPE(&PyFloat_Type, "float");
1802 INIT_TYPE(&PyFrozenSet_Type, "frozenset");
1803 INIT_TYPE(&PyProperty_Type, "property");
1804 INIT_TYPE(&_PyManagedBuffer_Type, "managed buffer");
1805 INIT_TYPE(&PyMemoryView_Type, "memoryview");
1806 INIT_TYPE(&PyTuple_Type, "tuple");
1807 INIT_TYPE(&PyEnum_Type, "enumerate");
1808 INIT_TYPE(&PyReversed_Type, "reversed");
1809 INIT_TYPE(&PyStdPrinter_Type, "StdPrinter");
1810 INIT_TYPE(&PyCode_Type, "code");
1811 INIT_TYPE(&PyFrame_Type, "frame");
1812 INIT_TYPE(&PyCFunction_Type, "builtin function");
1813 INIT_TYPE(&PyMethod_Type, "method");
1814 INIT_TYPE(&PyFunction_Type, "function");
1815 INIT_TYPE(&PyDictProxy_Type, "dict proxy");
1816 INIT_TYPE(&PyGen_Type, "generator");
1817 INIT_TYPE(&PyGetSetDescr_Type, "get-set descriptor");
1818 INIT_TYPE(&PyWrapperDescr_Type, "wrapper");
1819 INIT_TYPE(&_PyMethodWrapper_Type, "method wrapper");
1820 INIT_TYPE(&PyEllipsis_Type, "ellipsis");
1821 INIT_TYPE(&PyMemberDescr_Type, "member descriptor");
1822 INIT_TYPE(&_PyNamespace_Type, "namespace");
1823 INIT_TYPE(&PyCapsule_Type, "capsule");
1824 INIT_TYPE(&PyLongRangeIter_Type, "long range iterator");
1825 INIT_TYPE(&PyCell_Type, "cell");
1826 INIT_TYPE(&PyInstanceMethod_Type, "instance method");
1827 INIT_TYPE(&PyClassMethodDescr_Type, "class method descr");
1828 INIT_TYPE(&PyMethodDescr_Type, "method descr");
1829 INIT_TYPE(&PyCallIter_Type, "call iter");
1830 INIT_TYPE(&PySeqIter_Type, "sequence iterator");
1831 INIT_TYPE(&PyCoro_Type, "coroutine");
1832 INIT_TYPE(&_PyCoroWrapper_Type, "coroutine wrapper");
Eric Snowc11183c2019-03-15 16:35:46 -06001833 INIT_TYPE(&_PyInterpreterID_Type, "interpreter ID");
Victor Stinner6d43f6f2019-01-22 21:18:05 +01001834 return _Py_INIT_OK();
Guido van Rossumba21a492001-08-16 08:17:26 +00001835
Victor Stinner6d43f6f2019-01-22 21:18:05 +01001836#undef INIT_TYPE
Guido van Rossumba21a492001-08-16 08:17:26 +00001837}
1838
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001839
Guido van Rossum84a90321996-05-22 16:34:47 +00001840#ifdef Py_TRACE_REFS
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001841
Guido van Rossumaacdc9d1996-08-12 21:32:12 +00001842void
Fred Drake100814d2000-07-09 15:48:49 +00001843_Py_NewReference(PyObject *op)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001844{
Victor Stinner9e00e802018-10-25 13:31:16 +02001845 if (_Py_tracemalloc_config.tracing) {
1846 _PyTraceMalloc_NewReference(op);
1847 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001848 _Py_INC_REFTOTAL;
1849 op->ob_refcnt = 1;
1850 _Py_AddToAllObjects(op, 1);
1851 _Py_INC_TPALLOCS(op);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001852}
1853
Guido van Rossumaacdc9d1996-08-12 21:32:12 +00001854void
Antoine Pitrou9ed5f272013-08-13 20:18:52 +02001855_Py_ForgetReference(PyObject *op)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001856{
Guido van Rossumbffd6832000-01-20 22:32:56 +00001857#ifdef SLOW_UNREF_CHECK
Antoine Pitrou9ed5f272013-08-13 20:18:52 +02001858 PyObject *p;
Guido van Rossumbffd6832000-01-20 22:32:56 +00001859#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001860 if (op->ob_refcnt < 0)
1861 Py_FatalError("UNREF negative refcnt");
1862 if (op == &refchain ||
1863 op->_ob_prev->_ob_next != op || op->_ob_next->_ob_prev != op) {
1864 fprintf(stderr, "* ob\n");
1865 _PyObject_Dump(op);
1866 fprintf(stderr, "* op->_ob_prev->_ob_next\n");
1867 _PyObject_Dump(op->_ob_prev->_ob_next);
1868 fprintf(stderr, "* op->_ob_next->_ob_prev\n");
1869 _PyObject_Dump(op->_ob_next->_ob_prev);
1870 Py_FatalError("UNREF invalid object");
1871 }
Guido van Rossum2e8f6141992-09-03 20:32:55 +00001872#ifdef SLOW_UNREF_CHECK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001873 for (p = refchain._ob_next; p != &refchain; p = p->_ob_next) {
1874 if (p == op)
1875 break;
1876 }
1877 if (p == &refchain) /* Not found */
1878 Py_FatalError("UNREF unknown object");
Guido van Rossum2e8f6141992-09-03 20:32:55 +00001879#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001880 op->_ob_next->_ob_prev = op->_ob_prev;
1881 op->_ob_prev->_ob_next = op->_ob_next;
1882 op->_ob_next = op->_ob_prev = NULL;
1883 _Py_INC_TPFREES(op);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001884}
1885
Tim Peters269b2a62003-04-17 19:52:29 +00001886/* Print all live objects. Because PyObject_Print is called, the
1887 * interpreter must be in a healthy state.
1888 */
Guido van Rossumaacdc9d1996-08-12 21:32:12 +00001889void
Fred Drake100814d2000-07-09 15:48:49 +00001890_Py_PrintReferences(FILE *fp)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001891{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001892 PyObject *op;
1893 fprintf(fp, "Remaining objects:\n");
1894 for (op = refchain._ob_next; op != &refchain; op = op->_ob_next) {
1895 fprintf(fp, "%p [%" PY_FORMAT_SIZE_T "d] ", op, op->ob_refcnt);
1896 if (PyObject_Print(op, fp, 0) != 0)
1897 PyErr_Clear();
1898 putc('\n', fp);
1899 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001900}
1901
Tim Peters269b2a62003-04-17 19:52:29 +00001902/* Print the addresses of all live objects. Unlike _Py_PrintReferences, this
1903 * doesn't make any calls to the Python C API, so is always safe to call.
1904 */
1905void
1906_Py_PrintReferenceAddresses(FILE *fp)
1907{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001908 PyObject *op;
1909 fprintf(fp, "Remaining object addresses:\n");
1910 for (op = refchain._ob_next; op != &refchain; op = op->_ob_next)
1911 fprintf(fp, "%p [%" PY_FORMAT_SIZE_T "d] %s\n", op,
1912 op->ob_refcnt, Py_TYPE(op)->tp_name);
Tim Peters269b2a62003-04-17 19:52:29 +00001913}
1914
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +00001915PyObject *
Fred Drake100814d2000-07-09 15:48:49 +00001916_Py_GetObjects(PyObject *self, PyObject *args)
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +00001917{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001918 int i, n;
1919 PyObject *t = NULL;
1920 PyObject *res, *op;
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +00001921
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001922 if (!PyArg_ParseTuple(args, "i|O", &n, &t))
1923 return NULL;
1924 op = refchain._ob_next;
1925 res = PyList_New(0);
1926 if (res == NULL)
1927 return NULL;
1928 for (i = 0; (n == 0 || i < n) && op != &refchain; i++) {
1929 while (op == self || op == args || op == res || op == t ||
1930 (t != NULL && Py_TYPE(op) != (PyTypeObject *) t)) {
1931 op = op->_ob_next;
1932 if (op == &refchain)
1933 return res;
1934 }
1935 if (PyList_Append(res, op) < 0) {
1936 Py_DECREF(res);
1937 return NULL;
1938 }
1939 op = op->_ob_next;
1940 }
1941 return res;
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +00001942}
1943
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001944#endif
Guido van Rossum97ead3f1996-01-12 01:24:09 +00001945
Benjamin Petersonb173f782009-05-05 22:31:58 +00001946
Guido van Rossum84a90321996-05-22 16:34:47 +00001947/* Hack to force loading of abstract.o */
Martin v. Löwis18e16552006-02-15 17:27:45 +00001948Py_ssize_t (*_Py_abstract_hack)(PyObject *) = PyObject_Size;
Guido van Rossume09fb551997-08-05 02:04:34 +00001949
1950
David Malcolm49526f42012-06-22 14:55:41 -04001951void
1952_PyObject_DebugTypeStats(FILE *out)
1953{
1954 _PyCFunction_DebugMallocStats(out);
1955 _PyDict_DebugMallocStats(out);
1956 _PyFloat_DebugMallocStats(out);
1957 _PyFrame_DebugMallocStats(out);
1958 _PyList_DebugMallocStats(out);
1959 _PyMethod_DebugMallocStats(out);
David Malcolm49526f42012-06-22 14:55:41 -04001960 _PyTuple_DebugMallocStats(out);
1961}
Guido van Rossumb18618d2000-05-03 23:44:39 +00001962
Guido van Rossum86610361998-04-10 22:32:46 +00001963/* These methods are used to control infinite recursion in repr, str, print,
1964 etc. Container objects that may recursively contain themselves,
Martin Panter8d56c022016-05-29 04:13:35 +00001965 e.g. builtin dictionaries and lists, should use Py_ReprEnter() and
Guido van Rossum86610361998-04-10 22:32:46 +00001966 Py_ReprLeave() to avoid infinite recursion.
1967
1968 Py_ReprEnter() returns 0 the first time it is called for a particular
1969 object and 1 every time thereafter. It returns -1 if an exception
1970 occurred. Py_ReprLeave() has no return value.
1971
1972 See dictobject.c and listobject.c for examples of use.
1973*/
1974
Guido van Rossum86610361998-04-10 22:32:46 +00001975int
Fred Drake100814d2000-07-09 15:48:49 +00001976Py_ReprEnter(PyObject *obj)
Guido van Rossum86610361998-04-10 22:32:46 +00001977{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001978 PyObject *dict;
1979 PyObject *list;
1980 Py_ssize_t i;
Guido van Rossum86610361998-04-10 22:32:46 +00001981
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001982 dict = PyThreadState_GetDict();
Antoine Pitrou04d17d32014-03-31 22:04:38 +02001983 /* Ignore a missing thread-state, so that this function can be called
1984 early on startup. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001985 if (dict == NULL)
1986 return 0;
Serhiy Storchakaa24107b2019-02-25 17:59:46 +02001987 list = _PyDict_GetItemIdWithError(dict, &PyId_Py_Repr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001988 if (list == NULL) {
Serhiy Storchakaa24107b2019-02-25 17:59:46 +02001989 if (PyErr_Occurred()) {
1990 return -1;
1991 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001992 list = PyList_New(0);
1993 if (list == NULL)
1994 return -1;
Victor Stinner7a07e452013-11-06 18:57:29 +01001995 if (_PyDict_SetItemId(dict, &PyId_Py_Repr, list) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001996 return -1;
1997 Py_DECREF(list);
1998 }
1999 i = PyList_GET_SIZE(list);
2000 while (--i >= 0) {
2001 if (PyList_GET_ITEM(list, i) == obj)
2002 return 1;
2003 }
Victor Stinnere901d1f2013-07-17 21:58:41 +02002004 if (PyList_Append(list, obj) < 0)
2005 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002006 return 0;
Guido van Rossum86610361998-04-10 22:32:46 +00002007}
2008
2009void
Fred Drake100814d2000-07-09 15:48:49 +00002010Py_ReprLeave(PyObject *obj)
Guido van Rossum86610361998-04-10 22:32:46 +00002011{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002012 PyObject *dict;
2013 PyObject *list;
2014 Py_ssize_t i;
Victor Stinner1b634932013-07-16 22:24:44 +02002015 PyObject *error_type, *error_value, *error_traceback;
2016
2017 PyErr_Fetch(&error_type, &error_value, &error_traceback);
Guido van Rossum86610361998-04-10 22:32:46 +00002018
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002019 dict = PyThreadState_GetDict();
2020 if (dict == NULL)
Victor Stinner1b634932013-07-16 22:24:44 +02002021 goto finally;
2022
Serhiy Storchakaa24107b2019-02-25 17:59:46 +02002023 list = _PyDict_GetItemIdWithError(dict, &PyId_Py_Repr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002024 if (list == NULL || !PyList_Check(list))
Victor Stinner1b634932013-07-16 22:24:44 +02002025 goto finally;
2026
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002027 i = PyList_GET_SIZE(list);
2028 /* Count backwards because we always expect obj to be list[-1] */
2029 while (--i >= 0) {
2030 if (PyList_GET_ITEM(list, i) == obj) {
2031 PyList_SetSlice(list, i, i + 1, NULL);
2032 break;
2033 }
2034 }
Victor Stinner1b634932013-07-16 22:24:44 +02002035
2036finally:
2037 /* ignore exceptions because there is no way to report them. */
2038 PyErr_Restore(error_type, error_value, error_traceback);
Guido van Rossum86610361998-04-10 22:32:46 +00002039}
Guido van Rossumd724b232000-03-13 16:01:29 +00002040
Tim Peters803526b2002-07-07 05:13:56 +00002041/* Trashcan support. */
Guido van Rossumd724b232000-03-13 16:01:29 +00002042
Tim Peters803526b2002-07-07 05:13:56 +00002043/* Add op to the _PyTrash_delete_later list. Called when the current
2044 * call-stack depth gets large. op must be a currently untracked gc'ed
2045 * object, with refcount 0. Py_DECREF must already have been called on it.
2046 */
Guido van Rossumd724b232000-03-13 16:01:29 +00002047void
Fred Drake100814d2000-07-09 15:48:49 +00002048_PyTrash_deposit_object(PyObject *op)
Guido van Rossumd724b232000-03-13 16:01:29 +00002049{
Victor Stinner24702042018-10-26 17:16:37 +02002050 _PyObject_ASSERT(op, PyObject_IS_GC(op));
2051 _PyObject_ASSERT(op, !_PyObject_GC_IS_TRACKED(op));
2052 _PyObject_ASSERT(op, op->ob_refcnt == 0);
INADA Naoki5ac9e6e2018-07-10 17:19:53 +09002053 _PyGCHead_SET_PREV(_Py_AS_GC(op), _PyRuntime.gc.trash_delete_later);
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002054 _PyRuntime.gc.trash_delete_later = op;
Guido van Rossumd724b232000-03-13 16:01:29 +00002055}
2056
Antoine Pitrou2b0218a2012-09-06 00:59:49 +02002057/* The equivalent API, using per-thread state recursion info */
2058void
2059_PyTrash_thread_deposit_object(PyObject *op)
2060{
Victor Stinner50b48572018-11-01 01:51:40 +01002061 PyThreadState *tstate = _PyThreadState_GET();
Victor Stinner24702042018-10-26 17:16:37 +02002062 _PyObject_ASSERT(op, PyObject_IS_GC(op));
2063 _PyObject_ASSERT(op, !_PyObject_GC_IS_TRACKED(op));
2064 _PyObject_ASSERT(op, op->ob_refcnt == 0);
INADA Naoki5ac9e6e2018-07-10 17:19:53 +09002065 _PyGCHead_SET_PREV(_Py_AS_GC(op), tstate->trash_delete_later);
Antoine Pitrou2b0218a2012-09-06 00:59:49 +02002066 tstate->trash_delete_later = op;
2067}
2068
Tim Peters803526b2002-07-07 05:13:56 +00002069/* Dealloccate all the objects in the _PyTrash_delete_later list. Called when
2070 * the call-stack unwinds again.
2071 */
Guido van Rossumd724b232000-03-13 16:01:29 +00002072void
Fred Drake100814d2000-07-09 15:48:49 +00002073_PyTrash_destroy_chain(void)
Guido van Rossumd724b232000-03-13 16:01:29 +00002074{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002075 while (_PyRuntime.gc.trash_delete_later) {
2076 PyObject *op = _PyRuntime.gc.trash_delete_later;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002077 destructor dealloc = Py_TYPE(op)->tp_dealloc;
Neil Schemenauerf589c052002-03-29 03:05:54 +00002078
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002079 _PyRuntime.gc.trash_delete_later =
INADA Naoki5ac9e6e2018-07-10 17:19:53 +09002080 (PyObject*) _PyGCHead_PREV(_Py_AS_GC(op));
Neil Schemenauerf589c052002-03-29 03:05:54 +00002081
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002082 /* Call the deallocator directly. This used to try to
2083 * fool Py_DECREF into calling it indirectly, but
2084 * Py_DECREF was already called on this object, and in
2085 * assorted non-release builds calling Py_DECREF again ends
2086 * up distorting allocation statistics.
2087 */
Victor Stinner24702042018-10-26 17:16:37 +02002088 _PyObject_ASSERT(op, op->ob_refcnt == 0);
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002089 ++_PyRuntime.gc.trash_delete_nesting;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002090 (*dealloc)(op);
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002091 --_PyRuntime.gc.trash_delete_nesting;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002092 }
Guido van Rossumd724b232000-03-13 16:01:29 +00002093}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002094
Antoine Pitrou2b0218a2012-09-06 00:59:49 +02002095/* The equivalent API, using per-thread state recursion info */
2096void
2097_PyTrash_thread_destroy_chain(void)
2098{
Victor Stinner50b48572018-11-01 01:51:40 +01002099 PyThreadState *tstate = _PyThreadState_GET();
Xiang Zhanga66f9c62017-05-13 13:36:14 +08002100 /* We need to increase trash_delete_nesting here, otherwise,
2101 _PyTrash_thread_destroy_chain will be called recursively
2102 and then possibly crash. An example that may crash without
2103 increase:
2104 N = 500000 # need to be large enough
2105 ob = object()
2106 tups = [(ob,) for i in range(N)]
2107 for i in range(49):
2108 tups = [(tup,) for tup in tups]
2109 del tups
2110 */
2111 assert(tstate->trash_delete_nesting == 0);
2112 ++tstate->trash_delete_nesting;
Antoine Pitrou2b0218a2012-09-06 00:59:49 +02002113 while (tstate->trash_delete_later) {
2114 PyObject *op = tstate->trash_delete_later;
2115 destructor dealloc = Py_TYPE(op)->tp_dealloc;
2116
2117 tstate->trash_delete_later =
INADA Naoki5ac9e6e2018-07-10 17:19:53 +09002118 (PyObject*) _PyGCHead_PREV(_Py_AS_GC(op));
Antoine Pitrou2b0218a2012-09-06 00:59:49 +02002119
2120 /* Call the deallocator directly. This used to try to
2121 * fool Py_DECREF into calling it indirectly, but
2122 * Py_DECREF was already called on this object, and in
2123 * assorted non-release builds calling Py_DECREF again ends
2124 * up distorting allocation statistics.
2125 */
Victor Stinner24702042018-10-26 17:16:37 +02002126 _PyObject_ASSERT(op, op->ob_refcnt == 0);
Antoine Pitrou2b0218a2012-09-06 00:59:49 +02002127 (*dealloc)(op);
Xiang Zhanga66f9c62017-05-13 13:36:14 +08002128 assert(tstate->trash_delete_nesting == 1);
Antoine Pitrou2b0218a2012-09-06 00:59:49 +02002129 }
Xiang Zhanga66f9c62017-05-13 13:36:14 +08002130 --tstate->trash_delete_nesting;
Antoine Pitrou2b0218a2012-09-06 00:59:49 +02002131}
2132
Victor Stinner626bff82018-10-25 17:31:10 +02002133
2134void
Victor Stinnerf1d002c2018-11-21 23:53:44 +01002135_PyObject_AssertFailed(PyObject *obj, const char *expr, const char *msg,
Victor Stinner626bff82018-10-25 17:31:10 +02002136 const char *file, int line, const char *function)
2137{
Victor Stinnerf1d002c2018-11-21 23:53:44 +01002138 fprintf(stderr, "%s:%d: ", file, line);
2139 if (function) {
2140 fprintf(stderr, "%s: ", function);
2141 }
Victor Stinner626bff82018-10-25 17:31:10 +02002142 fflush(stderr);
Victor Stinnerf1d002c2018-11-21 23:53:44 +01002143 if (expr) {
2144 fprintf(stderr, "Assertion \"%s\" failed", expr);
Victor Stinner626bff82018-10-25 17:31:10 +02002145 }
2146 else {
Victor Stinnerf1d002c2018-11-21 23:53:44 +01002147 fprintf(stderr, "Assertion failed");
Victor Stinner626bff82018-10-25 17:31:10 +02002148 }
2149 fflush(stderr);
Victor Stinnerf1d002c2018-11-21 23:53:44 +01002150 if (msg) {
2151 fprintf(stderr, ": %s", msg);
2152 }
2153 fprintf(stderr, "\n");
2154 fflush(stderr);
Victor Stinner626bff82018-10-25 17:31:10 +02002155
2156 if (obj == NULL) {
2157 fprintf(stderr, "<NULL object>\n");
2158 }
2159 else if (_PyObject_IsFreed(obj)) {
2160 /* It seems like the object memory has been freed:
2161 don't access it to prevent a segmentation fault. */
Victor Stinner0fc91ee2019-04-12 21:51:34 +02002162 fprintf(stderr, "<object: freed>\n");
2163 }
2164 else if (Py_TYPE(obj) == NULL) {
2165 fprintf(stderr, "<object: ob_type=NULL>\n");
2166 }
2167 else if (_PyObject_IsFreed((PyObject *)Py_TYPE(obj))) {
2168 fprintf(stderr, "<object: freed type %p>\n", Py_TYPE(obj));
Victor Stinner626bff82018-10-25 17:31:10 +02002169 }
2170 else {
2171 /* Diplay the traceback where the object has been allocated.
2172 Do it before dumping repr(obj), since repr() is more likely
2173 to crash than dumping the traceback. */
2174 void *ptr;
2175 PyTypeObject *type = Py_TYPE(obj);
2176 if (PyType_IS_GC(type)) {
2177 ptr = (void *)((char *)obj - sizeof(PyGC_Head));
2178 }
2179 else {
2180 ptr = (void *)obj;
2181 }
2182 _PyMem_DumpTraceback(fileno(stderr), ptr);
2183
2184 /* This might succeed or fail, but we're about to abort, so at least
2185 try to provide any extra info we can: */
2186 _PyObject_Dump(obj);
2187 }
2188 fflush(stderr);
2189
2190 Py_FatalError("_PyObject_AssertFailed");
2191}
2192
Victor Stinner3c09dca2018-10-30 14:48:26 +01002193
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00002194#undef _Py_Dealloc
Victor Stinner3c09dca2018-10-30 14:48:26 +01002195
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00002196void
2197_Py_Dealloc(PyObject *op)
2198{
Victor Stinner3c09dca2018-10-30 14:48:26 +01002199 destructor dealloc = Py_TYPE(op)->tp_dealloc;
2200#ifdef Py_TRACE_REFS
2201 _Py_ForgetReference(op);
2202#else
2203 _Py_INC_TPFREES(op);
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00002204#endif
Victor Stinner3c09dca2018-10-30 14:48:26 +01002205 (*dealloc)(op);
2206}
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00002207
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002208#ifdef __cplusplus
2209}
2210#endif