blob: b62477a812f35300f8801810e426ea90a0265a44 [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +00001/***********************************************************
Guido van Rossum6610ad91995-01-04 19:07:38 +00002Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
3The Netherlands.
Guido van Rossumf70e43a1991-02-19 12:39:46 +00004
5 All Rights Reserved
6
Guido van Rossumd266eb41996-10-25 14:44:06 +00007Permission to use, copy, modify, and distribute this software and its
8documentation for any purpose and without fee is hereby granted,
Guido van Rossumf70e43a1991-02-19 12:39:46 +00009provided that the above copyright notice appear in all copies and that
Guido van Rossumd266eb41996-10-25 14:44:06 +000010both that copyright notice and this permission notice appear in
Guido van Rossumf70e43a1991-02-19 12:39:46 +000011supporting documentation, and that the names of Stichting Mathematisch
Guido van Rossumd266eb41996-10-25 14:44:06 +000012Centrum or CWI or Corporation for National Research Initiatives or
13CNRI not be used in advertising or publicity pertaining to
14distribution of the software without specific, written prior
15permission.
Guido van Rossumf70e43a1991-02-19 12:39:46 +000016
Guido van Rossumd266eb41996-10-25 14:44:06 +000017While CWI is the initial source for this software, a modified version
18is made available by the Corporation for National Research Initiatives
19(CNRI) at the Internet address ftp://ftp.python.org.
20
21STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
22REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
23MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
24CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
25DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
26PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
27TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
28PERFORMANCE OF THIS SOFTWARE.
Guido van Rossumf70e43a1991-02-19 12:39:46 +000029
30******************************************************************/
31
Guido van Rossum3f5da241990-12-20 15:06:42 +000032/* Generic object operations; and implementation of None (NoObject) */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000033
Guido van Rossumc0b618a1997-05-02 03:12:38 +000034#include "Python.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000035
Guido van Rossum6f9e4331995-03-29 16:57:48 +000036#if defined( Py_TRACE_REFS ) || defined( Py_REF_DEBUG )
Guido van Rossumc0b618a1997-05-02 03:12:38 +000037long _Py_RefTotal;
Guido van Rossum3f5da241990-12-20 15:06:42 +000038#endif
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000039
Guido van Rossum3f5da241990-12-20 15:06:42 +000040/* Object allocation routines used by NEWOBJ and NEWVAROBJ macros.
41 These are used by the individual routines for object creation.
42 Do not call them otherwise, they do not initialize the object! */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000043
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +000044#ifdef COUNT_ALLOCS
Guido van Rossumc0b618a1997-05-02 03:12:38 +000045static PyTypeObject *type_list;
Sjoerd Mullender842d2cc1993-10-15 16:18:48 +000046extern int tuple_zero_allocs, fast_tuple_allocs;
47extern int quick_int_allocs, quick_neg_int_allocs;
Sjoerd Mullender3bb8a051993-10-22 12:04:32 +000048extern int null_strings, one_strings;
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +000049void
50dump_counts()
51{
Guido van Rossumc0b618a1997-05-02 03:12:38 +000052 PyTypeObject *tp;
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +000053
54 for (tp = type_list; tp; tp = tp->tp_next)
Sjoerd Mullender52c1f511993-10-25 08:40:52 +000055 fprintf(stderr, "%s alloc'd: %d, freed: %d, max in use: %d\n",
56 tp->tp_name, tp->tp_alloc, tp->tp_free,
57 tp->tp_maxalloc);
58 fprintf(stderr, "fast tuple allocs: %d, empty: %d\n",
59 fast_tuple_allocs, tuple_zero_allocs);
60 fprintf(stderr, "fast int allocs: pos: %d, neg: %d\n",
61 quick_int_allocs, quick_neg_int_allocs);
62 fprintf(stderr, "null strings: %d, 1-strings: %d\n",
63 null_strings, one_strings);
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +000064}
65
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +000066PyObject *
67get_counts()
68{
69 PyTypeObject *tp;
70 PyObject *result;
71 PyObject *v;
72
73 result = PyList_New(0);
74 if (result == NULL)
75 return NULL;
76 for (tp = type_list; tp; tp = tp->tp_next) {
77 v = Py_BuildValue("(siii)", tp->tp_name, tp->tp_alloc,
78 tp->tp_free, tp->tp_maxalloc);
79 if (v == NULL) {
80 Py_DECREF(result);
81 return NULL;
82 }
83 if (PyList_Append(result, v) < 0) {
84 Py_DECREF(v);
85 Py_DECREF(result);
86 return NULL;
87 }
88 Py_DECREF(v);
89 }
90 return result;
91}
92
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +000093void
94inc_count(tp)
Guido van Rossumc0b618a1997-05-02 03:12:38 +000095 PyTypeObject *tp;
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +000096{
97 if (tp->tp_alloc == 0) {
Guido van Rossumd8953cb1995-04-06 14:46:26 +000098 /* first time; insert in linked list */
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +000099 if (tp->tp_next != NULL) /* sanity check */
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000100 Py_FatalError("XXX inc_count sanity check");
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000101 tp->tp_next = type_list;
102 type_list = tp;
103 }
104 tp->tp_alloc++;
105 if (tp->tp_alloc - tp->tp_free > tp->tp_maxalloc)
106 tp->tp_maxalloc = tp->tp_alloc - tp->tp_free;
107}
108#endif
109
Guido van Rossumf5030ab1996-07-21 02:30:39 +0000110#ifndef MS_COREDLL
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000111PyObject *
112_PyObject_New(tp)
113 PyTypeObject *tp;
Guido van Rossumf5030ab1996-07-21 02:30:39 +0000114#else
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000115PyObject *
116_PyObject_New(tp,op)
117 PyTypeObject *tp;
Guido van Rossumf5030ab1996-07-21 02:30:39 +0000118 PyObject *op;
119#endif
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000120{
Guido van Rossumf5030ab1996-07-21 02:30:39 +0000121#ifndef MS_COREDLL
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000122 PyObject *op = (PyObject *) malloc(tp->tp_basicsize);
Guido van Rossumf5030ab1996-07-21 02:30:39 +0000123#endif
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000124 if (op == NULL)
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000125 return PyErr_NoMemory();
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000126 op->ob_type = tp;
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000127 _Py_NewReference(op);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000128 return op;
129}
130
Guido van Rossumf5030ab1996-07-21 02:30:39 +0000131#ifndef MS_COREDLL
Guido van Rossumd0c87ee1997-05-15 21:31:03 +0000132PyVarObject *
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000133_PyObject_NewVar(tp, size)
134 PyTypeObject *tp;
Guido van Rossum2497ead1995-02-10 17:00:27 +0000135 int size;
Guido van Rossumf5030ab1996-07-21 02:30:39 +0000136#else
Guido van Rossumd0c87ee1997-05-15 21:31:03 +0000137PyVarObject *
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000138_PyObject_NewVar(tp, size, op)
139 PyTypeObject *tp;
Guido van Rossumf5030ab1996-07-21 02:30:39 +0000140 int size;
Guido van Rossumd0c87ee1997-05-15 21:31:03 +0000141 PyVarObject *op;
Guido van Rossumf5030ab1996-07-21 02:30:39 +0000142#endif
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000143{
Guido van Rossumf5030ab1996-07-21 02:30:39 +0000144#ifndef MS_COREDLL
Guido van Rossumd0c87ee1997-05-15 21:31:03 +0000145 PyVarObject *op = (PyVarObject *)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000146 malloc(tp->tp_basicsize + size * tp->tp_itemsize);
Guido van Rossumf5030ab1996-07-21 02:30:39 +0000147#endif
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000148 if (op == NULL)
Guido van Rossumd0c87ee1997-05-15 21:31:03 +0000149 return (PyVarObject *)PyErr_NoMemory();
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000150 op->ob_type = tp;
151 op->ob_size = size;
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000152 _Py_NewReference(op);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000153 return op;
154}
155
Guido van Rossum90933611991-06-07 16:10:43 +0000156int
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000157PyObject_Print(op, fp, flags)
158 PyObject *op;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000159 FILE *fp;
160 int flags;
161{
Guido van Rossum278ef591991-07-27 21:40:24 +0000162 int ret = 0;
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000163 if (PyErr_CheckSignals())
Guido van Rossum90933611991-06-07 16:10:43 +0000164 return -1;
Guido van Rossum9b00dfa1998-04-28 16:06:54 +0000165#ifdef USE_STACKCHECK
166 if (PyOS_CheckStack()) {
167 PyErr_SetString(PyExc_MemoryError, "Stack overflow");
168 return -1;
169 }
170#endif
Guido van Rossum90933611991-06-07 16:10:43 +0000171 if (op == NULL) {
172 fprintf(fp, "<nil>");
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000173 }
Guido van Rossum90933611991-06-07 16:10:43 +0000174 else {
175 if (op->ob_refcnt <= 0)
Guido van Rossum2e8f6141992-09-03 20:32:55 +0000176 fprintf(fp, "<refcnt %u at %lx>",
177 op->ob_refcnt, (long)op);
178 else if (op->ob_type->tp_print == NULL) {
179 if (op->ob_type->tp_repr == NULL) {
180 fprintf(fp, "<%s object at %lx>",
181 op->ob_type->tp_name, (long)op);
182 }
183 else {
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000184 PyObject *s;
185 if (flags & Py_PRINT_RAW)
186 s = PyObject_Str(op);
Guido van Rossumc6004111993-11-05 10:22:19 +0000187 else
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000188 s = PyObject_Repr(op);
Guido van Rossum2e8f6141992-09-03 20:32:55 +0000189 if (s == NULL)
190 ret = -1;
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000191 else if (!PyString_Check(s)) {
192 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2e8f6141992-09-03 20:32:55 +0000193 "repr not string");
194 ret = -1;
195 }
196 else {
Guido van Rossum565798d1998-04-21 22:25:01 +0000197 ret = PyObject_Print(s, fp,
198 Py_PRINT_RAW);
Guido van Rossum2e8f6141992-09-03 20:32:55 +0000199 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000200 Py_XDECREF(s);
Guido van Rossum2e8f6141992-09-03 20:32:55 +0000201 }
202 }
Guido van Rossum90933611991-06-07 16:10:43 +0000203 else
Guido van Rossum278ef591991-07-27 21:40:24 +0000204 ret = (*op->ob_type->tp_print)(op, fp, flags);
Guido van Rossum90933611991-06-07 16:10:43 +0000205 }
Guido van Rossum278ef591991-07-27 21:40:24 +0000206 if (ret == 0) {
207 if (ferror(fp)) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000208 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum278ef591991-07-27 21:40:24 +0000209 clearerr(fp);
210 ret = -1;
211 }
212 }
213 return ret;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000214}
215
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000216PyObject *
217PyObject_Repr(v)
218 PyObject *v;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000219{
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000220 if (PyErr_CheckSignals())
Guido van Rossum90933611991-06-07 16:10:43 +0000221 return NULL;
Guido van Rossum9b00dfa1998-04-28 16:06:54 +0000222#ifdef USE_STACKCHECK
223 if (PyOS_CheckStack()) {
224 PyErr_SetString(PyExc_MemoryError, "Stack overflow");
225 return NULL;
226 }
227#endif
Guido van Rossum90933611991-06-07 16:10:43 +0000228 if (v == NULL)
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000229 return PyString_FromString("<NULL>");
Guido van Rossum90933611991-06-07 16:10:43 +0000230 else if (v->ob_type->tp_repr == NULL) {
231 char buf[120];
232 sprintf(buf, "<%.80s object at %lx>",
233 v->ob_type->tp_name, (long)v);
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000234 return PyString_FromString(buf);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000235 }
Guido van Rossum90933611991-06-07 16:10:43 +0000236 else
237 return (*v->ob_type->tp_repr)(v);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000238}
239
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000240PyObject *
241PyObject_Str(v)
242 PyObject *v;
Guido van Rossumc6004111993-11-05 10:22:19 +0000243{
244 if (v == NULL)
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000245 return PyString_FromString("<NULL>");
246 else if (PyString_Check(v)) {
247 Py_INCREF(v);
Guido van Rossumc6004111993-11-05 10:22:19 +0000248 return v;
249 }
Guido van Rossum32b582b1995-01-17 16:35:13 +0000250 else if (v->ob_type->tp_str != NULL)
251 return (*v->ob_type->tp_str)(v);
Guido van Rossumc6004111993-11-05 10:22:19 +0000252 else {
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000253 PyObject *func;
254 PyObject *res;
255 if (!PyInstance_Check(v) ||
256 (func = PyObject_GetAttrString(v, "__str__")) == NULL) {
257 PyErr_Clear();
258 return PyObject_Repr(v);
Guido van Rossumc6004111993-11-05 10:22:19 +0000259 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000260 res = PyEval_CallObject(func, (PyObject *)NULL);
261 Py_DECREF(func);
Guido van Rossumc6004111993-11-05 10:22:19 +0000262 return res;
263 }
264}
265
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000266static PyObject *
Guido van Rossum20566841995-01-12 11:26:10 +0000267do_cmp(v, w)
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000268 PyObject *v, *w;
Guido van Rossum20566841995-01-12 11:26:10 +0000269{
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000270 long c;
Guido van Rossum20566841995-01-12 11:26:10 +0000271 /* __rcmp__ actually won't be called unless __cmp__ isn't defined,
272 because the check in cmpobject() reverses the objects first.
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000273 This is intentional -- it makes no sense to define cmp(x,y)
274 different than -cmp(y,x). */
275 if (PyInstance_Check(v) || PyInstance_Check(w))
276 return PyInstance_DoBinOp(v, w, "__cmp__", "__rcmp__", do_cmp);
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000277 c = PyObject_Compare(v, w);
278 if (c && PyErr_Occurred())
279 return NULL;
280 return PyInt_FromLong(c);
Guido van Rossum20566841995-01-12 11:26:10 +0000281}
282
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000283int
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000284PyObject_Compare(v, w)
285 PyObject *v, *w;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000286{
Guido van Rossumcd5a5f61998-06-09 18:58:44 +0000287 PyTypeObject *vtp, *wtp;
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000288 if (v == NULL || w == NULL) {
289 PyErr_BadInternalCall();
290 return -1;
291 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000292 if (v == w)
293 return 0;
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000294 if (PyInstance_Check(v) || PyInstance_Check(w)) {
295 PyObject *res;
Guido van Rossum20566841995-01-12 11:26:10 +0000296 int c;
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000297 if (!PyInstance_Check(v))
298 return -PyObject_Compare(w, v);
Guido van Rossum20566841995-01-12 11:26:10 +0000299 res = do_cmp(v, w);
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000300 if (res == NULL)
301 return -1;
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000302 if (!PyInt_Check(res)) {
303 Py_DECREF(res);
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000304 PyErr_SetString(PyExc_TypeError,
305 "comparison did not return an int");
306 return -1;
Guido van Rossum20566841995-01-12 11:26:10 +0000307 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000308 c = PyInt_AsLong(res);
309 Py_DECREF(res);
Guido van Rossum20566841995-01-12 11:26:10 +0000310 return (c < 0) ? -1 : (c > 0) ? 1 : 0;
311 }
Guido van Rossumcd5a5f61998-06-09 18:58:44 +0000312 if ((vtp = v->ob_type) != (wtp = w->ob_type)) {
313 char *vname = vtp->tp_name;
314 char *wname = wtp->tp_name;
Guido van Rossumb4db1941998-07-21 21:56:41 +0000315 if (vtp->tp_as_number != NULL && wtp->tp_as_number != NULL) {
Guido van Rossum242c6421997-11-19 16:03:17 +0000316 int err;
317 err = PyNumber_CoerceEx(&v, &w);
318 if (err < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000319 return -1;
Guido van Rossum242c6421997-11-19 16:03:17 +0000320 else if (err == 0) {
Guido van Rossumb4db1941998-07-21 21:56:41 +0000321 int cmp;
322 vtp = v->ob_type;
323 if (vtp->tp_compare == NULL)
324 cmp = (v < w) ? -1 : 1;
325 else
326 cmp = (*vtp->tp_compare)(v, w);
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000327 Py_DECREF(v);
328 Py_DECREF(w);
Guido van Rossum9fb03681991-07-01 18:48:04 +0000329 return cmp;
330 }
331 }
Guido van Rossumcd5a5f61998-06-09 18:58:44 +0000332 else if (vtp->tp_as_number != NULL)
333 vname = "";
334 else if (wtp->tp_as_number != NULL)
335 wname = "";
336 /* Numerical types compare smaller than all other types */
337 return strcmp(vname, wname);
Guido van Rossum9fb03681991-07-01 18:48:04 +0000338 }
Guido van Rossumcd5a5f61998-06-09 18:58:44 +0000339 if (vtp->tp_compare == NULL)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000340 return (v < w) ? -1 : 1;
Guido van Rossumcd5a5f61998-06-09 18:58:44 +0000341 return (*vtp->tp_compare)(v, w);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000342}
343
Guido van Rossum9bfef441993-03-29 10:43:31 +0000344long
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000345PyObject_Hash(v)
346 PyObject *v;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000347{
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000348 PyTypeObject *tp = v->ob_type;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000349 if (tp->tp_hash != NULL)
350 return (*tp->tp_hash)(v);
351 if (tp->tp_compare == NULL)
352 return (long) v; /* Use address as hash value */
353 /* If there's a cmp but no hash defined, the object can't be hashed */
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000354 PyErr_SetString(PyExc_TypeError, "unhashable type");
Guido van Rossum9bfef441993-03-29 10:43:31 +0000355 return -1;
356}
357
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000358PyObject *
359PyObject_GetAttrString(v, name)
360 PyObject *v;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000361 char *name;
362{
Guido van Rossumd8eb1b31996-08-09 20:52:03 +0000363 if (v->ob_type->tp_getattro != NULL) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000364 PyObject *w, *res;
Guido van Rossumc6d06701997-01-18 07:57:16 +0000365 w = PyString_InternFromString(name);
Guido van Rossumd8eb1b31996-08-09 20:52:03 +0000366 if (w == NULL)
367 return NULL;
368 res = (*v->ob_type->tp_getattro)(v, w);
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000369 Py_XDECREF(w);
Guido van Rossumd8eb1b31996-08-09 20:52:03 +0000370 return res;
371 }
372
Guido van Rossum3f5da241990-12-20 15:06:42 +0000373 if (v->ob_type->tp_getattr == NULL) {
Guido van Rossumdb935161998-01-19 22:16:36 +0000374 PyErr_Format(PyExc_AttributeError,
375 "'%.50s' object has no attribute '%.400s'",
376 v->ob_type->tp_name,
377 name);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000378 return NULL;
379 }
380 else {
381 return (*v->ob_type->tp_getattr)(v, name);
382 }
383}
384
385int
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000386PyObject_HasAttrString(v, name)
387 PyObject *v;
Guido van Rossumed18fdc1993-07-11 19:55:34 +0000388 char *name;
389{
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000390 PyObject *res = PyObject_GetAttrString(v, name);
Guido van Rossumed18fdc1993-07-11 19:55:34 +0000391 if (res != NULL) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000392 Py_DECREF(res);
Guido van Rossumed18fdc1993-07-11 19:55:34 +0000393 return 1;
394 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000395 PyErr_Clear();
Guido van Rossumed18fdc1993-07-11 19:55:34 +0000396 return 0;
397}
398
399int
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000400PyObject_SetAttrString(v, name, w)
401 PyObject *v;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000402 char *name;
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000403 PyObject *w;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000404{
Guido van Rossumd8eb1b31996-08-09 20:52:03 +0000405 if (v->ob_type->tp_setattro != NULL) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000406 PyObject *s;
Guido van Rossumd8eb1b31996-08-09 20:52:03 +0000407 int res;
Guido van Rossumc6d06701997-01-18 07:57:16 +0000408 s = PyString_InternFromString(name);
Guido van Rossumd8eb1b31996-08-09 20:52:03 +0000409 if (s == NULL)
Guido van Rossumb7fc3041996-09-11 22:51:25 +0000410 return -1;
Guido van Rossumd8eb1b31996-08-09 20:52:03 +0000411 res = (*v->ob_type->tp_setattro)(v, s, w);
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000412 Py_XDECREF(s);
Guido van Rossumd8eb1b31996-08-09 20:52:03 +0000413 return res;
414 }
415
Guido van Rossum3f5da241990-12-20 15:06:42 +0000416 if (v->ob_type->tp_setattr == NULL) {
417 if (v->ob_type->tp_getattr == NULL)
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000418 PyErr_SetString(PyExc_TypeError,
Guido van Rossum3ea74121991-12-24 13:28:03 +0000419 "attribute-less object (assign or del)");
Guido van Rossum3f5da241990-12-20 15:06:42 +0000420 else
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000421 PyErr_SetString(PyExc_TypeError,
Guido van Rossum3ea74121991-12-24 13:28:03 +0000422 "object has read-only attributes");
Guido van Rossum73531a31990-12-20 23:12:40 +0000423 return -1;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000424 }
425 else {
426 return (*v->ob_type->tp_setattr)(v, name, w);
427 }
428}
429
Guido van Rossum98ff96a1997-05-20 18:34:44 +0000430PyObject *
431PyObject_GetAttr(v, name)
432 PyObject *v;
433 PyObject *name;
434{
435 if (v->ob_type->tp_getattro != NULL)
436 return (*v->ob_type->tp_getattro)(v, name);
437 else
438 return PyObject_GetAttrString(v, PyString_AsString(name));
439}
440
441int
442PyObject_HasAttr(v, name)
443 PyObject *v;
444 PyObject *name;
445{
446 PyObject *res = PyObject_GetAttr(v, name);
447 if (res != NULL) {
448 Py_DECREF(res);
449 return 1;
450 }
451 PyErr_Clear();
452 return 0;
453}
454
455int
456PyObject_SetAttr(v, name, value)
457 PyObject *v;
458 PyObject *name;
459 PyObject *value;
460{
461 int err;
462 Py_INCREF(name);
463 PyString_InternInPlace(&name);
464 if (v->ob_type->tp_setattro != NULL)
465 err = (*v->ob_type->tp_setattro)(v, name, value);
466 else
467 err = PyObject_SetAttrString(
468 v, PyString_AsString(name), value);
469 Py_DECREF(name);
470 return err;
471}
472
Guido van Rossum6ac258d1993-05-12 08:24:20 +0000473/* Test a value used as condition, e.g., in a for or if statement.
474 Return -1 if an error occurred */
475
476int
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000477PyObject_IsTrue(v)
478 PyObject *v;
Guido van Rossum6ac258d1993-05-12 08:24:20 +0000479{
480 int res;
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000481 if (v == Py_None)
Guido van Rossum6ac258d1993-05-12 08:24:20 +0000482 res = 0;
Guido van Rossum1c4f4581998-05-22 00:53:24 +0000483 else if (v->ob_type->tp_as_number != NULL &&
484 v->ob_type->tp_as_number->nb_nonzero != NULL)
Guido van Rossum6ac258d1993-05-12 08:24:20 +0000485 res = (*v->ob_type->tp_as_number->nb_nonzero)(v);
Guido van Rossum1c4f4581998-05-22 00:53:24 +0000486 else if (v->ob_type->tp_as_mapping != NULL &&
487 v->ob_type->tp_as_mapping->mp_length != NULL)
Guido van Rossum6ac258d1993-05-12 08:24:20 +0000488 res = (*v->ob_type->tp_as_mapping->mp_length)(v);
Guido van Rossum1c4f4581998-05-22 00:53:24 +0000489 else if (v->ob_type->tp_as_sequence != NULL &&
490 v->ob_type->tp_as_sequence->sq_length != NULL)
Guido van Rossum6ac258d1993-05-12 08:24:20 +0000491 res = (*v->ob_type->tp_as_sequence->sq_length)(v);
492 else
493 res = 1;
494 if (res > 0)
495 res = 1;
496 return res;
497}
498
Guido van Rossumc3d3f961998-04-09 17:53:59 +0000499/* equivalent of 'not v'
500 Return -1 if an error occurred */
501
502int
503PyObject_Not(v)
504 PyObject *v;
505{
506 int res;
507 res = PyObject_IsTrue(v);
508 if (res < 0)
509 return res;
510 return res == 0;
511}
512
Guido van Rossum5524a591995-01-10 15:26:20 +0000513/* Coerce two numeric types to the "larger" one.
514 Increment the reference count on each argument.
515 Return -1 and raise an exception if no coercion is possible
516 (and then no reference count is incremented).
517*/
518
519int
Guido van Rossum242c6421997-11-19 16:03:17 +0000520PyNumber_CoerceEx(pv, pw)
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000521 PyObject **pv, **pw;
Guido van Rossum5524a591995-01-10 15:26:20 +0000522{
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000523 register PyObject *v = *pv;
524 register PyObject *w = *pw;
Guido van Rossum5524a591995-01-10 15:26:20 +0000525 int res;
526
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000527 if (v->ob_type == w->ob_type && !PyInstance_Check(v)) {
528 Py_INCREF(v);
529 Py_INCREF(w);
Guido van Rossum5524a591995-01-10 15:26:20 +0000530 return 0;
531 }
532 if (v->ob_type->tp_as_number && v->ob_type->tp_as_number->nb_coerce) {
533 res = (*v->ob_type->tp_as_number->nb_coerce)(pv, pw);
534 if (res <= 0)
535 return res;
536 }
537 if (w->ob_type->tp_as_number && w->ob_type->tp_as_number->nb_coerce) {
538 res = (*w->ob_type->tp_as_number->nb_coerce)(pw, pv);
539 if (res <= 0)
540 return res;
541 }
Guido van Rossum242c6421997-11-19 16:03:17 +0000542 return 1;
543}
544
545int
546PyNumber_Coerce(pv, pw)
547 PyObject **pv, **pw;
548{
549 int err = PyNumber_CoerceEx(pv, pw);
550 if (err <= 0)
551 return err;
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000552 PyErr_SetString(PyExc_TypeError, "number coercion failed");
Guido van Rossum5524a591995-01-10 15:26:20 +0000553 return -1;
554}
555
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000556
Guido van Rossum49b11fe1995-01-26 00:38:22 +0000557/* Test whether an object can be called */
558
559int
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000560PyCallable_Check(x)
561 PyObject *x;
Guido van Rossum49b11fe1995-01-26 00:38:22 +0000562{
563 if (x == NULL)
564 return 0;
565 if (x->ob_type->tp_call != NULL ||
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000566 PyFunction_Check(x) ||
567 PyMethod_Check(x) ||
568 PyCFunction_Check(x) ||
569 PyClass_Check(x))
Guido van Rossum49b11fe1995-01-26 00:38:22 +0000570 return 1;
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000571 if (PyInstance_Check(x)) {
572 PyObject *call = PyObject_GetAttrString(x, "__call__");
Guido van Rossum49b11fe1995-01-26 00:38:22 +0000573 if (call == NULL) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000574 PyErr_Clear();
Guido van Rossum49b11fe1995-01-26 00:38:22 +0000575 return 0;
576 }
577 /* Could test recursively but don't, for fear of endless
578 recursion if some joker sets self.__call__ = self */
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000579 Py_DECREF(call);
Guido van Rossum49b11fe1995-01-26 00:38:22 +0000580 return 1;
581 }
582 return 0;
583}
584
585
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000586/*
587NoObject is usable as a non-NULL undefined value, used by the macro None.
588There is (and should be!) no way to create other objects of this type,
Guido van Rossum3f5da241990-12-20 15:06:42 +0000589so there is exactly one (which is indestructible, by the way).
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000590*/
591
Guido van Rossum0c182a11992-03-27 17:26:13 +0000592/* ARGSUSED */
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000593static PyObject *
Guido van Rossum3f5da241990-12-20 15:06:42 +0000594none_repr(op)
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000595 PyObject *op;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000596{
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000597 return PyString_FromString("None");
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000598}
599
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000600static PyTypeObject PyNothing_Type = {
601 PyObject_HEAD_INIT(&PyType_Type)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000602 0,
Guido van Rossum3f5da241990-12-20 15:06:42 +0000603 "None",
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000604 0,
605 0,
606 0, /*tp_dealloc*/ /*never called*/
Guido van Rossum7066dd71992-09-17 17:54:56 +0000607 0, /*tp_print*/
Guido van Rossum3f5da241990-12-20 15:06:42 +0000608 0, /*tp_getattr*/
609 0, /*tp_setattr*/
610 0, /*tp_compare*/
Guido van Rossum1d5735e1994-08-30 08:27:36 +0000611 (reprfunc)none_repr, /*tp_repr*/
Guido van Rossum3f5da241990-12-20 15:06:42 +0000612 0, /*tp_as_number*/
613 0, /*tp_as_sequence*/
614 0, /*tp_as_mapping*/
Guido van Rossum9bfef441993-03-29 10:43:31 +0000615 0, /*tp_hash */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000616};
617
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000618PyObject _Py_NoneStruct = {
619 PyObject_HEAD_INIT(&PyNothing_Type)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000620};
621
622
Guido van Rossum84a90321996-05-22 16:34:47 +0000623#ifdef Py_TRACE_REFS
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000624
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000625static PyObject refchain = {&refchain, &refchain};
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000626
Guido van Rossumaacdc9d1996-08-12 21:32:12 +0000627void
Guido van Rossume09fb551997-08-05 02:04:34 +0000628_Py_ResetReferences()
629{
630 refchain._ob_prev = refchain._ob_next = &refchain;
631 _Py_RefTotal = 0;
632}
633
634void
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000635_Py_NewReference(op)
636 PyObject *op;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000637{
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000638 _Py_RefTotal++;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000639 op->ob_refcnt = 1;
640 op->_ob_next = refchain._ob_next;
641 op->_ob_prev = &refchain;
642 refchain._ob_next->_ob_prev = op;
643 refchain._ob_next = op;
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000644#ifdef COUNT_ALLOCS
645 inc_count(op->ob_type);
646#endif
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000647}
648
Guido van Rossumaacdc9d1996-08-12 21:32:12 +0000649void
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000650_Py_ForgetReference(op)
651 register PyObject *op;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000652{
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000653 register PyObject *p;
Guido van Rossumd7047b31995-01-02 19:07:15 +0000654 if (op->ob_refcnt < 0)
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000655 Py_FatalError("UNREF negative refcnt");
Guido van Rossum2e8f6141992-09-03 20:32:55 +0000656 if (op == &refchain ||
Guido van Rossumd7047b31995-01-02 19:07:15 +0000657 op->_ob_prev->_ob_next != op || op->_ob_next->_ob_prev != op)
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000658 Py_FatalError("UNREF invalid object");
Guido van Rossum2e8f6141992-09-03 20:32:55 +0000659#ifdef SLOW_UNREF_CHECK
Guido van Rossum3f5da241990-12-20 15:06:42 +0000660 for (p = refchain._ob_next; p != &refchain; p = p->_ob_next) {
661 if (p == op)
662 break;
663 }
Guido van Rossumd7047b31995-01-02 19:07:15 +0000664 if (p == &refchain) /* Not found */
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000665 Py_FatalError("UNREF unknown object");
Guido van Rossum2e8f6141992-09-03 20:32:55 +0000666#endif
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000667 op->_ob_next->_ob_prev = op->_ob_prev;
668 op->_ob_prev->_ob_next = op->_ob_next;
Guido van Rossum2e8f6141992-09-03 20:32:55 +0000669 op->_ob_next = op->_ob_prev = NULL;
Guido van Rossumd8953cb1995-04-06 14:46:26 +0000670#ifdef COUNT_ALLOCS
671 op->ob_type->tp_free++;
672#endif
Guido van Rossum3f5da241990-12-20 15:06:42 +0000673}
674
Guido van Rossumaacdc9d1996-08-12 21:32:12 +0000675void
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000676_Py_Dealloc(op)
677 PyObject *op;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000678{
Guido van Rossum9776adf1994-09-07 14:36:45 +0000679 destructor dealloc = op->ob_type->tp_dealloc;
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000680 _Py_ForgetReference(op);
Guido van Rossum2e8f6141992-09-03 20:32:55 +0000681 op->ob_type = NULL;
Guido van Rossum9776adf1994-09-07 14:36:45 +0000682 (*dealloc)(op);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000683}
684
Guido van Rossumaacdc9d1996-08-12 21:32:12 +0000685void
Guido van Rossumded690f1996-05-24 20:48:31 +0000686_Py_PrintReferences(fp)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000687 FILE *fp;
688{
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000689 PyObject *op;
Guido van Rossume09fb551997-08-05 02:04:34 +0000690 fprintf(fp, "Remaining objects:\n");
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000691 for (op = refchain._ob_next; op != &refchain; op = op->_ob_next) {
692 fprintf(fp, "[%d] ", op->ob_refcnt);
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000693 if (PyObject_Print(op, fp, 0) != 0)
694 PyErr_Clear();
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000695 putc('\n', fp);
696 }
697}
698
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +0000699PyObject *
Guido van Rossumded690f1996-05-24 20:48:31 +0000700_Py_GetObjects(self, args)
Sjoerd Mullender6ec3c651995-08-29 09:18:14 +0000701 PyObject *self;
702 PyObject *args;
703{
704 int i, n;
705 PyObject *t = NULL;
706 PyObject *res, *op;
707
708 if (!PyArg_ParseTuple(args, "i|O", &n, &t))
709 return NULL;
710 op = refchain._ob_next;
711 res = PyList_New(0);
712 if (res == NULL)
713 return NULL;
714 for (i = 0; (n == 0 || i < n) && op != &refchain; i++) {
715 while (op == self || op == args || op == res || op == t ||
716 t != NULL && op->ob_type != (PyTypeObject *) t) {
717 op = op->_ob_next;
718 if (op == &refchain)
719 return res;
720 }
721 if (PyList_Append(res, op) < 0) {
722 Py_DECREF(res);
723 return NULL;
724 }
725 op = op->_ob_next;
726 }
727 return res;
728}
729
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000730#endif
Guido van Rossum97ead3f1996-01-12 01:24:09 +0000731
732
733/* Hack to force loading of cobject.o */
Guido van Rossumda9c2711996-12-05 21:58:58 +0000734PyTypeObject *_Py_cobject_hack = &PyCObject_Type;
Guido van Rossum84a90321996-05-22 16:34:47 +0000735
736
737/* Hack to force loading of abstract.o */
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000738int (*_Py_abstract_hack) Py_FPROTO((PyObject *)) = &PyObject_Length;
Guido van Rossume09fb551997-08-05 02:04:34 +0000739
740
741/* Malloc wrappers (see mymalloc.h) */
742
743/* The Py_{Malloc,Realloc} wrappers call PyErr_NoMemory() on failure */
744
745ANY *
746Py_Malloc(nbytes)
747 size_t nbytes;
748{
749 ANY *p;
750#if _PyMem_EXTRA > 0
751 if (nbytes == 0)
752 nbytes = _PyMem_EXTRA;
753#endif
754 p = malloc(nbytes);
755 if (p != NULL)
756 return p;
Guido van Rossumea46e4d1997-08-12 14:54:54 +0000757 else {
758 PyErr_NoMemory();
759 return NULL;
760 }
Guido van Rossume09fb551997-08-05 02:04:34 +0000761}
762
763ANY *
764Py_Realloc(p, nbytes)
765 ANY *p;
766 size_t nbytes;
767{
768#if _PyMem_EXTRA > 0
769 if (nbytes == 0)
770 nbytes = _PyMem_EXTRA;
771#endif
772 p = realloc(p, nbytes);
773 if (p != NULL)
774 return p;
Guido van Rossumea46e4d1997-08-12 14:54:54 +0000775 else {
776 PyErr_NoMemory();
777 return NULL;
778 }
Guido van Rossume09fb551997-08-05 02:04:34 +0000779}
780
781void
782Py_Free(p)
783 ANY *p;
784{
785 free(p);
786}
787
788/* The PyMem_{Malloc,Realloc} wrappers don't call anything on failure */
789
790ANY *
791PyMem_Malloc(nbytes)
792 size_t nbytes;
793{
794#if _PyMem_EXTRA > 0
795 if (nbytes == 0)
796 nbytes = _PyMem_EXTRA;
797#endif
798 return malloc(nbytes);
799}
800
801ANY *
802PyMem_Realloc(p, nbytes)
803 ANY *p;
804 size_t nbytes;
805{
806#if _PyMem_EXTRA > 0
807 if (nbytes == 0)
808 nbytes = _PyMem_EXTRA;
809#endif
810 return realloc(p, nbytes);
811}
812
813void
814PyMem_Free(p)
815 ANY *p;
816{
817 free(p);
818}
Guido van Rossum86610361998-04-10 22:32:46 +0000819
820
821/* These methods are used to control infinite recursion in repr, str, print,
822 etc. Container objects that may recursively contain themselves,
823 e.g. builtin dictionaries and lists, should used Py_ReprEnter() and
824 Py_ReprLeave() to avoid infinite recursion.
825
826 Py_ReprEnter() returns 0 the first time it is called for a particular
827 object and 1 every time thereafter. It returns -1 if an exception
828 occurred. Py_ReprLeave() has no return value.
829
830 See dictobject.c and listobject.c for examples of use.
831*/
832
833#define KEY "Py_Repr"
834
835int
836Py_ReprEnter(obj)
837 PyObject *obj;
838{
839 PyObject *dict;
840 PyObject *list;
841 int i;
842
843 dict = PyThreadState_GetDict();
844 if (dict == NULL)
845 return -1;
846 list = PyDict_GetItemString(dict, KEY);
847 if (list == NULL) {
848 list = PyList_New(0);
849 if (list == NULL)
850 return -1;
851 if (PyDict_SetItemString(dict, KEY, list) < 0)
852 return -1;
853 Py_DECREF(list);
854 }
855 i = PyList_GET_SIZE(list);
856 while (--i >= 0) {
857 if (PyList_GET_ITEM(list, i) == obj)
858 return 1;
859 }
860 PyList_Append(list, obj);
861 return 0;
862}
863
864void
865Py_ReprLeave(obj)
866 PyObject *obj;
867{
868 PyObject *dict;
869 PyObject *list;
870 int i;
871
872 dict = PyThreadState_GetDict();
Guido van Rossumeb909461998-04-11 15:17:34 +0000873 if (dict == NULL)
874 return;
Guido van Rossum86610361998-04-10 22:32:46 +0000875 list = PyDict_GetItemString(dict, KEY);
Guido van Rossumeb909461998-04-11 15:17:34 +0000876 if (list == NULL || !PyList_Check(list))
877 return;
Guido van Rossum86610361998-04-10 22:32:46 +0000878 i = PyList_GET_SIZE(list);
879 /* Count backwards because we always expect obj to be list[-1] */
880 while (--i >= 0) {
881 if (PyList_GET_ITEM(list, i) == obj) {
882 PyList_SetSlice(list, i, i + 1, NULL);
883 break;
884 }
885 }
886}