blob: c83109d39b52e66ebcdd3a1a704ebd27df6f429f [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
Tim Peters34592512002-07-11 06:23:50 +000011#ifdef Py_REF_DEBUG
Neal Norwitz84632ee2006-03-04 20:00:59 +000012Py_ssize_t _Py_RefTotal;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000013
14Py_ssize_t
15_Py_GetRefTotal(void)
16{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000017 PyObject *o;
18 Py_ssize_t total = _Py_RefTotal;
19 /* ignore the references to the dummy object of the dicts and sets
20 because they are not reliable and not useful (now that the
21 hash table code is well-tested) */
22 o = _PyDict_Dummy();
23 if (o != NULL)
24 total -= o->ob_refcnt;
25 o = _PySet_Dummy();
26 if (o != NULL)
27 total -= o->ob_refcnt;
28 return total;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000029}
30#endif /* Py_REF_DEBUG */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000031
Guido van Rossum3f5da241990-12-20 15:06:42 +000032/* Object allocation routines used by NEWOBJ and NEWVAROBJ macros.
33 These are used by the individual routines for object creation.
34 Do not call them otherwise, they do not initialize the object! */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000035
Tim Peters78be7992003-03-23 02:51:01 +000036#ifdef Py_TRACE_REFS
Tim Peters7571a0f2003-03-23 17:52:28 +000037/* Head of circular doubly-linked list of all objects. These are linked
38 * together via the _ob_prev and _ob_next members of a PyObject, which
39 * exist only in a Py_TRACE_REFS build.
40 */
Tim Peters78be7992003-03-23 02:51:01 +000041static PyObject refchain = {&refchain, &refchain};
Tim Peters36eb4df2003-03-23 03:33:13 +000042
Tim Peters7571a0f2003-03-23 17:52:28 +000043/* Insert op at the front of the list of all objects. If force is true,
44 * op is added even if _ob_prev and _ob_next are non-NULL already. If
45 * force is false amd _ob_prev or _ob_next are non-NULL, do nothing.
46 * force should be true if and only if op points to freshly allocated,
47 * uninitialized memory, or you've unlinked op from the list and are
Tim Peters51f8d382003-03-23 18:06:08 +000048 * relinking it into the front.
Tim Peters7571a0f2003-03-23 17:52:28 +000049 * Note that objects are normally added to the list via _Py_NewReference,
50 * which is called by PyObject_Init. Not all objects are initialized that
51 * way, though; exceptions include statically allocated type objects, and
52 * statically allocated singletons (like Py_True and Py_None).
53 */
Tim Peters36eb4df2003-03-23 03:33:13 +000054void
Tim Peters7571a0f2003-03-23 17:52:28 +000055_Py_AddToAllObjects(PyObject *op, int force)
Tim Peters36eb4df2003-03-23 03:33:13 +000056{
Tim Peters7571a0f2003-03-23 17:52:28 +000057#ifdef Py_DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000058 if (!force) {
59 /* If it's initialized memory, op must be in or out of
60 * the list unambiguously.
61 */
62 assert((op->_ob_prev == NULL) == (op->_ob_next == NULL));
63 }
Tim Peters78be7992003-03-23 02:51:01 +000064#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000065 if (force || op->_ob_prev == NULL) {
66 op->_ob_next = refchain._ob_next;
67 op->_ob_prev = &refchain;
68 refchain._ob_next->_ob_prev = op;
69 refchain._ob_next = op;
70 }
Tim Peters7571a0f2003-03-23 17:52:28 +000071}
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000072#endif /* Py_TRACE_REFS */
Tim Peters78be7992003-03-23 02:51:01 +000073
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +000074#ifdef COUNT_ALLOCS
Guido van Rossumc0b618a1997-05-02 03:12:38 +000075static PyTypeObject *type_list;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000076/* All types are added to type_list, at least when
77 they get one object created. That makes them
78 immortal, which unfortunately contributes to
79 garbage itself. If unlist_types_without_objects
80 is set, they will be removed from the type_list
81 once the last object is deallocated. */
Benjamin Petersona4a37fe2009-01-11 17:13:55 +000082static int unlist_types_without_objects;
83extern Py_ssize_t tuple_zero_allocs, fast_tuple_allocs;
84extern Py_ssize_t quick_int_allocs, quick_neg_int_allocs;
85extern Py_ssize_t null_strings, one_strings;
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +000086void
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000087dump_counts(FILE* f)
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +000088{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000089 PyTypeObject *tp;
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +000090
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000091 for (tp = type_list; tp; tp = tp->tp_next)
92 fprintf(f, "%s alloc'd: %" PY_FORMAT_SIZE_T "d, "
93 "freed: %" PY_FORMAT_SIZE_T "d, "
94 "max in use: %" PY_FORMAT_SIZE_T "d\n",
95 tp->tp_name, tp->tp_allocs, tp->tp_frees,
96 tp->tp_maxalloc);
97 fprintf(f, "fast tuple allocs: %" PY_FORMAT_SIZE_T "d, "
98 "empty: %" PY_FORMAT_SIZE_T "d\n",
99 fast_tuple_allocs, tuple_zero_allocs);
100 fprintf(f, "fast int allocs: pos: %" PY_FORMAT_SIZE_T "d, "
101 "neg: %" PY_FORMAT_SIZE_T "d\n",
102 quick_int_allocs, quick_neg_int_allocs);
103 fprintf(f, "null strings: %" PY_FORMAT_SIZE_T "d, "
104 "1-strings: %" PY_FORMAT_SIZE_T "d\n",
105 null_strings, one_strings);
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000106}
107
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +0000108PyObject *
Fred Drake100814d2000-07-09 15:48:49 +0000109get_counts(void)
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +0000110{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000111 PyTypeObject *tp;
112 PyObject *result;
113 PyObject *v;
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +0000114
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000115 result = PyList_New(0);
116 if (result == NULL)
117 return NULL;
118 for (tp = type_list; tp; tp = tp->tp_next) {
119 v = Py_BuildValue("(snnn)", tp->tp_name, tp->tp_allocs,
120 tp->tp_frees, tp->tp_maxalloc);
121 if (v == NULL) {
122 Py_DECREF(result);
123 return NULL;
124 }
125 if (PyList_Append(result, v) < 0) {
126 Py_DECREF(v);
127 Py_DECREF(result);
128 return NULL;
129 }
130 Py_DECREF(v);
131 }
132 return result;
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +0000133}
134
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000135void
Fred Drake100814d2000-07-09 15:48:49 +0000136inc_count(PyTypeObject *tp)
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000137{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000138 if (tp->tp_next == NULL && tp->tp_prev == NULL) {
139 /* first time; insert in linked list */
140 if (tp->tp_next != NULL) /* sanity check */
141 Py_FatalError("XXX inc_count sanity check");
142 if (type_list)
143 type_list->tp_prev = tp;
144 tp->tp_next = type_list;
145 /* Note that as of Python 2.2, heap-allocated type objects
146 * can go away, but this code requires that they stay alive
147 * until program exit. That's why we're careful with
148 * refcounts here. type_list gets a new reference to tp,
149 * while ownership of the reference type_list used to hold
150 * (if any) was transferred to tp->tp_next in the line above.
151 * tp is thus effectively immortal after this.
152 */
153 Py_INCREF(tp);
154 type_list = tp;
Tim Peters3e40c7f2003-03-23 03:04:32 +0000155#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000156 /* Also insert in the doubly-linked list of all objects,
157 * if not already there.
158 */
159 _Py_AddToAllObjects((PyObject *)tp, 0);
Tim Peters78be7992003-03-23 02:51:01 +0000160#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000161 }
162 tp->tp_allocs++;
163 if (tp->tp_allocs - tp->tp_frees > tp->tp_maxalloc)
164 tp->tp_maxalloc = tp->tp_allocs - tp->tp_frees;
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000165}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000166
167void dec_count(PyTypeObject *tp)
168{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000169 tp->tp_frees++;
170 if (unlist_types_without_objects &&
171 tp->tp_allocs == tp->tp_frees) {
172 /* unlink the type from type_list */
173 if (tp->tp_prev)
174 tp->tp_prev->tp_next = tp->tp_next;
175 else
176 type_list = tp->tp_next;
177 if (tp->tp_next)
178 tp->tp_next->tp_prev = tp->tp_prev;
179 tp->tp_next = tp->tp_prev = NULL;
180 Py_DECREF(tp);
181 }
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000182}
183
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000184#endif
185
Tim Peters7c321a82002-07-09 02:57:01 +0000186#ifdef Py_REF_DEBUG
187/* Log a fatal error; doesn't return. */
188void
189_Py_NegativeRefcount(const char *fname, int lineno, PyObject *op)
190{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000191 char buf[300];
Tim Peters7c321a82002-07-09 02:57:01 +0000192
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000193 PyOS_snprintf(buf, sizeof(buf),
194 "%s:%i object at %p has negative ref count "
195 "%" PY_FORMAT_SIZE_T "d",
196 fname, lineno, op, op->ob_refcnt);
197 Py_FatalError(buf);
Tim Peters7c321a82002-07-09 02:57:01 +0000198}
199
200#endif /* Py_REF_DEBUG */
201
Thomas Heller1328b522004-04-22 17:23:49 +0000202void
203Py_IncRef(PyObject *o)
204{
205 Py_XINCREF(o);
206}
207
208void
209Py_DecRef(PyObject *o)
210{
211 Py_XDECREF(o);
212}
213
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000214PyObject *
Fred Drake100814d2000-07-09 15:48:49 +0000215PyObject_Init(PyObject *op, PyTypeObject *tp)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000216{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000217 if (op == NULL)
218 return PyErr_NoMemory();
219 /* Any changes should be reflected in PyObject_INIT (objimpl.h) */
220 Py_TYPE(op) = tp;
221 _Py_NewReference(op);
222 return op;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000223}
224
Guido van Rossumb18618d2000-05-03 23:44:39 +0000225PyVarObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +0000226PyObject_InitVar(PyVarObject *op, PyTypeObject *tp, Py_ssize_t size)
Guido van Rossumb18618d2000-05-03 23:44:39 +0000227{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000228 if (op == NULL)
229 return (PyVarObject *) PyErr_NoMemory();
230 /* Any changes should be reflected in PyObject_INIT_VAR */
231 op->ob_size = size;
232 Py_TYPE(op) = tp;
233 _Py_NewReference((PyObject *)op);
234 return op;
Guido van Rossumb18618d2000-05-03 23:44:39 +0000235}
236
237PyObject *
Fred Drake100814d2000-07-09 15:48:49 +0000238_PyObject_New(PyTypeObject *tp)
Guido van Rossumb18618d2000-05-03 23:44:39 +0000239{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000240 PyObject *op;
241 op = (PyObject *) PyObject_MALLOC(_PyObject_SIZE(tp));
242 if (op == NULL)
243 return PyErr_NoMemory();
244 return PyObject_INIT(op, tp);
Guido van Rossumb18618d2000-05-03 23:44:39 +0000245}
246
Guido van Rossumd0c87ee1997-05-15 21:31:03 +0000247PyVarObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +0000248_PyObject_NewVar(PyTypeObject *tp, Py_ssize_t nitems)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000249{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000250 PyVarObject *op;
251 const size_t size = _PyObject_VAR_SIZE(tp, nitems);
252 op = (PyVarObject *) PyObject_MALLOC(size);
253 if (op == NULL)
254 return (PyVarObject *)PyErr_NoMemory();
255 return PyObject_INIT_VAR(op, tp, nitems);
Guido van Rossumb18618d2000-05-03 23:44:39 +0000256}
257
Antoine Pitrou796564c2013-07-30 19:59:21 +0200258void
259PyObject_CallFinalizer(PyObject *self)
260{
261 PyTypeObject *tp = Py_TYPE(self);
262
263 /* The former could happen on heaptypes created from the C API, e.g.
264 PyType_FromSpec(). */
265 if (!PyType_HasFeature(tp, Py_TPFLAGS_HAVE_FINALIZE) ||
266 tp->tp_finalize == NULL)
267 return;
268 /* tp_finalize should only be called once. */
269 if (PyType_IS_GC(tp) && _PyGC_FINALIZED(self))
270 return;
271
272 tp->tp_finalize(self);
273 if (PyType_IS_GC(tp))
274 _PyGC_SET_FINALIZED(self, 1);
275}
276
277int
278PyObject_CallFinalizerFromDealloc(PyObject *self)
279{
280 Py_ssize_t refcnt;
281
282 /* Temporarily resurrect the object. */
283 if (self->ob_refcnt != 0) {
284 Py_FatalError("PyObject_CallFinalizerFromDealloc called on "
285 "object with a non-zero refcount");
286 }
287 self->ob_refcnt = 1;
288
289 PyObject_CallFinalizer(self);
290
291 /* Undo the temporary resurrection; can't use DECREF here, it would
292 * cause a recursive call.
293 */
294 assert(self->ob_refcnt > 0);
295 if (--self->ob_refcnt == 0)
296 return 0; /* this is the normal path out */
297
298 /* tp_finalize resurrected it! Make it look like the original Py_DECREF
299 * never happened.
300 */
301 refcnt = self->ob_refcnt;
302 _Py_NewReference(self);
303 self->ob_refcnt = refcnt;
304
305 if (PyType_IS_GC(Py_TYPE(self))) {
306 assert(_PyGC_REFS(self) != _PyGC_REFS_UNTRACKED);
307 }
308 /* If Py_REF_DEBUG, _Py_NewReference bumped _Py_RefTotal, so
309 * we need to undo that. */
310 _Py_DEC_REFTOTAL;
311 /* If Py_TRACE_REFS, _Py_NewReference re-added self to the object
312 * chain, so no more to do there.
313 * If COUNT_ALLOCS, the original decref bumped tp_frees, and
314 * _Py_NewReference bumped tp_allocs: both of those need to be
315 * undone.
316 */
317#ifdef COUNT_ALLOCS
318 --Py_TYPE(self)->tp_frees;
319 --Py_TYPE(self)->tp_allocs;
320#endif
321 return -1;
322}
323
Antoine Pitrouc47bd4a2010-07-27 22:08:27 +0000324int
325PyObject_Print(PyObject *op, FILE *fp, int flags)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000326{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000327 int ret = 0;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000328 if (PyErr_CheckSignals())
329 return -1;
Guido van Rossum9b00dfa1998-04-28 16:06:54 +0000330#ifdef USE_STACKCHECK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000331 if (PyOS_CheckStack()) {
332 PyErr_SetString(PyExc_MemoryError, "stack overflow");
333 return -1;
334 }
Guido van Rossum9b00dfa1998-04-28 16:06:54 +0000335#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000336 clearerr(fp); /* Clear any previous error condition */
337 if (op == NULL) {
338 Py_BEGIN_ALLOW_THREADS
339 fprintf(fp, "<nil>");
340 Py_END_ALLOW_THREADS
341 }
342 else {
343 if (op->ob_refcnt <= 0)
344 /* XXX(twouters) cast refcount to long until %zd is
345 universally available */
346 Py_BEGIN_ALLOW_THREADS
347 fprintf(fp, "<refcnt %ld at %p>",
348 (long)op->ob_refcnt, op);
349 Py_END_ALLOW_THREADS
350 else {
351 PyObject *s;
352 if (flags & Py_PRINT_RAW)
353 s = PyObject_Str(op);
354 else
355 s = PyObject_Repr(op);
356 if (s == NULL)
357 ret = -1;
358 else if (PyBytes_Check(s)) {
359 fwrite(PyBytes_AS_STRING(s), 1,
360 PyBytes_GET_SIZE(s), fp);
361 }
362 else if (PyUnicode_Check(s)) {
363 PyObject *t;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200364 t = PyUnicode_AsEncodedString(s, "utf-8", "backslashreplace");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000365 if (t == NULL)
366 ret = 0;
367 else {
368 fwrite(PyBytes_AS_STRING(t), 1,
369 PyBytes_GET_SIZE(t), fp);
Victor Stinnerba6b4302010-05-17 09:33:42 +0000370 Py_DECREF(t);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000371 }
372 }
373 else {
374 PyErr_Format(PyExc_TypeError,
375 "str() or repr() returned '%.100s'",
376 s->ob_type->tp_name);
377 ret = -1;
378 }
379 Py_XDECREF(s);
380 }
381 }
382 if (ret == 0) {
383 if (ferror(fp)) {
384 PyErr_SetFromErrno(PyExc_IOError);
385 clearerr(fp);
386 ret = -1;
387 }
388 }
389 return ret;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000390}
391
Guido van Rossum38938152006-08-21 23:36:26 +0000392/* For debugging convenience. Set a breakpoint here and call it from your DLL */
393void
Thomas Woutersb2137042007-02-01 18:02:27 +0000394_Py_BreakPoint(void)
Guido van Rossum38938152006-08-21 23:36:26 +0000395{
396}
397
Neal Norwitz1a997502003-01-13 20:13:12 +0000398
Barry Warsaw9bf16442001-01-23 16:24:35 +0000399/* For debugging convenience. See Misc/gdbinit for some useful gdb hooks */
Guido van Rossum38938152006-08-21 23:36:26 +0000400void
401_PyObject_Dump(PyObject* op)
Barry Warsaw9bf16442001-01-23 16:24:35 +0000402{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000403 if (op == NULL)
404 fprintf(stderr, "NULL\n");
405 else {
Georg Brandldfd73442009-04-05 11:47:34 +0000406#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000407 PyGILState_STATE gil;
Georg Brandldfd73442009-04-05 11:47:34 +0000408#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000409 fprintf(stderr, "object : ");
Georg Brandldfd73442009-04-05 11:47:34 +0000410#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000411 gil = PyGILState_Ensure();
Georg Brandldfd73442009-04-05 11:47:34 +0000412#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000413 (void)PyObject_Print(op, stderr, 0);
Georg Brandldfd73442009-04-05 11:47:34 +0000414#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000415 PyGILState_Release(gil);
Georg Brandldfd73442009-04-05 11:47:34 +0000416#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000417 /* XXX(twouters) cast refcount to long until %zd is
418 universally available */
419 fprintf(stderr, "\n"
420 "type : %s\n"
421 "refcount: %ld\n"
422 "address : %p\n",
423 Py_TYPE(op)==NULL ? "NULL" : Py_TYPE(op)->tp_name,
424 (long)op->ob_refcnt,
425 op);
426 }
Barry Warsaw9bf16442001-01-23 16:24:35 +0000427}
Barry Warsaw903138f2001-01-23 16:33:18 +0000428
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000429PyObject *
Fred Drake100814d2000-07-09 15:48:49 +0000430PyObject_Repr(PyObject *v)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000431{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000432 PyObject *res;
433 if (PyErr_CheckSignals())
434 return NULL;
Guido van Rossum9b00dfa1998-04-28 16:06:54 +0000435#ifdef USE_STACKCHECK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000436 if (PyOS_CheckStack()) {
437 PyErr_SetString(PyExc_MemoryError, "stack overflow");
438 return NULL;
439 }
Guido van Rossum9b00dfa1998-04-28 16:06:54 +0000440#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000441 if (v == NULL)
442 return PyUnicode_FromString("<NULL>");
443 if (Py_TYPE(v)->tp_repr == NULL)
444 return PyUnicode_FromFormat("<%s object at %p>",
445 v->ob_type->tp_name, v);
Victor Stinner8e478322013-07-18 01:49:30 +0200446
447#ifdef Py_DEBUG
448 /* PyObject_Repr() must not be called with an exception set,
449 because it may clear it (directly or indirectly) and so the
450 caller looses its exception */
451 assert(!PyErr_Occurred());
452#endif
453
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000454 res = (*v->ob_type->tp_repr)(v);
Victor Stinner0a54cf12011-12-01 03:22:44 +0100455 if (res == NULL)
456 return NULL;
457 if (!PyUnicode_Check(res)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000458 PyErr_Format(PyExc_TypeError,
459 "__repr__ returned non-string (type %.200s)",
460 res->ob_type->tp_name);
461 Py_DECREF(res);
462 return NULL;
463 }
Victor Stinnerdb88ae52011-12-01 02:15:00 +0100464#ifndef Py_DEBUG
465 if (PyUnicode_READY(res) < 0)
466 return NULL;
467#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000468 return res;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000469}
470
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000471PyObject *
Guido van Rossum98297ee2007-11-06 21:34:58 +0000472PyObject_Str(PyObject *v)
Guido van Rossumc6004111993-11-05 10:22:19 +0000473{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000474 PyObject *res;
475 if (PyErr_CheckSignals())
476 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +0000477#ifdef USE_STACKCHECK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000478 if (PyOS_CheckStack()) {
479 PyErr_SetString(PyExc_MemoryError, "stack overflow");
480 return NULL;
481 }
Guido van Rossum98297ee2007-11-06 21:34:58 +0000482#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000483 if (v == NULL)
484 return PyUnicode_FromString("<NULL>");
Victor Stinner8e478322013-07-18 01:49:30 +0200485
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000486 if (PyUnicode_CheckExact(v)) {
Victor Stinnerdb88ae52011-12-01 02:15:00 +0100487#ifndef Py_DEBUG
Victor Stinner4ead7c72011-11-20 19:48:36 +0100488 if (PyUnicode_READY(v) < 0)
489 return NULL;
Victor Stinnerdb88ae52011-12-01 02:15:00 +0100490#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000491 Py_INCREF(v);
492 return v;
493 }
494 if (Py_TYPE(v)->tp_str == NULL)
495 return PyObject_Repr(v);
Guido van Rossum4f288ab2001-05-01 16:53:37 +0000496
Victor Stinner8e478322013-07-18 01:49:30 +0200497#ifdef Py_DEBUG
498 /* PyObject_Str() must not be called with an exception set,
499 because it may clear it (directly or indirectly) and so the
500 caller looses its exception */
501 assert(!PyErr_Occurred());
502#endif
503
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000504 /* It is possible for a type to have a tp_str representation that loops
505 infinitely. */
506 if (Py_EnterRecursiveCall(" while getting the str of an object"))
507 return NULL;
508 res = (*Py_TYPE(v)->tp_str)(v);
509 Py_LeaveRecursiveCall();
510 if (res == NULL)
511 return NULL;
512 if (!PyUnicode_Check(res)) {
513 PyErr_Format(PyExc_TypeError,
514 "__str__ returned non-string (type %.200s)",
515 Py_TYPE(res)->tp_name);
516 Py_DECREF(res);
517 return NULL;
518 }
Victor Stinnerdb88ae52011-12-01 02:15:00 +0100519#ifndef Py_DEBUG
Victor Stinner4ead7c72011-11-20 19:48:36 +0100520 if (PyUnicode_READY(res) < 0)
521 return NULL;
Victor Stinnerdb88ae52011-12-01 02:15:00 +0100522#endif
Victor Stinner4ead7c72011-11-20 19:48:36 +0100523 assert(_PyUnicode_CheckConsistency(res, 1));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000524 return res;
Neil Schemenauercf52c072005-08-12 17:34:58 +0000525}
526
Georg Brandl559e5d72008-06-11 18:37:52 +0000527PyObject *
528PyObject_ASCII(PyObject *v)
529{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000530 PyObject *repr, *ascii, *res;
Georg Brandl559e5d72008-06-11 18:37:52 +0000531
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000532 repr = PyObject_Repr(v);
533 if (repr == NULL)
534 return NULL;
Georg Brandl559e5d72008-06-11 18:37:52 +0000535
Victor Stinneraf037572013-04-14 18:44:10 +0200536 if (PyUnicode_IS_ASCII(repr))
537 return repr;
538
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000539 /* repr is guaranteed to be a PyUnicode object by PyObject_Repr */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200540 ascii = _PyUnicode_AsASCIIString(repr, "backslashreplace");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000541 Py_DECREF(repr);
542 if (ascii == NULL)
543 return NULL;
Georg Brandl559e5d72008-06-11 18:37:52 +0000544
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000545 res = PyUnicode_DecodeASCII(
546 PyBytes_AS_STRING(ascii),
547 PyBytes_GET_SIZE(ascii),
548 NULL);
549
550 Py_DECREF(ascii);
551 return res;
Georg Brandl559e5d72008-06-11 18:37:52 +0000552}
Guido van Rossuma3af41d2001-01-18 22:07:06 +0000553
Benjamin Petersonc15a0732008-08-26 16:46:47 +0000554PyObject *
555PyObject_Bytes(PyObject *v)
556{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000557 PyObject *result, *func;
Benjamin Petersonce798522012-01-22 11:24:29 -0500558 _Py_IDENTIFIER(__bytes__);
Benjamin Petersonc15a0732008-08-26 16:46:47 +0000559
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000560 if (v == NULL)
561 return PyBytes_FromString("<NULL>");
Benjamin Petersonc15a0732008-08-26 16:46:47 +0000562
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000563 if (PyBytes_CheckExact(v)) {
564 Py_INCREF(v);
565 return v;
566 }
Benjamin Petersonc15a0732008-08-26 16:46:47 +0000567
Benjamin Petersonce798522012-01-22 11:24:29 -0500568 func = _PyObject_LookupSpecial(v, &PyId___bytes__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000569 if (func != NULL) {
570 result = PyObject_CallFunctionObjArgs(func, NULL);
571 Py_DECREF(func);
572 if (result == NULL)
Benjamin Peterson41ece392010-09-11 16:39:57 +0000573 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000574 if (!PyBytes_Check(result)) {
Benjamin Peterson41ece392010-09-11 16:39:57 +0000575 PyErr_Format(PyExc_TypeError,
576 "__bytes__ returned non-bytes (type %.200s)",
577 Py_TYPE(result)->tp_name);
578 Py_DECREF(result);
579 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000580 }
581 return result;
582 }
583 else if (PyErr_Occurred())
584 return NULL;
585 return PyBytes_FromObject(v);
Benjamin Petersonc15a0732008-08-26 16:46:47 +0000586}
587
Mark Dickinsonc008a172009-02-01 13:59:22 +0000588/* For Python 3.0.1 and later, the old three-way comparison has been
589 completely removed in favour of rich comparisons. PyObject_Compare() and
590 PyObject_Cmp() are gone, and the builtin cmp function no longer exists.
Mark Dickinsone94c6792009-02-02 20:36:42 +0000591 The old tp_compare slot has been renamed to tp_reserved, and should no
Mark Dickinsonc008a172009-02-01 13:59:22 +0000592 longer be used. Use tp_richcompare instead.
Guido van Rossum98297ee2007-11-06 21:34:58 +0000593
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000594 See (*) below for practical amendments.
595
Mark Dickinsonc008a172009-02-01 13:59:22 +0000596 tp_richcompare gets called with a first argument of the appropriate type
597 and a second object of an arbitrary type. We never do any kind of
598 coercion.
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000599
Mark Dickinsonc008a172009-02-01 13:59:22 +0000600 The tp_richcompare slot should return an object, as follows:
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000601
602 NULL if an exception occurred
603 NotImplemented if the requested comparison is not implemented
604 any other false value if the requested comparison is false
605 any other true value if the requested comparison is true
606
607 The PyObject_RichCompare[Bool]() wrappers raise TypeError when they get
608 NotImplemented.
609
610 (*) Practical amendments:
611
612 - If rich comparison returns NotImplemented, == and != are decided by
613 comparing the object pointer (i.e. falling back to the base object
614 implementation).
615
Guido van Rossuma4073002002-05-31 20:03:54 +0000616*/
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000617
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000618/* Map rich comparison operators to their swapped version, e.g. LT <--> GT */
Brett Cannona5ca2e72004-09-25 01:37:24 +0000619int _Py_SwappedOp[] = {Py_GT, Py_GE, Py_EQ, Py_NE, Py_LT, Py_LE};
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +0000620
Guido van Rossum9a4e95c2006-12-19 21:35:46 +0000621static char *opstrings[] = {"<", "<=", "==", "!=", ">", ">="};
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000622
623/* Perform a rich comparison, raising TypeError when the requested comparison
624 operator is not supported. */
Guido van Rossume797ec12001-01-17 15:24:28 +0000625static PyObject *
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000626do_richcompare(PyObject *v, PyObject *w, int op)
Guido van Rossume797ec12001-01-17 15:24:28 +0000627{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000628 richcmpfunc f;
629 PyObject *res;
630 int checked_reverse_op = 0;
Guido van Rossume797ec12001-01-17 15:24:28 +0000631
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000632 if (v->ob_type != w->ob_type &&
633 PyType_IsSubtype(w->ob_type, v->ob_type) &&
634 (f = w->ob_type->tp_richcompare) != NULL) {
635 checked_reverse_op = 1;
636 res = (*f)(w, v, _Py_SwappedOp[op]);
637 if (res != Py_NotImplemented)
638 return res;
639 Py_DECREF(res);
640 }
641 if ((f = v->ob_type->tp_richcompare) != NULL) {
642 res = (*f)(v, w, op);
643 if (res != Py_NotImplemented)
644 return res;
645 Py_DECREF(res);
646 }
647 if (!checked_reverse_op && (f = w->ob_type->tp_richcompare) != NULL) {
648 res = (*f)(w, v, _Py_SwappedOp[op]);
649 if (res != Py_NotImplemented)
650 return res;
651 Py_DECREF(res);
652 }
653 /* If neither object implements it, provide a sensible default
654 for == and !=, but raise an exception for ordering. */
655 switch (op) {
656 case Py_EQ:
657 res = (v == w) ? Py_True : Py_False;
658 break;
659 case Py_NE:
660 res = (v != w) ? Py_True : Py_False;
661 break;
662 default:
663 /* XXX Special-case None so it doesn't show as NoneType() */
664 PyErr_Format(PyExc_TypeError,
665 "unorderable types: %.100s() %s %.100s()",
666 v->ob_type->tp_name,
667 opstrings[op],
668 w->ob_type->tp_name);
669 return NULL;
670 }
671 Py_INCREF(res);
672 return res;
Guido van Rossume797ec12001-01-17 15:24:28 +0000673}
674
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000675/* Perform a rich comparison with object result. This wraps do_richcompare()
676 with a check for NULL arguments and a recursion check. */
Guido van Rossume797ec12001-01-17 15:24:28 +0000677
Guido van Rossume797ec12001-01-17 15:24:28 +0000678PyObject *
679PyObject_RichCompare(PyObject *v, PyObject *w, int op)
680{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000681 PyObject *res;
Guido van Rossume797ec12001-01-17 15:24:28 +0000682
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000683 assert(Py_LT <= op && op <= Py_GE);
684 if (v == NULL || w == NULL) {
685 if (!PyErr_Occurred())
686 PyErr_BadInternalCall();
687 return NULL;
688 }
689 if (Py_EnterRecursiveCall(" in comparison"))
690 return NULL;
691 res = do_richcompare(v, w, op);
692 Py_LeaveRecursiveCall();
693 return res;
Guido van Rossume797ec12001-01-17 15:24:28 +0000694}
695
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000696/* Perform a rich comparison with integer result. This wraps
697 PyObject_RichCompare(), returning -1 for error, 0 for false, 1 for true. */
Guido van Rossume797ec12001-01-17 15:24:28 +0000698int
699PyObject_RichCompareBool(PyObject *v, PyObject *w, int op)
700{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000701 PyObject *res;
702 int ok;
Guido van Rossume797ec12001-01-17 15:24:28 +0000703
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000704 /* Quick result when objects are the same.
705 Guarantees that identity implies equality. */
706 if (v == w) {
707 if (op == Py_EQ)
708 return 1;
709 else if (op == Py_NE)
710 return 0;
711 }
Mark Dickinson4a1f5932008-11-12 23:23:36 +0000712
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000713 res = PyObject_RichCompare(v, w, op);
714 if (res == NULL)
715 return -1;
716 if (PyBool_Check(res))
717 ok = (res == Py_True);
718 else
719 ok = PyObject_IsTrue(res);
720 Py_DECREF(res);
721 return ok;
Guido van Rossume797ec12001-01-17 15:24:28 +0000722}
Fred Drake13634cf2000-06-29 19:17:04 +0000723
724/* Set of hash utility functions to help maintaining the invariant that
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000725 if a==b then hash(a)==hash(b)
Fred Drake13634cf2000-06-29 19:17:04 +0000726
727 All the utility functions (_Py_Hash*()) return "-1" to signify an error.
728*/
729
Mark Dickinsondc787d22010-05-23 13:33:13 +0000730/* For numeric types, the hash of a number x is based on the reduction
731 of x modulo the prime P = 2**_PyHASH_BITS - 1. It's designed so that
732 hash(x) == hash(y) whenever x and y are numerically equal, even if
733 x and y have different types.
734
735 A quick summary of the hashing strategy:
736
737 (1) First define the 'reduction of x modulo P' for any rational
738 number x; this is a standard extension of the usual notion of
739 reduction modulo P for integers. If x == p/q (written in lowest
740 terms), the reduction is interpreted as the reduction of p times
741 the inverse of the reduction of q, all modulo P; if q is exactly
742 divisible by P then define the reduction to be infinity. So we've
743 got a well-defined map
744
745 reduce : { rational numbers } -> { 0, 1, 2, ..., P-1, infinity }.
746
747 (2) Now for a rational number x, define hash(x) by:
748
749 reduce(x) if x >= 0
750 -reduce(-x) if x < 0
751
752 If the result of the reduction is infinity (this is impossible for
753 integers, floats and Decimals) then use the predefined hash value
754 _PyHASH_INF for x >= 0, or -_PyHASH_INF for x < 0, instead.
755 _PyHASH_INF, -_PyHASH_INF and _PyHASH_NAN are also used for the
756 hashes of float and Decimal infinities and nans.
757
758 A selling point for the above strategy is that it makes it possible
759 to compute hashes of decimal and binary floating-point numbers
760 efficiently, even if the exponent of the binary or decimal number
761 is large. The key point is that
762
763 reduce(x * y) == reduce(x) * reduce(y) (modulo _PyHASH_MODULUS)
764
765 provided that {reduce(x), reduce(y)} != {0, infinity}. The reduction of a
766 binary or decimal float is never infinity, since the denominator is a power
767 of 2 (for binary) or a divisor of a power of 10 (for decimal). So we have,
768 for nonnegative x,
769
770 reduce(x * 2**e) == reduce(x) * reduce(2**e) % _PyHASH_MODULUS
771
772 reduce(x * 10**e) == reduce(x) * reduce(10**e) % _PyHASH_MODULUS
773
774 and reduce(10**e) can be computed efficiently by the usual modular
775 exponentiation algorithm. For reduce(2**e) it's even better: since
776 P is of the form 2**n-1, reduce(2**e) is 2**(e mod n), and multiplication
777 by 2**(e mod n) modulo 2**n-1 just amounts to a rotation of bits.
778
779 */
780
Benjamin Peterson8f67d082010-10-17 20:54:53 +0000781Py_hash_t
Fred Drake100814d2000-07-09 15:48:49 +0000782_Py_HashDouble(double v)
Fred Drake13634cf2000-06-29 19:17:04 +0000783{
Mark Dickinsondc787d22010-05-23 13:33:13 +0000784 int e, sign;
785 double m;
Benjamin Peterson8035bc52010-10-23 16:20:50 +0000786 Py_uhash_t x, y;
Tim Peters39dce292000-08-15 03:34:48 +0000787
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000788 if (!Py_IS_FINITE(v)) {
789 if (Py_IS_INFINITY(v))
Mark Dickinsondc787d22010-05-23 13:33:13 +0000790 return v > 0 ? _PyHASH_INF : -_PyHASH_INF;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000791 else
Mark Dickinsondc787d22010-05-23 13:33:13 +0000792 return _PyHASH_NAN;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000793 }
Mark Dickinsondc787d22010-05-23 13:33:13 +0000794
795 m = frexp(v, &e);
796
797 sign = 1;
798 if (m < 0) {
799 sign = -1;
800 m = -m;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000801 }
Mark Dickinsondc787d22010-05-23 13:33:13 +0000802
803 /* process 28 bits at a time; this should work well both for binary
804 and hexadecimal floating point. */
805 x = 0;
806 while (m) {
807 x = ((x << 28) & _PyHASH_MODULUS) | x >> (_PyHASH_BITS - 28);
808 m *= 268435456.0; /* 2**28 */
809 e -= 28;
Benjamin Peterson8035bc52010-10-23 16:20:50 +0000810 y = (Py_uhash_t)m; /* pull out integer part */
Mark Dickinsondc787d22010-05-23 13:33:13 +0000811 m -= y;
812 x += y;
813 if (x >= _PyHASH_MODULUS)
814 x -= _PyHASH_MODULUS;
815 }
816
817 /* adjust for the exponent; first reduce it modulo _PyHASH_BITS */
818 e = e >= 0 ? e % _PyHASH_BITS : _PyHASH_BITS-1-((-1-e) % _PyHASH_BITS);
819 x = ((x << e) & _PyHASH_MODULUS) | x >> (_PyHASH_BITS - e);
820
821 x = x * sign;
Benjamin Peterson8035bc52010-10-23 16:20:50 +0000822 if (x == (Py_uhash_t)-1)
823 x = (Py_uhash_t)-2;
Benjamin Peterson8f67d082010-10-17 20:54:53 +0000824 return (Py_hash_t)x;
Fred Drake13634cf2000-06-29 19:17:04 +0000825}
826
Benjamin Peterson8f67d082010-10-17 20:54:53 +0000827Py_hash_t
Fred Drake100814d2000-07-09 15:48:49 +0000828_Py_HashPointer(void *p)
Fred Drake13634cf2000-06-29 19:17:04 +0000829{
Benjamin Peterson8f67d082010-10-17 20:54:53 +0000830 Py_hash_t x;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000831 size_t y = (size_t)p;
832 /* bottom 3 or 4 bits are likely to be 0; rotate y by 4 to avoid
833 excessive hash collisions for dicts and sets */
834 y = (y >> 4) | (y << (8 * SIZEOF_VOID_P - 4));
Benjamin Peterson8f67d082010-10-17 20:54:53 +0000835 x = (Py_hash_t)y;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000836 if (x == -1)
837 x = -2;
838 return x;
Fred Drake13634cf2000-06-29 19:17:04 +0000839}
840
Benjamin Peterson8f67d082010-10-17 20:54:53 +0000841Py_hash_t
Antoine Pitrouce4a9da2011-11-21 20:46:33 +0100842_Py_HashBytes(unsigned char *p, Py_ssize_t len)
843{
844 Py_uhash_t x;
845 Py_ssize_t i;
846
Georg Brandl2fb477c2012-02-21 00:33:36 +0100847 /*
848 We make the hash of the empty string be 0, rather than using
849 (prefix ^ suffix), since this slightly obfuscates the hash secret
850 */
Benjamin Peterson64ed5762012-04-09 15:04:39 -0400851#ifdef Py_DEBUG
Benjamin Petersond9a35912012-02-21 11:12:14 -0500852 assert(_Py_HashSecret_Initialized);
Benjamin Peterson64ed5762012-04-09 15:04:39 -0400853#endif
Georg Brandl2fb477c2012-02-21 00:33:36 +0100854 if (len == 0) {
855 return 0;
856 }
857 x = (Py_uhash_t) _Py_HashSecret.prefix;
858 x ^= (Py_uhash_t) *p << 7;
Antoine Pitrouce4a9da2011-11-21 20:46:33 +0100859 for (i = 0; i < len; i++)
Gregory P. Smithf5b62a92012-01-14 15:45:13 -0800860 x = (_PyHASH_MULTIPLIER * x) ^ (Py_uhash_t) *p++;
Antoine Pitrouce4a9da2011-11-21 20:46:33 +0100861 x ^= (Py_uhash_t) len;
Georg Brandl2fb477c2012-02-21 00:33:36 +0100862 x ^= (Py_uhash_t) _Py_HashSecret.suffix;
Antoine Pitrouce4a9da2011-11-21 20:46:33 +0100863 if (x == -1)
864 x = -2;
865 return x;
866}
867
868Py_hash_t
Nick Coghland1abd252008-07-15 15:46:38 +0000869PyObject_HashNotImplemented(PyObject *v)
870{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000871 PyErr_Format(PyExc_TypeError, "unhashable type: '%.200s'",
872 Py_TYPE(v)->tp_name);
873 return -1;
Nick Coghland1abd252008-07-15 15:46:38 +0000874}
Fred Drake13634cf2000-06-29 19:17:04 +0000875
Georg Brandl2daf6ae2012-02-20 19:54:16 +0100876_Py_HashSecret_t _Py_HashSecret;
877
Benjamin Peterson8f67d082010-10-17 20:54:53 +0000878Py_hash_t
Fred Drake100814d2000-07-09 15:48:49 +0000879PyObject_Hash(PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000880{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000881 PyTypeObject *tp = Py_TYPE(v);
882 if (tp->tp_hash != NULL)
883 return (*tp->tp_hash)(v);
884 /* To keep to the general practice that inheriting
885 * solely from object in C code should work without
886 * an explicit call to PyType_Ready, we implicitly call
887 * PyType_Ready here and then check the tp_hash slot again
888 */
889 if (tp->tp_dict == NULL) {
890 if (PyType_Ready(tp) < 0)
891 return -1;
892 if (tp->tp_hash != NULL)
893 return (*tp->tp_hash)(v);
894 }
895 /* Otherwise, the object can't be hashed */
896 return PyObject_HashNotImplemented(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000897}
898
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000899PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000900PyObject_GetAttrString(PyObject *v, const char *name)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000901{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000902 PyObject *w, *res;
Guido van Rossumd8eb1b31996-08-09 20:52:03 +0000903
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000904 if (Py_TYPE(v)->tp_getattr != NULL)
905 return (*Py_TYPE(v)->tp_getattr)(v, (char*)name);
906 w = PyUnicode_InternFromString(name);
907 if (w == NULL)
908 return NULL;
909 res = PyObject_GetAttr(v, w);
Victor Stinner59af08f2012-03-22 02:09:08 +0100910 Py_DECREF(w);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000911 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000912}
913
914int
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000915PyObject_HasAttrString(PyObject *v, const char *name)
Guido van Rossumed18fdc1993-07-11 19:55:34 +0000916{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000917 PyObject *res = PyObject_GetAttrString(v, name);
918 if (res != NULL) {
919 Py_DECREF(res);
920 return 1;
921 }
922 PyErr_Clear();
923 return 0;
Guido van Rossumed18fdc1993-07-11 19:55:34 +0000924}
925
926int
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000927PyObject_SetAttrString(PyObject *v, const char *name, PyObject *w)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000928{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000929 PyObject *s;
930 int res;
Guido van Rossumd8eb1b31996-08-09 20:52:03 +0000931
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000932 if (Py_TYPE(v)->tp_setattr != NULL)
933 return (*Py_TYPE(v)->tp_setattr)(v, (char*)name, w);
934 s = PyUnicode_InternFromString(name);
935 if (s == NULL)
936 return -1;
937 res = PyObject_SetAttr(v, s, w);
938 Py_XDECREF(s);
939 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000940}
941
Benjamin Petersonbfebb7b2011-12-15 15:34:02 -0500942int
943_PyObject_IsAbstract(PyObject *obj)
944{
945 int res;
946 PyObject* isabstract;
947 _Py_IDENTIFIER(__isabstractmethod__);
948
949 if (obj == NULL)
950 return 0;
951
952 isabstract = _PyObject_GetAttrId(obj, &PyId___isabstractmethod__);
953 if (isabstract == NULL) {
954 if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
955 PyErr_Clear();
956 return 0;
957 }
958 return -1;
959 }
960 res = PyObject_IsTrue(isabstract);
961 Py_DECREF(isabstract);
962 return res;
963}
964
Guido van Rossum98ff96a1997-05-20 18:34:44 +0000965PyObject *
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200966_PyObject_GetAttrId(PyObject *v, _Py_Identifier *name)
967{
968 PyObject *result;
Martin v. Löwisd10759f2011-11-07 13:00:05 +0100969 PyObject *oname = _PyUnicode_FromId(name); /* borrowed */
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200970 if (!oname)
971 return NULL;
972 result = PyObject_GetAttr(v, oname);
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200973 return result;
974}
975
976int
977_PyObject_HasAttrId(PyObject *v, _Py_Identifier *name)
978{
979 int result;
Martin v. Löwisd10759f2011-11-07 13:00:05 +0100980 PyObject *oname = _PyUnicode_FromId(name); /* borrowed */
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200981 if (!oname)
982 return -1;
983 result = PyObject_HasAttr(v, oname);
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200984 return result;
985}
986
987int
988_PyObject_SetAttrId(PyObject *v, _Py_Identifier *name, PyObject *w)
989{
990 int result;
Martin v. Löwisd10759f2011-11-07 13:00:05 +0100991 PyObject *oname = _PyUnicode_FromId(name); /* borrowed */
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200992 if (!oname)
993 return -1;
994 result = PyObject_SetAttr(v, oname, w);
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200995 return result;
996}
997
998PyObject *
Fred Drake100814d2000-07-09 15:48:49 +0000999PyObject_GetAttr(PyObject *v, PyObject *name)
Guido van Rossum98ff96a1997-05-20 18:34:44 +00001000{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001001 PyTypeObject *tp = Py_TYPE(v);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001002
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001003 if (!PyUnicode_Check(name)) {
1004 PyErr_Format(PyExc_TypeError,
1005 "attribute name must be string, not '%.200s'",
1006 name->ob_type->tp_name);
1007 return NULL;
1008 }
1009 if (tp->tp_getattro != NULL)
1010 return (*tp->tp_getattro)(v, name);
1011 if (tp->tp_getattr != NULL) {
1012 char *name_str = _PyUnicode_AsString(name);
1013 if (name_str == NULL)
1014 return NULL;
1015 return (*tp->tp_getattr)(v, name_str);
1016 }
1017 PyErr_Format(PyExc_AttributeError,
1018 "'%.50s' object has no attribute '%U'",
1019 tp->tp_name, name);
1020 return NULL;
Guido van Rossum98ff96a1997-05-20 18:34:44 +00001021}
1022
1023int
Fred Drake100814d2000-07-09 15:48:49 +00001024PyObject_HasAttr(PyObject *v, PyObject *name)
Guido van Rossum98ff96a1997-05-20 18:34:44 +00001025{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001026 PyObject *res = PyObject_GetAttr(v, name);
1027 if (res != NULL) {
1028 Py_DECREF(res);
1029 return 1;
1030 }
1031 PyErr_Clear();
1032 return 0;
Guido van Rossum98ff96a1997-05-20 18:34:44 +00001033}
1034
1035int
Fred Drake100814d2000-07-09 15:48:49 +00001036PyObject_SetAttr(PyObject *v, PyObject *name, PyObject *value)
Guido van Rossum98ff96a1997-05-20 18:34:44 +00001037{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001038 PyTypeObject *tp = Py_TYPE(v);
1039 int err;
Marc-André Lemburge44e5072000-09-18 16:20:57 +00001040
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001041 if (!PyUnicode_Check(name)) {
1042 PyErr_Format(PyExc_TypeError,
1043 "attribute name must be string, not '%.200s'",
1044 name->ob_type->tp_name);
1045 return -1;
1046 }
1047 Py_INCREF(name);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001048
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001049 PyUnicode_InternInPlace(&name);
1050 if (tp->tp_setattro != NULL) {
1051 err = (*tp->tp_setattro)(v, name, value);
1052 Py_DECREF(name);
1053 return err;
1054 }
1055 if (tp->tp_setattr != NULL) {
1056 char *name_str = _PyUnicode_AsString(name);
1057 if (name_str == NULL)
1058 return -1;
1059 err = (*tp->tp_setattr)(v, name_str, value);
1060 Py_DECREF(name);
1061 return err;
1062 }
1063 Py_DECREF(name);
1064 assert(name->ob_refcnt >= 1);
1065 if (tp->tp_getattr == NULL && tp->tp_getattro == NULL)
1066 PyErr_Format(PyExc_TypeError,
1067 "'%.100s' object has no attributes "
1068 "(%s .%U)",
1069 tp->tp_name,
1070 value==NULL ? "del" : "assign to",
1071 name);
1072 else
1073 PyErr_Format(PyExc_TypeError,
1074 "'%.100s' object has only read-only attributes "
1075 "(%s .%U)",
1076 tp->tp_name,
1077 value==NULL ? "del" : "assign to",
1078 name);
1079 return -1;
Tim Peters6d6c1a32001-08-02 04:15:00 +00001080}
1081
1082/* Helper to get a pointer to an object's __dict__ slot, if any */
1083
1084PyObject **
1085_PyObject_GetDictPtr(PyObject *obj)
1086{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001087 Py_ssize_t dictoffset;
1088 PyTypeObject *tp = Py_TYPE(obj);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001089
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001090 dictoffset = tp->tp_dictoffset;
1091 if (dictoffset == 0)
1092 return NULL;
1093 if (dictoffset < 0) {
1094 Py_ssize_t tsize;
1095 size_t size;
Guido van Rossum2eb0b872002-03-01 22:24:49 +00001096
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001097 tsize = ((PyVarObject *)obj)->ob_size;
1098 if (tsize < 0)
1099 tsize = -tsize;
1100 size = _PyObject_VAR_SIZE(tp, tsize);
Guido van Rossum2eb0b872002-03-01 22:24:49 +00001101
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001102 dictoffset += (long)size;
1103 assert(dictoffset > 0);
1104 assert(dictoffset % SIZEOF_VOID_P == 0);
1105 }
1106 return (PyObject **) ((char *)obj + dictoffset);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001107}
1108
Tim Peters6d6c1a32001-08-02 04:15:00 +00001109PyObject *
Raymond Hettinger1da1dbf2003-03-17 19:46:11 +00001110PyObject_SelfIter(PyObject *obj)
Raymond Hettinger01538262003-03-17 08:24:35 +00001111{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001112 Py_INCREF(obj);
1113 return obj;
Raymond Hettinger01538262003-03-17 08:24:35 +00001114}
1115
Antoine Pitroua7013882012-04-05 00:04:20 +02001116/* Convenience function to get a builtin from its name */
1117PyObject *
1118_PyObject_GetBuiltin(const char *name)
1119{
1120 PyObject *mod, *attr;
1121 mod = PyImport_ImportModule("builtins");
1122 if (mod == NULL)
1123 return NULL;
1124 attr = PyObject_GetAttrString(mod, name);
1125 Py_DECREF(mod);
1126 return attr;
1127}
1128
Amaury Forgeot d'Arcf343e012009-01-12 23:58:21 +00001129/* Helper used when the __next__ method is removed from a type:
1130 tp_iternext is never NULL and can be safely called without checking
1131 on every iteration.
1132 */
1133
1134PyObject *
1135_PyObject_NextNotImplemented(PyObject *self)
1136{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001137 PyErr_Format(PyExc_TypeError,
1138 "'%.200s' object is not iterable",
1139 Py_TYPE(self)->tp_name);
1140 return NULL;
Amaury Forgeot d'Arcf343e012009-01-12 23:58:21 +00001141}
1142
Michael W. Hudson1593f502004-09-14 17:09:47 +00001143/* Generic GetAttr functions - put these in your tp_[gs]etattro slot */
1144
Raymond Hettinger01538262003-03-17 08:24:35 +00001145PyObject *
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001146_PyObject_GenericGetAttrWithDict(PyObject *obj, PyObject *name, PyObject *dict)
Tim Peters6d6c1a32001-08-02 04:15:00 +00001147{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001148 PyTypeObject *tp = Py_TYPE(obj);
1149 PyObject *descr = NULL;
1150 PyObject *res = NULL;
1151 descrgetfunc f;
1152 Py_ssize_t dictoffset;
1153 PyObject **dictptr;
Tim Peters6d6c1a32001-08-02 04:15:00 +00001154
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001155 if (!PyUnicode_Check(name)){
1156 PyErr_Format(PyExc_TypeError,
1157 "attribute name must be string, not '%.200s'",
1158 name->ob_type->tp_name);
1159 return NULL;
1160 }
1161 else
1162 Py_INCREF(name);
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001163
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001164 if (tp->tp_dict == NULL) {
1165 if (PyType_Ready(tp) < 0)
1166 goto done;
1167 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001168
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001169 descr = _PyType_Lookup(tp, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001170 Py_XINCREF(descr);
Michael W. Hudsonb2c7de42003-08-15 13:07:47 +00001171
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001172 f = NULL;
1173 if (descr != NULL) {
1174 f = descr->ob_type->tp_descr_get;
1175 if (f != NULL && PyDescr_IsData(descr)) {
1176 res = f(descr, obj, (PyObject *)obj->ob_type);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001177 goto done;
1178 }
1179 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001180
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001181 if (dict == NULL) {
1182 /* Inline _PyObject_GetDictPtr */
1183 dictoffset = tp->tp_dictoffset;
1184 if (dictoffset != 0) {
1185 if (dictoffset < 0) {
1186 Py_ssize_t tsize;
1187 size_t size;
Guido van Rossumc66ff442002-08-19 16:50:48 +00001188
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001189 tsize = ((PyVarObject *)obj)->ob_size;
1190 if (tsize < 0)
1191 tsize = -tsize;
1192 size = _PyObject_VAR_SIZE(tp, tsize);
Guido van Rossumc66ff442002-08-19 16:50:48 +00001193
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001194 dictoffset += (long)size;
1195 assert(dictoffset > 0);
1196 assert(dictoffset % SIZEOF_VOID_P == 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001197 }
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001198 dictptr = (PyObject **) ((char *)obj + dictoffset);
1199 dict = *dictptr;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001200 }
1201 }
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001202 if (dict != NULL) {
1203 Py_INCREF(dict);
1204 res = PyDict_GetItem(dict, name);
1205 if (res != NULL) {
1206 Py_INCREF(res);
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001207 Py_DECREF(dict);
1208 goto done;
1209 }
1210 Py_DECREF(dict);
1211 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001212
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001213 if (f != NULL) {
1214 res = f(descr, obj, (PyObject *)Py_TYPE(obj));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001215 goto done;
1216 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001217
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001218 if (descr != NULL) {
1219 res = descr;
Victor Stinner2d01dc02012-03-09 00:44:13 +01001220 descr = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001221 goto done;
1222 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001223
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001224 PyErr_Format(PyExc_AttributeError,
1225 "'%.50s' object has no attribute '%U'",
1226 tp->tp_name, name);
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001227 done:
Victor Stinner2d01dc02012-03-09 00:44:13 +01001228 Py_XDECREF(descr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001229 Py_DECREF(name);
1230 return res;
Tim Peters6d6c1a32001-08-02 04:15:00 +00001231}
1232
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001233PyObject *
1234PyObject_GenericGetAttr(PyObject *obj, PyObject *name)
1235{
1236 return _PyObject_GenericGetAttrWithDict(obj, name, NULL);
1237}
1238
Tim Peters6d6c1a32001-08-02 04:15:00 +00001239int
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001240_PyObject_GenericSetAttrWithDict(PyObject *obj, PyObject *name,
1241 PyObject *value, PyObject *dict)
Tim Peters6d6c1a32001-08-02 04:15:00 +00001242{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001243 PyTypeObject *tp = Py_TYPE(obj);
1244 PyObject *descr;
1245 descrsetfunc f;
1246 PyObject **dictptr;
1247 int res = -1;
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001248
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001249 if (!PyUnicode_Check(name)){
1250 PyErr_Format(PyExc_TypeError,
1251 "attribute name must be string, not '%.200s'",
1252 name->ob_type->tp_name);
1253 return -1;
1254 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001255
Benjamin Peterson74529ad2012-03-09 07:25:32 -08001256 if (tp->tp_dict == NULL && PyType_Ready(tp) < 0)
1257 return -1;
1258
1259 Py_INCREF(name);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001260
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001261 descr = _PyType_Lookup(tp, name);
Victor Stinner2d01dc02012-03-09 00:44:13 +01001262 Py_XINCREF(descr);
1263
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001264 f = NULL;
1265 if (descr != NULL) {
1266 f = descr->ob_type->tp_descr_set;
1267 if (f != NULL && PyDescr_IsData(descr)) {
1268 res = f(descr, obj, value);
1269 goto done;
1270 }
1271 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001272
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001273 if (dict == NULL) {
1274 dictptr = _PyObject_GetDictPtr(obj);
1275 if (dictptr != NULL) {
Benjamin Peterson7d95e402012-04-23 11:24:50 -04001276 res = _PyObjectDict_SetItem(Py_TYPE(obj), dictptr, name, value);
1277 if (res < 0 && PyErr_ExceptionMatches(PyExc_KeyError))
1278 PyErr_SetObject(PyExc_AttributeError, name);
1279 goto done;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001280 }
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001281 }
1282 if (dict != NULL) {
1283 Py_INCREF(dict);
1284 if (value == NULL)
1285 res = PyDict_DelItem(dict, name);
1286 else
1287 res = PyDict_SetItem(dict, name, value);
Benjamin Peterson74529ad2012-03-09 07:25:32 -08001288 Py_DECREF(dict);
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001289 if (res < 0 && PyErr_ExceptionMatches(PyExc_KeyError))
1290 PyErr_SetObject(PyExc_AttributeError, name);
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001291 goto done;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001292 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001293
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001294 if (f != NULL) {
1295 res = f(descr, obj, value);
1296 goto done;
1297 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001298
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001299 if (descr == NULL) {
1300 PyErr_Format(PyExc_AttributeError,
1301 "'%.100s' object has no attribute '%U'",
1302 tp->tp_name, name);
1303 goto done;
1304 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001305
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001306 PyErr_Format(PyExc_AttributeError,
1307 "'%.50s' object attribute '%U' is read-only",
1308 tp->tp_name, name);
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001309 done:
Victor Stinner2d01dc02012-03-09 00:44:13 +01001310 Py_XDECREF(descr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001311 Py_DECREF(name);
1312 return res;
Guido van Rossum98ff96a1997-05-20 18:34:44 +00001313}
1314
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001315int
1316PyObject_GenericSetAttr(PyObject *obj, PyObject *name, PyObject *value)
1317{
1318 return _PyObject_GenericSetAttrWithDict(obj, name, value, NULL);
1319}
1320
Benjamin Peterson8eb12692012-02-19 19:59:10 -05001321int
1322PyObject_GenericSetDict(PyObject *obj, PyObject *value, void *context)
1323{
1324 PyObject *dict, **dictptr = _PyObject_GetDictPtr(obj);
1325 if (dictptr == NULL) {
1326 PyErr_SetString(PyExc_AttributeError,
1327 "This object has no __dict__");
1328 return -1;
1329 }
1330 if (value == NULL) {
1331 PyErr_SetString(PyExc_TypeError, "cannot delete __dict__");
1332 return -1;
1333 }
1334 if (!PyDict_Check(value)) {
1335 PyErr_Format(PyExc_TypeError,
1336 "__dict__ must be set to a dictionary, "
1337 "not a '%.200s'", Py_TYPE(value)->tp_name);
1338 return -1;
1339 }
1340 dict = *dictptr;
1341 Py_XINCREF(value);
1342 *dictptr = value;
1343 Py_XDECREF(dict);
1344 return 0;
1345}
1346
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001347
Guido van Rossum6ac258d1993-05-12 08:24:20 +00001348/* Test a value used as condition, e.g., in a for or if statement.
1349 Return -1 if an error occurred */
1350
1351int
Fred Drake100814d2000-07-09 15:48:49 +00001352PyObject_IsTrue(PyObject *v)
Guido van Rossum6ac258d1993-05-12 08:24:20 +00001353{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001354 Py_ssize_t res;
1355 if (v == Py_True)
1356 return 1;
1357 if (v == Py_False)
1358 return 0;
1359 if (v == Py_None)
1360 return 0;
1361 else if (v->ob_type->tp_as_number != NULL &&
1362 v->ob_type->tp_as_number->nb_bool != NULL)
1363 res = (*v->ob_type->tp_as_number->nb_bool)(v);
1364 else if (v->ob_type->tp_as_mapping != NULL &&
1365 v->ob_type->tp_as_mapping->mp_length != NULL)
1366 res = (*v->ob_type->tp_as_mapping->mp_length)(v);
1367 else if (v->ob_type->tp_as_sequence != NULL &&
1368 v->ob_type->tp_as_sequence->sq_length != NULL)
1369 res = (*v->ob_type->tp_as_sequence->sq_length)(v);
1370 else
1371 return 1;
1372 /* if it is negative, it should be either -1 or -2 */
1373 return (res > 0) ? 1 : Py_SAFE_DOWNCAST(res, Py_ssize_t, int);
Guido van Rossum6ac258d1993-05-12 08:24:20 +00001374}
1375
Tim Peters803526b2002-07-07 05:13:56 +00001376/* equivalent of 'not v'
Guido van Rossumc3d3f961998-04-09 17:53:59 +00001377 Return -1 if an error occurred */
1378
1379int
Fred Drake100814d2000-07-09 15:48:49 +00001380PyObject_Not(PyObject *v)
Guido van Rossumc3d3f961998-04-09 17:53:59 +00001381{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001382 int res;
1383 res = PyObject_IsTrue(v);
1384 if (res < 0)
1385 return res;
1386 return res == 0;
Guido van Rossumc3d3f961998-04-09 17:53:59 +00001387}
1388
Guido van Rossum49b11fe1995-01-26 00:38:22 +00001389/* Test whether an object can be called */
1390
1391int
Fred Drake100814d2000-07-09 15:48:49 +00001392PyCallable_Check(PyObject *x)
Guido van Rossum49b11fe1995-01-26 00:38:22 +00001393{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001394 if (x == NULL)
1395 return 0;
1396 return x->ob_type->tp_call != NULL;
Guido van Rossum49b11fe1995-01-26 00:38:22 +00001397}
1398
Tim Peters7eea37e2001-09-04 22:08:56 +00001399
Georg Brandle32b4222007-03-10 22:13:27 +00001400/* Helper for PyObject_Dir without arguments: returns the local scope. */
1401static PyObject *
Guido van Rossumad7d8d12007-04-13 01:39:34 +00001402_dir_locals(void)
Tim Peters305b5852001-09-17 02:38:46 +00001403{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001404 PyObject *names;
1405 PyObject *locals = PyEval_GetLocals();
Tim Peters305b5852001-09-17 02:38:46 +00001406
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001407 if (locals == NULL) {
1408 PyErr_SetString(PyExc_SystemError, "frame does not exist");
1409 return NULL;
1410 }
Tim Peters305b5852001-09-17 02:38:46 +00001411
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001412 names = PyMapping_Keys(locals);
1413 if (!names)
1414 return NULL;
1415 if (!PyList_Check(names)) {
1416 PyErr_Format(PyExc_TypeError,
1417 "dir(): expected keys() of locals to be a list, "
1418 "not '%.200s'", Py_TYPE(names)->tp_name);
1419 Py_DECREF(names);
1420 return NULL;
1421 }
Benjamin Peterson3bbb7222011-06-11 16:12:08 -05001422 if (PyList_Sort(names)) {
1423 Py_DECREF(names);
1424 return NULL;
1425 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001426 /* the locals don't need to be DECREF'd */
1427 return names;
Georg Brandle32b4222007-03-10 22:13:27 +00001428}
1429
Benjamin Peterson82b00c12011-05-24 11:09:06 -05001430/* Helper for PyObject_Dir: object introspection. */
Georg Brandle32b4222007-03-10 22:13:27 +00001431static PyObject *
1432_dir_object(PyObject *obj)
1433{
Benjamin Peterson3bbb7222011-06-11 16:12:08 -05001434 PyObject *result, *sorted;
Benjamin Petersonce798522012-01-22 11:24:29 -05001435 _Py_IDENTIFIER(__dir__);
1436 PyObject *dirfunc = _PyObject_LookupSpecial(obj, &PyId___dir__);
Georg Brandle32b4222007-03-10 22:13:27 +00001437
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001438 assert(obj);
1439 if (dirfunc == NULL) {
Benjamin Peterson82b00c12011-05-24 11:09:06 -05001440 if (!PyErr_Occurred())
1441 PyErr_SetString(PyExc_TypeError, "object does not provide __dir__");
1442 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001443 }
Benjamin Peterson82b00c12011-05-24 11:09:06 -05001444 /* use __dir__ */
1445 result = PyObject_CallFunctionObjArgs(dirfunc, NULL);
1446 Py_DECREF(dirfunc);
1447 if (result == NULL)
1448 return NULL;
Benjamin Peterson3bbb7222011-06-11 16:12:08 -05001449 /* return sorted(result) */
1450 sorted = PySequence_List(result);
1451 Py_DECREF(result);
1452 if (sorted == NULL)
1453 return NULL;
1454 if (PyList_Sort(sorted)) {
1455 Py_DECREF(sorted);
1456 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001457 }
Benjamin Peterson3bbb7222011-06-11 16:12:08 -05001458 return sorted;
Georg Brandle32b4222007-03-10 22:13:27 +00001459}
1460
1461/* Implementation of dir() -- if obj is NULL, returns the names in the current
1462 (local) scope. Otherwise, performs introspection of the object: returns a
1463 sorted list of attribute names (supposedly) accessible from the object
1464*/
1465PyObject *
1466PyObject_Dir(PyObject *obj)
1467{
Benjamin Peterson3bbb7222011-06-11 16:12:08 -05001468 return (obj == NULL) ? _dir_locals() : _dir_object(obj);
Tim Peters7eea37e2001-09-04 22:08:56 +00001469}
Guido van Rossum49b11fe1995-01-26 00:38:22 +00001470
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001471/*
Raymond Hettinger66d2be82011-07-28 09:55:13 -07001472None is a non-NULL undefined value.
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001473There is (and should be!) no way to create other objects of this type,
Guido van Rossum3f5da241990-12-20 15:06:42 +00001474so there is exactly one (which is indestructible, by the way).
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001475*/
1476
Guido van Rossum0c182a11992-03-27 17:26:13 +00001477/* ARGSUSED */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001478static PyObject *
Fred Drake100814d2000-07-09 15:48:49 +00001479none_repr(PyObject *op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001480{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001481 return PyUnicode_FromString("None");
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001482}
1483
Barry Warsaw9bf16442001-01-23 16:24:35 +00001484/* ARGUSED */
1485static void
Tim Peters803526b2002-07-07 05:13:56 +00001486none_dealloc(PyObject* ignore)
Barry Warsaw9bf16442001-01-23 16:24:35 +00001487{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001488 /* This should never get called, but we also don't want to SEGV if
1489 * we accidentally decref None out of existence.
1490 */
1491 Py_FatalError("deallocating None");
Barry Warsaw9bf16442001-01-23 16:24:35 +00001492}
1493
Benjamin Petersonc4607ae2011-07-29 18:19:43 -05001494static PyObject *
1495none_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
1496{
1497 if (PyTuple_GET_SIZE(args) || (kwargs && PyDict_Size(kwargs))) {
1498 PyErr_SetString(PyExc_TypeError, "NoneType takes no arguments");
1499 return NULL;
1500 }
1501 Py_RETURN_NONE;
1502}
1503
Raymond Hettinger66d2be82011-07-28 09:55:13 -07001504static int
1505none_bool(PyObject *v)
1506{
1507 return 0;
1508}
1509
1510static PyNumberMethods none_as_number = {
1511 0, /* nb_add */
1512 0, /* nb_subtract */
1513 0, /* nb_multiply */
1514 0, /* nb_remainder */
1515 0, /* nb_divmod */
1516 0, /* nb_power */
1517 0, /* nb_negative */
1518 0, /* nb_positive */
1519 0, /* nb_absolute */
1520 (inquiry)none_bool, /* nb_bool */
1521 0, /* nb_invert */
1522 0, /* nb_lshift */
1523 0, /* nb_rshift */
1524 0, /* nb_and */
1525 0, /* nb_xor */
1526 0, /* nb_or */
1527 0, /* nb_int */
1528 0, /* nb_reserved */
1529 0, /* nb_float */
1530 0, /* nb_inplace_add */
1531 0, /* nb_inplace_subtract */
1532 0, /* nb_inplace_multiply */
1533 0, /* nb_inplace_remainder */
1534 0, /* nb_inplace_power */
1535 0, /* nb_inplace_lshift */
1536 0, /* nb_inplace_rshift */
1537 0, /* nb_inplace_and */
1538 0, /* nb_inplace_xor */
1539 0, /* nb_inplace_or */
1540 0, /* nb_floor_divide */
1541 0, /* nb_true_divide */
1542 0, /* nb_inplace_floor_divide */
1543 0, /* nb_inplace_true_divide */
1544 0, /* nb_index */
1545};
Barry Warsaw9bf16442001-01-23 16:24:35 +00001546
Guido van Rossumba21a492001-08-16 08:17:26 +00001547static PyTypeObject PyNone_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001548 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1549 "NoneType",
1550 0,
1551 0,
1552 none_dealloc, /*tp_dealloc*/ /*never called*/
1553 0, /*tp_print*/
1554 0, /*tp_getattr*/
1555 0, /*tp_setattr*/
1556 0, /*tp_reserved*/
1557 none_repr, /*tp_repr*/
Raymond Hettinger66d2be82011-07-28 09:55:13 -07001558 &none_as_number, /*tp_as_number*/
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001559 0, /*tp_as_sequence*/
1560 0, /*tp_as_mapping*/
1561 0, /*tp_hash */
Benjamin Petersonc4607ae2011-07-29 18:19:43 -05001562 0, /*tp_call */
1563 0, /*tp_str */
1564 0, /*tp_getattro */
1565 0, /*tp_setattro */
1566 0, /*tp_as_buffer */
1567 Py_TPFLAGS_DEFAULT, /*tp_flags */
1568 0, /*tp_doc */
1569 0, /*tp_traverse */
1570 0, /*tp_clear */
1571 0, /*tp_richcompare */
1572 0, /*tp_weaklistoffset */
1573 0, /*tp_iter */
1574 0, /*tp_iternext */
1575 0, /*tp_methods */
1576 0, /*tp_members */
1577 0, /*tp_getset */
1578 0, /*tp_base */
1579 0, /*tp_dict */
1580 0, /*tp_descr_get */
1581 0, /*tp_descr_set */
1582 0, /*tp_dictoffset */
1583 0, /*tp_init */
1584 0, /*tp_alloc */
1585 none_new, /*tp_new */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001586};
1587
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001588PyObject _Py_NoneStruct = {
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00001589 _PyObject_EXTRA_INIT
1590 1, &PyNone_Type
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001591};
1592
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +00001593/* NotImplemented is an object that can be used to signal that an
1594 operation is not implemented for the given type combination. */
1595
1596static PyObject *
1597NotImplemented_repr(PyObject *op)
1598{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001599 return PyUnicode_FromString("NotImplemented");
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +00001600}
1601
Benjamin Peterson18d7d7a2011-07-29 18:27:44 -05001602static PyObject *
1603notimplemented_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
1604{
1605 if (PyTuple_GET_SIZE(args) || (kwargs && PyDict_Size(kwargs))) {
1606 PyErr_SetString(PyExc_TypeError, "NotImplementedType takes no arguments");
1607 return NULL;
1608 }
Brian Curtindfc80e32011-08-10 20:28:54 -05001609 Py_RETURN_NOTIMPLEMENTED;
Benjamin Peterson18d7d7a2011-07-29 18:27:44 -05001610}
1611
Armin Ronacher226b1db2012-10-06 14:28:58 +02001612static void
1613notimplemented_dealloc(PyObject* ignore)
1614{
1615 /* This should never get called, but we also don't want to SEGV if
1616 * we accidentally decref NotImplemented out of existence.
1617 */
1618 Py_FatalError("deallocating NotImplemented");
1619}
1620
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +00001621static PyTypeObject PyNotImplemented_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001622 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1623 "NotImplementedType",
1624 0,
1625 0,
Armin Ronacher226b1db2012-10-06 14:28:58 +02001626 notimplemented_dealloc, /*tp_dealloc*/ /*never called*/
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001627 0, /*tp_print*/
1628 0, /*tp_getattr*/
1629 0, /*tp_setattr*/
1630 0, /*tp_reserved*/
1631 NotImplemented_repr, /*tp_repr*/
1632 0, /*tp_as_number*/
1633 0, /*tp_as_sequence*/
1634 0, /*tp_as_mapping*/
1635 0, /*tp_hash */
Benjamin Peterson18d7d7a2011-07-29 18:27:44 -05001636 0, /*tp_call */
1637 0, /*tp_str */
1638 0, /*tp_getattro */
1639 0, /*tp_setattro */
1640 0, /*tp_as_buffer */
1641 Py_TPFLAGS_DEFAULT, /*tp_flags */
1642 0, /*tp_doc */
1643 0, /*tp_traverse */
1644 0, /*tp_clear */
1645 0, /*tp_richcompare */
1646 0, /*tp_weaklistoffset */
1647 0, /*tp_iter */
1648 0, /*tp_iternext */
1649 0, /*tp_methods */
1650 0, /*tp_members */
1651 0, /*tp_getset */
1652 0, /*tp_base */
1653 0, /*tp_dict */
1654 0, /*tp_descr_get */
1655 0, /*tp_descr_set */
1656 0, /*tp_dictoffset */
1657 0, /*tp_init */
1658 0, /*tp_alloc */
1659 notimplemented_new, /*tp_new */
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +00001660};
1661
1662PyObject _Py_NotImplementedStruct = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001663 _PyObject_EXTRA_INIT
1664 1, &PyNotImplemented_Type
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +00001665};
1666
Guido van Rossumba21a492001-08-16 08:17:26 +00001667void
1668_Py_ReadyTypes(void)
1669{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001670 if (PyType_Ready(&PyType_Type) < 0)
1671 Py_FatalError("Can't initialize type type");
Guido van Rossumba21a492001-08-16 08:17:26 +00001672
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001673 if (PyType_Ready(&_PyWeakref_RefType) < 0)
1674 Py_FatalError("Can't initialize weakref type");
Fred Drake0a4dd392004-07-02 18:57:45 +00001675
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001676 if (PyType_Ready(&_PyWeakref_CallableProxyType) < 0)
1677 Py_FatalError("Can't initialize callable weakref proxy type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001678
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001679 if (PyType_Ready(&_PyWeakref_ProxyType) < 0)
1680 Py_FatalError("Can't initialize weakref proxy type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001681
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001682 if (PyType_Ready(&PyBool_Type) < 0)
1683 Py_FatalError("Can't initialize bool type");
Guido van Rossum77f6a652002-04-03 22:41:51 +00001684
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001685 if (PyType_Ready(&PyByteArray_Type) < 0)
1686 Py_FatalError("Can't initialize bytearray type");
Guido van Rossum4dfe8a12006-04-22 23:28:04 +00001687
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001688 if (PyType_Ready(&PyBytes_Type) < 0)
1689 Py_FatalError("Can't initialize 'str'");
Guido van Rossumcacfc072002-05-24 19:01:59 +00001690
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001691 if (PyType_Ready(&PyList_Type) < 0)
1692 Py_FatalError("Can't initialize list type");
Guido van Rossumba21a492001-08-16 08:17:26 +00001693
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001694 if (PyType_Ready(&PyNone_Type) < 0)
1695 Py_FatalError("Can't initialize None type");
Guido van Rossumba21a492001-08-16 08:17:26 +00001696
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001697 if (PyType_Ready(&PyNotImplemented_Type) < 0)
1698 Py_FatalError("Can't initialize NotImplemented type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001699
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001700 if (PyType_Ready(&PyTraceBack_Type) < 0)
1701 Py_FatalError("Can't initialize traceback type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001702
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001703 if (PyType_Ready(&PySuper_Type) < 0)
1704 Py_FatalError("Can't initialize super type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001705
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001706 if (PyType_Ready(&PyBaseObject_Type) < 0)
1707 Py_FatalError("Can't initialize object type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001708
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001709 if (PyType_Ready(&PyRange_Type) < 0)
1710 Py_FatalError("Can't initialize range type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001711
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001712 if (PyType_Ready(&PyDict_Type) < 0)
1713 Py_FatalError("Can't initialize dict type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001714
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001715 if (PyType_Ready(&PySet_Type) < 0)
1716 Py_FatalError("Can't initialize set type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001717
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001718 if (PyType_Ready(&PyUnicode_Type) < 0)
1719 Py_FatalError("Can't initialize str type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001720
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001721 if (PyType_Ready(&PySlice_Type) < 0)
1722 Py_FatalError("Can't initialize slice type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001723
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001724 if (PyType_Ready(&PyStaticMethod_Type) < 0)
1725 Py_FatalError("Can't initialize static method type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001726
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001727 if (PyType_Ready(&PyComplex_Type) < 0)
1728 Py_FatalError("Can't initialize complex type");
Skip Montanaroba1e0f42009-10-18 14:25:35 +00001729
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001730 if (PyType_Ready(&PyFloat_Type) < 0)
1731 Py_FatalError("Can't initialize float type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001732
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001733 if (PyType_Ready(&PyLong_Type) < 0)
1734 Py_FatalError("Can't initialize int type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001735
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001736 if (PyType_Ready(&PyFrozenSet_Type) < 0)
1737 Py_FatalError("Can't initialize frozenset type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001738
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001739 if (PyType_Ready(&PyProperty_Type) < 0)
1740 Py_FatalError("Can't initialize property type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001741
Stefan Krah9a2d99e2012-02-25 12:24:21 +01001742 if (PyType_Ready(&_PyManagedBuffer_Type) < 0)
1743 Py_FatalError("Can't initialize managed buffer type");
1744
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001745 if (PyType_Ready(&PyMemoryView_Type) < 0)
1746 Py_FatalError("Can't initialize memoryview type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001747
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001748 if (PyType_Ready(&PyTuple_Type) < 0)
1749 Py_FatalError("Can't initialize tuple type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001750
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001751 if (PyType_Ready(&PyEnum_Type) < 0)
1752 Py_FatalError("Can't initialize enumerate type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001753
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001754 if (PyType_Ready(&PyReversed_Type) < 0)
1755 Py_FatalError("Can't initialize reversed type");
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001756
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001757 if (PyType_Ready(&PyStdPrinter_Type) < 0)
1758 Py_FatalError("Can't initialize StdPrinter");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001759
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001760 if (PyType_Ready(&PyCode_Type) < 0)
1761 Py_FatalError("Can't initialize code type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001762
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001763 if (PyType_Ready(&PyFrame_Type) < 0)
1764 Py_FatalError("Can't initialize frame type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001765
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001766 if (PyType_Ready(&PyCFunction_Type) < 0)
1767 Py_FatalError("Can't initialize builtin function type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001768
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001769 if (PyType_Ready(&PyMethod_Type) < 0)
1770 Py_FatalError("Can't initialize method type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001771
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001772 if (PyType_Ready(&PyFunction_Type) < 0)
1773 Py_FatalError("Can't initialize function type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001774
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001775 if (PyType_Ready(&PyDictProxy_Type) < 0)
1776 Py_FatalError("Can't initialize dict proxy type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001777
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001778 if (PyType_Ready(&PyGen_Type) < 0)
1779 Py_FatalError("Can't initialize generator type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001780
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001781 if (PyType_Ready(&PyGetSetDescr_Type) < 0)
1782 Py_FatalError("Can't initialize get-set descriptor type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001783
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001784 if (PyType_Ready(&PyWrapperDescr_Type) < 0)
1785 Py_FatalError("Can't initialize wrapper type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001786
Benjamin Petersoneff61f62011-09-01 16:32:31 -04001787 if (PyType_Ready(&_PyMethodWrapper_Type) < 0)
1788 Py_FatalError("Can't initialize method wrapper type");
1789
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001790 if (PyType_Ready(&PyEllipsis_Type) < 0)
1791 Py_FatalError("Can't initialize ellipsis type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001792
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001793 if (PyType_Ready(&PyMemberDescr_Type) < 0)
1794 Py_FatalError("Can't initialize member descriptor type");
Benjamin Peterson8bc5b682009-05-09 18:10:51 +00001795
Barry Warsaw409da152012-06-03 16:18:47 -04001796 if (PyType_Ready(&_PyNamespace_Type) < 0)
1797 Py_FatalError("Can't initialize namespace type");
Benjamin Petersone8ea97f2012-10-30 23:27:52 -04001798
Benjamin Petersonc4311282012-10-30 23:21:10 -04001799 if (PyType_Ready(&PyCapsule_Type) < 0)
1800 Py_FatalError("Can't initialize capsule type");
1801
1802 if (PyType_Ready(&PyLongRangeIter_Type) < 0)
1803 Py_FatalError("Can't initialize long range iterator type");
1804
1805 if (PyType_Ready(&PyCell_Type) < 0)
1806 Py_FatalError("Can't initialize cell type");
1807
1808 if (PyType_Ready(&PyInstanceMethod_Type) < 0)
1809 Py_FatalError("Can't initialize instance method type");
1810
1811 if (PyType_Ready(&PyClassMethodDescr_Type) < 0)
1812 Py_FatalError("Can't initialize class method descr type");
1813
1814 if (PyType_Ready(&PyMethodDescr_Type) < 0)
1815 Py_FatalError("Can't initialize method descr type");
1816
1817 if (PyType_Ready(&PyCallIter_Type) < 0)
1818 Py_FatalError("Can't initialize call iter type");
1819
1820 if (PyType_Ready(&PySeqIter_Type) < 0)
1821 Py_FatalError("Can't initialize sequence iterator type");
Guido van Rossumba21a492001-08-16 08:17:26 +00001822}
1823
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001824
Guido van Rossum84a90321996-05-22 16:34:47 +00001825#ifdef Py_TRACE_REFS
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001826
Guido van Rossumaacdc9d1996-08-12 21:32:12 +00001827void
Fred Drake100814d2000-07-09 15:48:49 +00001828_Py_NewReference(PyObject *op)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001829{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001830 _Py_INC_REFTOTAL;
1831 op->ob_refcnt = 1;
1832 _Py_AddToAllObjects(op, 1);
1833 _Py_INC_TPALLOCS(op);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001834}
1835
Guido van Rossumaacdc9d1996-08-12 21:32:12 +00001836void
Fred Drake100814d2000-07-09 15:48:49 +00001837_Py_ForgetReference(register PyObject *op)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001838{
Guido van Rossumbffd6832000-01-20 22:32:56 +00001839#ifdef SLOW_UNREF_CHECK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001840 register PyObject *p;
Guido van Rossumbffd6832000-01-20 22:32:56 +00001841#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001842 if (op->ob_refcnt < 0)
1843 Py_FatalError("UNREF negative refcnt");
1844 if (op == &refchain ||
1845 op->_ob_prev->_ob_next != op || op->_ob_next->_ob_prev != op) {
1846 fprintf(stderr, "* ob\n");
1847 _PyObject_Dump(op);
1848 fprintf(stderr, "* op->_ob_prev->_ob_next\n");
1849 _PyObject_Dump(op->_ob_prev->_ob_next);
1850 fprintf(stderr, "* op->_ob_next->_ob_prev\n");
1851 _PyObject_Dump(op->_ob_next->_ob_prev);
1852 Py_FatalError("UNREF invalid object");
1853 }
Guido van Rossum2e8f6141992-09-03 20:32:55 +00001854#ifdef SLOW_UNREF_CHECK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001855 for (p = refchain._ob_next; p != &refchain; p = p->_ob_next) {
1856 if (p == op)
1857 break;
1858 }
1859 if (p == &refchain) /* Not found */
1860 Py_FatalError("UNREF unknown object");
Guido van Rossum2e8f6141992-09-03 20:32:55 +00001861#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001862 op->_ob_next->_ob_prev = op->_ob_prev;
1863 op->_ob_prev->_ob_next = op->_ob_next;
1864 op->_ob_next = op->_ob_prev = NULL;
1865 _Py_INC_TPFREES(op);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001866}
1867
Guido van Rossumaacdc9d1996-08-12 21:32:12 +00001868void
Fred Drake100814d2000-07-09 15:48:49 +00001869_Py_Dealloc(PyObject *op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001870{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001871 destructor dealloc = Py_TYPE(op)->tp_dealloc;
1872 _Py_ForgetReference(op);
1873 (*dealloc)(op);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001874}
1875
Tim Peters269b2a62003-04-17 19:52:29 +00001876/* Print all live objects. Because PyObject_Print is called, the
1877 * interpreter must be in a healthy state.
1878 */
Guido van Rossumaacdc9d1996-08-12 21:32:12 +00001879void
Fred Drake100814d2000-07-09 15:48:49 +00001880_Py_PrintReferences(FILE *fp)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001881{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001882 PyObject *op;
1883 fprintf(fp, "Remaining objects:\n");
1884 for (op = refchain._ob_next; op != &refchain; op = op->_ob_next) {
1885 fprintf(fp, "%p [%" PY_FORMAT_SIZE_T "d] ", op, op->ob_refcnt);
1886 if (PyObject_Print(op, fp, 0) != 0)
1887 PyErr_Clear();
1888 putc('\n', fp);
1889 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001890}
1891
Tim Peters269b2a62003-04-17 19:52:29 +00001892/* Print the addresses of all live objects. Unlike _Py_PrintReferences, this
1893 * doesn't make any calls to the Python C API, so is always safe to call.
1894 */
1895void
1896_Py_PrintReferenceAddresses(FILE *fp)
1897{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001898 PyObject *op;
1899 fprintf(fp, "Remaining object addresses:\n");
1900 for (op = refchain._ob_next; op != &refchain; op = op->_ob_next)
1901 fprintf(fp, "%p [%" PY_FORMAT_SIZE_T "d] %s\n", op,
1902 op->ob_refcnt, Py_TYPE(op)->tp_name);
Tim Peters269b2a62003-04-17 19:52:29 +00001903}
1904
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +00001905PyObject *
Fred Drake100814d2000-07-09 15:48:49 +00001906_Py_GetObjects(PyObject *self, PyObject *args)
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +00001907{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001908 int i, n;
1909 PyObject *t = NULL;
1910 PyObject *res, *op;
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +00001911
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001912 if (!PyArg_ParseTuple(args, "i|O", &n, &t))
1913 return NULL;
1914 op = refchain._ob_next;
1915 res = PyList_New(0);
1916 if (res == NULL)
1917 return NULL;
1918 for (i = 0; (n == 0 || i < n) && op != &refchain; i++) {
1919 while (op == self || op == args || op == res || op == t ||
1920 (t != NULL && Py_TYPE(op) != (PyTypeObject *) t)) {
1921 op = op->_ob_next;
1922 if (op == &refchain)
1923 return res;
1924 }
1925 if (PyList_Append(res, op) < 0) {
1926 Py_DECREF(res);
1927 return NULL;
1928 }
1929 op = op->_ob_next;
1930 }
1931 return res;
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +00001932}
1933
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001934#endif
Guido van Rossum97ead3f1996-01-12 01:24:09 +00001935
Benjamin Petersonb173f782009-05-05 22:31:58 +00001936/* Hack to force loading of pycapsule.o */
1937PyTypeObject *_PyCapsule_hack = &PyCapsule_Type;
1938
1939
Guido van Rossum84a90321996-05-22 16:34:47 +00001940/* Hack to force loading of abstract.o */
Martin v. Löwis18e16552006-02-15 17:27:45 +00001941Py_ssize_t (*_Py_abstract_hack)(PyObject *) = PyObject_Size;
Guido van Rossume09fb551997-08-05 02:04:34 +00001942
1943
David Malcolm49526f42012-06-22 14:55:41 -04001944void
1945_PyObject_DebugTypeStats(FILE *out)
1946{
1947 _PyCFunction_DebugMallocStats(out);
1948 _PyDict_DebugMallocStats(out);
1949 _PyFloat_DebugMallocStats(out);
1950 _PyFrame_DebugMallocStats(out);
1951 _PyList_DebugMallocStats(out);
1952 _PyMethod_DebugMallocStats(out);
1953 _PySet_DebugMallocStats(out);
1954 _PyTuple_DebugMallocStats(out);
1955}
Guido van Rossumb18618d2000-05-03 23:44:39 +00001956
Guido van Rossum86610361998-04-10 22:32:46 +00001957/* These methods are used to control infinite recursion in repr, str, print,
1958 etc. Container objects that may recursively contain themselves,
1959 e.g. builtin dictionaries and lists, should used Py_ReprEnter() and
1960 Py_ReprLeave() to avoid infinite recursion.
1961
1962 Py_ReprEnter() returns 0 the first time it is called for a particular
1963 object and 1 every time thereafter. It returns -1 if an exception
1964 occurred. Py_ReprLeave() has no return value.
1965
1966 See dictobject.c and listobject.c for examples of use.
1967*/
1968
1969#define KEY "Py_Repr"
1970
1971int
Fred Drake100814d2000-07-09 15:48:49 +00001972Py_ReprEnter(PyObject *obj)
Guido van Rossum86610361998-04-10 22:32:46 +00001973{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001974 PyObject *dict;
1975 PyObject *list;
1976 Py_ssize_t i;
Guido van Rossum86610361998-04-10 22:32:46 +00001977
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001978 dict = PyThreadState_GetDict();
1979 if (dict == NULL)
1980 return 0;
1981 list = PyDict_GetItemString(dict, KEY);
1982 if (list == NULL) {
1983 list = PyList_New(0);
1984 if (list == NULL)
1985 return -1;
1986 if (PyDict_SetItemString(dict, KEY, list) < 0)
1987 return -1;
1988 Py_DECREF(list);
1989 }
1990 i = PyList_GET_SIZE(list);
1991 while (--i >= 0) {
1992 if (PyList_GET_ITEM(list, i) == obj)
1993 return 1;
1994 }
Victor Stinnere901d1f2013-07-17 21:58:41 +02001995 if (PyList_Append(list, obj) < 0)
1996 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001997 return 0;
Guido van Rossum86610361998-04-10 22:32:46 +00001998}
1999
2000void
Fred Drake100814d2000-07-09 15:48:49 +00002001Py_ReprLeave(PyObject *obj)
Guido van Rossum86610361998-04-10 22:32:46 +00002002{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002003 PyObject *dict;
2004 PyObject *list;
2005 Py_ssize_t i;
Victor Stinner1b634932013-07-16 22:24:44 +02002006 PyObject *error_type, *error_value, *error_traceback;
2007
2008 PyErr_Fetch(&error_type, &error_value, &error_traceback);
Guido van Rossum86610361998-04-10 22:32:46 +00002009
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002010 dict = PyThreadState_GetDict();
2011 if (dict == NULL)
Victor Stinner1b634932013-07-16 22:24:44 +02002012 goto finally;
2013
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002014 list = PyDict_GetItemString(dict, KEY);
2015 if (list == NULL || !PyList_Check(list))
Victor Stinner1b634932013-07-16 22:24:44 +02002016 goto finally;
2017
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002018 i = PyList_GET_SIZE(list);
2019 /* Count backwards because we always expect obj to be list[-1] */
2020 while (--i >= 0) {
2021 if (PyList_GET_ITEM(list, i) == obj) {
2022 PyList_SetSlice(list, i, i + 1, NULL);
2023 break;
2024 }
2025 }
Victor Stinner1b634932013-07-16 22:24:44 +02002026
2027finally:
2028 /* ignore exceptions because there is no way to report them. */
2029 PyErr_Restore(error_type, error_value, error_traceback);
Guido van Rossum86610361998-04-10 22:32:46 +00002030}
Guido van Rossumd724b232000-03-13 16:01:29 +00002031
Tim Peters803526b2002-07-07 05:13:56 +00002032/* Trashcan support. */
Guido van Rossumd724b232000-03-13 16:01:29 +00002033
Tim Peters803526b2002-07-07 05:13:56 +00002034/* Current call-stack depth of tp_dealloc calls. */
Guido van Rossumd724b232000-03-13 16:01:29 +00002035int _PyTrash_delete_nesting = 0;
Guido van Rossume92e6102000-04-24 15:40:53 +00002036
Tim Peters803526b2002-07-07 05:13:56 +00002037/* List of objects that still need to be cleaned up, singly linked via their
2038 * gc headers' gc_prev pointers.
2039 */
2040PyObject *_PyTrash_delete_later = NULL;
Guido van Rossumd724b232000-03-13 16:01:29 +00002041
Tim Peters803526b2002-07-07 05:13:56 +00002042/* Add op to the _PyTrash_delete_later list. Called when the current
2043 * call-stack depth gets large. op must be a currently untracked gc'ed
2044 * object, with refcount 0. Py_DECREF must already have been called on it.
2045 */
Guido van Rossumd724b232000-03-13 16:01:29 +00002046void
Fred Drake100814d2000-07-09 15:48:49 +00002047_PyTrash_deposit_object(PyObject *op)
Guido van Rossumd724b232000-03-13 16:01:29 +00002048{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002049 assert(PyObject_IS_GC(op));
Antoine Pitrou796564c2013-07-30 19:59:21 +02002050 assert(_PyGC_REFS(op) == _PyGC_REFS_UNTRACKED);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002051 assert(op->ob_refcnt == 0);
2052 _Py_AS_GC(op)->gc.gc_prev = (PyGC_Head *)_PyTrash_delete_later;
2053 _PyTrash_delete_later = op;
Guido van Rossumd724b232000-03-13 16:01:29 +00002054}
2055
Antoine Pitrou2b0218a2012-09-06 00:59:49 +02002056/* The equivalent API, using per-thread state recursion info */
2057void
2058_PyTrash_thread_deposit_object(PyObject *op)
2059{
2060 PyThreadState *tstate = PyThreadState_GET();
2061 assert(PyObject_IS_GC(op));
Antoine Pitrou796564c2013-07-30 19:59:21 +02002062 assert(_PyGC_REFS(op) == _PyGC_REFS_UNTRACKED);
Antoine Pitrou2b0218a2012-09-06 00:59:49 +02002063 assert(op->ob_refcnt == 0);
2064 _Py_AS_GC(op)->gc.gc_prev = (PyGC_Head *) tstate->trash_delete_later;
2065 tstate->trash_delete_later = op;
2066}
2067
Tim Peters803526b2002-07-07 05:13:56 +00002068/* Dealloccate all the objects in the _PyTrash_delete_later list. Called when
2069 * the call-stack unwinds again.
2070 */
Guido van Rossumd724b232000-03-13 16:01:29 +00002071void
Fred Drake100814d2000-07-09 15:48:49 +00002072_PyTrash_destroy_chain(void)
Guido van Rossumd724b232000-03-13 16:01:29 +00002073{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002074 while (_PyTrash_delete_later) {
2075 PyObject *op = _PyTrash_delete_later;
2076 destructor dealloc = Py_TYPE(op)->tp_dealloc;
Neil Schemenauerf589c052002-03-29 03:05:54 +00002077
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002078 _PyTrash_delete_later =
2079 (PyObject*) _Py_AS_GC(op)->gc.gc_prev;
Neil Schemenauerf589c052002-03-29 03:05:54 +00002080
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002081 /* Call the deallocator directly. This used to try to
2082 * fool Py_DECREF into calling it indirectly, but
2083 * Py_DECREF was already called on this object, and in
2084 * assorted non-release builds calling Py_DECREF again ends
2085 * up distorting allocation statistics.
2086 */
2087 assert(op->ob_refcnt == 0);
2088 ++_PyTrash_delete_nesting;
2089 (*dealloc)(op);
2090 --_PyTrash_delete_nesting;
2091 }
Guido van Rossumd724b232000-03-13 16:01:29 +00002092}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002093
Antoine Pitrou2b0218a2012-09-06 00:59:49 +02002094/* The equivalent API, using per-thread state recursion info */
2095void
2096_PyTrash_thread_destroy_chain(void)
2097{
2098 PyThreadState *tstate = PyThreadState_GET();
2099 while (tstate->trash_delete_later) {
2100 PyObject *op = tstate->trash_delete_later;
2101 destructor dealloc = Py_TYPE(op)->tp_dealloc;
2102
2103 tstate->trash_delete_later =
2104 (PyObject*) _Py_AS_GC(op)->gc.gc_prev;
2105
2106 /* Call the deallocator directly. This used to try to
2107 * fool Py_DECREF into calling it indirectly, but
2108 * Py_DECREF was already called on this object, and in
2109 * assorted non-release builds calling Py_DECREF again ends
2110 * up distorting allocation statistics.
2111 */
2112 assert(op->ob_refcnt == 0);
2113 ++tstate->trash_delete_nesting;
2114 (*dealloc)(op);
2115 --tstate->trash_delete_nesting;
2116 }
2117}
2118
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00002119#ifndef Py_TRACE_REFS
2120/* For Py_LIMITED_API, we need an out-of-line version of _Py_Dealloc.
2121 Define this here, so we can undefine the macro. */
2122#undef _Py_Dealloc
2123PyAPI_FUNC(void) _Py_Dealloc(PyObject *);
2124void
2125_Py_Dealloc(PyObject *op)
2126{
2127 _Py_INC_TPFREES(op) _Py_COUNT_ALLOCS_COMMA
2128 (*Py_TYPE(op)->tp_dealloc)(op);
2129}
2130#endif
2131
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002132#ifdef __cplusplus
2133}
2134#endif