blob: 26149a7a6b9a932eadb697bd514e1ced2d4eb925 [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +00001
Guido van Rossum3f5da241990-12-20 15:06:42 +00002/* Generic object operations; and implementation of None (NoObject) */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00003
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004#include "Python.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00005
Tim Peters34592512002-07-11 06:23:50 +00006#ifdef Py_REF_DEBUG
Mark Hammonda2905272002-07-29 13:42:14 +00007long _Py_RefTotal;
Guido van Rossum3f5da241990-12-20 15:06:42 +00008#endif
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00009
Mark Hammonda2905272002-07-29 13:42:14 +000010int Py_DivisionWarningFlag;
Guido van Rossum393661d2001-08-31 17:40:15 +000011
Guido van Rossum3f5da241990-12-20 15:06:42 +000012/* Object allocation routines used by NEWOBJ and NEWVAROBJ macros.
13 These are used by the individual routines for object creation.
14 Do not call them otherwise, they do not initialize the object! */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000015
Tim Peters78be7992003-03-23 02:51:01 +000016#ifdef Py_TRACE_REFS
Tim Peters7571a0f2003-03-23 17:52:28 +000017/* Head of circular doubly-linked list of all objects. These are linked
18 * together via the _ob_prev and _ob_next members of a PyObject, which
19 * exist only in a Py_TRACE_REFS build.
20 */
Tim Peters78be7992003-03-23 02:51:01 +000021static PyObject refchain = {&refchain, &refchain};
Tim Peters36eb4df2003-03-23 03:33:13 +000022
Tim Peters7571a0f2003-03-23 17:52:28 +000023/* Insert op at the front of the list of all objects. If force is true,
24 * op is added even if _ob_prev and _ob_next are non-NULL already. If
25 * force is false amd _ob_prev or _ob_next are non-NULL, do nothing.
26 * force should be true if and only if op points to freshly allocated,
27 * uninitialized memory, or you've unlinked op from the list and are
Tim Peters51f8d382003-03-23 18:06:08 +000028 * relinking it into the front.
Tim Peters7571a0f2003-03-23 17:52:28 +000029 * Note that objects are normally added to the list via _Py_NewReference,
30 * which is called by PyObject_Init. Not all objects are initialized that
31 * way, though; exceptions include statically allocated type objects, and
32 * statically allocated singletons (like Py_True and Py_None).
33 */
Tim Peters36eb4df2003-03-23 03:33:13 +000034void
Tim Peters7571a0f2003-03-23 17:52:28 +000035_Py_AddToAllObjects(PyObject *op, int force)
Tim Peters36eb4df2003-03-23 03:33:13 +000036{
Tim Peters7571a0f2003-03-23 17:52:28 +000037#ifdef Py_DEBUG
38 if (!force) {
39 /* If it's initialized memory, op must be in or out of
40 * the list unambiguously.
41 */
42 assert((op->_ob_prev == NULL) == (op->_ob_next == NULL));
43 }
Tim Peters78be7992003-03-23 02:51:01 +000044#endif
Tim Peters7571a0f2003-03-23 17:52:28 +000045 if (force || op->_ob_prev == NULL) {
46 op->_ob_next = refchain._ob_next;
47 op->_ob_prev = &refchain;
48 refchain._ob_next->_ob_prev = op;
49 refchain._ob_next = op;
50 }
51}
52#endif /* Py_TRACE_REFS */
Tim Peters78be7992003-03-23 02:51:01 +000053
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +000054#ifdef COUNT_ALLOCS
Guido van Rossumc0b618a1997-05-02 03:12:38 +000055static PyTypeObject *type_list;
Sjoerd Mullender842d2cc1993-10-15 16:18:48 +000056extern int tuple_zero_allocs, fast_tuple_allocs;
57extern int quick_int_allocs, quick_neg_int_allocs;
Sjoerd Mullender3bb8a051993-10-22 12:04:32 +000058extern int null_strings, one_strings;
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +000059void
Fred Drake100814d2000-07-09 15:48:49 +000060dump_counts(void)
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +000061{
Guido van Rossumc0b618a1997-05-02 03:12:38 +000062 PyTypeObject *tp;
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +000063
64 for (tp = type_list; tp; tp = tp->tp_next)
Sjoerd Mullender52c1f511993-10-25 08:40:52 +000065 fprintf(stderr, "%s alloc'd: %d, freed: %d, max in use: %d\n",
Tim Peters6d6c1a32001-08-02 04:15:00 +000066 tp->tp_name, tp->tp_allocs, tp->tp_frees,
Sjoerd Mullender52c1f511993-10-25 08:40:52 +000067 tp->tp_maxalloc);
68 fprintf(stderr, "fast tuple allocs: %d, empty: %d\n",
69 fast_tuple_allocs, tuple_zero_allocs);
70 fprintf(stderr, "fast int allocs: pos: %d, neg: %d\n",
71 quick_int_allocs, quick_neg_int_allocs);
72 fprintf(stderr, "null strings: %d, 1-strings: %d\n",
73 null_strings, one_strings);
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +000074}
75
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +000076PyObject *
Fred Drake100814d2000-07-09 15:48:49 +000077get_counts(void)
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +000078{
79 PyTypeObject *tp;
80 PyObject *result;
81 PyObject *v;
82
83 result = PyList_New(0);
84 if (result == NULL)
85 return NULL;
86 for (tp = type_list; tp; tp = tp->tp_next) {
Tim Peters6d6c1a32001-08-02 04:15:00 +000087 v = Py_BuildValue("(siii)", tp->tp_name, tp->tp_allocs,
88 tp->tp_frees, tp->tp_maxalloc);
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +000089 if (v == NULL) {
90 Py_DECREF(result);
91 return NULL;
92 }
93 if (PyList_Append(result, v) < 0) {
94 Py_DECREF(v);
95 Py_DECREF(result);
96 return NULL;
97 }
98 Py_DECREF(v);
99 }
100 return result;
101}
102
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000103void
Fred Drake100814d2000-07-09 15:48:49 +0000104inc_count(PyTypeObject *tp)
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000105{
Tim Peters6d6c1a32001-08-02 04:15:00 +0000106 if (tp->tp_allocs == 0) {
Guido van Rossumd8953cb1995-04-06 14:46:26 +0000107 /* first time; insert in linked list */
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000108 if (tp->tp_next != NULL) /* sanity check */
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000109 Py_FatalError("XXX inc_count sanity check");
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000110 tp->tp_next = type_list;
Tim Petersc6a3ff62002-07-08 22:11:52 +0000111 /* Note that as of Python 2.2, heap-allocated type objects
112 * can go away, but this code requires that they stay alive
113 * until program exit. That's why we're careful with
114 * refcounts here. type_list gets a new reference to tp,
115 * while ownership of the reference type_list used to hold
116 * (if any) was transferred to tp->tp_next in the line above.
117 * tp is thus effectively immortal after this.
118 */
119 Py_INCREF(tp);
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000120 type_list = tp;
Tim Peters3e40c7f2003-03-23 03:04:32 +0000121#ifdef Py_TRACE_REFS
Tim Peters7571a0f2003-03-23 17:52:28 +0000122 /* Also insert in the doubly-linked list of all objects,
123 * if not already there.
124 */
125 _Py_AddToAllObjects((PyObject *)tp, 0);
Tim Peters78be7992003-03-23 02:51:01 +0000126#endif
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000127 }
Tim Peters6d6c1a32001-08-02 04:15:00 +0000128 tp->tp_allocs++;
129 if (tp->tp_allocs - tp->tp_frees > tp->tp_maxalloc)
130 tp->tp_maxalloc = tp->tp_allocs - tp->tp_frees;
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000131}
132#endif
133
Tim Peters7c321a82002-07-09 02:57:01 +0000134#ifdef Py_REF_DEBUG
135/* Log a fatal error; doesn't return. */
136void
137_Py_NegativeRefcount(const char *fname, int lineno, PyObject *op)
138{
139 char buf[300];
140
141 PyOS_snprintf(buf, sizeof(buf),
142 "%s:%i object at %p has negative ref count %i",
143 fname, lineno, op, op->ob_refcnt);
144 Py_FatalError(buf);
145}
146
147#endif /* Py_REF_DEBUG */
148
Thomas Heller1328b522004-04-22 17:23:49 +0000149void
150Py_IncRef(PyObject *o)
151{
152 Py_XINCREF(o);
153}
154
155void
156Py_DecRef(PyObject *o)
157{
158 Py_XDECREF(o);
159}
160
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000161PyObject *
Fred Drake100814d2000-07-09 15:48:49 +0000162PyObject_Init(PyObject *op, PyTypeObject *tp)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000163{
Guido van Rossum6e08c142002-10-11 20:37:24 +0000164 if (op == NULL)
165 return PyErr_NoMemory();
Guido van Rossumb18618d2000-05-03 23:44:39 +0000166 /* Any changes should be reflected in PyObject_INIT (objimpl.h) */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000167 op->ob_type = tp;
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000168 _Py_NewReference(op);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000169 return op;
170}
171
Guido van Rossumb18618d2000-05-03 23:44:39 +0000172PyVarObject *
Fred Drake100814d2000-07-09 15:48:49 +0000173PyObject_InitVar(PyVarObject *op, PyTypeObject *tp, int size)
Guido van Rossumb18618d2000-05-03 23:44:39 +0000174{
Guido van Rossum6e08c142002-10-11 20:37:24 +0000175 if (op == NULL)
176 return (PyVarObject *) PyErr_NoMemory();
Guido van Rossumb18618d2000-05-03 23:44:39 +0000177 /* Any changes should be reflected in PyObject_INIT_VAR */
178 op->ob_size = size;
179 op->ob_type = tp;
180 _Py_NewReference((PyObject *)op);
181 return op;
182}
183
184PyObject *
Fred Drake100814d2000-07-09 15:48:49 +0000185_PyObject_New(PyTypeObject *tp)
Guido van Rossumb18618d2000-05-03 23:44:39 +0000186{
187 PyObject *op;
188 op = (PyObject *) PyObject_MALLOC(_PyObject_SIZE(tp));
189 if (op == NULL)
190 return PyErr_NoMemory();
191 return PyObject_INIT(op, tp);
192}
193
Guido van Rossumd0c87ee1997-05-15 21:31:03 +0000194PyVarObject *
Tim Peters6d483d32001-10-06 21:27:34 +0000195_PyObject_NewVar(PyTypeObject *tp, int nitems)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000196{
Guido van Rossumb18618d2000-05-03 23:44:39 +0000197 PyVarObject *op;
Tim Petersf2a67da2001-10-07 03:54:51 +0000198 const size_t size = _PyObject_VAR_SIZE(tp, nitems);
Tim Peters6d483d32001-10-06 21:27:34 +0000199 op = (PyVarObject *) PyObject_MALLOC(size);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000200 if (op == NULL)
Guido van Rossumd0c87ee1997-05-15 21:31:03 +0000201 return (PyVarObject *)PyErr_NoMemory();
Tim Peters6d483d32001-10-06 21:27:34 +0000202 return PyObject_INIT_VAR(op, tp, nitems);
Guido van Rossumb18618d2000-05-03 23:44:39 +0000203}
204
Neil Schemenauerbdf0eed2002-04-12 03:08:42 +0000205/* for binary compatibility with 2.2 */
206#undef _PyObject_Del
Guido van Rossumb18618d2000-05-03 23:44:39 +0000207void
Fred Drake100814d2000-07-09 15:48:49 +0000208_PyObject_Del(PyObject *op)
Guido van Rossumb18618d2000-05-03 23:44:39 +0000209{
Guido van Rossum4cc6ac72000-07-01 01:00:38 +0000210 PyObject_FREE(op);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000211}
212
Neal Norwitz1a997502003-01-13 20:13:12 +0000213/* Implementation of PyObject_Print with recursion checking */
214static int
215internal_print(PyObject *op, FILE *fp, int flags, int nesting)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000216{
Guido van Rossum278ef591991-07-27 21:40:24 +0000217 int ret = 0;
Neal Norwitz1a997502003-01-13 20:13:12 +0000218 if (nesting > 10) {
219 PyErr_SetString(PyExc_RuntimeError, "print recursion");
220 return -1;
221 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000222 if (PyErr_CheckSignals())
Guido van Rossum90933611991-06-07 16:10:43 +0000223 return -1;
Guido van Rossum9b00dfa1998-04-28 16:06:54 +0000224#ifdef USE_STACKCHECK
225 if (PyOS_CheckStack()) {
Fred Drake661ea262000-10-24 19:57:45 +0000226 PyErr_SetString(PyExc_MemoryError, "stack overflow");
Guido van Rossum9b00dfa1998-04-28 16:06:54 +0000227 return -1;
228 }
229#endif
Guido van Rossum687ef6e2000-01-12 16:28:58 +0000230 clearerr(fp); /* Clear any previous error condition */
Guido van Rossum90933611991-06-07 16:10:43 +0000231 if (op == NULL) {
232 fprintf(fp, "<nil>");
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000233 }
Guido van Rossum90933611991-06-07 16:10:43 +0000234 else {
235 if (op->ob_refcnt <= 0)
Fred Drakea44d3532000-06-30 15:01:00 +0000236 fprintf(fp, "<refcnt %u at %p>",
237 op->ob_refcnt, op);
Guido van Rossum2e8f6141992-09-03 20:32:55 +0000238 else if (op->ob_type->tp_print == NULL) {
Guido van Rossum4f288ab2001-05-01 16:53:37 +0000239 PyObject *s;
240 if (flags & Py_PRINT_RAW)
241 s = PyObject_Str(op);
242 else
243 s = PyObject_Repr(op);
244 if (s == NULL)
245 ret = -1;
Guido van Rossum2e8f6141992-09-03 20:32:55 +0000246 else {
Neal Norwitz1a997502003-01-13 20:13:12 +0000247 ret = internal_print(s, fp, Py_PRINT_RAW,
248 nesting+1);
Guido van Rossum2e8f6141992-09-03 20:32:55 +0000249 }
Guido van Rossum4f288ab2001-05-01 16:53:37 +0000250 Py_XDECREF(s);
Guido van Rossum2e8f6141992-09-03 20:32:55 +0000251 }
Guido van Rossum90933611991-06-07 16:10:43 +0000252 else
Guido van Rossum278ef591991-07-27 21:40:24 +0000253 ret = (*op->ob_type->tp_print)(op, fp, flags);
Guido van Rossum90933611991-06-07 16:10:43 +0000254 }
Guido van Rossum278ef591991-07-27 21:40:24 +0000255 if (ret == 0) {
256 if (ferror(fp)) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000257 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum278ef591991-07-27 21:40:24 +0000258 clearerr(fp);
259 ret = -1;
260 }
261 }
262 return ret;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000263}
264
Neal Norwitz1a997502003-01-13 20:13:12 +0000265int
266PyObject_Print(PyObject *op, FILE *fp, int flags)
267{
268 return internal_print(op, fp, flags, 0);
269}
270
271
Barry Warsaw9bf16442001-01-23 16:24:35 +0000272/* For debugging convenience. See Misc/gdbinit for some useful gdb hooks */
Tim Peters803526b2002-07-07 05:13:56 +0000273void _PyObject_Dump(PyObject* op)
Barry Warsaw9bf16442001-01-23 16:24:35 +0000274{
Barry Warsaweefb1072001-02-22 22:39:18 +0000275 if (op == NULL)
276 fprintf(stderr, "NULL\n");
277 else {
Guido van Rossum5f5512d2001-09-14 15:50:08 +0000278 fprintf(stderr, "object : ");
Barry Warsaweefb1072001-02-22 22:39:18 +0000279 (void)PyObject_Print(op, stderr, 0);
Guido van Rossum5f5512d2001-09-14 15:50:08 +0000280 fprintf(stderr, "\n"
281 "type : %s\n"
282 "refcount: %d\n"
283 "address : %p\n",
284 op->ob_type==NULL ? "NULL" : op->ob_type->tp_name,
285 op->ob_refcnt,
286 op);
Barry Warsaweefb1072001-02-22 22:39:18 +0000287 }
Barry Warsaw9bf16442001-01-23 16:24:35 +0000288}
Barry Warsaw903138f2001-01-23 16:33:18 +0000289
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000290PyObject *
Fred Drake100814d2000-07-09 15:48:49 +0000291PyObject_Repr(PyObject *v)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000292{
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000293 if (PyErr_CheckSignals())
Guido van Rossum90933611991-06-07 16:10:43 +0000294 return NULL;
Guido van Rossum9b00dfa1998-04-28 16:06:54 +0000295#ifdef USE_STACKCHECK
296 if (PyOS_CheckStack()) {
Fred Drake661ea262000-10-24 19:57:45 +0000297 PyErr_SetString(PyExc_MemoryError, "stack overflow");
Guido van Rossum9b00dfa1998-04-28 16:06:54 +0000298 return NULL;
299 }
300#endif
Guido van Rossum90933611991-06-07 16:10:43 +0000301 if (v == NULL)
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000302 return PyString_FromString("<NULL>");
Barry Warsaw7ce36942001-08-24 18:34:26 +0000303 else if (v->ob_type->tp_repr == NULL)
Guido van Rossum21922aa2001-08-30 20:26:05 +0000304 return PyString_FromFormat("<%s object at %p>",
Barry Warsaw7ce36942001-08-24 18:34:26 +0000305 v->ob_type->tp_name, v);
Guido van Rossum4c08d552000-03-10 22:55:18 +0000306 else {
307 PyObject *res;
308 res = (*v->ob_type->tp_repr)(v);
309 if (res == NULL)
310 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000311#ifdef Py_USING_UNICODE
Fredrik Lundhefecc7d2000-07-01 14:31:09 +0000312 if (PyUnicode_Check(res)) {
313 PyObject* str;
Fredrik Lundh2a1e0602000-07-08 17:43:32 +0000314 str = PyUnicode_AsUnicodeEscapeString(res);
Marc-André Lemburg891bc652000-07-03 09:57:53 +0000315 Py_DECREF(res);
316 if (str)
Fredrik Lundhefecc7d2000-07-01 14:31:09 +0000317 res = str;
Marc-André Lemburg891bc652000-07-03 09:57:53 +0000318 else
319 return NULL;
Fredrik Lundhefecc7d2000-07-01 14:31:09 +0000320 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000321#endif
Guido van Rossum4c08d552000-03-10 22:55:18 +0000322 if (!PyString_Check(res)) {
323 PyErr_Format(PyExc_TypeError,
Guido van Rossum5db862d2000-04-10 12:46:51 +0000324 "__repr__ returned non-string (type %.200s)",
Guido van Rossum4c08d552000-03-10 22:55:18 +0000325 res->ob_type->tp_name);
326 Py_DECREF(res);
327 return NULL;
328 }
329 return res;
330 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000331}
332
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000333PyObject *
Fred Drake100814d2000-07-09 15:48:49 +0000334PyObject_Str(PyObject *v)
Guido van Rossumc6004111993-11-05 10:22:19 +0000335{
Guido van Rossum4c08d552000-03-10 22:55:18 +0000336 PyObject *res;
Tim Peters803526b2002-07-07 05:13:56 +0000337
Guido van Rossumc6004111993-11-05 10:22:19 +0000338 if (v == NULL)
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000339 return PyString_FromString("<NULL>");
Tim Peters5a49ade2001-09-11 01:41:59 +0000340 if (PyString_CheckExact(v)) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000341 Py_INCREF(v);
Guido van Rossumc6004111993-11-05 10:22:19 +0000342 return v;
343 }
Guido van Rossum4f288ab2001-05-01 16:53:37 +0000344 if (v->ob_type->tp_str == NULL)
345 return PyObject_Repr(v);
346
347 res = (*v->ob_type->tp_str)(v);
Guido van Rossum4c08d552000-03-10 22:55:18 +0000348 if (res == NULL)
349 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000350#ifdef Py_USING_UNICODE
Marc-André Lemburg891bc652000-07-03 09:57:53 +0000351 if (PyUnicode_Check(res)) {
352 PyObject* str;
353 str = PyUnicode_AsEncodedString(res, NULL, NULL);
354 Py_DECREF(res);
355 if (str)
356 res = str;
357 else
358 return NULL;
359 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000360#endif
Guido van Rossum4c08d552000-03-10 22:55:18 +0000361 if (!PyString_Check(res)) {
362 PyErr_Format(PyExc_TypeError,
Guido van Rossum5db862d2000-04-10 12:46:51 +0000363 "__str__ returned non-string (type %.200s)",
Guido van Rossum4c08d552000-03-10 22:55:18 +0000364 res->ob_type->tp_name);
365 Py_DECREF(res);
366 return NULL;
367 }
368 return res;
Guido van Rossumc6004111993-11-05 10:22:19 +0000369}
370
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000371#ifdef Py_USING_UNICODE
Guido van Rossuma3af41d2001-01-18 22:07:06 +0000372PyObject *
373PyObject_Unicode(PyObject *v)
374{
375 PyObject *res;
Tim Peters803526b2002-07-07 05:13:56 +0000376
Guido van Rossuma3af41d2001-01-18 22:07:06 +0000377 if (v == NULL)
378 res = PyString_FromString("<NULL>");
Guido van Rossumb8c65bc2001-10-19 02:01:31 +0000379 if (PyUnicode_CheckExact(v)) {
Guido van Rossuma3af41d2001-01-18 22:07:06 +0000380 Py_INCREF(v);
381 return v;
382 }
Guido van Rossumb8c65bc2001-10-19 02:01:31 +0000383 if (PyUnicode_Check(v)) {
384 /* For a Unicode subtype that's not a Unicode object,
385 return a true Unicode object with the same data. */
386 return PyUnicode_FromUnicode(PyUnicode_AS_UNICODE(v),
387 PyUnicode_GET_SIZE(v));
388 }
389 if (PyString_Check(v)) {
Marc-André Lemburgae605342001-03-25 19:16:13 +0000390 Py_INCREF(v);
Guido van Rossuma3af41d2001-01-18 22:07:06 +0000391 res = v;
Marc-André Lemburgae605342001-03-25 19:16:13 +0000392 }
Guido van Rossuma3af41d2001-01-18 22:07:06 +0000393 else {
394 PyObject *func;
Guido van Rossumb8c65bc2001-10-19 02:01:31 +0000395 static PyObject *unicodestr;
396 /* XXX As soon as we have a tp_unicode slot, we should
397 check this before trying the __unicode__
398 method. */
399 if (unicodestr == NULL) {
400 unicodestr= PyString_InternFromString(
401 "__unicode__");
402 if (unicodestr == NULL)
Guido van Rossuma3af41d2001-01-18 22:07:06 +0000403 return NULL;
404 }
Guido van Rossumb8c65bc2001-10-19 02:01:31 +0000405 func = PyObject_GetAttr(v, unicodestr);
406 if (func != NULL) {
Guido van Rossuma3af41d2001-01-18 22:07:06 +0000407 res = PyEval_CallObject(func, (PyObject *)NULL);
408 Py_DECREF(func);
409 }
Guido van Rossumb8c65bc2001-10-19 02:01:31 +0000410 else {
411 PyErr_Clear();
412 if (v->ob_type->tp_str != NULL)
413 res = (*v->ob_type->tp_str)(v);
414 else
415 res = PyObject_Repr(v);
416 }
Guido van Rossuma3af41d2001-01-18 22:07:06 +0000417 }
418 if (res == NULL)
419 return NULL;
420 if (!PyUnicode_Check(res)) {
Guido van Rossumb8c65bc2001-10-19 02:01:31 +0000421 PyObject *str;
422 str = PyUnicode_FromEncodedObject(res, NULL, "strict");
Guido van Rossuma3af41d2001-01-18 22:07:06 +0000423 Py_DECREF(res);
424 if (str)
425 res = str;
426 else
427 return NULL;
428 }
429 return res;
430}
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000431#endif
Guido van Rossuma3af41d2001-01-18 22:07:06 +0000432
433
Guido van Rossuma4073002002-05-31 20:03:54 +0000434/* Helper to warn about deprecated tp_compare return values. Return:
435 -2 for an exception;
436 -1 if v < w;
437 0 if v == w;
438 1 if v > w.
439 (This function cannot return 2.)
440*/
441static int
442adjust_tp_compare(int c)
443{
444 if (PyErr_Occurred()) {
445 if (c != -1 && c != -2) {
446 PyObject *t, *v, *tb;
447 PyErr_Fetch(&t, &v, &tb);
448 if (PyErr_Warn(PyExc_RuntimeWarning,
449 "tp_compare didn't return -1 or -2 "
450 "for exception") < 0) {
451 Py_XDECREF(t);
452 Py_XDECREF(v);
453 Py_XDECREF(tb);
454 }
455 else
456 PyErr_Restore(t, v, tb);
457 }
458 return -2;
459 }
460 else if (c < -1 || c > 1) {
461 if (PyErr_Warn(PyExc_RuntimeWarning,
462 "tp_compare didn't return -1, 0 or 1") < 0)
463 return -2;
464 else
465 return c < -1 ? -1 : 1;
466 }
467 else {
468 assert(c >= -1 && c <= 1);
469 return c;
470 }
471}
472
473
Guido van Rossumd1f06b92001-01-24 22:14:43 +0000474/* Macro to get the tp_richcompare field of a type if defined */
475#define RICHCOMPARE(t) (PyType_HasFeature((t), Py_TPFLAGS_HAVE_RICHCOMPARE) \
476 ? (t)->tp_richcompare : NULL)
477
Guido van Rossume797ec12001-01-17 15:24:28 +0000478/* Map rich comparison operators to their swapped version, e.g. LT --> GT */
479static int swapped_op[] = {Py_GT, Py_GE, Py_EQ, Py_NE, Py_LT, Py_LE};
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +0000480
Guido van Rossume797ec12001-01-17 15:24:28 +0000481/* Try a genuine rich comparison, returning an object. Return:
482 NULL for exception;
483 NotImplemented if this particular rich comparison is not implemented or
484 undefined;
485 some object not equal to NotImplemented if it is implemented
486 (this latter object may not be a Boolean).
487*/
488static PyObject *
489try_rich_compare(PyObject *v, PyObject *w, int op)
490{
491 richcmpfunc f;
492 PyObject *res;
493
Guido van Rossum2ed6bf82001-09-27 20:30:07 +0000494 if (v->ob_type != w->ob_type &&
495 PyType_IsSubtype(w->ob_type, v->ob_type) &&
496 (f = RICHCOMPARE(w->ob_type)) != NULL) {
497 res = (*f)(w, v, swapped_op[op]);
498 if (res != Py_NotImplemented)
499 return res;
500 Py_DECREF(res);
501 }
Guido van Rossumd1f06b92001-01-24 22:14:43 +0000502 if ((f = RICHCOMPARE(v->ob_type)) != NULL) {
Guido van Rossume797ec12001-01-17 15:24:28 +0000503 res = (*f)(v, w, op);
504 if (res != Py_NotImplemented)
505 return res;
506 Py_DECREF(res);
507 }
Guido van Rossumd1f06b92001-01-24 22:14:43 +0000508 if ((f = RICHCOMPARE(w->ob_type)) != NULL) {
Guido van Rossume797ec12001-01-17 15:24:28 +0000509 return (*f)(w, v, swapped_op[op]);
510 }
511 res = Py_NotImplemented;
512 Py_INCREF(res);
513 return res;
514}
515
516/* Try a genuine rich comparison, returning an int. Return:
517 -1 for exception (including the case where try_rich_compare() returns an
518 object that's not a Boolean);
Tim Petersc99213f2001-11-04 05:57:16 +0000519 0 if the outcome is false;
520 1 if the outcome is true;
521 2 if this particular rich comparison is not implemented or undefined.
Guido van Rossume797ec12001-01-17 15:24:28 +0000522*/
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +0000523static int
Guido van Rossume797ec12001-01-17 15:24:28 +0000524try_rich_compare_bool(PyObject *v, PyObject *w, int op)
525{
526 PyObject *res;
527 int ok;
528
Guido van Rossumd1f06b92001-01-24 22:14:43 +0000529 if (RICHCOMPARE(v->ob_type) == NULL && RICHCOMPARE(w->ob_type) == NULL)
Guido van Rossume797ec12001-01-17 15:24:28 +0000530 return 2; /* Shortcut, avoid INCREF+DECREF */
531 res = try_rich_compare(v, w, op);
532 if (res == NULL)
533 return -1;
534 if (res == Py_NotImplemented) {
535 Py_DECREF(res);
536 return 2;
537 }
538 ok = PyObject_IsTrue(res);
539 Py_DECREF(res);
540 return ok;
541}
542
543/* Try rich comparisons to determine a 3-way comparison. Return:
544 -2 for an exception;
Tim Petersc99213f2001-11-04 05:57:16 +0000545 -1 if v < w;
546 0 if v == w;
547 1 if v > w;
548 2 if this particular rich comparison is not implemented or undefined.
Guido van Rossume797ec12001-01-17 15:24:28 +0000549*/
550static int
551try_rich_to_3way_compare(PyObject *v, PyObject *w)
552{
Guido van Rossum2ffbf6b2001-01-17 21:27:02 +0000553 static struct { int op; int outcome; } tries[3] = {
554 /* Try this operator, and if it is true, use this outcome: */
555 {Py_EQ, 0},
556 {Py_LT, -1},
557 {Py_GT, 1},
558 };
559 int i;
560
Guido van Rossumd1f06b92001-01-24 22:14:43 +0000561 if (RICHCOMPARE(v->ob_type) == NULL && RICHCOMPARE(w->ob_type) == NULL)
Guido van Rossume797ec12001-01-17 15:24:28 +0000562 return 2; /* Shortcut */
Guido van Rossum2ffbf6b2001-01-17 21:27:02 +0000563
564 for (i = 0; i < 3; i++) {
565 switch (try_rich_compare_bool(v, w, tries[i].op)) {
566 case -1:
Tim Peters6d60b2e2001-05-07 20:53:51 +0000567 return -2;
Guido van Rossum2ffbf6b2001-01-17 21:27:02 +0000568 case 1:
569 return tries[i].outcome;
570 }
Guido van Rossume797ec12001-01-17 15:24:28 +0000571 }
Guido van Rossum2ffbf6b2001-01-17 21:27:02 +0000572
573 return 2;
Guido van Rossume797ec12001-01-17 15:24:28 +0000574}
575
576/* Try a 3-way comparison, returning an int. Return:
577 -2 for an exception;
Tim Petersc99213f2001-11-04 05:57:16 +0000578 -1 if v < w;
579 0 if v == w;
580 1 if v > w;
581 2 if this particular 3-way comparison is not implemented or undefined.
Guido van Rossume797ec12001-01-17 15:24:28 +0000582*/
583static int
584try_3way_compare(PyObject *v, PyObject *w)
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +0000585{
586 int c;
Guido van Rossume797ec12001-01-17 15:24:28 +0000587 cmpfunc f;
588
589 /* Comparisons involving instances are given to instance_compare,
590 which has the same return conventions as this function. */
591
Guido van Rossumab3b0342001-09-18 20:38:53 +0000592 f = v->ob_type->tp_compare;
Guido van Rossume797ec12001-01-17 15:24:28 +0000593 if (PyInstance_Check(v))
Guido van Rossumab3b0342001-09-18 20:38:53 +0000594 return (*f)(v, w);
Guido van Rossume797ec12001-01-17 15:24:28 +0000595 if (PyInstance_Check(w))
596 return (*w->ob_type->tp_compare)(v, w);
597
Guido van Rossumab3b0342001-09-18 20:38:53 +0000598 /* If both have the same (non-NULL) tp_compare, use it. */
599 if (f != NULL && f == w->ob_type->tp_compare) {
600 c = (*f)(v, w);
Guido van Rossuma4073002002-05-31 20:03:54 +0000601 return adjust_tp_compare(c);
Guido van Rossumab3b0342001-09-18 20:38:53 +0000602 }
603
604 /* If either tp_compare is _PyObject_SlotCompare, that's safe. */
605 if (f == _PyObject_SlotCompare ||
606 w->ob_type->tp_compare == _PyObject_SlotCompare)
607 return _PyObject_SlotCompare(v, w);
608
Guido van Rossume797ec12001-01-17 15:24:28 +0000609 /* Try coercion; if it fails, give up */
610 c = PyNumber_CoerceEx(&v, &w);
611 if (c < 0)
612 return -2;
613 if (c > 0)
614 return 2;
615
616 /* Try v's comparison, if defined */
617 if ((f = v->ob_type->tp_compare) != NULL) {
618 c = (*f)(v, w);
619 Py_DECREF(v);
620 Py_DECREF(w);
Guido van Rossuma4073002002-05-31 20:03:54 +0000621 return adjust_tp_compare(c);
Guido van Rossume797ec12001-01-17 15:24:28 +0000622 }
623
624 /* Try w's comparison, if defined */
625 if ((f = w->ob_type->tp_compare) != NULL) {
626 c = (*f)(w, v); /* swapped! */
627 Py_DECREF(v);
628 Py_DECREF(w);
Guido van Rossuma4073002002-05-31 20:03:54 +0000629 c = adjust_tp_compare(c);
630 if (c >= -1)
631 return -c; /* Swapped! */
632 else
633 return c;
Guido van Rossume797ec12001-01-17 15:24:28 +0000634 }
635
636 /* No comparison defined */
637 Py_DECREF(v);
638 Py_DECREF(w);
639 return 2;
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +0000640}
641
Guido van Rossume797ec12001-01-17 15:24:28 +0000642/* Final fallback 3-way comparison, returning an int. Return:
643 -2 if an error occurred;
Tim Petersc99213f2001-11-04 05:57:16 +0000644 -1 if v < w;
645 0 if v == w;
646 1 if v > w.
Guido van Rossume797ec12001-01-17 15:24:28 +0000647*/
648static int
649default_3way_compare(PyObject *v, PyObject *w)
650{
651 int c;
Guido van Rossum8f9143d2001-01-22 15:59:32 +0000652 char *vname, *wname;
Guido van Rossume797ec12001-01-17 15:24:28 +0000653
654 if (v->ob_type == w->ob_type) {
Barry Warsawb0e754d2001-01-20 06:24:55 +0000655 /* When comparing these pointers, they must be cast to
656 * integer types (i.e. Py_uintptr_t, our spelling of C9X's
657 * uintptr_t). ANSI specifies that pointer compares other
658 * than == and != to non-related structures are undefined.
659 */
Barry Warsaw71ff8d52001-01-20 06:08:10 +0000660 Py_uintptr_t vv = (Py_uintptr_t)v;
661 Py_uintptr_t ww = (Py_uintptr_t)w;
Guido van Rossume797ec12001-01-17 15:24:28 +0000662 return (vv < ww) ? -1 : (vv > ww) ? 1 : 0;
663 }
664
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000665#ifdef Py_USING_UNICODE
Guido van Rossume797ec12001-01-17 15:24:28 +0000666 /* Special case for Unicode */
667 if (PyUnicode_Check(v) || PyUnicode_Check(w)) {
668 c = PyUnicode_Compare(v, w);
669 if (!PyErr_Occurred())
670 return c;
671 /* TypeErrors are ignored: if Unicode coercion fails due
672 to one of the arguments not having the right type, we
673 continue as defined by the coercion protocol (see
674 above). Luckily, decoding errors are reported as
675 ValueErrors and are not masked by this technique. */
676 if (!PyErr_ExceptionMatches(PyExc_TypeError))
677 return -2;
678 PyErr_Clear();
679 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000680#endif
Guido van Rossume797ec12001-01-17 15:24:28 +0000681
Guido van Rossum0871e932001-01-22 19:28:09 +0000682 /* None is smaller than anything */
683 if (v == Py_None)
684 return -1;
685 if (w == Py_None)
686 return 1;
687
Guido van Rossumfb50d3f2003-02-18 16:40:09 +0000688 /* different type: compare type names; numbers are smaller */
689 if (PyNumber_Check(v))
Guido van Rossum8f9143d2001-01-22 15:59:32 +0000690 vname = "";
691 else
692 vname = v->ob_type->tp_name;
Guido van Rossumfb50d3f2003-02-18 16:40:09 +0000693 if (PyNumber_Check(w))
Guido van Rossum8f9143d2001-01-22 15:59:32 +0000694 wname = "";
695 else
696 wname = w->ob_type->tp_name;
697 c = strcmp(vname, wname);
698 if (c < 0)
699 return -1;
700 if (c > 0)
701 return 1;
702 /* Same type name, or (more likely) incomparable numeric types */
703 return ((Py_uintptr_t)(v->ob_type) < (
704 Py_uintptr_t)(w->ob_type)) ? -1 : 1;
Guido van Rossume797ec12001-01-17 15:24:28 +0000705}
706
707#define CHECK_TYPES(o) PyType_HasFeature((o)->ob_type, Py_TPFLAGS_CHECKTYPES)
708
Tim Peters6d60b2e2001-05-07 20:53:51 +0000709/* Do a 3-way comparison, by hook or by crook. Return:
Guido van Rossuma4073002002-05-31 20:03:54 +0000710 -2 for an exception (but see below);
Tim Petersc99213f2001-11-04 05:57:16 +0000711 -1 if v < w;
Tim Peters6d60b2e2001-05-07 20:53:51 +0000712 0 if v == w;
Tim Petersc99213f2001-11-04 05:57:16 +0000713 1 if v > w;
Guido van Rossuma4073002002-05-31 20:03:54 +0000714 BUT: if the object implements a tp_compare function, it returns
Martin v. Löwis0163d6d2001-06-09 07:34:05 +0000715 whatever this function returns (whether with an exception or not).
Tim Peters6d60b2e2001-05-07 20:53:51 +0000716*/
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +0000717static int
Fred Drake100814d2000-07-09 15:48:49 +0000718do_cmp(PyObject *v, PyObject *w)
Guido van Rossum20566841995-01-12 11:26:10 +0000719{
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +0000720 int c;
Martin v. Löwis0163d6d2001-06-09 07:34:05 +0000721 cmpfunc f;
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +0000722
Martin v. Löwis0163d6d2001-06-09 07:34:05 +0000723 if (v->ob_type == w->ob_type
Guido van Rossum82fc51c12001-08-16 08:02:45 +0000724 && (f = v->ob_type->tp_compare) != NULL) {
725 c = (*f)(v, w);
Guido van Rossuma4073002002-05-31 20:03:54 +0000726 if (PyInstance_Check(v)) {
727 /* Instance tp_compare has a different signature.
728 But if it returns undefined we fall through. */
729 if (c != 2)
730 return c;
Neal Norwitz3f8dae72002-05-31 20:23:33 +0000731 /* Else fall through to try_rich_to_3way_compare() */
Guido van Rossuma4073002002-05-31 20:03:54 +0000732 }
733 else
734 return adjust_tp_compare(c);
Guido van Rossum82fc51c12001-08-16 08:02:45 +0000735 }
Guido van Rossuma4073002002-05-31 20:03:54 +0000736 /* We only get here if one of the following is true:
737 a) v and w have different types
738 b) v and w have the same type, which doesn't have tp_compare
739 c) v and w are instances, and either __cmp__ is not defined or
740 __cmp__ returns NotImplemented
741 */
Guido van Rossume797ec12001-01-17 15:24:28 +0000742 c = try_rich_to_3way_compare(v, w);
743 if (c < 2)
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +0000744 return c;
Guido van Rossume797ec12001-01-17 15:24:28 +0000745 c = try_3way_compare(v, w);
746 if (c < 2)
747 return c;
748 return default_3way_compare(v, w);
Guido van Rossum20566841995-01-12 11:26:10 +0000749}
750
Tim Petersc99213f2001-11-04 05:57:16 +0000751/* Compare v to w. Return
752 -1 if v < w or exception (PyErr_Occurred() true in latter case).
753 0 if v == w.
754 1 if v > w.
755 XXX The docs (C API manual) say the return value is undefined in case
756 XXX of error.
757*/
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000758int
Fred Drake100814d2000-07-09 15:48:49 +0000759PyObject_Compare(PyObject *v, PyObject *w)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000760{
Jeremy Hylton4a3dd2d2000-04-14 19:13:24 +0000761 int result;
762
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000763 if (v == NULL || w == NULL) {
764 PyErr_BadInternalCall();
765 return -1;
766 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000767 if (v == w)
768 return 0;
Armin Rigo2b3eb402003-10-28 12:05:48 +0000769 if (Py_EnterRecursiveCall(" in cmp"))
770 return -1;
771 result = do_cmp(v, w);
772 Py_LeaveRecursiveCall();
Guido van Rossume797ec12001-01-17 15:24:28 +0000773 return result < 0 ? -1 : result;
774}
775
Tim Petersc99213f2001-11-04 05:57:16 +0000776/* Return (new reference to) Py_True or Py_False. */
Guido van Rossume797ec12001-01-17 15:24:28 +0000777static PyObject *
Martin v. Löwis0163d6d2001-06-09 07:34:05 +0000778convert_3way_to_object(int op, int c)
Guido van Rossume797ec12001-01-17 15:24:28 +0000779{
Guido van Rossume797ec12001-01-17 15:24:28 +0000780 PyObject *result;
Guido van Rossume797ec12001-01-17 15:24:28 +0000781 switch (op) {
782 case Py_LT: c = c < 0; break;
783 case Py_LE: c = c <= 0; break;
784 case Py_EQ: c = c == 0; break;
785 case Py_NE: c = c != 0; break;
786 case Py_GT: c = c > 0; break;
787 case Py_GE: c = c >= 0; break;
788 }
789 result = c ? Py_True : Py_False;
790 Py_INCREF(result);
Jeremy Hylton4a3dd2d2000-04-14 19:13:24 +0000791 return result;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000792}
Tim Peters803526b2002-07-07 05:13:56 +0000793
Tim Petersc99213f2001-11-04 05:57:16 +0000794/* We want a rich comparison but don't have one. Try a 3-way cmp instead.
795 Return
796 NULL if error
797 Py_True if v op w
798 Py_False if not (v op w)
799*/
Martin v. Löwis0163d6d2001-06-09 07:34:05 +0000800static PyObject *
801try_3way_to_rich_compare(PyObject *v, PyObject *w, int op)
802{
803 int c;
804
805 c = try_3way_compare(v, w);
806 if (c >= 2)
807 c = default_3way_compare(v, w);
808 if (c <= -2)
809 return NULL;
810 return convert_3way_to_object(op, c);
811}
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000812
Tim Petersc99213f2001-11-04 05:57:16 +0000813/* Do rich comparison on v and w. Return
814 NULL if error
815 Else a new reference to an object other than Py_NotImplemented, usually(?):
816 Py_True if v op w
817 Py_False if not (v op w)
818*/
Neil Schemenauerd38855c2001-01-21 16:25:18 +0000819static PyObject *
Guido van Rossume797ec12001-01-17 15:24:28 +0000820do_richcmp(PyObject *v, PyObject *w, int op)
821{
822 PyObject *res;
823
824 res = try_rich_compare(v, w, op);
825 if (res != Py_NotImplemented)
826 return res;
827 Py_DECREF(res);
828
829 return try_3way_to_rich_compare(v, w, op);
830}
831
Tim Petersc99213f2001-11-04 05:57:16 +0000832/* Return:
833 NULL for exception;
Tim Petersc99213f2001-11-04 05:57:16 +0000834 some object not equal to NotImplemented if it is implemented
835 (this latter object may not be a Boolean).
836*/
Guido van Rossume797ec12001-01-17 15:24:28 +0000837PyObject *
838PyObject_RichCompare(PyObject *v, PyObject *w, int op)
839{
840 PyObject *res;
841
842 assert(Py_LT <= op && op <= Py_GE);
Armin Rigo2b3eb402003-10-28 12:05:48 +0000843 if (Py_EnterRecursiveCall(" in cmp"))
844 return NULL;
Guido van Rossume797ec12001-01-17 15:24:28 +0000845
Armin Rigo2b3eb402003-10-28 12:05:48 +0000846 /* If the types are equal, and not old-style instances, try to
Tim Peters67754e92001-11-04 07:29:31 +0000847 get out cheap (don't bother with coercions etc.). */
848 if (v->ob_type == w->ob_type && !PyInstance_Check(v)) {
849 cmpfunc fcmp;
850 richcmpfunc frich = RICHCOMPARE(v->ob_type);
851 /* If the type has richcmp, try it first. try_rich_compare
852 tries it two-sided, which is not needed since we've a
853 single type only. */
854 if (frich != NULL) {
855 res = (*frich)(v, w, op);
856 if (res != Py_NotImplemented)
857 goto Done;
858 Py_DECREF(res);
859 }
860 /* No richcmp, or this particular richmp not implemented.
861 Try 3-way cmp. */
862 fcmp = v->ob_type->tp_compare;
863 if (fcmp != NULL) {
864 int c = (*fcmp)(v, w);
Guido van Rossuma4073002002-05-31 20:03:54 +0000865 c = adjust_tp_compare(c);
866 if (c == -2) {
Tim Peters67754e92001-11-04 07:29:31 +0000867 res = NULL;
868 goto Done;
869 }
870 res = convert_3way_to_object(op, c);
871 goto Done;
872 }
Guido van Rossum2ffbf6b2001-01-17 21:27:02 +0000873 }
Tim Peters67754e92001-11-04 07:29:31 +0000874
875 /* Fast path not taken, or couldn't deliver a useful result. */
876 res = do_richcmp(v, w, op);
877Done:
Armin Rigo2b3eb402003-10-28 12:05:48 +0000878 Py_LeaveRecursiveCall();
Guido van Rossume797ec12001-01-17 15:24:28 +0000879 return res;
880}
881
Tim Petersde9725f2001-05-05 10:06:17 +0000882/* Return -1 if error; 1 if v op w; 0 if not (v op w). */
Guido van Rossume797ec12001-01-17 15:24:28 +0000883int
884PyObject_RichCompareBool(PyObject *v, PyObject *w, int op)
885{
Raymond Hettinger93d44812004-03-21 17:01:44 +0000886 PyObject *res;
Guido van Rossume797ec12001-01-17 15:24:28 +0000887 int ok;
888
Raymond Hettinger93d44812004-03-21 17:01:44 +0000889 /* Quick result when objects are the same.
890 Guarantees that identity implies equality. */
891 if (v == w) {
892 if (op == Py_EQ)
893 return 1;
894 else if (op == Py_NE)
895 return 0;
896 }
897
898 res = PyObject_RichCompare(v, w, op);
Guido van Rossume797ec12001-01-17 15:24:28 +0000899 if (res == NULL)
900 return -1;
Guido van Rossum81912d42002-08-24 05:33:28 +0000901 if (PyBool_Check(res))
902 ok = (res == Py_True);
903 else
904 ok = PyObject_IsTrue(res);
Guido van Rossume797ec12001-01-17 15:24:28 +0000905 Py_DECREF(res);
906 return ok;
907}
Fred Drake13634cf2000-06-29 19:17:04 +0000908
909/* Set of hash utility functions to help maintaining the invariant that
Raymond Hettinger8183fa42004-03-21 17:35:06 +0000910 if a==b then hash(a)==hash(b)
Fred Drake13634cf2000-06-29 19:17:04 +0000911
912 All the utility functions (_Py_Hash*()) return "-1" to signify an error.
913*/
914
915long
Fred Drake100814d2000-07-09 15:48:49 +0000916_Py_HashDouble(double v)
Fred Drake13634cf2000-06-29 19:17:04 +0000917{
Tim Peters39dce292000-08-15 03:34:48 +0000918 double intpart, fractpart;
919 int expo;
920 long hipart;
921 long x; /* the final hash value */
922 /* This is designed so that Python numbers of different types
923 * that compare equal hash to the same value; otherwise comparisons
924 * of mapping keys will turn out weird.
925 */
926
Tim Peters39dce292000-08-15 03:34:48 +0000927 fractpart = modf(v, &intpart);
Tim Peters39dce292000-08-15 03:34:48 +0000928 if (fractpart == 0.0) {
929 /* This must return the same hash as an equal int or long. */
930 if (intpart > LONG_MAX || -intpart > LONG_MAX) {
931 /* Convert to long and use its hash. */
932 PyObject *plong; /* converted to Python long */
933 if (Py_IS_INFINITY(intpart))
934 /* can't convert to long int -- arbitrary */
935 v = v < 0 ? -271828.0 : 314159.0;
936 plong = PyLong_FromDouble(v);
937 if (plong == NULL)
938 return -1;
939 x = PyObject_Hash(plong);
940 Py_DECREF(plong);
941 return x;
942 }
943 /* Fits in a C long == a Python int, so is its own hash. */
944 x = (long)intpart;
945 if (x == -1)
946 x = -2;
947 return x;
948 }
949 /* The fractional part is non-zero, so we don't have to worry about
950 * making this match the hash of some other type.
951 * Use frexp to get at the bits in the double.
Fred Drake13634cf2000-06-29 19:17:04 +0000952 * Since the VAX D double format has 56 mantissa bits, which is the
953 * most of any double format in use, each of these parts may have as
954 * many as (but no more than) 56 significant bits.
Tim Peters39dce292000-08-15 03:34:48 +0000955 * So, assuming sizeof(long) >= 4, each part can be broken into two
956 * longs; frexp and multiplication are used to do that.
957 * Also, since the Cray double format has 15 exponent bits, which is
958 * the most of any double format in use, shifting the exponent field
959 * left by 15 won't overflow a long (again assuming sizeof(long) >= 4).
Fred Drake13634cf2000-06-29 19:17:04 +0000960 */
Tim Peters39dce292000-08-15 03:34:48 +0000961 v = frexp(v, &expo);
962 v *= 2147483648.0; /* 2**31 */
963 hipart = (long)v; /* take the top 32 bits */
964 v = (v - (double)hipart) * 2147483648.0; /* get the next 32 bits */
965 x = hipart + (long)v + (expo << 15);
966 if (x == -1)
967 x = -2;
968 return x;
Fred Drake13634cf2000-06-29 19:17:04 +0000969}
970
971long
Fred Drake100814d2000-07-09 15:48:49 +0000972_Py_HashPointer(void *p)
Fred Drake13634cf2000-06-29 19:17:04 +0000973{
974#if SIZEOF_LONG >= SIZEOF_VOID_P
975 return (long)p;
976#else
977 /* convert to a Python long and hash that */
978 PyObject* longobj;
979 long x;
Tim Peters803526b2002-07-07 05:13:56 +0000980
Fred Drake13634cf2000-06-29 19:17:04 +0000981 if ((longobj = PyLong_FromVoidPtr(p)) == NULL) {
982 x = -1;
983 goto finally;
984 }
985 x = PyObject_Hash(longobj);
Tim Peters803526b2002-07-07 05:13:56 +0000986
Fred Drake13634cf2000-06-29 19:17:04 +0000987finally:
988 Py_XDECREF(longobj);
989 return x;
990#endif
991}
992
993
Guido van Rossum9bfef441993-03-29 10:43:31 +0000994long
Fred Drake100814d2000-07-09 15:48:49 +0000995PyObject_Hash(PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000996{
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000997 PyTypeObject *tp = v->ob_type;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000998 if (tp->tp_hash != NULL)
999 return (*tp->tp_hash)(v);
Guido van Rossumd1f06b92001-01-24 22:14:43 +00001000 if (tp->tp_compare == NULL && RICHCOMPARE(tp) == NULL) {
Fred Drake13634cf2000-06-29 19:17:04 +00001001 return _Py_HashPointer(v); /* Use address as hash value */
1002 }
Guido van Rossum9bfef441993-03-29 10:43:31 +00001003 /* If there's a cmp but no hash defined, the object can't be hashed */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001004 PyErr_SetString(PyExc_TypeError, "unhashable type");
Guido van Rossum9bfef441993-03-29 10:43:31 +00001005 return -1;
1006}
1007
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001008PyObject *
Fred Drake100814d2000-07-09 15:48:49 +00001009PyObject_GetAttrString(PyObject *v, char *name)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001010{
Tim Peters6d6c1a32001-08-02 04:15:00 +00001011 PyObject *w, *res;
Guido van Rossumd8eb1b31996-08-09 20:52:03 +00001012
Tim Peters6d6c1a32001-08-02 04:15:00 +00001013 if (v->ob_type->tp_getattr != NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001014 return (*v->ob_type->tp_getattr)(v, name);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001015 w = PyString_InternFromString(name);
1016 if (w == NULL)
1017 return NULL;
1018 res = PyObject_GetAttr(v, w);
1019 Py_XDECREF(w);
1020 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001021}
1022
1023int
Fred Drake100814d2000-07-09 15:48:49 +00001024PyObject_HasAttrString(PyObject *v, char *name)
Guido van Rossumed18fdc1993-07-11 19:55:34 +00001025{
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001026 PyObject *res = PyObject_GetAttrString(v, name);
Guido van Rossumed18fdc1993-07-11 19:55:34 +00001027 if (res != NULL) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001028 Py_DECREF(res);
Guido van Rossumed18fdc1993-07-11 19:55:34 +00001029 return 1;
1030 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001031 PyErr_Clear();
Guido van Rossumed18fdc1993-07-11 19:55:34 +00001032 return 0;
1033}
1034
1035int
Fred Drake100814d2000-07-09 15:48:49 +00001036PyObject_SetAttrString(PyObject *v, char *name, PyObject *w)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001037{
Tim Peters6d6c1a32001-08-02 04:15:00 +00001038 PyObject *s;
1039 int res;
Guido van Rossumd8eb1b31996-08-09 20:52:03 +00001040
Tim Peters6d6c1a32001-08-02 04:15:00 +00001041 if (v->ob_type->tp_setattr != NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001042 return (*v->ob_type->tp_setattr)(v, name, w);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001043 s = PyString_InternFromString(name);
1044 if (s == NULL)
1045 return -1;
1046 res = PyObject_SetAttr(v, s, w);
1047 Py_XDECREF(s);
1048 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001049}
1050
Guido van Rossum98ff96a1997-05-20 18:34:44 +00001051PyObject *
Fred Drake100814d2000-07-09 15:48:49 +00001052PyObject_GetAttr(PyObject *v, PyObject *name)
Guido van Rossum98ff96a1997-05-20 18:34:44 +00001053{
Tim Peters6d6c1a32001-08-02 04:15:00 +00001054 PyTypeObject *tp = v->ob_type;
1055
Jeremy Hylton99a8f902000-06-23 14:36:32 +00001056 if (!PyString_Check(name)) {
Martin v. Löwis0c160a02002-03-15 13:40:30 +00001057#ifdef Py_USING_UNICODE
1058 /* The Unicode to string conversion is done here because the
1059 existing tp_getattro slots expect a string object as name
1060 and we wouldn't want to break those. */
1061 if (PyUnicode_Check(name)) {
1062 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
1063 if (name == NULL)
1064 return NULL;
1065 }
1066 else
1067#endif
1068 {
1069 PyErr_SetString(PyExc_TypeError,
1070 "attribute name must be string");
1071 return NULL;
1072 }
Jeremy Hylton99a8f902000-06-23 14:36:32 +00001073 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001074 if (tp->tp_getattro != NULL)
1075 return (*tp->tp_getattro)(v, name);
1076 if (tp->tp_getattr != NULL)
1077 return (*tp->tp_getattr)(v, PyString_AS_STRING(name));
1078 PyErr_Format(PyExc_AttributeError,
1079 "'%.50s' object has no attribute '%.400s'",
1080 tp->tp_name, PyString_AS_STRING(name));
1081 return NULL;
Guido van Rossum98ff96a1997-05-20 18:34:44 +00001082}
1083
1084int
Fred Drake100814d2000-07-09 15:48:49 +00001085PyObject_HasAttr(PyObject *v, PyObject *name)
Guido van Rossum98ff96a1997-05-20 18:34:44 +00001086{
1087 PyObject *res = PyObject_GetAttr(v, name);
1088 if (res != NULL) {
1089 Py_DECREF(res);
1090 return 1;
1091 }
1092 PyErr_Clear();
1093 return 0;
1094}
1095
1096int
Fred Drake100814d2000-07-09 15:48:49 +00001097PyObject_SetAttr(PyObject *v, PyObject *name, PyObject *value)
Guido van Rossum98ff96a1997-05-20 18:34:44 +00001098{
Tim Peters6d6c1a32001-08-02 04:15:00 +00001099 PyTypeObject *tp = v->ob_type;
Guido van Rossum98ff96a1997-05-20 18:34:44 +00001100 int err;
Marc-André Lemburge44e5072000-09-18 16:20:57 +00001101
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001102 if (!PyString_Check(name)){
Martin v. Löwis0c160a02002-03-15 13:40:30 +00001103#ifdef Py_USING_UNICODE
1104 /* The Unicode to string conversion is done here because the
1105 existing tp_setattro slots expect a string object as name
1106 and we wouldn't want to break those. */
1107 if (PyUnicode_Check(name)) {
1108 name = PyUnicode_AsEncodedString(name, NULL, NULL);
1109 if (name == NULL)
1110 return -1;
1111 }
Tim Peters803526b2002-07-07 05:13:56 +00001112 else
Martin v. Löwis0c160a02002-03-15 13:40:30 +00001113#endif
1114 {
1115 PyErr_SetString(PyExc_TypeError,
1116 "attribute name must be string");
1117 return -1;
1118 }
Jeremy Hylton99a8f902000-06-23 14:36:32 +00001119 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001120 else
1121 Py_INCREF(name);
1122
1123 PyString_InternInPlace(&name);
1124 if (tp->tp_setattro != NULL) {
1125 err = (*tp->tp_setattro)(v, name, value);
1126 Py_DECREF(name);
1127 return err;
Marc-André Lemburge44e5072000-09-18 16:20:57 +00001128 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001129 if (tp->tp_setattr != NULL) {
1130 err = (*tp->tp_setattr)(v, PyString_AS_STRING(name), value);
1131 Py_DECREF(name);
1132 return err;
1133 }
Guido van Rossum98ff96a1997-05-20 18:34:44 +00001134 Py_DECREF(name);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001135 if (tp->tp_getattr == NULL && tp->tp_getattro == NULL)
1136 PyErr_Format(PyExc_TypeError,
1137 "'%.100s' object has no attributes "
1138 "(%s .%.100s)",
1139 tp->tp_name,
1140 value==NULL ? "del" : "assign to",
1141 PyString_AS_STRING(name));
1142 else
1143 PyErr_Format(PyExc_TypeError,
1144 "'%.100s' object has only read-only attributes "
1145 "(%s .%.100s)",
1146 tp->tp_name,
1147 value==NULL ? "del" : "assign to",
1148 PyString_AS_STRING(name));
1149 return -1;
1150}
1151
1152/* Helper to get a pointer to an object's __dict__ slot, if any */
1153
1154PyObject **
1155_PyObject_GetDictPtr(PyObject *obj)
1156{
Tim Peters6d6c1a32001-08-02 04:15:00 +00001157 long dictoffset;
1158 PyTypeObject *tp = obj->ob_type;
1159
1160 if (!(tp->tp_flags & Py_TPFLAGS_HAVE_CLASS))
1161 return NULL;
1162 dictoffset = tp->tp_dictoffset;
1163 if (dictoffset == 0)
1164 return NULL;
1165 if (dictoffset < 0) {
Guido van Rossum2eb0b872002-03-01 22:24:49 +00001166 int tsize;
1167 size_t size;
1168
1169 tsize = ((PyVarObject *)obj)->ob_size;
1170 if (tsize < 0)
1171 tsize = -tsize;
1172 size = _PyObject_VAR_SIZE(tp, tsize);
1173
Tim Peters6d483d32001-10-06 21:27:34 +00001174 dictoffset += (long)size;
1175 assert(dictoffset > 0);
1176 assert(dictoffset % SIZEOF_VOID_P == 0);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001177 }
1178 return (PyObject **) ((char *)obj + dictoffset);
1179}
1180
1181/* Generic GetAttr functions - put these in your tp_[gs]etattro slot */
1182
1183PyObject *
Raymond Hettinger1da1dbf2003-03-17 19:46:11 +00001184PyObject_SelfIter(PyObject *obj)
Raymond Hettinger01538262003-03-17 08:24:35 +00001185{
1186 Py_INCREF(obj);
1187 return obj;
1188}
1189
1190PyObject *
Tim Peters6d6c1a32001-08-02 04:15:00 +00001191PyObject_GenericGetAttr(PyObject *obj, PyObject *name)
1192{
1193 PyTypeObject *tp = obj->ob_type;
Guido van Rossum056fbf42002-08-19 19:22:50 +00001194 PyObject *descr = NULL;
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001195 PyObject *res = NULL;
Tim Peters6d6c1a32001-08-02 04:15:00 +00001196 descrgetfunc f;
Guido van Rossumc66ff442002-08-19 16:50:48 +00001197 long dictoffset;
Tim Peters6d6c1a32001-08-02 04:15:00 +00001198 PyObject **dictptr;
1199
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001200 if (!PyString_Check(name)){
Martin v. Löwis0c160a02002-03-15 13:40:30 +00001201#ifdef Py_USING_UNICODE
1202 /* The Unicode to string conversion is done here because the
1203 existing tp_setattro slots expect a string object as name
1204 and we wouldn't want to break those. */
1205 if (PyUnicode_Check(name)) {
1206 name = PyUnicode_AsEncodedString(name, NULL, NULL);
1207 if (name == NULL)
1208 return NULL;
1209 }
Tim Peters803526b2002-07-07 05:13:56 +00001210 else
Martin v. Löwis0c160a02002-03-15 13:40:30 +00001211#endif
1212 {
1213 PyErr_SetString(PyExc_TypeError,
1214 "attribute name must be string");
1215 return NULL;
1216 }
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001217 }
1218 else
1219 Py_INCREF(name);
1220
Tim Peters6d6c1a32001-08-02 04:15:00 +00001221 if (tp->tp_dict == NULL) {
Guido van Rossum528b7eb2001-08-07 17:24:28 +00001222 if (PyType_Ready(tp) < 0)
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001223 goto done;
Tim Peters6d6c1a32001-08-02 04:15:00 +00001224 }
1225
Guido van Rossum056fbf42002-08-19 19:22:50 +00001226 /* Inline _PyType_Lookup */
1227 {
1228 int i, n;
1229 PyObject *mro, *base, *dict;
1230
1231 /* Look in tp_dict of types in MRO */
1232 mro = tp->tp_mro;
1233 assert(mro != NULL);
1234 assert(PyTuple_Check(mro));
1235 n = PyTuple_GET_SIZE(mro);
1236 for (i = 0; i < n; i++) {
1237 base = PyTuple_GET_ITEM(mro, i);
1238 if (PyClass_Check(base))
1239 dict = ((PyClassObject *)base)->cl_dict;
1240 else {
1241 assert(PyType_Check(base));
1242 dict = ((PyTypeObject *)base)->tp_dict;
1243 }
1244 assert(dict && PyDict_Check(dict));
1245 descr = PyDict_GetItem(dict, name);
1246 if (descr != NULL)
1247 break;
1248 }
1249 }
1250
Michael W. Hudsonb2c7de42003-08-15 13:07:47 +00001251 Py_XINCREF(descr);
1252
Tim Peters6d6c1a32001-08-02 04:15:00 +00001253 f = NULL;
Guido van Rossum90195e22003-02-19 03:19:29 +00001254 if (descr != NULL &&
1255 PyType_HasFeature(descr->ob_type, Py_TPFLAGS_HAVE_CLASS)) {
Tim Peters6d6c1a32001-08-02 04:15:00 +00001256 f = descr->ob_type->tp_descr_get;
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001257 if (f != NULL && PyDescr_IsData(descr)) {
1258 res = f(descr, obj, (PyObject *)obj->ob_type);
Michael W. Hudsonb2c7de42003-08-15 13:07:47 +00001259 Py_DECREF(descr);
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001260 goto done;
1261 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001262 }
1263
Guido van Rossumc66ff442002-08-19 16:50:48 +00001264 /* Inline _PyObject_GetDictPtr */
1265 dictoffset = tp->tp_dictoffset;
1266 if (dictoffset != 0) {
1267 PyObject *dict;
1268 if (dictoffset < 0) {
1269 int tsize;
1270 size_t size;
1271
1272 tsize = ((PyVarObject *)obj)->ob_size;
1273 if (tsize < 0)
1274 tsize = -tsize;
1275 size = _PyObject_VAR_SIZE(tp, tsize);
1276
1277 dictoffset += (long)size;
1278 assert(dictoffset > 0);
1279 assert(dictoffset % SIZEOF_VOID_P == 0);
1280 }
1281 dictptr = (PyObject **) ((char *)obj + dictoffset);
1282 dict = *dictptr;
Tim Peters6d6c1a32001-08-02 04:15:00 +00001283 if (dict != NULL) {
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001284 res = PyDict_GetItem(dict, name);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001285 if (res != NULL) {
1286 Py_INCREF(res);
Michael W. Hudsonb2c7de42003-08-15 13:07:47 +00001287 Py_XDECREF(descr);
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001288 goto done;
Tim Peters6d6c1a32001-08-02 04:15:00 +00001289 }
1290 }
1291 }
1292
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001293 if (f != NULL) {
1294 res = f(descr, obj, (PyObject *)obj->ob_type);
Michael W. Hudsonb2c7de42003-08-15 13:07:47 +00001295 Py_DECREF(descr);
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001296 goto done;
1297 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001298
1299 if (descr != NULL) {
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001300 res = descr;
Michael W. Hudsonb2c7de42003-08-15 13:07:47 +00001301 /* descr was already increfed above */
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001302 goto done;
Tim Peters6d6c1a32001-08-02 04:15:00 +00001303 }
1304
1305 PyErr_Format(PyExc_AttributeError,
1306 "'%.50s' object has no attribute '%.400s'",
1307 tp->tp_name, PyString_AS_STRING(name));
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001308 done:
1309 Py_DECREF(name);
1310 return res;
Tim Peters6d6c1a32001-08-02 04:15:00 +00001311}
1312
1313int
1314PyObject_GenericSetAttr(PyObject *obj, PyObject *name, PyObject *value)
1315{
1316 PyTypeObject *tp = obj->ob_type;
1317 PyObject *descr;
1318 descrsetfunc f;
1319 PyObject **dictptr;
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001320 int res = -1;
1321
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001322 if (!PyString_Check(name)){
Martin v. Löwis0c160a02002-03-15 13:40:30 +00001323#ifdef Py_USING_UNICODE
1324 /* The Unicode to string conversion is done here because the
1325 existing tp_setattro slots expect a string object as name
1326 and we wouldn't want to break those. */
1327 if (PyUnicode_Check(name)) {
1328 name = PyUnicode_AsEncodedString(name, NULL, NULL);
1329 if (name == NULL)
1330 return -1;
1331 }
Tim Peters803526b2002-07-07 05:13:56 +00001332 else
Martin v. Löwis0c160a02002-03-15 13:40:30 +00001333#endif
1334 {
1335 PyErr_SetString(PyExc_TypeError,
1336 "attribute name must be string");
1337 return -1;
1338 }
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001339 }
1340 else
1341 Py_INCREF(name);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001342
1343 if (tp->tp_dict == NULL) {
Guido van Rossum528b7eb2001-08-07 17:24:28 +00001344 if (PyType_Ready(tp) < 0)
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001345 goto done;
Tim Peters6d6c1a32001-08-02 04:15:00 +00001346 }
1347
1348 descr = _PyType_Lookup(tp, name);
1349 f = NULL;
Guido van Rossum90195e22003-02-19 03:19:29 +00001350 if (descr != NULL &&
1351 PyType_HasFeature(descr->ob_type, Py_TPFLAGS_HAVE_CLASS)) {
Tim Peters6d6c1a32001-08-02 04:15:00 +00001352 f = descr->ob_type->tp_descr_set;
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001353 if (f != NULL && PyDescr_IsData(descr)) {
1354 res = f(descr, obj, value);
1355 goto done;
1356 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001357 }
1358
1359 dictptr = _PyObject_GetDictPtr(obj);
1360 if (dictptr != NULL) {
1361 PyObject *dict = *dictptr;
1362 if (dict == NULL && value != NULL) {
1363 dict = PyDict_New();
1364 if (dict == NULL)
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001365 goto done;
Tim Peters6d6c1a32001-08-02 04:15:00 +00001366 *dictptr = dict;
1367 }
1368 if (dict != NULL) {
Tim Peters6d6c1a32001-08-02 04:15:00 +00001369 if (value == NULL)
1370 res = PyDict_DelItem(dict, name);
1371 else
1372 res = PyDict_SetItem(dict, name, value);
1373 if (res < 0 && PyErr_ExceptionMatches(PyExc_KeyError))
1374 PyErr_SetObject(PyExc_AttributeError, name);
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001375 goto done;
Tim Peters6d6c1a32001-08-02 04:15:00 +00001376 }
1377 }
1378
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001379 if (f != NULL) {
1380 res = f(descr, obj, value);
1381 goto done;
1382 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001383
1384 if (descr == NULL) {
1385 PyErr_Format(PyExc_AttributeError,
1386 "'%.50s' object has no attribute '%.400s'",
1387 tp->tp_name, PyString_AS_STRING(name));
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001388 goto done;
Tim Peters6d6c1a32001-08-02 04:15:00 +00001389 }
1390
1391 PyErr_Format(PyExc_AttributeError,
1392 "'%.50s' object attribute '%.400s' is read-only",
1393 tp->tp_name, PyString_AS_STRING(name));
Guido van Rossumebca9fc2001-12-04 15:54:53 +00001394 done:
1395 Py_DECREF(name);
1396 return res;
Guido van Rossum98ff96a1997-05-20 18:34:44 +00001397}
1398
Guido van Rossum6ac258d1993-05-12 08:24:20 +00001399/* Test a value used as condition, e.g., in a for or if statement.
1400 Return -1 if an error occurred */
1401
1402int
Fred Drake100814d2000-07-09 15:48:49 +00001403PyObject_IsTrue(PyObject *v)
Guido van Rossum6ac258d1993-05-12 08:24:20 +00001404{
1405 int res;
Guido van Rossum6248f442002-08-24 06:31:34 +00001406 if (v == Py_True)
1407 return 1;
1408 if (v == Py_False)
1409 return 0;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001410 if (v == Py_None)
Neal Norwitz51290d32002-06-13 21:32:44 +00001411 return 0;
Guido van Rossum1c4f4581998-05-22 00:53:24 +00001412 else if (v->ob_type->tp_as_number != NULL &&
1413 v->ob_type->tp_as_number->nb_nonzero != NULL)
Guido van Rossum6ac258d1993-05-12 08:24:20 +00001414 res = (*v->ob_type->tp_as_number->nb_nonzero)(v);
Guido van Rossum1c4f4581998-05-22 00:53:24 +00001415 else if (v->ob_type->tp_as_mapping != NULL &&
1416 v->ob_type->tp_as_mapping->mp_length != NULL)
Guido van Rossum6ac258d1993-05-12 08:24:20 +00001417 res = (*v->ob_type->tp_as_mapping->mp_length)(v);
Guido van Rossum1c4f4581998-05-22 00:53:24 +00001418 else if (v->ob_type->tp_as_sequence != NULL &&
1419 v->ob_type->tp_as_sequence->sq_length != NULL)
Guido van Rossum6ac258d1993-05-12 08:24:20 +00001420 res = (*v->ob_type->tp_as_sequence->sq_length)(v);
1421 else
Neal Norwitz51290d32002-06-13 21:32:44 +00001422 return 1;
1423 return (res > 0) ? 1 : res;
Guido van Rossum6ac258d1993-05-12 08:24:20 +00001424}
1425
Tim Peters803526b2002-07-07 05:13:56 +00001426/* equivalent of 'not v'
Guido van Rossumc3d3f961998-04-09 17:53:59 +00001427 Return -1 if an error occurred */
1428
1429int
Fred Drake100814d2000-07-09 15:48:49 +00001430PyObject_Not(PyObject *v)
Guido van Rossumc3d3f961998-04-09 17:53:59 +00001431{
1432 int res;
1433 res = PyObject_IsTrue(v);
1434 if (res < 0)
1435 return res;
1436 return res == 0;
1437}
1438
Guido van Rossum5524a591995-01-10 15:26:20 +00001439/* Coerce two numeric types to the "larger" one.
1440 Increment the reference count on each argument.
Guido van Rossume797ec12001-01-17 15:24:28 +00001441 Return value:
1442 -1 if an error occurred;
1443 0 if the coercion succeeded (and then the reference counts are increased);
1444 1 if no coercion is possible (and no error is raised).
Guido van Rossum5524a591995-01-10 15:26:20 +00001445*/
Guido van Rossum5524a591995-01-10 15:26:20 +00001446int
Fred Drake100814d2000-07-09 15:48:49 +00001447PyNumber_CoerceEx(PyObject **pv, PyObject **pw)
Guido van Rossum5524a591995-01-10 15:26:20 +00001448{
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001449 register PyObject *v = *pv;
1450 register PyObject *w = *pw;
Guido van Rossum5524a591995-01-10 15:26:20 +00001451 int res;
1452
Guido van Rossum517c7d42002-04-26 02:49:14 +00001453 /* Shortcut only for old-style types */
1454 if (v->ob_type == w->ob_type &&
1455 !PyType_HasFeature(v->ob_type, Py_TPFLAGS_CHECKTYPES))
1456 {
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001457 Py_INCREF(v);
1458 Py_INCREF(w);
Guido van Rossum5524a591995-01-10 15:26:20 +00001459 return 0;
1460 }
1461 if (v->ob_type->tp_as_number && v->ob_type->tp_as_number->nb_coerce) {
1462 res = (*v->ob_type->tp_as_number->nb_coerce)(pv, pw);
1463 if (res <= 0)
1464 return res;
1465 }
1466 if (w->ob_type->tp_as_number && w->ob_type->tp_as_number->nb_coerce) {
1467 res = (*w->ob_type->tp_as_number->nb_coerce)(pw, pv);
1468 if (res <= 0)
1469 return res;
1470 }
Guido van Rossum242c6421997-11-19 16:03:17 +00001471 return 1;
1472}
1473
Guido van Rossume797ec12001-01-17 15:24:28 +00001474/* Coerce two numeric types to the "larger" one.
1475 Increment the reference count on each argument.
1476 Return -1 and raise an exception if no coercion is possible
1477 (and then no reference count is incremented).
1478*/
Guido van Rossum242c6421997-11-19 16:03:17 +00001479int
Fred Drake100814d2000-07-09 15:48:49 +00001480PyNumber_Coerce(PyObject **pv, PyObject **pw)
Guido van Rossum242c6421997-11-19 16:03:17 +00001481{
1482 int err = PyNumber_CoerceEx(pv, pw);
1483 if (err <= 0)
1484 return err;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001485 PyErr_SetString(PyExc_TypeError, "number coercion failed");
Guido van Rossum5524a591995-01-10 15:26:20 +00001486 return -1;
1487}
1488
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001489
Guido van Rossum49b11fe1995-01-26 00:38:22 +00001490/* Test whether an object can be called */
1491
1492int
Fred Drake100814d2000-07-09 15:48:49 +00001493PyCallable_Check(PyObject *x)
Guido van Rossum49b11fe1995-01-26 00:38:22 +00001494{
1495 if (x == NULL)
1496 return 0;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001497 if (PyInstance_Check(x)) {
1498 PyObject *call = PyObject_GetAttrString(x, "__call__");
Guido van Rossum49b11fe1995-01-26 00:38:22 +00001499 if (call == NULL) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001500 PyErr_Clear();
Guido van Rossum49b11fe1995-01-26 00:38:22 +00001501 return 0;
1502 }
1503 /* Could test recursively but don't, for fear of endless
1504 recursion if some joker sets self.__call__ = self */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001505 Py_DECREF(call);
Guido van Rossum49b11fe1995-01-26 00:38:22 +00001506 return 1;
1507 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00001508 else {
1509 return x->ob_type->tp_call != NULL;
1510 }
Guido van Rossum49b11fe1995-01-26 00:38:22 +00001511}
1512
Tim Peters7eea37e2001-09-04 22:08:56 +00001513/* Helper for PyObject_Dir.
1514 Merge the __dict__ of aclass into dict, and recursively also all
1515 the __dict__s of aclass's base classes. The order of merging isn't
1516 defined, as it's expected that only the final set of dict keys is
1517 interesting.
1518 Return 0 on success, -1 on error.
1519*/
1520
1521static int
1522merge_class_dict(PyObject* dict, PyObject* aclass)
1523{
1524 PyObject *classdict;
1525 PyObject *bases;
1526
1527 assert(PyDict_Check(dict));
1528 assert(aclass);
1529
1530 /* Merge in the type's dict (if any). */
1531 classdict = PyObject_GetAttrString(aclass, "__dict__");
1532 if (classdict == NULL)
1533 PyErr_Clear();
1534 else {
1535 int status = PyDict_Update(dict, classdict);
1536 Py_DECREF(classdict);
1537 if (status < 0)
1538 return -1;
1539 }
1540
1541 /* Recursively merge in the base types' (if any) dicts. */
1542 bases = PyObject_GetAttrString(aclass, "__bases__");
Tim Petersbc7e8632001-09-16 20:33:22 +00001543 if (bases == NULL)
1544 PyErr_Clear();
1545 else {
Guido van Rossum44022412002-05-13 18:29:46 +00001546 /* We have no guarantee that bases is a real tuple */
Tim Peters7eea37e2001-09-04 22:08:56 +00001547 int i, n;
Guido van Rossum44022412002-05-13 18:29:46 +00001548 n = PySequence_Size(bases); /* This better be right */
1549 if (n < 0)
1550 PyErr_Clear();
1551 else {
1552 for (i = 0; i < n; i++) {
Tim Peters18e70832003-02-05 19:35:19 +00001553 int status;
Guido van Rossum44022412002-05-13 18:29:46 +00001554 PyObject *base = PySequence_GetItem(bases, i);
1555 if (base == NULL) {
1556 Py_DECREF(bases);
1557 return -1;
1558 }
Tim Peters18e70832003-02-05 19:35:19 +00001559 status = merge_class_dict(dict, base);
1560 Py_DECREF(base);
1561 if (status < 0) {
Guido van Rossum44022412002-05-13 18:29:46 +00001562 Py_DECREF(bases);
1563 return -1;
1564 }
Tim Peters7eea37e2001-09-04 22:08:56 +00001565 }
1566 }
1567 Py_DECREF(bases);
1568 }
1569 return 0;
1570}
1571
Tim Peters305b5852001-09-17 02:38:46 +00001572/* Helper for PyObject_Dir.
1573 If obj has an attr named attrname that's a list, merge its string
1574 elements into keys of dict.
1575 Return 0 on success, -1 on error. Errors due to not finding the attr,
1576 or the attr not being a list, are suppressed.
1577*/
1578
1579static int
1580merge_list_attr(PyObject* dict, PyObject* obj, char *attrname)
1581{
1582 PyObject *list;
1583 int result = 0;
1584
1585 assert(PyDict_Check(dict));
1586 assert(obj);
1587 assert(attrname);
1588
1589 list = PyObject_GetAttrString(obj, attrname);
1590 if (list == NULL)
1591 PyErr_Clear();
1592
1593 else if (PyList_Check(list)) {
1594 int i;
1595 for (i = 0; i < PyList_GET_SIZE(list); ++i) {
1596 PyObject *item = PyList_GET_ITEM(list, i);
1597 if (PyString_Check(item)) {
1598 result = PyDict_SetItem(dict, item, Py_None);
1599 if (result < 0)
1600 break;
1601 }
1602 }
1603 }
1604
1605 Py_XDECREF(list);
1606 return result;
1607}
1608
Tim Peters7eea37e2001-09-04 22:08:56 +00001609/* Like __builtin__.dir(arg). See bltinmodule.c's builtin_dir for the
1610 docstring, which should be kept in synch with this implementation. */
1611
1612PyObject *
1613PyObject_Dir(PyObject *arg)
1614{
1615 /* Set exactly one of these non-NULL before the end. */
1616 PyObject *result = NULL; /* result list */
1617 PyObject *masterdict = NULL; /* result is masterdict.keys() */
1618
1619 /* If NULL arg, return the locals. */
1620 if (arg == NULL) {
1621 PyObject *locals = PyEval_GetLocals();
1622 if (locals == NULL)
1623 goto error;
Raymond Hettinger214b1c32004-07-02 06:41:07 +00001624 result = PyMapping_Keys(locals);
Tim Peters7eea37e2001-09-04 22:08:56 +00001625 if (result == NULL)
1626 goto error;
1627 }
1628
1629 /* Elif this is some form of module, we only want its dict. */
Guido van Rossum8dbd3d82001-09-10 18:27:43 +00001630 else if (PyModule_Check(arg)) {
Tim Peters7eea37e2001-09-04 22:08:56 +00001631 masterdict = PyObject_GetAttrString(arg, "__dict__");
1632 if (masterdict == NULL)
1633 goto error;
Guido van Rossum8dbd3d82001-09-10 18:27:43 +00001634 if (!PyDict_Check(masterdict)) {
1635 PyErr_SetString(PyExc_TypeError,
1636 "module.__dict__ is not a dictionary");
1637 goto error;
1638 }
Tim Peters7eea37e2001-09-04 22:08:56 +00001639 }
1640
1641 /* Elif some form of type or class, grab its dict and its bases.
1642 We deliberately don't suck up its __class__, as methods belonging
1643 to the metaclass would probably be more confusing than helpful. */
1644 else if (PyType_Check(arg) || PyClass_Check(arg)) {
1645 masterdict = PyDict_New();
1646 if (masterdict == NULL)
1647 goto error;
1648 if (merge_class_dict(masterdict, arg) < 0)
1649 goto error;
1650 }
1651
1652 /* Else look at its dict, and the attrs reachable from its class. */
1653 else {
1654 PyObject *itsclass;
1655 /* Create a dict to start with. CAUTION: Not everything
1656 responding to __dict__ returns a dict! */
1657 masterdict = PyObject_GetAttrString(arg, "__dict__");
1658 if (masterdict == NULL) {
1659 PyErr_Clear();
1660 masterdict = PyDict_New();
1661 }
1662 else if (!PyDict_Check(masterdict)) {
1663 Py_DECREF(masterdict);
1664 masterdict = PyDict_New();
1665 }
1666 else {
1667 /* The object may have returned a reference to its
1668 dict, so copy it to avoid mutating it. */
1669 PyObject *temp = PyDict_Copy(masterdict);
1670 Py_DECREF(masterdict);
1671 masterdict = temp;
1672 }
1673 if (masterdict == NULL)
1674 goto error;
1675
Tim Peters305b5852001-09-17 02:38:46 +00001676 /* Merge in __members__ and __methods__ (if any).
1677 XXX Would like this to go away someday; for now, it's
1678 XXX needed to get at im_self etc of method objects. */
1679 if (merge_list_attr(masterdict, arg, "__members__") < 0)
1680 goto error;
1681 if (merge_list_attr(masterdict, arg, "__methods__") < 0)
1682 goto error;
1683
Tim Peters7eea37e2001-09-04 22:08:56 +00001684 /* Merge in attrs reachable from its class.
1685 CAUTION: Not all objects have a __class__ attr. */
1686 itsclass = PyObject_GetAttrString(arg, "__class__");
1687 if (itsclass == NULL)
1688 PyErr_Clear();
1689 else {
1690 int status = merge_class_dict(masterdict, itsclass);
1691 Py_DECREF(itsclass);
1692 if (status < 0)
1693 goto error;
1694 }
1695 }
1696
1697 assert((result == NULL) ^ (masterdict == NULL));
1698 if (masterdict != NULL) {
1699 /* The result comes from its keys. */
1700 assert(result == NULL);
1701 result = PyDict_Keys(masterdict);
1702 if (result == NULL)
1703 goto error;
1704 }
1705
1706 assert(result);
1707 if (PyList_Sort(result) != 0)
1708 goto error;
1709 else
1710 goto normal_return;
1711
1712 error:
1713 Py_XDECREF(result);
1714 result = NULL;
1715 /* fall through */
1716 normal_return:
1717 Py_XDECREF(masterdict);
1718 return result;
1719}
Guido van Rossum49b11fe1995-01-26 00:38:22 +00001720
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001721/*
1722NoObject is usable as a non-NULL undefined value, used by the macro None.
1723There is (and should be!) no way to create other objects of this type,
Guido van Rossum3f5da241990-12-20 15:06:42 +00001724so there is exactly one (which is indestructible, by the way).
Guido van Rossumba21a492001-08-16 08:17:26 +00001725(XXX This type and the type of NotImplemented below should be unified.)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001726*/
1727
Guido van Rossum0c182a11992-03-27 17:26:13 +00001728/* ARGSUSED */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001729static PyObject *
Fred Drake100814d2000-07-09 15:48:49 +00001730none_repr(PyObject *op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001731{
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001732 return PyString_FromString("None");
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001733}
1734
Barry Warsaw9bf16442001-01-23 16:24:35 +00001735/* ARGUSED */
1736static void
Tim Peters803526b2002-07-07 05:13:56 +00001737none_dealloc(PyObject* ignore)
Barry Warsaw9bf16442001-01-23 16:24:35 +00001738{
1739 /* This should never get called, but we also don't want to SEGV if
1740 * we accidently decref None out of existance.
1741 */
Martin v. Löwis3f19b102002-08-07 16:21:51 +00001742 Py_FatalError("deallocating None");
Barry Warsaw9bf16442001-01-23 16:24:35 +00001743}
1744
1745
Guido van Rossumba21a492001-08-16 08:17:26 +00001746static PyTypeObject PyNone_Type = {
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001747 PyObject_HEAD_INIT(&PyType_Type)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001748 0,
Guido van Rossumba21a492001-08-16 08:17:26 +00001749 "NoneType",
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001750 0,
1751 0,
Barry Warsaw9bf16442001-01-23 16:24:35 +00001752 (destructor)none_dealloc, /*tp_dealloc*/ /*never called*/
Guido van Rossum7066dd71992-09-17 17:54:56 +00001753 0, /*tp_print*/
Guido van Rossum3f5da241990-12-20 15:06:42 +00001754 0, /*tp_getattr*/
1755 0, /*tp_setattr*/
1756 0, /*tp_compare*/
Guido van Rossum1d5735e1994-08-30 08:27:36 +00001757 (reprfunc)none_repr, /*tp_repr*/
Guido van Rossum3f5da241990-12-20 15:06:42 +00001758 0, /*tp_as_number*/
1759 0, /*tp_as_sequence*/
1760 0, /*tp_as_mapping*/
Guido van Rossum9bfef441993-03-29 10:43:31 +00001761 0, /*tp_hash */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001762};
1763
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001764PyObject _Py_NoneStruct = {
Guido van Rossumba21a492001-08-16 08:17:26 +00001765 PyObject_HEAD_INIT(&PyNone_Type)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001766};
1767
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +00001768/* NotImplemented is an object that can be used to signal that an
1769 operation is not implemented for the given type combination. */
1770
1771static PyObject *
1772NotImplemented_repr(PyObject *op)
1773{
1774 return PyString_FromString("NotImplemented");
1775}
1776
1777static PyTypeObject PyNotImplemented_Type = {
1778 PyObject_HEAD_INIT(&PyType_Type)
1779 0,
Guido van Rossumba21a492001-08-16 08:17:26 +00001780 "NotImplementedType",
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +00001781 0,
1782 0,
Barry Warsaw9bf16442001-01-23 16:24:35 +00001783 (destructor)none_dealloc, /*tp_dealloc*/ /*never called*/
Neil Schemenauer5ed85ec2001-01-04 01:48:10 +00001784 0, /*tp_print*/
1785 0, /*tp_getattr*/
1786 0, /*tp_setattr*/
1787 0, /*tp_compare*/
1788 (reprfunc)NotImplemented_repr, /*tp_repr*/
1789 0, /*tp_as_number*/
1790 0, /*tp_as_sequence*/
1791 0, /*tp_as_mapping*/
1792 0, /*tp_hash */
1793};
1794
1795PyObject _Py_NotImplementedStruct = {
1796 PyObject_HEAD_INIT(&PyNotImplemented_Type)
1797};
1798
Guido van Rossumba21a492001-08-16 08:17:26 +00001799void
1800_Py_ReadyTypes(void)
1801{
1802 if (PyType_Ready(&PyType_Type) < 0)
1803 Py_FatalError("Can't initialize 'type'");
1804
Fred Drake0a4dd392004-07-02 18:57:45 +00001805 if (PyType_Ready(&_PyWeakref_RefType) < 0)
1806 Py_FatalError("Can't initialize 'weakref'");
1807
Guido van Rossum77f6a652002-04-03 22:41:51 +00001808 if (PyType_Ready(&PyBool_Type) < 0)
1809 Py_FatalError("Can't initialize 'bool'");
1810
Guido van Rossumcacfc072002-05-24 19:01:59 +00001811 if (PyType_Ready(&PyString_Type) < 0)
1812 Py_FatalError("Can't initialize 'str'");
1813
Guido van Rossumba21a492001-08-16 08:17:26 +00001814 if (PyType_Ready(&PyList_Type) < 0)
1815 Py_FatalError("Can't initialize 'list'");
1816
1817 if (PyType_Ready(&PyNone_Type) < 0)
1818 Py_FatalError("Can't initialize type(None)");
1819
1820 if (PyType_Ready(&PyNotImplemented_Type) < 0)
1821 Py_FatalError("Can't initialize type(NotImplemented)");
1822}
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{
Tim Peters34592512002-07-11 06:23:50 +00001830 _Py_INC_REFTOTAL;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001831 op->ob_refcnt = 1;
Tim Peters7571a0f2003-03-23 17:52:28 +00001832 _Py_AddToAllObjects(op, 1);
Tim Peters34592512002-07-11 06:23:50 +00001833 _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
Guido van Rossum4c08d552000-03-10 22:55:18 +00001840 register PyObject *p;
Guido van Rossumbffd6832000-01-20 22:32:56 +00001841#endif
Guido van Rossumd7047b31995-01-02 19:07:15 +00001842 if (op->ob_refcnt < 0)
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001843 Py_FatalError("UNREF negative refcnt");
Guido van Rossum2e8f6141992-09-03 20:32:55 +00001844 if (op == &refchain ||
Guido van Rossumd7047b31995-01-02 19:07:15 +00001845 op->_ob_prev->_ob_next != op || op->_ob_next->_ob_prev != op)
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001846 Py_FatalError("UNREF invalid object");
Guido van Rossum2e8f6141992-09-03 20:32:55 +00001847#ifdef SLOW_UNREF_CHECK
Guido van Rossum3f5da241990-12-20 15:06:42 +00001848 for (p = refchain._ob_next; p != &refchain; p = p->_ob_next) {
1849 if (p == op)
1850 break;
1851 }
Guido van Rossumd7047b31995-01-02 19:07:15 +00001852 if (p == &refchain) /* Not found */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001853 Py_FatalError("UNREF unknown object");
Guido van Rossum2e8f6141992-09-03 20:32:55 +00001854#endif
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001855 op->_ob_next->_ob_prev = op->_ob_prev;
1856 op->_ob_prev->_ob_next = op->_ob_next;
Guido van Rossum2e8f6141992-09-03 20:32:55 +00001857 op->_ob_next = op->_ob_prev = NULL;
Tim Peters34592512002-07-11 06:23:50 +00001858 _Py_INC_TPFREES(op);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001859}
1860
Guido van Rossumaacdc9d1996-08-12 21:32:12 +00001861void
Fred Drake100814d2000-07-09 15:48:49 +00001862_Py_Dealloc(PyObject *op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001863{
Guido van Rossum9776adf1994-09-07 14:36:45 +00001864 destructor dealloc = op->ob_type->tp_dealloc;
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001865 _Py_ForgetReference(op);
Guido van Rossum9776adf1994-09-07 14:36:45 +00001866 (*dealloc)(op);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001867}
1868
Tim Peters269b2a62003-04-17 19:52:29 +00001869/* Print all live objects. Because PyObject_Print is called, the
1870 * interpreter must be in a healthy state.
1871 */
Guido van Rossumaacdc9d1996-08-12 21:32:12 +00001872void
Fred Drake100814d2000-07-09 15:48:49 +00001873_Py_PrintReferences(FILE *fp)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001874{
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001875 PyObject *op;
Guido van Rossume09fb551997-08-05 02:04:34 +00001876 fprintf(fp, "Remaining objects:\n");
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001877 for (op = refchain._ob_next; op != &refchain; op = op->_ob_next) {
Tim Peters269b2a62003-04-17 19:52:29 +00001878 fprintf(fp, "%p [%d] ", op, op->ob_refcnt);
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001879 if (PyObject_Print(op, fp, 0) != 0)
1880 PyErr_Clear();
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001881 putc('\n', fp);
1882 }
1883}
1884
Tim Peters269b2a62003-04-17 19:52:29 +00001885/* Print the addresses of all live objects. Unlike _Py_PrintReferences, this
1886 * doesn't make any calls to the Python C API, so is always safe to call.
1887 */
1888void
1889_Py_PrintReferenceAddresses(FILE *fp)
1890{
1891 PyObject *op;
1892 fprintf(fp, "Remaining object addresses:\n");
1893 for (op = refchain._ob_next; op != &refchain; op = op->_ob_next)
Tim Peters21d7d4d2003-04-18 00:45:59 +00001894 fprintf(fp, "%p [%d] %s\n", op, op->ob_refcnt,
1895 op->ob_type->tp_name);
Tim Peters269b2a62003-04-17 19:52:29 +00001896}
1897
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +00001898PyObject *
Fred Drake100814d2000-07-09 15:48:49 +00001899_Py_GetObjects(PyObject *self, PyObject *args)
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +00001900{
1901 int i, n;
1902 PyObject *t = NULL;
1903 PyObject *res, *op;
1904
1905 if (!PyArg_ParseTuple(args, "i|O", &n, &t))
1906 return NULL;
1907 op = refchain._ob_next;
1908 res = PyList_New(0);
1909 if (res == NULL)
1910 return NULL;
1911 for (i = 0; (n == 0 || i < n) && op != &refchain; i++) {
1912 while (op == self || op == args || op == res || op == t ||
Guido van Rossum3c296022001-07-14 17:58:00 +00001913 (t != NULL && op->ob_type != (PyTypeObject *) t)) {
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +00001914 op = op->_ob_next;
1915 if (op == &refchain)
1916 return res;
1917 }
1918 if (PyList_Append(res, op) < 0) {
1919 Py_DECREF(res);
1920 return NULL;
1921 }
1922 op = op->_ob_next;
1923 }
1924 return res;
1925}
1926
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001927#endif
Guido van Rossum97ead3f1996-01-12 01:24:09 +00001928
1929
1930/* Hack to force loading of cobject.o */
Guido van Rossumda9c2711996-12-05 21:58:58 +00001931PyTypeObject *_Py_cobject_hack = &PyCObject_Type;
Guido van Rossum84a90321996-05-22 16:34:47 +00001932
1933
1934/* Hack to force loading of abstract.o */
Neal Norwitz41785152002-06-13 21:42:51 +00001935int (*_Py_abstract_hack)(PyObject *) = PyObject_Size;
Guido van Rossume09fb551997-08-05 02:04:34 +00001936
1937
Andrew M. Kuchling1582a3a2000-08-16 12:27:23 +00001938/* Python's malloc wrappers (see pymem.h) */
Guido van Rossume09fb551997-08-05 02:04:34 +00001939
Thomas Wouters334fb892000-07-25 12:56:38 +00001940void *
Fred Drake100814d2000-07-09 15:48:49 +00001941PyMem_Malloc(size_t nbytes)
Guido van Rossume09fb551997-08-05 02:04:34 +00001942{
Guido van Rossumb18618d2000-05-03 23:44:39 +00001943 return PyMem_MALLOC(nbytes);
Guido van Rossume09fb551997-08-05 02:04:34 +00001944}
1945
Thomas Wouters334fb892000-07-25 12:56:38 +00001946void *
1947PyMem_Realloc(void *p, size_t nbytes)
Guido van Rossume09fb551997-08-05 02:04:34 +00001948{
Tim Petersaf3e8de2002-04-12 07:22:56 +00001949 return PyMem_REALLOC(p, nbytes);
Guido van Rossume09fb551997-08-05 02:04:34 +00001950}
1951
1952void
Thomas Wouters334fb892000-07-25 12:56:38 +00001953PyMem_Free(void *p)
Guido van Rossume09fb551997-08-05 02:04:34 +00001954{
Guido van Rossumb18618d2000-05-03 23:44:39 +00001955 PyMem_FREE(p);
1956}
1957
1958
Guido van Rossum86610361998-04-10 22:32:46 +00001959/* These methods are used to control infinite recursion in repr, str, print,
1960 etc. Container objects that may recursively contain themselves,
1961 e.g. builtin dictionaries and lists, should used Py_ReprEnter() and
1962 Py_ReprLeave() to avoid infinite recursion.
1963
1964 Py_ReprEnter() returns 0 the first time it is called for a particular
1965 object and 1 every time thereafter. It returns -1 if an exception
1966 occurred. Py_ReprLeave() has no return value.
1967
1968 See dictobject.c and listobject.c for examples of use.
1969*/
1970
1971#define KEY "Py_Repr"
1972
1973int
Fred Drake100814d2000-07-09 15:48:49 +00001974Py_ReprEnter(PyObject *obj)
Guido van Rossum86610361998-04-10 22:32:46 +00001975{
1976 PyObject *dict;
1977 PyObject *list;
1978 int i;
1979
1980 dict = PyThreadState_GetDict();
1981 if (dict == NULL)
Guido van Rossum0fc8f002003-04-15 15:12:39 +00001982 return 0;
Guido van Rossum86610361998-04-10 22:32:46 +00001983 list = PyDict_GetItemString(dict, KEY);
1984 if (list == NULL) {
1985 list = PyList_New(0);
1986 if (list == NULL)
1987 return -1;
1988 if (PyDict_SetItemString(dict, KEY, list) < 0)
1989 return -1;
1990 Py_DECREF(list);
1991 }
1992 i = PyList_GET_SIZE(list);
1993 while (--i >= 0) {
1994 if (PyList_GET_ITEM(list, i) == obj)
1995 return 1;
1996 }
1997 PyList_Append(list, obj);
1998 return 0;
1999}
2000
2001void
Fred Drake100814d2000-07-09 15:48:49 +00002002Py_ReprLeave(PyObject *obj)
Guido van Rossum86610361998-04-10 22:32:46 +00002003{
2004 PyObject *dict;
2005 PyObject *list;
2006 int i;
2007
2008 dict = PyThreadState_GetDict();
Guido van Rossumeb909461998-04-11 15:17:34 +00002009 if (dict == NULL)
2010 return;
Guido van Rossum86610361998-04-10 22:32:46 +00002011 list = PyDict_GetItemString(dict, KEY);
Guido van Rossumeb909461998-04-11 15:17:34 +00002012 if (list == NULL || !PyList_Check(list))
2013 return;
Guido van Rossum86610361998-04-10 22:32:46 +00002014 i = PyList_GET_SIZE(list);
2015 /* Count backwards because we always expect obj to be list[-1] */
2016 while (--i >= 0) {
2017 if (PyList_GET_ITEM(list, i) == obj) {
2018 PyList_SetSlice(list, i, i + 1, NULL);
2019 break;
2020 }
2021 }
2022}
Guido van Rossumd724b232000-03-13 16:01:29 +00002023
Tim Peters803526b2002-07-07 05:13:56 +00002024/* Trashcan support. */
Guido van Rossumd724b232000-03-13 16:01:29 +00002025
Tim Peters803526b2002-07-07 05:13:56 +00002026/* Current call-stack depth of tp_dealloc calls. */
Guido van Rossumd724b232000-03-13 16:01:29 +00002027int _PyTrash_delete_nesting = 0;
Guido van Rossume92e6102000-04-24 15:40:53 +00002028
Tim Peters803526b2002-07-07 05:13:56 +00002029/* List of objects that still need to be cleaned up, singly linked via their
2030 * gc headers' gc_prev pointers.
2031 */
2032PyObject *_PyTrash_delete_later = NULL;
Guido van Rossumd724b232000-03-13 16:01:29 +00002033
Tim Peters803526b2002-07-07 05:13:56 +00002034/* Add op to the _PyTrash_delete_later list. Called when the current
2035 * call-stack depth gets large. op must be a currently untracked gc'ed
2036 * object, with refcount 0. Py_DECREF must already have been called on it.
2037 */
Guido van Rossumd724b232000-03-13 16:01:29 +00002038void
Fred Drake100814d2000-07-09 15:48:49 +00002039_PyTrash_deposit_object(PyObject *op)
Guido van Rossumd724b232000-03-13 16:01:29 +00002040{
Tim Peters803526b2002-07-07 05:13:56 +00002041 assert(PyObject_IS_GC(op));
2042 assert(_Py_AS_GC(op)->gc.gc_refs == _PyGC_REFS_UNTRACKED);
2043 assert(op->ob_refcnt == 0);
Neil Schemenauerf589c052002-03-29 03:05:54 +00002044 _Py_AS_GC(op)->gc.gc_prev = (PyGC_Head *)_PyTrash_delete_later;
Guido van Rossume92e6102000-04-24 15:40:53 +00002045 _PyTrash_delete_later = op;
Guido van Rossumd724b232000-03-13 16:01:29 +00002046}
2047
Tim Peters803526b2002-07-07 05:13:56 +00002048/* Dealloccate all the objects in the _PyTrash_delete_later list. Called when
2049 * the call-stack unwinds again.
2050 */
Guido van Rossumd724b232000-03-13 16:01:29 +00002051void
Fred Drake100814d2000-07-09 15:48:49 +00002052_PyTrash_destroy_chain(void)
Guido van Rossumd724b232000-03-13 16:01:29 +00002053{
2054 while (_PyTrash_delete_later) {
Tim Peters803526b2002-07-07 05:13:56 +00002055 PyObject *op = _PyTrash_delete_later;
2056 destructor dealloc = op->ob_type->tp_dealloc;
Neil Schemenauerf589c052002-03-29 03:05:54 +00002057
Neil Schemenauerf589c052002-03-29 03:05:54 +00002058 _PyTrash_delete_later =
Tim Peters803526b2002-07-07 05:13:56 +00002059 (PyObject*) _Py_AS_GC(op)->gc.gc_prev;
Neil Schemenauerf589c052002-03-29 03:05:54 +00002060
Tim Peters803526b2002-07-07 05:13:56 +00002061 /* Call the deallocator directly. This used to try to
2062 * fool Py_DECREF into calling it indirectly, but
2063 * Py_DECREF was already called on this object, and in
2064 * assorted non-release builds calling Py_DECREF again ends
2065 * up distorting allocation statistics.
2066 */
2067 assert(op->ob_refcnt == 0);
Guido van Rossumd724b232000-03-13 16:01:29 +00002068 ++_PyTrash_delete_nesting;
Tim Peters803526b2002-07-07 05:13:56 +00002069 (*dealloc)(op);
Guido van Rossumd724b232000-03-13 16:01:29 +00002070 --_PyTrash_delete_nesting;
2071 }
2072}