blob: be12be50bd7fc720ba970f908f6ee2030bb80834 [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"
Benjamin Petersonfd838e62009-04-20 02:09:13 +00005#include "frameobject.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00006
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00007#ifdef __cplusplus
8extern "C" {
9#endif
10
Victor Stinnerbd303c12013-11-07 23:07:29 +010011_Py_IDENTIFIER(Py_Repr);
12_Py_IDENTIFIER(__bytes__);
13_Py_IDENTIFIER(__dir__);
14_Py_IDENTIFIER(__isabstractmethod__);
15_Py_IDENTIFIER(builtins);
16
Tim Peters34592512002-07-11 06:23:50 +000017#ifdef Py_REF_DEBUG
Neal Norwitz84632ee2006-03-04 20:00:59 +000018Py_ssize_t _Py_RefTotal;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000019
20Py_ssize_t
21_Py_GetRefTotal(void)
22{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000023 PyObject *o;
24 Py_ssize_t total = _Py_RefTotal;
25 /* ignore the references to the dummy object of the dicts and sets
26 because they are not reliable and not useful (now that the
27 hash table code is well-tested) */
28 o = _PyDict_Dummy();
29 if (o != NULL)
30 total -= o->ob_refcnt;
Antoine Pitrou9d952542013-08-24 21:07:07 +020031 o = _PySet_Dummy;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000032 if (o != NULL)
33 total -= o->ob_refcnt;
34 return total;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000035}
Nick Coghland6009512014-11-20 21:39:37 +100036
37void
38_PyDebug_PrintTotalRefs(void) {
39 PyObject *xoptions, *value;
40 _Py_IDENTIFIER(showrefcount);
41
42 xoptions = PySys_GetXOptions();
43 if (xoptions == NULL)
44 return;
45 value = _PyDict_GetItemId(xoptions, &PyId_showrefcount);
46 if (value == Py_True)
47 fprintf(stderr,
48 "[%" PY_FORMAT_SIZE_T "d refs, "
49 "%" PY_FORMAT_SIZE_T "d blocks]\n",
50 _Py_GetRefTotal(), _Py_GetAllocatedBlocks());
51}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000052#endif /* Py_REF_DEBUG */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000053
Guido van Rossum3f5da241990-12-20 15:06:42 +000054/* Object allocation routines used by NEWOBJ and NEWVAROBJ macros.
55 These are used by the individual routines for object creation.
56 Do not call them otherwise, they do not initialize the object! */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000057
Tim Peters78be7992003-03-23 02:51:01 +000058#ifdef Py_TRACE_REFS
Tim Peters7571a0f2003-03-23 17:52:28 +000059/* Head of circular doubly-linked list of all objects. These are linked
60 * together via the _ob_prev and _ob_next members of a PyObject, which
61 * exist only in a Py_TRACE_REFS build.
62 */
Tim Peters78be7992003-03-23 02:51:01 +000063static PyObject refchain = {&refchain, &refchain};
Tim Peters36eb4df2003-03-23 03:33:13 +000064
Tim Peters7571a0f2003-03-23 17:52:28 +000065/* Insert op at the front of the list of all objects. If force is true,
66 * op is added even if _ob_prev and _ob_next are non-NULL already. If
67 * force is false amd _ob_prev or _ob_next are non-NULL, do nothing.
68 * force should be true if and only if op points to freshly allocated,
69 * uninitialized memory, or you've unlinked op from the list and are
Tim Peters51f8d382003-03-23 18:06:08 +000070 * relinking it into the front.
Tim Peters7571a0f2003-03-23 17:52:28 +000071 * Note that objects are normally added to the list via _Py_NewReference,
72 * which is called by PyObject_Init. Not all objects are initialized that
73 * way, though; exceptions include statically allocated type objects, and
74 * statically allocated singletons (like Py_True and Py_None).
75 */
Tim Peters36eb4df2003-03-23 03:33:13 +000076void
Tim Peters7571a0f2003-03-23 17:52:28 +000077_Py_AddToAllObjects(PyObject *op, int force)
Tim Peters36eb4df2003-03-23 03:33:13 +000078{
Tim Peters7571a0f2003-03-23 17:52:28 +000079#ifdef Py_DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000080 if (!force) {
81 /* If it's initialized memory, op must be in or out of
82 * the list unambiguously.
83 */
84 assert((op->_ob_prev == NULL) == (op->_ob_next == NULL));
85 }
Tim Peters78be7992003-03-23 02:51:01 +000086#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000087 if (force || op->_ob_prev == NULL) {
88 op->_ob_next = refchain._ob_next;
89 op->_ob_prev = &refchain;
90 refchain._ob_next->_ob_prev = op;
91 refchain._ob_next = op;
92 }
Tim Peters7571a0f2003-03-23 17:52:28 +000093}
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000094#endif /* Py_TRACE_REFS */
Tim Peters78be7992003-03-23 02:51:01 +000095
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +000096#ifdef COUNT_ALLOCS
Guido van Rossumc0b618a1997-05-02 03:12:38 +000097static PyTypeObject *type_list;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000098/* All types are added to type_list, at least when
99 they get one object created. That makes them
100 immortal, which unfortunately contributes to
101 garbage itself. If unlist_types_without_objects
102 is set, they will be removed from the type_list
103 once the last object is deallocated. */
Benjamin Petersona4a37fe2009-01-11 17:13:55 +0000104static int unlist_types_without_objects;
105extern Py_ssize_t tuple_zero_allocs, fast_tuple_allocs;
106extern Py_ssize_t quick_int_allocs, quick_neg_int_allocs;
107extern Py_ssize_t null_strings, one_strings;
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000108void
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000109dump_counts(FILE* f)
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000110{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000111 PyTypeObject *tp;
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000112
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000113 for (tp = type_list; tp; tp = tp->tp_next)
114 fprintf(f, "%s alloc'd: %" PY_FORMAT_SIZE_T "d, "
115 "freed: %" PY_FORMAT_SIZE_T "d, "
116 "max in use: %" PY_FORMAT_SIZE_T "d\n",
117 tp->tp_name, tp->tp_allocs, tp->tp_frees,
118 tp->tp_maxalloc);
119 fprintf(f, "fast tuple allocs: %" PY_FORMAT_SIZE_T "d, "
120 "empty: %" PY_FORMAT_SIZE_T "d\n",
121 fast_tuple_allocs, tuple_zero_allocs);
122 fprintf(f, "fast int allocs: pos: %" PY_FORMAT_SIZE_T "d, "
123 "neg: %" PY_FORMAT_SIZE_T "d\n",
124 quick_int_allocs, quick_neg_int_allocs);
125 fprintf(f, "null strings: %" PY_FORMAT_SIZE_T "d, "
126 "1-strings: %" PY_FORMAT_SIZE_T "d\n",
127 null_strings, one_strings);
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000128}
129
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +0000130PyObject *
Fred Drake100814d2000-07-09 15:48:49 +0000131get_counts(void)
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +0000132{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000133 PyTypeObject *tp;
134 PyObject *result;
135 PyObject *v;
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +0000136
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000137 result = PyList_New(0);
138 if (result == NULL)
139 return NULL;
140 for (tp = type_list; tp; tp = tp->tp_next) {
141 v = Py_BuildValue("(snnn)", tp->tp_name, tp->tp_allocs,
142 tp->tp_frees, tp->tp_maxalloc);
143 if (v == NULL) {
144 Py_DECREF(result);
145 return NULL;
146 }
147 if (PyList_Append(result, v) < 0) {
148 Py_DECREF(v);
149 Py_DECREF(result);
150 return NULL;
151 }
152 Py_DECREF(v);
153 }
154 return result;
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +0000155}
156
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000157void
Fred Drake100814d2000-07-09 15:48:49 +0000158inc_count(PyTypeObject *tp)
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000159{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000160 if (tp->tp_next == NULL && tp->tp_prev == NULL) {
161 /* first time; insert in linked list */
162 if (tp->tp_next != NULL) /* sanity check */
163 Py_FatalError("XXX inc_count sanity check");
164 if (type_list)
165 type_list->tp_prev = tp;
166 tp->tp_next = type_list;
167 /* Note that as of Python 2.2, heap-allocated type objects
168 * can go away, but this code requires that they stay alive
169 * until program exit. That's why we're careful with
170 * refcounts here. type_list gets a new reference to tp,
171 * while ownership of the reference type_list used to hold
172 * (if any) was transferred to tp->tp_next in the line above.
173 * tp is thus effectively immortal after this.
174 */
175 Py_INCREF(tp);
176 type_list = tp;
Tim Peters3e40c7f2003-03-23 03:04:32 +0000177#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000178 /* Also insert in the doubly-linked list of all objects,
179 * if not already there.
180 */
181 _Py_AddToAllObjects((PyObject *)tp, 0);
Tim Peters78be7992003-03-23 02:51:01 +0000182#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000183 }
184 tp->tp_allocs++;
185 if (tp->tp_allocs - tp->tp_frees > tp->tp_maxalloc)
186 tp->tp_maxalloc = tp->tp_allocs - tp->tp_frees;
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000187}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000188
189void dec_count(PyTypeObject *tp)
190{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000191 tp->tp_frees++;
192 if (unlist_types_without_objects &&
193 tp->tp_allocs == tp->tp_frees) {
194 /* unlink the type from type_list */
195 if (tp->tp_prev)
196 tp->tp_prev->tp_next = tp->tp_next;
197 else
198 type_list = tp->tp_next;
199 if (tp->tp_next)
200 tp->tp_next->tp_prev = tp->tp_prev;
201 tp->tp_next = tp->tp_prev = NULL;
202 Py_DECREF(tp);
203 }
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000204}
205
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000206#endif
207
Tim Peters7c321a82002-07-09 02:57:01 +0000208#ifdef Py_REF_DEBUG
209/* Log a fatal error; doesn't return. */
210void
211_Py_NegativeRefcount(const char *fname, int lineno, PyObject *op)
212{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000213 char buf[300];
Tim Peters7c321a82002-07-09 02:57:01 +0000214
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000215 PyOS_snprintf(buf, sizeof(buf),
216 "%s:%i object at %p has negative ref count "
217 "%" PY_FORMAT_SIZE_T "d",
218 fname, lineno, op, op->ob_refcnt);
219 Py_FatalError(buf);
Tim Peters7c321a82002-07-09 02:57:01 +0000220}
221
222#endif /* Py_REF_DEBUG */
223
Thomas Heller1328b522004-04-22 17:23:49 +0000224void
225Py_IncRef(PyObject *o)
226{
227 Py_XINCREF(o);
228}
229
230void
231Py_DecRef(PyObject *o)
232{
233 Py_XDECREF(o);
234}
235
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000236PyObject *
Fred Drake100814d2000-07-09 15:48:49 +0000237PyObject_Init(PyObject *op, PyTypeObject *tp)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000238{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000239 if (op == NULL)
240 return PyErr_NoMemory();
241 /* Any changes should be reflected in PyObject_INIT (objimpl.h) */
242 Py_TYPE(op) = tp;
243 _Py_NewReference(op);
244 return op;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000245}
246
Guido van Rossumb18618d2000-05-03 23:44:39 +0000247PyVarObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +0000248PyObject_InitVar(PyVarObject *op, PyTypeObject *tp, Py_ssize_t size)
Guido van Rossumb18618d2000-05-03 23:44:39 +0000249{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000250 if (op == NULL)
251 return (PyVarObject *) PyErr_NoMemory();
252 /* Any changes should be reflected in PyObject_INIT_VAR */
253 op->ob_size = size;
254 Py_TYPE(op) = tp;
255 _Py_NewReference((PyObject *)op);
256 return op;
Guido van Rossumb18618d2000-05-03 23:44:39 +0000257}
258
259PyObject *
Fred Drake100814d2000-07-09 15:48:49 +0000260_PyObject_New(PyTypeObject *tp)
Guido van Rossumb18618d2000-05-03 23:44:39 +0000261{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000262 PyObject *op;
263 op = (PyObject *) PyObject_MALLOC(_PyObject_SIZE(tp));
264 if (op == NULL)
265 return PyErr_NoMemory();
266 return PyObject_INIT(op, tp);
Guido van Rossumb18618d2000-05-03 23:44:39 +0000267}
268
Guido van Rossumd0c87ee1997-05-15 21:31:03 +0000269PyVarObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +0000270_PyObject_NewVar(PyTypeObject *tp, Py_ssize_t nitems)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000271{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000272 PyVarObject *op;
273 const size_t size = _PyObject_VAR_SIZE(tp, nitems);
274 op = (PyVarObject *) PyObject_MALLOC(size);
275 if (op == NULL)
276 return (PyVarObject *)PyErr_NoMemory();
277 return PyObject_INIT_VAR(op, tp, nitems);
Guido van Rossumb18618d2000-05-03 23:44:39 +0000278}
279
Antoine Pitrou796564c2013-07-30 19:59:21 +0200280void
281PyObject_CallFinalizer(PyObject *self)
282{
283 PyTypeObject *tp = Py_TYPE(self);
284
285 /* The former could happen on heaptypes created from the C API, e.g.
286 PyType_FromSpec(). */
287 if (!PyType_HasFeature(tp, Py_TPFLAGS_HAVE_FINALIZE) ||
288 tp->tp_finalize == NULL)
289 return;
290 /* tp_finalize should only be called once. */
291 if (PyType_IS_GC(tp) && _PyGC_FINALIZED(self))
292 return;
293
294 tp->tp_finalize(self);
295 if (PyType_IS_GC(tp))
296 _PyGC_SET_FINALIZED(self, 1);
297}
298
299int
300PyObject_CallFinalizerFromDealloc(PyObject *self)
301{
302 Py_ssize_t refcnt;
303
304 /* Temporarily resurrect the object. */
305 if (self->ob_refcnt != 0) {
306 Py_FatalError("PyObject_CallFinalizerFromDealloc called on "
307 "object with a non-zero refcount");
308 }
309 self->ob_refcnt = 1;
310
311 PyObject_CallFinalizer(self);
312
313 /* Undo the temporary resurrection; can't use DECREF here, it would
314 * cause a recursive call.
315 */
316 assert(self->ob_refcnt > 0);
317 if (--self->ob_refcnt == 0)
318 return 0; /* this is the normal path out */
319
320 /* tp_finalize resurrected it! Make it look like the original Py_DECREF
321 * never happened.
322 */
323 refcnt = self->ob_refcnt;
324 _Py_NewReference(self);
325 self->ob_refcnt = refcnt;
326
327 if (PyType_IS_GC(Py_TYPE(self))) {
328 assert(_PyGC_REFS(self) != _PyGC_REFS_UNTRACKED);
329 }
330 /* If Py_REF_DEBUG, _Py_NewReference bumped _Py_RefTotal, so
331 * we need to undo that. */
332 _Py_DEC_REFTOTAL;
333 /* If Py_TRACE_REFS, _Py_NewReference re-added self to the object
334 * chain, so no more to do there.
335 * If COUNT_ALLOCS, the original decref bumped tp_frees, and
336 * _Py_NewReference bumped tp_allocs: both of those need to be
337 * undone.
338 */
339#ifdef COUNT_ALLOCS
340 --Py_TYPE(self)->tp_frees;
341 --Py_TYPE(self)->tp_allocs;
342#endif
343 return -1;
344}
345
Antoine Pitrouc47bd4a2010-07-27 22:08:27 +0000346int
347PyObject_Print(PyObject *op, FILE *fp, int flags)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000348{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000349 int ret = 0;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000350 if (PyErr_CheckSignals())
351 return -1;
Guido van Rossum9b00dfa1998-04-28 16:06:54 +0000352#ifdef USE_STACKCHECK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000353 if (PyOS_CheckStack()) {
354 PyErr_SetString(PyExc_MemoryError, "stack overflow");
355 return -1;
356 }
Guido van Rossum9b00dfa1998-04-28 16:06:54 +0000357#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000358 clearerr(fp); /* Clear any previous error condition */
359 if (op == NULL) {
360 Py_BEGIN_ALLOW_THREADS
361 fprintf(fp, "<nil>");
362 Py_END_ALLOW_THREADS
363 }
364 else {
365 if (op->ob_refcnt <= 0)
366 /* XXX(twouters) cast refcount to long until %zd is
367 universally available */
368 Py_BEGIN_ALLOW_THREADS
369 fprintf(fp, "<refcnt %ld at %p>",
370 (long)op->ob_refcnt, op);
371 Py_END_ALLOW_THREADS
372 else {
373 PyObject *s;
374 if (flags & Py_PRINT_RAW)
375 s = PyObject_Str(op);
376 else
377 s = PyObject_Repr(op);
378 if (s == NULL)
379 ret = -1;
380 else if (PyBytes_Check(s)) {
381 fwrite(PyBytes_AS_STRING(s), 1,
382 PyBytes_GET_SIZE(s), fp);
383 }
384 else if (PyUnicode_Check(s)) {
385 PyObject *t;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200386 t = PyUnicode_AsEncodedString(s, "utf-8", "backslashreplace");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000387 if (t == NULL)
388 ret = 0;
389 else {
390 fwrite(PyBytes_AS_STRING(t), 1,
391 PyBytes_GET_SIZE(t), fp);
Victor Stinnerba6b4302010-05-17 09:33:42 +0000392 Py_DECREF(t);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000393 }
394 }
395 else {
396 PyErr_Format(PyExc_TypeError,
397 "str() or repr() returned '%.100s'",
398 s->ob_type->tp_name);
399 ret = -1;
400 }
401 Py_XDECREF(s);
402 }
403 }
404 if (ret == 0) {
405 if (ferror(fp)) {
406 PyErr_SetFromErrno(PyExc_IOError);
407 clearerr(fp);
408 ret = -1;
409 }
410 }
411 return ret;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000412}
413
Guido van Rossum38938152006-08-21 23:36:26 +0000414/* For debugging convenience. Set a breakpoint here and call it from your DLL */
415void
Thomas Woutersb2137042007-02-01 18:02:27 +0000416_Py_BreakPoint(void)
Guido van Rossum38938152006-08-21 23:36:26 +0000417{
418}
419
Neal Norwitz1a997502003-01-13 20:13:12 +0000420
Barry Warsaw9bf16442001-01-23 16:24:35 +0000421/* For debugging convenience. See Misc/gdbinit for some useful gdb hooks */
Guido van Rossum38938152006-08-21 23:36:26 +0000422void
423_PyObject_Dump(PyObject* op)
Barry Warsaw9bf16442001-01-23 16:24:35 +0000424{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000425 if (op == NULL)
426 fprintf(stderr, "NULL\n");
427 else {
Georg Brandldfd73442009-04-05 11:47:34 +0000428#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000429 PyGILState_STATE gil;
Georg Brandldfd73442009-04-05 11:47:34 +0000430#endif
Victor Stinnere5132102013-08-26 13:49:06 +0200431 PyObject *error_type, *error_value, *error_traceback;
432
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000433 fprintf(stderr, "object : ");
Georg Brandldfd73442009-04-05 11:47:34 +0000434#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000435 gil = PyGILState_Ensure();
Georg Brandldfd73442009-04-05 11:47:34 +0000436#endif
Victor Stinnere5132102013-08-26 13:49:06 +0200437
438 PyErr_Fetch(&error_type, &error_value, &error_traceback);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000439 (void)PyObject_Print(op, stderr, 0);
Victor Stinnere5132102013-08-26 13:49:06 +0200440 PyErr_Restore(error_type, error_value, error_traceback);
441
Georg Brandldfd73442009-04-05 11:47:34 +0000442#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000443 PyGILState_Release(gil);
Georg Brandldfd73442009-04-05 11:47:34 +0000444#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000445 /* XXX(twouters) cast refcount to long until %zd is
446 universally available */
447 fprintf(stderr, "\n"
448 "type : %s\n"
449 "refcount: %ld\n"
450 "address : %p\n",
451 Py_TYPE(op)==NULL ? "NULL" : Py_TYPE(op)->tp_name,
452 (long)op->ob_refcnt,
453 op);
454 }
Barry Warsaw9bf16442001-01-23 16:24:35 +0000455}
Barry Warsaw903138f2001-01-23 16:33:18 +0000456
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000457PyObject *
Fred Drake100814d2000-07-09 15:48:49 +0000458PyObject_Repr(PyObject *v)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000459{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000460 PyObject *res;
461 if (PyErr_CheckSignals())
462 return NULL;
Guido van Rossum9b00dfa1998-04-28 16:06:54 +0000463#ifdef USE_STACKCHECK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000464 if (PyOS_CheckStack()) {
465 PyErr_SetString(PyExc_MemoryError, "stack overflow");
466 return NULL;
467 }
Guido van Rossum9b00dfa1998-04-28 16:06:54 +0000468#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000469 if (v == NULL)
470 return PyUnicode_FromString("<NULL>");
471 if (Py_TYPE(v)->tp_repr == NULL)
472 return PyUnicode_FromFormat("<%s object at %p>",
473 v->ob_type->tp_name, v);
Victor Stinner33824f62013-08-26 14:05:19 +0200474
475#ifdef Py_DEBUG
476 /* PyObject_Repr() must not be called with an exception set,
477 because it may clear it (directly or indirectly) and so the
478 caller looses its exception */
479 assert(!PyErr_Occurred());
480#endif
481
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000482 res = (*v->ob_type->tp_repr)(v);
Victor Stinner0a54cf12011-12-01 03:22:44 +0100483 if (res == NULL)
484 return NULL;
485 if (!PyUnicode_Check(res)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000486 PyErr_Format(PyExc_TypeError,
487 "__repr__ returned non-string (type %.200s)",
488 res->ob_type->tp_name);
489 Py_DECREF(res);
490 return NULL;
491 }
Victor Stinnerdb88ae52011-12-01 02:15:00 +0100492#ifndef Py_DEBUG
493 if (PyUnicode_READY(res) < 0)
494 return NULL;
495#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000496 return res;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000497}
498
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000499PyObject *
Guido van Rossum98297ee2007-11-06 21:34:58 +0000500PyObject_Str(PyObject *v)
Guido van Rossumc6004111993-11-05 10:22:19 +0000501{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000502 PyObject *res;
503 if (PyErr_CheckSignals())
504 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +0000505#ifdef USE_STACKCHECK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000506 if (PyOS_CheckStack()) {
507 PyErr_SetString(PyExc_MemoryError, "stack overflow");
508 return NULL;
509 }
Guido van Rossum98297ee2007-11-06 21:34:58 +0000510#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000511 if (v == NULL)
512 return PyUnicode_FromString("<NULL>");
513 if (PyUnicode_CheckExact(v)) {
Victor Stinnerdb88ae52011-12-01 02:15:00 +0100514#ifndef Py_DEBUG
Victor Stinner4ead7c72011-11-20 19:48:36 +0100515 if (PyUnicode_READY(v) < 0)
516 return NULL;
Victor Stinnerdb88ae52011-12-01 02:15:00 +0100517#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000518 Py_INCREF(v);
519 return v;
520 }
521 if (Py_TYPE(v)->tp_str == NULL)
522 return PyObject_Repr(v);
Guido van Rossum4f288ab2001-05-01 16:53:37 +0000523
Victor Stinner33824f62013-08-26 14:05:19 +0200524#ifdef Py_DEBUG
525 /* PyObject_Str() must not be called with an exception set,
526 because it may clear it (directly or indirectly) and so the
Nick Coghland979e432014-02-09 10:43:21 +1000527 caller loses its exception */
Victor Stinner33824f62013-08-26 14:05:19 +0200528 assert(!PyErr_Occurred());
529#endif
530
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000531 /* It is possible for a type to have a tp_str representation that loops
532 infinitely. */
533 if (Py_EnterRecursiveCall(" while getting the str of an object"))
534 return NULL;
535 res = (*Py_TYPE(v)->tp_str)(v);
536 Py_LeaveRecursiveCall();
537 if (res == NULL)
538 return NULL;
539 if (!PyUnicode_Check(res)) {
540 PyErr_Format(PyExc_TypeError,
541 "__str__ returned non-string (type %.200s)",
542 Py_TYPE(res)->tp_name);
543 Py_DECREF(res);
544 return NULL;
545 }
Victor Stinnerdb88ae52011-12-01 02:15:00 +0100546#ifndef Py_DEBUG
Victor Stinner4ead7c72011-11-20 19:48:36 +0100547 if (PyUnicode_READY(res) < 0)
548 return NULL;
Victor Stinnerdb88ae52011-12-01 02:15:00 +0100549#endif
Victor Stinner4ead7c72011-11-20 19:48:36 +0100550 assert(_PyUnicode_CheckConsistency(res, 1));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000551 return res;
Neil Schemenauercf52c072005-08-12 17:34:58 +0000552}
553
Georg Brandl559e5d72008-06-11 18:37:52 +0000554PyObject *
555PyObject_ASCII(PyObject *v)
556{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000557 PyObject *repr, *ascii, *res;
Georg Brandl559e5d72008-06-11 18:37:52 +0000558
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000559 repr = PyObject_Repr(v);
560 if (repr == NULL)
561 return NULL;
Georg Brandl559e5d72008-06-11 18:37:52 +0000562
Victor Stinneraf037572013-04-14 18:44:10 +0200563 if (PyUnicode_IS_ASCII(repr))
564 return repr;
565
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000566 /* repr is guaranteed to be a PyUnicode object by PyObject_Repr */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200567 ascii = _PyUnicode_AsASCIIString(repr, "backslashreplace");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000568 Py_DECREF(repr);
569 if (ascii == NULL)
570 return NULL;
Georg Brandl559e5d72008-06-11 18:37:52 +0000571
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000572 res = PyUnicode_DecodeASCII(
573 PyBytes_AS_STRING(ascii),
574 PyBytes_GET_SIZE(ascii),
575 NULL);
576
577 Py_DECREF(ascii);
578 return res;
Georg Brandl559e5d72008-06-11 18:37:52 +0000579}
Guido van Rossuma3af41d2001-01-18 22:07:06 +0000580
Benjamin Petersonc15a0732008-08-26 16:46:47 +0000581PyObject *
582PyObject_Bytes(PyObject *v)
583{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000584 PyObject *result, *func;
Benjamin Petersonc15a0732008-08-26 16:46:47 +0000585
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000586 if (v == NULL)
587 return PyBytes_FromString("<NULL>");
Benjamin Petersonc15a0732008-08-26 16:46:47 +0000588
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000589 if (PyBytes_CheckExact(v)) {
590 Py_INCREF(v);
591 return v;
592 }
Benjamin Petersonc15a0732008-08-26 16:46:47 +0000593
Benjamin Petersonce798522012-01-22 11:24:29 -0500594 func = _PyObject_LookupSpecial(v, &PyId___bytes__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000595 if (func != NULL) {
596 result = PyObject_CallFunctionObjArgs(func, NULL);
597 Py_DECREF(func);
598 if (result == NULL)
Benjamin Peterson41ece392010-09-11 16:39:57 +0000599 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000600 if (!PyBytes_Check(result)) {
Benjamin Peterson41ece392010-09-11 16:39:57 +0000601 PyErr_Format(PyExc_TypeError,
602 "__bytes__ returned non-bytes (type %.200s)",
603 Py_TYPE(result)->tp_name);
604 Py_DECREF(result);
605 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000606 }
607 return result;
608 }
609 else if (PyErr_Occurred())
610 return NULL;
611 return PyBytes_FromObject(v);
Benjamin Petersonc15a0732008-08-26 16:46:47 +0000612}
613
Mark Dickinsonc008a172009-02-01 13:59:22 +0000614/* For Python 3.0.1 and later, the old three-way comparison has been
615 completely removed in favour of rich comparisons. PyObject_Compare() and
616 PyObject_Cmp() are gone, and the builtin cmp function no longer exists.
Mark Dickinsone94c6792009-02-02 20:36:42 +0000617 The old tp_compare slot has been renamed to tp_reserved, and should no
Mark Dickinsonc008a172009-02-01 13:59:22 +0000618 longer be used. Use tp_richcompare instead.
Guido van Rossum98297ee2007-11-06 21:34:58 +0000619
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000620 See (*) below for practical amendments.
621
Mark Dickinsonc008a172009-02-01 13:59:22 +0000622 tp_richcompare gets called with a first argument of the appropriate type
623 and a second object of an arbitrary type. We never do any kind of
624 coercion.
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000625
Mark Dickinsonc008a172009-02-01 13:59:22 +0000626 The tp_richcompare slot should return an object, as follows:
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000627
628 NULL if an exception occurred
629 NotImplemented if the requested comparison is not implemented
630 any other false value if the requested comparison is false
631 any other true value if the requested comparison is true
632
633 The PyObject_RichCompare[Bool]() wrappers raise TypeError when they get
634 NotImplemented.
635
636 (*) Practical amendments:
637
638 - If rich comparison returns NotImplemented, == and != are decided by
639 comparing the object pointer (i.e. falling back to the base object
640 implementation).
641
Guido van Rossuma4073002002-05-31 20:03:54 +0000642*/
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000643
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000644/* Map rich comparison operators to their swapped version, e.g. LT <--> GT */
Brett Cannona5ca2e72004-09-25 01:37:24 +0000645int _Py_SwappedOp[] = {Py_GT, Py_GE, Py_EQ, Py_NE, Py_LT, Py_LE};
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +0000646
Guido van Rossum9a4e95c2006-12-19 21:35:46 +0000647static char *opstrings[] = {"<", "<=", "==", "!=", ">", ">="};
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000648
649/* Perform a rich comparison, raising TypeError when the requested comparison
650 operator is not supported. */
Guido van Rossume797ec12001-01-17 15:24:28 +0000651static PyObject *
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000652do_richcompare(PyObject *v, PyObject *w, int op)
Guido van Rossume797ec12001-01-17 15:24:28 +0000653{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000654 richcmpfunc f;
655 PyObject *res;
656 int checked_reverse_op = 0;
Guido van Rossume797ec12001-01-17 15:24:28 +0000657
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000658 if (v->ob_type != w->ob_type &&
659 PyType_IsSubtype(w->ob_type, v->ob_type) &&
660 (f = w->ob_type->tp_richcompare) != NULL) {
661 checked_reverse_op = 1;
662 res = (*f)(w, v, _Py_SwappedOp[op]);
663 if (res != Py_NotImplemented)
664 return res;
665 Py_DECREF(res);
666 }
667 if ((f = v->ob_type->tp_richcompare) != NULL) {
668 res = (*f)(v, w, op);
669 if (res != Py_NotImplemented)
670 return res;
671 Py_DECREF(res);
672 }
673 if (!checked_reverse_op && (f = w->ob_type->tp_richcompare) != NULL) {
674 res = (*f)(w, v, _Py_SwappedOp[op]);
675 if (res != Py_NotImplemented)
676 return res;
677 Py_DECREF(res);
678 }
679 /* If neither object implements it, provide a sensible default
680 for == and !=, but raise an exception for ordering. */
681 switch (op) {
682 case Py_EQ:
683 res = (v == w) ? Py_True : Py_False;
684 break;
685 case Py_NE:
686 res = (v != w) ? Py_True : Py_False;
687 break;
688 default:
689 /* XXX Special-case None so it doesn't show as NoneType() */
690 PyErr_Format(PyExc_TypeError,
691 "unorderable types: %.100s() %s %.100s()",
692 v->ob_type->tp_name,
693 opstrings[op],
694 w->ob_type->tp_name);
695 return NULL;
696 }
697 Py_INCREF(res);
698 return res;
Guido van Rossume797ec12001-01-17 15:24:28 +0000699}
700
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000701/* Perform a rich comparison with object result. This wraps do_richcompare()
702 with a check for NULL arguments and a recursion check. */
Guido van Rossume797ec12001-01-17 15:24:28 +0000703
Guido van Rossume797ec12001-01-17 15:24:28 +0000704PyObject *
705PyObject_RichCompare(PyObject *v, PyObject *w, int op)
706{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000707 PyObject *res;
Guido van Rossume797ec12001-01-17 15:24:28 +0000708
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000709 assert(Py_LT <= op && op <= Py_GE);
710 if (v == NULL || w == NULL) {
711 if (!PyErr_Occurred())
712 PyErr_BadInternalCall();
713 return NULL;
714 }
715 if (Py_EnterRecursiveCall(" in comparison"))
716 return NULL;
717 res = do_richcompare(v, w, op);
718 Py_LeaveRecursiveCall();
719 return res;
Guido van Rossume797ec12001-01-17 15:24:28 +0000720}
721
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000722/* Perform a rich comparison with integer result. This wraps
723 PyObject_RichCompare(), returning -1 for error, 0 for false, 1 for true. */
Guido van Rossume797ec12001-01-17 15:24:28 +0000724int
725PyObject_RichCompareBool(PyObject *v, PyObject *w, int op)
726{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000727 PyObject *res;
728 int ok;
Guido van Rossume797ec12001-01-17 15:24:28 +0000729
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000730 /* Quick result when objects are the same.
731 Guarantees that identity implies equality. */
732 if (v == w) {
733 if (op == Py_EQ)
734 return 1;
735 else if (op == Py_NE)
736 return 0;
737 }
Mark Dickinson4a1f5932008-11-12 23:23:36 +0000738
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000739 res = PyObject_RichCompare(v, w, op);
740 if (res == NULL)
741 return -1;
742 if (PyBool_Check(res))
743 ok = (res == Py_True);
744 else
745 ok = PyObject_IsTrue(res);
746 Py_DECREF(res);
747 return ok;
Guido van Rossume797ec12001-01-17 15:24:28 +0000748}
Fred Drake13634cf2000-06-29 19:17:04 +0000749
Antoine Pitrouce4a9da2011-11-21 20:46:33 +0100750Py_hash_t
Nick Coghland1abd252008-07-15 15:46:38 +0000751PyObject_HashNotImplemented(PyObject *v)
752{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000753 PyErr_Format(PyExc_TypeError, "unhashable type: '%.200s'",
754 Py_TYPE(v)->tp_name);
755 return -1;
Nick Coghland1abd252008-07-15 15:46:38 +0000756}
Fred Drake13634cf2000-06-29 19:17:04 +0000757
Benjamin Peterson8f67d082010-10-17 20:54:53 +0000758Py_hash_t
Fred Drake100814d2000-07-09 15:48:49 +0000759PyObject_Hash(PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000760{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000761 PyTypeObject *tp = Py_TYPE(v);
762 if (tp->tp_hash != NULL)
763 return (*tp->tp_hash)(v);
764 /* To keep to the general practice that inheriting
765 * solely from object in C code should work without
766 * an explicit call to PyType_Ready, we implicitly call
767 * PyType_Ready here and then check the tp_hash slot again
768 */
769 if (tp->tp_dict == NULL) {
770 if (PyType_Ready(tp) < 0)
771 return -1;
772 if (tp->tp_hash != NULL)
773 return (*tp->tp_hash)(v);
774 }
775 /* Otherwise, the object can't be hashed */
776 return PyObject_HashNotImplemented(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000777}
778
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000779PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000780PyObject_GetAttrString(PyObject *v, const char *name)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000781{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000782 PyObject *w, *res;
Guido van Rossumd8eb1b31996-08-09 20:52:03 +0000783
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000784 if (Py_TYPE(v)->tp_getattr != NULL)
785 return (*Py_TYPE(v)->tp_getattr)(v, (char*)name);
786 w = PyUnicode_InternFromString(name);
787 if (w == NULL)
788 return NULL;
789 res = PyObject_GetAttr(v, w);
Victor Stinner59af08f2012-03-22 02:09:08 +0100790 Py_DECREF(w);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000791 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000792}
793
794int
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000795PyObject_HasAttrString(PyObject *v, const char *name)
Guido van Rossumed18fdc1993-07-11 19:55:34 +0000796{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000797 PyObject *res = PyObject_GetAttrString(v, name);
798 if (res != NULL) {
799 Py_DECREF(res);
800 return 1;
801 }
802 PyErr_Clear();
803 return 0;
Guido van Rossumed18fdc1993-07-11 19:55:34 +0000804}
805
806int
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000807PyObject_SetAttrString(PyObject *v, const char *name, PyObject *w)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000808{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000809 PyObject *s;
810 int res;
Guido van Rossumd8eb1b31996-08-09 20:52:03 +0000811
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000812 if (Py_TYPE(v)->tp_setattr != NULL)
813 return (*Py_TYPE(v)->tp_setattr)(v, (char*)name, w);
814 s = PyUnicode_InternFromString(name);
815 if (s == NULL)
816 return -1;
817 res = PyObject_SetAttr(v, s, w);
818 Py_XDECREF(s);
819 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000820}
821
Benjamin Petersonbfebb7b2011-12-15 15:34:02 -0500822int
823_PyObject_IsAbstract(PyObject *obj)
824{
825 int res;
826 PyObject* isabstract;
Benjamin Petersonbfebb7b2011-12-15 15:34:02 -0500827
828 if (obj == NULL)
829 return 0;
830
831 isabstract = _PyObject_GetAttrId(obj, &PyId___isabstractmethod__);
832 if (isabstract == NULL) {
833 if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
834 PyErr_Clear();
835 return 0;
836 }
837 return -1;
838 }
839 res = PyObject_IsTrue(isabstract);
840 Py_DECREF(isabstract);
841 return res;
842}
843
Guido van Rossum98ff96a1997-05-20 18:34:44 +0000844PyObject *
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200845_PyObject_GetAttrId(PyObject *v, _Py_Identifier *name)
846{
847 PyObject *result;
Martin v. Löwisd10759f2011-11-07 13:00:05 +0100848 PyObject *oname = _PyUnicode_FromId(name); /* borrowed */
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200849 if (!oname)
850 return NULL;
851 result = PyObject_GetAttr(v, oname);
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200852 return result;
853}
854
855int
856_PyObject_HasAttrId(PyObject *v, _Py_Identifier *name)
857{
858 int result;
Martin v. Löwisd10759f2011-11-07 13:00:05 +0100859 PyObject *oname = _PyUnicode_FromId(name); /* borrowed */
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200860 if (!oname)
861 return -1;
862 result = PyObject_HasAttr(v, oname);
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200863 return result;
864}
865
866int
867_PyObject_SetAttrId(PyObject *v, _Py_Identifier *name, PyObject *w)
868{
869 int result;
Martin v. Löwisd10759f2011-11-07 13:00:05 +0100870 PyObject *oname = _PyUnicode_FromId(name); /* borrowed */
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200871 if (!oname)
872 return -1;
873 result = PyObject_SetAttr(v, oname, w);
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200874 return result;
875}
876
877PyObject *
Fred Drake100814d2000-07-09 15:48:49 +0000878PyObject_GetAttr(PyObject *v, PyObject *name)
Guido van Rossum98ff96a1997-05-20 18:34:44 +0000879{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000880 PyTypeObject *tp = Py_TYPE(v);
Tim Peters6d6c1a32001-08-02 04:15:00 +0000881
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000882 if (!PyUnicode_Check(name)) {
883 PyErr_Format(PyExc_TypeError,
884 "attribute name must be string, not '%.200s'",
885 name->ob_type->tp_name);
886 return NULL;
887 }
888 if (tp->tp_getattro != NULL)
889 return (*tp->tp_getattro)(v, name);
890 if (tp->tp_getattr != NULL) {
891 char *name_str = _PyUnicode_AsString(name);
892 if (name_str == NULL)
893 return NULL;
894 return (*tp->tp_getattr)(v, name_str);
895 }
896 PyErr_Format(PyExc_AttributeError,
897 "'%.50s' object has no attribute '%U'",
898 tp->tp_name, name);
899 return NULL;
Guido van Rossum98ff96a1997-05-20 18:34:44 +0000900}
901
902int
Fred Drake100814d2000-07-09 15:48:49 +0000903PyObject_HasAttr(PyObject *v, PyObject *name)
Guido van Rossum98ff96a1997-05-20 18:34:44 +0000904{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000905 PyObject *res = PyObject_GetAttr(v, name);
906 if (res != NULL) {
907 Py_DECREF(res);
908 return 1;
909 }
910 PyErr_Clear();
911 return 0;
Guido van Rossum98ff96a1997-05-20 18:34:44 +0000912}
913
914int
Fred Drake100814d2000-07-09 15:48:49 +0000915PyObject_SetAttr(PyObject *v, PyObject *name, PyObject *value)
Guido van Rossum98ff96a1997-05-20 18:34:44 +0000916{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000917 PyTypeObject *tp = Py_TYPE(v);
918 int err;
Marc-André Lemburge44e5072000-09-18 16:20:57 +0000919
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000920 if (!PyUnicode_Check(name)) {
921 PyErr_Format(PyExc_TypeError,
922 "attribute name must be string, not '%.200s'",
923 name->ob_type->tp_name);
924 return -1;
925 }
926 Py_INCREF(name);
Tim Peters6d6c1a32001-08-02 04:15:00 +0000927
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000928 PyUnicode_InternInPlace(&name);
929 if (tp->tp_setattro != NULL) {
930 err = (*tp->tp_setattro)(v, name, value);
931 Py_DECREF(name);
932 return err;
933 }
934 if (tp->tp_setattr != NULL) {
935 char *name_str = _PyUnicode_AsString(name);
936 if (name_str == NULL)
937 return -1;
938 err = (*tp->tp_setattr)(v, name_str, value);
939 Py_DECREF(name);
940 return err;
941 }
942 Py_DECREF(name);
943 assert(name->ob_refcnt >= 1);
944 if (tp->tp_getattr == NULL && tp->tp_getattro == NULL)
945 PyErr_Format(PyExc_TypeError,
946 "'%.100s' object has no attributes "
947 "(%s .%U)",
948 tp->tp_name,
949 value==NULL ? "del" : "assign to",
950 name);
951 else
952 PyErr_Format(PyExc_TypeError,
953 "'%.100s' object has only read-only attributes "
954 "(%s .%U)",
955 tp->tp_name,
956 value==NULL ? "del" : "assign to",
957 name);
958 return -1;
Tim Peters6d6c1a32001-08-02 04:15:00 +0000959}
960
961/* Helper to get a pointer to an object's __dict__ slot, if any */
962
963PyObject **
964_PyObject_GetDictPtr(PyObject *obj)
965{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000966 Py_ssize_t dictoffset;
967 PyTypeObject *tp = Py_TYPE(obj);
Tim Peters6d6c1a32001-08-02 04:15:00 +0000968
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000969 dictoffset = tp->tp_dictoffset;
970 if (dictoffset == 0)
971 return NULL;
972 if (dictoffset < 0) {
973 Py_ssize_t tsize;
974 size_t size;
Guido van Rossum2eb0b872002-03-01 22:24:49 +0000975
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000976 tsize = ((PyVarObject *)obj)->ob_size;
977 if (tsize < 0)
978 tsize = -tsize;
979 size = _PyObject_VAR_SIZE(tp, tsize);
Guido van Rossum2eb0b872002-03-01 22:24:49 +0000980
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000981 dictoffset += (long)size;
982 assert(dictoffset > 0);
983 assert(dictoffset % SIZEOF_VOID_P == 0);
984 }
985 return (PyObject **) ((char *)obj + dictoffset);
Tim Peters6d6c1a32001-08-02 04:15:00 +0000986}
987
Tim Peters6d6c1a32001-08-02 04:15:00 +0000988PyObject *
Raymond Hettinger1da1dbf2003-03-17 19:46:11 +0000989PyObject_SelfIter(PyObject *obj)
Raymond Hettinger01538262003-03-17 08:24:35 +0000990{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000991 Py_INCREF(obj);
992 return obj;
Raymond Hettinger01538262003-03-17 08:24:35 +0000993}
994
Antoine Pitroua7013882012-04-05 00:04:20 +0200995/* Convenience function to get a builtin from its name */
996PyObject *
997_PyObject_GetBuiltin(const char *name)
998{
Victor Stinner53e9ec42013-11-07 00:43:05 +0100999 PyObject *mod_name, *mod, *attr;
1000
Victor Stinnerbd303c12013-11-07 23:07:29 +01001001 mod_name = _PyUnicode_FromId(&PyId_builtins); /* borrowed */
Victor Stinner53e9ec42013-11-07 00:43:05 +01001002 if (mod_name == NULL)
1003 return NULL;
1004 mod = PyImport_Import(mod_name);
Antoine Pitroua7013882012-04-05 00:04:20 +02001005 if (mod == NULL)
1006 return NULL;
1007 attr = PyObject_GetAttrString(mod, name);
1008 Py_DECREF(mod);
1009 return attr;
1010}
1011
Amaury Forgeot d'Arcf343e012009-01-12 23:58:21 +00001012/* Helper used when the __next__ method is removed from a type:
1013 tp_iternext is never NULL and can be safely called without checking
1014 on every iteration.
1015 */
1016
1017PyObject *
1018_PyObject_NextNotImplemented(PyObject *self)
1019{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001020 PyErr_Format(PyExc_TypeError,
1021 "'%.200s' object is not iterable",
1022 Py_TYPE(self)->tp_name);
1023 return NULL;
Amaury Forgeot d'Arcf343e012009-01-12 23:58:21 +00001024}
1025
Michael W. Hudson1593f502004-09-14 17:09:47 +00001026/* Generic GetAttr functions - put these in your tp_[gs]etattro slot */
1027
Raymond Hettinger01538262003-03-17 08:24:35 +00001028PyObject *
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001029_PyObject_GenericGetAttrWithDict(PyObject *obj, PyObject *name, PyObject *dict)
Tim Peters6d6c1a32001-08-02 04:15:00 +00001030{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001031 PyTypeObject *tp = Py_TYPE(obj);
1032 PyObject *descr = NULL;
1033 PyObject *res = NULL;
1034 descrgetfunc f;
1035 Py_ssize_t dictoffset;
1036 PyObject **dictptr;
Tim Peters6d6c1a32001-08-02 04:15:00 +00001037
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001038 if (!PyUnicode_Check(name)){
1039 PyErr_Format(PyExc_TypeError,
1040 "attribute name must be string, not '%.200s'",
1041 name->ob_type->tp_name);
1042 return NULL;
1043 }
1044 else
1045 Py_INCREF(name);
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001046
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001047 if (tp->tp_dict == NULL) {
1048 if (PyType_Ready(tp) < 0)
1049 goto done;
1050 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001051
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001052 descr = _PyType_Lookup(tp, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001053 Py_XINCREF(descr);
Michael W. Hudsonb2c7de42003-08-15 13:07:47 +00001054
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001055 f = NULL;
1056 if (descr != NULL) {
1057 f = descr->ob_type->tp_descr_get;
1058 if (f != NULL && PyDescr_IsData(descr)) {
1059 res = f(descr, obj, (PyObject *)obj->ob_type);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001060 goto done;
1061 }
1062 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001063
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001064 if (dict == NULL) {
1065 /* Inline _PyObject_GetDictPtr */
1066 dictoffset = tp->tp_dictoffset;
1067 if (dictoffset != 0) {
1068 if (dictoffset < 0) {
1069 Py_ssize_t tsize;
1070 size_t size;
Guido van Rossumc66ff442002-08-19 16:50:48 +00001071
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001072 tsize = ((PyVarObject *)obj)->ob_size;
1073 if (tsize < 0)
1074 tsize = -tsize;
1075 size = _PyObject_VAR_SIZE(tp, tsize);
Guido van Rossumc66ff442002-08-19 16:50:48 +00001076
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001077 dictoffset += (long)size;
1078 assert(dictoffset > 0);
1079 assert(dictoffset % SIZEOF_VOID_P == 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001080 }
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001081 dictptr = (PyObject **) ((char *)obj + dictoffset);
1082 dict = *dictptr;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001083 }
1084 }
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001085 if (dict != NULL) {
1086 Py_INCREF(dict);
1087 res = PyDict_GetItem(dict, name);
1088 if (res != NULL) {
1089 Py_INCREF(res);
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001090 Py_DECREF(dict);
1091 goto done;
1092 }
1093 Py_DECREF(dict);
1094 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001095
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001096 if (f != NULL) {
1097 res = f(descr, obj, (PyObject *)Py_TYPE(obj));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001098 goto done;
1099 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001100
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001101 if (descr != NULL) {
1102 res = descr;
Victor Stinner2d01dc02012-03-09 00:44:13 +01001103 descr = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001104 goto done;
1105 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001106
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001107 PyErr_Format(PyExc_AttributeError,
1108 "'%.50s' object has no attribute '%U'",
1109 tp->tp_name, name);
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001110 done:
Victor Stinner2d01dc02012-03-09 00:44:13 +01001111 Py_XDECREF(descr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001112 Py_DECREF(name);
1113 return res;
Tim Peters6d6c1a32001-08-02 04:15:00 +00001114}
1115
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001116PyObject *
1117PyObject_GenericGetAttr(PyObject *obj, PyObject *name)
1118{
1119 return _PyObject_GenericGetAttrWithDict(obj, name, NULL);
1120}
1121
Tim Peters6d6c1a32001-08-02 04:15:00 +00001122int
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001123_PyObject_GenericSetAttrWithDict(PyObject *obj, PyObject *name,
1124 PyObject *value, PyObject *dict)
Tim Peters6d6c1a32001-08-02 04:15:00 +00001125{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001126 PyTypeObject *tp = Py_TYPE(obj);
1127 PyObject *descr;
1128 descrsetfunc f;
1129 PyObject **dictptr;
1130 int res = -1;
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001131
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001132 if (!PyUnicode_Check(name)){
1133 PyErr_Format(PyExc_TypeError,
1134 "attribute name must be string, not '%.200s'",
1135 name->ob_type->tp_name);
1136 return -1;
1137 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001138
Benjamin Peterson74529ad2012-03-09 07:25:32 -08001139 if (tp->tp_dict == NULL && PyType_Ready(tp) < 0)
1140 return -1;
1141
1142 Py_INCREF(name);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001143
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001144 descr = _PyType_Lookup(tp, name);
Victor Stinner2d01dc02012-03-09 00:44:13 +01001145 Py_XINCREF(descr);
1146
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001147 f = NULL;
1148 if (descr != NULL) {
1149 f = descr->ob_type->tp_descr_set;
1150 if (f != NULL && PyDescr_IsData(descr)) {
1151 res = f(descr, obj, value);
1152 goto done;
1153 }
1154 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001155
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001156 if (dict == NULL) {
1157 dictptr = _PyObject_GetDictPtr(obj);
1158 if (dictptr != NULL) {
Benjamin Peterson7d95e402012-04-23 11:24:50 -04001159 res = _PyObjectDict_SetItem(Py_TYPE(obj), dictptr, name, value);
1160 if (res < 0 && PyErr_ExceptionMatches(PyExc_KeyError))
1161 PyErr_SetObject(PyExc_AttributeError, name);
1162 goto done;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001163 }
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001164 }
1165 if (dict != NULL) {
1166 Py_INCREF(dict);
1167 if (value == NULL)
1168 res = PyDict_DelItem(dict, name);
1169 else
1170 res = PyDict_SetItem(dict, name, value);
Benjamin Peterson74529ad2012-03-09 07:25:32 -08001171 Py_DECREF(dict);
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001172 if (res < 0 && PyErr_ExceptionMatches(PyExc_KeyError))
1173 PyErr_SetObject(PyExc_AttributeError, name);
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001174 goto done;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001175 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001176
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001177 if (f != NULL) {
1178 res = f(descr, obj, value);
1179 goto done;
1180 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001181
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001182 if (descr == NULL) {
1183 PyErr_Format(PyExc_AttributeError,
1184 "'%.100s' object has no attribute '%U'",
1185 tp->tp_name, name);
1186 goto done;
1187 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001188
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001189 PyErr_Format(PyExc_AttributeError,
1190 "'%.50s' object attribute '%U' is read-only",
1191 tp->tp_name, name);
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001192 done:
Victor Stinner2d01dc02012-03-09 00:44:13 +01001193 Py_XDECREF(descr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001194 Py_DECREF(name);
1195 return res;
Guido van Rossum98ff96a1997-05-20 18:34:44 +00001196}
1197
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001198int
1199PyObject_GenericSetAttr(PyObject *obj, PyObject *name, PyObject *value)
1200{
1201 return _PyObject_GenericSetAttrWithDict(obj, name, value, NULL);
1202}
1203
Benjamin Peterson8eb12692012-02-19 19:59:10 -05001204int
1205PyObject_GenericSetDict(PyObject *obj, PyObject *value, void *context)
1206{
1207 PyObject *dict, **dictptr = _PyObject_GetDictPtr(obj);
1208 if (dictptr == NULL) {
1209 PyErr_SetString(PyExc_AttributeError,
1210 "This object has no __dict__");
1211 return -1;
1212 }
1213 if (value == NULL) {
1214 PyErr_SetString(PyExc_TypeError, "cannot delete __dict__");
1215 return -1;
1216 }
1217 if (!PyDict_Check(value)) {
1218 PyErr_Format(PyExc_TypeError,
1219 "__dict__ must be set to a dictionary, "
1220 "not a '%.200s'", Py_TYPE(value)->tp_name);
1221 return -1;
1222 }
1223 dict = *dictptr;
1224 Py_XINCREF(value);
1225 *dictptr = value;
1226 Py_XDECREF(dict);
1227 return 0;
1228}
1229
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001230
Guido van Rossum6ac258d1993-05-12 08:24:20 +00001231/* Test a value used as condition, e.g., in a for or if statement.
1232 Return -1 if an error occurred */
1233
1234int
Fred Drake100814d2000-07-09 15:48:49 +00001235PyObject_IsTrue(PyObject *v)
Guido van Rossum6ac258d1993-05-12 08:24:20 +00001236{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001237 Py_ssize_t res;
1238 if (v == Py_True)
1239 return 1;
1240 if (v == Py_False)
1241 return 0;
1242 if (v == Py_None)
1243 return 0;
1244 else if (v->ob_type->tp_as_number != NULL &&
1245 v->ob_type->tp_as_number->nb_bool != NULL)
1246 res = (*v->ob_type->tp_as_number->nb_bool)(v);
1247 else if (v->ob_type->tp_as_mapping != NULL &&
1248 v->ob_type->tp_as_mapping->mp_length != NULL)
1249 res = (*v->ob_type->tp_as_mapping->mp_length)(v);
1250 else if (v->ob_type->tp_as_sequence != NULL &&
1251 v->ob_type->tp_as_sequence->sq_length != NULL)
1252 res = (*v->ob_type->tp_as_sequence->sq_length)(v);
1253 else
1254 return 1;
1255 /* if it is negative, it should be either -1 or -2 */
1256 return (res > 0) ? 1 : Py_SAFE_DOWNCAST(res, Py_ssize_t, int);
Guido van Rossum6ac258d1993-05-12 08:24:20 +00001257}
1258
Tim Peters803526b2002-07-07 05:13:56 +00001259/* equivalent of 'not v'
Guido van Rossumc3d3f961998-04-09 17:53:59 +00001260 Return -1 if an error occurred */
1261
1262int
Fred Drake100814d2000-07-09 15:48:49 +00001263PyObject_Not(PyObject *v)
Guido van Rossumc3d3f961998-04-09 17:53:59 +00001264{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001265 int res;
1266 res = PyObject_IsTrue(v);
1267 if (res < 0)
1268 return res;
1269 return res == 0;
Guido van Rossumc3d3f961998-04-09 17:53:59 +00001270}
1271
Guido van Rossum49b11fe1995-01-26 00:38:22 +00001272/* Test whether an object can be called */
1273
1274int
Fred Drake100814d2000-07-09 15:48:49 +00001275PyCallable_Check(PyObject *x)
Guido van Rossum49b11fe1995-01-26 00:38:22 +00001276{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001277 if (x == NULL)
1278 return 0;
1279 return x->ob_type->tp_call != NULL;
Guido van Rossum49b11fe1995-01-26 00:38:22 +00001280}
1281
Tim Peters7eea37e2001-09-04 22:08:56 +00001282
Georg Brandle32b4222007-03-10 22:13:27 +00001283/* Helper for PyObject_Dir without arguments: returns the local scope. */
1284static PyObject *
Guido van Rossumad7d8d12007-04-13 01:39:34 +00001285_dir_locals(void)
Tim Peters305b5852001-09-17 02:38:46 +00001286{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001287 PyObject *names;
Victor Stinner41bb43a2013-10-29 01:19:37 +01001288 PyObject *locals;
Tim Peters305b5852001-09-17 02:38:46 +00001289
Victor Stinner41bb43a2013-10-29 01:19:37 +01001290 locals = PyEval_GetLocals();
1291 if (locals == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001292 return NULL;
Tim Peters305b5852001-09-17 02:38:46 +00001293
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001294 names = PyMapping_Keys(locals);
1295 if (!names)
1296 return NULL;
1297 if (!PyList_Check(names)) {
1298 PyErr_Format(PyExc_TypeError,
1299 "dir(): expected keys() of locals to be a list, "
1300 "not '%.200s'", Py_TYPE(names)->tp_name);
1301 Py_DECREF(names);
1302 return NULL;
1303 }
Benjamin Peterson3bbb7222011-06-11 16:12:08 -05001304 if (PyList_Sort(names)) {
1305 Py_DECREF(names);
1306 return NULL;
1307 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001308 /* the locals don't need to be DECREF'd */
1309 return names;
Georg Brandle32b4222007-03-10 22:13:27 +00001310}
1311
Benjamin Peterson82b00c12011-05-24 11:09:06 -05001312/* Helper for PyObject_Dir: object introspection. */
Georg Brandle32b4222007-03-10 22:13:27 +00001313static PyObject *
1314_dir_object(PyObject *obj)
1315{
Benjamin Peterson3bbb7222011-06-11 16:12:08 -05001316 PyObject *result, *sorted;
Benjamin Petersonce798522012-01-22 11:24:29 -05001317 PyObject *dirfunc = _PyObject_LookupSpecial(obj, &PyId___dir__);
Georg Brandle32b4222007-03-10 22:13:27 +00001318
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001319 assert(obj);
1320 if (dirfunc == NULL) {
Benjamin Peterson82b00c12011-05-24 11:09:06 -05001321 if (!PyErr_Occurred())
1322 PyErr_SetString(PyExc_TypeError, "object does not provide __dir__");
1323 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001324 }
Benjamin Peterson82b00c12011-05-24 11:09:06 -05001325 /* use __dir__ */
1326 result = PyObject_CallFunctionObjArgs(dirfunc, NULL);
1327 Py_DECREF(dirfunc);
1328 if (result == NULL)
1329 return NULL;
Benjamin Peterson3bbb7222011-06-11 16:12:08 -05001330 /* return sorted(result) */
1331 sorted = PySequence_List(result);
1332 Py_DECREF(result);
1333 if (sorted == NULL)
1334 return NULL;
1335 if (PyList_Sort(sorted)) {
1336 Py_DECREF(sorted);
1337 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001338 }
Benjamin Peterson3bbb7222011-06-11 16:12:08 -05001339 return sorted;
Georg Brandle32b4222007-03-10 22:13:27 +00001340}
1341
1342/* Implementation of dir() -- if obj is NULL, returns the names in the current
1343 (local) scope. Otherwise, performs introspection of the object: returns a
1344 sorted list of attribute names (supposedly) accessible from the object
1345*/
1346PyObject *
1347PyObject_Dir(PyObject *obj)
1348{
Benjamin Peterson3bbb7222011-06-11 16:12:08 -05001349 return (obj == NULL) ? _dir_locals() : _dir_object(obj);
Tim Peters7eea37e2001-09-04 22:08:56 +00001350}
Guido van Rossum49b11fe1995-01-26 00:38:22 +00001351
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001352/*
Raymond Hettinger66d2be82011-07-28 09:55:13 -07001353None is a non-NULL undefined value.
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001354There is (and should be!) no way to create other objects of this type,
Guido van Rossum3f5da241990-12-20 15:06:42 +00001355so there is exactly one (which is indestructible, by the way).
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001356*/
1357
Guido van Rossum0c182a11992-03-27 17:26:13 +00001358/* ARGSUSED */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001359static PyObject *
Fred Drake100814d2000-07-09 15:48:49 +00001360none_repr(PyObject *op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001361{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001362 return PyUnicode_FromString("None");
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001363}
1364
Barry Warsaw9bf16442001-01-23 16:24:35 +00001365/* ARGUSED */
1366static void
Tim Peters803526b2002-07-07 05:13:56 +00001367none_dealloc(PyObject* ignore)
Barry Warsaw9bf16442001-01-23 16:24:35 +00001368{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001369 /* This should never get called, but we also don't want to SEGV if
1370 * we accidentally decref None out of existence.
1371 */
1372 Py_FatalError("deallocating None");
Barry Warsaw9bf16442001-01-23 16:24:35 +00001373}
1374
Benjamin Petersonc4607ae2011-07-29 18:19:43 -05001375static PyObject *
1376none_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
1377{
1378 if (PyTuple_GET_SIZE(args) || (kwargs && PyDict_Size(kwargs))) {
1379 PyErr_SetString(PyExc_TypeError, "NoneType takes no arguments");
1380 return NULL;
1381 }
1382 Py_RETURN_NONE;
1383}
1384
Raymond Hettinger66d2be82011-07-28 09:55:13 -07001385static int
1386none_bool(PyObject *v)
1387{
1388 return 0;
1389}
1390
1391static PyNumberMethods none_as_number = {
1392 0, /* nb_add */
1393 0, /* nb_subtract */
1394 0, /* nb_multiply */
1395 0, /* nb_remainder */
1396 0, /* nb_divmod */
1397 0, /* nb_power */
1398 0, /* nb_negative */
1399 0, /* nb_positive */
1400 0, /* nb_absolute */
1401 (inquiry)none_bool, /* nb_bool */
1402 0, /* nb_invert */
1403 0, /* nb_lshift */
1404 0, /* nb_rshift */
1405 0, /* nb_and */
1406 0, /* nb_xor */
1407 0, /* nb_or */
1408 0, /* nb_int */
1409 0, /* nb_reserved */
1410 0, /* nb_float */
1411 0, /* nb_inplace_add */
1412 0, /* nb_inplace_subtract */
1413 0, /* nb_inplace_multiply */
1414 0, /* nb_inplace_remainder */
1415 0, /* nb_inplace_power */
1416 0, /* nb_inplace_lshift */
1417 0, /* nb_inplace_rshift */
1418 0, /* nb_inplace_and */
1419 0, /* nb_inplace_xor */
1420 0, /* nb_inplace_or */
1421 0, /* nb_floor_divide */
1422 0, /* nb_true_divide */
1423 0, /* nb_inplace_floor_divide */
1424 0, /* nb_inplace_true_divide */
1425 0, /* nb_index */
1426};
Barry Warsaw9bf16442001-01-23 16:24:35 +00001427
Alexandre Vassalotti65846c62013-11-30 17:55:48 -08001428PyTypeObject _PyNone_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001429 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1430 "NoneType",
1431 0,
1432 0,
1433 none_dealloc, /*tp_dealloc*/ /*never called*/
1434 0, /*tp_print*/
1435 0, /*tp_getattr*/
1436 0, /*tp_setattr*/
1437 0, /*tp_reserved*/
1438 none_repr, /*tp_repr*/
Raymond Hettinger66d2be82011-07-28 09:55:13 -07001439 &none_as_number, /*tp_as_number*/
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001440 0, /*tp_as_sequence*/
1441 0, /*tp_as_mapping*/
1442 0, /*tp_hash */
Benjamin Petersonc4607ae2011-07-29 18:19:43 -05001443 0, /*tp_call */
1444 0, /*tp_str */
1445 0, /*tp_getattro */
1446 0, /*tp_setattro */
1447 0, /*tp_as_buffer */
1448 Py_TPFLAGS_DEFAULT, /*tp_flags */
1449 0, /*tp_doc */
1450 0, /*tp_traverse */
1451 0, /*tp_clear */
1452 0, /*tp_richcompare */
1453 0, /*tp_weaklistoffset */
1454 0, /*tp_iter */
1455 0, /*tp_iternext */
1456 0, /*tp_methods */
1457 0, /*tp_members */
1458 0, /*tp_getset */
1459 0, /*tp_base */
1460 0, /*tp_dict */
1461 0, /*tp_descr_get */
1462 0, /*tp_descr_set */
1463 0, /*tp_dictoffset */
1464 0, /*tp_init */
1465 0, /*tp_alloc */
1466 none_new, /*tp_new */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001467};
1468
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001469PyObject _Py_NoneStruct = {
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00001470 _PyObject_EXTRA_INIT
Alexandre Vassalotti65846c62013-11-30 17:55:48 -08001471 1, &_PyNone_Type
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001472};
1473
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +00001474/* NotImplemented is an object that can be used to signal that an
1475 operation is not implemented for the given type combination. */
1476
1477static PyObject *
1478NotImplemented_repr(PyObject *op)
1479{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001480 return PyUnicode_FromString("NotImplemented");
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +00001481}
1482
Benjamin Peterson18d7d7a2011-07-29 18:27:44 -05001483static PyObject *
Alexandre Vassalottic49477b2013-11-24 02:53:45 -08001484NotImplemented_reduce(PyObject *op)
1485{
1486 return PyUnicode_FromString("NotImplemented");
1487}
1488
1489static PyMethodDef notimplemented_methods[] = {
1490 {"__reduce__", (PyCFunction)NotImplemented_reduce, METH_NOARGS, NULL},
1491 {NULL, NULL}
1492};
1493
1494static PyObject *
Benjamin Peterson18d7d7a2011-07-29 18:27:44 -05001495notimplemented_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
1496{
1497 if (PyTuple_GET_SIZE(args) || (kwargs && PyDict_Size(kwargs))) {
1498 PyErr_SetString(PyExc_TypeError, "NotImplementedType takes no arguments");
1499 return NULL;
1500 }
Brian Curtindfc80e32011-08-10 20:28:54 -05001501 Py_RETURN_NOTIMPLEMENTED;
Benjamin Peterson18d7d7a2011-07-29 18:27:44 -05001502}
1503
Armin Ronacher226b1db2012-10-06 14:28:58 +02001504static void
1505notimplemented_dealloc(PyObject* ignore)
1506{
1507 /* This should never get called, but we also don't want to SEGV if
1508 * we accidentally decref NotImplemented out of existence.
1509 */
1510 Py_FatalError("deallocating NotImplemented");
1511}
1512
Alexandre Vassalotti65846c62013-11-30 17:55:48 -08001513PyTypeObject _PyNotImplemented_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001514 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1515 "NotImplementedType",
1516 0,
1517 0,
Armin Ronacher226b1db2012-10-06 14:28:58 +02001518 notimplemented_dealloc, /*tp_dealloc*/ /*never called*/
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001519 0, /*tp_print*/
1520 0, /*tp_getattr*/
1521 0, /*tp_setattr*/
1522 0, /*tp_reserved*/
1523 NotImplemented_repr, /*tp_repr*/
1524 0, /*tp_as_number*/
1525 0, /*tp_as_sequence*/
1526 0, /*tp_as_mapping*/
1527 0, /*tp_hash */
Benjamin Peterson18d7d7a2011-07-29 18:27:44 -05001528 0, /*tp_call */
1529 0, /*tp_str */
1530 0, /*tp_getattro */
1531 0, /*tp_setattro */
1532 0, /*tp_as_buffer */
1533 Py_TPFLAGS_DEFAULT, /*tp_flags */
1534 0, /*tp_doc */
1535 0, /*tp_traverse */
1536 0, /*tp_clear */
1537 0, /*tp_richcompare */
1538 0, /*tp_weaklistoffset */
1539 0, /*tp_iter */
1540 0, /*tp_iternext */
Alexandre Vassalottic49477b2013-11-24 02:53:45 -08001541 notimplemented_methods, /*tp_methods */
Benjamin Peterson18d7d7a2011-07-29 18:27:44 -05001542 0, /*tp_members */
1543 0, /*tp_getset */
1544 0, /*tp_base */
1545 0, /*tp_dict */
1546 0, /*tp_descr_get */
1547 0, /*tp_descr_set */
1548 0, /*tp_dictoffset */
1549 0, /*tp_init */
1550 0, /*tp_alloc */
1551 notimplemented_new, /*tp_new */
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +00001552};
1553
1554PyObject _Py_NotImplementedStruct = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001555 _PyObject_EXTRA_INIT
Alexandre Vassalotti65846c62013-11-30 17:55:48 -08001556 1, &_PyNotImplemented_Type
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +00001557};
1558
Guido van Rossumba21a492001-08-16 08:17:26 +00001559void
1560_Py_ReadyTypes(void)
1561{
Victor Stinner5a1bb4e2014-06-02 14:10:59 +02001562 if (PyType_Ready(&PyBaseObject_Type) < 0)
1563 Py_FatalError("Can't initialize object type");
1564
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001565 if (PyType_Ready(&PyType_Type) < 0)
1566 Py_FatalError("Can't initialize type type");
Guido van Rossumba21a492001-08-16 08:17:26 +00001567
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001568 if (PyType_Ready(&_PyWeakref_RefType) < 0)
1569 Py_FatalError("Can't initialize weakref type");
Fred Drake0a4dd392004-07-02 18:57:45 +00001570
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001571 if (PyType_Ready(&_PyWeakref_CallableProxyType) < 0)
1572 Py_FatalError("Can't initialize callable weakref proxy type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001573
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001574 if (PyType_Ready(&_PyWeakref_ProxyType) < 0)
1575 Py_FatalError("Can't initialize weakref proxy type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001576
Victor Stinner5a1bb4e2014-06-02 14:10:59 +02001577 if (PyType_Ready(&PyLong_Type) < 0)
1578 Py_FatalError("Can't initialize int type");
1579
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001580 if (PyType_Ready(&PyBool_Type) < 0)
1581 Py_FatalError("Can't initialize bool type");
Guido van Rossum77f6a652002-04-03 22:41:51 +00001582
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001583 if (PyType_Ready(&PyByteArray_Type) < 0)
1584 Py_FatalError("Can't initialize bytearray type");
Guido van Rossum4dfe8a12006-04-22 23:28:04 +00001585
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001586 if (PyType_Ready(&PyBytes_Type) < 0)
1587 Py_FatalError("Can't initialize 'str'");
Guido van Rossumcacfc072002-05-24 19:01:59 +00001588
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001589 if (PyType_Ready(&PyList_Type) < 0)
1590 Py_FatalError("Can't initialize list type");
Guido van Rossumba21a492001-08-16 08:17:26 +00001591
Alexandre Vassalotti65846c62013-11-30 17:55:48 -08001592 if (PyType_Ready(&_PyNone_Type) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001593 Py_FatalError("Can't initialize None type");
Guido van Rossumba21a492001-08-16 08:17:26 +00001594
Alexandre Vassalotti65846c62013-11-30 17:55:48 -08001595 if (PyType_Ready(&_PyNotImplemented_Type) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001596 Py_FatalError("Can't initialize NotImplemented type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001597
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001598 if (PyType_Ready(&PyTraceBack_Type) < 0)
1599 Py_FatalError("Can't initialize traceback type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001600
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001601 if (PyType_Ready(&PySuper_Type) < 0)
1602 Py_FatalError("Can't initialize super type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001603
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001604 if (PyType_Ready(&PyRange_Type) < 0)
1605 Py_FatalError("Can't initialize range type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001606
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001607 if (PyType_Ready(&PyDict_Type) < 0)
1608 Py_FatalError("Can't initialize dict type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001609
Eric Snow96c6af92015-05-29 22:21:39 -06001610 if (PyType_Ready(&PyODict_Type) < 0)
1611 Py_FatalError("Can't initialize OrderedDict type");
1612
1613 if (PyType_Ready(&PyODictKeys_Type) < 0)
1614 Py_FatalError("Can't initialize odict_keys type");
1615
1616 if (PyType_Ready(&PyODictItems_Type) < 0)
1617 Py_FatalError("Can't initialize odict_items type");
1618
1619 if (PyType_Ready(&PyODictValues_Type) < 0)
1620 Py_FatalError("Can't initialize odict_values type");
1621
1622 if (PyType_Ready(&PyODictIter_Type) < 0)
1623 Py_FatalError("Can't initialize odict_keyiterator type");
1624
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001625 if (PyType_Ready(&PySet_Type) < 0)
1626 Py_FatalError("Can't initialize set type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001627
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001628 if (PyType_Ready(&PyUnicode_Type) < 0)
1629 Py_FatalError("Can't initialize str type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001630
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001631 if (PyType_Ready(&PySlice_Type) < 0)
1632 Py_FatalError("Can't initialize slice type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001633
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001634 if (PyType_Ready(&PyStaticMethod_Type) < 0)
1635 Py_FatalError("Can't initialize static method type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001636
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001637 if (PyType_Ready(&PyComplex_Type) < 0)
1638 Py_FatalError("Can't initialize complex type");
Skip Montanaroba1e0f42009-10-18 14:25:35 +00001639
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001640 if (PyType_Ready(&PyFloat_Type) < 0)
1641 Py_FatalError("Can't initialize float type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001642
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001643 if (PyType_Ready(&PyFrozenSet_Type) < 0)
1644 Py_FatalError("Can't initialize frozenset type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001645
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001646 if (PyType_Ready(&PyProperty_Type) < 0)
1647 Py_FatalError("Can't initialize property type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001648
Stefan Krah9a2d99e2012-02-25 12:24:21 +01001649 if (PyType_Ready(&_PyManagedBuffer_Type) < 0)
1650 Py_FatalError("Can't initialize managed buffer type");
1651
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001652 if (PyType_Ready(&PyMemoryView_Type) < 0)
1653 Py_FatalError("Can't initialize memoryview type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001654
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001655 if (PyType_Ready(&PyTuple_Type) < 0)
1656 Py_FatalError("Can't initialize tuple type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001657
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001658 if (PyType_Ready(&PyEnum_Type) < 0)
1659 Py_FatalError("Can't initialize enumerate type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001660
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001661 if (PyType_Ready(&PyReversed_Type) < 0)
1662 Py_FatalError("Can't initialize reversed type");
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001663
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001664 if (PyType_Ready(&PyStdPrinter_Type) < 0)
1665 Py_FatalError("Can't initialize StdPrinter");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001666
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001667 if (PyType_Ready(&PyCode_Type) < 0)
1668 Py_FatalError("Can't initialize code type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001669
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001670 if (PyType_Ready(&PyFrame_Type) < 0)
1671 Py_FatalError("Can't initialize frame type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001672
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001673 if (PyType_Ready(&PyCFunction_Type) < 0)
1674 Py_FatalError("Can't initialize builtin function type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001675
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001676 if (PyType_Ready(&PyMethod_Type) < 0)
1677 Py_FatalError("Can't initialize method type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001678
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001679 if (PyType_Ready(&PyFunction_Type) < 0)
1680 Py_FatalError("Can't initialize function type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001681
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001682 if (PyType_Ready(&PyDictProxy_Type) < 0)
1683 Py_FatalError("Can't initialize dict proxy type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001684
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001685 if (PyType_Ready(&PyGen_Type) < 0)
1686 Py_FatalError("Can't initialize generator type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001687
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001688 if (PyType_Ready(&PyGetSetDescr_Type) < 0)
1689 Py_FatalError("Can't initialize get-set descriptor type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001690
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001691 if (PyType_Ready(&PyWrapperDescr_Type) < 0)
1692 Py_FatalError("Can't initialize wrapper type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001693
Benjamin Petersoneff61f62011-09-01 16:32:31 -04001694 if (PyType_Ready(&_PyMethodWrapper_Type) < 0)
1695 Py_FatalError("Can't initialize method wrapper type");
1696
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001697 if (PyType_Ready(&PyEllipsis_Type) < 0)
1698 Py_FatalError("Can't initialize ellipsis type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001699
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001700 if (PyType_Ready(&PyMemberDescr_Type) < 0)
1701 Py_FatalError("Can't initialize member descriptor type");
Benjamin Peterson8bc5b682009-05-09 18:10:51 +00001702
Barry Warsaw409da152012-06-03 16:18:47 -04001703 if (PyType_Ready(&_PyNamespace_Type) < 0)
1704 Py_FatalError("Can't initialize namespace type");
Benjamin Petersone8ea97f2012-10-30 23:27:52 -04001705
Benjamin Petersonc4311282012-10-30 23:21:10 -04001706 if (PyType_Ready(&PyCapsule_Type) < 0)
1707 Py_FatalError("Can't initialize capsule type");
1708
1709 if (PyType_Ready(&PyLongRangeIter_Type) < 0)
1710 Py_FatalError("Can't initialize long range iterator type");
1711
1712 if (PyType_Ready(&PyCell_Type) < 0)
1713 Py_FatalError("Can't initialize cell type");
1714
1715 if (PyType_Ready(&PyInstanceMethod_Type) < 0)
1716 Py_FatalError("Can't initialize instance method type");
1717
1718 if (PyType_Ready(&PyClassMethodDescr_Type) < 0)
1719 Py_FatalError("Can't initialize class method descr type");
1720
1721 if (PyType_Ready(&PyMethodDescr_Type) < 0)
1722 Py_FatalError("Can't initialize method descr type");
1723
1724 if (PyType_Ready(&PyCallIter_Type) < 0)
1725 Py_FatalError("Can't initialize call iter type");
1726
1727 if (PyType_Ready(&PySeqIter_Type) < 0)
1728 Py_FatalError("Can't initialize sequence iterator type");
Guido van Rossumba21a492001-08-16 08:17:26 +00001729}
1730
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001731
Guido van Rossum84a90321996-05-22 16:34:47 +00001732#ifdef Py_TRACE_REFS
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001733
Guido van Rossumaacdc9d1996-08-12 21:32:12 +00001734void
Fred Drake100814d2000-07-09 15:48:49 +00001735_Py_NewReference(PyObject *op)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001736{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001737 _Py_INC_REFTOTAL;
1738 op->ob_refcnt = 1;
1739 _Py_AddToAllObjects(op, 1);
1740 _Py_INC_TPALLOCS(op);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001741}
1742
Guido van Rossumaacdc9d1996-08-12 21:32:12 +00001743void
Antoine Pitrou9ed5f272013-08-13 20:18:52 +02001744_Py_ForgetReference(PyObject *op)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001745{
Guido van Rossumbffd6832000-01-20 22:32:56 +00001746#ifdef SLOW_UNREF_CHECK
Antoine Pitrou9ed5f272013-08-13 20:18:52 +02001747 PyObject *p;
Guido van Rossumbffd6832000-01-20 22:32:56 +00001748#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001749 if (op->ob_refcnt < 0)
1750 Py_FatalError("UNREF negative refcnt");
1751 if (op == &refchain ||
1752 op->_ob_prev->_ob_next != op || op->_ob_next->_ob_prev != op) {
1753 fprintf(stderr, "* ob\n");
1754 _PyObject_Dump(op);
1755 fprintf(stderr, "* op->_ob_prev->_ob_next\n");
1756 _PyObject_Dump(op->_ob_prev->_ob_next);
1757 fprintf(stderr, "* op->_ob_next->_ob_prev\n");
1758 _PyObject_Dump(op->_ob_next->_ob_prev);
1759 Py_FatalError("UNREF invalid object");
1760 }
Guido van Rossum2e8f6141992-09-03 20:32:55 +00001761#ifdef SLOW_UNREF_CHECK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001762 for (p = refchain._ob_next; p != &refchain; p = p->_ob_next) {
1763 if (p == op)
1764 break;
1765 }
1766 if (p == &refchain) /* Not found */
1767 Py_FatalError("UNREF unknown object");
Guido van Rossum2e8f6141992-09-03 20:32:55 +00001768#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001769 op->_ob_next->_ob_prev = op->_ob_prev;
1770 op->_ob_prev->_ob_next = op->_ob_next;
1771 op->_ob_next = op->_ob_prev = NULL;
1772 _Py_INC_TPFREES(op);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001773}
1774
Guido van Rossumaacdc9d1996-08-12 21:32:12 +00001775void
Fred Drake100814d2000-07-09 15:48:49 +00001776_Py_Dealloc(PyObject *op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001777{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001778 destructor dealloc = Py_TYPE(op)->tp_dealloc;
1779 _Py_ForgetReference(op);
1780 (*dealloc)(op);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001781}
1782
Tim Peters269b2a62003-04-17 19:52:29 +00001783/* Print all live objects. Because PyObject_Print is called, the
1784 * interpreter must be in a healthy state.
1785 */
Guido van Rossumaacdc9d1996-08-12 21:32:12 +00001786void
Fred Drake100814d2000-07-09 15:48:49 +00001787_Py_PrintReferences(FILE *fp)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001788{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001789 PyObject *op;
1790 fprintf(fp, "Remaining objects:\n");
1791 for (op = refchain._ob_next; op != &refchain; op = op->_ob_next) {
1792 fprintf(fp, "%p [%" PY_FORMAT_SIZE_T "d] ", op, op->ob_refcnt);
1793 if (PyObject_Print(op, fp, 0) != 0)
1794 PyErr_Clear();
1795 putc('\n', fp);
1796 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001797}
1798
Tim Peters269b2a62003-04-17 19:52:29 +00001799/* Print the addresses of all live objects. Unlike _Py_PrintReferences, this
1800 * doesn't make any calls to the Python C API, so is always safe to call.
1801 */
1802void
1803_Py_PrintReferenceAddresses(FILE *fp)
1804{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001805 PyObject *op;
1806 fprintf(fp, "Remaining object addresses:\n");
1807 for (op = refchain._ob_next; op != &refchain; op = op->_ob_next)
1808 fprintf(fp, "%p [%" PY_FORMAT_SIZE_T "d] %s\n", op,
1809 op->ob_refcnt, Py_TYPE(op)->tp_name);
Tim Peters269b2a62003-04-17 19:52:29 +00001810}
1811
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +00001812PyObject *
Fred Drake100814d2000-07-09 15:48:49 +00001813_Py_GetObjects(PyObject *self, PyObject *args)
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +00001814{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001815 int i, n;
1816 PyObject *t = NULL;
1817 PyObject *res, *op;
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +00001818
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001819 if (!PyArg_ParseTuple(args, "i|O", &n, &t))
1820 return NULL;
1821 op = refchain._ob_next;
1822 res = PyList_New(0);
1823 if (res == NULL)
1824 return NULL;
1825 for (i = 0; (n == 0 || i < n) && op != &refchain; i++) {
1826 while (op == self || op == args || op == res || op == t ||
1827 (t != NULL && Py_TYPE(op) != (PyTypeObject *) t)) {
1828 op = op->_ob_next;
1829 if (op == &refchain)
1830 return res;
1831 }
1832 if (PyList_Append(res, op) < 0) {
1833 Py_DECREF(res);
1834 return NULL;
1835 }
1836 op = op->_ob_next;
1837 }
1838 return res;
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +00001839}
1840
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001841#endif
Guido van Rossum97ead3f1996-01-12 01:24:09 +00001842
Benjamin Petersonb173f782009-05-05 22:31:58 +00001843
Guido van Rossum84a90321996-05-22 16:34:47 +00001844/* Hack to force loading of abstract.o */
Martin v. Löwis18e16552006-02-15 17:27:45 +00001845Py_ssize_t (*_Py_abstract_hack)(PyObject *) = PyObject_Size;
Guido van Rossume09fb551997-08-05 02:04:34 +00001846
1847
David Malcolm49526f42012-06-22 14:55:41 -04001848void
1849_PyObject_DebugTypeStats(FILE *out)
1850{
1851 _PyCFunction_DebugMallocStats(out);
1852 _PyDict_DebugMallocStats(out);
1853 _PyFloat_DebugMallocStats(out);
1854 _PyFrame_DebugMallocStats(out);
1855 _PyList_DebugMallocStats(out);
1856 _PyMethod_DebugMallocStats(out);
David Malcolm49526f42012-06-22 14:55:41 -04001857 _PyTuple_DebugMallocStats(out);
1858}
Guido van Rossumb18618d2000-05-03 23:44:39 +00001859
Guido van Rossum86610361998-04-10 22:32:46 +00001860/* These methods are used to control infinite recursion in repr, str, print,
1861 etc. Container objects that may recursively contain themselves,
1862 e.g. builtin dictionaries and lists, should used Py_ReprEnter() and
1863 Py_ReprLeave() to avoid infinite recursion.
1864
1865 Py_ReprEnter() returns 0 the first time it is called for a particular
1866 object and 1 every time thereafter. It returns -1 if an exception
1867 occurred. Py_ReprLeave() has no return value.
1868
1869 See dictobject.c and listobject.c for examples of use.
1870*/
1871
Guido van Rossum86610361998-04-10 22:32:46 +00001872int
Fred Drake100814d2000-07-09 15:48:49 +00001873Py_ReprEnter(PyObject *obj)
Guido van Rossum86610361998-04-10 22:32:46 +00001874{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001875 PyObject *dict;
1876 PyObject *list;
1877 Py_ssize_t i;
Guido van Rossum86610361998-04-10 22:32:46 +00001878
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001879 dict = PyThreadState_GetDict();
Antoine Pitrou04d17d32014-03-31 22:04:38 +02001880 /* Ignore a missing thread-state, so that this function can be called
1881 early on startup. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001882 if (dict == NULL)
1883 return 0;
Victor Stinner7a07e452013-11-06 18:57:29 +01001884 list = _PyDict_GetItemId(dict, &PyId_Py_Repr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001885 if (list == NULL) {
1886 list = PyList_New(0);
1887 if (list == NULL)
1888 return -1;
Victor Stinner7a07e452013-11-06 18:57:29 +01001889 if (_PyDict_SetItemId(dict, &PyId_Py_Repr, list) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001890 return -1;
1891 Py_DECREF(list);
1892 }
1893 i = PyList_GET_SIZE(list);
1894 while (--i >= 0) {
1895 if (PyList_GET_ITEM(list, i) == obj)
1896 return 1;
1897 }
Victor Stinnere901d1f2013-07-17 21:58:41 +02001898 if (PyList_Append(list, obj) < 0)
1899 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001900 return 0;
Guido van Rossum86610361998-04-10 22:32:46 +00001901}
1902
1903void
Fred Drake100814d2000-07-09 15:48:49 +00001904Py_ReprLeave(PyObject *obj)
Guido van Rossum86610361998-04-10 22:32:46 +00001905{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001906 PyObject *dict;
1907 PyObject *list;
1908 Py_ssize_t i;
Victor Stinner1b634932013-07-16 22:24:44 +02001909 PyObject *error_type, *error_value, *error_traceback;
1910
1911 PyErr_Fetch(&error_type, &error_value, &error_traceback);
Guido van Rossum86610361998-04-10 22:32:46 +00001912
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001913 dict = PyThreadState_GetDict();
1914 if (dict == NULL)
Victor Stinner1b634932013-07-16 22:24:44 +02001915 goto finally;
1916
Victor Stinner7a07e452013-11-06 18:57:29 +01001917 list = _PyDict_GetItemId(dict, &PyId_Py_Repr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001918 if (list == NULL || !PyList_Check(list))
Victor Stinner1b634932013-07-16 22:24:44 +02001919 goto finally;
1920
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001921 i = PyList_GET_SIZE(list);
1922 /* Count backwards because we always expect obj to be list[-1] */
1923 while (--i >= 0) {
1924 if (PyList_GET_ITEM(list, i) == obj) {
1925 PyList_SetSlice(list, i, i + 1, NULL);
1926 break;
1927 }
1928 }
Victor Stinner1b634932013-07-16 22:24:44 +02001929
1930finally:
1931 /* ignore exceptions because there is no way to report them. */
1932 PyErr_Restore(error_type, error_value, error_traceback);
Guido van Rossum86610361998-04-10 22:32:46 +00001933}
Guido van Rossumd724b232000-03-13 16:01:29 +00001934
Tim Peters803526b2002-07-07 05:13:56 +00001935/* Trashcan support. */
Guido van Rossumd724b232000-03-13 16:01:29 +00001936
Tim Peters803526b2002-07-07 05:13:56 +00001937/* Current call-stack depth of tp_dealloc calls. */
Guido van Rossumd724b232000-03-13 16:01:29 +00001938int _PyTrash_delete_nesting = 0;
Guido van Rossume92e6102000-04-24 15:40:53 +00001939
Tim Peters803526b2002-07-07 05:13:56 +00001940/* List of objects that still need to be cleaned up, singly linked via their
1941 * gc headers' gc_prev pointers.
1942 */
1943PyObject *_PyTrash_delete_later = NULL;
Guido van Rossumd724b232000-03-13 16:01:29 +00001944
Tim Peters803526b2002-07-07 05:13:56 +00001945/* Add op to the _PyTrash_delete_later list. Called when the current
1946 * call-stack depth gets large. op must be a currently untracked gc'ed
1947 * object, with refcount 0. Py_DECREF must already have been called on it.
1948 */
Guido van Rossumd724b232000-03-13 16:01:29 +00001949void
Fred Drake100814d2000-07-09 15:48:49 +00001950_PyTrash_deposit_object(PyObject *op)
Guido van Rossumd724b232000-03-13 16:01:29 +00001951{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001952 assert(PyObject_IS_GC(op));
Antoine Pitrou796564c2013-07-30 19:59:21 +02001953 assert(_PyGC_REFS(op) == _PyGC_REFS_UNTRACKED);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001954 assert(op->ob_refcnt == 0);
1955 _Py_AS_GC(op)->gc.gc_prev = (PyGC_Head *)_PyTrash_delete_later;
1956 _PyTrash_delete_later = op;
Guido van Rossumd724b232000-03-13 16:01:29 +00001957}
1958
Antoine Pitrou2b0218a2012-09-06 00:59:49 +02001959/* The equivalent API, using per-thread state recursion info */
1960void
1961_PyTrash_thread_deposit_object(PyObject *op)
1962{
1963 PyThreadState *tstate = PyThreadState_GET();
1964 assert(PyObject_IS_GC(op));
Antoine Pitrou796564c2013-07-30 19:59:21 +02001965 assert(_PyGC_REFS(op) == _PyGC_REFS_UNTRACKED);
Antoine Pitrou2b0218a2012-09-06 00:59:49 +02001966 assert(op->ob_refcnt == 0);
1967 _Py_AS_GC(op)->gc.gc_prev = (PyGC_Head *) tstate->trash_delete_later;
1968 tstate->trash_delete_later = op;
1969}
1970
Tim Peters803526b2002-07-07 05:13:56 +00001971/* Dealloccate all the objects in the _PyTrash_delete_later list. Called when
1972 * the call-stack unwinds again.
1973 */
Guido van Rossumd724b232000-03-13 16:01:29 +00001974void
Fred Drake100814d2000-07-09 15:48:49 +00001975_PyTrash_destroy_chain(void)
Guido van Rossumd724b232000-03-13 16:01:29 +00001976{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001977 while (_PyTrash_delete_later) {
1978 PyObject *op = _PyTrash_delete_later;
1979 destructor dealloc = Py_TYPE(op)->tp_dealloc;
Neil Schemenauerf589c052002-03-29 03:05:54 +00001980
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001981 _PyTrash_delete_later =
1982 (PyObject*) _Py_AS_GC(op)->gc.gc_prev;
Neil Schemenauerf589c052002-03-29 03:05:54 +00001983
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001984 /* Call the deallocator directly. This used to try to
1985 * fool Py_DECREF into calling it indirectly, but
1986 * Py_DECREF was already called on this object, and in
1987 * assorted non-release builds calling Py_DECREF again ends
1988 * up distorting allocation statistics.
1989 */
1990 assert(op->ob_refcnt == 0);
1991 ++_PyTrash_delete_nesting;
1992 (*dealloc)(op);
1993 --_PyTrash_delete_nesting;
1994 }
Guido van Rossumd724b232000-03-13 16:01:29 +00001995}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001996
Antoine Pitrou2b0218a2012-09-06 00:59:49 +02001997/* The equivalent API, using per-thread state recursion info */
1998void
1999_PyTrash_thread_destroy_chain(void)
2000{
2001 PyThreadState *tstate = PyThreadState_GET();
2002 while (tstate->trash_delete_later) {
2003 PyObject *op = tstate->trash_delete_later;
2004 destructor dealloc = Py_TYPE(op)->tp_dealloc;
2005
2006 tstate->trash_delete_later =
2007 (PyObject*) _Py_AS_GC(op)->gc.gc_prev;
2008
2009 /* Call the deallocator directly. This used to try to
2010 * fool Py_DECREF into calling it indirectly, but
2011 * Py_DECREF was already called on this object, and in
2012 * assorted non-release builds calling Py_DECREF again ends
2013 * up distorting allocation statistics.
2014 */
2015 assert(op->ob_refcnt == 0);
2016 ++tstate->trash_delete_nesting;
2017 (*dealloc)(op);
2018 --tstate->trash_delete_nesting;
2019 }
2020}
2021
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00002022#ifndef Py_TRACE_REFS
2023/* For Py_LIMITED_API, we need an out-of-line version of _Py_Dealloc.
2024 Define this here, so we can undefine the macro. */
2025#undef _Py_Dealloc
2026PyAPI_FUNC(void) _Py_Dealloc(PyObject *);
2027void
2028_Py_Dealloc(PyObject *op)
2029{
2030 _Py_INC_TPFREES(op) _Py_COUNT_ALLOCS_COMMA
2031 (*Py_TYPE(op)->tp_dealloc)(op);
2032}
2033#endif
2034
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002035#ifdef __cplusplus
2036}
2037#endif