blob: 9536d467f5f2a9af2e598c72cac7e1823299f679 [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 Stinnerbe434dc2019-11-05 00:51:22 +01005#include "pycore_context.h"
Victor Stinner331a6a52019-05-27 16:39:22 +02006#include "pycore_initconfig.h"
Victor Stinner0fc91ee2019-04-12 21:51:34 +02007#include "pycore_object.h"
Victor Stinnerbe434dc2019-11-05 00:51:22 +01008#include "pycore_pyerrors.h"
Victor Stinner621cebe2018-11-12 16:53:38 +01009#include "pycore_pystate.h"
Benjamin Petersonfd838e62009-04-20 02:09:13 +000010#include "frameobject.h"
Eric Snowc11183c2019-03-15 16:35:46 -060011#include "interpreteridobject.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000012
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000013#ifdef __cplusplus
14extern "C" {
15#endif
16
Victor Stinner626bff82018-10-25 17:31:10 +020017/* Defined in tracemalloc.c */
18extern void _PyMem_DumpTraceback(int fd, const void *ptr);
19
Victor Stinnerbd303c12013-11-07 23:07:29 +010020_Py_IDENTIFIER(Py_Repr);
21_Py_IDENTIFIER(__bytes__);
22_Py_IDENTIFIER(__dir__);
23_Py_IDENTIFIER(__isabstractmethod__);
Victor Stinnerbd303c12013-11-07 23:07:29 +010024
Victor Stinner0fc91ee2019-04-12 21:51:34 +020025
26int
27_PyObject_CheckConsistency(PyObject *op, int check_content)
28{
Victor Stinner68762572019-10-07 18:42:01 +020029#define CHECK(expr) \
30 do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
Victor Stinner0fc91ee2019-04-12 21:51:34 +020031
Victor Stinner68762572019-10-07 18:42:01 +020032 CHECK(!_PyObject_IsFreed(op));
33 CHECK(Py_REFCNT(op) >= 1);
34
35 CHECK(op->ob_type != NULL);
36 _PyType_CheckConsistency(op->ob_type);
Victor Stinner0fc91ee2019-04-12 21:51:34 +020037
38 if (PyUnicode_Check(op)) {
39 _PyUnicode_CheckConsistency(op, check_content);
40 }
41 else if (PyDict_Check(op)) {
42 _PyDict_CheckConsistency(op, check_content);
43 }
44 return 1;
Victor Stinner68762572019-10-07 18:42:01 +020045
46#undef CHECK
Victor Stinner0fc91ee2019-04-12 21:51:34 +020047}
48
49
Tim Peters34592512002-07-11 06:23:50 +000050#ifdef Py_REF_DEBUG
Neal Norwitz84632ee2006-03-04 20:00:59 +000051Py_ssize_t _Py_RefTotal;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000052
53Py_ssize_t
54_Py_GetRefTotal(void)
55{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000056 PyObject *o;
57 Py_ssize_t total = _Py_RefTotal;
Antoine Pitrou9d952542013-08-24 21:07:07 +020058 o = _PySet_Dummy;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000059 if (o != NULL)
60 total -= o->ob_refcnt;
61 return total;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000062}
Nick Coghland6009512014-11-20 21:39:37 +100063
64void
65_PyDebug_PrintTotalRefs(void) {
Eric Snowdae02762017-09-14 00:35:58 -070066 fprintf(stderr,
67 "[%" PY_FORMAT_SIZE_T "d refs, "
68 "%" PY_FORMAT_SIZE_T "d blocks]\n",
69 _Py_GetRefTotal(), _Py_GetAllocatedBlocks());
Nick Coghland6009512014-11-20 21:39:37 +100070}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000071#endif /* Py_REF_DEBUG */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000072
Guido van Rossum3f5da241990-12-20 15:06:42 +000073/* Object allocation routines used by NEWOBJ and NEWVAROBJ macros.
74 These are used by the individual routines for object creation.
75 Do not call them otherwise, they do not initialize the object! */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000076
Tim Peters78be7992003-03-23 02:51:01 +000077#ifdef Py_TRACE_REFS
Tim Peters7571a0f2003-03-23 17:52:28 +000078/* Head of circular doubly-linked list of all objects. These are linked
79 * together via the _ob_prev and _ob_next members of a PyObject, which
80 * exist only in a Py_TRACE_REFS build.
81 */
Tim Peters78be7992003-03-23 02:51:01 +000082static PyObject refchain = {&refchain, &refchain};
Tim Peters36eb4df2003-03-23 03:33:13 +000083
Tim Peters7571a0f2003-03-23 17:52:28 +000084/* Insert op at the front of the list of all objects. If force is true,
85 * op is added even if _ob_prev and _ob_next are non-NULL already. If
86 * force is false amd _ob_prev or _ob_next are non-NULL, do nothing.
87 * force should be true if and only if op points to freshly allocated,
88 * uninitialized memory, or you've unlinked op from the list and are
Tim Peters51f8d382003-03-23 18:06:08 +000089 * relinking it into the front.
Tim Peters7571a0f2003-03-23 17:52:28 +000090 * Note that objects are normally added to the list via _Py_NewReference,
91 * which is called by PyObject_Init. Not all objects are initialized that
92 * way, though; exceptions include statically allocated type objects, and
93 * statically allocated singletons (like Py_True and Py_None).
94 */
Tim Peters36eb4df2003-03-23 03:33:13 +000095void
Tim Peters7571a0f2003-03-23 17:52:28 +000096_Py_AddToAllObjects(PyObject *op, int force)
Tim Peters36eb4df2003-03-23 03:33:13 +000097{
Tim Peters7571a0f2003-03-23 17:52:28 +000098#ifdef Py_DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000099 if (!force) {
100 /* If it's initialized memory, op must be in or out of
101 * the list unambiguously.
102 */
Victor Stinner24702042018-10-26 17:16:37 +0200103 _PyObject_ASSERT(op, (op->_ob_prev == NULL) == (op->_ob_next == NULL));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000104 }
Tim Peters78be7992003-03-23 02:51:01 +0000105#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000106 if (force || op->_ob_prev == NULL) {
107 op->_ob_next = refchain._ob_next;
108 op->_ob_prev = &refchain;
109 refchain._ob_next->_ob_prev = op;
110 refchain._ob_next = op;
111 }
Tim Peters7571a0f2003-03-23 17:52:28 +0000112}
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000113#endif /* Py_TRACE_REFS */
Tim Peters78be7992003-03-23 02:51:01 +0000114
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000115#ifdef COUNT_ALLOCS
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000116static PyTypeObject *type_list;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000117/* All types are added to type_list, at least when
118 they get one object created. That makes them
119 immortal, which unfortunately contributes to
120 garbage itself. If unlist_types_without_objects
121 is set, they will be removed from the type_list
122 once the last object is deallocated. */
Benjamin Petersona4a37fe2009-01-11 17:13:55 +0000123static int unlist_types_without_objects;
Pablo Galindo49c75a82018-10-28 15:02:17 +0000124extern Py_ssize_t _Py_tuple_zero_allocs, _Py_fast_tuple_allocs;
125extern Py_ssize_t _Py_quick_int_allocs, _Py_quick_neg_int_allocs;
126extern Py_ssize_t _Py_null_strings, _Py_one_strings;
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000127void
Pablo Galindo49c75a82018-10-28 15:02:17 +0000128_Py_dump_counts(FILE* f)
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000129{
Victor Stinnercaba55b2018-08-03 15:33:52 +0200130 PyInterpreterState *interp = _PyInterpreterState_Get();
Victor Stinner331a6a52019-05-27 16:39:22 +0200131 if (!interp->config.show_alloc_count) {
Serhiy Storchaka7e160ce2016-07-03 21:03:53 +0300132 return;
Victor Stinner25420fe2017-11-20 18:12:22 -0800133 }
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000134
Eddie Elizondo745dc652018-02-21 20:55:18 -0800135 PyTypeObject *tp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000136 for (tp = type_list; tp; tp = tp->tp_next)
137 fprintf(f, "%s alloc'd: %" PY_FORMAT_SIZE_T "d, "
138 "freed: %" PY_FORMAT_SIZE_T "d, "
139 "max in use: %" PY_FORMAT_SIZE_T "d\n",
140 tp->tp_name, tp->tp_allocs, tp->tp_frees,
141 tp->tp_maxalloc);
142 fprintf(f, "fast tuple allocs: %" PY_FORMAT_SIZE_T "d, "
143 "empty: %" PY_FORMAT_SIZE_T "d\n",
Pablo Galindo49c75a82018-10-28 15:02:17 +0000144 _Py_fast_tuple_allocs, _Py_tuple_zero_allocs);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000145 fprintf(f, "fast int allocs: pos: %" PY_FORMAT_SIZE_T "d, "
146 "neg: %" PY_FORMAT_SIZE_T "d\n",
Pablo Galindo49c75a82018-10-28 15:02:17 +0000147 _Py_quick_int_allocs, _Py_quick_neg_int_allocs);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000148 fprintf(f, "null strings: %" PY_FORMAT_SIZE_T "d, "
149 "1-strings: %" PY_FORMAT_SIZE_T "d\n",
Pablo Galindo49c75a82018-10-28 15:02:17 +0000150 _Py_null_strings, _Py_one_strings);
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000151}
152
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +0000153PyObject *
Pablo Galindo49c75a82018-10-28 15:02:17 +0000154_Py_get_counts(void)
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +0000155{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000156 PyTypeObject *tp;
157 PyObject *result;
158 PyObject *v;
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +0000159
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000160 result = PyList_New(0);
161 if (result == NULL)
162 return NULL;
163 for (tp = type_list; tp; tp = tp->tp_next) {
164 v = Py_BuildValue("(snnn)", tp->tp_name, tp->tp_allocs,
165 tp->tp_frees, tp->tp_maxalloc);
166 if (v == NULL) {
167 Py_DECREF(result);
168 return NULL;
169 }
170 if (PyList_Append(result, v) < 0) {
171 Py_DECREF(v);
172 Py_DECREF(result);
173 return NULL;
174 }
175 Py_DECREF(v);
176 }
177 return result;
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +0000178}
179
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000180void
Pablo Galindo49c75a82018-10-28 15:02:17 +0000181_Py_inc_count(PyTypeObject *tp)
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000182{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000183 if (tp->tp_next == NULL && tp->tp_prev == NULL) {
184 /* first time; insert in linked list */
185 if (tp->tp_next != NULL) /* sanity check */
Pablo Galindo49c75a82018-10-28 15:02:17 +0000186 Py_FatalError("XXX _Py_inc_count sanity check");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000187 if (type_list)
188 type_list->tp_prev = tp;
189 tp->tp_next = type_list;
190 /* Note that as of Python 2.2, heap-allocated type objects
191 * can go away, but this code requires that they stay alive
192 * until program exit. That's why we're careful with
193 * refcounts here. type_list gets a new reference to tp,
194 * while ownership of the reference type_list used to hold
195 * (if any) was transferred to tp->tp_next in the line above.
196 * tp is thus effectively immortal after this.
197 */
198 Py_INCREF(tp);
199 type_list = tp;
Tim Peters3e40c7f2003-03-23 03:04:32 +0000200#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000201 /* Also insert in the doubly-linked list of all objects,
202 * if not already there.
203 */
204 _Py_AddToAllObjects((PyObject *)tp, 0);
Tim Peters78be7992003-03-23 02:51:01 +0000205#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000206 }
207 tp->tp_allocs++;
208 if (tp->tp_allocs - tp->tp_frees > tp->tp_maxalloc)
209 tp->tp_maxalloc = tp->tp_allocs - tp->tp_frees;
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000210}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000211
Pablo Galindo49c75a82018-10-28 15:02:17 +0000212void _Py_dec_count(PyTypeObject *tp)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000213{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000214 tp->tp_frees++;
215 if (unlist_types_without_objects &&
216 tp->tp_allocs == tp->tp_frees) {
217 /* unlink the type from type_list */
218 if (tp->tp_prev)
219 tp->tp_prev->tp_next = tp->tp_next;
220 else
221 type_list = tp->tp_next;
222 if (tp->tp_next)
223 tp->tp_next->tp_prev = tp->tp_prev;
224 tp->tp_next = tp->tp_prev = NULL;
225 Py_DECREF(tp);
226 }
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000227}
228
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000229#endif
230
Tim Peters7c321a82002-07-09 02:57:01 +0000231#ifdef Py_REF_DEBUG
232/* Log a fatal error; doesn't return. */
233void
Victor Stinner18618e652018-10-25 17:28:11 +0200234_Py_NegativeRefcount(const char *filename, int lineno, PyObject *op)
Tim Peters7c321a82002-07-09 02:57:01 +0000235{
Victor Stinnerf1d002c2018-11-21 23:53:44 +0100236 _PyObject_AssertFailed(op, NULL, "object has negative ref count",
Victor Stinner3ec9af72018-10-26 02:12:34 +0200237 filename, lineno, __func__);
Tim Peters7c321a82002-07-09 02:57:01 +0000238}
239
240#endif /* Py_REF_DEBUG */
241
Thomas Heller1328b522004-04-22 17:23:49 +0000242void
243Py_IncRef(PyObject *o)
244{
245 Py_XINCREF(o);
246}
247
248void
249Py_DecRef(PyObject *o)
250{
251 Py_XDECREF(o);
252}
253
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000254PyObject *
Fred Drake100814d2000-07-09 15:48:49 +0000255PyObject_Init(PyObject *op, PyTypeObject *tp)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000256{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000257 if (op == NULL)
258 return PyErr_NoMemory();
259 /* Any changes should be reflected in PyObject_INIT (objimpl.h) */
260 Py_TYPE(op) = tp;
Eddie Elizondo364f0b02019-03-27 07:52:18 -0400261 if (PyType_GetFlags(tp) & Py_TPFLAGS_HEAPTYPE) {
262 Py_INCREF(tp);
263 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000264 _Py_NewReference(op);
265 return op;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000266}
267
Guido van Rossumb18618d2000-05-03 23:44:39 +0000268PyVarObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +0000269PyObject_InitVar(PyVarObject *op, PyTypeObject *tp, Py_ssize_t size)
Guido van Rossumb18618d2000-05-03 23:44:39 +0000270{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000271 if (op == NULL)
272 return (PyVarObject *) PyErr_NoMemory();
273 /* Any changes should be reflected in PyObject_INIT_VAR */
Eddie Elizondo364f0b02019-03-27 07:52:18 -0400274 Py_SIZE(op) = size;
275 PyObject_Init((PyObject *)op, tp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000276 return op;
Guido van Rossumb18618d2000-05-03 23:44:39 +0000277}
278
279PyObject *
Fred Drake100814d2000-07-09 15:48:49 +0000280_PyObject_New(PyTypeObject *tp)
Guido van Rossumb18618d2000-05-03 23:44:39 +0000281{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000282 PyObject *op;
283 op = (PyObject *) PyObject_MALLOC(_PyObject_SIZE(tp));
284 if (op == NULL)
285 return PyErr_NoMemory();
286 return PyObject_INIT(op, tp);
Guido van Rossumb18618d2000-05-03 23:44:39 +0000287}
288
Guido van Rossumd0c87ee1997-05-15 21:31:03 +0000289PyVarObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +0000290_PyObject_NewVar(PyTypeObject *tp, Py_ssize_t nitems)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000291{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000292 PyVarObject *op;
293 const size_t size = _PyObject_VAR_SIZE(tp, nitems);
294 op = (PyVarObject *) PyObject_MALLOC(size);
295 if (op == NULL)
296 return (PyVarObject *)PyErr_NoMemory();
297 return PyObject_INIT_VAR(op, tp, nitems);
Guido van Rossumb18618d2000-05-03 23:44:39 +0000298}
299
Antoine Pitrou796564c2013-07-30 19:59:21 +0200300void
301PyObject_CallFinalizer(PyObject *self)
302{
303 PyTypeObject *tp = Py_TYPE(self);
304
Antoine Pitrouada319b2019-05-29 22:12:38 +0200305 if (tp->tp_finalize == NULL)
Antoine Pitrou796564c2013-07-30 19:59:21 +0200306 return;
307 /* tp_finalize should only be called once. */
308 if (PyType_IS_GC(tp) && _PyGC_FINALIZED(self))
309 return;
310
311 tp->tp_finalize(self);
INADA Naoki5ac9e6e2018-07-10 17:19:53 +0900312 if (PyType_IS_GC(tp)) {
313 _PyGC_SET_FINALIZED(self);
314 }
Antoine Pitrou796564c2013-07-30 19:59:21 +0200315}
316
317int
318PyObject_CallFinalizerFromDealloc(PyObject *self)
319{
320 Py_ssize_t refcnt;
321
322 /* Temporarily resurrect the object. */
323 if (self->ob_refcnt != 0) {
324 Py_FatalError("PyObject_CallFinalizerFromDealloc called on "
325 "object with a non-zero refcount");
326 }
327 self->ob_refcnt = 1;
328
329 PyObject_CallFinalizer(self);
330
331 /* Undo the temporary resurrection; can't use DECREF here, it would
332 * cause a recursive call.
333 */
Victor Stinner24702042018-10-26 17:16:37 +0200334 _PyObject_ASSERT_WITH_MSG(self,
335 self->ob_refcnt > 0,
336 "refcount is too small");
Antoine Pitrou796564c2013-07-30 19:59:21 +0200337 if (--self->ob_refcnt == 0)
338 return 0; /* this is the normal path out */
339
340 /* tp_finalize resurrected it! Make it look like the original Py_DECREF
341 * never happened.
342 */
343 refcnt = self->ob_refcnt;
344 _Py_NewReference(self);
345 self->ob_refcnt = refcnt;
346
Victor Stinner24702042018-10-26 17:16:37 +0200347 _PyObject_ASSERT(self,
348 (!PyType_IS_GC(Py_TYPE(self))
349 || _PyObject_GC_IS_TRACKED(self)));
Antoine Pitrou796564c2013-07-30 19:59:21 +0200350 /* If Py_REF_DEBUG, _Py_NewReference bumped _Py_RefTotal, so
351 * we need to undo that. */
352 _Py_DEC_REFTOTAL;
353 /* If Py_TRACE_REFS, _Py_NewReference re-added self to the object
354 * chain, so no more to do there.
355 * If COUNT_ALLOCS, the original decref bumped tp_frees, and
356 * _Py_NewReference bumped tp_allocs: both of those need to be
357 * undone.
358 */
359#ifdef COUNT_ALLOCS
360 --Py_TYPE(self)->tp_frees;
361 --Py_TYPE(self)->tp_allocs;
362#endif
363 return -1;
364}
365
Antoine Pitrouc47bd4a2010-07-27 22:08:27 +0000366int
367PyObject_Print(PyObject *op, FILE *fp, int flags)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000368{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000369 int ret = 0;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000370 if (PyErr_CheckSignals())
371 return -1;
Guido van Rossum9b00dfa1998-04-28 16:06:54 +0000372#ifdef USE_STACKCHECK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000373 if (PyOS_CheckStack()) {
374 PyErr_SetString(PyExc_MemoryError, "stack overflow");
375 return -1;
376 }
Guido van Rossum9b00dfa1998-04-28 16:06:54 +0000377#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000378 clearerr(fp); /* Clear any previous error condition */
379 if (op == NULL) {
380 Py_BEGIN_ALLOW_THREADS
381 fprintf(fp, "<nil>");
382 Py_END_ALLOW_THREADS
383 }
384 else {
Victor Stinner3ec9af72018-10-26 02:12:34 +0200385 if (op->ob_refcnt <= 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000386 /* XXX(twouters) cast refcount to long until %zd is
387 universally available */
388 Py_BEGIN_ALLOW_THREADS
389 fprintf(fp, "<refcnt %ld at %p>",
Zackery Spytz1a2252e2019-05-06 10:56:51 -0600390 (long)op->ob_refcnt, (void *)op);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000391 Py_END_ALLOW_THREADS
Victor Stinner3ec9af72018-10-26 02:12:34 +0200392 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000393 else {
394 PyObject *s;
395 if (flags & Py_PRINT_RAW)
396 s = PyObject_Str(op);
397 else
398 s = PyObject_Repr(op);
399 if (s == NULL)
400 ret = -1;
401 else if (PyBytes_Check(s)) {
402 fwrite(PyBytes_AS_STRING(s), 1,
403 PyBytes_GET_SIZE(s), fp);
404 }
405 else if (PyUnicode_Check(s)) {
406 PyObject *t;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200407 t = PyUnicode_AsEncodedString(s, "utf-8", "backslashreplace");
Zackery Spytzae62f012018-10-06 00:44:25 -0600408 if (t == NULL) {
409 ret = -1;
410 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000411 else {
412 fwrite(PyBytes_AS_STRING(t), 1,
413 PyBytes_GET_SIZE(t), fp);
Victor Stinnerba6b4302010-05-17 09:33:42 +0000414 Py_DECREF(t);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000415 }
416 }
417 else {
418 PyErr_Format(PyExc_TypeError,
419 "str() or repr() returned '%.100s'",
420 s->ob_type->tp_name);
421 ret = -1;
422 }
423 Py_XDECREF(s);
424 }
425 }
426 if (ret == 0) {
427 if (ferror(fp)) {
Serhiy Storchaka55fe1ae2017-04-16 10:46:38 +0300428 PyErr_SetFromErrno(PyExc_OSError);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000429 clearerr(fp);
430 ret = -1;
431 }
432 }
433 return ret;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000434}
435
Guido van Rossum38938152006-08-21 23:36:26 +0000436/* For debugging convenience. Set a breakpoint here and call it from your DLL */
437void
Thomas Woutersb2137042007-02-01 18:02:27 +0000438_Py_BreakPoint(void)
Guido van Rossum38938152006-08-21 23:36:26 +0000439{
440}
441
Neal Norwitz1a997502003-01-13 20:13:12 +0000442
Victor Stinner4c409be2019-04-11 13:01:15 +0200443/* Heuristic checking if the object memory is uninitialized or deallocated.
444 Rely on the debug hooks on Python memory allocators:
445 see _PyMem_IsPtrFreed().
Victor Stinner82af0b62018-10-23 17:39:40 +0200446
447 The function can be used to prevent segmentation fault on dereferencing
Victor Stinner4c409be2019-04-11 13:01:15 +0200448 pointers like 0xDDDDDDDDDDDDDDDD. */
Victor Stinner82af0b62018-10-23 17:39:40 +0200449int
450_PyObject_IsFreed(PyObject *op)
451{
Victor Stinner2b00db62019-04-11 11:33:27 +0200452 if (_PyMem_IsPtrFreed(op) || _PyMem_IsPtrFreed(op->ob_type)) {
Victor Stinner2cf5d322018-11-22 16:32:57 +0100453 return 1;
454 }
Victor Stinner2b00db62019-04-11 11:33:27 +0200455 /* ignore op->ob_ref: its value can have be modified
Victor Stinner82af0b62018-10-23 17:39:40 +0200456 by Py_INCREF() and Py_DECREF(). */
457#ifdef Py_TRACE_REFS
Pablo Galindo36e33c32019-10-08 00:43:14 +0100458 if (op->_ob_next != NULL && _PyMem_IsPtrFreed(op->_ob_next)) {
Victor Stinner2b00db62019-04-11 11:33:27 +0200459 return 1;
460 }
Pablo Galindo36e33c32019-10-08 00:43:14 +0100461 if (op->_ob_prev != NULL && _PyMem_IsPtrFreed(op->_ob_prev)) {
462 return 1;
463 }
Victor Stinner82af0b62018-10-23 17:39:40 +0200464#endif
Victor Stinner2b00db62019-04-11 11:33:27 +0200465 return 0;
Victor Stinner82af0b62018-10-23 17:39:40 +0200466}
467
468
Barry Warsaw9bf16442001-01-23 16:24:35 +0000469/* For debugging convenience. See Misc/gdbinit for some useful gdb hooks */
Guido van Rossum38938152006-08-21 23:36:26 +0000470void
471_PyObject_Dump(PyObject* op)
Barry Warsaw9bf16442001-01-23 16:24:35 +0000472{
Victor Stinner82af0b62018-10-23 17:39:40 +0200473 if (_PyObject_IsFreed(op)) {
474 /* It seems like the object memory has been freed:
475 don't access it to prevent a segmentation fault. */
Victor Stinnerb39afb72019-09-17 23:36:28 +0200476 fprintf(stderr, "<object at %p is freed>\n", op);
Victor Stinner68762572019-10-07 18:42:01 +0200477 fflush(stderr);
Victor Stinner2cf5d322018-11-22 16:32:57 +0100478 return;
Victor Stinner82af0b62018-10-23 17:39:40 +0200479 }
480
Victor Stinner68762572019-10-07 18:42:01 +0200481 /* first, write fields which are the least likely to crash */
482 fprintf(stderr, "object address : %p\n", (void *)op);
Victor Stinner82af0b62018-10-23 17:39:40 +0200483 /* XXX(twouters) cast refcount to long until %zd is
484 universally available */
Victor Stinner68762572019-10-07 18:42:01 +0200485 fprintf(stderr, "object refcount : %ld\n", (long)op->ob_refcnt);
486 fflush(stderr);
487
488 PyTypeObject *type = Py_TYPE(op);
489 fprintf(stderr, "object type : %p\n", type);
490 fprintf(stderr, "object type name: %s\n",
491 type==NULL ? "NULL" : type->tp_name);
492
493 /* the most dangerous part */
494 fprintf(stderr, "object repr : ");
495 fflush(stderr);
496
497 PyGILState_STATE gil = PyGILState_Ensure();
498 PyObject *error_type, *error_value, *error_traceback;
499 PyErr_Fetch(&error_type, &error_value, &error_traceback);
500
501 (void)PyObject_Print(op, stderr, 0);
502 fflush(stderr);
503
504 PyErr_Restore(error_type, error_value, error_traceback);
505 PyGILState_Release(gil);
506
507 fprintf(stderr, "\n");
Victor Stinner82af0b62018-10-23 17:39:40 +0200508 fflush(stderr);
Barry Warsaw9bf16442001-01-23 16:24:35 +0000509}
Barry Warsaw903138f2001-01-23 16:33:18 +0000510
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000511PyObject *
Fred Drake100814d2000-07-09 15:48:49 +0000512PyObject_Repr(PyObject *v)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000513{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000514 PyObject *res;
515 if (PyErr_CheckSignals())
516 return NULL;
Guido van Rossum9b00dfa1998-04-28 16:06:54 +0000517#ifdef USE_STACKCHECK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000518 if (PyOS_CheckStack()) {
519 PyErr_SetString(PyExc_MemoryError, "stack overflow");
520 return NULL;
521 }
Guido van Rossum9b00dfa1998-04-28 16:06:54 +0000522#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000523 if (v == NULL)
524 return PyUnicode_FromString("<NULL>");
525 if (Py_TYPE(v)->tp_repr == NULL)
526 return PyUnicode_FromFormat("<%s object at %p>",
527 v->ob_type->tp_name, v);
Victor Stinner33824f62013-08-26 14:05:19 +0200528
Victor Stinnerbe434dc2019-11-05 00:51:22 +0100529 PyThreadState *tstate = _PyThreadState_GET();
Victor Stinner33824f62013-08-26 14:05:19 +0200530#ifdef Py_DEBUG
531 /* PyObject_Repr() must not be called with an exception set,
Victor Stinnera8cb5152017-01-18 14:12:51 +0100532 because it can clear it (directly or indirectly) and so the
Martin Panter9955a372015-10-07 10:26:23 +0000533 caller loses its exception */
Victor Stinnerbe434dc2019-11-05 00:51:22 +0100534 assert(!_PyErr_Occurred(tstate));
Victor Stinner33824f62013-08-26 14:05:19 +0200535#endif
536
Serhiy Storchaka1fb72d22017-12-03 22:12:11 +0200537 /* It is possible for a type to have a tp_repr representation that loops
538 infinitely. */
Victor Stinnerbe434dc2019-11-05 00:51:22 +0100539 if (_Py_EnterRecursiveCall(tstate,
540 " while getting the repr of an object")) {
Serhiy Storchaka1fb72d22017-12-03 22:12:11 +0200541 return NULL;
Victor Stinnerbe434dc2019-11-05 00:51:22 +0100542 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000543 res = (*v->ob_type->tp_repr)(v);
Victor Stinnerbe434dc2019-11-05 00:51:22 +0100544 _Py_LeaveRecursiveCall(tstate);
545
546 if (res == NULL) {
Victor Stinner0a54cf12011-12-01 03:22:44 +0100547 return NULL;
Victor Stinnerbe434dc2019-11-05 00:51:22 +0100548 }
Victor Stinner0a54cf12011-12-01 03:22:44 +0100549 if (!PyUnicode_Check(res)) {
Victor Stinnerbe434dc2019-11-05 00:51:22 +0100550 _PyErr_Format(tstate, PyExc_TypeError,
551 "__repr__ returned non-string (type %.200s)",
552 res->ob_type->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000553 Py_DECREF(res);
554 return NULL;
555 }
Victor Stinnerdb88ae52011-12-01 02:15:00 +0100556#ifndef Py_DEBUG
Victor Stinnerbe434dc2019-11-05 00:51:22 +0100557 if (PyUnicode_READY(res) < 0) {
Victor Stinnerdb88ae52011-12-01 02:15:00 +0100558 return NULL;
Victor Stinnerbe434dc2019-11-05 00:51:22 +0100559 }
Victor Stinnerdb88ae52011-12-01 02:15:00 +0100560#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000561 return res;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000562}
563
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000564PyObject *
Guido van Rossum98297ee2007-11-06 21:34:58 +0000565PyObject_Str(PyObject *v)
Guido van Rossumc6004111993-11-05 10:22:19 +0000566{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000567 PyObject *res;
568 if (PyErr_CheckSignals())
569 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +0000570#ifdef USE_STACKCHECK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000571 if (PyOS_CheckStack()) {
572 PyErr_SetString(PyExc_MemoryError, "stack overflow");
573 return NULL;
574 }
Guido van Rossum98297ee2007-11-06 21:34:58 +0000575#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000576 if (v == NULL)
577 return PyUnicode_FromString("<NULL>");
578 if (PyUnicode_CheckExact(v)) {
Victor Stinnerdb88ae52011-12-01 02:15:00 +0100579#ifndef Py_DEBUG
Victor Stinner4ead7c72011-11-20 19:48:36 +0100580 if (PyUnicode_READY(v) < 0)
581 return NULL;
Victor Stinnerdb88ae52011-12-01 02:15:00 +0100582#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000583 Py_INCREF(v);
584 return v;
585 }
586 if (Py_TYPE(v)->tp_str == NULL)
587 return PyObject_Repr(v);
Guido van Rossum4f288ab2001-05-01 16:53:37 +0000588
Victor Stinnerbe434dc2019-11-05 00:51:22 +0100589 PyThreadState *tstate = _PyThreadState_GET();
Victor Stinner33824f62013-08-26 14:05:19 +0200590#ifdef Py_DEBUG
591 /* PyObject_Str() must not be called with an exception set,
Victor Stinnera8cb5152017-01-18 14:12:51 +0100592 because it can clear it (directly or indirectly) and so the
Nick Coghland979e432014-02-09 10:43:21 +1000593 caller loses its exception */
Victor Stinnerbe434dc2019-11-05 00:51:22 +0100594 assert(!_PyErr_Occurred(tstate));
Victor Stinner33824f62013-08-26 14:05:19 +0200595#endif
596
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000597 /* It is possible for a type to have a tp_str representation that loops
598 infinitely. */
Victor Stinnerbe434dc2019-11-05 00:51:22 +0100599 if (_Py_EnterRecursiveCall(tstate, " while getting the str of an object")) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000600 return NULL;
Victor Stinnerbe434dc2019-11-05 00:51:22 +0100601 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000602 res = (*Py_TYPE(v)->tp_str)(v);
Victor Stinnerbe434dc2019-11-05 00:51:22 +0100603 _Py_LeaveRecursiveCall(tstate);
604
605 if (res == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000606 return NULL;
Victor Stinnerbe434dc2019-11-05 00:51:22 +0100607 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000608 if (!PyUnicode_Check(res)) {
Victor Stinnerbe434dc2019-11-05 00:51:22 +0100609 _PyErr_Format(tstate, PyExc_TypeError,
610 "__str__ returned non-string (type %.200s)",
611 Py_TYPE(res)->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000612 Py_DECREF(res);
613 return NULL;
614 }
Victor Stinnerdb88ae52011-12-01 02:15:00 +0100615#ifndef Py_DEBUG
Victor Stinnerbe434dc2019-11-05 00:51:22 +0100616 if (PyUnicode_READY(res) < 0) {
Victor Stinner4ead7c72011-11-20 19:48:36 +0100617 return NULL;
Victor Stinnerbe434dc2019-11-05 00:51:22 +0100618 }
Victor Stinnerdb88ae52011-12-01 02:15:00 +0100619#endif
Victor Stinner4ead7c72011-11-20 19:48:36 +0100620 assert(_PyUnicode_CheckConsistency(res, 1));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000621 return res;
Neil Schemenauercf52c072005-08-12 17:34:58 +0000622}
623
Georg Brandl559e5d72008-06-11 18:37:52 +0000624PyObject *
625PyObject_ASCII(PyObject *v)
626{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000627 PyObject *repr, *ascii, *res;
Georg Brandl559e5d72008-06-11 18:37:52 +0000628
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000629 repr = PyObject_Repr(v);
630 if (repr == NULL)
631 return NULL;
Georg Brandl559e5d72008-06-11 18:37:52 +0000632
Victor Stinneraf037572013-04-14 18:44:10 +0200633 if (PyUnicode_IS_ASCII(repr))
634 return repr;
635
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000636 /* repr is guaranteed to be a PyUnicode object by PyObject_Repr */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200637 ascii = _PyUnicode_AsASCIIString(repr, "backslashreplace");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000638 Py_DECREF(repr);
639 if (ascii == NULL)
640 return NULL;
Georg Brandl559e5d72008-06-11 18:37:52 +0000641
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000642 res = PyUnicode_DecodeASCII(
643 PyBytes_AS_STRING(ascii),
644 PyBytes_GET_SIZE(ascii),
645 NULL);
646
647 Py_DECREF(ascii);
648 return res;
Georg Brandl559e5d72008-06-11 18:37:52 +0000649}
Guido van Rossuma3af41d2001-01-18 22:07:06 +0000650
Benjamin Petersonc15a0732008-08-26 16:46:47 +0000651PyObject *
652PyObject_Bytes(PyObject *v)
653{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000654 PyObject *result, *func;
Benjamin Petersonc15a0732008-08-26 16:46:47 +0000655
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000656 if (v == NULL)
657 return PyBytes_FromString("<NULL>");
Benjamin Petersonc15a0732008-08-26 16:46:47 +0000658
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000659 if (PyBytes_CheckExact(v)) {
660 Py_INCREF(v);
661 return v;
662 }
Benjamin Petersonc15a0732008-08-26 16:46:47 +0000663
Benjamin Petersonce798522012-01-22 11:24:29 -0500664 func = _PyObject_LookupSpecial(v, &PyId___bytes__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000665 if (func != NULL) {
Victor Stinnerf17c3de2016-12-06 18:46:19 +0100666 result = _PyObject_CallNoArg(func);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000667 Py_DECREF(func);
668 if (result == NULL)
Benjamin Peterson41ece392010-09-11 16:39:57 +0000669 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000670 if (!PyBytes_Check(result)) {
Benjamin Peterson41ece392010-09-11 16:39:57 +0000671 PyErr_Format(PyExc_TypeError,
672 "__bytes__ returned non-bytes (type %.200s)",
673 Py_TYPE(result)->tp_name);
674 Py_DECREF(result);
675 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000676 }
677 return result;
678 }
679 else if (PyErr_Occurred())
680 return NULL;
681 return PyBytes_FromObject(v);
Benjamin Petersonc15a0732008-08-26 16:46:47 +0000682}
683
Mark Dickinsonc008a172009-02-01 13:59:22 +0000684/* For Python 3.0.1 and later, the old three-way comparison has been
685 completely removed in favour of rich comparisons. PyObject_Compare() and
686 PyObject_Cmp() are gone, and the builtin cmp function no longer exists.
Jeroen Demeyer530f5062019-05-31 04:13:39 +0200687 The old tp_compare slot has been renamed to tp_as_async, and should no
Mark Dickinsonc008a172009-02-01 13:59:22 +0000688 longer be used. Use tp_richcompare instead.
Guido van Rossum98297ee2007-11-06 21:34:58 +0000689
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000690 See (*) below for practical amendments.
691
Mark Dickinsonc008a172009-02-01 13:59:22 +0000692 tp_richcompare gets called with a first argument of the appropriate type
693 and a second object of an arbitrary type. We never do any kind of
694 coercion.
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000695
Mark Dickinsonc008a172009-02-01 13:59:22 +0000696 The tp_richcompare slot should return an object, as follows:
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000697
698 NULL if an exception occurred
699 NotImplemented if the requested comparison is not implemented
700 any other false value if the requested comparison is false
701 any other true value if the requested comparison is true
702
703 The PyObject_RichCompare[Bool]() wrappers raise TypeError when they get
704 NotImplemented.
705
706 (*) Practical amendments:
707
708 - If rich comparison returns NotImplemented, == and != are decided by
709 comparing the object pointer (i.e. falling back to the base object
710 implementation).
711
Guido van Rossuma4073002002-05-31 20:03:54 +0000712*/
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000713
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000714/* Map rich comparison operators to their swapped version, e.g. LT <--> GT */
Brett Cannona5ca2e72004-09-25 01:37:24 +0000715int _Py_SwappedOp[] = {Py_GT, Py_GE, Py_EQ, Py_NE, Py_LT, Py_LE};
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +0000716
Serhiy Storchaka2d06e842015-12-25 19:53:18 +0200717static const char * const opstrings[] = {"<", "<=", "==", "!=", ">", ">="};
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000718
719/* Perform a rich comparison, raising TypeError when the requested comparison
720 operator is not supported. */
Guido van Rossume797ec12001-01-17 15:24:28 +0000721static PyObject *
Victor Stinnerbe434dc2019-11-05 00:51:22 +0100722do_richcompare(PyThreadState *tstate, PyObject *v, PyObject *w, int op)
Guido van Rossume797ec12001-01-17 15:24:28 +0000723{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000724 richcmpfunc f;
725 PyObject *res;
726 int checked_reverse_op = 0;
Guido van Rossume797ec12001-01-17 15:24:28 +0000727
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000728 if (v->ob_type != w->ob_type &&
729 PyType_IsSubtype(w->ob_type, v->ob_type) &&
730 (f = w->ob_type->tp_richcompare) != NULL) {
731 checked_reverse_op = 1;
732 res = (*f)(w, v, _Py_SwappedOp[op]);
733 if (res != Py_NotImplemented)
734 return res;
735 Py_DECREF(res);
736 }
737 if ((f = v->ob_type->tp_richcompare) != NULL) {
738 res = (*f)(v, w, op);
739 if (res != Py_NotImplemented)
740 return res;
741 Py_DECREF(res);
742 }
743 if (!checked_reverse_op && (f = w->ob_type->tp_richcompare) != NULL) {
744 res = (*f)(w, v, _Py_SwappedOp[op]);
745 if (res != Py_NotImplemented)
746 return res;
747 Py_DECREF(res);
748 }
749 /* If neither object implements it, provide a sensible default
750 for == and !=, but raise an exception for ordering. */
751 switch (op) {
752 case Py_EQ:
753 res = (v == w) ? Py_True : Py_False;
754 break;
755 case Py_NE:
756 res = (v != w) ? Py_True : Py_False;
757 break;
758 default:
Victor Stinnerbe434dc2019-11-05 00:51:22 +0100759 _PyErr_Format(tstate, PyExc_TypeError,
760 "'%s' not supported between instances of '%.100s' and '%.100s'",
761 opstrings[op],
762 v->ob_type->tp_name,
763 w->ob_type->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000764 return NULL;
765 }
766 Py_INCREF(res);
767 return res;
Guido van Rossume797ec12001-01-17 15:24:28 +0000768}
769
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000770/* Perform a rich comparison with object result. This wraps do_richcompare()
771 with a check for NULL arguments and a recursion check. */
Guido van Rossume797ec12001-01-17 15:24:28 +0000772
Guido van Rossume797ec12001-01-17 15:24:28 +0000773PyObject *
774PyObject_RichCompare(PyObject *v, PyObject *w, int op)
775{
Victor Stinnerbe434dc2019-11-05 00:51:22 +0100776 PyThreadState *tstate = _PyThreadState_GET();
Guido van Rossume797ec12001-01-17 15:24:28 +0000777
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000778 assert(Py_LT <= op && op <= Py_GE);
779 if (v == NULL || w == NULL) {
Victor Stinnerbe434dc2019-11-05 00:51:22 +0100780 if (!_PyErr_Occurred(tstate)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000781 PyErr_BadInternalCall();
Victor Stinnerbe434dc2019-11-05 00:51:22 +0100782 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000783 return NULL;
784 }
Victor Stinnerbe434dc2019-11-05 00:51:22 +0100785 if (_Py_EnterRecursiveCall(tstate, " in comparison")) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000786 return NULL;
Victor Stinnerbe434dc2019-11-05 00:51:22 +0100787 }
788 PyObject *res = do_richcompare(tstate, v, w, op);
789 _Py_LeaveRecursiveCall(tstate);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000790 return res;
Guido van Rossume797ec12001-01-17 15:24:28 +0000791}
792
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000793/* Perform a rich comparison with integer result. This wraps
794 PyObject_RichCompare(), returning -1 for error, 0 for false, 1 for true. */
Guido van Rossume797ec12001-01-17 15:24:28 +0000795int
796PyObject_RichCompareBool(PyObject *v, PyObject *w, int op)
797{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000798 PyObject *res;
799 int ok;
Guido van Rossume797ec12001-01-17 15:24:28 +0000800
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000801 /* Quick result when objects are the same.
802 Guarantees that identity implies equality. */
803 if (v == w) {
804 if (op == Py_EQ)
805 return 1;
806 else if (op == Py_NE)
807 return 0;
808 }
Mark Dickinson4a1f5932008-11-12 23:23:36 +0000809
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000810 res = PyObject_RichCompare(v, w, op);
811 if (res == NULL)
812 return -1;
813 if (PyBool_Check(res))
814 ok = (res == Py_True);
815 else
816 ok = PyObject_IsTrue(res);
817 Py_DECREF(res);
818 return ok;
Guido van Rossume797ec12001-01-17 15:24:28 +0000819}
Fred Drake13634cf2000-06-29 19:17:04 +0000820
Antoine Pitrouce4a9da2011-11-21 20:46:33 +0100821Py_hash_t
Nick Coghland1abd252008-07-15 15:46:38 +0000822PyObject_HashNotImplemented(PyObject *v)
823{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000824 PyErr_Format(PyExc_TypeError, "unhashable type: '%.200s'",
825 Py_TYPE(v)->tp_name);
826 return -1;
Nick Coghland1abd252008-07-15 15:46:38 +0000827}
Fred Drake13634cf2000-06-29 19:17:04 +0000828
Benjamin Peterson8f67d082010-10-17 20:54:53 +0000829Py_hash_t
Fred Drake100814d2000-07-09 15:48:49 +0000830PyObject_Hash(PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000831{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000832 PyTypeObject *tp = Py_TYPE(v);
833 if (tp->tp_hash != NULL)
834 return (*tp->tp_hash)(v);
835 /* To keep to the general practice that inheriting
836 * solely from object in C code should work without
837 * an explicit call to PyType_Ready, we implicitly call
838 * PyType_Ready here and then check the tp_hash slot again
839 */
840 if (tp->tp_dict == NULL) {
841 if (PyType_Ready(tp) < 0)
842 return -1;
843 if (tp->tp_hash != NULL)
844 return (*tp->tp_hash)(v);
845 }
846 /* Otherwise, the object can't be hashed */
847 return PyObject_HashNotImplemented(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000848}
849
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000850PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000851PyObject_GetAttrString(PyObject *v, const char *name)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000852{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000853 PyObject *w, *res;
Guido van Rossumd8eb1b31996-08-09 20:52:03 +0000854
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000855 if (Py_TYPE(v)->tp_getattr != NULL)
856 return (*Py_TYPE(v)->tp_getattr)(v, (char*)name);
INADA Naoki3e8d6cb2017-02-21 23:57:25 +0900857 w = PyUnicode_FromString(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000858 if (w == NULL)
859 return NULL;
860 res = PyObject_GetAttr(v, w);
Victor Stinner59af08f2012-03-22 02:09:08 +0100861 Py_DECREF(w);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000862 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000863}
864
865int
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000866PyObject_HasAttrString(PyObject *v, const char *name)
Guido van Rossumed18fdc1993-07-11 19:55:34 +0000867{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000868 PyObject *res = PyObject_GetAttrString(v, name);
869 if (res != NULL) {
870 Py_DECREF(res);
871 return 1;
872 }
873 PyErr_Clear();
874 return 0;
Guido van Rossumed18fdc1993-07-11 19:55:34 +0000875}
876
877int
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000878PyObject_SetAttrString(PyObject *v, const char *name, PyObject *w)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000879{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000880 PyObject *s;
881 int res;
Guido van Rossumd8eb1b31996-08-09 20:52:03 +0000882
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000883 if (Py_TYPE(v)->tp_setattr != NULL)
884 return (*Py_TYPE(v)->tp_setattr)(v, (char*)name, w);
885 s = PyUnicode_InternFromString(name);
886 if (s == NULL)
887 return -1;
888 res = PyObject_SetAttr(v, s, w);
889 Py_XDECREF(s);
890 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000891}
892
Benjamin Petersonbfebb7b2011-12-15 15:34:02 -0500893int
894_PyObject_IsAbstract(PyObject *obj)
895{
896 int res;
897 PyObject* isabstract;
Benjamin Petersonbfebb7b2011-12-15 15:34:02 -0500898
899 if (obj == NULL)
900 return 0;
901
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200902 res = _PyObject_LookupAttrId(obj, &PyId___isabstractmethod__, &isabstract);
903 if (res > 0) {
904 res = PyObject_IsTrue(isabstract);
905 Py_DECREF(isabstract);
Benjamin Petersonbfebb7b2011-12-15 15:34:02 -0500906 }
Benjamin Petersonbfebb7b2011-12-15 15:34:02 -0500907 return res;
908}
909
Guido van Rossum98ff96a1997-05-20 18:34:44 +0000910PyObject *
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200911_PyObject_GetAttrId(PyObject *v, _Py_Identifier *name)
912{
913 PyObject *result;
Martin v. Löwisd10759f2011-11-07 13:00:05 +0100914 PyObject *oname = _PyUnicode_FromId(name); /* borrowed */
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200915 if (!oname)
916 return NULL;
917 result = PyObject_GetAttr(v, oname);
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200918 return result;
919}
920
921int
922_PyObject_HasAttrId(PyObject *v, _Py_Identifier *name)
923{
924 int result;
Martin v. Löwisd10759f2011-11-07 13:00:05 +0100925 PyObject *oname = _PyUnicode_FromId(name); /* borrowed */
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200926 if (!oname)
927 return -1;
928 result = PyObject_HasAttr(v, oname);
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200929 return result;
930}
931
932int
933_PyObject_SetAttrId(PyObject *v, _Py_Identifier *name, PyObject *w)
934{
935 int result;
Martin v. Löwisd10759f2011-11-07 13:00:05 +0100936 PyObject *oname = _PyUnicode_FromId(name); /* borrowed */
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200937 if (!oname)
938 return -1;
939 result = PyObject_SetAttr(v, oname, w);
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200940 return result;
941}
942
943PyObject *
Fred Drake100814d2000-07-09 15:48:49 +0000944PyObject_GetAttr(PyObject *v, PyObject *name)
Guido van Rossum98ff96a1997-05-20 18:34:44 +0000945{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000946 PyTypeObject *tp = Py_TYPE(v);
Tim Peters6d6c1a32001-08-02 04:15:00 +0000947
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000948 if (!PyUnicode_Check(name)) {
949 PyErr_Format(PyExc_TypeError,
950 "attribute name must be string, not '%.200s'",
951 name->ob_type->tp_name);
952 return NULL;
953 }
954 if (tp->tp_getattro != NULL)
955 return (*tp->tp_getattro)(v, name);
956 if (tp->tp_getattr != NULL) {
Serhiy Storchaka2a404b62017-01-22 23:07:07 +0200957 const char *name_str = PyUnicode_AsUTF8(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000958 if (name_str == NULL)
959 return NULL;
Serhiy Storchaka2a404b62017-01-22 23:07:07 +0200960 return (*tp->tp_getattr)(v, (char *)name_str);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000961 }
962 PyErr_Format(PyExc_AttributeError,
963 "'%.50s' object has no attribute '%U'",
964 tp->tp_name, name);
965 return NULL;
Guido van Rossum98ff96a1997-05-20 18:34:44 +0000966}
967
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200968int
969_PyObject_LookupAttr(PyObject *v, PyObject *name, PyObject **result)
INADA Naoki378edee2018-01-16 20:52:41 +0900970{
971 PyTypeObject *tp = Py_TYPE(v);
INADA Naoki378edee2018-01-16 20:52:41 +0900972
973 if (!PyUnicode_Check(name)) {
974 PyErr_Format(PyExc_TypeError,
975 "attribute name must be string, not '%.200s'",
976 name->ob_type->tp_name);
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200977 *result = NULL;
978 return -1;
INADA Naoki378edee2018-01-16 20:52:41 +0900979 }
980
981 if (tp->tp_getattro == PyObject_GenericGetAttr) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200982 *result = _PyObject_GenericGetAttrWithDict(v, name, NULL, 1);
983 if (*result != NULL) {
984 return 1;
985 }
986 if (PyErr_Occurred()) {
987 return -1;
988 }
989 return 0;
INADA Naoki378edee2018-01-16 20:52:41 +0900990 }
991 if (tp->tp_getattro != NULL) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200992 *result = (*tp->tp_getattro)(v, name);
INADA Naoki378edee2018-01-16 20:52:41 +0900993 }
994 else if (tp->tp_getattr != NULL) {
995 const char *name_str = PyUnicode_AsUTF8(name);
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200996 if (name_str == NULL) {
997 *result = NULL;
998 return -1;
999 }
1000 *result = (*tp->tp_getattr)(v, (char *)name_str);
INADA Naoki378edee2018-01-16 20:52:41 +09001001 }
INADA Naokie76daeb2018-01-26 16:22:51 +09001002 else {
1003 *result = NULL;
1004 return 0;
1005 }
1006
Serhiy Storchakaf320be72018-01-25 10:49:40 +02001007 if (*result != NULL) {
1008 return 1;
INADA Naoki378edee2018-01-16 20:52:41 +09001009 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02001010 if (!PyErr_ExceptionMatches(PyExc_AttributeError)) {
1011 return -1;
1012 }
1013 PyErr_Clear();
1014 return 0;
1015}
1016
1017int
1018_PyObject_LookupAttrId(PyObject *v, _Py_Identifier *name, PyObject **result)
1019{
1020 PyObject *oname = _PyUnicode_FromId(name); /* borrowed */
1021 if (!oname) {
1022 *result = NULL;
1023 return -1;
1024 }
1025 return _PyObject_LookupAttr(v, oname, result);
INADA Naoki378edee2018-01-16 20:52:41 +09001026}
1027
Guido van Rossum98ff96a1997-05-20 18:34:44 +00001028int
Fred Drake100814d2000-07-09 15:48:49 +00001029PyObject_HasAttr(PyObject *v, PyObject *name)
Guido van Rossum98ff96a1997-05-20 18:34:44 +00001030{
Serhiy Storchakaf320be72018-01-25 10:49:40 +02001031 PyObject *res;
1032 if (_PyObject_LookupAttr(v, name, &res) < 0) {
1033 PyErr_Clear();
1034 return 0;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001035 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02001036 if (res == NULL) {
1037 return 0;
1038 }
1039 Py_DECREF(res);
1040 return 1;
Guido van Rossum98ff96a1997-05-20 18:34:44 +00001041}
1042
1043int
Fred Drake100814d2000-07-09 15:48:49 +00001044PyObject_SetAttr(PyObject *v, PyObject *name, PyObject *value)
Guido van Rossum98ff96a1997-05-20 18:34:44 +00001045{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001046 PyTypeObject *tp = Py_TYPE(v);
1047 int err;
Marc-André Lemburge44e5072000-09-18 16:20:57 +00001048
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001049 if (!PyUnicode_Check(name)) {
1050 PyErr_Format(PyExc_TypeError,
1051 "attribute name must be string, not '%.200s'",
1052 name->ob_type->tp_name);
1053 return -1;
1054 }
1055 Py_INCREF(name);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001056
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001057 PyUnicode_InternInPlace(&name);
1058 if (tp->tp_setattro != NULL) {
1059 err = (*tp->tp_setattro)(v, name, value);
1060 Py_DECREF(name);
1061 return err;
1062 }
1063 if (tp->tp_setattr != NULL) {
Serhiy Storchaka2a404b62017-01-22 23:07:07 +02001064 const char *name_str = PyUnicode_AsUTF8(name);
Zackery Spytze0dcb852019-04-28 06:58:52 -06001065 if (name_str == NULL) {
1066 Py_DECREF(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001067 return -1;
Zackery Spytze0dcb852019-04-28 06:58:52 -06001068 }
Serhiy Storchaka2a404b62017-01-22 23:07:07 +02001069 err = (*tp->tp_setattr)(v, (char *)name_str, value);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001070 Py_DECREF(name);
1071 return err;
1072 }
1073 Py_DECREF(name);
Victor Stinner24702042018-10-26 17:16:37 +02001074 _PyObject_ASSERT(name, name->ob_refcnt >= 1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001075 if (tp->tp_getattr == NULL && tp->tp_getattro == NULL)
1076 PyErr_Format(PyExc_TypeError,
1077 "'%.100s' object has no attributes "
1078 "(%s .%U)",
1079 tp->tp_name,
1080 value==NULL ? "del" : "assign to",
1081 name);
1082 else
1083 PyErr_Format(PyExc_TypeError,
1084 "'%.100s' object has only read-only attributes "
1085 "(%s .%U)",
1086 tp->tp_name,
1087 value==NULL ? "del" : "assign to",
1088 name);
1089 return -1;
Tim Peters6d6c1a32001-08-02 04:15:00 +00001090}
1091
1092/* Helper to get a pointer to an object's __dict__ slot, if any */
1093
1094PyObject **
1095_PyObject_GetDictPtr(PyObject *obj)
1096{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001097 Py_ssize_t dictoffset;
1098 PyTypeObject *tp = Py_TYPE(obj);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001099
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001100 dictoffset = tp->tp_dictoffset;
1101 if (dictoffset == 0)
1102 return NULL;
1103 if (dictoffset < 0) {
1104 Py_ssize_t tsize;
1105 size_t size;
Guido van Rossum2eb0b872002-03-01 22:24:49 +00001106
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001107 tsize = ((PyVarObject *)obj)->ob_size;
1108 if (tsize < 0)
1109 tsize = -tsize;
1110 size = _PyObject_VAR_SIZE(tp, tsize);
Guido van Rossum2eb0b872002-03-01 22:24:49 +00001111
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001112 dictoffset += (long)size;
Victor Stinner24702042018-10-26 17:16:37 +02001113 _PyObject_ASSERT(obj, dictoffset > 0);
1114 _PyObject_ASSERT(obj, dictoffset % SIZEOF_VOID_P == 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001115 }
1116 return (PyObject **) ((char *)obj + dictoffset);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001117}
1118
Tim Peters6d6c1a32001-08-02 04:15:00 +00001119PyObject *
Raymond Hettinger1da1dbf2003-03-17 19:46:11 +00001120PyObject_SelfIter(PyObject *obj)
Raymond Hettinger01538262003-03-17 08:24:35 +00001121{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001122 Py_INCREF(obj);
1123 return obj;
Raymond Hettinger01538262003-03-17 08:24:35 +00001124}
1125
Amaury Forgeot d'Arcf343e012009-01-12 23:58:21 +00001126/* Helper used when the __next__ method is removed from a type:
1127 tp_iternext is never NULL and can be safely called without checking
1128 on every iteration.
1129 */
1130
1131PyObject *
1132_PyObject_NextNotImplemented(PyObject *self)
1133{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001134 PyErr_Format(PyExc_TypeError,
1135 "'%.200s' object is not iterable",
1136 Py_TYPE(self)->tp_name);
1137 return NULL;
Amaury Forgeot d'Arcf343e012009-01-12 23:58:21 +00001138}
1139
Yury Selivanovf2392132016-12-13 19:03:51 -05001140
1141/* Specialized version of _PyObject_GenericGetAttrWithDict
1142 specifically for the LOAD_METHOD opcode.
1143
1144 Return 1 if a method is found, 0 if it's a regular attribute
1145 from __dict__ or something returned by using a descriptor
1146 protocol.
1147
1148 `method` will point to the resolved attribute or NULL. In the
1149 latter case, an error will be set.
1150*/
1151int
1152_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method)
1153{
1154 PyTypeObject *tp = Py_TYPE(obj);
1155 PyObject *descr;
1156 descrgetfunc f = NULL;
1157 PyObject **dictptr, *dict;
1158 PyObject *attr;
1159 int meth_found = 0;
1160
1161 assert(*method == NULL);
1162
1163 if (Py_TYPE(obj)->tp_getattro != PyObject_GenericGetAttr
1164 || !PyUnicode_Check(name)) {
1165 *method = PyObject_GetAttr(obj, name);
1166 return 0;
1167 }
1168
1169 if (tp->tp_dict == NULL && PyType_Ready(tp) < 0)
1170 return 0;
1171
1172 descr = _PyType_Lookup(tp, name);
1173 if (descr != NULL) {
1174 Py_INCREF(descr);
Jeroen Demeyereb65e242019-05-28 14:42:53 +02001175 if (PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)) {
Yury Selivanovf2392132016-12-13 19:03:51 -05001176 meth_found = 1;
1177 } else {
1178 f = descr->ob_type->tp_descr_get;
1179 if (f != NULL && PyDescr_IsData(descr)) {
1180 *method = f(descr, obj, (PyObject *)obj->ob_type);
1181 Py_DECREF(descr);
1182 return 0;
1183 }
1184 }
1185 }
1186
1187 dictptr = _PyObject_GetDictPtr(obj);
1188 if (dictptr != NULL && (dict = *dictptr) != NULL) {
1189 Py_INCREF(dict);
Serhiy Storchakaa24107b2019-02-25 17:59:46 +02001190 attr = PyDict_GetItemWithError(dict, name);
Yury Selivanovf2392132016-12-13 19:03:51 -05001191 if (attr != NULL) {
1192 Py_INCREF(attr);
1193 *method = attr;
1194 Py_DECREF(dict);
1195 Py_XDECREF(descr);
1196 return 0;
1197 }
Serhiy Storchakaa24107b2019-02-25 17:59:46 +02001198 else {
1199 Py_DECREF(dict);
1200 if (PyErr_Occurred()) {
1201 Py_XDECREF(descr);
1202 return 0;
1203 }
1204 }
Yury Selivanovf2392132016-12-13 19:03:51 -05001205 }
1206
1207 if (meth_found) {
1208 *method = descr;
1209 return 1;
1210 }
1211
1212 if (f != NULL) {
1213 *method = f(descr, obj, (PyObject *)Py_TYPE(obj));
1214 Py_DECREF(descr);
1215 return 0;
1216 }
1217
1218 if (descr != NULL) {
1219 *method = descr;
1220 return 0;
1221 }
1222
1223 PyErr_Format(PyExc_AttributeError,
1224 "'%.50s' object has no attribute '%U'",
1225 tp->tp_name, name);
1226 return 0;
1227}
1228
1229/* Generic GetAttr functions - put these in your tp_[gs]etattro slot. */
Michael W. Hudson1593f502004-09-14 17:09:47 +00001230
Raymond Hettinger01538262003-03-17 08:24:35 +00001231PyObject *
INADA Naoki378edee2018-01-16 20:52:41 +09001232_PyObject_GenericGetAttrWithDict(PyObject *obj, PyObject *name,
1233 PyObject *dict, int suppress)
Tim Peters6d6c1a32001-08-02 04:15:00 +00001234{
Yury Selivanovf2392132016-12-13 19:03:51 -05001235 /* Make sure the logic of _PyObject_GetMethod is in sync with
1236 this method.
INADA Naoki378edee2018-01-16 20:52:41 +09001237
1238 When suppress=1, this function suppress AttributeError.
Yury Selivanovf2392132016-12-13 19:03:51 -05001239 */
1240
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001241 PyTypeObject *tp = Py_TYPE(obj);
1242 PyObject *descr = NULL;
1243 PyObject *res = NULL;
1244 descrgetfunc f;
1245 Py_ssize_t dictoffset;
1246 PyObject **dictptr;
Tim Peters6d6c1a32001-08-02 04:15:00 +00001247
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001248 if (!PyUnicode_Check(name)){
1249 PyErr_Format(PyExc_TypeError,
1250 "attribute name must be string, not '%.200s'",
1251 name->ob_type->tp_name);
1252 return NULL;
1253 }
Serhiy Storchaka55c861f2016-04-17 20:31:51 +03001254 Py_INCREF(name);
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001255
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001256 if (tp->tp_dict == NULL) {
1257 if (PyType_Ready(tp) < 0)
1258 goto done;
1259 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001260
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001261 descr = _PyType_Lookup(tp, name);
Michael W. Hudsonb2c7de42003-08-15 13:07:47 +00001262
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001263 f = NULL;
1264 if (descr != NULL) {
Serhiy Storchaka55c861f2016-04-17 20:31:51 +03001265 Py_INCREF(descr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001266 f = descr->ob_type->tp_descr_get;
1267 if (f != NULL && PyDescr_IsData(descr)) {
1268 res = f(descr, obj, (PyObject *)obj->ob_type);
INADA Naoki378edee2018-01-16 20:52:41 +09001269 if (res == NULL && suppress &&
1270 PyErr_ExceptionMatches(PyExc_AttributeError)) {
1271 PyErr_Clear();
1272 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001273 goto done;
1274 }
1275 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001276
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001277 if (dict == NULL) {
1278 /* Inline _PyObject_GetDictPtr */
1279 dictoffset = tp->tp_dictoffset;
1280 if (dictoffset != 0) {
1281 if (dictoffset < 0) {
1282 Py_ssize_t tsize;
1283 size_t size;
Guido van Rossumc66ff442002-08-19 16:50:48 +00001284
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001285 tsize = ((PyVarObject *)obj)->ob_size;
1286 if (tsize < 0)
1287 tsize = -tsize;
1288 size = _PyObject_VAR_SIZE(tp, tsize);
Victor Stinner24702042018-10-26 17:16:37 +02001289 _PyObject_ASSERT(obj, size <= PY_SSIZE_T_MAX);
Guido van Rossumc66ff442002-08-19 16:50:48 +00001290
Serhiy Storchaka55c861f2016-04-17 20:31:51 +03001291 dictoffset += (Py_ssize_t)size;
Victor Stinner24702042018-10-26 17:16:37 +02001292 _PyObject_ASSERT(obj, dictoffset > 0);
1293 _PyObject_ASSERT(obj, dictoffset % SIZEOF_VOID_P == 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001294 }
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001295 dictptr = (PyObject **) ((char *)obj + dictoffset);
1296 dict = *dictptr;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001297 }
1298 }
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001299 if (dict != NULL) {
1300 Py_INCREF(dict);
Serhiy Storchakaa24107b2019-02-25 17:59:46 +02001301 res = PyDict_GetItemWithError(dict, name);
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001302 if (res != NULL) {
1303 Py_INCREF(res);
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001304 Py_DECREF(dict);
1305 goto done;
1306 }
Serhiy Storchakaa24107b2019-02-25 17:59:46 +02001307 else {
1308 Py_DECREF(dict);
1309 if (PyErr_Occurred()) {
1310 if (suppress && PyErr_ExceptionMatches(PyExc_AttributeError)) {
1311 PyErr_Clear();
1312 }
1313 else {
1314 goto done;
1315 }
1316 }
1317 }
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001318 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001319
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001320 if (f != NULL) {
1321 res = f(descr, obj, (PyObject *)Py_TYPE(obj));
INADA Naoki378edee2018-01-16 20:52:41 +09001322 if (res == NULL && suppress &&
1323 PyErr_ExceptionMatches(PyExc_AttributeError)) {
1324 PyErr_Clear();
1325 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001326 goto done;
1327 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001328
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001329 if (descr != NULL) {
1330 res = descr;
Victor Stinner2d01dc02012-03-09 00:44:13 +01001331 descr = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001332 goto done;
1333 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001334
INADA Naoki378edee2018-01-16 20:52:41 +09001335 if (!suppress) {
1336 PyErr_Format(PyExc_AttributeError,
1337 "'%.50s' object has no attribute '%U'",
1338 tp->tp_name, name);
1339 }
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001340 done:
Victor Stinner2d01dc02012-03-09 00:44:13 +01001341 Py_XDECREF(descr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001342 Py_DECREF(name);
1343 return res;
Tim Peters6d6c1a32001-08-02 04:15:00 +00001344}
1345
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001346PyObject *
1347PyObject_GenericGetAttr(PyObject *obj, PyObject *name)
1348{
INADA Naoki378edee2018-01-16 20:52:41 +09001349 return _PyObject_GenericGetAttrWithDict(obj, name, NULL, 0);
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001350}
1351
Tim Peters6d6c1a32001-08-02 04:15:00 +00001352int
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001353_PyObject_GenericSetAttrWithDict(PyObject *obj, PyObject *name,
1354 PyObject *value, PyObject *dict)
Tim Peters6d6c1a32001-08-02 04:15:00 +00001355{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001356 PyTypeObject *tp = Py_TYPE(obj);
1357 PyObject *descr;
1358 descrsetfunc f;
1359 PyObject **dictptr;
1360 int res = -1;
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001361
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001362 if (!PyUnicode_Check(name)){
1363 PyErr_Format(PyExc_TypeError,
1364 "attribute name must be string, not '%.200s'",
1365 name->ob_type->tp_name);
1366 return -1;
1367 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001368
Benjamin Peterson74529ad2012-03-09 07:25:32 -08001369 if (tp->tp_dict == NULL && PyType_Ready(tp) < 0)
1370 return -1;
1371
1372 Py_INCREF(name);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001373
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001374 descr = _PyType_Lookup(tp, name);
Victor Stinner2d01dc02012-03-09 00:44:13 +01001375
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001376 if (descr != NULL) {
Serhiy Storchaka55c861f2016-04-17 20:31:51 +03001377 Py_INCREF(descr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001378 f = descr->ob_type->tp_descr_set;
Serhiy Storchaka55c861f2016-04-17 20:31:51 +03001379 if (f != NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001380 res = f(descr, obj, value);
1381 goto done;
1382 }
1383 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001384
Steve Dowerb82e17e2019-05-23 08:45:22 -07001385 /* XXX [Steve Dower] These are really noisy - worth it? */
1386 /*if (PyType_Check(obj) || PyModule_Check(obj)) {
1387 if (value && PySys_Audit("object.__setattr__", "OOO", obj, name, value) < 0)
1388 return -1;
1389 if (!value && PySys_Audit("object.__delattr__", "OO", obj, name) < 0)
1390 return -1;
1391 }*/
1392
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001393 if (dict == NULL) {
1394 dictptr = _PyObject_GetDictPtr(obj);
Serhiy Storchaka55c861f2016-04-17 20:31:51 +03001395 if (dictptr == NULL) {
1396 if (descr == NULL) {
1397 PyErr_Format(PyExc_AttributeError,
1398 "'%.100s' object has no attribute '%U'",
1399 tp->tp_name, name);
1400 }
1401 else {
1402 PyErr_Format(PyExc_AttributeError,
1403 "'%.50s' object attribute '%U' is read-only",
1404 tp->tp_name, name);
1405 }
Benjamin Peterson7d95e402012-04-23 11:24:50 -04001406 goto done;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001407 }
Serhiy Storchaka55c861f2016-04-17 20:31:51 +03001408 res = _PyObjectDict_SetItem(tp, dictptr, name, value);
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001409 }
Serhiy Storchaka55c861f2016-04-17 20:31:51 +03001410 else {
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001411 Py_INCREF(dict);
1412 if (value == NULL)
1413 res = PyDict_DelItem(dict, name);
1414 else
1415 res = PyDict_SetItem(dict, name, value);
Benjamin Peterson74529ad2012-03-09 07:25:32 -08001416 Py_DECREF(dict);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001417 }
Serhiy Storchaka55c861f2016-04-17 20:31:51 +03001418 if (res < 0 && PyErr_ExceptionMatches(PyExc_KeyError))
1419 PyErr_SetObject(PyExc_AttributeError, name);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001420
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001421 done:
Victor Stinner2d01dc02012-03-09 00:44:13 +01001422 Py_XDECREF(descr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001423 Py_DECREF(name);
1424 return res;
Guido van Rossum98ff96a1997-05-20 18:34:44 +00001425}
1426
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001427int
1428PyObject_GenericSetAttr(PyObject *obj, PyObject *name, PyObject *value)
1429{
1430 return _PyObject_GenericSetAttrWithDict(obj, name, value, NULL);
1431}
1432
Benjamin Peterson8eb12692012-02-19 19:59:10 -05001433int
1434PyObject_GenericSetDict(PyObject *obj, PyObject *value, void *context)
1435{
Serhiy Storchaka576f1322016-01-05 21:27:54 +02001436 PyObject **dictptr = _PyObject_GetDictPtr(obj);
Benjamin Peterson8eb12692012-02-19 19:59:10 -05001437 if (dictptr == NULL) {
1438 PyErr_SetString(PyExc_AttributeError,
1439 "This object has no __dict__");
1440 return -1;
1441 }
1442 if (value == NULL) {
1443 PyErr_SetString(PyExc_TypeError, "cannot delete __dict__");
1444 return -1;
1445 }
1446 if (!PyDict_Check(value)) {
1447 PyErr_Format(PyExc_TypeError,
1448 "__dict__ must be set to a dictionary, "
1449 "not a '%.200s'", Py_TYPE(value)->tp_name);
1450 return -1;
1451 }
Serhiy Storchaka576f1322016-01-05 21:27:54 +02001452 Py_INCREF(value);
Serhiy Storchakaec397562016-04-06 09:50:03 +03001453 Py_XSETREF(*dictptr, value);
Benjamin Peterson8eb12692012-02-19 19:59:10 -05001454 return 0;
1455}
1456
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001457
Guido van Rossum6ac258d1993-05-12 08:24:20 +00001458/* Test a value used as condition, e.g., in a for or if statement.
1459 Return -1 if an error occurred */
1460
1461int
Fred Drake100814d2000-07-09 15:48:49 +00001462PyObject_IsTrue(PyObject *v)
Guido van Rossum6ac258d1993-05-12 08:24:20 +00001463{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001464 Py_ssize_t res;
1465 if (v == Py_True)
1466 return 1;
1467 if (v == Py_False)
1468 return 0;
1469 if (v == Py_None)
1470 return 0;
1471 else if (v->ob_type->tp_as_number != NULL &&
1472 v->ob_type->tp_as_number->nb_bool != NULL)
1473 res = (*v->ob_type->tp_as_number->nb_bool)(v);
1474 else if (v->ob_type->tp_as_mapping != NULL &&
1475 v->ob_type->tp_as_mapping->mp_length != NULL)
1476 res = (*v->ob_type->tp_as_mapping->mp_length)(v);
1477 else if (v->ob_type->tp_as_sequence != NULL &&
1478 v->ob_type->tp_as_sequence->sq_length != NULL)
1479 res = (*v->ob_type->tp_as_sequence->sq_length)(v);
1480 else
1481 return 1;
1482 /* if it is negative, it should be either -1 or -2 */
1483 return (res > 0) ? 1 : Py_SAFE_DOWNCAST(res, Py_ssize_t, int);
Guido van Rossum6ac258d1993-05-12 08:24:20 +00001484}
1485
Tim Peters803526b2002-07-07 05:13:56 +00001486/* equivalent of 'not v'
Guido van Rossumc3d3f961998-04-09 17:53:59 +00001487 Return -1 if an error occurred */
1488
1489int
Fred Drake100814d2000-07-09 15:48:49 +00001490PyObject_Not(PyObject *v)
Guido van Rossumc3d3f961998-04-09 17:53:59 +00001491{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001492 int res;
1493 res = PyObject_IsTrue(v);
1494 if (res < 0)
1495 return res;
1496 return res == 0;
Guido van Rossumc3d3f961998-04-09 17:53:59 +00001497}
1498
Guido van Rossum49b11fe1995-01-26 00:38:22 +00001499/* Test whether an object can be called */
1500
1501int
Fred Drake100814d2000-07-09 15:48:49 +00001502PyCallable_Check(PyObject *x)
Guido van Rossum49b11fe1995-01-26 00:38:22 +00001503{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001504 if (x == NULL)
1505 return 0;
1506 return x->ob_type->tp_call != NULL;
Guido van Rossum49b11fe1995-01-26 00:38:22 +00001507}
1508
Tim Peters7eea37e2001-09-04 22:08:56 +00001509
Georg Brandle32b4222007-03-10 22:13:27 +00001510/* Helper for PyObject_Dir without arguments: returns the local scope. */
1511static PyObject *
Guido van Rossumad7d8d12007-04-13 01:39:34 +00001512_dir_locals(void)
Tim Peters305b5852001-09-17 02:38:46 +00001513{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001514 PyObject *names;
Victor Stinner41bb43a2013-10-29 01:19:37 +01001515 PyObject *locals;
Tim Peters305b5852001-09-17 02:38:46 +00001516
Victor Stinner41bb43a2013-10-29 01:19:37 +01001517 locals = PyEval_GetLocals();
1518 if (locals == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001519 return NULL;
Tim Peters305b5852001-09-17 02:38:46 +00001520
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001521 names = PyMapping_Keys(locals);
1522 if (!names)
1523 return NULL;
1524 if (!PyList_Check(names)) {
1525 PyErr_Format(PyExc_TypeError,
1526 "dir(): expected keys() of locals to be a list, "
1527 "not '%.200s'", Py_TYPE(names)->tp_name);
1528 Py_DECREF(names);
1529 return NULL;
1530 }
Benjamin Peterson3bbb7222011-06-11 16:12:08 -05001531 if (PyList_Sort(names)) {
1532 Py_DECREF(names);
1533 return NULL;
1534 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001535 /* the locals don't need to be DECREF'd */
1536 return names;
Georg Brandle32b4222007-03-10 22:13:27 +00001537}
1538
Benjamin Peterson82b00c12011-05-24 11:09:06 -05001539/* Helper for PyObject_Dir: object introspection. */
Georg Brandle32b4222007-03-10 22:13:27 +00001540static PyObject *
1541_dir_object(PyObject *obj)
1542{
Benjamin Peterson3bbb7222011-06-11 16:12:08 -05001543 PyObject *result, *sorted;
Benjamin Petersonce798522012-01-22 11:24:29 -05001544 PyObject *dirfunc = _PyObject_LookupSpecial(obj, &PyId___dir__);
Georg Brandle32b4222007-03-10 22:13:27 +00001545
Victor Stinner24702042018-10-26 17:16:37 +02001546 assert(obj != NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001547 if (dirfunc == NULL) {
Benjamin Peterson82b00c12011-05-24 11:09:06 -05001548 if (!PyErr_Occurred())
1549 PyErr_SetString(PyExc_TypeError, "object does not provide __dir__");
1550 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001551 }
Benjamin Peterson82b00c12011-05-24 11:09:06 -05001552 /* use __dir__ */
Victor Stinnerf17c3de2016-12-06 18:46:19 +01001553 result = _PyObject_CallNoArg(dirfunc);
Benjamin Peterson82b00c12011-05-24 11:09:06 -05001554 Py_DECREF(dirfunc);
1555 if (result == NULL)
1556 return NULL;
Benjamin Peterson3bbb7222011-06-11 16:12:08 -05001557 /* return sorted(result) */
1558 sorted = PySequence_List(result);
1559 Py_DECREF(result);
1560 if (sorted == NULL)
1561 return NULL;
1562 if (PyList_Sort(sorted)) {
1563 Py_DECREF(sorted);
1564 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001565 }
Benjamin Peterson3bbb7222011-06-11 16:12:08 -05001566 return sorted;
Georg Brandle32b4222007-03-10 22:13:27 +00001567}
1568
1569/* Implementation of dir() -- if obj is NULL, returns the names in the current
1570 (local) scope. Otherwise, performs introspection of the object: returns a
1571 sorted list of attribute names (supposedly) accessible from the object
1572*/
1573PyObject *
1574PyObject_Dir(PyObject *obj)
1575{
Benjamin Peterson3bbb7222011-06-11 16:12:08 -05001576 return (obj == NULL) ? _dir_locals() : _dir_object(obj);
Tim Peters7eea37e2001-09-04 22:08:56 +00001577}
Guido van Rossum49b11fe1995-01-26 00:38:22 +00001578
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001579/*
Raymond Hettinger66d2be82011-07-28 09:55:13 -07001580None is a non-NULL undefined value.
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001581There is (and should be!) no way to create other objects of this type,
Guido van Rossum3f5da241990-12-20 15:06:42 +00001582so there is exactly one (which is indestructible, by the way).
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001583*/
1584
Guido van Rossum0c182a11992-03-27 17:26:13 +00001585/* ARGSUSED */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001586static PyObject *
Fred Drake100814d2000-07-09 15:48:49 +00001587none_repr(PyObject *op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001588{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001589 return PyUnicode_FromString("None");
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001590}
1591
Barry Warsaw9bf16442001-01-23 16:24:35 +00001592/* ARGUSED */
1593static void
Tim Peters803526b2002-07-07 05:13:56 +00001594none_dealloc(PyObject* ignore)
Barry Warsaw9bf16442001-01-23 16:24:35 +00001595{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001596 /* This should never get called, but we also don't want to SEGV if
1597 * we accidentally decref None out of existence.
1598 */
1599 Py_FatalError("deallocating None");
Barry Warsaw9bf16442001-01-23 16:24:35 +00001600}
1601
Benjamin Petersonc4607ae2011-07-29 18:19:43 -05001602static PyObject *
1603none_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
1604{
Serhiy Storchaka5ab81d72016-12-16 16:18:57 +02001605 if (PyTuple_GET_SIZE(args) || (kwargs && PyDict_GET_SIZE(kwargs))) {
Benjamin Petersonc4607ae2011-07-29 18:19:43 -05001606 PyErr_SetString(PyExc_TypeError, "NoneType takes no arguments");
1607 return NULL;
1608 }
1609 Py_RETURN_NONE;
1610}
1611
Raymond Hettinger66d2be82011-07-28 09:55:13 -07001612static int
1613none_bool(PyObject *v)
1614{
1615 return 0;
1616}
1617
1618static PyNumberMethods none_as_number = {
1619 0, /* nb_add */
1620 0, /* nb_subtract */
1621 0, /* nb_multiply */
1622 0, /* nb_remainder */
1623 0, /* nb_divmod */
1624 0, /* nb_power */
1625 0, /* nb_negative */
1626 0, /* nb_positive */
1627 0, /* nb_absolute */
1628 (inquiry)none_bool, /* nb_bool */
1629 0, /* nb_invert */
1630 0, /* nb_lshift */
1631 0, /* nb_rshift */
1632 0, /* nb_and */
1633 0, /* nb_xor */
1634 0, /* nb_or */
1635 0, /* nb_int */
1636 0, /* nb_reserved */
1637 0, /* nb_float */
1638 0, /* nb_inplace_add */
1639 0, /* nb_inplace_subtract */
1640 0, /* nb_inplace_multiply */
1641 0, /* nb_inplace_remainder */
1642 0, /* nb_inplace_power */
1643 0, /* nb_inplace_lshift */
1644 0, /* nb_inplace_rshift */
1645 0, /* nb_inplace_and */
1646 0, /* nb_inplace_xor */
1647 0, /* nb_inplace_or */
1648 0, /* nb_floor_divide */
1649 0, /* nb_true_divide */
1650 0, /* nb_inplace_floor_divide */
1651 0, /* nb_inplace_true_divide */
1652 0, /* nb_index */
1653};
Barry Warsaw9bf16442001-01-23 16:24:35 +00001654
Alexandre Vassalotti65846c62013-11-30 17:55:48 -08001655PyTypeObject _PyNone_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001656 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1657 "NoneType",
1658 0,
1659 0,
1660 none_dealloc, /*tp_dealloc*/ /*never called*/
Jeroen Demeyer530f5062019-05-31 04:13:39 +02001661 0, /*tp_vectorcall_offset*/
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001662 0, /*tp_getattr*/
1663 0, /*tp_setattr*/
Jeroen Demeyer530f5062019-05-31 04:13:39 +02001664 0, /*tp_as_async*/
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001665 none_repr, /*tp_repr*/
Raymond Hettinger66d2be82011-07-28 09:55:13 -07001666 &none_as_number, /*tp_as_number*/
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001667 0, /*tp_as_sequence*/
1668 0, /*tp_as_mapping*/
1669 0, /*tp_hash */
Benjamin Petersonc4607ae2011-07-29 18:19:43 -05001670 0, /*tp_call */
1671 0, /*tp_str */
1672 0, /*tp_getattro */
1673 0, /*tp_setattro */
1674 0, /*tp_as_buffer */
1675 Py_TPFLAGS_DEFAULT, /*tp_flags */
1676 0, /*tp_doc */
1677 0, /*tp_traverse */
1678 0, /*tp_clear */
1679 0, /*tp_richcompare */
1680 0, /*tp_weaklistoffset */
1681 0, /*tp_iter */
1682 0, /*tp_iternext */
1683 0, /*tp_methods */
1684 0, /*tp_members */
1685 0, /*tp_getset */
1686 0, /*tp_base */
1687 0, /*tp_dict */
1688 0, /*tp_descr_get */
1689 0, /*tp_descr_set */
1690 0, /*tp_dictoffset */
1691 0, /*tp_init */
1692 0, /*tp_alloc */
1693 none_new, /*tp_new */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001694};
1695
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001696PyObject _Py_NoneStruct = {
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00001697 _PyObject_EXTRA_INIT
Alexandre Vassalotti65846c62013-11-30 17:55:48 -08001698 1, &_PyNone_Type
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001699};
1700
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +00001701/* NotImplemented is an object that can be used to signal that an
1702 operation is not implemented for the given type combination. */
1703
1704static PyObject *
1705NotImplemented_repr(PyObject *op)
1706{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001707 return PyUnicode_FromString("NotImplemented");
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +00001708}
1709
Benjamin Peterson18d7d7a2011-07-29 18:27:44 -05001710static PyObject *
Siddhesh Poyarekar55edd0c2018-04-30 00:29:33 +05301711NotImplemented_reduce(PyObject *op, PyObject *Py_UNUSED(ignored))
Alexandre Vassalottic49477b2013-11-24 02:53:45 -08001712{
1713 return PyUnicode_FromString("NotImplemented");
1714}
1715
1716static PyMethodDef notimplemented_methods[] = {
Siddhesh Poyarekar55edd0c2018-04-30 00:29:33 +05301717 {"__reduce__", NotImplemented_reduce, METH_NOARGS, NULL},
Alexandre Vassalottic49477b2013-11-24 02:53:45 -08001718 {NULL, NULL}
1719};
1720
1721static PyObject *
Benjamin Peterson18d7d7a2011-07-29 18:27:44 -05001722notimplemented_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
1723{
Serhiy Storchaka5ab81d72016-12-16 16:18:57 +02001724 if (PyTuple_GET_SIZE(args) || (kwargs && PyDict_GET_SIZE(kwargs))) {
Benjamin Peterson18d7d7a2011-07-29 18:27:44 -05001725 PyErr_SetString(PyExc_TypeError, "NotImplementedType takes no arguments");
1726 return NULL;
1727 }
Brian Curtindfc80e32011-08-10 20:28:54 -05001728 Py_RETURN_NOTIMPLEMENTED;
Benjamin Peterson18d7d7a2011-07-29 18:27:44 -05001729}
1730
Armin Ronacher226b1db2012-10-06 14:28:58 +02001731static void
1732notimplemented_dealloc(PyObject* ignore)
1733{
1734 /* This should never get called, but we also don't want to SEGV if
1735 * we accidentally decref NotImplemented out of existence.
1736 */
1737 Py_FatalError("deallocating NotImplemented");
1738}
1739
Alexandre Vassalotti65846c62013-11-30 17:55:48 -08001740PyTypeObject _PyNotImplemented_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001741 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1742 "NotImplementedType",
1743 0,
1744 0,
Armin Ronacher226b1db2012-10-06 14:28:58 +02001745 notimplemented_dealloc, /*tp_dealloc*/ /*never called*/
Jeroen Demeyer530f5062019-05-31 04:13:39 +02001746 0, /*tp_vectorcall_offset*/
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001747 0, /*tp_getattr*/
1748 0, /*tp_setattr*/
Jeroen Demeyer530f5062019-05-31 04:13:39 +02001749 0, /*tp_as_async*/
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001750 NotImplemented_repr, /*tp_repr*/
1751 0, /*tp_as_number*/
1752 0, /*tp_as_sequence*/
1753 0, /*tp_as_mapping*/
1754 0, /*tp_hash */
Benjamin Peterson18d7d7a2011-07-29 18:27:44 -05001755 0, /*tp_call */
1756 0, /*tp_str */
1757 0, /*tp_getattro */
1758 0, /*tp_setattro */
1759 0, /*tp_as_buffer */
1760 Py_TPFLAGS_DEFAULT, /*tp_flags */
1761 0, /*tp_doc */
1762 0, /*tp_traverse */
1763 0, /*tp_clear */
1764 0, /*tp_richcompare */
1765 0, /*tp_weaklistoffset */
1766 0, /*tp_iter */
1767 0, /*tp_iternext */
Alexandre Vassalottic49477b2013-11-24 02:53:45 -08001768 notimplemented_methods, /*tp_methods */
Benjamin Peterson18d7d7a2011-07-29 18:27:44 -05001769 0, /*tp_members */
1770 0, /*tp_getset */
1771 0, /*tp_base */
1772 0, /*tp_dict */
1773 0, /*tp_descr_get */
1774 0, /*tp_descr_set */
1775 0, /*tp_dictoffset */
1776 0, /*tp_init */
1777 0, /*tp_alloc */
1778 notimplemented_new, /*tp_new */
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +00001779};
1780
1781PyObject _Py_NotImplementedStruct = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001782 _PyObject_EXTRA_INIT
Alexandre Vassalotti65846c62013-11-30 17:55:48 -08001783 1, &_PyNotImplemented_Type
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +00001784};
1785
Victor Stinner331a6a52019-05-27 16:39:22 +02001786PyStatus
Victor Stinnerab672812019-01-23 15:04:40 +01001787_PyTypes_Init(void)
Guido van Rossumba21a492001-08-16 08:17:26 +00001788{
Victor Stinner6d43f6f2019-01-22 21:18:05 +01001789#define INIT_TYPE(TYPE, NAME) \
1790 do { \
1791 if (PyType_Ready(TYPE) < 0) { \
Victor Stinner331a6a52019-05-27 16:39:22 +02001792 return _PyStatus_ERR("Can't initialize " NAME " type"); \
Victor Stinner6d43f6f2019-01-22 21:18:05 +01001793 } \
1794 } while (0)
Victor Stinner5a1bb4e2014-06-02 14:10:59 +02001795
Victor Stinner6d43f6f2019-01-22 21:18:05 +01001796 INIT_TYPE(&PyBaseObject_Type, "object");
1797 INIT_TYPE(&PyType_Type, "type");
1798 INIT_TYPE(&_PyWeakref_RefType, "weakref");
1799 INIT_TYPE(&_PyWeakref_CallableProxyType, "callable weakref proxy");
1800 INIT_TYPE(&_PyWeakref_ProxyType, "weakref proxy");
1801 INIT_TYPE(&PyLong_Type, "int");
1802 INIT_TYPE(&PyBool_Type, "bool");
1803 INIT_TYPE(&PyByteArray_Type, "bytearray");
1804 INIT_TYPE(&PyBytes_Type, "str");
1805 INIT_TYPE(&PyList_Type, "list");
1806 INIT_TYPE(&_PyNone_Type, "None");
1807 INIT_TYPE(&_PyNotImplemented_Type, "NotImplemented");
1808 INIT_TYPE(&PyTraceBack_Type, "traceback");
1809 INIT_TYPE(&PySuper_Type, "super");
1810 INIT_TYPE(&PyRange_Type, "range");
1811 INIT_TYPE(&PyDict_Type, "dict");
1812 INIT_TYPE(&PyDictKeys_Type, "dict keys");
1813 INIT_TYPE(&PyDictValues_Type, "dict values");
1814 INIT_TYPE(&PyDictItems_Type, "dict items");
1815 INIT_TYPE(&PyDictRevIterKey_Type, "reversed dict keys");
1816 INIT_TYPE(&PyDictRevIterValue_Type, "reversed dict values");
1817 INIT_TYPE(&PyDictRevIterItem_Type, "reversed dict items");
1818 INIT_TYPE(&PyODict_Type, "OrderedDict");
1819 INIT_TYPE(&PyODictKeys_Type, "odict_keys");
1820 INIT_TYPE(&PyODictItems_Type, "odict_items");
1821 INIT_TYPE(&PyODictValues_Type, "odict_values");
1822 INIT_TYPE(&PyODictIter_Type, "odict_keyiterator");
1823 INIT_TYPE(&PySet_Type, "set");
1824 INIT_TYPE(&PyUnicode_Type, "str");
1825 INIT_TYPE(&PySlice_Type, "slice");
1826 INIT_TYPE(&PyStaticMethod_Type, "static method");
1827 INIT_TYPE(&PyComplex_Type, "complex");
1828 INIT_TYPE(&PyFloat_Type, "float");
1829 INIT_TYPE(&PyFrozenSet_Type, "frozenset");
1830 INIT_TYPE(&PyProperty_Type, "property");
1831 INIT_TYPE(&_PyManagedBuffer_Type, "managed buffer");
1832 INIT_TYPE(&PyMemoryView_Type, "memoryview");
1833 INIT_TYPE(&PyTuple_Type, "tuple");
1834 INIT_TYPE(&PyEnum_Type, "enumerate");
1835 INIT_TYPE(&PyReversed_Type, "reversed");
1836 INIT_TYPE(&PyStdPrinter_Type, "StdPrinter");
1837 INIT_TYPE(&PyCode_Type, "code");
1838 INIT_TYPE(&PyFrame_Type, "frame");
1839 INIT_TYPE(&PyCFunction_Type, "builtin function");
1840 INIT_TYPE(&PyMethod_Type, "method");
1841 INIT_TYPE(&PyFunction_Type, "function");
1842 INIT_TYPE(&PyDictProxy_Type, "dict proxy");
1843 INIT_TYPE(&PyGen_Type, "generator");
1844 INIT_TYPE(&PyGetSetDescr_Type, "get-set descriptor");
1845 INIT_TYPE(&PyWrapperDescr_Type, "wrapper");
1846 INIT_TYPE(&_PyMethodWrapper_Type, "method wrapper");
1847 INIT_TYPE(&PyEllipsis_Type, "ellipsis");
1848 INIT_TYPE(&PyMemberDescr_Type, "member descriptor");
1849 INIT_TYPE(&_PyNamespace_Type, "namespace");
1850 INIT_TYPE(&PyCapsule_Type, "capsule");
1851 INIT_TYPE(&PyLongRangeIter_Type, "long range iterator");
1852 INIT_TYPE(&PyCell_Type, "cell");
1853 INIT_TYPE(&PyInstanceMethod_Type, "instance method");
1854 INIT_TYPE(&PyClassMethodDescr_Type, "class method descr");
1855 INIT_TYPE(&PyMethodDescr_Type, "method descr");
1856 INIT_TYPE(&PyCallIter_Type, "call iter");
1857 INIT_TYPE(&PySeqIter_Type, "sequence iterator");
Antoine Pitrou91f43802019-05-26 17:10:09 +02001858 INIT_TYPE(&PyPickleBuffer_Type, "pickle.PickleBuffer");
Victor Stinner6d43f6f2019-01-22 21:18:05 +01001859 INIT_TYPE(&PyCoro_Type, "coroutine");
1860 INIT_TYPE(&_PyCoroWrapper_Type, "coroutine wrapper");
Eric Snowc11183c2019-03-15 16:35:46 -06001861 INIT_TYPE(&_PyInterpreterID_Type, "interpreter ID");
Victor Stinner331a6a52019-05-27 16:39:22 +02001862 return _PyStatus_OK();
Guido van Rossumba21a492001-08-16 08:17:26 +00001863
Victor Stinner6d43f6f2019-01-22 21:18:05 +01001864#undef INIT_TYPE
Guido van Rossumba21a492001-08-16 08:17:26 +00001865}
1866
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001867
Guido van Rossum84a90321996-05-22 16:34:47 +00001868#ifdef Py_TRACE_REFS
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001869
Guido van Rossumaacdc9d1996-08-12 21:32:12 +00001870void
Fred Drake100814d2000-07-09 15:48:49 +00001871_Py_NewReference(PyObject *op)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001872{
Victor Stinner9e00e802018-10-25 13:31:16 +02001873 if (_Py_tracemalloc_config.tracing) {
1874 _PyTraceMalloc_NewReference(op);
1875 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001876 _Py_INC_REFTOTAL;
1877 op->ob_refcnt = 1;
1878 _Py_AddToAllObjects(op, 1);
1879 _Py_INC_TPALLOCS(op);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001880}
1881
Guido van Rossumaacdc9d1996-08-12 21:32:12 +00001882void
Antoine Pitrou9ed5f272013-08-13 20:18:52 +02001883_Py_ForgetReference(PyObject *op)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001884{
Guido van Rossumbffd6832000-01-20 22:32:56 +00001885#ifdef SLOW_UNREF_CHECK
Antoine Pitrou9ed5f272013-08-13 20:18:52 +02001886 PyObject *p;
Guido van Rossumbffd6832000-01-20 22:32:56 +00001887#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001888 if (op->ob_refcnt < 0)
1889 Py_FatalError("UNREF negative refcnt");
1890 if (op == &refchain ||
1891 op->_ob_prev->_ob_next != op || op->_ob_next->_ob_prev != op) {
1892 fprintf(stderr, "* ob\n");
1893 _PyObject_Dump(op);
1894 fprintf(stderr, "* op->_ob_prev->_ob_next\n");
1895 _PyObject_Dump(op->_ob_prev->_ob_next);
1896 fprintf(stderr, "* op->_ob_next->_ob_prev\n");
1897 _PyObject_Dump(op->_ob_next->_ob_prev);
1898 Py_FatalError("UNREF invalid object");
1899 }
Guido van Rossum2e8f6141992-09-03 20:32:55 +00001900#ifdef SLOW_UNREF_CHECK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001901 for (p = refchain._ob_next; p != &refchain; p = p->_ob_next) {
1902 if (p == op)
1903 break;
1904 }
1905 if (p == &refchain) /* Not found */
1906 Py_FatalError("UNREF unknown object");
Guido van Rossum2e8f6141992-09-03 20:32:55 +00001907#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001908 op->_ob_next->_ob_prev = op->_ob_prev;
1909 op->_ob_prev->_ob_next = op->_ob_next;
1910 op->_ob_next = op->_ob_prev = NULL;
1911 _Py_INC_TPFREES(op);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001912}
1913
Tim Peters269b2a62003-04-17 19:52:29 +00001914/* Print all live objects. Because PyObject_Print is called, the
1915 * interpreter must be in a healthy state.
1916 */
Guido van Rossumaacdc9d1996-08-12 21:32:12 +00001917void
Fred Drake100814d2000-07-09 15:48:49 +00001918_Py_PrintReferences(FILE *fp)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001919{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001920 PyObject *op;
1921 fprintf(fp, "Remaining objects:\n");
1922 for (op = refchain._ob_next; op != &refchain; op = op->_ob_next) {
Zackery Spytz1a2252e2019-05-06 10:56:51 -06001923 fprintf(fp, "%p [%" PY_FORMAT_SIZE_T "d] ", (void *)op, op->ob_refcnt);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001924 if (PyObject_Print(op, fp, 0) != 0)
1925 PyErr_Clear();
1926 putc('\n', fp);
1927 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001928}
1929
Tim Peters269b2a62003-04-17 19:52:29 +00001930/* Print the addresses of all live objects. Unlike _Py_PrintReferences, this
1931 * doesn't make any calls to the Python C API, so is always safe to call.
1932 */
1933void
1934_Py_PrintReferenceAddresses(FILE *fp)
1935{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001936 PyObject *op;
1937 fprintf(fp, "Remaining object addresses:\n");
1938 for (op = refchain._ob_next; op != &refchain; op = op->_ob_next)
Zackery Spytz1a2252e2019-05-06 10:56:51 -06001939 fprintf(fp, "%p [%" PY_FORMAT_SIZE_T "d] %s\n", (void *)op,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001940 op->ob_refcnt, Py_TYPE(op)->tp_name);
Tim Peters269b2a62003-04-17 19:52:29 +00001941}
1942
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +00001943PyObject *
Fred Drake100814d2000-07-09 15:48:49 +00001944_Py_GetObjects(PyObject *self, PyObject *args)
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +00001945{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001946 int i, n;
1947 PyObject *t = NULL;
1948 PyObject *res, *op;
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +00001949
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001950 if (!PyArg_ParseTuple(args, "i|O", &n, &t))
1951 return NULL;
1952 op = refchain._ob_next;
1953 res = PyList_New(0);
1954 if (res == NULL)
1955 return NULL;
1956 for (i = 0; (n == 0 || i < n) && op != &refchain; i++) {
1957 while (op == self || op == args || op == res || op == t ||
1958 (t != NULL && Py_TYPE(op) != (PyTypeObject *) t)) {
1959 op = op->_ob_next;
1960 if (op == &refchain)
1961 return res;
1962 }
1963 if (PyList_Append(res, op) < 0) {
1964 Py_DECREF(res);
1965 return NULL;
1966 }
1967 op = op->_ob_next;
1968 }
1969 return res;
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +00001970}
1971
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001972#endif
Guido van Rossum97ead3f1996-01-12 01:24:09 +00001973
Benjamin Petersonb173f782009-05-05 22:31:58 +00001974
Guido van Rossum84a90321996-05-22 16:34:47 +00001975/* Hack to force loading of abstract.o */
Martin v. Löwis18e16552006-02-15 17:27:45 +00001976Py_ssize_t (*_Py_abstract_hack)(PyObject *) = PyObject_Size;
Guido van Rossume09fb551997-08-05 02:04:34 +00001977
1978
David Malcolm49526f42012-06-22 14:55:41 -04001979void
1980_PyObject_DebugTypeStats(FILE *out)
1981{
David Malcolm49526f42012-06-22 14:55:41 -04001982 _PyDict_DebugMallocStats(out);
1983 _PyFloat_DebugMallocStats(out);
1984 _PyFrame_DebugMallocStats(out);
1985 _PyList_DebugMallocStats(out);
David Malcolm49526f42012-06-22 14:55:41 -04001986 _PyTuple_DebugMallocStats(out);
1987}
Guido van Rossumb18618d2000-05-03 23:44:39 +00001988
Guido van Rossum86610361998-04-10 22:32:46 +00001989/* These methods are used to control infinite recursion in repr, str, print,
1990 etc. Container objects that may recursively contain themselves,
Martin Panter8d56c022016-05-29 04:13:35 +00001991 e.g. builtin dictionaries and lists, should use Py_ReprEnter() and
Guido van Rossum86610361998-04-10 22:32:46 +00001992 Py_ReprLeave() to avoid infinite recursion.
1993
1994 Py_ReprEnter() returns 0 the first time it is called for a particular
1995 object and 1 every time thereafter. It returns -1 if an exception
1996 occurred. Py_ReprLeave() has no return value.
1997
1998 See dictobject.c and listobject.c for examples of use.
1999*/
2000
Guido van Rossum86610361998-04-10 22:32:46 +00002001int
Fred Drake100814d2000-07-09 15:48:49 +00002002Py_ReprEnter(PyObject *obj)
Guido van Rossum86610361998-04-10 22:32:46 +00002003{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002004 PyObject *dict;
2005 PyObject *list;
2006 Py_ssize_t i;
Guido van Rossum86610361998-04-10 22:32:46 +00002007
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002008 dict = PyThreadState_GetDict();
Antoine Pitrou04d17d32014-03-31 22:04:38 +02002009 /* Ignore a missing thread-state, so that this function can be called
2010 early on startup. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002011 if (dict == NULL)
2012 return 0;
Serhiy Storchakaa24107b2019-02-25 17:59:46 +02002013 list = _PyDict_GetItemIdWithError(dict, &PyId_Py_Repr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002014 if (list == NULL) {
Serhiy Storchakaa24107b2019-02-25 17:59:46 +02002015 if (PyErr_Occurred()) {
2016 return -1;
2017 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002018 list = PyList_New(0);
2019 if (list == NULL)
2020 return -1;
Victor Stinner7a07e452013-11-06 18:57:29 +01002021 if (_PyDict_SetItemId(dict, &PyId_Py_Repr, list) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002022 return -1;
2023 Py_DECREF(list);
2024 }
2025 i = PyList_GET_SIZE(list);
2026 while (--i >= 0) {
2027 if (PyList_GET_ITEM(list, i) == obj)
2028 return 1;
2029 }
Victor Stinnere901d1f2013-07-17 21:58:41 +02002030 if (PyList_Append(list, obj) < 0)
2031 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002032 return 0;
Guido van Rossum86610361998-04-10 22:32:46 +00002033}
2034
2035void
Fred Drake100814d2000-07-09 15:48:49 +00002036Py_ReprLeave(PyObject *obj)
Guido van Rossum86610361998-04-10 22:32:46 +00002037{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002038 PyObject *dict;
2039 PyObject *list;
2040 Py_ssize_t i;
Victor Stinner1b634932013-07-16 22:24:44 +02002041 PyObject *error_type, *error_value, *error_traceback;
2042
2043 PyErr_Fetch(&error_type, &error_value, &error_traceback);
Guido van Rossum86610361998-04-10 22:32:46 +00002044
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002045 dict = PyThreadState_GetDict();
2046 if (dict == NULL)
Victor Stinner1b634932013-07-16 22:24:44 +02002047 goto finally;
2048
Serhiy Storchakaa24107b2019-02-25 17:59:46 +02002049 list = _PyDict_GetItemIdWithError(dict, &PyId_Py_Repr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002050 if (list == NULL || !PyList_Check(list))
Victor Stinner1b634932013-07-16 22:24:44 +02002051 goto finally;
2052
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002053 i = PyList_GET_SIZE(list);
2054 /* Count backwards because we always expect obj to be list[-1] */
2055 while (--i >= 0) {
2056 if (PyList_GET_ITEM(list, i) == obj) {
2057 PyList_SetSlice(list, i, i + 1, NULL);
2058 break;
2059 }
2060 }
Victor Stinner1b634932013-07-16 22:24:44 +02002061
2062finally:
2063 /* ignore exceptions because there is no way to report them. */
2064 PyErr_Restore(error_type, error_value, error_traceback);
Guido van Rossum86610361998-04-10 22:32:46 +00002065}
Guido van Rossumd724b232000-03-13 16:01:29 +00002066
Tim Peters803526b2002-07-07 05:13:56 +00002067/* Trashcan support. */
Guido van Rossumd724b232000-03-13 16:01:29 +00002068
Tim Peters803526b2002-07-07 05:13:56 +00002069/* Add op to the _PyTrash_delete_later list. Called when the current
2070 * call-stack depth gets large. op must be a currently untracked gc'ed
2071 * object, with refcount 0. Py_DECREF must already have been called on it.
2072 */
Guido van Rossumd724b232000-03-13 16:01:29 +00002073void
Fred Drake100814d2000-07-09 15:48:49 +00002074_PyTrash_deposit_object(PyObject *op)
Guido van Rossumd724b232000-03-13 16:01:29 +00002075{
Victor Stinner24702042018-10-26 17:16:37 +02002076 _PyObject_ASSERT(op, PyObject_IS_GC(op));
2077 _PyObject_ASSERT(op, !_PyObject_GC_IS_TRACKED(op));
2078 _PyObject_ASSERT(op, op->ob_refcnt == 0);
INADA Naoki5ac9e6e2018-07-10 17:19:53 +09002079 _PyGCHead_SET_PREV(_Py_AS_GC(op), _PyRuntime.gc.trash_delete_later);
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002080 _PyRuntime.gc.trash_delete_later = op;
Guido van Rossumd724b232000-03-13 16:01:29 +00002081}
2082
Antoine Pitrou2b0218a2012-09-06 00:59:49 +02002083/* The equivalent API, using per-thread state recursion info */
2084void
2085_PyTrash_thread_deposit_object(PyObject *op)
2086{
Victor Stinner50b48572018-11-01 01:51:40 +01002087 PyThreadState *tstate = _PyThreadState_GET();
Victor Stinner24702042018-10-26 17:16:37 +02002088 _PyObject_ASSERT(op, PyObject_IS_GC(op));
2089 _PyObject_ASSERT(op, !_PyObject_GC_IS_TRACKED(op));
2090 _PyObject_ASSERT(op, op->ob_refcnt == 0);
INADA Naoki5ac9e6e2018-07-10 17:19:53 +09002091 _PyGCHead_SET_PREV(_Py_AS_GC(op), tstate->trash_delete_later);
Antoine Pitrou2b0218a2012-09-06 00:59:49 +02002092 tstate->trash_delete_later = op;
2093}
2094
Min ho Kimc4cacc82019-07-31 08:16:13 +10002095/* Deallocate all the objects in the _PyTrash_delete_later list. Called when
Tim Peters803526b2002-07-07 05:13:56 +00002096 * the call-stack unwinds again.
2097 */
Guido van Rossumd724b232000-03-13 16:01:29 +00002098void
Fred Drake100814d2000-07-09 15:48:49 +00002099_PyTrash_destroy_chain(void)
Guido van Rossumd724b232000-03-13 16:01:29 +00002100{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002101 while (_PyRuntime.gc.trash_delete_later) {
2102 PyObject *op = _PyRuntime.gc.trash_delete_later;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002103 destructor dealloc = Py_TYPE(op)->tp_dealloc;
Neil Schemenauerf589c052002-03-29 03:05:54 +00002104
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002105 _PyRuntime.gc.trash_delete_later =
INADA Naoki5ac9e6e2018-07-10 17:19:53 +09002106 (PyObject*) _PyGCHead_PREV(_Py_AS_GC(op));
Neil Schemenauerf589c052002-03-29 03:05:54 +00002107
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002108 /* Call the deallocator directly. This used to try to
2109 * fool Py_DECREF into calling it indirectly, but
2110 * Py_DECREF was already called on this object, and in
2111 * assorted non-release builds calling Py_DECREF again ends
2112 * up distorting allocation statistics.
2113 */
Victor Stinner24702042018-10-26 17:16:37 +02002114 _PyObject_ASSERT(op, op->ob_refcnt == 0);
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002115 ++_PyRuntime.gc.trash_delete_nesting;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002116 (*dealloc)(op);
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002117 --_PyRuntime.gc.trash_delete_nesting;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002118 }
Guido van Rossumd724b232000-03-13 16:01:29 +00002119}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002120
Antoine Pitrou2b0218a2012-09-06 00:59:49 +02002121/* The equivalent API, using per-thread state recursion info */
2122void
2123_PyTrash_thread_destroy_chain(void)
2124{
Victor Stinner50b48572018-11-01 01:51:40 +01002125 PyThreadState *tstate = _PyThreadState_GET();
Xiang Zhanga66f9c62017-05-13 13:36:14 +08002126 /* We need to increase trash_delete_nesting here, otherwise,
2127 _PyTrash_thread_destroy_chain will be called recursively
2128 and then possibly crash. An example that may crash without
2129 increase:
2130 N = 500000 # need to be large enough
2131 ob = object()
2132 tups = [(ob,) for i in range(N)]
2133 for i in range(49):
2134 tups = [(tup,) for tup in tups]
2135 del tups
2136 */
2137 assert(tstate->trash_delete_nesting == 0);
2138 ++tstate->trash_delete_nesting;
Antoine Pitrou2b0218a2012-09-06 00:59:49 +02002139 while (tstate->trash_delete_later) {
2140 PyObject *op = tstate->trash_delete_later;
2141 destructor dealloc = Py_TYPE(op)->tp_dealloc;
2142
2143 tstate->trash_delete_later =
INADA Naoki5ac9e6e2018-07-10 17:19:53 +09002144 (PyObject*) _PyGCHead_PREV(_Py_AS_GC(op));
Antoine Pitrou2b0218a2012-09-06 00:59:49 +02002145
2146 /* Call the deallocator directly. This used to try to
2147 * fool Py_DECREF into calling it indirectly, but
2148 * Py_DECREF was already called on this object, and in
2149 * assorted non-release builds calling Py_DECREF again ends
2150 * up distorting allocation statistics.
2151 */
Victor Stinner24702042018-10-26 17:16:37 +02002152 _PyObject_ASSERT(op, op->ob_refcnt == 0);
Antoine Pitrou2b0218a2012-09-06 00:59:49 +02002153 (*dealloc)(op);
Xiang Zhanga66f9c62017-05-13 13:36:14 +08002154 assert(tstate->trash_delete_nesting == 1);
Antoine Pitrou2b0218a2012-09-06 00:59:49 +02002155 }
Xiang Zhanga66f9c62017-05-13 13:36:14 +08002156 --tstate->trash_delete_nesting;
Antoine Pitrou2b0218a2012-09-06 00:59:49 +02002157}
2158
Victor Stinner626bff82018-10-25 17:31:10 +02002159
2160void
Victor Stinnerf1d002c2018-11-21 23:53:44 +01002161_PyObject_AssertFailed(PyObject *obj, const char *expr, const char *msg,
Victor Stinner626bff82018-10-25 17:31:10 +02002162 const char *file, int line, const char *function)
2163{
Victor Stinnerf1d002c2018-11-21 23:53:44 +01002164 fprintf(stderr, "%s:%d: ", file, line);
2165 if (function) {
2166 fprintf(stderr, "%s: ", function);
2167 }
Victor Stinner626bff82018-10-25 17:31:10 +02002168 fflush(stderr);
Victor Stinner68762572019-10-07 18:42:01 +02002169
Victor Stinnerf1d002c2018-11-21 23:53:44 +01002170 if (expr) {
2171 fprintf(stderr, "Assertion \"%s\" failed", expr);
Victor Stinner626bff82018-10-25 17:31:10 +02002172 }
2173 else {
Victor Stinnerf1d002c2018-11-21 23:53:44 +01002174 fprintf(stderr, "Assertion failed");
Victor Stinner626bff82018-10-25 17:31:10 +02002175 }
2176 fflush(stderr);
Victor Stinner68762572019-10-07 18:42:01 +02002177
Victor Stinnerf1d002c2018-11-21 23:53:44 +01002178 if (msg) {
2179 fprintf(stderr, ": %s", msg);
2180 }
2181 fprintf(stderr, "\n");
2182 fflush(stderr);
Victor Stinner626bff82018-10-25 17:31:10 +02002183
Victor Stinner68762572019-10-07 18:42:01 +02002184 if (_PyObject_IsFreed(obj)) {
Victor Stinner626bff82018-10-25 17:31:10 +02002185 /* It seems like the object memory has been freed:
2186 don't access it to prevent a segmentation fault. */
Victor Stinnerb39afb72019-09-17 23:36:28 +02002187 fprintf(stderr, "<object at %p is freed>\n", obj);
Victor Stinner68762572019-10-07 18:42:01 +02002188 fflush(stderr);
Victor Stinner626bff82018-10-25 17:31:10 +02002189 }
2190 else {
penguindustin96466302019-05-06 14:57:17 -04002191 /* Display the traceback where the object has been allocated.
Victor Stinner626bff82018-10-25 17:31:10 +02002192 Do it before dumping repr(obj), since repr() is more likely
2193 to crash than dumping the traceback. */
2194 void *ptr;
2195 PyTypeObject *type = Py_TYPE(obj);
2196 if (PyType_IS_GC(type)) {
2197 ptr = (void *)((char *)obj - sizeof(PyGC_Head));
2198 }
2199 else {
2200 ptr = (void *)obj;
2201 }
2202 _PyMem_DumpTraceback(fileno(stderr), ptr);
2203
2204 /* This might succeed or fail, but we're about to abort, so at least
2205 try to provide any extra info we can: */
2206 _PyObject_Dump(obj);
Victor Stinner77753492019-10-07 23:44:05 +02002207
2208 fprintf(stderr, "\n");
2209 fflush(stderr);
Victor Stinner626bff82018-10-25 17:31:10 +02002210 }
Victor Stinner626bff82018-10-25 17:31:10 +02002211
2212 Py_FatalError("_PyObject_AssertFailed");
2213}
2214
Victor Stinner3c09dca2018-10-30 14:48:26 +01002215
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00002216#undef _Py_Dealloc
Victor Stinner3c09dca2018-10-30 14:48:26 +01002217
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00002218void
2219_Py_Dealloc(PyObject *op)
2220{
Victor Stinner3c09dca2018-10-30 14:48:26 +01002221 destructor dealloc = Py_TYPE(op)->tp_dealloc;
2222#ifdef Py_TRACE_REFS
2223 _Py_ForgetReference(op);
2224#else
2225 _Py_INC_TPFREES(op);
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00002226#endif
Victor Stinner3c09dca2018-10-30 14:48:26 +01002227 (*dealloc)(op);
2228}
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00002229
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002230#ifdef __cplusplus
2231}
2232#endif