blob: 071cbdcca27934ec01de7cddc9cd2a4dc7d96fc9 [file] [log] [blame]
Guido van Rossume15dee51995-07-18 14:12:02 +00001/* Abstract Object Interface (many thanks to Jim Fulton) */
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002
Guido van Rossume15dee51995-07-18 14:12:02 +00003#include "Python.h"
Guido van Rossumfa0b6ab1998-05-22 15:23:36 +00004#include <ctype.h>
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00005#include "structmember.h" /* we need the offsetof() macro from there */
Tim Peters64b5ce32001-09-10 20:52:51 +00006#include "longintrepr.h"
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00007
8#define NEW_STYLE_NUMBER(o) PyType_HasFeature((o)->ob_type, \
Guido van Rossumc3189692001-01-17 15:29:42 +00009 Py_TPFLAGS_CHECKTYPES)
Guido van Rossume15dee51995-07-18 14:12:02 +000010
Martin v. Löwis5cb69362006-04-14 09:08:42 +000011
Guido van Rossumcea1c8c1998-05-22 00:47:05 +000012/* Shorthands to return certain errors */
Guido van Rossume15dee51995-07-18 14:12:02 +000013
14static PyObject *
Georg Brandlccff7852006-06-18 22:17:29 +000015type_error(const char *msg, PyObject *obj)
Guido van Rossume15dee51995-07-18 14:12:02 +000016{
Georg Brandlccff7852006-06-18 22:17:29 +000017 PyErr_Format(PyExc_TypeError, msg, obj->ob_type->tp_name);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +000018 return NULL;
Guido van Rossume15dee51995-07-18 14:12:02 +000019}
20
Guido van Rossum052b7e11996-11-11 15:08:19 +000021static PyObject *
Fred Drake79912472000-07-09 04:06:11 +000022null_error(void)
Guido van Rossume15dee51995-07-18 14:12:02 +000023{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +000024 if (!PyErr_Occurred())
25 PyErr_SetString(PyExc_SystemError,
26 "null argument to internal routine");
27 return NULL;
Guido van Rossume15dee51995-07-18 14:12:02 +000028}
29
Guido van Rossumcea1c8c1998-05-22 00:47:05 +000030/* Operations on any object */
31
32int
Fred Drake79912472000-07-09 04:06:11 +000033PyObject_Cmp(PyObject *o1, PyObject *o2, int *result)
Guido van Rossumcea1c8c1998-05-22 00:47:05 +000034{
35 int r;
36
37 if (o1 == NULL || o2 == NULL) {
38 null_error();
39 return -1;
40 }
41 r = PyObject_Compare(o1, o2);
42 if (PyErr_Occurred())
43 return -1;
44 *result = r;
Guido van Rossume15dee51995-07-18 14:12:02 +000045 return 0;
46}
Guido van Rossume15dee51995-07-18 14:12:02 +000047
48PyObject *
Fred Drake79912472000-07-09 04:06:11 +000049PyObject_Type(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +000050{
51 PyObject *v;
52
Guido van Rossumcea1c8c1998-05-22 00:47:05 +000053 if (o == NULL)
54 return null_error();
Guido van Rossume15dee51995-07-18 14:12:02 +000055 v = (PyObject *)o->ob_type;
56 Py_INCREF(v);
57 return v;
58}
59
Martin v. Löwis18e16552006-02-15 17:27:45 +000060Py_ssize_t
Jeremy Hylton6253f832000-07-12 12:56:19 +000061PyObject_Size(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +000062{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +000063 PySequenceMethods *m;
Guido van Rossume15dee51995-07-18 14:12:02 +000064
Guido van Rossumcea1c8c1998-05-22 00:47:05 +000065 if (o == NULL) {
66 null_error();
67 return -1;
68 }
Guido van Rossume15dee51995-07-18 14:12:02 +000069
Guido van Rossumcea1c8c1998-05-22 00:47:05 +000070 m = o->ob_type->tp_as_sequence;
71 if (m && m->sq_length)
72 return m->sq_length(o);
Guido van Rossume15dee51995-07-18 14:12:02 +000073
Jeremy Hylton6253f832000-07-12 12:56:19 +000074 return PyMapping_Size(o);
Guido van Rossume15dee51995-07-18 14:12:02 +000075}
76
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +000077#undef PyObject_Length
Martin v. Löwis18e16552006-02-15 17:27:45 +000078Py_ssize_t
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +000079PyObject_Length(PyObject *o)
80{
81 return PyObject_Size(o);
82}
83#define PyObject_Length PyObject_Size
84
Raymond Hettinger6b27cda2005-09-24 21:23:05 +000085
Raymond Hettinger4e2f7142007-12-06 00:56:53 +000086/* The length hint function returns a non-negative value from o.__len__()
87 or o.__length_hint__(). If those methods aren't found or return a negative
88 value, then the defaultvalue is returned. This function never fails.
89 Accordingly, it will mask exceptions raised in either method.
90*/
91
92Py_ssize_t
93_PyObject_LengthHint(PyObject *o, Py_ssize_t defaultvalue)
94{
95 static PyObject *hintstrobj = NULL;
96 PyObject *ro;
97 Py_ssize_t rv;
98
99 /* try o.__len__() */
100 rv = PyObject_Size(o);
101 if (rv >= 0)
102 return rv;
103 if (PyErr_Occurred())
104 PyErr_Clear();
105
106 /* cache a hashed version of the attribute string */
107 if (hintstrobj == NULL) {
108 hintstrobj = PyString_InternFromString("__length_hint__");
109 if (hintstrobj == NULL)
110 goto defaultcase;
Raymond Hettinger6b27cda2005-09-24 21:23:05 +0000111 }
Raymond Hettinger4e2f7142007-12-06 00:56:53 +0000112
113 /* try o.__length_hint__() */
114 ro = PyObject_CallMethodObjArgs(o, hintstrobj, NULL);
115 if (ro == NULL)
116 goto defaultcase;
117 rv = PyInt_AsLong(ro);
118 Py_DECREF(ro);
119 if (rv >= 0)
120 return rv;
121
122defaultcase:
123 if (PyErr_Occurred())
124 PyErr_Clear();
125 return defaultvalue;
Raymond Hettinger6b27cda2005-09-24 21:23:05 +0000126}
127
Guido van Rossume15dee51995-07-18 14:12:02 +0000128PyObject *
Fred Drake79912472000-07-09 04:06:11 +0000129PyObject_GetItem(PyObject *o, PyObject *key)
Guido van Rossume15dee51995-07-18 14:12:02 +0000130{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000131 PyMappingMethods *m;
Guido van Rossume15dee51995-07-18 14:12:02 +0000132
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000133 if (o == NULL || key == NULL)
134 return null_error();
Guido van Rossume15dee51995-07-18 14:12:02 +0000135
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000136 m = o->ob_type->tp_as_mapping;
137 if (m && m->mp_subscript)
138 return m->mp_subscript(o, key);
Guido van Rossume15dee51995-07-18 14:12:02 +0000139
Guido van Rossum21308241998-08-13 16:44:44 +0000140 if (o->ob_type->tp_as_sequence) {
Neal Norwitz8a87f5d2006-08-12 17:03:09 +0000141 if (PyIndex_Check(key)) {
142 Py_ssize_t key_value;
143 key_value = PyNumber_AsSsize_t(key, PyExc_IndexError);
Andrew M. Kuchling0f223d22000-02-23 22:21:50 +0000144 if (key_value == -1 && PyErr_Occurred())
145 return NULL;
146 return PySequence_GetItem(o, key_value);
147 }
Guido van Rossum64585f62001-11-24 18:24:47 +0000148 else if (o->ob_type->tp_as_sequence->sq_item)
Georg Brandlccff7852006-06-18 22:17:29 +0000149 return type_error("sequence index must "
150 "be integer, not '%.200s'", key);
Guido van Rossum21308241998-08-13 16:44:44 +0000151 }
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000152
Georg Brandlccff7852006-06-18 22:17:29 +0000153 return type_error("'%.200s' object is unsubscriptable", o);
Guido van Rossume15dee51995-07-18 14:12:02 +0000154}
155
156int
Fred Drake79912472000-07-09 04:06:11 +0000157PyObject_SetItem(PyObject *o, PyObject *key, PyObject *value)
Guido van Rossume15dee51995-07-18 14:12:02 +0000158{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000159 PyMappingMethods *m;
Guido van Rossume15dee51995-07-18 14:12:02 +0000160
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000161 if (o == NULL || key == NULL || value == NULL) {
162 null_error();
163 return -1;
164 }
165 m = o->ob_type->tp_as_mapping;
166 if (m && m->mp_ass_subscript)
167 return m->mp_ass_subscript(o, key, value);
Guido van Rossume15dee51995-07-18 14:12:02 +0000168
Guido van Rossum21308241998-08-13 16:44:44 +0000169 if (o->ob_type->tp_as_sequence) {
Neal Norwitz8a87f5d2006-08-12 17:03:09 +0000170 if (PyIndex_Check(key)) {
171 Py_ssize_t key_value;
172 key_value = PyNumber_AsSsize_t(key, PyExc_IndexError);
Andrew M. Kuchling0f223d22000-02-23 22:21:50 +0000173 if (key_value == -1 && PyErr_Occurred())
174 return -1;
175 return PySequence_SetItem(o, key_value, value);
176 }
Guido van Rossum64585f62001-11-24 18:24:47 +0000177 else if (o->ob_type->tp_as_sequence->sq_ass_item) {
Georg Brandlccff7852006-06-18 22:17:29 +0000178 type_error("sequence index must be "
179 "integer, not '%.200s'", key);
Guido van Rossum64585f62001-11-24 18:24:47 +0000180 return -1;
181 }
Guido van Rossum21308241998-08-13 16:44:44 +0000182 }
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000183
Georg Brandlccff7852006-06-18 22:17:29 +0000184 type_error("'%.200s' object does not support item assignment", o);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000185 return -1;
Guido van Rossume15dee51995-07-18 14:12:02 +0000186}
187
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000188int
Fred Drake79912472000-07-09 04:06:11 +0000189PyObject_DelItem(PyObject *o, PyObject *key)
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000190{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000191 PyMappingMethods *m;
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000192
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000193 if (o == NULL || key == NULL) {
194 null_error();
195 return -1;
196 }
197 m = o->ob_type->tp_as_mapping;
198 if (m && m->mp_ass_subscript)
199 return m->mp_ass_subscript(o, key, (PyObject*)NULL);
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000200
Guido van Rossum21308241998-08-13 16:44:44 +0000201 if (o->ob_type->tp_as_sequence) {
Neal Norwitz8a87f5d2006-08-12 17:03:09 +0000202 if (PyIndex_Check(key)) {
203 Py_ssize_t key_value;
204 key_value = PyNumber_AsSsize_t(key, PyExc_IndexError);
Andrew M. Kuchling0f223d22000-02-23 22:21:50 +0000205 if (key_value == -1 && PyErr_Occurred())
206 return -1;
207 return PySequence_DelItem(o, key_value);
208 }
Guido van Rossum64585f62001-11-24 18:24:47 +0000209 else if (o->ob_type->tp_as_sequence->sq_ass_item) {
Georg Brandlccff7852006-06-18 22:17:29 +0000210 type_error("sequence index must be "
211 "integer, not '%.200s'", key);
Guido van Rossum64585f62001-11-24 18:24:47 +0000212 return -1;
213 }
Guido van Rossum21308241998-08-13 16:44:44 +0000214 }
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000215
Georg Brandlccff7852006-06-18 22:17:29 +0000216 type_error("'%.200s' object does not support item deletion", o);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000217 return -1;
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000218}
219
Martin v. Löwisb0d71d02002-01-05 10:50:30 +0000220int
221PyObject_DelItemString(PyObject *o, char *key)
222{
223 PyObject *okey;
224 int ret;
225
226 if (o == NULL || key == NULL) {
227 null_error();
228 return -1;
229 }
230 okey = PyString_FromString(key);
231 if (okey == NULL)
232 return -1;
233 ret = PyObject_DelItem(o, okey);
234 Py_DECREF(okey);
235 return ret;
236}
237
Brett Cannonea229bd2006-06-06 18:08:16 +0000238int
239PyObject_AsCharBuffer(PyObject *obj,
Guido van Rossum4c08d552000-03-10 22:55:18 +0000240 const char **buffer,
Martin v. Löwis18e16552006-02-15 17:27:45 +0000241 Py_ssize_t *buffer_len)
Guido van Rossum4c08d552000-03-10 22:55:18 +0000242{
243 PyBufferProcs *pb;
Martin v. Löwis15e62742006-02-27 16:46:16 +0000244 char *pp;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000245 Py_ssize_t len;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000246
247 if (obj == NULL || buffer == NULL || buffer_len == NULL) {
248 null_error();
249 return -1;
250 }
251 pb = obj->ob_type->tp_as_buffer;
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000252 if (pb == NULL ||
Guido van Rossum4c08d552000-03-10 22:55:18 +0000253 pb->bf_getcharbuffer == NULL ||
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000254 pb->bf_getsegcount == NULL) {
Guido van Rossum4c08d552000-03-10 22:55:18 +0000255 PyErr_SetString(PyExc_TypeError,
256 "expected a character buffer object");
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000257 return -1;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000258 }
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000259 if ((*pb->bf_getsegcount)(obj,NULL) != 1) {
Guido van Rossum4c08d552000-03-10 22:55:18 +0000260 PyErr_SetString(PyExc_TypeError,
261 "expected a single-segment buffer object");
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000262 return -1;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000263 }
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000264 len = (*pb->bf_getcharbuffer)(obj, 0, &pp);
Guido van Rossum4c08d552000-03-10 22:55:18 +0000265 if (len < 0)
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000266 return -1;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000267 *buffer = pp;
268 *buffer_len = len;
269 return 0;
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000270}
Guido van Rossum4c08d552000-03-10 22:55:18 +0000271
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000272int
273PyObject_CheckReadBuffer(PyObject *obj)
274{
275 PyBufferProcs *pb = obj->ob_type->tp_as_buffer;
276
277 if (pb == NULL ||
278 pb->bf_getreadbuffer == NULL ||
279 pb->bf_getsegcount == NULL ||
280 (*pb->bf_getsegcount)(obj, NULL) != 1)
281 return 0;
282 return 1;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000283}
284
285int PyObject_AsReadBuffer(PyObject *obj,
286 const void **buffer,
Martin v. Löwis18e16552006-02-15 17:27:45 +0000287 Py_ssize_t *buffer_len)
Guido van Rossum4c08d552000-03-10 22:55:18 +0000288{
289 PyBufferProcs *pb;
290 void *pp;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000291 Py_ssize_t len;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000292
293 if (obj == NULL || buffer == NULL || buffer_len == NULL) {
294 null_error();
295 return -1;
296 }
297 pb = obj->ob_type->tp_as_buffer;
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000298 if (pb == NULL ||
Guido van Rossum4c08d552000-03-10 22:55:18 +0000299 pb->bf_getreadbuffer == NULL ||
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000300 pb->bf_getsegcount == NULL) {
Guido van Rossum4c08d552000-03-10 22:55:18 +0000301 PyErr_SetString(PyExc_TypeError,
302 "expected a readable buffer object");
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000303 return -1;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000304 }
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000305 if ((*pb->bf_getsegcount)(obj, NULL) != 1) {
Guido van Rossum4c08d552000-03-10 22:55:18 +0000306 PyErr_SetString(PyExc_TypeError,
307 "expected a single-segment buffer object");
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000308 return -1;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000309 }
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000310 len = (*pb->bf_getreadbuffer)(obj, 0, &pp);
Guido van Rossum4c08d552000-03-10 22:55:18 +0000311 if (len < 0)
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000312 return -1;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000313 *buffer = pp;
314 *buffer_len = len;
315 return 0;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000316}
317
318int PyObject_AsWriteBuffer(PyObject *obj,
319 void **buffer,
Martin v. Löwis18e16552006-02-15 17:27:45 +0000320 Py_ssize_t *buffer_len)
Guido van Rossum4c08d552000-03-10 22:55:18 +0000321{
322 PyBufferProcs *pb;
323 void*pp;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000324 Py_ssize_t len;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000325
326 if (obj == NULL || buffer == NULL || buffer_len == NULL) {
327 null_error();
328 return -1;
329 }
330 pb = obj->ob_type->tp_as_buffer;
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000331 if (pb == NULL ||
Guido van Rossum4c08d552000-03-10 22:55:18 +0000332 pb->bf_getwritebuffer == NULL ||
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000333 pb->bf_getsegcount == NULL) {
Guido van Rossum4c08d552000-03-10 22:55:18 +0000334 PyErr_SetString(PyExc_TypeError,
335 "expected a writeable buffer object");
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000336 return -1;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000337 }
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000338 if ((*pb->bf_getsegcount)(obj, NULL) != 1) {
Guido van Rossum4c08d552000-03-10 22:55:18 +0000339 PyErr_SetString(PyExc_TypeError,
340 "expected a single-segment buffer object");
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000341 return -1;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000342 }
343 len = (*pb->bf_getwritebuffer)(obj,0,&pp);
344 if (len < 0)
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000345 return -1;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000346 *buffer = pp;
347 *buffer_len = len;
348 return 0;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000349}
350
Eric Smitha9f7d622008-02-17 19:46:49 +0000351PyObject *
352PyObject_Format(PyObject* obj, PyObject *format_spec)
353{
354 static PyObject * str__format__ = NULL;
355 PyObject *empty = NULL;
356 PyObject *result = NULL;
357 int spec_is_unicode;
358 int result_is_unicode;
359
360 /* Initialize cached value */
361 if (str__format__ == NULL) {
362 /* Initialize static variable needed by _PyType_Lookup */
363 str__format__ = PyString_InternFromString("__format__");
364 if (str__format__ == NULL)
365 goto done;
366 }
367
368 /* If no format_spec is provided, use an empty string */
369 if (format_spec == NULL) {
370 empty = PyString_FromStringAndSize(NULL, 0);
371 format_spec = empty;
372 }
373
374 /* Check the format_spec type, and make sure it's str or unicode */
375 if (PyUnicode_Check(format_spec))
376 spec_is_unicode = 1;
377 else if (PyString_Check(format_spec))
378 spec_is_unicode = 0;
379 else {
380 PyErr_Format(PyExc_TypeError,
381 "format expects arg 2 to be string "
382 "or unicode, not %.100s", Py_TYPE(format_spec)->tp_name);
383 goto done;
384 }
385
386 /* Make sure the type is initialized. float gets initialized late */
387 if (Py_TYPE(obj)->tp_dict == NULL)
388 if (PyType_Ready(Py_TYPE(obj)) < 0)
389 goto done;
390
391 /* Check for a __format__ method and call it. */
392 if (PyInstance_Check(obj)) {
393 /* We're an instance of a classic class */
394 PyObject *bound_method = PyObject_GetAttr(obj,
395 str__format__);
396 if (bound_method != NULL) {
397 result = PyObject_CallFunctionObjArgs(bound_method,
398 format_spec,
399 NULL);
400 Py_DECREF(bound_method);
401 } else {
402 PyObject *self_as_str;
403 PyObject *format_method;
404
405 PyErr_Clear();
406 /* Per the PEP, convert to str (or unicode,
407 depending on the type of the format
408 specifier). For new-style classes, this
409 logic is done by object.__format__(). */
410 if (spec_is_unicode)
411 self_as_str = PyObject_Unicode(obj);
412 else
413 self_as_str = PyObject_Str(obj);
414 if (self_as_str == NULL)
415 goto done;
416
417 /* Then call str.__format__ on that result */
418 format_method = PyObject_GetAttr(self_as_str,
419 str__format__);
420 if (format_method == NULL) {
421 Py_DECREF(self_as_str);
422 goto done;
423 }
424 result = PyObject_CallFunctionObjArgs(format_method,
425 format_spec,
426 NULL);
427 Py_DECREF(self_as_str);
428 Py_DECREF(format_method);
429 if (result == NULL)
430 goto done;
431 }
432 } else {
433 /* Not an instance of a classic class, use the code
434 from py3k */
435
436 /* Find the (unbound!) __format__ method (a borrowed
437 reference) */
438 PyObject *method = _PyType_Lookup(Py_TYPE(obj),
439 str__format__);
440 if (method == NULL) {
441 PyErr_Format(PyExc_TypeError,
442 "Type %.100s doesn't define __format__",
443 Py_TYPE(obj)->tp_name);
444 goto done;
445 }
446 /* And call it, binding it to the value */
447 result = PyObject_CallFunctionObjArgs(method, obj,
448 format_spec, NULL);
449 }
450
451 if (result == NULL)
452 goto done;
453
454 /* Check the result type, and make sure it's str or unicode */
455 if (PyUnicode_Check(result))
456 result_is_unicode = 1;
457 else if (PyString_Check(result))
458 result_is_unicode = 0;
459 else {
460 PyErr_Format(PyExc_TypeError,
461 "%.100s.__format__ must return string or "
462 "unicode, not %.100s", Py_TYPE(obj)->tp_name,
463 Py_TYPE(result)->tp_name);
464 Py_DECREF(result);
465 result = NULL;
466 goto done;
467 }
468
469 /* Convert to unicode, if needed. Required if spec is unicode
470 and result is str */
471 if (spec_is_unicode && !result_is_unicode) {
472 PyObject *tmp = PyObject_Unicode(result);
473 /* This logic works whether or not tmp is NULL */
474 Py_DECREF(result);
475 result = tmp;
476 }
477
478done:
479 Py_XDECREF(empty);
480 return result;
481}
482
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000483/* Operations on numbers */
484
485int
Fred Drake79912472000-07-09 04:06:11 +0000486PyNumber_Check(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +0000487{
Guido van Rossum6921eca2003-02-18 16:36:28 +0000488 return o && o->ob_type->tp_as_number &&
489 (o->ob_type->tp_as_number->nb_int ||
490 o->ob_type->tp_as_number->nb_float);
Guido van Rossume15dee51995-07-18 14:12:02 +0000491}
492
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000493/* Binary operators */
Guido van Rossume15dee51995-07-18 14:12:02 +0000494
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000495/* New style number protocol support */
Guido van Rossume15dee51995-07-18 14:12:02 +0000496
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000497#define NB_SLOT(x) offsetof(PyNumberMethods, x)
498#define NB_BINOP(nb_methods, slot) \
Neil Schemenauerb808c5c2002-11-24 01:34:49 +0000499 (*(binaryfunc*)(& ((char*)nb_methods)[slot]))
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000500#define NB_TERNOP(nb_methods, slot) \
Neil Schemenauerb808c5c2002-11-24 01:34:49 +0000501 (*(ternaryfunc*)(& ((char*)nb_methods)[slot]))
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000502
503/*
504 Calling scheme used for binary operations:
505
506 v w Action
507 -------------------------------------------------------------------
Guido van Rossum4bb1e362001-09-28 23:49:48 +0000508 new new w.op(v,w)[*], v.op(v,w), w.op(v,w)
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000509 new old v.op(v,w), coerce(v,w), v.op(v,w)
510 old new w.op(v,w), coerce(v,w), v.op(v,w)
511 old old coerce(v,w), v.op(v,w)
512
Guido van Rossum4bb1e362001-09-28 23:49:48 +0000513 [*] only when v->ob_type != w->ob_type && w->ob_type is a subclass of
514 v->ob_type
515
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000516 Legend:
517 -------
518 * new == new style number
519 * old == old style number
520 * Action indicates the order in which operations are tried until either
521 a valid result is produced or an error occurs.
522
523 */
524
525static PyObject *
526binary_op1(PyObject *v, PyObject *w, const int op_slot)
Guido van Rossume15dee51995-07-18 14:12:02 +0000527{
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000528 PyObject *x;
Guido van Rossum4bb1e362001-09-28 23:49:48 +0000529 binaryfunc slotv = NULL;
530 binaryfunc slotw = NULL;
531
532 if (v->ob_type->tp_as_number != NULL && NEW_STYLE_NUMBER(v))
Neil Schemenauerb808c5c2002-11-24 01:34:49 +0000533 slotv = NB_BINOP(v->ob_type->tp_as_number, op_slot);
Guido van Rossum4bb1e362001-09-28 23:49:48 +0000534 if (w->ob_type != v->ob_type &&
535 w->ob_type->tp_as_number != NULL && NEW_STYLE_NUMBER(w)) {
Neil Schemenauerb808c5c2002-11-24 01:34:49 +0000536 slotw = NB_BINOP(w->ob_type->tp_as_number, op_slot);
Guido van Rossum4bb1e362001-09-28 23:49:48 +0000537 if (slotw == slotv)
538 slotw = NULL;
Guido van Rossume15dee51995-07-18 14:12:02 +0000539 }
Guido van Rossum4bb1e362001-09-28 23:49:48 +0000540 if (slotv) {
Guido van Rossum89c42642001-10-01 17:10:18 +0000541 if (slotw && PyType_IsSubtype(w->ob_type, v->ob_type)) {
542 x = slotw(v, w);
543 if (x != Py_NotImplemented)
544 return x;
545 Py_DECREF(x); /* can't do it */
546 slotw = NULL;
547 }
Guido van Rossum4bb1e362001-09-28 23:49:48 +0000548 x = slotv(v, w);
549 if (x != Py_NotImplemented)
550 return x;
551 Py_DECREF(x); /* can't do it */
552 }
553 if (slotw) {
554 x = slotw(v, w);
555 if (x != Py_NotImplemented)
556 return x;
557 Py_DECREF(x); /* can't do it */
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000558 }
559 if (!NEW_STYLE_NUMBER(v) || !NEW_STYLE_NUMBER(w)) {
560 int err = PyNumber_CoerceEx(&v, &w);
561 if (err < 0) {
562 return NULL;
563 }
564 if (err == 0) {
565 PyNumberMethods *mv = v->ob_type->tp_as_number;
566 if (mv) {
Guido van Rossum4bb1e362001-09-28 23:49:48 +0000567 binaryfunc slot;
Neil Schemenauerb808c5c2002-11-24 01:34:49 +0000568 slot = NB_BINOP(mv, op_slot);
Guido van Rossum4bb1e362001-09-28 23:49:48 +0000569 if (slot) {
Neal Norwitz0c6e2f12006-01-08 06:13:44 +0000570 x = slot(v, w);
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000571 Py_DECREF(v);
572 Py_DECREF(w);
573 return x;
574 }
575 }
576 /* CoerceEx incremented the reference counts */
577 Py_DECREF(v);
578 Py_DECREF(w);
579 }
580 }
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000581 Py_INCREF(Py_NotImplemented);
582 return Py_NotImplemented;
583}
Guido van Rossum77660912002-04-16 16:32:50 +0000584
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000585static PyObject *
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +0000586binop_type_error(PyObject *v, PyObject *w, const char *op_name)
587{
588 PyErr_Format(PyExc_TypeError,
Georg Brandlccff7852006-06-18 22:17:29 +0000589 "unsupported operand type(s) for %.100s: "
590 "'%.100s' and '%.100s'",
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +0000591 op_name,
592 v->ob_type->tp_name,
593 w->ob_type->tp_name);
594 return NULL;
595}
596
597static PyObject *
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000598binary_op(PyObject *v, PyObject *w, const int op_slot, const char *op_name)
599{
600 PyObject *result = binary_op1(v, w, op_slot);
601 if (result == Py_NotImplemented) {
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +0000602 Py_DECREF(result);
603 return binop_type_error(v, w, op_name);
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000604 }
605 return result;
Guido van Rossume15dee51995-07-18 14:12:02 +0000606}
607
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000608
609/*
610 Calling scheme used for ternary operations:
611
Guido van Rossum84675ac2001-09-29 01:05:03 +0000612 *** In some cases, w.op is called before v.op; see binary_op1. ***
613
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000614 v w z Action
615 -------------------------------------------------------------------
616 new new new v.op(v,w,z), w.op(v,w,z), z.op(v,w,z)
617 new old new v.op(v,w,z), z.op(v,w,z), coerce(v,w,z), v.op(v,w,z)
618 old new new w.op(v,w,z), z.op(v,w,z), coerce(v,w,z), v.op(v,w,z)
619 old old new z.op(v,w,z), coerce(v,w,z), v.op(v,w,z)
620 new new old v.op(v,w,z), w.op(v,w,z), coerce(v,w,z), v.op(v,w,z)
621 new old old v.op(v,w,z), coerce(v,w,z), v.op(v,w,z)
622 old new old w.op(v,w,z), coerce(v,w,z), v.op(v,w,z)
623 old old old coerce(v,w,z), v.op(v,w,z)
624
625 Legend:
626 -------
627 * new == new style number
628 * old == old style number
629 * Action indicates the order in which operations are tried until either
630 a valid result is produced or an error occurs.
631 * coerce(v,w,z) actually does: coerce(v,w), coerce(v,z), coerce(w,z) and
632 only if z != Py_None; if z == Py_None, then it is treated as absent
633 variable and only coerce(v,w) is tried.
634
635 */
636
637static PyObject *
638ternary_op(PyObject *v,
639 PyObject *w,
640 PyObject *z,
641 const int op_slot,
642 const char *op_name)
Guido van Rossume15dee51995-07-18 14:12:02 +0000643{
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000644 PyNumberMethods *mv, *mw, *mz;
Guido van Rossum84675ac2001-09-29 01:05:03 +0000645 PyObject *x = NULL;
646 ternaryfunc slotv = NULL;
647 ternaryfunc slotw = NULL;
648 ternaryfunc slotz = NULL;
Guido van Rossum77660912002-04-16 16:32:50 +0000649
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000650 mv = v->ob_type->tp_as_number;
Guido van Rossum4bb1e362001-09-28 23:49:48 +0000651 mw = w->ob_type->tp_as_number;
Guido van Rossum84675ac2001-09-29 01:05:03 +0000652 if (mv != NULL && NEW_STYLE_NUMBER(v))
Neil Schemenauerb808c5c2002-11-24 01:34:49 +0000653 slotv = NB_TERNOP(mv, op_slot);
Guido van Rossum84675ac2001-09-29 01:05:03 +0000654 if (w->ob_type != v->ob_type &&
Raymond Hettingerc2e095f2002-12-07 10:05:27 +0000655 mw != NULL && NEW_STYLE_NUMBER(w)) {
Neil Schemenauerb808c5c2002-11-24 01:34:49 +0000656 slotw = NB_TERNOP(mw, op_slot);
Guido van Rossum84675ac2001-09-29 01:05:03 +0000657 if (slotw == slotv)
658 slotw = NULL;
Guido van Rossum4bb1e362001-09-28 23:49:48 +0000659 }
Guido van Rossum84675ac2001-09-29 01:05:03 +0000660 if (slotv) {
Guido van Rossum89c42642001-10-01 17:10:18 +0000661 if (slotw && PyType_IsSubtype(w->ob_type, v->ob_type)) {
662 x = slotw(v, w, z);
663 if (x != Py_NotImplemented)
664 return x;
665 Py_DECREF(x); /* can't do it */
666 slotw = NULL;
667 }
Guido van Rossum84675ac2001-09-29 01:05:03 +0000668 x = slotv(v, w, z);
669 if (x != Py_NotImplemented)
670 return x;
671 Py_DECREF(x); /* can't do it */
672 }
673 if (slotw) {
674 x = slotw(v, w, z);
675 if (x != Py_NotImplemented)
676 return x;
677 Py_DECREF(x); /* can't do it */
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000678 }
679 mz = z->ob_type->tp_as_number;
680 if (mz != NULL && NEW_STYLE_NUMBER(z)) {
Neil Schemenauerb808c5c2002-11-24 01:34:49 +0000681 slotz = NB_TERNOP(mz, op_slot);
Guido van Rossum84675ac2001-09-29 01:05:03 +0000682 if (slotz == slotv || slotz == slotw)
683 slotz = NULL;
684 if (slotz) {
685 x = slotz(v, w, z);
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000686 if (x != Py_NotImplemented)
687 return x;
Guido van Rossum84675ac2001-09-29 01:05:03 +0000688 Py_DECREF(x); /* can't do it */
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000689 }
690 }
691
692 if (!NEW_STYLE_NUMBER(v) || !NEW_STYLE_NUMBER(w) ||
693 (z != Py_None && !NEW_STYLE_NUMBER(z))) {
694 /* we have an old style operand, coerce */
695 PyObject *v1, *z1, *w2, *z2;
696 int c;
Guido van Rossum77660912002-04-16 16:32:50 +0000697
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000698 c = PyNumber_Coerce(&v, &w);
699 if (c != 0)
700 goto error3;
701
702 /* Special case: if the third argument is None, it is
703 treated as absent argument and not coerced. */
704 if (z == Py_None) {
705 if (v->ob_type->tp_as_number) {
Neil Schemenauerb808c5c2002-11-24 01:34:49 +0000706 slotz = NB_TERNOP(v->ob_type->tp_as_number,
707 op_slot);
Guido van Rossum84675ac2001-09-29 01:05:03 +0000708 if (slotz)
709 x = slotz(v, w, z);
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000710 else
711 c = -1;
712 }
713 else
714 c = -1;
715 goto error2;
716 }
717 v1 = v;
718 z1 = z;
719 c = PyNumber_Coerce(&v1, &z1);
720 if (c != 0)
721 goto error2;
722 w2 = w;
723 z2 = z1;
724 c = PyNumber_Coerce(&w2, &z2);
725 if (c != 0)
726 goto error1;
727
728 if (v1->ob_type->tp_as_number != NULL) {
Neil Schemenauerb808c5c2002-11-24 01:34:49 +0000729 slotv = NB_TERNOP(v1->ob_type->tp_as_number,
730 op_slot);
Guido van Rossum84675ac2001-09-29 01:05:03 +0000731 if (slotv)
732 x = slotv(v1, w2, z2);
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000733 else
734 c = -1;
735 }
736 else
737 c = -1;
738
739 Py_DECREF(w2);
740 Py_DECREF(z2);
741 error1:
742 Py_DECREF(v1);
743 Py_DECREF(z1);
744 error2:
Guido van Rossume15dee51995-07-18 14:12:02 +0000745 Py_DECREF(v);
746 Py_DECREF(w);
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000747 error3:
748 if (c >= 0)
Guido van Rossume15dee51995-07-18 14:12:02 +0000749 return x;
750 }
Guido van Rossum5c66a262001-10-22 04:12:44 +0000751
752 if (z == Py_None)
753 PyErr_Format(
754 PyExc_TypeError,
755 "unsupported operand type(s) for ** or pow(): "
Georg Brandlccff7852006-06-18 22:17:29 +0000756 "'%.100s' and '%.100s'",
Guido van Rossum5c66a262001-10-22 04:12:44 +0000757 v->ob_type->tp_name,
758 w->ob_type->tp_name);
759 else
760 PyErr_Format(
761 PyExc_TypeError,
762 "unsupported operand type(s) for pow(): "
Georg Brandlccff7852006-06-18 22:17:29 +0000763 "'%.100s', '%.100s', '%.100s'",
Guido van Rossum5c66a262001-10-22 04:12:44 +0000764 v->ob_type->tp_name,
765 w->ob_type->tp_name,
766 z->ob_type->tp_name);
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000767 return NULL;
Guido van Rossume15dee51995-07-18 14:12:02 +0000768}
769
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000770#define BINARY_FUNC(func, op, op_name) \
771 PyObject * \
772 func(PyObject *v, PyObject *w) { \
773 return binary_op(v, w, NB_SLOT(op), op_name); \
774 }
Guido van Rossume15dee51995-07-18 14:12:02 +0000775
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000776BINARY_FUNC(PyNumber_Or, nb_or, "|")
777BINARY_FUNC(PyNumber_Xor, nb_xor, "^")
778BINARY_FUNC(PyNumber_And, nb_and, "&")
779BINARY_FUNC(PyNumber_Lshift, nb_lshift, "<<")
780BINARY_FUNC(PyNumber_Rshift, nb_rshift, ">>")
781BINARY_FUNC(PyNumber_Subtract, nb_subtract, "-")
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000782BINARY_FUNC(PyNumber_Divide, nb_divide, "/")
783BINARY_FUNC(PyNumber_Divmod, nb_divmod, "divmod()")
Guido van Rossume15dee51995-07-18 14:12:02 +0000784
785PyObject *
Fred Drake79912472000-07-09 04:06:11 +0000786PyNumber_Add(PyObject *v, PyObject *w)
Guido van Rossume15dee51995-07-18 14:12:02 +0000787{
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000788 PyObject *result = binary_op1(v, w, NB_SLOT(nb_add));
789 if (result == Py_NotImplemented) {
790 PySequenceMethods *m = v->ob_type->tp_as_sequence;
Armin Rigofd163f92005-12-29 15:59:19 +0000791 Py_DECREF(result);
Jeremy Hylton0522d982002-03-08 21:28:54 +0000792 if (m && m->sq_concat) {
Armin Rigofd163f92005-12-29 15:59:19 +0000793 return (*m->sq_concat)(v, w);
Jeremy Hylton0522d982002-03-08 21:28:54 +0000794 }
Armin Rigofd163f92005-12-29 15:59:19 +0000795 result = binop_type_error(v, w, "+");
Guido van Rossume15dee51995-07-18 14:12:02 +0000796 }
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000797 return result;
Guido van Rossume15dee51995-07-18 14:12:02 +0000798}
799
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +0000800static PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +0000801sequence_repeat(ssizeargfunc repeatfunc, PyObject *seq, PyObject *n)
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +0000802{
Guido van Rossum38fff8c2006-03-07 18:50:55 +0000803 Py_ssize_t count;
Neal Norwitz8a87f5d2006-08-12 17:03:09 +0000804 if (PyIndex_Check(n)) {
805 count = PyNumber_AsSsize_t(n, PyExc_OverflowError);
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +0000806 if (count == -1 && PyErr_Occurred())
807 return NULL;
808 }
809 else {
Georg Brandlccff7852006-06-18 22:17:29 +0000810 return type_error("can't multiply sequence by "
811 "non-int of type '%.200s'", n);
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +0000812 }
Guido van Rossum38fff8c2006-03-07 18:50:55 +0000813 return (*repeatfunc)(seq, count);
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +0000814}
815
816PyObject *
817PyNumber_Multiply(PyObject *v, PyObject *w)
818{
819 PyObject *result = binary_op1(v, w, NB_SLOT(nb_multiply));
820 if (result == Py_NotImplemented) {
821 PySequenceMethods *mv = v->ob_type->tp_as_sequence;
822 PySequenceMethods *mw = w->ob_type->tp_as_sequence;
Guido van Rossuma3a243e2002-12-31 19:50:03 +0000823 Py_DECREF(result);
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +0000824 if (mv && mv->sq_repeat) {
825 return sequence_repeat(mv->sq_repeat, v, w);
826 }
827 else if (mw && mw->sq_repeat) {
828 return sequence_repeat(mw->sq_repeat, w, v);
829 }
830 result = binop_type_error(v, w, "*");
831 }
832 return result;
833}
834
Guido van Rossume15dee51995-07-18 14:12:02 +0000835PyObject *
Guido van Rossum4668b002001-08-08 05:00:18 +0000836PyNumber_FloorDivide(PyObject *v, PyObject *w)
837{
838 /* XXX tp_flags test */
839 return binary_op(v, w, NB_SLOT(nb_floor_divide), "//");
840}
841
842PyObject *
843PyNumber_TrueDivide(PyObject *v, PyObject *w)
844{
845 /* XXX tp_flags test */
846 return binary_op(v, w, NB_SLOT(nb_true_divide), "/");
847}
848
849PyObject *
Fred Drake79912472000-07-09 04:06:11 +0000850PyNumber_Remainder(PyObject *v, PyObject *w)
Guido van Rossume15dee51995-07-18 14:12:02 +0000851{
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000852 return binary_op(v, w, NB_SLOT(nb_remainder), "%");
Guido van Rossume15dee51995-07-18 14:12:02 +0000853}
854
855PyObject *
Fred Drake79912472000-07-09 04:06:11 +0000856PyNumber_Power(PyObject *v, PyObject *w, PyObject *z)
Guido van Rossume15dee51995-07-18 14:12:02 +0000857{
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000858 return ternary_op(v, w, z, NB_SLOT(nb_power), "** or pow()");
Guido van Rossume15dee51995-07-18 14:12:02 +0000859}
860
Thomas Wouterse289e0b2000-08-24 20:08:19 +0000861/* Binary in-place operators */
862
863/* The in-place operators are defined to fall back to the 'normal',
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000864 non in-place operations, if the in-place methods are not in place.
Thomas Wouterse289e0b2000-08-24 20:08:19 +0000865
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000866 - If the left hand object has the appropriate struct members, and
867 they are filled, call the appropriate function and return the
868 result. No coercion is done on the arguments; the left-hand object
869 is the one the operation is performed on, and it's up to the
870 function to deal with the right-hand object.
Guido van Rossum77660912002-04-16 16:32:50 +0000871
Thomas Wouterse289e0b2000-08-24 20:08:19 +0000872 - Otherwise, in-place modification is not supported. Handle it exactly as
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000873 a non in-place operation of the same kind.
Thomas Wouterse289e0b2000-08-24 20:08:19 +0000874
875 */
876
Guido van Rossum77660912002-04-16 16:32:50 +0000877#define HASINPLACE(t) \
878 PyType_HasFeature((t)->ob_type, Py_TPFLAGS_HAVE_INPLACEOPS)
Thomas Wouterse289e0b2000-08-24 20:08:19 +0000879
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000880static PyObject *
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +0000881binary_iop1(PyObject *v, PyObject *w, const int iop_slot, const int op_slot)
Thomas Wouterse289e0b2000-08-24 20:08:19 +0000882{
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000883 PyNumberMethods *mv = v->ob_type->tp_as_number;
884 if (mv != NULL && HASINPLACE(v)) {
Neil Schemenauerb808c5c2002-11-24 01:34:49 +0000885 binaryfunc slot = NB_BINOP(mv, iop_slot);
886 if (slot) {
887 PyObject *x = (slot)(v, w);
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000888 if (x != Py_NotImplemented) {
889 return x;
890 }
891 Py_DECREF(x);
892 }
Thomas Woutersf2b332d2000-09-02 08:34:40 +0000893 }
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +0000894 return binary_op1(v, w, op_slot);
895}
896
897static PyObject *
898binary_iop(PyObject *v, PyObject *w, const int iop_slot, const int op_slot,
899 const char *op_name)
900{
901 PyObject *result = binary_iop1(v, w, iop_slot, op_slot);
902 if (result == Py_NotImplemented) {
903 Py_DECREF(result);
904 return binop_type_error(v, w, op_name);
905 }
906 return result;
Thomas Wouterse289e0b2000-08-24 20:08:19 +0000907}
908
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000909#define INPLACE_BINOP(func, iop, op, op_name) \
910 PyObject * \
911 func(PyObject *v, PyObject *w) { \
912 return binary_iop(v, w, NB_SLOT(iop), NB_SLOT(op), op_name); \
Thomas Wouterse289e0b2000-08-24 20:08:19 +0000913 }
914
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000915INPLACE_BINOP(PyNumber_InPlaceOr, nb_inplace_or, nb_or, "|=")
916INPLACE_BINOP(PyNumber_InPlaceXor, nb_inplace_xor, nb_xor, "^=")
917INPLACE_BINOP(PyNumber_InPlaceAnd, nb_inplace_and, nb_and, "&=")
918INPLACE_BINOP(PyNumber_InPlaceLshift, nb_inplace_lshift, nb_lshift, "<<=")
919INPLACE_BINOP(PyNumber_InPlaceRshift, nb_inplace_rshift, nb_rshift, ">>=")
920INPLACE_BINOP(PyNumber_InPlaceSubtract, nb_inplace_subtract, nb_subtract, "-=")
921INPLACE_BINOP(PyNumber_InPlaceDivide, nb_inplace_divide, nb_divide, "/=")
Thomas Wouterse289e0b2000-08-24 20:08:19 +0000922
923PyObject *
Guido van Rossum4668b002001-08-08 05:00:18 +0000924PyNumber_InPlaceFloorDivide(PyObject *v, PyObject *w)
925{
926 /* XXX tp_flags test */
927 return binary_iop(v, w, NB_SLOT(nb_inplace_floor_divide),
928 NB_SLOT(nb_floor_divide), "//=");
929}
930
931PyObject *
932PyNumber_InPlaceTrueDivide(PyObject *v, PyObject *w)
933{
934 /* XXX tp_flags test */
935 return binary_iop(v, w, NB_SLOT(nb_inplace_true_divide),
936 NB_SLOT(nb_true_divide), "/=");
937}
938
939PyObject *
Thomas Wouterse289e0b2000-08-24 20:08:19 +0000940PyNumber_InPlaceAdd(PyObject *v, PyObject *w)
941{
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +0000942 PyObject *result = binary_iop1(v, w, NB_SLOT(nb_inplace_add),
943 NB_SLOT(nb_add));
944 if (result == Py_NotImplemented) {
945 PySequenceMethods *m = v->ob_type->tp_as_sequence;
946 Py_DECREF(result);
947 if (m != NULL) {
948 binaryfunc f = NULL;
949 if (HASINPLACE(v))
950 f = m->sq_inplace_concat;
951 if (f == NULL)
952 f = m->sq_concat;
953 if (f != NULL)
954 return (*f)(v, w);
955 }
956 result = binop_type_error(v, w, "+=");
Guido van Rossumbb8be932000-09-01 23:27:32 +0000957 }
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +0000958 return result;
Thomas Wouterse289e0b2000-08-24 20:08:19 +0000959}
960
961PyObject *
962PyNumber_InPlaceMultiply(PyObject *v, PyObject *w)
963{
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +0000964 PyObject *result = binary_iop1(v, w, NB_SLOT(nb_inplace_multiply),
965 NB_SLOT(nb_multiply));
966 if (result == Py_NotImplemented) {
Martin v. Löwis18e16552006-02-15 17:27:45 +0000967 ssizeargfunc f = NULL;
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +0000968 PySequenceMethods *mv = v->ob_type->tp_as_sequence;
969 PySequenceMethods *mw = w->ob_type->tp_as_sequence;
970 Py_DECREF(result);
971 if (mv != NULL) {
972 if (HASINPLACE(v))
973 f = mv->sq_inplace_repeat;
974 if (f == NULL)
975 f = mv->sq_repeat;
976 if (f != NULL)
977 return sequence_repeat(f, v, w);
Thomas Wouterse289e0b2000-08-24 20:08:19 +0000978 }
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +0000979 else if (mw != NULL) {
980 /* Note that the right hand operand should not be
981 * mutated in this case so sq_inplace_repeat is not
982 * used. */
983 if (mw->sq_repeat)
984 return sequence_repeat(mw->sq_repeat, w, v);
Thomas Wouterse289e0b2000-08-24 20:08:19 +0000985 }
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +0000986 result = binop_type_error(v, w, "*=");
Thomas Wouterse289e0b2000-08-24 20:08:19 +0000987 }
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +0000988 return result;
Thomas Wouterse289e0b2000-08-24 20:08:19 +0000989}
990
Thomas Wouterse289e0b2000-08-24 20:08:19 +0000991PyObject *
992PyNumber_InPlaceRemainder(PyObject *v, PyObject *w)
993{
Neil Schemenauerd46fbc32002-11-24 01:07:42 +0000994 return binary_iop(v, w, NB_SLOT(nb_inplace_remainder),
995 NB_SLOT(nb_remainder), "%=");
Thomas Wouterse289e0b2000-08-24 20:08:19 +0000996}
997
998PyObject *
999PyNumber_InPlacePower(PyObject *v, PyObject *w, PyObject *z)
1000{
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001001 if (HASINPLACE(v) && v->ob_type->tp_as_number &&
1002 v->ob_type->tp_as_number->nb_inplace_power != NULL) {
1003 return ternary_op(v, w, z, NB_SLOT(nb_inplace_power), "**=");
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001004 }
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001005 else {
1006 return ternary_op(v, w, z, NB_SLOT(nb_power), "**=");
1007 }
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001008}
1009
1010
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001011/* Unary operators and functions */
Guido van Rossume15dee51995-07-18 14:12:02 +00001012
1013PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001014PyNumber_Negative(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00001015{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001016 PyNumberMethods *m;
1017
1018 if (o == NULL)
1019 return null_error();
1020 m = o->ob_type->tp_as_number;
1021 if (m && m->nb_negative)
1022 return (*m->nb_negative)(o);
1023
Georg Brandlccff7852006-06-18 22:17:29 +00001024 return type_error("bad operand type for unary -: '%.200s'", o);
Guido van Rossume15dee51995-07-18 14:12:02 +00001025}
1026
1027PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001028PyNumber_Positive(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00001029{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001030 PyNumberMethods *m;
1031
1032 if (o == NULL)
1033 return null_error();
1034 m = o->ob_type->tp_as_number;
1035 if (m && m->nb_positive)
1036 return (*m->nb_positive)(o);
1037
Georg Brandlccff7852006-06-18 22:17:29 +00001038 return type_error("bad operand type for unary +: '%.200s'", o);
Guido van Rossume15dee51995-07-18 14:12:02 +00001039}
1040
1041PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001042PyNumber_Invert(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00001043{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001044 PyNumberMethods *m;
1045
1046 if (o == NULL)
1047 return null_error();
1048 m = o->ob_type->tp_as_number;
1049 if (m && m->nb_invert)
1050 return (*m->nb_invert)(o);
1051
Georg Brandlccff7852006-06-18 22:17:29 +00001052 return type_error("bad operand type for unary ~: '%.200s'", o);
Guido van Rossume15dee51995-07-18 14:12:02 +00001053}
1054
1055PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001056PyNumber_Absolute(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00001057{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001058 PyNumberMethods *m;
Guido van Rossume15dee51995-07-18 14:12:02 +00001059
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001060 if (o == NULL)
1061 return null_error();
1062 m = o->ob_type->tp_as_number;
1063 if (m && m->nb_absolute)
1064 return m->nb_absolute(o);
Guido van Rossume15dee51995-07-18 14:12:02 +00001065
Georg Brandlccff7852006-06-18 22:17:29 +00001066 return type_error("bad operand type for abs(): '%.200s'", o);
Guido van Rossume15dee51995-07-18 14:12:02 +00001067}
1068
Guido van Rossum9e896b32000-04-05 20:11:21 +00001069/* Add a check for embedded NULL-bytes in the argument. */
1070static PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00001071int_from_string(const char *s, Py_ssize_t len)
Guido van Rossum9e896b32000-04-05 20:11:21 +00001072{
1073 char *end;
1074 PyObject *x;
1075
1076 x = PyInt_FromString((char*)s, &end, 10);
1077 if (x == NULL)
1078 return NULL;
1079 if (end != s + len) {
1080 PyErr_SetString(PyExc_ValueError,
1081 "null byte in argument for int()");
1082 Py_DECREF(x);
1083 return NULL;
1084 }
1085 return x;
1086}
1087
Neal Norwitz8a87f5d2006-08-12 17:03:09 +00001088/* Return a Python Int or Long from the object item
1089 Raise TypeError if the result is not an int-or-long
1090 or if the object cannot be interpreted as an index.
1091*/
1092PyObject *
Guido van Rossum38fff8c2006-03-07 18:50:55 +00001093PyNumber_Index(PyObject *item)
1094{
Neal Norwitz8a87f5d2006-08-12 17:03:09 +00001095 PyObject *result = NULL;
1096 if (item == NULL)
1097 return null_error();
Neal Norwitz271a8682006-08-15 06:29:03 +00001098 if (PyInt_Check(item) || PyLong_Check(item)) {
Neal Norwitz8a87f5d2006-08-12 17:03:09 +00001099 Py_INCREF(item);
1100 return item;
1101 }
1102 if (PyIndex_Check(item)) {
1103 result = item->ob_type->tp_as_number->nb_index(item);
Neal Norwitz8a87f5d2006-08-12 17:03:09 +00001104 if (result &&
Neal Norwitz271a8682006-08-15 06:29:03 +00001105 !PyInt_Check(result) && !PyLong_Check(result)) {
Neal Norwitz8a87f5d2006-08-12 17:03:09 +00001106 PyErr_Format(PyExc_TypeError,
1107 "__index__ returned non-(int,long) " \
1108 "(type %.200s)",
1109 result->ob_type->tp_name);
1110 Py_DECREF(result);
1111 return NULL;
1112 }
Guido van Rossum38fff8c2006-03-07 18:50:55 +00001113 }
1114 else {
Armin Rigo314861c2006-03-30 14:04:02 +00001115 PyErr_Format(PyExc_TypeError,
1116 "'%.200s' object cannot be interpreted "
1117 "as an index", item->ob_type->tp_name);
Guido van Rossum38fff8c2006-03-07 18:50:55 +00001118 }
Neal Norwitz8a87f5d2006-08-12 17:03:09 +00001119 return result;
Guido van Rossum38fff8c2006-03-07 18:50:55 +00001120}
1121
Neal Norwitz8a87f5d2006-08-12 17:03:09 +00001122/* Return an error on Overflow only if err is not NULL*/
1123
1124Py_ssize_t
1125PyNumber_AsSsize_t(PyObject *item, PyObject *err)
1126{
1127 Py_ssize_t result;
1128 PyObject *runerr;
1129 PyObject *value = PyNumber_Index(item);
1130 if (value == NULL)
1131 return -1;
1132
1133 /* We're done if PyInt_AsSsize_t() returns without error. */
1134 result = PyInt_AsSsize_t(value);
1135 if (result != -1 || !(runerr = PyErr_Occurred()))
1136 goto finish;
1137
1138 /* Error handling code -- only manage OverflowError differently */
1139 if (!PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError))
1140 goto finish;
1141
1142 PyErr_Clear();
1143 /* If no error-handling desired then the default clipping
1144 is sufficient.
1145 */
1146 if (!err) {
1147 assert(PyLong_Check(value));
1148 /* Whether or not it is less than or equal to
1149 zero is determined by the sign of ob_size
1150 */
1151 if (_PyLong_Sign(value) < 0)
1152 result = PY_SSIZE_T_MIN;
1153 else
1154 result = PY_SSIZE_T_MAX;
1155 }
1156 else {
1157 /* Otherwise replace the error with caller's error object. */
1158 PyErr_Format(err,
1159 "cannot fit '%.200s' into an index-sized integer",
1160 item->ob_type->tp_name);
1161 }
1162
1163 finish:
1164 Py_DECREF(value);
1165 return result;
1166}
1167
1168
Guido van Rossume15dee51995-07-18 14:12:02 +00001169PyObject *
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001170_PyNumber_ConvertIntegralToInt(PyObject *integral, const char* error_format)
1171{
1172 const char *type_name;
1173 static PyObject *int_name = NULL;
1174 if (int_name == NULL) {
1175 int_name = PyString_InternFromString("__int__");
1176 if (int_name == NULL)
1177 return NULL;
1178 }
1179
1180 if (integral && (!PyInt_Check(integral) &&
1181 !PyLong_Check(integral))) {
1182 /* Don't go through tp_as_number->nb_int to avoid
1183 hitting the classic class fallback to __trunc__. */
1184 PyObject *int_func = PyObject_GetAttr(integral, int_name);
1185 if (int_func == NULL) {
1186 PyErr_Clear(); /* Raise a different error. */
1187 goto non_integral_error;
1188 }
1189 Py_DECREF(integral);
1190 integral = PyEval_CallObject(int_func, NULL);
1191 Py_DECREF(int_func);
1192 if (integral && (!PyInt_Check(integral) &&
1193 !PyLong_Check(integral))) {
1194 goto non_integral_error;
1195 }
1196 }
1197 return integral;
1198
1199non_integral_error:
1200 if (PyInstance_Check(integral)) {
1201 type_name = PyString_AS_STRING(((PyInstanceObject *)integral)
1202 ->in_class->cl_name);
1203 }
1204 else {
1205 type_name = integral->ob_type->tp_name;
1206 }
1207 PyErr_Format(PyExc_TypeError, error_format, type_name);
1208 Py_DECREF(integral);
1209 return NULL;
1210}
1211
1212
1213PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001214PyNumber_Int(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00001215{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001216 PyNumberMethods *m;
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001217 static PyObject *trunc_name = NULL;
1218 PyObject *trunc_func;
Guido van Rossum4c08d552000-03-10 22:55:18 +00001219 const char *buffer;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001220 Py_ssize_t buffer_len;
Guido van Rossume15dee51995-07-18 14:12:02 +00001221
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001222 if (trunc_name == NULL) {
1223 trunc_name = PyString_InternFromString("__trunc__");
1224 if (trunc_name == NULL)
1225 return NULL;
1226 }
1227
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001228 if (o == NULL)
1229 return null_error();
Tim Peters64b5ce32001-09-10 20:52:51 +00001230 if (PyInt_CheckExact(o)) {
Guido van Rossum9e896b32000-04-05 20:11:21 +00001231 Py_INCREF(o);
1232 return o;
1233 }
Brett Cannonc3647ac2005-04-26 03:45:26 +00001234 m = o->ob_type->tp_as_number;
1235 if (m && m->nb_int) { /* This should include subclasses of int */
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001236 /* Classic classes always take this branch. */
Brett Cannonc3647ac2005-04-26 03:45:26 +00001237 PyObject *res = m->nb_int(o);
1238 if (res && (!PyInt_Check(res) && !PyLong_Check(res))) {
1239 PyErr_Format(PyExc_TypeError,
1240 "__int__ returned non-int (type %.200s)",
1241 res->ob_type->tp_name);
1242 Py_DECREF(res);
1243 return NULL;
1244 }
1245 return res;
1246 }
1247 if (PyInt_Check(o)) { /* A int subclass without nb_int */
Tim Peters64b5ce32001-09-10 20:52:51 +00001248 PyIntObject *io = (PyIntObject*)o;
1249 return PyInt_FromLong(io->ob_ival);
1250 }
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001251 trunc_func = PyObject_GetAttr(o, trunc_name);
1252 if (trunc_func) {
1253 PyObject *truncated = PyEval_CallObject(trunc_func, NULL);
1254 Py_DECREF(trunc_func);
1255 /* __trunc__ is specified to return an Integral type, but
1256 int() needs to return an int. */
1257 return _PyNumber_ConvertIntegralToInt(
1258 truncated,
1259 "__trunc__ returned non-Integral (type %.200s)");
1260 }
1261 PyErr_Clear(); /* It's not an error if o.__trunc__ doesn't exist. */
1262
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001263 if (PyString_Check(o))
Guido van Rossum77660912002-04-16 16:32:50 +00001264 return int_from_string(PyString_AS_STRING(o),
Guido van Rossum9e896b32000-04-05 20:11:21 +00001265 PyString_GET_SIZE(o));
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001266#ifdef Py_USING_UNICODE
Guido van Rossum9e896b32000-04-05 20:11:21 +00001267 if (PyUnicode_Check(o))
1268 return PyInt_FromUnicode(PyUnicode_AS_UNICODE(o),
1269 PyUnicode_GET_SIZE(o),
1270 10);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001271#endif
Guido van Rossum4c08d552000-03-10 22:55:18 +00001272 if (!PyObject_AsCharBuffer(o, &buffer, &buffer_len))
Guido van Rossum9e896b32000-04-05 20:11:21 +00001273 return int_from_string((char*)buffer, buffer_len);
Guido van Rossume15dee51995-07-18 14:12:02 +00001274
Georg Brandlccff7852006-06-18 22:17:29 +00001275 return type_error("int() argument must be a string or a "
1276 "number, not '%.200s'", o);
Guido van Rossume15dee51995-07-18 14:12:02 +00001277}
1278
Guido van Rossum9e896b32000-04-05 20:11:21 +00001279/* Add a check for embedded NULL-bytes in the argument. */
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001280static PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00001281long_from_string(const char *s, Py_ssize_t len)
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001282{
Guido van Rossum4c08d552000-03-10 22:55:18 +00001283 char *end;
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001284 PyObject *x;
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001285
Guido van Rossum4c08d552000-03-10 22:55:18 +00001286 x = PyLong_FromString((char*)s, &end, 10);
Guido van Rossum9e896b32000-04-05 20:11:21 +00001287 if (x == NULL)
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001288 return NULL;
Guido van Rossum9e896b32000-04-05 20:11:21 +00001289 if (end != s + len) {
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001290 PyErr_SetString(PyExc_ValueError,
1291 "null byte in argument for long()");
Guido van Rossum9e896b32000-04-05 20:11:21 +00001292 Py_DECREF(x);
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001293 return NULL;
1294 }
1295 return x;
1296}
1297
Guido van Rossume15dee51995-07-18 14:12:02 +00001298PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001299PyNumber_Long(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00001300{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001301 PyNumberMethods *m;
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001302 static PyObject *trunc_name = NULL;
1303 PyObject *trunc_func;
Guido van Rossum4c08d552000-03-10 22:55:18 +00001304 const char *buffer;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001305 Py_ssize_t buffer_len;
Guido van Rossume15dee51995-07-18 14:12:02 +00001306
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001307 if (trunc_name == NULL) {
1308 trunc_name = PyString_InternFromString("__trunc__");
1309 if (trunc_name == NULL)
1310 return NULL;
1311 }
1312
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001313 if (o == NULL)
1314 return null_error();
Brett Cannonc3647ac2005-04-26 03:45:26 +00001315 m = o->ob_type->tp_as_number;
1316 if (m && m->nb_long) { /* This should include subclasses of long */
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001317 /* Classic classes always take this branch. */
Brett Cannonc3647ac2005-04-26 03:45:26 +00001318 PyObject *res = m->nb_long(o);
1319 if (res && (!PyInt_Check(res) && !PyLong_Check(res))) {
1320 PyErr_Format(PyExc_TypeError,
1321 "__long__ returned non-long (type %.200s)",
1322 res->ob_type->tp_name);
1323 Py_DECREF(res);
1324 return NULL;
1325 }
1326 return res;
Guido van Rossum9e896b32000-04-05 20:11:21 +00001327 }
Brett Cannonc3647ac2005-04-26 03:45:26 +00001328 if (PyLong_Check(o)) /* A long subclass without nb_long */
Tim Petersdb30ac42002-03-02 04:14:21 +00001329 return _PyLong_Copy((PyLongObject *)o);
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001330 trunc_func = PyObject_GetAttr(o, trunc_name);
1331 if (trunc_func) {
1332 PyObject *truncated = PyEval_CallObject(trunc_func, NULL);
1333 PyObject *int_instance;
1334 Py_DECREF(trunc_func);
1335 /* __trunc__ is specified to return an Integral type,
1336 but long() needs to return a long. */
1337 int_instance = _PyNumber_ConvertIntegralToInt(
1338 truncated,
1339 "__trunc__ returned non-Integral (type %.200s)");
1340 if (int_instance && PyInt_Check(int_instance)) {
1341 /* Make sure that long() returns a long instance. */
1342 long value = PyInt_AS_LONG(int_instance);
1343 Py_DECREF(int_instance);
1344 return PyLong_FromLong(value);
1345 }
1346 return int_instance;
1347 }
1348 PyErr_Clear(); /* It's not an error if o.__trunc__ doesn't exist. */
1349
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001350 if (PyString_Check(o))
Guido van Rossum77660912002-04-16 16:32:50 +00001351 /* need to do extra error checking that PyLong_FromString()
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001352 * doesn't do. In particular long('9.5') must raise an
1353 * exception, not truncate the float.
1354 */
Guido van Rossum4c08d552000-03-10 22:55:18 +00001355 return long_from_string(PyString_AS_STRING(o),
1356 PyString_GET_SIZE(o));
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001357#ifdef Py_USING_UNICODE
Guido van Rossum9e896b32000-04-05 20:11:21 +00001358 if (PyUnicode_Check(o))
1359 /* The above check is done in PyLong_FromUnicode(). */
1360 return PyLong_FromUnicode(PyUnicode_AS_UNICODE(o),
1361 PyUnicode_GET_SIZE(o),
1362 10);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001363#endif
Guido van Rossum4c08d552000-03-10 22:55:18 +00001364 if (!PyObject_AsCharBuffer(o, &buffer, &buffer_len))
1365 return long_from_string(buffer, buffer_len);
Guido van Rossume15dee51995-07-18 14:12:02 +00001366
Georg Brandlccff7852006-06-18 22:17:29 +00001367 return type_error("long() argument must be a string or a "
1368 "number, not '%.200s'", o);
Guido van Rossume15dee51995-07-18 14:12:02 +00001369}
1370
1371PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001372PyNumber_Float(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00001373{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001374 PyNumberMethods *m;
Guido van Rossume15dee51995-07-18 14:12:02 +00001375
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001376 if (o == NULL)
1377 return null_error();
Brett Cannonc3647ac2005-04-26 03:45:26 +00001378 m = o->ob_type->tp_as_number;
1379 if (m && m->nb_float) { /* This should include subclasses of float */
1380 PyObject *res = m->nb_float(o);
1381 if (res && !PyFloat_Check(res)) {
1382 PyErr_Format(PyExc_TypeError,
1383 "__float__ returned non-float (type %.200s)",
1384 res->ob_type->tp_name);
1385 Py_DECREF(res);
1386 return NULL;
1387 }
1388 return res;
Guido van Rossum9e896b32000-04-05 20:11:21 +00001389 }
Brett Cannonc3647ac2005-04-26 03:45:26 +00001390 if (PyFloat_Check(o)) { /* A float subclass with nb_float == NULL */
Tim Peters7a50f252001-09-10 21:28:20 +00001391 PyFloatObject *po = (PyFloatObject *)o;
1392 return PyFloat_FromDouble(po->ob_fval);
1393 }
Guido van Rossum4c08d552000-03-10 22:55:18 +00001394 return PyFloat_FromString(o, NULL);
Guido van Rossume15dee51995-07-18 14:12:02 +00001395}
1396
Eric Smith5e527eb2008-02-10 01:36:53 +00001397PyObject *
1398PyNumber_ToBase(PyObject *n, int base)
1399{
1400 PyObject *res = NULL;
1401 PyObject *index = PyNumber_Index(n);
1402
1403 if (!index)
1404 return NULL;
1405 if (PyLong_Check(index))
1406 res = _PyLong_Format(index, base, 0, 1);
1407 else if (PyInt_Check(index))
1408 res = _PyInt_Format((PyIntObject*)index, base, 1);
1409 else
Eric Smith3f914372008-02-15 12:14:32 +00001410 /* It should not be possible to get here, as
1411 PyNumber_Index already has a check for the same
1412 condition */
1413 PyErr_SetString(PyExc_ValueError, "PyNumber_ToBase: index not "
1414 "int or long");
Eric Smith5e527eb2008-02-10 01:36:53 +00001415 Py_DECREF(index);
1416 return res;
1417}
1418
1419
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001420/* Operations on sequences */
Guido van Rossume15dee51995-07-18 14:12:02 +00001421
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001422int
Fred Drake79912472000-07-09 04:06:11 +00001423PySequence_Check(PyObject *s)
Guido van Rossume15dee51995-07-18 14:12:02 +00001424{
Raymond Hettinger1be1a792004-09-19 06:00:15 +00001425 if (s && PyInstance_Check(s))
Raymond Hettingere2eda602004-04-04 08:51:41 +00001426 return PyObject_HasAttrString(s, "__getitem__");
Raymond Hettingerde33c622007-02-07 23:49:03 +00001427 if (PyObject_IsInstance(s, (PyObject *)&PyDict_Type))
Raymond Hettinger4da5bf62007-02-07 22:24:07 +00001428 return 0;
Guido van Rossum8700b422001-09-07 20:20:11 +00001429 return s != NULL && s->ob_type->tp_as_sequence &&
1430 s->ob_type->tp_as_sequence->sq_item != NULL;
Guido van Rossume15dee51995-07-18 14:12:02 +00001431}
1432
Martin v. Löwis18e16552006-02-15 17:27:45 +00001433Py_ssize_t
Jeremy Hylton6253f832000-07-12 12:56:19 +00001434PySequence_Size(PyObject *s)
Guido van Rossume15dee51995-07-18 14:12:02 +00001435{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001436 PySequenceMethods *m;
Guido van Rossume15dee51995-07-18 14:12:02 +00001437
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001438 if (s == NULL) {
1439 null_error();
1440 return -1;
1441 }
Guido van Rossume15dee51995-07-18 14:12:02 +00001442
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001443 m = s->ob_type->tp_as_sequence;
1444 if (m && m->sq_length)
1445 return m->sq_length(s);
Guido van Rossume15dee51995-07-18 14:12:02 +00001446
Georg Brandlb0061c82006-08-08 11:56:21 +00001447 type_error("object of type '%.200s' has no len()", s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001448 return -1;
Guido van Rossume15dee51995-07-18 14:12:02 +00001449}
1450
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +00001451#undef PySequence_Length
Martin v. Löwis18e16552006-02-15 17:27:45 +00001452Py_ssize_t
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +00001453PySequence_Length(PyObject *s)
1454{
1455 return PySequence_Size(s);
1456}
1457#define PySequence_Length PySequence_Size
1458
Guido van Rossume15dee51995-07-18 14:12:02 +00001459PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001460PySequence_Concat(PyObject *s, PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00001461{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001462 PySequenceMethods *m;
Guido van Rossume15dee51995-07-18 14:12:02 +00001463
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001464 if (s == NULL || o == NULL)
1465 return null_error();
Guido van Rossume15dee51995-07-18 14:12:02 +00001466
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001467 m = s->ob_type->tp_as_sequence;
1468 if (m && m->sq_concat)
1469 return m->sq_concat(s, o);
1470
Armin Rigofd163f92005-12-29 15:59:19 +00001471 /* Instances of user classes defining an __add__() method only
1472 have an nb_add slot, not an sq_concat slot. So we fall back
1473 to nb_add if both arguments appear to be sequences. */
1474 if (PySequence_Check(s) && PySequence_Check(o)) {
1475 PyObject *result = binary_op1(s, o, NB_SLOT(nb_add));
1476 if (result != Py_NotImplemented)
1477 return result;
1478 Py_DECREF(result);
1479 }
Georg Brandlccff7852006-06-18 22:17:29 +00001480 return type_error("'%.200s' object can't be concatenated", s);
Guido van Rossume15dee51995-07-18 14:12:02 +00001481}
1482
1483PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00001484PySequence_Repeat(PyObject *o, Py_ssize_t count)
Guido van Rossume15dee51995-07-18 14:12:02 +00001485{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001486 PySequenceMethods *m;
Guido van Rossume15dee51995-07-18 14:12:02 +00001487
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001488 if (o == NULL)
1489 return null_error();
Guido van Rossume15dee51995-07-18 14:12:02 +00001490
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001491 m = o->ob_type->tp_as_sequence;
1492 if (m && m->sq_repeat)
1493 return m->sq_repeat(o, count);
1494
Armin Rigofd163f92005-12-29 15:59:19 +00001495 /* Instances of user classes defining a __mul__() method only
1496 have an nb_multiply slot, not an sq_repeat slot. so we fall back
1497 to nb_multiply if o appears to be a sequence. */
1498 if (PySequence_Check(o)) {
1499 PyObject *n, *result;
Martin v. Löwiseb079f12006-02-16 14:32:27 +00001500 n = PyInt_FromSsize_t(count);
Armin Rigofd163f92005-12-29 15:59:19 +00001501 if (n == NULL)
1502 return NULL;
1503 result = binary_op1(o, n, NB_SLOT(nb_multiply));
1504 Py_DECREF(n);
1505 if (result != Py_NotImplemented)
1506 return result;
1507 Py_DECREF(result);
1508 }
Georg Brandlccff7852006-06-18 22:17:29 +00001509 return type_error("'%.200s' object can't be repeated", o);
Guido van Rossume15dee51995-07-18 14:12:02 +00001510}
1511
1512PyObject *
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001513PySequence_InPlaceConcat(PyObject *s, PyObject *o)
1514{
1515 PySequenceMethods *m;
1516
1517 if (s == NULL || o == NULL)
1518 return null_error();
1519
1520 m = s->ob_type->tp_as_sequence;
1521 if (m && HASINPLACE(s) && m->sq_inplace_concat)
1522 return m->sq_inplace_concat(s, o);
1523 if (m && m->sq_concat)
1524 return m->sq_concat(s, o);
1525
Armin Rigofd163f92005-12-29 15:59:19 +00001526 if (PySequence_Check(s) && PySequence_Check(o)) {
1527 PyObject *result = binary_iop1(s, o, NB_SLOT(nb_inplace_add),
1528 NB_SLOT(nb_add));
1529 if (result != Py_NotImplemented)
1530 return result;
1531 Py_DECREF(result);
1532 }
Georg Brandlccff7852006-06-18 22:17:29 +00001533 return type_error("'%.200s' object can't be concatenated", s);
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001534}
1535
1536PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00001537PySequence_InPlaceRepeat(PyObject *o, Py_ssize_t count)
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001538{
1539 PySequenceMethods *m;
1540
1541 if (o == NULL)
1542 return null_error();
1543
1544 m = o->ob_type->tp_as_sequence;
1545 if (m && HASINPLACE(o) && m->sq_inplace_repeat)
1546 return m->sq_inplace_repeat(o, count);
1547 if (m && m->sq_repeat)
1548 return m->sq_repeat(o, count);
1549
Armin Rigofd163f92005-12-29 15:59:19 +00001550 if (PySequence_Check(o)) {
1551 PyObject *n, *result;
Martin v. Löwiseb079f12006-02-16 14:32:27 +00001552 n = PyInt_FromSsize_t(count);
Armin Rigofd163f92005-12-29 15:59:19 +00001553 if (n == NULL)
1554 return NULL;
1555 result = binary_iop1(o, n, NB_SLOT(nb_inplace_multiply),
1556 NB_SLOT(nb_multiply));
1557 Py_DECREF(n);
1558 if (result != Py_NotImplemented)
1559 return result;
1560 Py_DECREF(result);
1561 }
Georg Brandlccff7852006-06-18 22:17:29 +00001562 return type_error("'%.200s' object can't be repeated", o);
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001563}
1564
1565PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00001566PySequence_GetItem(PyObject *s, Py_ssize_t i)
Guido van Rossume15dee51995-07-18 14:12:02 +00001567{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001568 PySequenceMethods *m;
Guido van Rossume15dee51995-07-18 14:12:02 +00001569
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001570 if (s == NULL)
1571 return null_error();
Guido van Rossume15dee51995-07-18 14:12:02 +00001572
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001573 m = s->ob_type->tp_as_sequence;
1574 if (m && m->sq_item) {
1575 if (i < 0) {
1576 if (m->sq_length) {
Martin v. Löwis18e16552006-02-15 17:27:45 +00001577 Py_ssize_t l = (*m->sq_length)(s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001578 if (l < 0)
1579 return NULL;
1580 i += l;
1581 }
1582 }
1583 return m->sq_item(s, i);
1584 }
Guido van Rossume15dee51995-07-18 14:12:02 +00001585
Georg Brandlccff7852006-06-18 22:17:29 +00001586 return type_error("'%.200s' object is unindexable", s);
Guido van Rossume15dee51995-07-18 14:12:02 +00001587}
1588
1589PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00001590PySequence_GetSlice(PyObject *s, Py_ssize_t i1, Py_ssize_t i2)
Guido van Rossume15dee51995-07-18 14:12:02 +00001591{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001592 PySequenceMethods *m;
Thomas Wouters1d75a792000-08-17 22:37:32 +00001593 PyMappingMethods *mp;
Guido van Rossume15dee51995-07-18 14:12:02 +00001594
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001595 if (!s) return null_error();
Guido van Rossume15dee51995-07-18 14:12:02 +00001596
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001597 m = s->ob_type->tp_as_sequence;
1598 if (m && m->sq_slice) {
1599 if (i1 < 0 || i2 < 0) {
1600 if (m->sq_length) {
Martin v. Löwis18e16552006-02-15 17:27:45 +00001601 Py_ssize_t l = (*m->sq_length)(s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001602 if (l < 0)
1603 return NULL;
1604 if (i1 < 0)
1605 i1 += l;
1606 if (i2 < 0)
1607 i2 += l;
1608 }
1609 }
1610 return m->sq_slice(s, i1, i2);
Thomas Wouters1d75a792000-08-17 22:37:32 +00001611 } else if ((mp = s->ob_type->tp_as_mapping) && mp->mp_subscript) {
1612 PyObject *res;
Neal Norwitzbadc0862006-03-23 06:03:08 +00001613 PyObject *slice = _PySlice_FromIndices(i1, i2);
Thomas Wouters1d75a792000-08-17 22:37:32 +00001614 if (!slice)
1615 return NULL;
1616 res = mp->mp_subscript(s, slice);
1617 Py_DECREF(slice);
1618 return res;
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001619 }
Guido van Rossume15dee51995-07-18 14:12:02 +00001620
Georg Brandlccff7852006-06-18 22:17:29 +00001621 return type_error("'%.200s' object is unsliceable", s);
Guido van Rossume15dee51995-07-18 14:12:02 +00001622}
1623
1624int
Martin v. Löwis18e16552006-02-15 17:27:45 +00001625PySequence_SetItem(PyObject *s, Py_ssize_t i, PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00001626{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001627 PySequenceMethods *m;
Guido van Rossume15dee51995-07-18 14:12:02 +00001628
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001629 if (s == NULL) {
1630 null_error();
1631 return -1;
1632 }
Guido van Rossume15dee51995-07-18 14:12:02 +00001633
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001634 m = s->ob_type->tp_as_sequence;
1635 if (m && m->sq_ass_item) {
1636 if (i < 0) {
1637 if (m->sq_length) {
Martin v. Löwis18e16552006-02-15 17:27:45 +00001638 Py_ssize_t l = (*m->sq_length)(s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001639 if (l < 0)
Guido van Rossumed6219b1998-05-29 02:59:33 +00001640 return -1;
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001641 i += l;
1642 }
1643 }
1644 return m->sq_ass_item(s, i, o);
1645 }
1646
Georg Brandlccff7852006-06-18 22:17:29 +00001647 type_error("'%.200s' object does not support item assignment", s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001648 return -1;
Guido van Rossume15dee51995-07-18 14:12:02 +00001649}
1650
Guido van Rossum6cdc6f41996-08-21 17:41:54 +00001651int
Martin v. Löwis18e16552006-02-15 17:27:45 +00001652PySequence_DelItem(PyObject *s, Py_ssize_t i)
Guido van Rossum6cdc6f41996-08-21 17:41:54 +00001653{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001654 PySequenceMethods *m;
Guido van Rossum6cdc6f41996-08-21 17:41:54 +00001655
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001656 if (s == NULL) {
1657 null_error();
1658 return -1;
1659 }
Guido van Rossum6cdc6f41996-08-21 17:41:54 +00001660
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001661 m = s->ob_type->tp_as_sequence;
1662 if (m && m->sq_ass_item) {
1663 if (i < 0) {
1664 if (m->sq_length) {
Martin v. Löwis18e16552006-02-15 17:27:45 +00001665 Py_ssize_t l = (*m->sq_length)(s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001666 if (l < 0)
Guido van Rossumed6219b1998-05-29 02:59:33 +00001667 return -1;
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001668 i += l;
1669 }
1670 }
1671 return m->sq_ass_item(s, i, (PyObject *)NULL);
1672 }
1673
Georg Brandlccff7852006-06-18 22:17:29 +00001674 type_error("'%.200s' object doesn't support item deletion", s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001675 return -1;
Guido van Rossum6cdc6f41996-08-21 17:41:54 +00001676}
1677
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001678int
Martin v. Löwis18e16552006-02-15 17:27:45 +00001679PySequence_SetSlice(PyObject *s, Py_ssize_t i1, Py_ssize_t i2, PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00001680{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001681 PySequenceMethods *m;
Thomas Wouters1d75a792000-08-17 22:37:32 +00001682 PyMappingMethods *mp;
Guido van Rossume15dee51995-07-18 14:12:02 +00001683
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001684 if (s == NULL) {
1685 null_error();
1686 return -1;
1687 }
Guido van Rossume15dee51995-07-18 14:12:02 +00001688
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001689 m = s->ob_type->tp_as_sequence;
1690 if (m && m->sq_ass_slice) {
1691 if (i1 < 0 || i2 < 0) {
1692 if (m->sq_length) {
Martin v. Löwis18e16552006-02-15 17:27:45 +00001693 Py_ssize_t l = (*m->sq_length)(s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001694 if (l < 0)
Guido van Rossumed6219b1998-05-29 02:59:33 +00001695 return -1;
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001696 if (i1 < 0)
1697 i1 += l;
1698 if (i2 < 0)
1699 i2 += l;
1700 }
1701 }
1702 return m->sq_ass_slice(s, i1, i2, o);
Thomas Wouters1d75a792000-08-17 22:37:32 +00001703 } else if ((mp = s->ob_type->tp_as_mapping) && mp->mp_ass_subscript) {
1704 int res;
Neal Norwitzbadc0862006-03-23 06:03:08 +00001705 PyObject *slice = _PySlice_FromIndices(i1, i2);
Thomas Wouters1d75a792000-08-17 22:37:32 +00001706 if (!slice)
1707 return -1;
1708 res = mp->mp_ass_subscript(s, slice, o);
1709 Py_DECREF(slice);
1710 return res;
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001711 }
Thomas Wouters1d75a792000-08-17 22:37:32 +00001712
Georg Brandlccff7852006-06-18 22:17:29 +00001713 type_error("'%.200s' object doesn't support slice assignment", s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001714 return -1;
Guido van Rossume15dee51995-07-18 14:12:02 +00001715}
1716
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001717int
Martin v. Löwis18e16552006-02-15 17:27:45 +00001718PySequence_DelSlice(PyObject *s, Py_ssize_t i1, Py_ssize_t i2)
Guido van Rossum6cdc6f41996-08-21 17:41:54 +00001719{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001720 PySequenceMethods *m;
Guido van Rossum6cdc6f41996-08-21 17:41:54 +00001721
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001722 if (s == NULL) {
1723 null_error();
1724 return -1;
1725 }
Guido van Rossum6cdc6f41996-08-21 17:41:54 +00001726
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001727 m = s->ob_type->tp_as_sequence;
1728 if (m && m->sq_ass_slice) {
1729 if (i1 < 0 || i2 < 0) {
1730 if (m->sq_length) {
Martin v. Löwis18e16552006-02-15 17:27:45 +00001731 Py_ssize_t l = (*m->sq_length)(s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001732 if (l < 0)
Guido van Rossumed6219b1998-05-29 02:59:33 +00001733 return -1;
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001734 if (i1 < 0)
1735 i1 += l;
1736 if (i2 < 0)
1737 i2 += l;
1738 }
1739 }
1740 return m->sq_ass_slice(s, i1, i2, (PyObject *)NULL);
1741 }
Georg Brandlccff7852006-06-18 22:17:29 +00001742 type_error("'%.200s' object doesn't support slice deletion", s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001743 return -1;
Guido van Rossum6cdc6f41996-08-21 17:41:54 +00001744}
1745
Guido van Rossume15dee51995-07-18 14:12:02 +00001746PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001747PySequence_Tuple(PyObject *v)
Guido van Rossume15dee51995-07-18 14:12:02 +00001748{
Tim Peters6912d4d2001-05-05 03:56:37 +00001749 PyObject *it; /* iter(v) */
Martin v. Löwis18e16552006-02-15 17:27:45 +00001750 Py_ssize_t n; /* guess for result tuple size */
Tim Peters6912d4d2001-05-05 03:56:37 +00001751 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001752 Py_ssize_t j;
Guido van Rossume15dee51995-07-18 14:12:02 +00001753
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001754 if (v == NULL)
1755 return null_error();
Guido van Rossume15dee51995-07-18 14:12:02 +00001756
Tim Peters6912d4d2001-05-05 03:56:37 +00001757 /* Special-case the common tuple and list cases, for efficiency. */
Tim Peters4c3a0a32001-09-10 23:37:46 +00001758 if (PyTuple_CheckExact(v)) {
1759 /* Note that we can't know whether it's safe to return
1760 a tuple *subclass* instance as-is, hence the restriction
Tim Peters8ff70a92001-09-10 23:53:53 +00001761 to exact tuples here. In contrast, lists always make
1762 a copy, so there's no need for exactness below. */
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001763 Py_INCREF(v);
1764 return v;
Guido van Rossume15dee51995-07-18 14:12:02 +00001765 }
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001766 if (PyList_Check(v))
1767 return PyList_AsTuple(v);
1768
Tim Peters6912d4d2001-05-05 03:56:37 +00001769 /* Get iterator. */
1770 it = PyObject_GetIter(v);
1771 if (it == NULL)
Tim Peters1fc240e2001-10-26 05:06:50 +00001772 return NULL;
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001773
Tim Peters6912d4d2001-05-05 03:56:37 +00001774 /* Guess result size and allocate space. */
Raymond Hettinger4e2f7142007-12-06 00:56:53 +00001775 n = _PyObject_LengthHint(v, 10);
Tim Peters6912d4d2001-05-05 03:56:37 +00001776 result = PyTuple_New(n);
1777 if (result == NULL)
1778 goto Fail;
1779
1780 /* Fill the tuple. */
1781 for (j = 0; ; ++j) {
1782 PyObject *item = PyIter_Next(it);
1783 if (item == NULL) {
1784 if (PyErr_Occurred())
1785 goto Fail;
1786 break;
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001787 }
Tim Peters6912d4d2001-05-05 03:56:37 +00001788 if (j >= n) {
Martin v. Löwis18e16552006-02-15 17:27:45 +00001789 Py_ssize_t oldn = n;
Raymond Hettinger4d012592004-12-16 10:38:38 +00001790 /* The over-allocation strategy can grow a bit faster
1791 than for lists because unlike lists the
1792 over-allocation isn't permanent -- we reclaim
1793 the excess before the end of this routine.
1794 So, grow by ten and then add 25%.
1795 */
1796 n += 10;
1797 n += n >> 2;
1798 if (n < oldn) {
1799 /* Check for overflow */
1800 PyErr_NoMemory();
Raymond Hettingere6bdb372004-12-16 15:10:21 +00001801 Py_DECREF(item);
Raymond Hettinger4d012592004-12-16 10:38:38 +00001802 goto Fail;
1803 }
Tim Peters4324aa32001-05-28 22:30:08 +00001804 if (_PyTuple_Resize(&result, n) != 0) {
Tim Peters12d0a6c2001-05-05 04:10:25 +00001805 Py_DECREF(item);
Tim Peters6912d4d2001-05-05 03:56:37 +00001806 goto Fail;
Tim Peters12d0a6c2001-05-05 04:10:25 +00001807 }
Tim Peters6912d4d2001-05-05 03:56:37 +00001808 }
1809 PyTuple_SET_ITEM(result, j, item);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001810 }
1811
Tim Peters6912d4d2001-05-05 03:56:37 +00001812 /* Cut tuple back if guess was too large. */
1813 if (j < n &&
Tim Peters4324aa32001-05-28 22:30:08 +00001814 _PyTuple_Resize(&result, j) != 0)
Tim Peters6912d4d2001-05-05 03:56:37 +00001815 goto Fail;
1816
1817 Py_DECREF(it);
1818 return result;
1819
1820Fail:
1821 Py_XDECREF(result);
1822 Py_DECREF(it);
1823 return NULL;
Guido van Rossume15dee51995-07-18 14:12:02 +00001824}
1825
Guido van Rossum3c5936a1996-12-05 21:51:24 +00001826PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001827PySequence_List(PyObject *v)
Guido van Rossum3c5936a1996-12-05 21:51:24 +00001828{
Tim Petersf553f892001-05-01 20:45:31 +00001829 PyObject *result; /* result list */
Raymond Hettinger8ca92ae2004-03-11 09:13:12 +00001830 PyObject *rv; /* return value from PyList_Extend */
Guido van Rossum4669fb41997-04-02 05:31:09 +00001831
Guido van Rossum5dba9e81998-07-10 18:03:50 +00001832 if (v == NULL)
1833 return null_error();
1834
Raymond Hettinger8ca92ae2004-03-11 09:13:12 +00001835 result = PyList_New(0);
1836 if (result == NULL)
Tim Petersf553f892001-05-01 20:45:31 +00001837 return NULL;
1838
Raymond Hettinger8ca92ae2004-03-11 09:13:12 +00001839 rv = _PyList_Extend((PyListObject *)result, v);
1840 if (rv == NULL) {
1841 Py_DECREF(result);
Tim Petersf553f892001-05-01 20:45:31 +00001842 return NULL;
1843 }
Raymond Hettinger969d8c02004-03-17 05:24:23 +00001844 Py_DECREF(rv);
Tim Petersf553f892001-05-01 20:45:31 +00001845 return result;
Guido van Rossum3c5936a1996-12-05 21:51:24 +00001846}
1847
Andrew M. Kuchling74042d62000-06-18 18:43:14 +00001848PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001849PySequence_Fast(PyObject *v, const char *m)
Andrew M. Kuchling74042d62000-06-18 18:43:14 +00001850{
Raymond Hettinger2fb70292004-01-11 23:26:51 +00001851 PyObject *it;
1852
Andrew M. Kuchling74042d62000-06-18 18:43:14 +00001853 if (v == NULL)
1854 return null_error();
1855
Michael W. Hudson2801fe12002-11-05 18:05:49 +00001856 if (PyList_CheckExact(v) || PyTuple_CheckExact(v)) {
Andrew M. Kuchling74042d62000-06-18 18:43:14 +00001857 Py_INCREF(v);
1858 return v;
1859 }
1860
Raymond Hettinger2fb70292004-01-11 23:26:51 +00001861 it = PyObject_GetIter(v);
1862 if (it == NULL) {
1863 if (PyErr_ExceptionMatches(PyExc_TypeError))
Georg Brandlccff7852006-06-18 22:17:29 +00001864 PyErr_SetString(PyExc_TypeError, m);
Raymond Hettinger2fb70292004-01-11 23:26:51 +00001865 return NULL;
1866 }
1867
Raymond Hettinger193814c2004-12-18 19:00:59 +00001868 v = PySequence_List(it);
Raymond Hettinger2fb70292004-01-11 23:26:51 +00001869 Py_DECREF(it);
Andrew M. Kuchling74042d62000-06-18 18:43:14 +00001870
1871 return v;
1872}
1873
Tim Peters16a77ad2001-09-08 04:00:12 +00001874/* Iterate over seq. Result depends on the operation:
1875 PY_ITERSEARCH_COUNT: -1 if error, else # of times obj appears in seq.
1876 PY_ITERSEARCH_INDEX: 0-based index of first occurence of obj in seq;
1877 set ValueError and return -1 if none found; also return -1 on error.
1878 Py_ITERSEARCH_CONTAINS: return 1 if obj in seq, else 0; -1 on error.
1879*/
Neal Norwitz1fc4b772006-03-04 18:49:58 +00001880Py_ssize_t
Tim Peters16a77ad2001-09-08 04:00:12 +00001881_PySequence_IterSearch(PyObject *seq, PyObject *obj, int operation)
Guido van Rossume15dee51995-07-18 14:12:02 +00001882{
Neal Norwitz1fc4b772006-03-04 18:49:58 +00001883 Py_ssize_t n;
Tim Peters16a77ad2001-09-08 04:00:12 +00001884 int wrapped; /* for PY_ITERSEARCH_INDEX, true iff n wrapped around */
1885 PyObject *it; /* iter(seq) */
Guido van Rossume15dee51995-07-18 14:12:02 +00001886
Tim Peters16a77ad2001-09-08 04:00:12 +00001887 if (seq == NULL || obj == NULL) {
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001888 null_error();
1889 return -1;
1890 }
Tim Peters75f8e352001-05-05 11:33:43 +00001891
Tim Peters16a77ad2001-09-08 04:00:12 +00001892 it = PyObject_GetIter(seq);
Tim Peters75f8e352001-05-05 11:33:43 +00001893 if (it == NULL) {
Georg Brandlccff7852006-06-18 22:17:29 +00001894 type_error("argument of type '%.200s' is not iterable", seq);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001895 return -1;
Tim Peters75f8e352001-05-05 11:33:43 +00001896 }
Guido van Rossume15dee51995-07-18 14:12:02 +00001897
Tim Peters16a77ad2001-09-08 04:00:12 +00001898 n = wrapped = 0;
Tim Peters75f8e352001-05-05 11:33:43 +00001899 for (;;) {
1900 int cmp;
1901 PyObject *item = PyIter_Next(it);
1902 if (item == NULL) {
1903 if (PyErr_Occurred())
1904 goto Fail;
1905 break;
1906 }
Tim Peters16a77ad2001-09-08 04:00:12 +00001907
1908 cmp = PyObject_RichCompareBool(obj, item, Py_EQ);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001909 Py_DECREF(item);
Tim Peters75f8e352001-05-05 11:33:43 +00001910 if (cmp < 0)
1911 goto Fail;
1912 if (cmp > 0) {
Tim Peters16a77ad2001-09-08 04:00:12 +00001913 switch (operation) {
1914 case PY_ITERSEARCH_COUNT:
Armin Rigo7ccbca92006-10-04 12:17:45 +00001915 if (n == PY_SSIZE_T_MAX) {
Tim Peters16a77ad2001-09-08 04:00:12 +00001916 PyErr_SetString(PyExc_OverflowError,
Armin Rigo7ccbca92006-10-04 12:17:45 +00001917 "count exceeds C integer size");
Tim Peters16a77ad2001-09-08 04:00:12 +00001918 goto Fail;
1919 }
Armin Rigo7ccbca92006-10-04 12:17:45 +00001920 ++n;
Tim Peters16a77ad2001-09-08 04:00:12 +00001921 break;
1922
1923 case PY_ITERSEARCH_INDEX:
1924 if (wrapped) {
1925 PyErr_SetString(PyExc_OverflowError,
Armin Rigo7ccbca92006-10-04 12:17:45 +00001926 "index exceeds C integer size");
Tim Peters16a77ad2001-09-08 04:00:12 +00001927 goto Fail;
1928 }
1929 goto Done;
1930
1931 case PY_ITERSEARCH_CONTAINS:
1932 n = 1;
1933 goto Done;
1934
1935 default:
1936 assert(!"unknown operation");
Tim Peters75f8e352001-05-05 11:33:43 +00001937 }
Tim Peters16a77ad2001-09-08 04:00:12 +00001938 }
1939
1940 if (operation == PY_ITERSEARCH_INDEX) {
Armin Rigo7ccbca92006-10-04 12:17:45 +00001941 if (n == PY_SSIZE_T_MAX)
Tim Peters16a77ad2001-09-08 04:00:12 +00001942 wrapped = 1;
Armin Rigo7ccbca92006-10-04 12:17:45 +00001943 ++n;
Tim Peters75f8e352001-05-05 11:33:43 +00001944 }
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001945 }
Tim Peters16a77ad2001-09-08 04:00:12 +00001946
1947 if (operation != PY_ITERSEARCH_INDEX)
1948 goto Done;
1949
1950 PyErr_SetString(PyExc_ValueError,
1951 "sequence.index(x): x not in sequence");
1952 /* fall into failure code */
1953Fail:
1954 n = -1;
1955 /* fall through */
1956Done:
Tim Peters75f8e352001-05-05 11:33:43 +00001957 Py_DECREF(it);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001958 return n;
Tim Peters75f8e352001-05-05 11:33:43 +00001959
Guido van Rossume15dee51995-07-18 14:12:02 +00001960}
1961
Tim Peters16a77ad2001-09-08 04:00:12 +00001962/* Return # of times o appears in s. */
Neal Norwitz1fc4b772006-03-04 18:49:58 +00001963Py_ssize_t
Tim Peters16a77ad2001-09-08 04:00:12 +00001964PySequence_Count(PyObject *s, PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00001965{
Tim Peters16a77ad2001-09-08 04:00:12 +00001966 return _PySequence_IterSearch(s, o, PY_ITERSEARCH_COUNT);
Guido van Rossume15dee51995-07-18 14:12:02 +00001967}
1968
Tim Peterscb8d3682001-05-05 21:05:01 +00001969/* Return -1 if error; 1 if ob in seq; 0 if ob not in seq.
Tim Peters16a77ad2001-09-08 04:00:12 +00001970 * Use sq_contains if possible, else defer to _PySequence_IterSearch().
Tim Peterscb8d3682001-05-05 21:05:01 +00001971 */
1972int
1973PySequence_Contains(PyObject *seq, PyObject *ob)
1974{
Neal Norwitz1fc4b772006-03-04 18:49:58 +00001975 Py_ssize_t result;
Tim Peterscb8d3682001-05-05 21:05:01 +00001976 if (PyType_HasFeature(seq->ob_type, Py_TPFLAGS_HAVE_SEQUENCE_IN)) {
1977 PySequenceMethods *sqm = seq->ob_type->tp_as_sequence;
1978 if (sqm != NULL && sqm->sq_contains != NULL)
1979 return (*sqm->sq_contains)(seq, ob);
1980 }
Neal Norwitz1fc4b772006-03-04 18:49:58 +00001981 result = _PySequence_IterSearch(seq, ob, PY_ITERSEARCH_CONTAINS);
1982 return Py_SAFE_DOWNCAST(result, Py_ssize_t, int);
Tim Peterscb8d3682001-05-05 21:05:01 +00001983}
1984
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001985/* Backwards compatibility */
1986#undef PySequence_In
1987int
Fred Drake79912472000-07-09 04:06:11 +00001988PySequence_In(PyObject *w, PyObject *v)
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001989{
1990 return PySequence_Contains(w, v);
1991}
1992
Neal Norwitz1fc4b772006-03-04 18:49:58 +00001993Py_ssize_t
Fred Drake79912472000-07-09 04:06:11 +00001994PySequence_Index(PyObject *s, PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00001995{
Tim Peters16a77ad2001-09-08 04:00:12 +00001996 return _PySequence_IterSearch(s, o, PY_ITERSEARCH_INDEX);
Guido van Rossume15dee51995-07-18 14:12:02 +00001997}
1998
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001999/* Operations on mappings */
2000
2001int
Fred Drake79912472000-07-09 04:06:11 +00002002PyMapping_Check(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00002003{
Raymond Hettinger1be1a792004-09-19 06:00:15 +00002004 if (o && PyInstance_Check(o))
Raymond Hettingere2eda602004-04-04 08:51:41 +00002005 return PyObject_HasAttrString(o, "__getitem__");
2006
2007 return o && o->ob_type->tp_as_mapping &&
2008 o->ob_type->tp_as_mapping->mp_subscript &&
Raymond Hettingered9192e2004-04-05 08:14:48 +00002009 !(o->ob_type->tp_as_sequence &&
2010 o->ob_type->tp_as_sequence->sq_slice);
Guido van Rossume15dee51995-07-18 14:12:02 +00002011}
2012
Martin v. Löwis18e16552006-02-15 17:27:45 +00002013Py_ssize_t
Jeremy Hylton6253f832000-07-12 12:56:19 +00002014PyMapping_Size(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00002015{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002016 PyMappingMethods *m;
Guido van Rossume15dee51995-07-18 14:12:02 +00002017
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002018 if (o == NULL) {
2019 null_error();
2020 return -1;
2021 }
Guido van Rossume15dee51995-07-18 14:12:02 +00002022
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002023 m = o->ob_type->tp_as_mapping;
2024 if (m && m->mp_length)
2025 return m->mp_length(o);
Guido van Rossume15dee51995-07-18 14:12:02 +00002026
Georg Brandlb0061c82006-08-08 11:56:21 +00002027 type_error("object of type '%.200s' has no len()", o);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002028 return -1;
Guido van Rossume15dee51995-07-18 14:12:02 +00002029}
2030
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +00002031#undef PyMapping_Length
Martin v. Löwis18e16552006-02-15 17:27:45 +00002032Py_ssize_t
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +00002033PyMapping_Length(PyObject *o)
2034{
2035 return PyMapping_Size(o);
2036}
2037#define PyMapping_Length PyMapping_Size
2038
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002039PyObject *
Fred Drake79912472000-07-09 04:06:11 +00002040PyMapping_GetItemString(PyObject *o, char *key)
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002041{
2042 PyObject *okey, *r;
2043
2044 if (key == NULL)
2045 return null_error();
2046
2047 okey = PyString_FromString(key);
2048 if (okey == NULL)
2049 return NULL;
2050 r = PyObject_GetItem(o, okey);
2051 Py_DECREF(okey);
2052 return r;
2053}
2054
2055int
Fred Drake79912472000-07-09 04:06:11 +00002056PyMapping_SetItemString(PyObject *o, char *key, PyObject *value)
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002057{
2058 PyObject *okey;
2059 int r;
2060
2061 if (key == NULL) {
2062 null_error();
2063 return -1;
2064 }
2065
2066 okey = PyString_FromString(key);
2067 if (okey == NULL)
Guido van Rossumed6219b1998-05-29 02:59:33 +00002068 return -1;
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002069 r = PyObject_SetItem(o, okey, value);
2070 Py_DECREF(okey);
2071 return r;
2072}
2073
2074int
Fred Drake79912472000-07-09 04:06:11 +00002075PyMapping_HasKeyString(PyObject *o, char *key)
Guido van Rossume15dee51995-07-18 14:12:02 +00002076{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002077 PyObject *v;
Guido van Rossume15dee51995-07-18 14:12:02 +00002078
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002079 v = PyMapping_GetItemString(o, key);
2080 if (v) {
2081 Py_DECREF(v);
2082 return 1;
2083 }
2084 PyErr_Clear();
2085 return 0;
Guido van Rossume15dee51995-07-18 14:12:02 +00002086}
2087
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002088int
Fred Drake79912472000-07-09 04:06:11 +00002089PyMapping_HasKey(PyObject *o, PyObject *key)
Guido van Rossume15dee51995-07-18 14:12:02 +00002090{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002091 PyObject *v;
Guido van Rossume15dee51995-07-18 14:12:02 +00002092
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002093 v = PyObject_GetItem(o, key);
2094 if (v) {
2095 Py_DECREF(v);
2096 return 1;
2097 }
2098 PyErr_Clear();
2099 return 0;
Guido van Rossume15dee51995-07-18 14:12:02 +00002100}
2101
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002102/* Operations on callable objects */
2103
2104/* XXX PyCallable_Check() is in object.c */
2105
Guido van Rossume15dee51995-07-18 14:12:02 +00002106PyObject *
Fred Drake79912472000-07-09 04:06:11 +00002107PyObject_CallObject(PyObject *o, PyObject *a)
Guido van Rossume15dee51995-07-18 14:12:02 +00002108{
Guido van Rossum5560b742001-09-14 16:47:50 +00002109 return PyEval_CallObjectWithKeywords(o, a, NULL);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002110}
Guido van Rossume15dee51995-07-18 14:12:02 +00002111
2112PyObject *
Tim Peters6d6c1a32001-08-02 04:15:00 +00002113PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw)
2114{
2115 ternaryfunc call;
2116
2117 if ((call = func->ob_type->tp_call) != NULL) {
Brett Cannon1e534b52007-09-07 04:18:30 +00002118 PyObject *result;
2119 if (Py_EnterRecursiveCall(" while calling a Python object"))
2120 return NULL;
2121 result = (*call)(func, arg, kw);
2122 Py_LeaveRecursiveCall();
Tim Peters6d6c1a32001-08-02 04:15:00 +00002123 if (result == NULL && !PyErr_Occurred())
2124 PyErr_SetString(
2125 PyExc_SystemError,
2126 "NULL result without error in PyObject_Call");
2127 return result;
2128 }
Georg Brandlccff7852006-06-18 22:17:29 +00002129 PyErr_Format(PyExc_TypeError, "'%.200s' object is not callable",
Fred Drake573395a2001-11-01 20:26:12 +00002130 func->ob_type->tp_name);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002131 return NULL;
2132}
2133
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002134static PyObject*
2135call_function_tail(PyObject *callable, PyObject *args)
2136{
2137 PyObject *retval;
2138
2139 if (args == NULL)
2140 return NULL;
2141
2142 if (!PyTuple_Check(args)) {
2143 PyObject *a;
2144
2145 a = PyTuple_New(1);
2146 if (a == NULL) {
2147 Py_DECREF(args);
2148 return NULL;
2149 }
2150 PyTuple_SET_ITEM(a, 0, args);
2151 args = a;
2152 }
2153 retval = PyObject_Call(callable, args, NULL);
2154
2155 Py_DECREF(args);
2156
2157 return retval;
2158}
2159
Tim Peters6d6c1a32001-08-02 04:15:00 +00002160PyObject *
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002161PyObject_CallFunction(PyObject *callable, char *format, ...)
Guido van Rossume15dee51995-07-18 14:12:02 +00002162{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002163 va_list va;
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002164 PyObject *args;
Guido van Rossume15dee51995-07-18 14:12:02 +00002165
Fred Drakeb92cf062001-10-27 06:16:31 +00002166 if (callable == NULL)
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002167 return null_error();
Guido van Rossume15dee51995-07-18 14:12:02 +00002168
Fred Drakeb92cf062001-10-27 06:16:31 +00002169 if (format && *format) {
2170 va_start(va, format);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002171 args = Py_VaBuildValue(format, va);
Fred Drakeb92cf062001-10-27 06:16:31 +00002172 va_end(va);
2173 }
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002174 else
2175 args = PyTuple_New(0);
Guido van Rossume15dee51995-07-18 14:12:02 +00002176
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002177 return call_function_tail(callable, args);
2178}
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002179
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002180PyObject *
2181_PyObject_CallFunction_SizeT(PyObject *callable, char *format, ...)
2182{
2183 va_list va;
2184 PyObject *args;
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002185
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002186 if (callable == NULL)
2187 return null_error();
2188
2189 if (format && *format) {
2190 va_start(va, format);
2191 args = _Py_VaBuildValue_SizeT(format, va);
2192 va_end(va);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002193 }
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002194 else
2195 args = PyTuple_New(0);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002196
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002197 return call_function_tail(callable, args);
Guido van Rossume15dee51995-07-18 14:12:02 +00002198}
2199
2200PyObject *
Guido van Rossume15dee51995-07-18 14:12:02 +00002201PyObject_CallMethod(PyObject *o, char *name, char *format, ...)
Guido van Rossume15dee51995-07-18 14:12:02 +00002202{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002203 va_list va;
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002204 PyObject *args;
Michael W. Hudson0edc7a02005-07-12 10:21:19 +00002205 PyObject *func = NULL;
2206 PyObject *retval = NULL;
Guido van Rossume15dee51995-07-18 14:12:02 +00002207
Fred Drakeb92cf062001-10-27 06:16:31 +00002208 if (o == NULL || name == NULL)
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002209 return null_error();
Guido van Rossume15dee51995-07-18 14:12:02 +00002210
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002211 func = PyObject_GetAttrString(o, name);
2212 if (func == NULL) {
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002213 PyErr_SetString(PyExc_AttributeError, name);
2214 return 0;
2215 }
Guido van Rossume15dee51995-07-18 14:12:02 +00002216
Michael W. Hudson0edc7a02005-07-12 10:21:19 +00002217 if (!PyCallable_Check(func)) {
Georg Brandlccff7852006-06-18 22:17:29 +00002218 type_error("attribute of type '%.200s' is not callable", func);
Michael W. Hudson0edc7a02005-07-12 10:21:19 +00002219 goto exit;
2220 }
Guido van Rossume15dee51995-07-18 14:12:02 +00002221
Fred Drakeb92cf062001-10-27 06:16:31 +00002222 if (format && *format) {
2223 va_start(va, format);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002224 args = Py_VaBuildValue(format, va);
Fred Drakeb92cf062001-10-27 06:16:31 +00002225 va_end(va);
2226 }
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002227 else
2228 args = PyTuple_New(0);
Guido van Rossume15dee51995-07-18 14:12:02 +00002229
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002230 retval = call_function_tail(func, args);
Guido van Rossume15dee51995-07-18 14:12:02 +00002231
Michael W. Hudson0edc7a02005-07-12 10:21:19 +00002232 exit:
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002233 /* args gets consumed in call_function_tail */
2234 Py_XDECREF(func);
2235
2236 return retval;
2237}
2238
2239PyObject *
2240_PyObject_CallMethod_SizeT(PyObject *o, char *name, char *format, ...)
2241{
2242 va_list va;
2243 PyObject *args;
2244 PyObject *func = NULL;
2245 PyObject *retval = NULL;
2246
2247 if (o == NULL || name == NULL)
2248 return null_error();
2249
2250 func = PyObject_GetAttrString(o, name);
2251 if (func == NULL) {
2252 PyErr_SetString(PyExc_AttributeError, name);
2253 return 0;
2254 }
2255
2256 if (!PyCallable_Check(func)) {
Georg Brandlccff7852006-06-18 22:17:29 +00002257 type_error("attribute of type '%.200s' is not callable", func);
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002258 goto exit;
2259 }
2260
2261 if (format && *format) {
2262 va_start(va, format);
2263 args = _Py_VaBuildValue_SizeT(format, va);
2264 va_end(va);
2265 }
2266 else
2267 args = PyTuple_New(0);
2268
2269 retval = call_function_tail(func, args);
2270
2271 exit:
2272 /* args gets consumed in call_function_tail */
Michael W. Hudson0edc7a02005-07-12 10:21:19 +00002273 Py_XDECREF(func);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002274
2275 return retval;
Guido van Rossume15dee51995-07-18 14:12:02 +00002276}
Guido van Rossum823649d2001-03-21 18:40:58 +00002277
2278
Fred Drakeb421b8c2001-10-26 16:21:32 +00002279static PyObject *
Fred Drakeb0c079e2001-10-28 02:39:03 +00002280objargs_mktuple(va_list va)
Fred Drakeb421b8c2001-10-26 16:21:32 +00002281{
2282 int i, n = 0;
2283 va_list countva;
2284 PyObject *result, *tmp;
2285
2286#ifdef VA_LIST_IS_ARRAY
2287 memcpy(countva, va, sizeof(va_list));
2288#else
Martin v. Löwis75d2d942002-07-28 10:23:27 +00002289#ifdef __va_copy
2290 __va_copy(countva, va);
2291#else
Fred Drakeb421b8c2001-10-26 16:21:32 +00002292 countva = va;
2293#endif
Martin v. Löwis75d2d942002-07-28 10:23:27 +00002294#endif
Fred Drakeb421b8c2001-10-26 16:21:32 +00002295
2296 while (((PyObject *)va_arg(countva, PyObject *)) != NULL)
2297 ++n;
2298 result = PyTuple_New(n);
2299 if (result != NULL && n > 0) {
2300 for (i = 0; i < n; ++i) {
2301 tmp = (PyObject *)va_arg(va, PyObject *);
2302 PyTuple_SET_ITEM(result, i, tmp);
2303 Py_INCREF(tmp);
2304 }
2305 }
2306 return result;
2307}
2308
2309PyObject *
Fred Drakeb0c079e2001-10-28 02:39:03 +00002310PyObject_CallMethodObjArgs(PyObject *callable, PyObject *name, ...)
Fred Drakeb421b8c2001-10-26 16:21:32 +00002311{
2312 PyObject *args, *tmp;
2313 va_list vargs;
2314
2315 if (callable == NULL || name == NULL)
2316 return null_error();
2317
2318 callable = PyObject_GetAttr(callable, name);
2319 if (callable == NULL)
2320 return NULL;
2321
2322 /* count the args */
2323 va_start(vargs, name);
Fred Drakeb0c079e2001-10-28 02:39:03 +00002324 args = objargs_mktuple(vargs);
Fred Drakeb421b8c2001-10-26 16:21:32 +00002325 va_end(vargs);
2326 if (args == NULL) {
2327 Py_DECREF(callable);
2328 return NULL;
2329 }
2330 tmp = PyObject_Call(callable, args, NULL);
2331 Py_DECREF(args);
2332 Py_DECREF(callable);
2333
2334 return tmp;
2335}
2336
2337PyObject *
Fred Drakeb0c079e2001-10-28 02:39:03 +00002338PyObject_CallFunctionObjArgs(PyObject *callable, ...)
Fred Drakeb421b8c2001-10-26 16:21:32 +00002339{
2340 PyObject *args, *tmp;
2341 va_list vargs;
2342
2343 if (callable == NULL)
2344 return null_error();
2345
2346 /* count the args */
2347 va_start(vargs, callable);
Fred Drakeb0c079e2001-10-28 02:39:03 +00002348 args = objargs_mktuple(vargs);
Fred Drakeb421b8c2001-10-26 16:21:32 +00002349 va_end(vargs);
2350 if (args == NULL)
2351 return NULL;
2352 tmp = PyObject_Call(callable, args, NULL);
2353 Py_DECREF(args);
2354
2355 return tmp;
2356}
2357
2358
Guido van Rossum823649d2001-03-21 18:40:58 +00002359/* isinstance(), issubclass() */
2360
Barry Warsawf16951c2002-04-23 22:45:44 +00002361/* abstract_get_bases() has logically 4 return states, with a sort of 0th
2362 * state that will almost never happen.
2363 *
2364 * 0. creating the __bases__ static string could get a MemoryError
2365 * 1. getattr(cls, '__bases__') could raise an AttributeError
2366 * 2. getattr(cls, '__bases__') could raise some other exception
2367 * 3. getattr(cls, '__bases__') could return a tuple
2368 * 4. getattr(cls, '__bases__') could return something other than a tuple
2369 *
2370 * Only state #3 is a non-error state and only it returns a non-NULL object
2371 * (it returns the retrieved tuple).
2372 *
2373 * Any raised AttributeErrors are masked by clearing the exception and
2374 * returning NULL. If an object other than a tuple comes out of __bases__,
2375 * then again, the return value is NULL. So yes, these two situations
2376 * produce exactly the same results: NULL is returned and no error is set.
2377 *
2378 * If some exception other than AttributeError is raised, then NULL is also
2379 * returned, but the exception is not cleared. That's because we want the
2380 * exception to be propagated along.
2381 *
2382 * Callers are expected to test for PyErr_Occurred() when the return value
2383 * is NULL to decide whether a valid exception should be propagated or not.
2384 * When there's no exception to propagate, it's customary for the caller to
2385 * set a TypeError.
2386 */
Neil Schemenauer6b471292001-10-18 03:18:43 +00002387static PyObject *
2388abstract_get_bases(PyObject *cls)
Guido van Rossum823649d2001-03-21 18:40:58 +00002389{
2390 static PyObject *__bases__ = NULL;
2391 PyObject *bases;
Guido van Rossum823649d2001-03-21 18:40:58 +00002392
2393 if (__bases__ == NULL) {
Christian Heimesd7e1b2b2008-01-28 02:07:53 +00002394 __bases__ = PyString_InternFromString("__bases__");
Guido van Rossum823649d2001-03-21 18:40:58 +00002395 if (__bases__ == NULL)
Neil Schemenauer6b471292001-10-18 03:18:43 +00002396 return NULL;
Guido van Rossum823649d2001-03-21 18:40:58 +00002397 }
Neil Schemenauer6b471292001-10-18 03:18:43 +00002398 bases = PyObject_GetAttr(cls, __bases__);
Barry Warsawf16951c2002-04-23 22:45:44 +00002399 if (bases == NULL) {
2400 if (PyErr_ExceptionMatches(PyExc_AttributeError))
2401 PyErr_Clear();
Neil Schemenauer6b471292001-10-18 03:18:43 +00002402 return NULL;
Guido van Rossum823649d2001-03-21 18:40:58 +00002403 }
Barry Warsawf16951c2002-04-23 22:45:44 +00002404 if (!PyTuple_Check(bases)) {
2405 Py_DECREF(bases);
2406 return NULL;
2407 }
Neil Schemenauer6b471292001-10-18 03:18:43 +00002408 return bases;
2409}
2410
2411
2412static int
2413abstract_issubclass(PyObject *derived, PyObject *cls)
2414{
2415 PyObject *bases;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002416 Py_ssize_t i, n;
Neil Schemenauer6b471292001-10-18 03:18:43 +00002417 int r = 0;
2418
2419
Guido van Rossum823649d2001-03-21 18:40:58 +00002420 if (derived == cls)
2421 return 1;
2422
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002423 if (PyTuple_Check(cls)) {
2424 /* Not a general sequence -- that opens up the road to
2425 recursion and stack overflow. */
2426 n = PyTuple_GET_SIZE(cls);
2427 for (i = 0; i < n; i++) {
2428 if (derived == PyTuple_GET_ITEM(cls, i))
2429 return 1;
2430 }
2431 }
Neil Schemenauer6b471292001-10-18 03:18:43 +00002432 bases = abstract_get_bases(derived);
Barry Warsawf16951c2002-04-23 22:45:44 +00002433 if (bases == NULL) {
2434 if (PyErr_Occurred())
2435 return -1;
Neil Schemenauer6b471292001-10-18 03:18:43 +00002436 return 0;
Barry Warsawf16951c2002-04-23 22:45:44 +00002437 }
Guido van Rossum823649d2001-03-21 18:40:58 +00002438 n = PyTuple_GET_SIZE(bases);
2439 for (i = 0; i < n; i++) {
Neil Schemenauer6b471292001-10-18 03:18:43 +00002440 r = abstract_issubclass(PyTuple_GET_ITEM(bases, i), cls);
Guido van Rossum823649d2001-03-21 18:40:58 +00002441 if (r != 0)
2442 break;
2443 }
2444
2445 Py_DECREF(bases);
2446
2447 return r;
2448}
2449
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002450static int
2451check_class(PyObject *cls, const char *error)
2452{
2453 PyObject *bases = abstract_get_bases(cls);
2454 if (bases == NULL) {
2455 /* Do not mask errors. */
2456 if (!PyErr_Occurred())
2457 PyErr_SetString(PyExc_TypeError, error);
2458 return 0;
2459 }
2460 Py_DECREF(bases);
2461 return -1;
2462}
2463
Brett Cannon4f653312004-03-20 22:52:14 +00002464static int
2465recursive_isinstance(PyObject *inst, PyObject *cls, int recursion_depth)
Guido van Rossum823649d2001-03-21 18:40:58 +00002466{
2467 PyObject *icls;
2468 static PyObject *__class__ = NULL;
2469 int retval = 0;
2470
Guido van Rossum03bc7d32003-02-12 03:32:58 +00002471 if (__class__ == NULL) {
Christian Heimesd7e1b2b2008-01-28 02:07:53 +00002472 __class__ = PyString_InternFromString("__class__");
Guido van Rossum03bc7d32003-02-12 03:32:58 +00002473 if (__class__ == NULL)
2474 return -1;
2475 }
2476
Neil Schemenauer6b471292001-10-18 03:18:43 +00002477 if (PyClass_Check(cls) && PyInstance_Check(inst)) {
2478 PyObject *inclass =
2479 (PyObject*)((PyInstanceObject*)inst)->in_class;
2480 retval = PyClass_IsSubclass(inclass, cls);
Guido van Rossum823649d2001-03-21 18:40:58 +00002481 }
2482 else if (PyType_Check(cls)) {
Tim Peters6d6c1a32001-08-02 04:15:00 +00002483 retval = PyObject_TypeCheck(inst, (PyTypeObject *)cls);
Guido van Rossum03bc7d32003-02-12 03:32:58 +00002484 if (retval == 0) {
2485 PyObject *c = PyObject_GetAttr(inst, __class__);
2486 if (c == NULL) {
2487 PyErr_Clear();
2488 }
2489 else {
Guido van Rossume5b130b2003-02-12 03:36:05 +00002490 if (c != (PyObject *)(inst->ob_type) &&
2491 PyType_Check(c))
Guido van Rossum03bc7d32003-02-12 03:32:58 +00002492 retval = PyType_IsSubtype(
2493 (PyTypeObject *)c,
2494 (PyTypeObject *)cls);
2495 Py_DECREF(c);
2496 }
2497 }
Guido van Rossum823649d2001-03-21 18:40:58 +00002498 }
Guido van Rossum03290ec2001-10-07 20:54:12 +00002499 else if (PyTuple_Check(cls)) {
Martin v. Löwis18e16552006-02-15 17:27:45 +00002500 Py_ssize_t i, n;
Guido van Rossum03290ec2001-10-07 20:54:12 +00002501
Brett Cannon4f653312004-03-20 22:52:14 +00002502 if (!recursion_depth) {
2503 PyErr_SetString(PyExc_RuntimeError,
2504 "nest level of tuple too deep");
Tim Peters5f112eb2004-03-21 16:59:09 +00002505 return -1;
Brett Cannon4f653312004-03-20 22:52:14 +00002506 }
2507
Guido van Rossum03290ec2001-10-07 20:54:12 +00002508 n = PyTuple_GET_SIZE(cls);
2509 for (i = 0; i < n; i++) {
Brett Cannon4f653312004-03-20 22:52:14 +00002510 retval = recursive_isinstance(
2511 inst,
2512 PyTuple_GET_ITEM(cls, i),
2513 recursion_depth-1);
Guido van Rossum03290ec2001-10-07 20:54:12 +00002514 if (retval != 0)
2515 break;
2516 }
Guido van Rossum03290ec2001-10-07 20:54:12 +00002517 }
Neil Schemenauer6b471292001-10-18 03:18:43 +00002518 else {
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002519 if (!check_class(cls,
2520 "isinstance() arg 2 must be a class, type,"
2521 " or tuple of classes and types"))
Neil Schemenauer6b471292001-10-18 03:18:43 +00002522 return -1;
Guido van Rossum823649d2001-03-21 18:40:58 +00002523 icls = PyObject_GetAttr(inst, __class__);
Neil Schemenauer6b471292001-10-18 03:18:43 +00002524 if (icls == NULL) {
2525 PyErr_Clear();
2526 retval = 0;
Guido van Rossum823649d2001-03-21 18:40:58 +00002527 }
Neil Schemenauer6b471292001-10-18 03:18:43 +00002528 else {
2529 retval = abstract_issubclass(icls, cls);
2530 Py_DECREF(icls);
2531 }
Guido van Rossum823649d2001-03-21 18:40:58 +00002532 }
Guido van Rossum823649d2001-03-21 18:40:58 +00002533
Guido van Rossum823649d2001-03-21 18:40:58 +00002534 return retval;
2535}
2536
2537int
Brett Cannon4f653312004-03-20 22:52:14 +00002538PyObject_IsInstance(PyObject *inst, PyObject *cls)
2539{
Christian Heimese247f002008-02-14 22:40:11 +00002540 static PyObject *name = NULL;
Guido van Rossumb5591132007-09-10 22:36:02 +00002541 PyObject *t, *v, *tb;
2542 PyObject *checker;
2543 PyErr_Fetch(&t, &v, &tb);
Christian Heimese247f002008-02-14 22:40:11 +00002544
2545 if (name == NULL) {
2546 name = PyString_InternFromString("__instancecheck__");
2547 if (name == NULL)
2548 return -1;
2549 }
2550 checker = PyObject_GetAttr(cls, name);
Guido van Rossumb5591132007-09-10 22:36:02 +00002551 PyErr_Restore(t, v, tb);
2552 if (checker != NULL) {
2553 PyObject *res;
2554 int ok = -1;
2555 if (Py_EnterRecursiveCall(" in __instancecheck__")) {
2556 Py_DECREF(checker);
2557 return ok;
2558 }
2559 res = PyObject_CallFunctionObjArgs(checker, inst, NULL);
2560 Py_LeaveRecursiveCall();
2561 Py_DECREF(checker);
2562 if (res != NULL) {
2563 ok = PyObject_IsTrue(res);
2564 Py_DECREF(res);
2565 }
2566 return ok;
2567 }
Thomas Woutersbbaff4c2007-09-18 23:27:30 +00002568 return recursive_isinstance(inst, cls, Py_GetRecursionLimit());
Brett Cannon4f653312004-03-20 22:52:14 +00002569}
2570
2571static int
2572recursive_issubclass(PyObject *derived, PyObject *cls, int recursion_depth)
Guido van Rossum823649d2001-03-21 18:40:58 +00002573{
2574 int retval;
2575
2576 if (!PyClass_Check(derived) || !PyClass_Check(cls)) {
Guido van Rossumf6c9ba82003-02-10 16:05:43 +00002577 if (!check_class(derived,
2578 "issubclass() arg 1 must be a class"))
Neil Schemenauer6b471292001-10-18 03:18:43 +00002579 return -1;
Neil Schemenauer6b471292001-10-18 03:18:43 +00002580
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002581 if (PyTuple_Check(cls)) {
Martin v. Löwis18e16552006-02-15 17:27:45 +00002582 Py_ssize_t i;
2583 Py_ssize_t n = PyTuple_GET_SIZE(cls);
Brett Cannon4f653312004-03-20 22:52:14 +00002584
2585 if (!recursion_depth) {
2586 PyErr_SetString(PyExc_RuntimeError,
2587 "nest level of tuple too deep");
Tim Peters5f112eb2004-03-21 16:59:09 +00002588 return -1;
Brett Cannon4f653312004-03-20 22:52:14 +00002589 }
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002590 for (i = 0; i < n; ++i) {
Brett Cannon4f653312004-03-20 22:52:14 +00002591 retval = recursive_issubclass(
2592 derived,
2593 PyTuple_GET_ITEM(cls, i),
2594 recursion_depth-1);
Guido van Rossumf6c9ba82003-02-10 16:05:43 +00002595 if (retval != 0) {
2596 /* either found it, or got an error */
Walter Dörwald7e5c6a02002-12-12 19:14:08 +00002597 return retval;
Guido van Rossumf6c9ba82003-02-10 16:05:43 +00002598 }
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002599 }
Walter Dörwald7e5c6a02002-12-12 19:14:08 +00002600 return 0;
Neil Schemenauer6b471292001-10-18 03:18:43 +00002601 }
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002602 else {
2603 if (!check_class(cls,
2604 "issubclass() arg 2 must be a class"
2605 " or tuple of classes"))
2606 return -1;
2607 }
Neil Schemenauer6b471292001-10-18 03:18:43 +00002608
2609 retval = abstract_issubclass(derived, cls);
Guido van Rossum823649d2001-03-21 18:40:58 +00002610 }
2611 else {
2612 /* shortcut */
2613 if (!(retval = (derived == cls)))
2614 retval = PyClass_IsSubclass(derived, cls);
2615 }
2616
2617 return retval;
2618}
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00002619
Brett Cannon4f653312004-03-20 22:52:14 +00002620int
2621PyObject_IsSubclass(PyObject *derived, PyObject *cls)
2622{
Christian Heimese247f002008-02-14 22:40:11 +00002623 static PyObject *name = NULL;
Guido van Rossumb5591132007-09-10 22:36:02 +00002624 PyObject *t, *v, *tb;
2625 PyObject *checker;
2626 PyErr_Fetch(&t, &v, &tb);
Christian Heimese247f002008-02-14 22:40:11 +00002627
2628 if (name == NULL) {
2629 name = PyString_InternFromString("__subclasscheck__");
2630 if (name == NULL)
2631 return -1;
2632 }
2633 checker = PyObject_GetAttr(cls, name);
Guido van Rossumb5591132007-09-10 22:36:02 +00002634 PyErr_Restore(t, v, tb);
2635 if (checker != NULL) {
2636 PyObject *res;
2637 int ok = -1;
2638 if (Py_EnterRecursiveCall(" in __subclasscheck__"))
2639 return ok;
2640 res = PyObject_CallFunctionObjArgs(checker, derived, NULL);
2641 Py_LeaveRecursiveCall();
2642 Py_DECREF(checker);
2643 if (res != NULL) {
2644 ok = PyObject_IsTrue(res);
2645 Py_DECREF(res);
2646 }
2647 return ok;
2648 }
Thomas Woutersbbaff4c2007-09-18 23:27:30 +00002649 return recursive_issubclass(derived, cls, Py_GetRecursionLimit());
Brett Cannon4f653312004-03-20 22:52:14 +00002650}
2651
2652
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00002653PyObject *
2654PyObject_GetIter(PyObject *o)
2655{
2656 PyTypeObject *t = o->ob_type;
2657 getiterfunc f = NULL;
2658 if (PyType_HasFeature(t, Py_TPFLAGS_HAVE_ITER))
2659 f = t->tp_iter;
2660 if (f == NULL) {
2661 if (PySequence_Check(o))
Guido van Rossum213c7a62001-04-23 14:08:49 +00002662 return PySeqIter_New(o);
Georg Brandlccff7852006-06-18 22:17:29 +00002663 return type_error("'%.200s' object is not iterable", o);
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00002664 }
Guido van Rossum213c7a62001-04-23 14:08:49 +00002665 else {
2666 PyObject *res = (*f)(o);
2667 if (res != NULL && !PyIter_Check(res)) {
2668 PyErr_Format(PyExc_TypeError,
2669 "iter() returned non-iterator "
2670 "of type '%.100s'",
2671 res->ob_type->tp_name);
2672 Py_DECREF(res);
2673 res = NULL;
2674 }
2675 return res;
2676 }
2677}
2678
Tim Petersf4848da2001-05-05 00:14:56 +00002679/* Return next item.
2680 * If an error occurs, return NULL. PyErr_Occurred() will be true.
2681 * If the iteration terminates normally, return NULL and clear the
2682 * PyExc_StopIteration exception (if it was set). PyErr_Occurred()
2683 * will be false.
2684 * Else return the next object. PyErr_Occurred() will be false.
2685 */
Guido van Rossum213c7a62001-04-23 14:08:49 +00002686PyObject *
2687PyIter_Next(PyObject *iter)
2688{
Tim Petersf4848da2001-05-05 00:14:56 +00002689 PyObject *result;
Raymond Hettinger8049dde2003-03-01 01:44:32 +00002690 assert(PyIter_Check(iter));
Tim Petersf4848da2001-05-05 00:14:56 +00002691 result = (*iter->ob_type->tp_iternext)(iter);
2692 if (result == NULL &&
2693 PyErr_Occurred() &&
2694 PyErr_ExceptionMatches(PyExc_StopIteration))
2695 PyErr_Clear();
2696 return result;
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00002697}