blob: 79f1c8a8356afaec0f46bf3da41ce967d0a34f70 [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 Pitrouc47bd4a2010-07-27 22:08:27 +0000258int
259PyObject_Print(PyObject *op, FILE *fp, int flags)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000260{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000261 int ret = 0;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000262 if (PyErr_CheckSignals())
263 return -1;
Guido van Rossum9b00dfa1998-04-28 16:06:54 +0000264#ifdef USE_STACKCHECK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000265 if (PyOS_CheckStack()) {
266 PyErr_SetString(PyExc_MemoryError, "stack overflow");
267 return -1;
268 }
Guido van Rossum9b00dfa1998-04-28 16:06:54 +0000269#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000270 clearerr(fp); /* Clear any previous error condition */
271 if (op == NULL) {
272 Py_BEGIN_ALLOW_THREADS
273 fprintf(fp, "<nil>");
274 Py_END_ALLOW_THREADS
275 }
276 else {
277 if (op->ob_refcnt <= 0)
278 /* XXX(twouters) cast refcount to long until %zd is
279 universally available */
280 Py_BEGIN_ALLOW_THREADS
281 fprintf(fp, "<refcnt %ld at %p>",
282 (long)op->ob_refcnt, op);
283 Py_END_ALLOW_THREADS
284 else {
285 PyObject *s;
286 if (flags & Py_PRINT_RAW)
287 s = PyObject_Str(op);
288 else
289 s = PyObject_Repr(op);
290 if (s == NULL)
291 ret = -1;
292 else if (PyBytes_Check(s)) {
293 fwrite(PyBytes_AS_STRING(s), 1,
294 PyBytes_GET_SIZE(s), fp);
295 }
296 else if (PyUnicode_Check(s)) {
297 PyObject *t;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200298 t = PyUnicode_AsEncodedString(s, "utf-8", "backslashreplace");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000299 if (t == NULL)
300 ret = 0;
301 else {
302 fwrite(PyBytes_AS_STRING(t), 1,
303 PyBytes_GET_SIZE(t), fp);
Victor Stinnerba6b4302010-05-17 09:33:42 +0000304 Py_DECREF(t);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000305 }
306 }
307 else {
308 PyErr_Format(PyExc_TypeError,
309 "str() or repr() returned '%.100s'",
310 s->ob_type->tp_name);
311 ret = -1;
312 }
313 Py_XDECREF(s);
314 }
315 }
316 if (ret == 0) {
317 if (ferror(fp)) {
318 PyErr_SetFromErrno(PyExc_IOError);
319 clearerr(fp);
320 ret = -1;
321 }
322 }
323 return ret;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000324}
325
Guido van Rossum38938152006-08-21 23:36:26 +0000326/* For debugging convenience. Set a breakpoint here and call it from your DLL */
327void
Thomas Woutersb2137042007-02-01 18:02:27 +0000328_Py_BreakPoint(void)
Guido van Rossum38938152006-08-21 23:36:26 +0000329{
330}
331
Neal Norwitz1a997502003-01-13 20:13:12 +0000332
Barry Warsaw9bf16442001-01-23 16:24:35 +0000333/* For debugging convenience. See Misc/gdbinit for some useful gdb hooks */
Guido van Rossum38938152006-08-21 23:36:26 +0000334void
335_PyObject_Dump(PyObject* op)
Barry Warsaw9bf16442001-01-23 16:24:35 +0000336{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000337 if (op == NULL)
338 fprintf(stderr, "NULL\n");
339 else {
Georg Brandldfd73442009-04-05 11:47:34 +0000340#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000341 PyGILState_STATE gil;
Georg Brandldfd73442009-04-05 11:47:34 +0000342#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000343 fprintf(stderr, "object : ");
Georg Brandldfd73442009-04-05 11:47:34 +0000344#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000345 gil = PyGILState_Ensure();
Georg Brandldfd73442009-04-05 11:47:34 +0000346#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000347 (void)PyObject_Print(op, stderr, 0);
Georg Brandldfd73442009-04-05 11:47:34 +0000348#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000349 PyGILState_Release(gil);
Georg Brandldfd73442009-04-05 11:47:34 +0000350#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000351 /* XXX(twouters) cast refcount to long until %zd is
352 universally available */
353 fprintf(stderr, "\n"
354 "type : %s\n"
355 "refcount: %ld\n"
356 "address : %p\n",
357 Py_TYPE(op)==NULL ? "NULL" : Py_TYPE(op)->tp_name,
358 (long)op->ob_refcnt,
359 op);
360 }
Barry Warsaw9bf16442001-01-23 16:24:35 +0000361}
Barry Warsaw903138f2001-01-23 16:33:18 +0000362
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000363PyObject *
Fred Drake100814d2000-07-09 15:48:49 +0000364PyObject_Repr(PyObject *v)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000365{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000366 PyObject *res;
367 if (PyErr_CheckSignals())
368 return NULL;
Guido van Rossum9b00dfa1998-04-28 16:06:54 +0000369#ifdef USE_STACKCHECK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000370 if (PyOS_CheckStack()) {
371 PyErr_SetString(PyExc_MemoryError, "stack overflow");
372 return NULL;
373 }
Guido van Rossum9b00dfa1998-04-28 16:06:54 +0000374#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000375 if (v == NULL)
376 return PyUnicode_FromString("<NULL>");
377 if (Py_TYPE(v)->tp_repr == NULL)
378 return PyUnicode_FromFormat("<%s object at %p>",
379 v->ob_type->tp_name, v);
380 res = (*v->ob_type->tp_repr)(v);
Victor Stinner0a54cf12011-12-01 03:22:44 +0100381 if (res == NULL)
382 return NULL;
383 if (!PyUnicode_Check(res)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000384 PyErr_Format(PyExc_TypeError,
385 "__repr__ returned non-string (type %.200s)",
386 res->ob_type->tp_name);
387 Py_DECREF(res);
388 return NULL;
389 }
Victor Stinnerdb88ae52011-12-01 02:15:00 +0100390#ifndef Py_DEBUG
391 if (PyUnicode_READY(res) < 0)
392 return NULL;
393#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000394 return res;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000395}
396
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000397PyObject *
Guido van Rossum98297ee2007-11-06 21:34:58 +0000398PyObject_Str(PyObject *v)
Guido van Rossumc6004111993-11-05 10:22:19 +0000399{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000400 PyObject *res;
401 if (PyErr_CheckSignals())
402 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +0000403#ifdef USE_STACKCHECK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000404 if (PyOS_CheckStack()) {
405 PyErr_SetString(PyExc_MemoryError, "stack overflow");
406 return NULL;
407 }
Guido van Rossum98297ee2007-11-06 21:34:58 +0000408#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000409 if (v == NULL)
410 return PyUnicode_FromString("<NULL>");
411 if (PyUnicode_CheckExact(v)) {
Victor Stinnerdb88ae52011-12-01 02:15:00 +0100412#ifndef Py_DEBUG
Victor Stinner4ead7c72011-11-20 19:48:36 +0100413 if (PyUnicode_READY(v) < 0)
414 return NULL;
Victor Stinnerdb88ae52011-12-01 02:15:00 +0100415#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000416 Py_INCREF(v);
417 return v;
418 }
419 if (Py_TYPE(v)->tp_str == NULL)
420 return PyObject_Repr(v);
Guido van Rossum4f288ab2001-05-01 16:53:37 +0000421
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000422 /* It is possible for a type to have a tp_str representation that loops
423 infinitely. */
424 if (Py_EnterRecursiveCall(" while getting the str of an object"))
425 return NULL;
426 res = (*Py_TYPE(v)->tp_str)(v);
427 Py_LeaveRecursiveCall();
428 if (res == NULL)
429 return NULL;
430 if (!PyUnicode_Check(res)) {
431 PyErr_Format(PyExc_TypeError,
432 "__str__ returned non-string (type %.200s)",
433 Py_TYPE(res)->tp_name);
434 Py_DECREF(res);
435 return NULL;
436 }
Victor Stinnerdb88ae52011-12-01 02:15:00 +0100437#ifndef Py_DEBUG
Victor Stinner4ead7c72011-11-20 19:48:36 +0100438 if (PyUnicode_READY(res) < 0)
439 return NULL;
Victor Stinnerdb88ae52011-12-01 02:15:00 +0100440#endif
Victor Stinner4ead7c72011-11-20 19:48:36 +0100441 assert(_PyUnicode_CheckConsistency(res, 1));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000442 return res;
Neil Schemenauercf52c072005-08-12 17:34:58 +0000443}
444
Georg Brandl559e5d72008-06-11 18:37:52 +0000445PyObject *
446PyObject_ASCII(PyObject *v)
447{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000448 PyObject *repr, *ascii, *res;
Georg Brandl559e5d72008-06-11 18:37:52 +0000449
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000450 repr = PyObject_Repr(v);
451 if (repr == NULL)
452 return NULL;
Georg Brandl559e5d72008-06-11 18:37:52 +0000453
Victor Stinneraf037572013-04-14 18:44:10 +0200454 if (PyUnicode_IS_ASCII(repr))
455 return repr;
456
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000457 /* repr is guaranteed to be a PyUnicode object by PyObject_Repr */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200458 ascii = _PyUnicode_AsASCIIString(repr, "backslashreplace");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000459 Py_DECREF(repr);
460 if (ascii == NULL)
461 return NULL;
Georg Brandl559e5d72008-06-11 18:37:52 +0000462
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000463 res = PyUnicode_DecodeASCII(
464 PyBytes_AS_STRING(ascii),
465 PyBytes_GET_SIZE(ascii),
466 NULL);
467
468 Py_DECREF(ascii);
469 return res;
Georg Brandl559e5d72008-06-11 18:37:52 +0000470}
Guido van Rossuma3af41d2001-01-18 22:07:06 +0000471
Benjamin Petersonc15a0732008-08-26 16:46:47 +0000472PyObject *
473PyObject_Bytes(PyObject *v)
474{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000475 PyObject *result, *func;
Benjamin Petersonce798522012-01-22 11:24:29 -0500476 _Py_IDENTIFIER(__bytes__);
Benjamin Petersonc15a0732008-08-26 16:46:47 +0000477
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000478 if (v == NULL)
479 return PyBytes_FromString("<NULL>");
Benjamin Petersonc15a0732008-08-26 16:46:47 +0000480
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000481 if (PyBytes_CheckExact(v)) {
482 Py_INCREF(v);
483 return v;
484 }
Benjamin Petersonc15a0732008-08-26 16:46:47 +0000485
Benjamin Petersonce798522012-01-22 11:24:29 -0500486 func = _PyObject_LookupSpecial(v, &PyId___bytes__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000487 if (func != NULL) {
488 result = PyObject_CallFunctionObjArgs(func, NULL);
489 Py_DECREF(func);
490 if (result == NULL)
Benjamin Peterson41ece392010-09-11 16:39:57 +0000491 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000492 if (!PyBytes_Check(result)) {
Benjamin Peterson41ece392010-09-11 16:39:57 +0000493 PyErr_Format(PyExc_TypeError,
494 "__bytes__ returned non-bytes (type %.200s)",
495 Py_TYPE(result)->tp_name);
496 Py_DECREF(result);
497 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000498 }
499 return result;
500 }
501 else if (PyErr_Occurred())
502 return NULL;
503 return PyBytes_FromObject(v);
Benjamin Petersonc15a0732008-08-26 16:46:47 +0000504}
505
Mark Dickinsonc008a172009-02-01 13:59:22 +0000506/* For Python 3.0.1 and later, the old three-way comparison has been
507 completely removed in favour of rich comparisons. PyObject_Compare() and
508 PyObject_Cmp() are gone, and the builtin cmp function no longer exists.
Mark Dickinsone94c6792009-02-02 20:36:42 +0000509 The old tp_compare slot has been renamed to tp_reserved, and should no
Mark Dickinsonc008a172009-02-01 13:59:22 +0000510 longer be used. Use tp_richcompare instead.
Guido van Rossum98297ee2007-11-06 21:34:58 +0000511
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000512 See (*) below for practical amendments.
513
Mark Dickinsonc008a172009-02-01 13:59:22 +0000514 tp_richcompare gets called with a first argument of the appropriate type
515 and a second object of an arbitrary type. We never do any kind of
516 coercion.
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000517
Mark Dickinsonc008a172009-02-01 13:59:22 +0000518 The tp_richcompare slot should return an object, as follows:
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000519
520 NULL if an exception occurred
521 NotImplemented if the requested comparison is not implemented
522 any other false value if the requested comparison is false
523 any other true value if the requested comparison is true
524
525 The PyObject_RichCompare[Bool]() wrappers raise TypeError when they get
526 NotImplemented.
527
528 (*) Practical amendments:
529
530 - If rich comparison returns NotImplemented, == and != are decided by
531 comparing the object pointer (i.e. falling back to the base object
532 implementation).
533
Guido van Rossuma4073002002-05-31 20:03:54 +0000534*/
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000535
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000536/* Map rich comparison operators to their swapped version, e.g. LT <--> GT */
Brett Cannona5ca2e72004-09-25 01:37:24 +0000537int _Py_SwappedOp[] = {Py_GT, Py_GE, Py_EQ, Py_NE, Py_LT, Py_LE};
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +0000538
Guido van Rossum9a4e95c2006-12-19 21:35:46 +0000539static char *opstrings[] = {"<", "<=", "==", "!=", ">", ">="};
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000540
541/* Perform a rich comparison, raising TypeError when the requested comparison
542 operator is not supported. */
Guido van Rossume797ec12001-01-17 15:24:28 +0000543static PyObject *
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000544do_richcompare(PyObject *v, PyObject *w, int op)
Guido van Rossume797ec12001-01-17 15:24:28 +0000545{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000546 richcmpfunc f;
547 PyObject *res;
548 int checked_reverse_op = 0;
Guido van Rossume797ec12001-01-17 15:24:28 +0000549
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000550 if (v->ob_type != w->ob_type &&
551 PyType_IsSubtype(w->ob_type, v->ob_type) &&
552 (f = w->ob_type->tp_richcompare) != NULL) {
553 checked_reverse_op = 1;
554 res = (*f)(w, v, _Py_SwappedOp[op]);
555 if (res != Py_NotImplemented)
556 return res;
557 Py_DECREF(res);
558 }
559 if ((f = v->ob_type->tp_richcompare) != NULL) {
560 res = (*f)(v, w, op);
561 if (res != Py_NotImplemented)
562 return res;
563 Py_DECREF(res);
564 }
565 if (!checked_reverse_op && (f = w->ob_type->tp_richcompare) != NULL) {
566 res = (*f)(w, v, _Py_SwappedOp[op]);
567 if (res != Py_NotImplemented)
568 return res;
569 Py_DECREF(res);
570 }
571 /* If neither object implements it, provide a sensible default
572 for == and !=, but raise an exception for ordering. */
573 switch (op) {
574 case Py_EQ:
575 res = (v == w) ? Py_True : Py_False;
576 break;
577 case Py_NE:
578 res = (v != w) ? Py_True : Py_False;
579 break;
580 default:
581 /* XXX Special-case None so it doesn't show as NoneType() */
582 PyErr_Format(PyExc_TypeError,
583 "unorderable types: %.100s() %s %.100s()",
584 v->ob_type->tp_name,
585 opstrings[op],
586 w->ob_type->tp_name);
587 return NULL;
588 }
589 Py_INCREF(res);
590 return res;
Guido van Rossume797ec12001-01-17 15:24:28 +0000591}
592
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000593/* Perform a rich comparison with object result. This wraps do_richcompare()
594 with a check for NULL arguments and a recursion check. */
Guido van Rossume797ec12001-01-17 15:24:28 +0000595
Guido van Rossume797ec12001-01-17 15:24:28 +0000596PyObject *
597PyObject_RichCompare(PyObject *v, PyObject *w, int op)
598{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000599 PyObject *res;
Guido van Rossume797ec12001-01-17 15:24:28 +0000600
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000601 assert(Py_LT <= op && op <= Py_GE);
602 if (v == NULL || w == NULL) {
603 if (!PyErr_Occurred())
604 PyErr_BadInternalCall();
605 return NULL;
606 }
607 if (Py_EnterRecursiveCall(" in comparison"))
608 return NULL;
609 res = do_richcompare(v, w, op);
610 Py_LeaveRecursiveCall();
611 return res;
Guido van Rossume797ec12001-01-17 15:24:28 +0000612}
613
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000614/* Perform a rich comparison with integer result. This wraps
615 PyObject_RichCompare(), returning -1 for error, 0 for false, 1 for true. */
Guido van Rossume797ec12001-01-17 15:24:28 +0000616int
617PyObject_RichCompareBool(PyObject *v, PyObject *w, int op)
618{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000619 PyObject *res;
620 int ok;
Guido van Rossume797ec12001-01-17 15:24:28 +0000621
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000622 /* Quick result when objects are the same.
623 Guarantees that identity implies equality. */
624 if (v == w) {
625 if (op == Py_EQ)
626 return 1;
627 else if (op == Py_NE)
628 return 0;
629 }
Mark Dickinson4a1f5932008-11-12 23:23:36 +0000630
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000631 res = PyObject_RichCompare(v, w, op);
632 if (res == NULL)
633 return -1;
634 if (PyBool_Check(res))
635 ok = (res == Py_True);
636 else
637 ok = PyObject_IsTrue(res);
638 Py_DECREF(res);
639 return ok;
Guido van Rossume797ec12001-01-17 15:24:28 +0000640}
Fred Drake13634cf2000-06-29 19:17:04 +0000641
642/* Set of hash utility functions to help maintaining the invariant that
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000643 if a==b then hash(a)==hash(b)
Fred Drake13634cf2000-06-29 19:17:04 +0000644
645 All the utility functions (_Py_Hash*()) return "-1" to signify an error.
646*/
647
Mark Dickinsondc787d22010-05-23 13:33:13 +0000648/* For numeric types, the hash of a number x is based on the reduction
649 of x modulo the prime P = 2**_PyHASH_BITS - 1. It's designed so that
650 hash(x) == hash(y) whenever x and y are numerically equal, even if
651 x and y have different types.
652
653 A quick summary of the hashing strategy:
654
655 (1) First define the 'reduction of x modulo P' for any rational
656 number x; this is a standard extension of the usual notion of
657 reduction modulo P for integers. If x == p/q (written in lowest
658 terms), the reduction is interpreted as the reduction of p times
659 the inverse of the reduction of q, all modulo P; if q is exactly
660 divisible by P then define the reduction to be infinity. So we've
661 got a well-defined map
662
663 reduce : { rational numbers } -> { 0, 1, 2, ..., P-1, infinity }.
664
665 (2) Now for a rational number x, define hash(x) by:
666
667 reduce(x) if x >= 0
668 -reduce(-x) if x < 0
669
670 If the result of the reduction is infinity (this is impossible for
671 integers, floats and Decimals) then use the predefined hash value
672 _PyHASH_INF for x >= 0, or -_PyHASH_INF for x < 0, instead.
673 _PyHASH_INF, -_PyHASH_INF and _PyHASH_NAN are also used for the
674 hashes of float and Decimal infinities and nans.
675
676 A selling point for the above strategy is that it makes it possible
677 to compute hashes of decimal and binary floating-point numbers
678 efficiently, even if the exponent of the binary or decimal number
679 is large. The key point is that
680
681 reduce(x * y) == reduce(x) * reduce(y) (modulo _PyHASH_MODULUS)
682
683 provided that {reduce(x), reduce(y)} != {0, infinity}. The reduction of a
684 binary or decimal float is never infinity, since the denominator is a power
685 of 2 (for binary) or a divisor of a power of 10 (for decimal). So we have,
686 for nonnegative x,
687
688 reduce(x * 2**e) == reduce(x) * reduce(2**e) % _PyHASH_MODULUS
689
690 reduce(x * 10**e) == reduce(x) * reduce(10**e) % _PyHASH_MODULUS
691
692 and reduce(10**e) can be computed efficiently by the usual modular
693 exponentiation algorithm. For reduce(2**e) it's even better: since
694 P is of the form 2**n-1, reduce(2**e) is 2**(e mod n), and multiplication
695 by 2**(e mod n) modulo 2**n-1 just amounts to a rotation of bits.
696
697 */
698
Benjamin Peterson8f67d082010-10-17 20:54:53 +0000699Py_hash_t
Fred Drake100814d2000-07-09 15:48:49 +0000700_Py_HashDouble(double v)
Fred Drake13634cf2000-06-29 19:17:04 +0000701{
Mark Dickinsondc787d22010-05-23 13:33:13 +0000702 int e, sign;
703 double m;
Benjamin Peterson8035bc52010-10-23 16:20:50 +0000704 Py_uhash_t x, y;
Tim Peters39dce292000-08-15 03:34:48 +0000705
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000706 if (!Py_IS_FINITE(v)) {
707 if (Py_IS_INFINITY(v))
Mark Dickinsondc787d22010-05-23 13:33:13 +0000708 return v > 0 ? _PyHASH_INF : -_PyHASH_INF;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000709 else
Mark Dickinsondc787d22010-05-23 13:33:13 +0000710 return _PyHASH_NAN;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000711 }
Mark Dickinsondc787d22010-05-23 13:33:13 +0000712
713 m = frexp(v, &e);
714
715 sign = 1;
716 if (m < 0) {
717 sign = -1;
718 m = -m;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000719 }
Mark Dickinsondc787d22010-05-23 13:33:13 +0000720
721 /* process 28 bits at a time; this should work well both for binary
722 and hexadecimal floating point. */
723 x = 0;
724 while (m) {
725 x = ((x << 28) & _PyHASH_MODULUS) | x >> (_PyHASH_BITS - 28);
726 m *= 268435456.0; /* 2**28 */
727 e -= 28;
Benjamin Peterson8035bc52010-10-23 16:20:50 +0000728 y = (Py_uhash_t)m; /* pull out integer part */
Mark Dickinsondc787d22010-05-23 13:33:13 +0000729 m -= y;
730 x += y;
731 if (x >= _PyHASH_MODULUS)
732 x -= _PyHASH_MODULUS;
733 }
734
735 /* adjust for the exponent; first reduce it modulo _PyHASH_BITS */
736 e = e >= 0 ? e % _PyHASH_BITS : _PyHASH_BITS-1-((-1-e) % _PyHASH_BITS);
737 x = ((x << e) & _PyHASH_MODULUS) | x >> (_PyHASH_BITS - e);
738
739 x = x * sign;
Benjamin Peterson8035bc52010-10-23 16:20:50 +0000740 if (x == (Py_uhash_t)-1)
741 x = (Py_uhash_t)-2;
Benjamin Peterson8f67d082010-10-17 20:54:53 +0000742 return (Py_hash_t)x;
Fred Drake13634cf2000-06-29 19:17:04 +0000743}
744
Benjamin Peterson8f67d082010-10-17 20:54:53 +0000745Py_hash_t
Fred Drake100814d2000-07-09 15:48:49 +0000746_Py_HashPointer(void *p)
Fred Drake13634cf2000-06-29 19:17:04 +0000747{
Benjamin Peterson8f67d082010-10-17 20:54:53 +0000748 Py_hash_t x;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000749 size_t y = (size_t)p;
750 /* bottom 3 or 4 bits are likely to be 0; rotate y by 4 to avoid
751 excessive hash collisions for dicts and sets */
752 y = (y >> 4) | (y << (8 * SIZEOF_VOID_P - 4));
Benjamin Peterson8f67d082010-10-17 20:54:53 +0000753 x = (Py_hash_t)y;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000754 if (x == -1)
755 x = -2;
756 return x;
Fred Drake13634cf2000-06-29 19:17:04 +0000757}
758
Benjamin Peterson8f67d082010-10-17 20:54:53 +0000759Py_hash_t
Antoine Pitrouce4a9da2011-11-21 20:46:33 +0100760_Py_HashBytes(unsigned char *p, Py_ssize_t len)
761{
762 Py_uhash_t x;
763 Py_ssize_t i;
764
Georg Brandl2fb477c2012-02-21 00:33:36 +0100765 /*
766 We make the hash of the empty string be 0, rather than using
767 (prefix ^ suffix), since this slightly obfuscates the hash secret
768 */
Benjamin Peterson64ed5762012-04-09 15:04:39 -0400769#ifdef Py_DEBUG
Benjamin Petersond9a35912012-02-21 11:12:14 -0500770 assert(_Py_HashSecret_Initialized);
Benjamin Peterson64ed5762012-04-09 15:04:39 -0400771#endif
Georg Brandl2fb477c2012-02-21 00:33:36 +0100772 if (len == 0) {
773 return 0;
774 }
775 x = (Py_uhash_t) _Py_HashSecret.prefix;
776 x ^= (Py_uhash_t) *p << 7;
Antoine Pitrouce4a9da2011-11-21 20:46:33 +0100777 for (i = 0; i < len; i++)
Gregory P. Smithf5b62a92012-01-14 15:45:13 -0800778 x = (_PyHASH_MULTIPLIER * x) ^ (Py_uhash_t) *p++;
Antoine Pitrouce4a9da2011-11-21 20:46:33 +0100779 x ^= (Py_uhash_t) len;
Georg Brandl2fb477c2012-02-21 00:33:36 +0100780 x ^= (Py_uhash_t) _Py_HashSecret.suffix;
Antoine Pitrouce4a9da2011-11-21 20:46:33 +0100781 if (x == -1)
782 x = -2;
783 return x;
784}
785
786Py_hash_t
Nick Coghland1abd252008-07-15 15:46:38 +0000787PyObject_HashNotImplemented(PyObject *v)
788{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000789 PyErr_Format(PyExc_TypeError, "unhashable type: '%.200s'",
790 Py_TYPE(v)->tp_name);
791 return -1;
Nick Coghland1abd252008-07-15 15:46:38 +0000792}
Fred Drake13634cf2000-06-29 19:17:04 +0000793
Georg Brandl2daf6ae2012-02-20 19:54:16 +0100794_Py_HashSecret_t _Py_HashSecret;
795
Benjamin Peterson8f67d082010-10-17 20:54:53 +0000796Py_hash_t
Fred Drake100814d2000-07-09 15:48:49 +0000797PyObject_Hash(PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000798{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000799 PyTypeObject *tp = Py_TYPE(v);
800 if (tp->tp_hash != NULL)
801 return (*tp->tp_hash)(v);
802 /* To keep to the general practice that inheriting
803 * solely from object in C code should work without
804 * an explicit call to PyType_Ready, we implicitly call
805 * PyType_Ready here and then check the tp_hash slot again
806 */
807 if (tp->tp_dict == NULL) {
808 if (PyType_Ready(tp) < 0)
809 return -1;
810 if (tp->tp_hash != NULL)
811 return (*tp->tp_hash)(v);
812 }
813 /* Otherwise, the object can't be hashed */
814 return PyObject_HashNotImplemented(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000815}
816
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000817PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000818PyObject_GetAttrString(PyObject *v, const char *name)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000819{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000820 PyObject *w, *res;
Guido van Rossumd8eb1b31996-08-09 20:52:03 +0000821
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000822 if (Py_TYPE(v)->tp_getattr != NULL)
823 return (*Py_TYPE(v)->tp_getattr)(v, (char*)name);
824 w = PyUnicode_InternFromString(name);
825 if (w == NULL)
826 return NULL;
827 res = PyObject_GetAttr(v, w);
Victor Stinner59af08f2012-03-22 02:09:08 +0100828 Py_DECREF(w);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000829 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000830}
831
832int
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000833PyObject_HasAttrString(PyObject *v, const char *name)
Guido van Rossumed18fdc1993-07-11 19:55:34 +0000834{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000835 PyObject *res = PyObject_GetAttrString(v, name);
836 if (res != NULL) {
837 Py_DECREF(res);
838 return 1;
839 }
840 PyErr_Clear();
841 return 0;
Guido van Rossumed18fdc1993-07-11 19:55:34 +0000842}
843
844int
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000845PyObject_SetAttrString(PyObject *v, const char *name, PyObject *w)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000846{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000847 PyObject *s;
848 int res;
Guido van Rossumd8eb1b31996-08-09 20:52:03 +0000849
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000850 if (Py_TYPE(v)->tp_setattr != NULL)
851 return (*Py_TYPE(v)->tp_setattr)(v, (char*)name, w);
852 s = PyUnicode_InternFromString(name);
853 if (s == NULL)
854 return -1;
855 res = PyObject_SetAttr(v, s, w);
856 Py_XDECREF(s);
857 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000858}
859
Benjamin Petersonbfebb7b2011-12-15 15:34:02 -0500860int
861_PyObject_IsAbstract(PyObject *obj)
862{
863 int res;
864 PyObject* isabstract;
865 _Py_IDENTIFIER(__isabstractmethod__);
866
867 if (obj == NULL)
868 return 0;
869
870 isabstract = _PyObject_GetAttrId(obj, &PyId___isabstractmethod__);
871 if (isabstract == NULL) {
872 if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
873 PyErr_Clear();
874 return 0;
875 }
876 return -1;
877 }
878 res = PyObject_IsTrue(isabstract);
879 Py_DECREF(isabstract);
880 return res;
881}
882
Guido van Rossum98ff96a1997-05-20 18:34:44 +0000883PyObject *
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200884_PyObject_GetAttrId(PyObject *v, _Py_Identifier *name)
885{
886 PyObject *result;
Martin v. Löwisd10759f2011-11-07 13:00:05 +0100887 PyObject *oname = _PyUnicode_FromId(name); /* borrowed */
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200888 if (!oname)
889 return NULL;
890 result = PyObject_GetAttr(v, oname);
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200891 return result;
892}
893
894int
895_PyObject_HasAttrId(PyObject *v, _Py_Identifier *name)
896{
897 int result;
Martin v. Löwisd10759f2011-11-07 13:00:05 +0100898 PyObject *oname = _PyUnicode_FromId(name); /* borrowed */
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200899 if (!oname)
900 return -1;
901 result = PyObject_HasAttr(v, oname);
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200902 return result;
903}
904
905int
906_PyObject_SetAttrId(PyObject *v, _Py_Identifier *name, PyObject *w)
907{
908 int result;
Martin v. Löwisd10759f2011-11-07 13:00:05 +0100909 PyObject *oname = _PyUnicode_FromId(name); /* borrowed */
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200910 if (!oname)
911 return -1;
912 result = PyObject_SetAttr(v, oname, w);
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200913 return result;
914}
915
916PyObject *
Fred Drake100814d2000-07-09 15:48:49 +0000917PyObject_GetAttr(PyObject *v, PyObject *name)
Guido van Rossum98ff96a1997-05-20 18:34:44 +0000918{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000919 PyTypeObject *tp = Py_TYPE(v);
Tim Peters6d6c1a32001-08-02 04:15:00 +0000920
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000921 if (!PyUnicode_Check(name)) {
922 PyErr_Format(PyExc_TypeError,
923 "attribute name must be string, not '%.200s'",
924 name->ob_type->tp_name);
925 return NULL;
926 }
927 if (tp->tp_getattro != NULL)
928 return (*tp->tp_getattro)(v, name);
929 if (tp->tp_getattr != NULL) {
930 char *name_str = _PyUnicode_AsString(name);
931 if (name_str == NULL)
932 return NULL;
933 return (*tp->tp_getattr)(v, name_str);
934 }
935 PyErr_Format(PyExc_AttributeError,
936 "'%.50s' object has no attribute '%U'",
937 tp->tp_name, name);
938 return NULL;
Guido van Rossum98ff96a1997-05-20 18:34:44 +0000939}
940
941int
Fred Drake100814d2000-07-09 15:48:49 +0000942PyObject_HasAttr(PyObject *v, PyObject *name)
Guido van Rossum98ff96a1997-05-20 18:34:44 +0000943{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000944 PyObject *res = PyObject_GetAttr(v, name);
945 if (res != NULL) {
946 Py_DECREF(res);
947 return 1;
948 }
949 PyErr_Clear();
950 return 0;
Guido van Rossum98ff96a1997-05-20 18:34:44 +0000951}
952
953int
Fred Drake100814d2000-07-09 15:48:49 +0000954PyObject_SetAttr(PyObject *v, PyObject *name, PyObject *value)
Guido van Rossum98ff96a1997-05-20 18:34:44 +0000955{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000956 PyTypeObject *tp = Py_TYPE(v);
957 int err;
Marc-André Lemburge44e5072000-09-18 16:20:57 +0000958
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000959 if (!PyUnicode_Check(name)) {
960 PyErr_Format(PyExc_TypeError,
961 "attribute name must be string, not '%.200s'",
962 name->ob_type->tp_name);
963 return -1;
964 }
965 Py_INCREF(name);
Tim Peters6d6c1a32001-08-02 04:15:00 +0000966
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000967 PyUnicode_InternInPlace(&name);
968 if (tp->tp_setattro != NULL) {
969 err = (*tp->tp_setattro)(v, name, value);
970 Py_DECREF(name);
971 return err;
972 }
973 if (tp->tp_setattr != NULL) {
974 char *name_str = _PyUnicode_AsString(name);
975 if (name_str == NULL)
976 return -1;
977 err = (*tp->tp_setattr)(v, name_str, value);
978 Py_DECREF(name);
979 return err;
980 }
981 Py_DECREF(name);
982 assert(name->ob_refcnt >= 1);
983 if (tp->tp_getattr == NULL && tp->tp_getattro == NULL)
984 PyErr_Format(PyExc_TypeError,
985 "'%.100s' object has no attributes "
986 "(%s .%U)",
987 tp->tp_name,
988 value==NULL ? "del" : "assign to",
989 name);
990 else
991 PyErr_Format(PyExc_TypeError,
992 "'%.100s' object has only read-only attributes "
993 "(%s .%U)",
994 tp->tp_name,
995 value==NULL ? "del" : "assign to",
996 name);
997 return -1;
Tim Peters6d6c1a32001-08-02 04:15:00 +0000998}
999
1000/* Helper to get a pointer to an object's __dict__ slot, if any */
1001
1002PyObject **
1003_PyObject_GetDictPtr(PyObject *obj)
1004{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001005 Py_ssize_t dictoffset;
1006 PyTypeObject *tp = Py_TYPE(obj);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001007
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001008 dictoffset = tp->tp_dictoffset;
1009 if (dictoffset == 0)
1010 return NULL;
1011 if (dictoffset < 0) {
1012 Py_ssize_t tsize;
1013 size_t size;
Guido van Rossum2eb0b872002-03-01 22:24:49 +00001014
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001015 tsize = ((PyVarObject *)obj)->ob_size;
1016 if (tsize < 0)
1017 tsize = -tsize;
1018 size = _PyObject_VAR_SIZE(tp, tsize);
Guido van Rossum2eb0b872002-03-01 22:24:49 +00001019
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001020 dictoffset += (long)size;
1021 assert(dictoffset > 0);
1022 assert(dictoffset % SIZEOF_VOID_P == 0);
1023 }
1024 return (PyObject **) ((char *)obj + dictoffset);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001025}
1026
Tim Peters6d6c1a32001-08-02 04:15:00 +00001027PyObject *
Raymond Hettinger1da1dbf2003-03-17 19:46:11 +00001028PyObject_SelfIter(PyObject *obj)
Raymond Hettinger01538262003-03-17 08:24:35 +00001029{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001030 Py_INCREF(obj);
1031 return obj;
Raymond Hettinger01538262003-03-17 08:24:35 +00001032}
1033
Antoine Pitroua7013882012-04-05 00:04:20 +02001034/* Convenience function to get a builtin from its name */
1035PyObject *
1036_PyObject_GetBuiltin(const char *name)
1037{
1038 PyObject *mod, *attr;
1039 mod = PyImport_ImportModule("builtins");
1040 if (mod == NULL)
1041 return NULL;
1042 attr = PyObject_GetAttrString(mod, name);
1043 Py_DECREF(mod);
1044 return attr;
1045}
1046
Amaury Forgeot d'Arcf343e012009-01-12 23:58:21 +00001047/* Helper used when the __next__ method is removed from a type:
1048 tp_iternext is never NULL and can be safely called without checking
1049 on every iteration.
1050 */
1051
1052PyObject *
1053_PyObject_NextNotImplemented(PyObject *self)
1054{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001055 PyErr_Format(PyExc_TypeError,
1056 "'%.200s' object is not iterable",
1057 Py_TYPE(self)->tp_name);
1058 return NULL;
Amaury Forgeot d'Arcf343e012009-01-12 23:58:21 +00001059}
1060
Michael W. Hudson1593f502004-09-14 17:09:47 +00001061/* Generic GetAttr functions - put these in your tp_[gs]etattro slot */
1062
Raymond Hettinger01538262003-03-17 08:24:35 +00001063PyObject *
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001064_PyObject_GenericGetAttrWithDict(PyObject *obj, PyObject *name, PyObject *dict)
Tim Peters6d6c1a32001-08-02 04:15:00 +00001065{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001066 PyTypeObject *tp = Py_TYPE(obj);
1067 PyObject *descr = NULL;
1068 PyObject *res = NULL;
1069 descrgetfunc f;
1070 Py_ssize_t dictoffset;
1071 PyObject **dictptr;
Tim Peters6d6c1a32001-08-02 04:15:00 +00001072
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001073 if (!PyUnicode_Check(name)){
1074 PyErr_Format(PyExc_TypeError,
1075 "attribute name must be string, not '%.200s'",
1076 name->ob_type->tp_name);
1077 return NULL;
1078 }
1079 else
1080 Py_INCREF(name);
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001081
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001082 if (tp->tp_dict == NULL) {
1083 if (PyType_Ready(tp) < 0)
1084 goto done;
1085 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001086
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001087 descr = _PyType_Lookup(tp, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001088 Py_XINCREF(descr);
Michael W. Hudsonb2c7de42003-08-15 13:07:47 +00001089
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001090 f = NULL;
1091 if (descr != NULL) {
1092 f = descr->ob_type->tp_descr_get;
1093 if (f != NULL && PyDescr_IsData(descr)) {
1094 res = f(descr, obj, (PyObject *)obj->ob_type);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001095 goto done;
1096 }
1097 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001098
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001099 if (dict == NULL) {
1100 /* Inline _PyObject_GetDictPtr */
1101 dictoffset = tp->tp_dictoffset;
1102 if (dictoffset != 0) {
1103 if (dictoffset < 0) {
1104 Py_ssize_t tsize;
1105 size_t size;
Guido van Rossumc66ff442002-08-19 16:50:48 +00001106
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001107 tsize = ((PyVarObject *)obj)->ob_size;
1108 if (tsize < 0)
1109 tsize = -tsize;
1110 size = _PyObject_VAR_SIZE(tp, tsize);
Guido van Rossumc66ff442002-08-19 16:50:48 +00001111
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001112 dictoffset += (long)size;
1113 assert(dictoffset > 0);
1114 assert(dictoffset % SIZEOF_VOID_P == 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001115 }
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001116 dictptr = (PyObject **) ((char *)obj + dictoffset);
1117 dict = *dictptr;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001118 }
1119 }
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001120 if (dict != NULL) {
1121 Py_INCREF(dict);
1122 res = PyDict_GetItem(dict, name);
1123 if (res != NULL) {
1124 Py_INCREF(res);
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001125 Py_DECREF(dict);
1126 goto done;
1127 }
1128 Py_DECREF(dict);
1129 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001130
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001131 if (f != NULL) {
1132 res = f(descr, obj, (PyObject *)Py_TYPE(obj));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001133 goto done;
1134 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001135
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001136 if (descr != NULL) {
1137 res = descr;
Victor Stinner2d01dc02012-03-09 00:44:13 +01001138 descr = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001139 goto done;
1140 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001141
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001142 PyErr_Format(PyExc_AttributeError,
1143 "'%.50s' object has no attribute '%U'",
1144 tp->tp_name, name);
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001145 done:
Victor Stinner2d01dc02012-03-09 00:44:13 +01001146 Py_XDECREF(descr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001147 Py_DECREF(name);
1148 return res;
Tim Peters6d6c1a32001-08-02 04:15:00 +00001149}
1150
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001151PyObject *
1152PyObject_GenericGetAttr(PyObject *obj, PyObject *name)
1153{
1154 return _PyObject_GenericGetAttrWithDict(obj, name, NULL);
1155}
1156
Tim Peters6d6c1a32001-08-02 04:15:00 +00001157int
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001158_PyObject_GenericSetAttrWithDict(PyObject *obj, PyObject *name,
1159 PyObject *value, PyObject *dict)
Tim Peters6d6c1a32001-08-02 04:15:00 +00001160{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001161 PyTypeObject *tp = Py_TYPE(obj);
1162 PyObject *descr;
1163 descrsetfunc f;
1164 PyObject **dictptr;
1165 int res = -1;
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001166
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001167 if (!PyUnicode_Check(name)){
1168 PyErr_Format(PyExc_TypeError,
1169 "attribute name must be string, not '%.200s'",
1170 name->ob_type->tp_name);
1171 return -1;
1172 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001173
Benjamin Peterson74529ad2012-03-09 07:25:32 -08001174 if (tp->tp_dict == NULL && PyType_Ready(tp) < 0)
1175 return -1;
1176
1177 Py_INCREF(name);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001178
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001179 descr = _PyType_Lookup(tp, name);
Victor Stinner2d01dc02012-03-09 00:44:13 +01001180 Py_XINCREF(descr);
1181
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001182 f = NULL;
1183 if (descr != NULL) {
1184 f = descr->ob_type->tp_descr_set;
1185 if (f != NULL && PyDescr_IsData(descr)) {
1186 res = f(descr, obj, value);
1187 goto done;
1188 }
1189 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001190
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001191 if (dict == NULL) {
1192 dictptr = _PyObject_GetDictPtr(obj);
1193 if (dictptr != NULL) {
Benjamin Peterson7d95e402012-04-23 11:24:50 -04001194 res = _PyObjectDict_SetItem(Py_TYPE(obj), dictptr, name, value);
1195 if (res < 0 && PyErr_ExceptionMatches(PyExc_KeyError))
1196 PyErr_SetObject(PyExc_AttributeError, name);
1197 goto done;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001198 }
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001199 }
1200 if (dict != NULL) {
1201 Py_INCREF(dict);
1202 if (value == NULL)
1203 res = PyDict_DelItem(dict, name);
1204 else
1205 res = PyDict_SetItem(dict, name, value);
Benjamin Peterson74529ad2012-03-09 07:25:32 -08001206 Py_DECREF(dict);
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001207 if (res < 0 && PyErr_ExceptionMatches(PyExc_KeyError))
1208 PyErr_SetObject(PyExc_AttributeError, name);
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001209 goto done;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001210 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001211
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001212 if (f != NULL) {
1213 res = f(descr, obj, value);
1214 goto done;
1215 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001216
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001217 if (descr == NULL) {
1218 PyErr_Format(PyExc_AttributeError,
1219 "'%.100s' object has no attribute '%U'",
1220 tp->tp_name, name);
1221 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 attribute '%U' is read-only",
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;
Guido van Rossum98ff96a1997-05-20 18:34:44 +00001231}
1232
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001233int
1234PyObject_GenericSetAttr(PyObject *obj, PyObject *name, PyObject *value)
1235{
1236 return _PyObject_GenericSetAttrWithDict(obj, name, value, NULL);
1237}
1238
Benjamin Peterson8eb12692012-02-19 19:59:10 -05001239int
1240PyObject_GenericSetDict(PyObject *obj, PyObject *value, void *context)
1241{
1242 PyObject *dict, **dictptr = _PyObject_GetDictPtr(obj);
1243 if (dictptr == NULL) {
1244 PyErr_SetString(PyExc_AttributeError,
1245 "This object has no __dict__");
1246 return -1;
1247 }
1248 if (value == NULL) {
1249 PyErr_SetString(PyExc_TypeError, "cannot delete __dict__");
1250 return -1;
1251 }
1252 if (!PyDict_Check(value)) {
1253 PyErr_Format(PyExc_TypeError,
1254 "__dict__ must be set to a dictionary, "
1255 "not a '%.200s'", Py_TYPE(value)->tp_name);
1256 return -1;
1257 }
1258 dict = *dictptr;
1259 Py_XINCREF(value);
1260 *dictptr = value;
1261 Py_XDECREF(dict);
1262 return 0;
1263}
1264
Antoine Pitrou1a9a9d52010-08-28 18:17:03 +00001265
Guido van Rossum6ac258d1993-05-12 08:24:20 +00001266/* Test a value used as condition, e.g., in a for or if statement.
1267 Return -1 if an error occurred */
1268
1269int
Fred Drake100814d2000-07-09 15:48:49 +00001270PyObject_IsTrue(PyObject *v)
Guido van Rossum6ac258d1993-05-12 08:24:20 +00001271{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001272 Py_ssize_t res;
1273 if (v == Py_True)
1274 return 1;
1275 if (v == Py_False)
1276 return 0;
1277 if (v == Py_None)
1278 return 0;
1279 else if (v->ob_type->tp_as_number != NULL &&
1280 v->ob_type->tp_as_number->nb_bool != NULL)
1281 res = (*v->ob_type->tp_as_number->nb_bool)(v);
1282 else if (v->ob_type->tp_as_mapping != NULL &&
1283 v->ob_type->tp_as_mapping->mp_length != NULL)
1284 res = (*v->ob_type->tp_as_mapping->mp_length)(v);
1285 else if (v->ob_type->tp_as_sequence != NULL &&
1286 v->ob_type->tp_as_sequence->sq_length != NULL)
1287 res = (*v->ob_type->tp_as_sequence->sq_length)(v);
1288 else
1289 return 1;
1290 /* if it is negative, it should be either -1 or -2 */
1291 return (res > 0) ? 1 : Py_SAFE_DOWNCAST(res, Py_ssize_t, int);
Guido van Rossum6ac258d1993-05-12 08:24:20 +00001292}
1293
Tim Peters803526b2002-07-07 05:13:56 +00001294/* equivalent of 'not v'
Guido van Rossumc3d3f961998-04-09 17:53:59 +00001295 Return -1 if an error occurred */
1296
1297int
Fred Drake100814d2000-07-09 15:48:49 +00001298PyObject_Not(PyObject *v)
Guido van Rossumc3d3f961998-04-09 17:53:59 +00001299{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001300 int res;
1301 res = PyObject_IsTrue(v);
1302 if (res < 0)
1303 return res;
1304 return res == 0;
Guido van Rossumc3d3f961998-04-09 17:53:59 +00001305}
1306
Guido van Rossum49b11fe1995-01-26 00:38:22 +00001307/* Test whether an object can be called */
1308
1309int
Fred Drake100814d2000-07-09 15:48:49 +00001310PyCallable_Check(PyObject *x)
Guido van Rossum49b11fe1995-01-26 00:38:22 +00001311{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001312 if (x == NULL)
1313 return 0;
1314 return x->ob_type->tp_call != NULL;
Guido van Rossum49b11fe1995-01-26 00:38:22 +00001315}
1316
Tim Peters7eea37e2001-09-04 22:08:56 +00001317
Georg Brandle32b4222007-03-10 22:13:27 +00001318/* Helper for PyObject_Dir without arguments: returns the local scope. */
1319static PyObject *
Guido van Rossumad7d8d12007-04-13 01:39:34 +00001320_dir_locals(void)
Tim Peters305b5852001-09-17 02:38:46 +00001321{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001322 PyObject *names;
1323 PyObject *locals = PyEval_GetLocals();
Tim Peters305b5852001-09-17 02:38:46 +00001324
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001325 if (locals == NULL) {
1326 PyErr_SetString(PyExc_SystemError, "frame does not exist");
1327 return NULL;
1328 }
Tim Peters305b5852001-09-17 02:38:46 +00001329
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001330 names = PyMapping_Keys(locals);
1331 if (!names)
1332 return NULL;
1333 if (!PyList_Check(names)) {
1334 PyErr_Format(PyExc_TypeError,
1335 "dir(): expected keys() of locals to be a list, "
1336 "not '%.200s'", Py_TYPE(names)->tp_name);
1337 Py_DECREF(names);
1338 return NULL;
1339 }
Benjamin Peterson3bbb7222011-06-11 16:12:08 -05001340 if (PyList_Sort(names)) {
1341 Py_DECREF(names);
1342 return NULL;
1343 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001344 /* the locals don't need to be DECREF'd */
1345 return names;
Georg Brandle32b4222007-03-10 22:13:27 +00001346}
1347
Benjamin Peterson82b00c12011-05-24 11:09:06 -05001348/* Helper for PyObject_Dir: object introspection. */
Georg Brandle32b4222007-03-10 22:13:27 +00001349static PyObject *
1350_dir_object(PyObject *obj)
1351{
Benjamin Peterson3bbb7222011-06-11 16:12:08 -05001352 PyObject *result, *sorted;
Benjamin Petersonce798522012-01-22 11:24:29 -05001353 _Py_IDENTIFIER(__dir__);
1354 PyObject *dirfunc = _PyObject_LookupSpecial(obj, &PyId___dir__);
Georg Brandle32b4222007-03-10 22:13:27 +00001355
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001356 assert(obj);
1357 if (dirfunc == NULL) {
Benjamin Peterson82b00c12011-05-24 11:09:06 -05001358 if (!PyErr_Occurred())
1359 PyErr_SetString(PyExc_TypeError, "object does not provide __dir__");
1360 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001361 }
Benjamin Peterson82b00c12011-05-24 11:09:06 -05001362 /* use __dir__ */
1363 result = PyObject_CallFunctionObjArgs(dirfunc, NULL);
1364 Py_DECREF(dirfunc);
1365 if (result == NULL)
1366 return NULL;
Benjamin Peterson3bbb7222011-06-11 16:12:08 -05001367 /* return sorted(result) */
1368 sorted = PySequence_List(result);
1369 Py_DECREF(result);
1370 if (sorted == NULL)
1371 return NULL;
1372 if (PyList_Sort(sorted)) {
1373 Py_DECREF(sorted);
1374 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001375 }
Benjamin Peterson3bbb7222011-06-11 16:12:08 -05001376 return sorted;
Georg Brandle32b4222007-03-10 22:13:27 +00001377}
1378
1379/* Implementation of dir() -- if obj is NULL, returns the names in the current
1380 (local) scope. Otherwise, performs introspection of the object: returns a
1381 sorted list of attribute names (supposedly) accessible from the object
1382*/
1383PyObject *
1384PyObject_Dir(PyObject *obj)
1385{
Benjamin Peterson3bbb7222011-06-11 16:12:08 -05001386 return (obj == NULL) ? _dir_locals() : _dir_object(obj);
Tim Peters7eea37e2001-09-04 22:08:56 +00001387}
Guido van Rossum49b11fe1995-01-26 00:38:22 +00001388
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001389/*
Raymond Hettinger66d2be82011-07-28 09:55:13 -07001390None is a non-NULL undefined value.
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001391There is (and should be!) no way to create other objects of this type,
Guido van Rossum3f5da241990-12-20 15:06:42 +00001392so there is exactly one (which is indestructible, by the way).
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001393*/
1394
Guido van Rossum0c182a11992-03-27 17:26:13 +00001395/* ARGSUSED */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001396static PyObject *
Fred Drake100814d2000-07-09 15:48:49 +00001397none_repr(PyObject *op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001398{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001399 return PyUnicode_FromString("None");
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001400}
1401
Barry Warsaw9bf16442001-01-23 16:24:35 +00001402/* ARGUSED */
1403static void
Tim Peters803526b2002-07-07 05:13:56 +00001404none_dealloc(PyObject* ignore)
Barry Warsaw9bf16442001-01-23 16:24:35 +00001405{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001406 /* This should never get called, but we also don't want to SEGV if
1407 * we accidentally decref None out of existence.
1408 */
1409 Py_FatalError("deallocating None");
Barry Warsaw9bf16442001-01-23 16:24:35 +00001410}
1411
Benjamin Petersonc4607ae2011-07-29 18:19:43 -05001412static PyObject *
1413none_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
1414{
1415 if (PyTuple_GET_SIZE(args) || (kwargs && PyDict_Size(kwargs))) {
1416 PyErr_SetString(PyExc_TypeError, "NoneType takes no arguments");
1417 return NULL;
1418 }
1419 Py_RETURN_NONE;
1420}
1421
Raymond Hettinger66d2be82011-07-28 09:55:13 -07001422static int
1423none_bool(PyObject *v)
1424{
1425 return 0;
1426}
1427
1428static PyNumberMethods none_as_number = {
1429 0, /* nb_add */
1430 0, /* nb_subtract */
1431 0, /* nb_multiply */
1432 0, /* nb_remainder */
1433 0, /* nb_divmod */
1434 0, /* nb_power */
1435 0, /* nb_negative */
1436 0, /* nb_positive */
1437 0, /* nb_absolute */
1438 (inquiry)none_bool, /* nb_bool */
1439 0, /* nb_invert */
1440 0, /* nb_lshift */
1441 0, /* nb_rshift */
1442 0, /* nb_and */
1443 0, /* nb_xor */
1444 0, /* nb_or */
1445 0, /* nb_int */
1446 0, /* nb_reserved */
1447 0, /* nb_float */
1448 0, /* nb_inplace_add */
1449 0, /* nb_inplace_subtract */
1450 0, /* nb_inplace_multiply */
1451 0, /* nb_inplace_remainder */
1452 0, /* nb_inplace_power */
1453 0, /* nb_inplace_lshift */
1454 0, /* nb_inplace_rshift */
1455 0, /* nb_inplace_and */
1456 0, /* nb_inplace_xor */
1457 0, /* nb_inplace_or */
1458 0, /* nb_floor_divide */
1459 0, /* nb_true_divide */
1460 0, /* nb_inplace_floor_divide */
1461 0, /* nb_inplace_true_divide */
1462 0, /* nb_index */
1463};
Barry Warsaw9bf16442001-01-23 16:24:35 +00001464
Guido van Rossumba21a492001-08-16 08:17:26 +00001465static PyTypeObject PyNone_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001466 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1467 "NoneType",
1468 0,
1469 0,
1470 none_dealloc, /*tp_dealloc*/ /*never called*/
1471 0, /*tp_print*/
1472 0, /*tp_getattr*/
1473 0, /*tp_setattr*/
1474 0, /*tp_reserved*/
1475 none_repr, /*tp_repr*/
Raymond Hettinger66d2be82011-07-28 09:55:13 -07001476 &none_as_number, /*tp_as_number*/
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001477 0, /*tp_as_sequence*/
1478 0, /*tp_as_mapping*/
1479 0, /*tp_hash */
Benjamin Petersonc4607ae2011-07-29 18:19:43 -05001480 0, /*tp_call */
1481 0, /*tp_str */
1482 0, /*tp_getattro */
1483 0, /*tp_setattro */
1484 0, /*tp_as_buffer */
1485 Py_TPFLAGS_DEFAULT, /*tp_flags */
1486 0, /*tp_doc */
1487 0, /*tp_traverse */
1488 0, /*tp_clear */
1489 0, /*tp_richcompare */
1490 0, /*tp_weaklistoffset */
1491 0, /*tp_iter */
1492 0, /*tp_iternext */
1493 0, /*tp_methods */
1494 0, /*tp_members */
1495 0, /*tp_getset */
1496 0, /*tp_base */
1497 0, /*tp_dict */
1498 0, /*tp_descr_get */
1499 0, /*tp_descr_set */
1500 0, /*tp_dictoffset */
1501 0, /*tp_init */
1502 0, /*tp_alloc */
1503 none_new, /*tp_new */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001504};
1505
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001506PyObject _Py_NoneStruct = {
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00001507 _PyObject_EXTRA_INIT
1508 1, &PyNone_Type
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001509};
1510
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +00001511/* NotImplemented is an object that can be used to signal that an
1512 operation is not implemented for the given type combination. */
1513
1514static PyObject *
1515NotImplemented_repr(PyObject *op)
1516{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001517 return PyUnicode_FromString("NotImplemented");
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +00001518}
1519
Benjamin Peterson18d7d7a2011-07-29 18:27:44 -05001520static PyObject *
1521notimplemented_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
1522{
1523 if (PyTuple_GET_SIZE(args) || (kwargs && PyDict_Size(kwargs))) {
1524 PyErr_SetString(PyExc_TypeError, "NotImplementedType takes no arguments");
1525 return NULL;
1526 }
Brian Curtindfc80e32011-08-10 20:28:54 -05001527 Py_RETURN_NOTIMPLEMENTED;
Benjamin Peterson18d7d7a2011-07-29 18:27:44 -05001528}
1529
Armin Ronacher226b1db2012-10-06 14:28:58 +02001530static void
1531notimplemented_dealloc(PyObject* ignore)
1532{
1533 /* This should never get called, but we also don't want to SEGV if
1534 * we accidentally decref NotImplemented out of existence.
1535 */
1536 Py_FatalError("deallocating NotImplemented");
1537}
1538
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +00001539static PyTypeObject PyNotImplemented_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001540 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1541 "NotImplementedType",
1542 0,
1543 0,
Armin Ronacher226b1db2012-10-06 14:28:58 +02001544 notimplemented_dealloc, /*tp_dealloc*/ /*never called*/
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001545 0, /*tp_print*/
1546 0, /*tp_getattr*/
1547 0, /*tp_setattr*/
1548 0, /*tp_reserved*/
1549 NotImplemented_repr, /*tp_repr*/
1550 0, /*tp_as_number*/
1551 0, /*tp_as_sequence*/
1552 0, /*tp_as_mapping*/
1553 0, /*tp_hash */
Benjamin Peterson18d7d7a2011-07-29 18:27:44 -05001554 0, /*tp_call */
1555 0, /*tp_str */
1556 0, /*tp_getattro */
1557 0, /*tp_setattro */
1558 0, /*tp_as_buffer */
1559 Py_TPFLAGS_DEFAULT, /*tp_flags */
1560 0, /*tp_doc */
1561 0, /*tp_traverse */
1562 0, /*tp_clear */
1563 0, /*tp_richcompare */
1564 0, /*tp_weaklistoffset */
1565 0, /*tp_iter */
1566 0, /*tp_iternext */
1567 0, /*tp_methods */
1568 0, /*tp_members */
1569 0, /*tp_getset */
1570 0, /*tp_base */
1571 0, /*tp_dict */
1572 0, /*tp_descr_get */
1573 0, /*tp_descr_set */
1574 0, /*tp_dictoffset */
1575 0, /*tp_init */
1576 0, /*tp_alloc */
1577 notimplemented_new, /*tp_new */
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +00001578};
1579
1580PyObject _Py_NotImplementedStruct = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001581 _PyObject_EXTRA_INIT
1582 1, &PyNotImplemented_Type
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +00001583};
1584
Guido van Rossumba21a492001-08-16 08:17:26 +00001585void
1586_Py_ReadyTypes(void)
1587{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001588 if (PyType_Ready(&PyType_Type) < 0)
1589 Py_FatalError("Can't initialize type type");
Guido van Rossumba21a492001-08-16 08:17:26 +00001590
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001591 if (PyType_Ready(&_PyWeakref_RefType) < 0)
1592 Py_FatalError("Can't initialize weakref type");
Fred Drake0a4dd392004-07-02 18:57:45 +00001593
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001594 if (PyType_Ready(&_PyWeakref_CallableProxyType) < 0)
1595 Py_FatalError("Can't initialize callable weakref proxy type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001596
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001597 if (PyType_Ready(&_PyWeakref_ProxyType) < 0)
1598 Py_FatalError("Can't initialize weakref proxy type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001599
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001600 if (PyType_Ready(&PyBool_Type) < 0)
1601 Py_FatalError("Can't initialize bool type");
Guido van Rossum77f6a652002-04-03 22:41:51 +00001602
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001603 if (PyType_Ready(&PyByteArray_Type) < 0)
1604 Py_FatalError("Can't initialize bytearray type");
Guido van Rossum4dfe8a12006-04-22 23:28:04 +00001605
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001606 if (PyType_Ready(&PyBytes_Type) < 0)
1607 Py_FatalError("Can't initialize 'str'");
Guido van Rossumcacfc072002-05-24 19:01:59 +00001608
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001609 if (PyType_Ready(&PyList_Type) < 0)
1610 Py_FatalError("Can't initialize list type");
Guido van Rossumba21a492001-08-16 08:17:26 +00001611
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001612 if (PyType_Ready(&PyNone_Type) < 0)
1613 Py_FatalError("Can't initialize None type");
Guido van Rossumba21a492001-08-16 08:17:26 +00001614
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001615 if (PyType_Ready(&PyNotImplemented_Type) < 0)
1616 Py_FatalError("Can't initialize NotImplemented type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001617
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001618 if (PyType_Ready(&PyTraceBack_Type) < 0)
1619 Py_FatalError("Can't initialize traceback type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001620
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001621 if (PyType_Ready(&PySuper_Type) < 0)
1622 Py_FatalError("Can't initialize super type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001623
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001624 if (PyType_Ready(&PyBaseObject_Type) < 0)
1625 Py_FatalError("Can't initialize object type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001626
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001627 if (PyType_Ready(&PyRange_Type) < 0)
1628 Py_FatalError("Can't initialize range type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001629
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001630 if (PyType_Ready(&PyDict_Type) < 0)
1631 Py_FatalError("Can't initialize dict type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001632
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001633 if (PyType_Ready(&PySet_Type) < 0)
1634 Py_FatalError("Can't initialize set type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001635
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001636 if (PyType_Ready(&PyUnicode_Type) < 0)
1637 Py_FatalError("Can't initialize str type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001638
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001639 if (PyType_Ready(&PySlice_Type) < 0)
1640 Py_FatalError("Can't initialize slice type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001641
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001642 if (PyType_Ready(&PyStaticMethod_Type) < 0)
1643 Py_FatalError("Can't initialize static method type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001644
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001645 if (PyType_Ready(&PyComplex_Type) < 0)
1646 Py_FatalError("Can't initialize complex type");
Skip Montanaroba1e0f42009-10-18 14:25:35 +00001647
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001648 if (PyType_Ready(&PyFloat_Type) < 0)
1649 Py_FatalError("Can't initialize float type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001650
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001651 if (PyType_Ready(&PyLong_Type) < 0)
1652 Py_FatalError("Can't initialize int type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001653
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001654 if (PyType_Ready(&PyFrozenSet_Type) < 0)
1655 Py_FatalError("Can't initialize frozenset type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001656
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001657 if (PyType_Ready(&PyProperty_Type) < 0)
1658 Py_FatalError("Can't initialize property type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001659
Stefan Krah9a2d99e2012-02-25 12:24:21 +01001660 if (PyType_Ready(&_PyManagedBuffer_Type) < 0)
1661 Py_FatalError("Can't initialize managed buffer type");
1662
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001663 if (PyType_Ready(&PyMemoryView_Type) < 0)
1664 Py_FatalError("Can't initialize memoryview type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001665
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001666 if (PyType_Ready(&PyTuple_Type) < 0)
1667 Py_FatalError("Can't initialize tuple type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001668
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001669 if (PyType_Ready(&PyEnum_Type) < 0)
1670 Py_FatalError("Can't initialize enumerate type");
Benjamin Petersonae937c02009-04-18 20:54:08 +00001671
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001672 if (PyType_Ready(&PyReversed_Type) < 0)
1673 Py_FatalError("Can't initialize reversed type");
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001674
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001675 if (PyType_Ready(&PyStdPrinter_Type) < 0)
1676 Py_FatalError("Can't initialize StdPrinter");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001677
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001678 if (PyType_Ready(&PyCode_Type) < 0)
1679 Py_FatalError("Can't initialize code type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001680
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001681 if (PyType_Ready(&PyFrame_Type) < 0)
1682 Py_FatalError("Can't initialize frame type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001683
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001684 if (PyType_Ready(&PyCFunction_Type) < 0)
1685 Py_FatalError("Can't initialize builtin function type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001686
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001687 if (PyType_Ready(&PyMethod_Type) < 0)
1688 Py_FatalError("Can't initialize method type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001689
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001690 if (PyType_Ready(&PyFunction_Type) < 0)
1691 Py_FatalError("Can't initialize function type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001692
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001693 if (PyType_Ready(&PyDictProxy_Type) < 0)
1694 Py_FatalError("Can't initialize dict proxy type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001695
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001696 if (PyType_Ready(&PyGen_Type) < 0)
1697 Py_FatalError("Can't initialize generator type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001698
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001699 if (PyType_Ready(&PyGetSetDescr_Type) < 0)
1700 Py_FatalError("Can't initialize get-set descriptor type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001701
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001702 if (PyType_Ready(&PyWrapperDescr_Type) < 0)
1703 Py_FatalError("Can't initialize wrapper type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001704
Benjamin Petersoneff61f62011-09-01 16:32:31 -04001705 if (PyType_Ready(&_PyMethodWrapper_Type) < 0)
1706 Py_FatalError("Can't initialize method wrapper type");
1707
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001708 if (PyType_Ready(&PyEllipsis_Type) < 0)
1709 Py_FatalError("Can't initialize ellipsis type");
Benjamin Petersonfd838e62009-04-20 02:09:13 +00001710
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001711 if (PyType_Ready(&PyMemberDescr_Type) < 0)
1712 Py_FatalError("Can't initialize member descriptor type");
Benjamin Peterson8bc5b682009-05-09 18:10:51 +00001713
Barry Warsaw409da152012-06-03 16:18:47 -04001714 if (PyType_Ready(&_PyNamespace_Type) < 0)
1715 Py_FatalError("Can't initialize namespace type");
Benjamin Petersone8ea97f2012-10-30 23:27:52 -04001716
Benjamin Petersonc4311282012-10-30 23:21:10 -04001717 if (PyType_Ready(&PyCapsule_Type) < 0)
1718 Py_FatalError("Can't initialize capsule type");
1719
1720 if (PyType_Ready(&PyLongRangeIter_Type) < 0)
1721 Py_FatalError("Can't initialize long range iterator type");
1722
1723 if (PyType_Ready(&PyCell_Type) < 0)
1724 Py_FatalError("Can't initialize cell type");
1725
1726 if (PyType_Ready(&PyInstanceMethod_Type) < 0)
1727 Py_FatalError("Can't initialize instance method type");
1728
1729 if (PyType_Ready(&PyClassMethodDescr_Type) < 0)
1730 Py_FatalError("Can't initialize class method descr type");
1731
1732 if (PyType_Ready(&PyMethodDescr_Type) < 0)
1733 Py_FatalError("Can't initialize method descr type");
1734
1735 if (PyType_Ready(&PyCallIter_Type) < 0)
1736 Py_FatalError("Can't initialize call iter type");
1737
1738 if (PyType_Ready(&PySeqIter_Type) < 0)
1739 Py_FatalError("Can't initialize sequence iterator type");
Guido van Rossumba21a492001-08-16 08:17:26 +00001740}
1741
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001742
Guido van Rossum84a90321996-05-22 16:34:47 +00001743#ifdef Py_TRACE_REFS
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001744
Guido van Rossumaacdc9d1996-08-12 21:32:12 +00001745void
Fred Drake100814d2000-07-09 15:48:49 +00001746_Py_NewReference(PyObject *op)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001747{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001748 _Py_INC_REFTOTAL;
1749 op->ob_refcnt = 1;
1750 _Py_AddToAllObjects(op, 1);
1751 _Py_INC_TPALLOCS(op);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001752}
1753
Guido van Rossumaacdc9d1996-08-12 21:32:12 +00001754void
Fred Drake100814d2000-07-09 15:48:49 +00001755_Py_ForgetReference(register PyObject *op)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001756{
Guido van Rossumbffd6832000-01-20 22:32:56 +00001757#ifdef SLOW_UNREF_CHECK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001758 register PyObject *p;
Guido van Rossumbffd6832000-01-20 22:32:56 +00001759#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001760 if (op->ob_refcnt < 0)
1761 Py_FatalError("UNREF negative refcnt");
1762 if (op == &refchain ||
1763 op->_ob_prev->_ob_next != op || op->_ob_next->_ob_prev != op) {
1764 fprintf(stderr, "* ob\n");
1765 _PyObject_Dump(op);
1766 fprintf(stderr, "* op->_ob_prev->_ob_next\n");
1767 _PyObject_Dump(op->_ob_prev->_ob_next);
1768 fprintf(stderr, "* op->_ob_next->_ob_prev\n");
1769 _PyObject_Dump(op->_ob_next->_ob_prev);
1770 Py_FatalError("UNREF invalid object");
1771 }
Guido van Rossum2e8f6141992-09-03 20:32:55 +00001772#ifdef SLOW_UNREF_CHECK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001773 for (p = refchain._ob_next; p != &refchain; p = p->_ob_next) {
1774 if (p == op)
1775 break;
1776 }
1777 if (p == &refchain) /* Not found */
1778 Py_FatalError("UNREF unknown object");
Guido van Rossum2e8f6141992-09-03 20:32:55 +00001779#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001780 op->_ob_next->_ob_prev = op->_ob_prev;
1781 op->_ob_prev->_ob_next = op->_ob_next;
1782 op->_ob_next = op->_ob_prev = NULL;
1783 _Py_INC_TPFREES(op);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001784}
1785
Guido van Rossumaacdc9d1996-08-12 21:32:12 +00001786void
Fred Drake100814d2000-07-09 15:48:49 +00001787_Py_Dealloc(PyObject *op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001788{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001789 destructor dealloc = Py_TYPE(op)->tp_dealloc;
1790 _Py_ForgetReference(op);
1791 (*dealloc)(op);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001792}
1793
Tim Peters269b2a62003-04-17 19:52:29 +00001794/* Print all live objects. Because PyObject_Print is called, the
1795 * interpreter must be in a healthy state.
1796 */
Guido van Rossumaacdc9d1996-08-12 21:32:12 +00001797void
Fred Drake100814d2000-07-09 15:48:49 +00001798_Py_PrintReferences(FILE *fp)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001799{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001800 PyObject *op;
1801 fprintf(fp, "Remaining objects:\n");
1802 for (op = refchain._ob_next; op != &refchain; op = op->_ob_next) {
1803 fprintf(fp, "%p [%" PY_FORMAT_SIZE_T "d] ", op, op->ob_refcnt);
1804 if (PyObject_Print(op, fp, 0) != 0)
1805 PyErr_Clear();
1806 putc('\n', fp);
1807 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001808}
1809
Tim Peters269b2a62003-04-17 19:52:29 +00001810/* Print the addresses of all live objects. Unlike _Py_PrintReferences, this
1811 * doesn't make any calls to the Python C API, so is always safe to call.
1812 */
1813void
1814_Py_PrintReferenceAddresses(FILE *fp)
1815{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001816 PyObject *op;
1817 fprintf(fp, "Remaining object addresses:\n");
1818 for (op = refchain._ob_next; op != &refchain; op = op->_ob_next)
1819 fprintf(fp, "%p [%" PY_FORMAT_SIZE_T "d] %s\n", op,
1820 op->ob_refcnt, Py_TYPE(op)->tp_name);
Tim Peters269b2a62003-04-17 19:52:29 +00001821}
1822
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +00001823PyObject *
Fred Drake100814d2000-07-09 15:48:49 +00001824_Py_GetObjects(PyObject *self, PyObject *args)
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +00001825{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001826 int i, n;
1827 PyObject *t = NULL;
1828 PyObject *res, *op;
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +00001829
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001830 if (!PyArg_ParseTuple(args, "i|O", &n, &t))
1831 return NULL;
1832 op = refchain._ob_next;
1833 res = PyList_New(0);
1834 if (res == NULL)
1835 return NULL;
1836 for (i = 0; (n == 0 || i < n) && op != &refchain; i++) {
1837 while (op == self || op == args || op == res || op == t ||
1838 (t != NULL && Py_TYPE(op) != (PyTypeObject *) t)) {
1839 op = op->_ob_next;
1840 if (op == &refchain)
1841 return res;
1842 }
1843 if (PyList_Append(res, op) < 0) {
1844 Py_DECREF(res);
1845 return NULL;
1846 }
1847 op = op->_ob_next;
1848 }
1849 return res;
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +00001850}
1851
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001852#endif
Guido van Rossum97ead3f1996-01-12 01:24:09 +00001853
Benjamin Petersonb173f782009-05-05 22:31:58 +00001854/* Hack to force loading of pycapsule.o */
1855PyTypeObject *_PyCapsule_hack = &PyCapsule_Type;
1856
1857
Guido van Rossum84a90321996-05-22 16:34:47 +00001858/* Hack to force loading of abstract.o */
Martin v. Löwis18e16552006-02-15 17:27:45 +00001859Py_ssize_t (*_Py_abstract_hack)(PyObject *) = PyObject_Size;
Guido van Rossume09fb551997-08-05 02:04:34 +00001860
1861
Andrew M. Kuchling1582a3a2000-08-16 12:27:23 +00001862/* Python's malloc wrappers (see pymem.h) */
Guido van Rossume09fb551997-08-05 02:04:34 +00001863
Thomas Wouters334fb892000-07-25 12:56:38 +00001864void *
Fred Drake100814d2000-07-09 15:48:49 +00001865PyMem_Malloc(size_t nbytes)
Guido van Rossume09fb551997-08-05 02:04:34 +00001866{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001867 return PyMem_MALLOC(nbytes);
Guido van Rossume09fb551997-08-05 02:04:34 +00001868}
1869
Thomas Wouters334fb892000-07-25 12:56:38 +00001870void *
1871PyMem_Realloc(void *p, size_t nbytes)
Guido van Rossume09fb551997-08-05 02:04:34 +00001872{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001873 return PyMem_REALLOC(p, nbytes);
Guido van Rossume09fb551997-08-05 02:04:34 +00001874}
1875
1876void
Thomas Wouters334fb892000-07-25 12:56:38 +00001877PyMem_Free(void *p)
Guido van Rossume09fb551997-08-05 02:04:34 +00001878{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001879 PyMem_FREE(p);
Guido van Rossumb18618d2000-05-03 23:44:39 +00001880}
1881
David Malcolm49526f42012-06-22 14:55:41 -04001882void
1883_PyObject_DebugTypeStats(FILE *out)
1884{
1885 _PyCFunction_DebugMallocStats(out);
1886 _PyDict_DebugMallocStats(out);
1887 _PyFloat_DebugMallocStats(out);
1888 _PyFrame_DebugMallocStats(out);
1889 _PyList_DebugMallocStats(out);
1890 _PyMethod_DebugMallocStats(out);
1891 _PySet_DebugMallocStats(out);
1892 _PyTuple_DebugMallocStats(out);
1893}
Guido van Rossumb18618d2000-05-03 23:44:39 +00001894
Guido van Rossum86610361998-04-10 22:32:46 +00001895/* These methods are used to control infinite recursion in repr, str, print,
1896 etc. Container objects that may recursively contain themselves,
1897 e.g. builtin dictionaries and lists, should used Py_ReprEnter() and
1898 Py_ReprLeave() to avoid infinite recursion.
1899
1900 Py_ReprEnter() returns 0 the first time it is called for a particular
1901 object and 1 every time thereafter. It returns -1 if an exception
1902 occurred. Py_ReprLeave() has no return value.
1903
1904 See dictobject.c and listobject.c for examples of use.
1905*/
1906
1907#define KEY "Py_Repr"
1908
1909int
Fred Drake100814d2000-07-09 15:48:49 +00001910Py_ReprEnter(PyObject *obj)
Guido van Rossum86610361998-04-10 22:32:46 +00001911{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001912 PyObject *dict;
1913 PyObject *list;
1914 Py_ssize_t i;
Guido van Rossum86610361998-04-10 22:32:46 +00001915
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001916 dict = PyThreadState_GetDict();
1917 if (dict == NULL)
1918 return 0;
1919 list = PyDict_GetItemString(dict, KEY);
1920 if (list == NULL) {
1921 list = PyList_New(0);
1922 if (list == NULL)
1923 return -1;
1924 if (PyDict_SetItemString(dict, KEY, list) < 0)
1925 return -1;
1926 Py_DECREF(list);
1927 }
1928 i = PyList_GET_SIZE(list);
1929 while (--i >= 0) {
1930 if (PyList_GET_ITEM(list, i) == obj)
1931 return 1;
1932 }
1933 PyList_Append(list, obj);
1934 return 0;
Guido van Rossum86610361998-04-10 22:32:46 +00001935}
1936
1937void
Fred Drake100814d2000-07-09 15:48:49 +00001938Py_ReprLeave(PyObject *obj)
Guido van Rossum86610361998-04-10 22:32:46 +00001939{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001940 PyObject *dict;
1941 PyObject *list;
1942 Py_ssize_t i;
Guido van Rossum86610361998-04-10 22:32:46 +00001943
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001944 dict = PyThreadState_GetDict();
1945 if (dict == NULL)
1946 return;
1947 list = PyDict_GetItemString(dict, KEY);
1948 if (list == NULL || !PyList_Check(list))
1949 return;
1950 i = PyList_GET_SIZE(list);
1951 /* Count backwards because we always expect obj to be list[-1] */
1952 while (--i >= 0) {
1953 if (PyList_GET_ITEM(list, i) == obj) {
1954 PyList_SetSlice(list, i, i + 1, NULL);
1955 break;
1956 }
1957 }
Guido van Rossum86610361998-04-10 22:32:46 +00001958}
Guido van Rossumd724b232000-03-13 16:01:29 +00001959
Tim Peters803526b2002-07-07 05:13:56 +00001960/* Trashcan support. */
Guido van Rossumd724b232000-03-13 16:01:29 +00001961
Tim Peters803526b2002-07-07 05:13:56 +00001962/* Current call-stack depth of tp_dealloc calls. */
Guido van Rossumd724b232000-03-13 16:01:29 +00001963int _PyTrash_delete_nesting = 0;
Guido van Rossume92e6102000-04-24 15:40:53 +00001964
Tim Peters803526b2002-07-07 05:13:56 +00001965/* List of objects that still need to be cleaned up, singly linked via their
1966 * gc headers' gc_prev pointers.
1967 */
1968PyObject *_PyTrash_delete_later = NULL;
Guido van Rossumd724b232000-03-13 16:01:29 +00001969
Tim Peters803526b2002-07-07 05:13:56 +00001970/* Add op to the _PyTrash_delete_later list. Called when the current
1971 * call-stack depth gets large. op must be a currently untracked gc'ed
1972 * object, with refcount 0. Py_DECREF must already have been called on it.
1973 */
Guido van Rossumd724b232000-03-13 16:01:29 +00001974void
Fred Drake100814d2000-07-09 15:48:49 +00001975_PyTrash_deposit_object(PyObject *op)
Guido van Rossumd724b232000-03-13 16:01:29 +00001976{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001977 assert(PyObject_IS_GC(op));
1978 assert(_Py_AS_GC(op)->gc.gc_refs == _PyGC_REFS_UNTRACKED);
1979 assert(op->ob_refcnt == 0);
1980 _Py_AS_GC(op)->gc.gc_prev = (PyGC_Head *)_PyTrash_delete_later;
1981 _PyTrash_delete_later = op;
Guido van Rossumd724b232000-03-13 16:01:29 +00001982}
1983
Antoine Pitrou2b0218a2012-09-06 00:59:49 +02001984/* The equivalent API, using per-thread state recursion info */
1985void
1986_PyTrash_thread_deposit_object(PyObject *op)
1987{
1988 PyThreadState *tstate = PyThreadState_GET();
1989 assert(PyObject_IS_GC(op));
1990 assert(_Py_AS_GC(op)->gc.gc_refs == _PyGC_REFS_UNTRACKED);
1991 assert(op->ob_refcnt == 0);
1992 _Py_AS_GC(op)->gc.gc_prev = (PyGC_Head *) tstate->trash_delete_later;
1993 tstate->trash_delete_later = op;
1994}
1995
Tim Peters803526b2002-07-07 05:13:56 +00001996/* Dealloccate all the objects in the _PyTrash_delete_later list. Called when
1997 * the call-stack unwinds again.
1998 */
Guido van Rossumd724b232000-03-13 16:01:29 +00001999void
Fred Drake100814d2000-07-09 15:48:49 +00002000_PyTrash_destroy_chain(void)
Guido van Rossumd724b232000-03-13 16:01:29 +00002001{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002002 while (_PyTrash_delete_later) {
2003 PyObject *op = _PyTrash_delete_later;
2004 destructor dealloc = Py_TYPE(op)->tp_dealloc;
Neil Schemenauerf589c052002-03-29 03:05:54 +00002005
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002006 _PyTrash_delete_later =
2007 (PyObject*) _Py_AS_GC(op)->gc.gc_prev;
Neil Schemenauerf589c052002-03-29 03:05:54 +00002008
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002009 /* 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 ++_PyTrash_delete_nesting;
2017 (*dealloc)(op);
2018 --_PyTrash_delete_nesting;
2019 }
Guido van Rossumd724b232000-03-13 16:01:29 +00002020}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002021
Antoine Pitrou2b0218a2012-09-06 00:59:49 +02002022/* The equivalent API, using per-thread state recursion info */
2023void
2024_PyTrash_thread_destroy_chain(void)
2025{
2026 PyThreadState *tstate = PyThreadState_GET();
2027 while (tstate->trash_delete_later) {
2028 PyObject *op = tstate->trash_delete_later;
2029 destructor dealloc = Py_TYPE(op)->tp_dealloc;
2030
2031 tstate->trash_delete_later =
2032 (PyObject*) _Py_AS_GC(op)->gc.gc_prev;
2033
2034 /* Call the deallocator directly. This used to try to
2035 * fool Py_DECREF into calling it indirectly, but
2036 * Py_DECREF was already called on this object, and in
2037 * assorted non-release builds calling Py_DECREF again ends
2038 * up distorting allocation statistics.
2039 */
2040 assert(op->ob_refcnt == 0);
2041 ++tstate->trash_delete_nesting;
2042 (*dealloc)(op);
2043 --tstate->trash_delete_nesting;
2044 }
2045}
2046
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00002047#ifndef Py_TRACE_REFS
2048/* For Py_LIMITED_API, we need an out-of-line version of _Py_Dealloc.
2049 Define this here, so we can undefine the macro. */
2050#undef _Py_Dealloc
2051PyAPI_FUNC(void) _Py_Dealloc(PyObject *);
2052void
2053_Py_Dealloc(PyObject *op)
2054{
2055 _Py_INC_TPFREES(op) _Py_COUNT_ALLOCS_COMMA
2056 (*Py_TYPE(op)->tp_dealloc)(op);
2057}
2058#endif
2059
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002060#ifdef __cplusplus
2061}
2062#endif