blob: 4da7e0035eacfd5c63f9f99de04825e1b1a96675 [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
Raymond Hettingerb5163702009-02-02 21:50:13 +000088 value, then the defaultvalue is returned. If one of the calls fails,
89 this function returns -1.
Raymond Hettinger4e2f7142007-12-06 00:56:53 +000090*/
91
92Py_ssize_t
93_PyObject_LengthHint(PyObject *o, Py_ssize_t defaultvalue)
94{
95 static PyObject *hintstrobj = NULL;
Benjamin Petersonaf1692a2009-05-09 16:36:39 +000096 PyObject *ro, *hintmeth;
Raymond Hettinger4e2f7142007-12-06 00:56:53 +000097 Py_ssize_t rv;
98
99 /* try o.__len__() */
100 rv = PyObject_Size(o);
101 if (rv >= 0)
102 return rv;
Raymond Hettingerb5163702009-02-02 21:50:13 +0000103 if (PyErr_Occurred()) {
104 if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
105 !PyErr_ExceptionMatches(PyExc_AttributeError))
106 return -1;
Raymond Hettinger4e2f7142007-12-06 00:56:53 +0000107 PyErr_Clear();
Raymond Hettingerb5163702009-02-02 21:50:13 +0000108 }
Raymond Hettinger4e2f7142007-12-06 00:56:53 +0000109
Benjamin Peterson3f3d36b2009-05-09 16:51:51 +0000110 if (PyInstance_Check(o))
111 return defaultvalue;
Raymond Hettinger4e2f7142007-12-06 00:56:53 +0000112 /* try o.__length_hint__() */
Benjamin Petersonaf1692a2009-05-09 16:36:39 +0000113 hintmeth = _PyObject_LookupSpecial(o, "__length_hint__", &hintstrobj);
114 if (hintmeth == NULL)
115 return defaultvalue;
116 ro = PyObject_CallFunctionObjArgs(hintmeth, NULL);
117 Py_DECREF(hintmeth);
Raymond Hettingerb5163702009-02-02 21:50:13 +0000118 if (ro == NULL) {
Benjamin Petersona7dc9492009-05-09 19:03:05 +0000119 if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
120 !PyErr_ExceptionMatches(PyExc_AttributeError))
Benjamin Petersonaf1692a2009-05-09 16:36:39 +0000121 return -1;
Benjamin Petersonceea1632009-05-09 19:18:36 +0000122 PyErr_Clear();
Raymond Hettingerb5163702009-02-02 21:50:13 +0000123 return defaultvalue;
124 }
Mark Dickinsonb91d2f52009-02-08 13:58:10 +0000125 rv = PyLong_Check(ro) ? PyLong_AsSsize_t(ro) : defaultvalue;
Raymond Hettinger4e2f7142007-12-06 00:56:53 +0000126 Py_DECREF(ro);
Raymond Hettingerb5163702009-02-02 21:50:13 +0000127 return rv;
Raymond Hettinger6b27cda2005-09-24 21:23:05 +0000128}
129
Guido van Rossume15dee51995-07-18 14:12:02 +0000130PyObject *
Fred Drake79912472000-07-09 04:06:11 +0000131PyObject_GetItem(PyObject *o, PyObject *key)
Guido van Rossume15dee51995-07-18 14:12:02 +0000132{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000133 PyMappingMethods *m;
Guido van Rossume15dee51995-07-18 14:12:02 +0000134
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000135 if (o == NULL || key == NULL)
136 return null_error();
Guido van Rossume15dee51995-07-18 14:12:02 +0000137
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000138 m = o->ob_type->tp_as_mapping;
139 if (m && m->mp_subscript)
140 return m->mp_subscript(o, key);
Guido van Rossume15dee51995-07-18 14:12:02 +0000141
Guido van Rossum21308241998-08-13 16:44:44 +0000142 if (o->ob_type->tp_as_sequence) {
Neal Norwitz8a87f5d2006-08-12 17:03:09 +0000143 if (PyIndex_Check(key)) {
144 Py_ssize_t key_value;
145 key_value = PyNumber_AsSsize_t(key, PyExc_IndexError);
Andrew M. Kuchling0f223d22000-02-23 22:21:50 +0000146 if (key_value == -1 && PyErr_Occurred())
147 return NULL;
148 return PySequence_GetItem(o, key_value);
149 }
Guido van Rossum64585f62001-11-24 18:24:47 +0000150 else if (o->ob_type->tp_as_sequence->sq_item)
Georg Brandlccff7852006-06-18 22:17:29 +0000151 return type_error("sequence index must "
152 "be integer, not '%.200s'", key);
Guido van Rossum21308241998-08-13 16:44:44 +0000153 }
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000154
Georg Brandlf5fd5232009-04-18 08:26:21 +0000155 return type_error("'%.200s' object is not subscriptable", o);
Guido van Rossume15dee51995-07-18 14:12:02 +0000156}
157
158int
Fred Drake79912472000-07-09 04:06:11 +0000159PyObject_SetItem(PyObject *o, PyObject *key, PyObject *value)
Guido van Rossume15dee51995-07-18 14:12:02 +0000160{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000161 PyMappingMethods *m;
Guido van Rossume15dee51995-07-18 14:12:02 +0000162
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000163 if (o == NULL || key == NULL || value == NULL) {
164 null_error();
165 return -1;
166 }
167 m = o->ob_type->tp_as_mapping;
168 if (m && m->mp_ass_subscript)
169 return m->mp_ass_subscript(o, key, value);
Guido van Rossume15dee51995-07-18 14:12:02 +0000170
Guido van Rossum21308241998-08-13 16:44:44 +0000171 if (o->ob_type->tp_as_sequence) {
Neal Norwitz8a87f5d2006-08-12 17:03:09 +0000172 if (PyIndex_Check(key)) {
173 Py_ssize_t key_value;
174 key_value = PyNumber_AsSsize_t(key, PyExc_IndexError);
Andrew M. Kuchling0f223d22000-02-23 22:21:50 +0000175 if (key_value == -1 && PyErr_Occurred())
176 return -1;
177 return PySequence_SetItem(o, key_value, value);
178 }
Guido van Rossum64585f62001-11-24 18:24:47 +0000179 else if (o->ob_type->tp_as_sequence->sq_ass_item) {
Georg Brandlccff7852006-06-18 22:17:29 +0000180 type_error("sequence index must be "
181 "integer, not '%.200s'", key);
Guido van Rossum64585f62001-11-24 18:24:47 +0000182 return -1;
183 }
Guido van Rossum21308241998-08-13 16:44:44 +0000184 }
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000185
Georg Brandlccff7852006-06-18 22:17:29 +0000186 type_error("'%.200s' object does not support item assignment", o);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000187 return -1;
Guido van Rossume15dee51995-07-18 14:12:02 +0000188}
189
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000190int
Fred Drake79912472000-07-09 04:06:11 +0000191PyObject_DelItem(PyObject *o, PyObject *key)
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000192{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000193 PyMappingMethods *m;
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000194
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000195 if (o == NULL || key == NULL) {
196 null_error();
197 return -1;
198 }
199 m = o->ob_type->tp_as_mapping;
200 if (m && m->mp_ass_subscript)
201 return m->mp_ass_subscript(o, key, (PyObject*)NULL);
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000202
Guido van Rossum21308241998-08-13 16:44:44 +0000203 if (o->ob_type->tp_as_sequence) {
Neal Norwitz8a87f5d2006-08-12 17:03:09 +0000204 if (PyIndex_Check(key)) {
205 Py_ssize_t key_value;
206 key_value = PyNumber_AsSsize_t(key, PyExc_IndexError);
Andrew M. Kuchling0f223d22000-02-23 22:21:50 +0000207 if (key_value == -1 && PyErr_Occurred())
208 return -1;
209 return PySequence_DelItem(o, key_value);
210 }
Guido van Rossum64585f62001-11-24 18:24:47 +0000211 else if (o->ob_type->tp_as_sequence->sq_ass_item) {
Georg Brandlccff7852006-06-18 22:17:29 +0000212 type_error("sequence index must be "
213 "integer, not '%.200s'", key);
Guido van Rossum64585f62001-11-24 18:24:47 +0000214 return -1;
215 }
Guido van Rossum21308241998-08-13 16:44:44 +0000216 }
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000217
Georg Brandlccff7852006-06-18 22:17:29 +0000218 type_error("'%.200s' object does not support item deletion", o);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000219 return -1;
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000220}
221
Martin v. Löwisb0d71d02002-01-05 10:50:30 +0000222int
223PyObject_DelItemString(PyObject *o, char *key)
224{
225 PyObject *okey;
226 int ret;
227
228 if (o == NULL || key == NULL) {
229 null_error();
230 return -1;
231 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000232 okey = PyString_FromString(key);
Martin v. Löwisb0d71d02002-01-05 10:50:30 +0000233 if (okey == NULL)
234 return -1;
235 ret = PyObject_DelItem(o, okey);
236 Py_DECREF(okey);
237 return ret;
238}
239
Brett Cannonea229bd2006-06-06 18:08:16 +0000240int
241PyObject_AsCharBuffer(PyObject *obj,
Guido van Rossum4c08d552000-03-10 22:55:18 +0000242 const char **buffer,
Martin v. Löwis18e16552006-02-15 17:27:45 +0000243 Py_ssize_t *buffer_len)
Guido van Rossum4c08d552000-03-10 22:55:18 +0000244{
245 PyBufferProcs *pb;
Martin v. Löwis15e62742006-02-27 16:46:16 +0000246 char *pp;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000247 Py_ssize_t len;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000248
249 if (obj == NULL || buffer == NULL || buffer_len == NULL) {
250 null_error();
251 return -1;
252 }
253 pb = obj->ob_type->tp_as_buffer;
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000254 if (pb == NULL ||
Guido van Rossum4c08d552000-03-10 22:55:18 +0000255 pb->bf_getcharbuffer == NULL ||
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000256 pb->bf_getsegcount == NULL) {
Guido van Rossum4c08d552000-03-10 22:55:18 +0000257 PyErr_SetString(PyExc_TypeError,
258 "expected a character buffer object");
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000259 return -1;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000260 }
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000261 if ((*pb->bf_getsegcount)(obj,NULL) != 1) {
Guido van Rossum4c08d552000-03-10 22:55:18 +0000262 PyErr_SetString(PyExc_TypeError,
263 "expected a single-segment buffer object");
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000264 return -1;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000265 }
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000266 len = (*pb->bf_getcharbuffer)(obj, 0, &pp);
Guido van Rossum4c08d552000-03-10 22:55:18 +0000267 if (len < 0)
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000268 return -1;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000269 *buffer = pp;
270 *buffer_len = len;
271 return 0;
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000272}
Guido van Rossum4c08d552000-03-10 22:55:18 +0000273
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000274int
275PyObject_CheckReadBuffer(PyObject *obj)
276{
277 PyBufferProcs *pb = obj->ob_type->tp_as_buffer;
278
279 if (pb == NULL ||
280 pb->bf_getreadbuffer == NULL ||
281 pb->bf_getsegcount == NULL ||
282 (*pb->bf_getsegcount)(obj, NULL) != 1)
283 return 0;
284 return 1;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000285}
286
287int PyObject_AsReadBuffer(PyObject *obj,
288 const void **buffer,
Martin v. Löwis18e16552006-02-15 17:27:45 +0000289 Py_ssize_t *buffer_len)
Guido van Rossum4c08d552000-03-10 22:55:18 +0000290{
291 PyBufferProcs *pb;
292 void *pp;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000293 Py_ssize_t len;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000294
295 if (obj == NULL || buffer == NULL || buffer_len == NULL) {
296 null_error();
297 return -1;
298 }
299 pb = obj->ob_type->tp_as_buffer;
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000300 if (pb == NULL ||
Guido van Rossum4c08d552000-03-10 22:55:18 +0000301 pb->bf_getreadbuffer == NULL ||
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000302 pb->bf_getsegcount == NULL) {
Guido van Rossum4c08d552000-03-10 22:55:18 +0000303 PyErr_SetString(PyExc_TypeError,
304 "expected a readable buffer object");
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000305 return -1;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000306 }
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000307 if ((*pb->bf_getsegcount)(obj, NULL) != 1) {
Guido van Rossum4c08d552000-03-10 22:55:18 +0000308 PyErr_SetString(PyExc_TypeError,
309 "expected a single-segment buffer object");
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000310 return -1;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000311 }
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000312 len = (*pb->bf_getreadbuffer)(obj, 0, &pp);
Guido van Rossum4c08d552000-03-10 22:55:18 +0000313 if (len < 0)
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000314 return -1;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000315 *buffer = pp;
316 *buffer_len = len;
317 return 0;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000318}
319
320int PyObject_AsWriteBuffer(PyObject *obj,
321 void **buffer,
Martin v. Löwis18e16552006-02-15 17:27:45 +0000322 Py_ssize_t *buffer_len)
Guido van Rossum4c08d552000-03-10 22:55:18 +0000323{
324 PyBufferProcs *pb;
325 void*pp;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000326 Py_ssize_t len;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000327
328 if (obj == NULL || buffer == NULL || buffer_len == NULL) {
329 null_error();
330 return -1;
331 }
332 pb = obj->ob_type->tp_as_buffer;
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000333 if (pb == NULL ||
Guido van Rossum4c08d552000-03-10 22:55:18 +0000334 pb->bf_getwritebuffer == NULL ||
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000335 pb->bf_getsegcount == NULL) {
Guido van Rossum4c08d552000-03-10 22:55:18 +0000336 PyErr_SetString(PyExc_TypeError,
337 "expected a writeable buffer object");
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000338 return -1;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000339 }
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000340 if ((*pb->bf_getsegcount)(obj, NULL) != 1) {
Guido van Rossum4c08d552000-03-10 22:55:18 +0000341 PyErr_SetString(PyExc_TypeError,
342 "expected a single-segment buffer object");
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000343 return -1;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000344 }
345 len = (*pb->bf_getwritebuffer)(obj,0,&pp);
346 if (len < 0)
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000347 return -1;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000348 *buffer = pp;
349 *buffer_len = len;
350 return 0;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000351}
352
Travis E. Oliphant3781aef2008-03-18 04:44:57 +0000353/* Buffer C-API for Python 3.0 */
354
355int
356PyObject_GetBuffer(PyObject *obj, Py_buffer *view, int flags)
357{
358 if (!PyObject_CheckBuffer(obj)) {
359 PyErr_Format(PyExc_TypeError,
360 "'%100s' does not have the buffer interface",
361 Py_TYPE(obj)->tp_name);
362 return -1;
363 }
364 return (*(obj->ob_type->tp_as_buffer->bf_getbuffer))(obj, view, flags);
365}
366
Travis E. Oliphant3781aef2008-03-18 04:44:57 +0000367static int
368_IsFortranContiguous(Py_buffer *view)
369{
370 Py_ssize_t sd, dim;
371 int i;
372
373 if (view->ndim == 0) return 1;
374 if (view->strides == NULL) return (view->ndim == 1);
375
376 sd = view->itemsize;
377 if (view->ndim == 1) return (view->shape[0] == 1 ||
378 sd == view->strides[0]);
379 for (i=0; i<view->ndim; i++) {
380 dim = view->shape[i];
381 if (dim == 0) return 1;
382 if (view->strides[i] != sd) return 0;
383 sd *= dim;
384 }
385 return 1;
386}
387
388static int
389_IsCContiguous(Py_buffer *view)
390{
391 Py_ssize_t sd, dim;
392 int i;
393
394 if (view->ndim == 0) return 1;
395 if (view->strides == NULL) return 1;
396
397 sd = view->itemsize;
398 if (view->ndim == 1) return (view->shape[0] == 1 ||
399 sd == view->strides[0]);
400 for (i=view->ndim-1; i>=0; i--) {
401 dim = view->shape[i];
402 if (dim == 0) return 1;
403 if (view->strides[i] != sd) return 0;
404 sd *= dim;
405 }
406 return 1;
407}
408
409int
410PyBuffer_IsContiguous(Py_buffer *view, char fort)
411{
412
413 if (view->suboffsets != NULL) return 0;
414
415 if (fort == 'C')
416 return _IsCContiguous(view);
417 else if (fort == 'F')
418 return _IsFortranContiguous(view);
419 else if (fort == 'A')
420 return (_IsCContiguous(view) || _IsFortranContiguous(view));
421 return 0;
422}
423
424
425void*
426PyBuffer_GetPointer(Py_buffer *view, Py_ssize_t *indices)
427{
428 char* pointer;
429 int i;
430 pointer = (char *)view->buf;
431 for (i = 0; i < view->ndim; i++) {
432 pointer += view->strides[i]*indices[i];
433 if ((view->suboffsets != NULL) && (view->suboffsets[i] >= 0)) {
434 pointer = *((char**)pointer) + view->suboffsets[i];
435 }
436 }
437 return (void*)pointer;
438}
439
440
Antoine Pitrou789be0c2009-04-02 21:18:34 +0000441void
Travis E. Oliphant3781aef2008-03-18 04:44:57 +0000442_add_one_to_index_F(int nd, Py_ssize_t *index, Py_ssize_t *shape)
443{
444 int k;
445
446 for (k=0; k<nd; k++) {
447 if (index[k] < shape[k]-1) {
448 index[k]++;
449 break;
450 }
451 else {
452 index[k] = 0;
453 }
454 }
455}
456
Antoine Pitrou789be0c2009-04-02 21:18:34 +0000457void
Travis E. Oliphant3781aef2008-03-18 04:44:57 +0000458_add_one_to_index_C(int nd, Py_ssize_t *index, Py_ssize_t *shape)
459{
460 int k;
461
462 for (k=nd-1; k>=0; k--) {
463 if (index[k] < shape[k]-1) {
464 index[k]++;
465 break;
466 }
467 else {
468 index[k] = 0;
469 }
470 }
471}
472
473 /* view is not checked for consistency in either of these. It is
474 assumed that the size of the buffer is view->len in
475 view->len / view->itemsize elements.
476 */
477
478int
479PyBuffer_ToContiguous(void *buf, Py_buffer *view, Py_ssize_t len, char fort)
480{
481 int k;
482 void (*addone)(int, Py_ssize_t *, Py_ssize_t *);
483 Py_ssize_t *indices, elements;
484 char *dest, *ptr;
485
486 if (len > view->len) {
487 len = view->len;
488 }
489
490 if (PyBuffer_IsContiguous(view, fort)) {
491 /* simplest copy is all that is needed */
492 memcpy(buf, view->buf, len);
493 return 0;
494 }
495
496 /* Otherwise a more elaborate scheme is needed */
497
498 /* XXX(nnorwitz): need to check for overflow! */
499 indices = (Py_ssize_t *)PyMem_Malloc(sizeof(Py_ssize_t)*(view->ndim));
500 if (indices == NULL) {
501 PyErr_NoMemory();
502 return -1;
503 }
504 for (k=0; k<view->ndim;k++) {
505 indices[k] = 0;
506 }
507
508 if (fort == 'F') {
509 addone = _add_one_to_index_F;
510 }
511 else {
512 addone = _add_one_to_index_C;
513 }
514 dest = buf;
515 /* XXX : This is not going to be the fastest code in the world
516 several optimizations are possible.
517 */
518 elements = len / view->itemsize;
519 while (elements--) {
520 addone(view->ndim, indices, view->shape);
521 ptr = PyBuffer_GetPointer(view, indices);
522 memcpy(dest, ptr, view->itemsize);
523 dest += view->itemsize;
524 }
525 PyMem_Free(indices);
526 return 0;
527}
528
529int
530PyBuffer_FromContiguous(Py_buffer *view, void *buf, Py_ssize_t len, char fort)
531{
532 int k;
533 void (*addone)(int, Py_ssize_t *, Py_ssize_t *);
534 Py_ssize_t *indices, elements;
535 char *src, *ptr;
536
537 if (len > view->len) {
538 len = view->len;
539 }
540
541 if (PyBuffer_IsContiguous(view, fort)) {
542 /* simplest copy is all that is needed */
543 memcpy(view->buf, buf, len);
544 return 0;
545 }
546
547 /* Otherwise a more elaborate scheme is needed */
548
549 /* XXX(nnorwitz): need to check for overflow! */
550 indices = (Py_ssize_t *)PyMem_Malloc(sizeof(Py_ssize_t)*(view->ndim));
551 if (indices == NULL) {
552 PyErr_NoMemory();
553 return -1;
554 }
555 for (k=0; k<view->ndim;k++) {
556 indices[k] = 0;
557 }
558
559 if (fort == 'F') {
560 addone = _add_one_to_index_F;
561 }
562 else {
563 addone = _add_one_to_index_C;
564 }
565 src = buf;
566 /* XXX : This is not going to be the fastest code in the world
567 several optimizations are possible.
568 */
569 elements = len / view->itemsize;
570 while (elements--) {
571 addone(view->ndim, indices, view->shape);
572 ptr = PyBuffer_GetPointer(view, indices);
573 memcpy(ptr, src, view->itemsize);
574 src += view->itemsize;
575 }
576
577 PyMem_Free(indices);
578 return 0;
579}
580
581int PyObject_CopyData(PyObject *dest, PyObject *src)
582{
583 Py_buffer view_dest, view_src;
584 int k;
585 Py_ssize_t *indices, elements;
586 char *dptr, *sptr;
587
588 if (!PyObject_CheckBuffer(dest) ||
589 !PyObject_CheckBuffer(src)) {
590 PyErr_SetString(PyExc_TypeError,
591 "both destination and source must have the "\
592 "buffer interface");
593 return -1;
594 }
595
596 if (PyObject_GetBuffer(dest, &view_dest, PyBUF_FULL) != 0) return -1;
597 if (PyObject_GetBuffer(src, &view_src, PyBUF_FULL_RO) != 0) {
Martin v. Löwisf91d46a2008-08-12 14:49:50 +0000598 PyBuffer_Release(&view_dest);
Travis E. Oliphant3781aef2008-03-18 04:44:57 +0000599 return -1;
600 }
601
602 if (view_dest.len < view_src.len) {
603 PyErr_SetString(PyExc_BufferError,
604 "destination is too small to receive data from source");
Martin v. Löwisf91d46a2008-08-12 14:49:50 +0000605 PyBuffer_Release(&view_dest);
606 PyBuffer_Release(&view_src);
Travis E. Oliphant3781aef2008-03-18 04:44:57 +0000607 return -1;
608 }
609
610 if ((PyBuffer_IsContiguous(&view_dest, 'C') &&
611 PyBuffer_IsContiguous(&view_src, 'C')) ||
612 (PyBuffer_IsContiguous(&view_dest, 'F') &&
613 PyBuffer_IsContiguous(&view_src, 'F'))) {
614 /* simplest copy is all that is needed */
615 memcpy(view_dest.buf, view_src.buf, view_src.len);
Martin v. Löwisf91d46a2008-08-12 14:49:50 +0000616 PyBuffer_Release(&view_dest);
617 PyBuffer_Release(&view_src);
Travis E. Oliphant3781aef2008-03-18 04:44:57 +0000618 return 0;
619 }
620
621 /* Otherwise a more elaborate copy scheme is needed */
622
623 /* XXX(nnorwitz): need to check for overflow! */
624 indices = (Py_ssize_t *)PyMem_Malloc(sizeof(Py_ssize_t)*view_src.ndim);
625 if (indices == NULL) {
626 PyErr_NoMemory();
Martin v. Löwisf91d46a2008-08-12 14:49:50 +0000627 PyBuffer_Release(&view_dest);
628 PyBuffer_Release(&view_src);
Travis E. Oliphant3781aef2008-03-18 04:44:57 +0000629 return -1;
630 }
631 for (k=0; k<view_src.ndim;k++) {
632 indices[k] = 0;
633 }
634 elements = 1;
635 for (k=0; k<view_src.ndim; k++) {
636 /* XXX(nnorwitz): can this overflow? */
637 elements *= view_src.shape[k];
638 }
639 while (elements--) {
640 _add_one_to_index_C(view_src.ndim, indices, view_src.shape);
641 dptr = PyBuffer_GetPointer(&view_dest, indices);
642 sptr = PyBuffer_GetPointer(&view_src, indices);
643 memcpy(dptr, sptr, view_src.itemsize);
644 }
645 PyMem_Free(indices);
Martin v. Löwisf91d46a2008-08-12 14:49:50 +0000646 PyBuffer_Release(&view_dest);
647 PyBuffer_Release(&view_src);
Travis E. Oliphant3781aef2008-03-18 04:44:57 +0000648 return 0;
649}
650
651void
652PyBuffer_FillContiguousStrides(int nd, Py_ssize_t *shape,
653 Py_ssize_t *strides, int itemsize,
654 char fort)
655{
656 int k;
657 Py_ssize_t sd;
658
659 sd = itemsize;
660 if (fort == 'F') {
661 for (k=0; k<nd; k++) {
662 strides[k] = sd;
663 sd *= shape[k];
664 }
665 }
666 else {
667 for (k=nd-1; k>=0; k--) {
668 strides[k] = sd;
669 sd *= shape[k];
670 }
671 }
672 return;
673}
674
675int
Martin v. Löwisf91d46a2008-08-12 14:49:50 +0000676PyBuffer_FillInfo(Py_buffer *view, PyObject *obj, void *buf, Py_ssize_t len,
Travis E. Oliphant3781aef2008-03-18 04:44:57 +0000677 int readonly, int flags)
678{
679 if (view == NULL) return 0;
Travis E. Oliphant3781aef2008-03-18 04:44:57 +0000680 if (((flags & PyBUF_WRITABLE) == PyBUF_WRITABLE) &&
681 (readonly == 1)) {
682 PyErr_SetString(PyExc_BufferError,
683 "Object is not writable.");
684 return -1;
685 }
686
Martin v. Löwisf91d46a2008-08-12 14:49:50 +0000687 view->obj = obj;
Martin v. Löwis241b8342008-08-14 15:54:27 +0000688 if (obj)
689 Py_INCREF(obj);
Travis E. Oliphant3781aef2008-03-18 04:44:57 +0000690 view->buf = buf;
691 view->len = len;
692 view->readonly = readonly;
693 view->itemsize = 1;
694 view->format = NULL;
695 if ((flags & PyBUF_FORMAT) == PyBUF_FORMAT)
696 view->format = "B";
697 view->ndim = 1;
698 view->shape = NULL;
699 if ((flags & PyBUF_ND) == PyBUF_ND)
700 view->shape = &(view->len);
701 view->strides = NULL;
702 if ((flags & PyBUF_STRIDES) == PyBUF_STRIDES)
703 view->strides = &(view->itemsize);
704 view->suboffsets = NULL;
705 view->internal = NULL;
706 return 0;
707}
708
Martin v. Löwisf91d46a2008-08-12 14:49:50 +0000709void
710PyBuffer_Release(Py_buffer *view)
711{
712 PyObject *obj = view->obj;
Martin v. Löwis64034f92008-08-14 20:12:06 +0000713 if (obj && Py_TYPE(obj)->tp_as_buffer && Py_TYPE(obj)->tp_as_buffer->bf_releasebuffer)
714 Py_TYPE(obj)->tp_as_buffer->bf_releasebuffer(obj, view);
715 Py_XDECREF(obj);
Martin v. Löwis241b8342008-08-14 15:54:27 +0000716 view->obj = NULL;
Martin v. Löwisf91d46a2008-08-12 14:49:50 +0000717}
718
Eric Smitha9f7d622008-02-17 19:46:49 +0000719PyObject *
720PyObject_Format(PyObject* obj, PyObject *format_spec)
721{
722 static PyObject * str__format__ = NULL;
723 PyObject *empty = NULL;
724 PyObject *result = NULL;
Benjamin Peterson78821dd2009-01-25 17:15:10 +0000725#ifdef Py_USING_UNICODE
Eric Smitha9f7d622008-02-17 19:46:49 +0000726 int spec_is_unicode;
727 int result_is_unicode;
Benjamin Peterson78821dd2009-01-25 17:15:10 +0000728#endif
Eric Smitha9f7d622008-02-17 19:46:49 +0000729
730 /* Initialize cached value */
731 if (str__format__ == NULL) {
732 /* Initialize static variable needed by _PyType_Lookup */
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000733 str__format__ = PyString_InternFromString("__format__");
Eric Smitha9f7d622008-02-17 19:46:49 +0000734 if (str__format__ == NULL)
735 goto done;
736 }
737
738 /* If no format_spec is provided, use an empty string */
739 if (format_spec == NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000740 empty = PyString_FromStringAndSize(NULL, 0);
Eric Smitha9f7d622008-02-17 19:46:49 +0000741 format_spec = empty;
742 }
743
744 /* Check the format_spec type, and make sure it's str or unicode */
Hirokazu Yamamoto1e234e82009-01-25 17:46:48 +0000745#ifdef Py_USING_UNICODE
Eric Smitha9f7d622008-02-17 19:46:49 +0000746 if (PyUnicode_Check(format_spec))
747 spec_is_unicode = 1;
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000748 else if (PyString_Check(format_spec))
Eric Smitha9f7d622008-02-17 19:46:49 +0000749 spec_is_unicode = 0;
750 else {
Benjamin Peterson78821dd2009-01-25 17:15:10 +0000751#else
752 if (!PyString_Check(format_spec)) {
753#endif
Eric Smitha9f7d622008-02-17 19:46:49 +0000754 PyErr_Format(PyExc_TypeError,
755 "format expects arg 2 to be string "
756 "or unicode, not %.100s", Py_TYPE(format_spec)->tp_name);
757 goto done;
758 }
759
760 /* Make sure the type is initialized. float gets initialized late */
761 if (Py_TYPE(obj)->tp_dict == NULL)
762 if (PyType_Ready(Py_TYPE(obj)) < 0)
763 goto done;
764
765 /* Check for a __format__ method and call it. */
766 if (PyInstance_Check(obj)) {
767 /* We're an instance of a classic class */
768 PyObject *bound_method = PyObject_GetAttr(obj,
769 str__format__);
770 if (bound_method != NULL) {
771 result = PyObject_CallFunctionObjArgs(bound_method,
772 format_spec,
773 NULL);
774 Py_DECREF(bound_method);
775 } else {
776 PyObject *self_as_str;
777 PyObject *format_method;
778
779 PyErr_Clear();
780 /* Per the PEP, convert to str (or unicode,
781 depending on the type of the format
782 specifier). For new-style classes, this
783 logic is done by object.__format__(). */
Benjamin Peterson78821dd2009-01-25 17:15:10 +0000784#ifdef Py_USING_UNICODE
Eric Smitha9f7d622008-02-17 19:46:49 +0000785 if (spec_is_unicode)
786 self_as_str = PyObject_Unicode(obj);
787 else
Benjamin Peterson78821dd2009-01-25 17:15:10 +0000788#endif
Eric Smitha9f7d622008-02-17 19:46:49 +0000789 self_as_str = PyObject_Str(obj);
790 if (self_as_str == NULL)
791 goto done;
792
793 /* Then call str.__format__ on that result */
794 format_method = PyObject_GetAttr(self_as_str,
795 str__format__);
796 if (format_method == NULL) {
797 Py_DECREF(self_as_str);
798 goto done;
799 }
800 result = PyObject_CallFunctionObjArgs(format_method,
801 format_spec,
802 NULL);
803 Py_DECREF(self_as_str);
804 Py_DECREF(format_method);
805 if (result == NULL)
806 goto done;
807 }
808 } else {
809 /* Not an instance of a classic class, use the code
810 from py3k */
811
812 /* Find the (unbound!) __format__ method (a borrowed
813 reference) */
814 PyObject *method = _PyType_Lookup(Py_TYPE(obj),
815 str__format__);
816 if (method == NULL) {
817 PyErr_Format(PyExc_TypeError,
818 "Type %.100s doesn't define __format__",
819 Py_TYPE(obj)->tp_name);
820 goto done;
821 }
822 /* And call it, binding it to the value */
823 result = PyObject_CallFunctionObjArgs(method, obj,
824 format_spec, NULL);
825 }
826
827 if (result == NULL)
828 goto done;
829
830 /* Check the result type, and make sure it's str or unicode */
Benjamin Peterson78821dd2009-01-25 17:15:10 +0000831#ifdef Py_USING_UNICODE
Eric Smitha9f7d622008-02-17 19:46:49 +0000832 if (PyUnicode_Check(result))
833 result_is_unicode = 1;
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000834 else if (PyString_Check(result))
Eric Smitha9f7d622008-02-17 19:46:49 +0000835 result_is_unicode = 0;
836 else {
Benjamin Peterson78821dd2009-01-25 17:15:10 +0000837#else
838 if (!PyString_Check(result)) {
839#endif
Eric Smitha9f7d622008-02-17 19:46:49 +0000840 PyErr_Format(PyExc_TypeError,
841 "%.100s.__format__ must return string or "
842 "unicode, not %.100s", Py_TYPE(obj)->tp_name,
843 Py_TYPE(result)->tp_name);
844 Py_DECREF(result);
845 result = NULL;
846 goto done;
847 }
848
849 /* Convert to unicode, if needed. Required if spec is unicode
850 and result is str */
Benjamin Peterson78821dd2009-01-25 17:15:10 +0000851#ifdef Py_USING_UNICODE
Eric Smitha9f7d622008-02-17 19:46:49 +0000852 if (spec_is_unicode && !result_is_unicode) {
853 PyObject *tmp = PyObject_Unicode(result);
854 /* This logic works whether or not tmp is NULL */
855 Py_DECREF(result);
856 result = tmp;
857 }
Benjamin Peterson78821dd2009-01-25 17:15:10 +0000858#endif
Eric Smitha9f7d622008-02-17 19:46:49 +0000859
860done:
861 Py_XDECREF(empty);
862 return result;
863}
864
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000865/* Operations on numbers */
866
867int
Fred Drake79912472000-07-09 04:06:11 +0000868PyNumber_Check(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +0000869{
Guido van Rossum6921eca2003-02-18 16:36:28 +0000870 return o && o->ob_type->tp_as_number &&
871 (o->ob_type->tp_as_number->nb_int ||
872 o->ob_type->tp_as_number->nb_float);
Guido van Rossume15dee51995-07-18 14:12:02 +0000873}
874
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000875/* Binary operators */
Guido van Rossume15dee51995-07-18 14:12:02 +0000876
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000877/* New style number protocol support */
Guido van Rossume15dee51995-07-18 14:12:02 +0000878
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000879#define NB_SLOT(x) offsetof(PyNumberMethods, x)
880#define NB_BINOP(nb_methods, slot) \
Neil Schemenauerb808c5c2002-11-24 01:34:49 +0000881 (*(binaryfunc*)(& ((char*)nb_methods)[slot]))
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000882#define NB_TERNOP(nb_methods, slot) \
Neil Schemenauerb808c5c2002-11-24 01:34:49 +0000883 (*(ternaryfunc*)(& ((char*)nb_methods)[slot]))
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000884
885/*
886 Calling scheme used for binary operations:
887
888 v w Action
889 -------------------------------------------------------------------
Guido van Rossum4bb1e362001-09-28 23:49:48 +0000890 new new w.op(v,w)[*], v.op(v,w), w.op(v,w)
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000891 new old v.op(v,w), coerce(v,w), v.op(v,w)
892 old new w.op(v,w), coerce(v,w), v.op(v,w)
893 old old coerce(v,w), v.op(v,w)
894
Guido van Rossum4bb1e362001-09-28 23:49:48 +0000895 [*] only when v->ob_type != w->ob_type && w->ob_type is a subclass of
896 v->ob_type
897
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000898 Legend:
899 -------
900 * new == new style number
901 * old == old style number
902 * Action indicates the order in which operations are tried until either
903 a valid result is produced or an error occurs.
904
905 */
906
907static PyObject *
908binary_op1(PyObject *v, PyObject *w, const int op_slot)
Guido van Rossume15dee51995-07-18 14:12:02 +0000909{
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000910 PyObject *x;
Guido van Rossum4bb1e362001-09-28 23:49:48 +0000911 binaryfunc slotv = NULL;
912 binaryfunc slotw = NULL;
913
914 if (v->ob_type->tp_as_number != NULL && NEW_STYLE_NUMBER(v))
Neil Schemenauerb808c5c2002-11-24 01:34:49 +0000915 slotv = NB_BINOP(v->ob_type->tp_as_number, op_slot);
Guido van Rossum4bb1e362001-09-28 23:49:48 +0000916 if (w->ob_type != v->ob_type &&
917 w->ob_type->tp_as_number != NULL && NEW_STYLE_NUMBER(w)) {
Neil Schemenauerb808c5c2002-11-24 01:34:49 +0000918 slotw = NB_BINOP(w->ob_type->tp_as_number, op_slot);
Guido van Rossum4bb1e362001-09-28 23:49:48 +0000919 if (slotw == slotv)
920 slotw = NULL;
Guido van Rossume15dee51995-07-18 14:12:02 +0000921 }
Guido van Rossum4bb1e362001-09-28 23:49:48 +0000922 if (slotv) {
Guido van Rossum89c42642001-10-01 17:10:18 +0000923 if (slotw && PyType_IsSubtype(w->ob_type, v->ob_type)) {
924 x = slotw(v, w);
925 if (x != Py_NotImplemented)
926 return x;
927 Py_DECREF(x); /* can't do it */
928 slotw = NULL;
929 }
Guido van Rossum4bb1e362001-09-28 23:49:48 +0000930 x = slotv(v, w);
931 if (x != Py_NotImplemented)
932 return x;
933 Py_DECREF(x); /* can't do it */
934 }
935 if (slotw) {
936 x = slotw(v, w);
937 if (x != Py_NotImplemented)
938 return x;
939 Py_DECREF(x); /* can't do it */
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000940 }
941 if (!NEW_STYLE_NUMBER(v) || !NEW_STYLE_NUMBER(w)) {
942 int err = PyNumber_CoerceEx(&v, &w);
943 if (err < 0) {
944 return NULL;
945 }
946 if (err == 0) {
947 PyNumberMethods *mv = v->ob_type->tp_as_number;
948 if (mv) {
Guido van Rossum4bb1e362001-09-28 23:49:48 +0000949 binaryfunc slot;
Neil Schemenauerb808c5c2002-11-24 01:34:49 +0000950 slot = NB_BINOP(mv, op_slot);
Guido van Rossum4bb1e362001-09-28 23:49:48 +0000951 if (slot) {
Neal Norwitz0c6e2f12006-01-08 06:13:44 +0000952 x = slot(v, w);
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000953 Py_DECREF(v);
954 Py_DECREF(w);
955 return x;
956 }
957 }
958 /* CoerceEx incremented the reference counts */
959 Py_DECREF(v);
960 Py_DECREF(w);
961 }
962 }
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000963 Py_INCREF(Py_NotImplemented);
964 return Py_NotImplemented;
965}
Guido van Rossum77660912002-04-16 16:32:50 +0000966
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000967static PyObject *
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +0000968binop_type_error(PyObject *v, PyObject *w, const char *op_name)
969{
970 PyErr_Format(PyExc_TypeError,
Georg Brandlccff7852006-06-18 22:17:29 +0000971 "unsupported operand type(s) for %.100s: "
972 "'%.100s' and '%.100s'",
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +0000973 op_name,
974 v->ob_type->tp_name,
975 w->ob_type->tp_name);
976 return NULL;
977}
978
979static PyObject *
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000980binary_op(PyObject *v, PyObject *w, const int op_slot, const char *op_name)
981{
982 PyObject *result = binary_op1(v, w, op_slot);
983 if (result == Py_NotImplemented) {
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +0000984 Py_DECREF(result);
985 return binop_type_error(v, w, op_name);
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000986 }
987 return result;
Guido van Rossume15dee51995-07-18 14:12:02 +0000988}
989
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000990
991/*
992 Calling scheme used for ternary operations:
993
Guido van Rossum84675ac2001-09-29 01:05:03 +0000994 *** In some cases, w.op is called before v.op; see binary_op1. ***
995
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000996 v w z Action
997 -------------------------------------------------------------------
998 new new new v.op(v,w,z), w.op(v,w,z), z.op(v,w,z)
999 new old new v.op(v,w,z), z.op(v,w,z), coerce(v,w,z), v.op(v,w,z)
1000 old new new w.op(v,w,z), z.op(v,w,z), coerce(v,w,z), v.op(v,w,z)
1001 old old new z.op(v,w,z), coerce(v,w,z), v.op(v,w,z)
1002 new new old v.op(v,w,z), w.op(v,w,z), coerce(v,w,z), v.op(v,w,z)
1003 new old old v.op(v,w,z), coerce(v,w,z), v.op(v,w,z)
1004 old new old w.op(v,w,z), coerce(v,w,z), v.op(v,w,z)
1005 old old old coerce(v,w,z), v.op(v,w,z)
1006
1007 Legend:
1008 -------
1009 * new == new style number
1010 * old == old style number
1011 * Action indicates the order in which operations are tried until either
1012 a valid result is produced or an error occurs.
1013 * coerce(v,w,z) actually does: coerce(v,w), coerce(v,z), coerce(w,z) and
1014 only if z != Py_None; if z == Py_None, then it is treated as absent
1015 variable and only coerce(v,w) is tried.
1016
1017 */
1018
1019static PyObject *
1020ternary_op(PyObject *v,
1021 PyObject *w,
1022 PyObject *z,
1023 const int op_slot,
1024 const char *op_name)
Guido van Rossume15dee51995-07-18 14:12:02 +00001025{
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001026 PyNumberMethods *mv, *mw, *mz;
Guido van Rossum84675ac2001-09-29 01:05:03 +00001027 PyObject *x = NULL;
1028 ternaryfunc slotv = NULL;
1029 ternaryfunc slotw = NULL;
1030 ternaryfunc slotz = NULL;
Guido van Rossum77660912002-04-16 16:32:50 +00001031
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001032 mv = v->ob_type->tp_as_number;
Guido van Rossum4bb1e362001-09-28 23:49:48 +00001033 mw = w->ob_type->tp_as_number;
Guido van Rossum84675ac2001-09-29 01:05:03 +00001034 if (mv != NULL && NEW_STYLE_NUMBER(v))
Neil Schemenauerb808c5c2002-11-24 01:34:49 +00001035 slotv = NB_TERNOP(mv, op_slot);
Guido van Rossum84675ac2001-09-29 01:05:03 +00001036 if (w->ob_type != v->ob_type &&
Raymond Hettingerc2e095f2002-12-07 10:05:27 +00001037 mw != NULL && NEW_STYLE_NUMBER(w)) {
Neil Schemenauerb808c5c2002-11-24 01:34:49 +00001038 slotw = NB_TERNOP(mw, op_slot);
Guido van Rossum84675ac2001-09-29 01:05:03 +00001039 if (slotw == slotv)
1040 slotw = NULL;
Guido van Rossum4bb1e362001-09-28 23:49:48 +00001041 }
Guido van Rossum84675ac2001-09-29 01:05:03 +00001042 if (slotv) {
Guido van Rossum89c42642001-10-01 17:10:18 +00001043 if (slotw && PyType_IsSubtype(w->ob_type, v->ob_type)) {
1044 x = slotw(v, w, z);
1045 if (x != Py_NotImplemented)
1046 return x;
1047 Py_DECREF(x); /* can't do it */
1048 slotw = NULL;
1049 }
Guido van Rossum84675ac2001-09-29 01:05:03 +00001050 x = slotv(v, w, z);
1051 if (x != Py_NotImplemented)
1052 return x;
1053 Py_DECREF(x); /* can't do it */
1054 }
1055 if (slotw) {
1056 x = slotw(v, w, z);
1057 if (x != Py_NotImplemented)
1058 return x;
1059 Py_DECREF(x); /* can't do it */
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001060 }
1061 mz = z->ob_type->tp_as_number;
1062 if (mz != NULL && NEW_STYLE_NUMBER(z)) {
Neil Schemenauerb808c5c2002-11-24 01:34:49 +00001063 slotz = NB_TERNOP(mz, op_slot);
Guido van Rossum84675ac2001-09-29 01:05:03 +00001064 if (slotz == slotv || slotz == slotw)
1065 slotz = NULL;
1066 if (slotz) {
1067 x = slotz(v, w, z);
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001068 if (x != Py_NotImplemented)
1069 return x;
Guido van Rossum84675ac2001-09-29 01:05:03 +00001070 Py_DECREF(x); /* can't do it */
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001071 }
1072 }
1073
1074 if (!NEW_STYLE_NUMBER(v) || !NEW_STYLE_NUMBER(w) ||
1075 (z != Py_None && !NEW_STYLE_NUMBER(z))) {
1076 /* we have an old style operand, coerce */
1077 PyObject *v1, *z1, *w2, *z2;
1078 int c;
Guido van Rossum77660912002-04-16 16:32:50 +00001079
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001080 c = PyNumber_Coerce(&v, &w);
1081 if (c != 0)
1082 goto error3;
1083
1084 /* Special case: if the third argument is None, it is
1085 treated as absent argument and not coerced. */
1086 if (z == Py_None) {
1087 if (v->ob_type->tp_as_number) {
Neil Schemenauerb808c5c2002-11-24 01:34:49 +00001088 slotz = NB_TERNOP(v->ob_type->tp_as_number,
1089 op_slot);
Guido van Rossum84675ac2001-09-29 01:05:03 +00001090 if (slotz)
1091 x = slotz(v, w, z);
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001092 else
1093 c = -1;
1094 }
1095 else
1096 c = -1;
1097 goto error2;
1098 }
1099 v1 = v;
1100 z1 = z;
1101 c = PyNumber_Coerce(&v1, &z1);
1102 if (c != 0)
1103 goto error2;
1104 w2 = w;
1105 z2 = z1;
1106 c = PyNumber_Coerce(&w2, &z2);
1107 if (c != 0)
1108 goto error1;
1109
1110 if (v1->ob_type->tp_as_number != NULL) {
Neil Schemenauerb808c5c2002-11-24 01:34:49 +00001111 slotv = NB_TERNOP(v1->ob_type->tp_as_number,
1112 op_slot);
Guido van Rossum84675ac2001-09-29 01:05:03 +00001113 if (slotv)
1114 x = slotv(v1, w2, z2);
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001115 else
1116 c = -1;
1117 }
1118 else
1119 c = -1;
1120
1121 Py_DECREF(w2);
1122 Py_DECREF(z2);
1123 error1:
1124 Py_DECREF(v1);
1125 Py_DECREF(z1);
1126 error2:
Guido van Rossume15dee51995-07-18 14:12:02 +00001127 Py_DECREF(v);
1128 Py_DECREF(w);
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001129 error3:
1130 if (c >= 0)
Guido van Rossume15dee51995-07-18 14:12:02 +00001131 return x;
1132 }
Guido van Rossum5c66a262001-10-22 04:12:44 +00001133
1134 if (z == Py_None)
1135 PyErr_Format(
1136 PyExc_TypeError,
1137 "unsupported operand type(s) for ** or pow(): "
Georg Brandlccff7852006-06-18 22:17:29 +00001138 "'%.100s' and '%.100s'",
Guido van Rossum5c66a262001-10-22 04:12:44 +00001139 v->ob_type->tp_name,
1140 w->ob_type->tp_name);
1141 else
1142 PyErr_Format(
1143 PyExc_TypeError,
1144 "unsupported operand type(s) for pow(): "
Georg Brandlccff7852006-06-18 22:17:29 +00001145 "'%.100s', '%.100s', '%.100s'",
Guido van Rossum5c66a262001-10-22 04:12:44 +00001146 v->ob_type->tp_name,
1147 w->ob_type->tp_name,
1148 z->ob_type->tp_name);
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001149 return NULL;
Guido van Rossume15dee51995-07-18 14:12:02 +00001150}
1151
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001152#define BINARY_FUNC(func, op, op_name) \
1153 PyObject * \
1154 func(PyObject *v, PyObject *w) { \
1155 return binary_op(v, w, NB_SLOT(op), op_name); \
1156 }
Guido van Rossume15dee51995-07-18 14:12:02 +00001157
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001158BINARY_FUNC(PyNumber_Or, nb_or, "|")
1159BINARY_FUNC(PyNumber_Xor, nb_xor, "^")
1160BINARY_FUNC(PyNumber_And, nb_and, "&")
1161BINARY_FUNC(PyNumber_Lshift, nb_lshift, "<<")
1162BINARY_FUNC(PyNumber_Rshift, nb_rshift, ">>")
1163BINARY_FUNC(PyNumber_Subtract, nb_subtract, "-")
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001164BINARY_FUNC(PyNumber_Divide, nb_divide, "/")
1165BINARY_FUNC(PyNumber_Divmod, nb_divmod, "divmod()")
Guido van Rossume15dee51995-07-18 14:12:02 +00001166
1167PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001168PyNumber_Add(PyObject *v, PyObject *w)
Guido van Rossume15dee51995-07-18 14:12:02 +00001169{
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001170 PyObject *result = binary_op1(v, w, NB_SLOT(nb_add));
1171 if (result == Py_NotImplemented) {
1172 PySequenceMethods *m = v->ob_type->tp_as_sequence;
Armin Rigofd163f92005-12-29 15:59:19 +00001173 Py_DECREF(result);
Jeremy Hylton0522d982002-03-08 21:28:54 +00001174 if (m && m->sq_concat) {
Armin Rigofd163f92005-12-29 15:59:19 +00001175 return (*m->sq_concat)(v, w);
Jeremy Hylton0522d982002-03-08 21:28:54 +00001176 }
Armin Rigofd163f92005-12-29 15:59:19 +00001177 result = binop_type_error(v, w, "+");
Guido van Rossume15dee51995-07-18 14:12:02 +00001178 }
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001179 return result;
Guido van Rossume15dee51995-07-18 14:12:02 +00001180}
1181
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001182static PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00001183sequence_repeat(ssizeargfunc repeatfunc, PyObject *seq, PyObject *n)
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001184{
Guido van Rossum38fff8c2006-03-07 18:50:55 +00001185 Py_ssize_t count;
Neal Norwitz8a87f5d2006-08-12 17:03:09 +00001186 if (PyIndex_Check(n)) {
1187 count = PyNumber_AsSsize_t(n, PyExc_OverflowError);
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001188 if (count == -1 && PyErr_Occurred())
1189 return NULL;
1190 }
1191 else {
Georg Brandlccff7852006-06-18 22:17:29 +00001192 return type_error("can't multiply sequence by "
1193 "non-int of type '%.200s'", n);
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001194 }
Guido van Rossum38fff8c2006-03-07 18:50:55 +00001195 return (*repeatfunc)(seq, count);
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001196}
1197
1198PyObject *
1199PyNumber_Multiply(PyObject *v, PyObject *w)
1200{
1201 PyObject *result = binary_op1(v, w, NB_SLOT(nb_multiply));
1202 if (result == Py_NotImplemented) {
1203 PySequenceMethods *mv = v->ob_type->tp_as_sequence;
1204 PySequenceMethods *mw = w->ob_type->tp_as_sequence;
Guido van Rossuma3a243e2002-12-31 19:50:03 +00001205 Py_DECREF(result);
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001206 if (mv && mv->sq_repeat) {
1207 return sequence_repeat(mv->sq_repeat, v, w);
1208 }
1209 else if (mw && mw->sq_repeat) {
1210 return sequence_repeat(mw->sq_repeat, w, v);
1211 }
1212 result = binop_type_error(v, w, "*");
1213 }
1214 return result;
1215}
1216
Guido van Rossume15dee51995-07-18 14:12:02 +00001217PyObject *
Guido van Rossum4668b002001-08-08 05:00:18 +00001218PyNumber_FloorDivide(PyObject *v, PyObject *w)
1219{
1220 /* XXX tp_flags test */
1221 return binary_op(v, w, NB_SLOT(nb_floor_divide), "//");
1222}
1223
1224PyObject *
1225PyNumber_TrueDivide(PyObject *v, PyObject *w)
1226{
1227 /* XXX tp_flags test */
1228 return binary_op(v, w, NB_SLOT(nb_true_divide), "/");
1229}
1230
1231PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001232PyNumber_Remainder(PyObject *v, PyObject *w)
Guido van Rossume15dee51995-07-18 14:12:02 +00001233{
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001234 return binary_op(v, w, NB_SLOT(nb_remainder), "%");
Guido van Rossume15dee51995-07-18 14:12:02 +00001235}
1236
1237PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001238PyNumber_Power(PyObject *v, PyObject *w, PyObject *z)
Guido van Rossume15dee51995-07-18 14:12:02 +00001239{
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001240 return ternary_op(v, w, z, NB_SLOT(nb_power), "** or pow()");
Guido van Rossume15dee51995-07-18 14:12:02 +00001241}
1242
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001243/* Binary in-place operators */
1244
1245/* The in-place operators are defined to fall back to the 'normal',
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001246 non in-place operations, if the in-place methods are not in place.
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001247
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001248 - If the left hand object has the appropriate struct members, and
1249 they are filled, call the appropriate function and return the
1250 result. No coercion is done on the arguments; the left-hand object
1251 is the one the operation is performed on, and it's up to the
1252 function to deal with the right-hand object.
Guido van Rossum77660912002-04-16 16:32:50 +00001253
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001254 - Otherwise, in-place modification is not supported. Handle it exactly as
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001255 a non in-place operation of the same kind.
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001256
1257 */
1258
Guido van Rossum77660912002-04-16 16:32:50 +00001259#define HASINPLACE(t) \
1260 PyType_HasFeature((t)->ob_type, Py_TPFLAGS_HAVE_INPLACEOPS)
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001261
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001262static PyObject *
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001263binary_iop1(PyObject *v, PyObject *w, const int iop_slot, const int op_slot)
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001264{
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001265 PyNumberMethods *mv = v->ob_type->tp_as_number;
1266 if (mv != NULL && HASINPLACE(v)) {
Neil Schemenauerb808c5c2002-11-24 01:34:49 +00001267 binaryfunc slot = NB_BINOP(mv, iop_slot);
1268 if (slot) {
1269 PyObject *x = (slot)(v, w);
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001270 if (x != Py_NotImplemented) {
1271 return x;
1272 }
1273 Py_DECREF(x);
1274 }
Thomas Woutersf2b332d2000-09-02 08:34:40 +00001275 }
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001276 return binary_op1(v, w, op_slot);
1277}
1278
1279static PyObject *
1280binary_iop(PyObject *v, PyObject *w, const int iop_slot, const int op_slot,
1281 const char *op_name)
1282{
1283 PyObject *result = binary_iop1(v, w, iop_slot, op_slot);
1284 if (result == Py_NotImplemented) {
1285 Py_DECREF(result);
1286 return binop_type_error(v, w, op_name);
1287 }
1288 return result;
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001289}
1290
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001291#define INPLACE_BINOP(func, iop, op, op_name) \
1292 PyObject * \
1293 func(PyObject *v, PyObject *w) { \
1294 return binary_iop(v, w, NB_SLOT(iop), NB_SLOT(op), op_name); \
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001295 }
1296
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001297INPLACE_BINOP(PyNumber_InPlaceOr, nb_inplace_or, nb_or, "|=")
1298INPLACE_BINOP(PyNumber_InPlaceXor, nb_inplace_xor, nb_xor, "^=")
1299INPLACE_BINOP(PyNumber_InPlaceAnd, nb_inplace_and, nb_and, "&=")
1300INPLACE_BINOP(PyNumber_InPlaceLshift, nb_inplace_lshift, nb_lshift, "<<=")
1301INPLACE_BINOP(PyNumber_InPlaceRshift, nb_inplace_rshift, nb_rshift, ">>=")
1302INPLACE_BINOP(PyNumber_InPlaceSubtract, nb_inplace_subtract, nb_subtract, "-=")
1303INPLACE_BINOP(PyNumber_InPlaceDivide, nb_inplace_divide, nb_divide, "/=")
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001304
1305PyObject *
Guido van Rossum4668b002001-08-08 05:00:18 +00001306PyNumber_InPlaceFloorDivide(PyObject *v, PyObject *w)
1307{
1308 /* XXX tp_flags test */
1309 return binary_iop(v, w, NB_SLOT(nb_inplace_floor_divide),
1310 NB_SLOT(nb_floor_divide), "//=");
1311}
1312
1313PyObject *
1314PyNumber_InPlaceTrueDivide(PyObject *v, PyObject *w)
1315{
1316 /* XXX tp_flags test */
1317 return binary_iop(v, w, NB_SLOT(nb_inplace_true_divide),
1318 NB_SLOT(nb_true_divide), "/=");
1319}
1320
1321PyObject *
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001322PyNumber_InPlaceAdd(PyObject *v, PyObject *w)
1323{
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001324 PyObject *result = binary_iop1(v, w, NB_SLOT(nb_inplace_add),
1325 NB_SLOT(nb_add));
1326 if (result == Py_NotImplemented) {
1327 PySequenceMethods *m = v->ob_type->tp_as_sequence;
1328 Py_DECREF(result);
1329 if (m != NULL) {
1330 binaryfunc f = NULL;
1331 if (HASINPLACE(v))
1332 f = m->sq_inplace_concat;
1333 if (f == NULL)
1334 f = m->sq_concat;
1335 if (f != NULL)
1336 return (*f)(v, w);
1337 }
1338 result = binop_type_error(v, w, "+=");
Guido van Rossumbb8be932000-09-01 23:27:32 +00001339 }
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001340 return result;
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001341}
1342
1343PyObject *
1344PyNumber_InPlaceMultiply(PyObject *v, PyObject *w)
1345{
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001346 PyObject *result = binary_iop1(v, w, NB_SLOT(nb_inplace_multiply),
1347 NB_SLOT(nb_multiply));
1348 if (result == Py_NotImplemented) {
Martin v. Löwis18e16552006-02-15 17:27:45 +00001349 ssizeargfunc f = NULL;
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001350 PySequenceMethods *mv = v->ob_type->tp_as_sequence;
1351 PySequenceMethods *mw = w->ob_type->tp_as_sequence;
1352 Py_DECREF(result);
1353 if (mv != NULL) {
1354 if (HASINPLACE(v))
1355 f = mv->sq_inplace_repeat;
1356 if (f == NULL)
1357 f = mv->sq_repeat;
1358 if (f != NULL)
1359 return sequence_repeat(f, v, w);
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001360 }
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001361 else if (mw != NULL) {
1362 /* Note that the right hand operand should not be
1363 * mutated in this case so sq_inplace_repeat is not
1364 * used. */
1365 if (mw->sq_repeat)
1366 return sequence_repeat(mw->sq_repeat, w, v);
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001367 }
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001368 result = binop_type_error(v, w, "*=");
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001369 }
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001370 return result;
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001371}
1372
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001373PyObject *
1374PyNumber_InPlaceRemainder(PyObject *v, PyObject *w)
1375{
Neil Schemenauerd46fbc32002-11-24 01:07:42 +00001376 return binary_iop(v, w, NB_SLOT(nb_inplace_remainder),
1377 NB_SLOT(nb_remainder), "%=");
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001378}
1379
1380PyObject *
1381PyNumber_InPlacePower(PyObject *v, PyObject *w, PyObject *z)
1382{
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001383 if (HASINPLACE(v) && v->ob_type->tp_as_number &&
1384 v->ob_type->tp_as_number->nb_inplace_power != NULL) {
1385 return ternary_op(v, w, z, NB_SLOT(nb_inplace_power), "**=");
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001386 }
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001387 else {
1388 return ternary_op(v, w, z, NB_SLOT(nb_power), "**=");
1389 }
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001390}
1391
1392
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001393/* Unary operators and functions */
Guido van Rossume15dee51995-07-18 14:12:02 +00001394
1395PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001396PyNumber_Negative(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00001397{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001398 PyNumberMethods *m;
1399
1400 if (o == NULL)
1401 return null_error();
1402 m = o->ob_type->tp_as_number;
1403 if (m && m->nb_negative)
1404 return (*m->nb_negative)(o);
1405
Georg Brandlccff7852006-06-18 22:17:29 +00001406 return type_error("bad operand type for unary -: '%.200s'", o);
Guido van Rossume15dee51995-07-18 14:12:02 +00001407}
1408
1409PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001410PyNumber_Positive(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00001411{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001412 PyNumberMethods *m;
1413
1414 if (o == NULL)
1415 return null_error();
1416 m = o->ob_type->tp_as_number;
1417 if (m && m->nb_positive)
1418 return (*m->nb_positive)(o);
1419
Georg Brandlccff7852006-06-18 22:17:29 +00001420 return type_error("bad operand type for unary +: '%.200s'", o);
Guido van Rossume15dee51995-07-18 14:12:02 +00001421}
1422
1423PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001424PyNumber_Invert(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00001425{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001426 PyNumberMethods *m;
1427
1428 if (o == NULL)
1429 return null_error();
1430 m = o->ob_type->tp_as_number;
1431 if (m && m->nb_invert)
1432 return (*m->nb_invert)(o);
1433
Georg Brandlccff7852006-06-18 22:17:29 +00001434 return type_error("bad operand type for unary ~: '%.200s'", o);
Guido van Rossume15dee51995-07-18 14:12:02 +00001435}
1436
1437PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001438PyNumber_Absolute(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00001439{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001440 PyNumberMethods *m;
Guido van Rossume15dee51995-07-18 14:12:02 +00001441
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001442 if (o == NULL)
1443 return null_error();
1444 m = o->ob_type->tp_as_number;
1445 if (m && m->nb_absolute)
1446 return m->nb_absolute(o);
Guido van Rossume15dee51995-07-18 14:12:02 +00001447
Georg Brandlccff7852006-06-18 22:17:29 +00001448 return type_error("bad operand type for abs(): '%.200s'", o);
Guido van Rossume15dee51995-07-18 14:12:02 +00001449}
1450
Guido van Rossum9e896b32000-04-05 20:11:21 +00001451/* Add a check for embedded NULL-bytes in the argument. */
1452static PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00001453int_from_string(const char *s, Py_ssize_t len)
Guido van Rossum9e896b32000-04-05 20:11:21 +00001454{
1455 char *end;
1456 PyObject *x;
1457
1458 x = PyInt_FromString((char*)s, &end, 10);
1459 if (x == NULL)
1460 return NULL;
1461 if (end != s + len) {
1462 PyErr_SetString(PyExc_ValueError,
1463 "null byte in argument for int()");
1464 Py_DECREF(x);
1465 return NULL;
1466 }
1467 return x;
1468}
1469
Neal Norwitz8a87f5d2006-08-12 17:03:09 +00001470/* Return a Python Int or Long from the object item
1471 Raise TypeError if the result is not an int-or-long
1472 or if the object cannot be interpreted as an index.
1473*/
1474PyObject *
Guido van Rossum38fff8c2006-03-07 18:50:55 +00001475PyNumber_Index(PyObject *item)
1476{
Neal Norwitz8a87f5d2006-08-12 17:03:09 +00001477 PyObject *result = NULL;
1478 if (item == NULL)
1479 return null_error();
Neal Norwitz271a8682006-08-15 06:29:03 +00001480 if (PyInt_Check(item) || PyLong_Check(item)) {
Neal Norwitz8a87f5d2006-08-12 17:03:09 +00001481 Py_INCREF(item);
1482 return item;
1483 }
1484 if (PyIndex_Check(item)) {
1485 result = item->ob_type->tp_as_number->nb_index(item);
Neal Norwitz8a87f5d2006-08-12 17:03:09 +00001486 if (result &&
Neal Norwitz271a8682006-08-15 06:29:03 +00001487 !PyInt_Check(result) && !PyLong_Check(result)) {
Neal Norwitz8a87f5d2006-08-12 17:03:09 +00001488 PyErr_Format(PyExc_TypeError,
1489 "__index__ returned non-(int,long) " \
1490 "(type %.200s)",
1491 result->ob_type->tp_name);
1492 Py_DECREF(result);
1493 return NULL;
1494 }
Guido van Rossum38fff8c2006-03-07 18:50:55 +00001495 }
1496 else {
Armin Rigo314861c2006-03-30 14:04:02 +00001497 PyErr_Format(PyExc_TypeError,
1498 "'%.200s' object cannot be interpreted "
1499 "as an index", item->ob_type->tp_name);
Guido van Rossum38fff8c2006-03-07 18:50:55 +00001500 }
Neal Norwitz8a87f5d2006-08-12 17:03:09 +00001501 return result;
Guido van Rossum38fff8c2006-03-07 18:50:55 +00001502}
1503
Neal Norwitz8a87f5d2006-08-12 17:03:09 +00001504/* Return an error on Overflow only if err is not NULL*/
1505
1506Py_ssize_t
1507PyNumber_AsSsize_t(PyObject *item, PyObject *err)
1508{
1509 Py_ssize_t result;
1510 PyObject *runerr;
1511 PyObject *value = PyNumber_Index(item);
1512 if (value == NULL)
1513 return -1;
1514
1515 /* We're done if PyInt_AsSsize_t() returns without error. */
1516 result = PyInt_AsSsize_t(value);
1517 if (result != -1 || !(runerr = PyErr_Occurred()))
1518 goto finish;
1519
1520 /* Error handling code -- only manage OverflowError differently */
1521 if (!PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError))
1522 goto finish;
1523
1524 PyErr_Clear();
1525 /* If no error-handling desired then the default clipping
1526 is sufficient.
1527 */
1528 if (!err) {
1529 assert(PyLong_Check(value));
1530 /* Whether or not it is less than or equal to
1531 zero is determined by the sign of ob_size
1532 */
1533 if (_PyLong_Sign(value) < 0)
1534 result = PY_SSIZE_T_MIN;
1535 else
1536 result = PY_SSIZE_T_MAX;
1537 }
1538 else {
1539 /* Otherwise replace the error with caller's error object. */
1540 PyErr_Format(err,
1541 "cannot fit '%.200s' into an index-sized integer",
1542 item->ob_type->tp_name);
1543 }
1544
1545 finish:
1546 Py_DECREF(value);
1547 return result;
1548}
1549
1550
Guido van Rossume15dee51995-07-18 14:12:02 +00001551PyObject *
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001552_PyNumber_ConvertIntegralToInt(PyObject *integral, const char* error_format)
1553{
1554 const char *type_name;
1555 static PyObject *int_name = NULL;
1556 if (int_name == NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001557 int_name = PyString_InternFromString("__int__");
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001558 if (int_name == NULL)
1559 return NULL;
1560 }
1561
1562 if (integral && (!PyInt_Check(integral) &&
1563 !PyLong_Check(integral))) {
1564 /* Don't go through tp_as_number->nb_int to avoid
1565 hitting the classic class fallback to __trunc__. */
1566 PyObject *int_func = PyObject_GetAttr(integral, int_name);
1567 if (int_func == NULL) {
1568 PyErr_Clear(); /* Raise a different error. */
1569 goto non_integral_error;
1570 }
1571 Py_DECREF(integral);
1572 integral = PyEval_CallObject(int_func, NULL);
1573 Py_DECREF(int_func);
1574 if (integral && (!PyInt_Check(integral) &&
1575 !PyLong_Check(integral))) {
1576 goto non_integral_error;
1577 }
1578 }
1579 return integral;
1580
1581non_integral_error:
1582 if (PyInstance_Check(integral)) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001583 type_name = PyString_AS_STRING(((PyInstanceObject *)integral)
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001584 ->in_class->cl_name);
1585 }
1586 else {
1587 type_name = integral->ob_type->tp_name;
1588 }
1589 PyErr_Format(PyExc_TypeError, error_format, type_name);
1590 Py_DECREF(integral);
1591 return NULL;
1592}
1593
1594
1595PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001596PyNumber_Int(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00001597{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001598 PyNumberMethods *m;
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001599 static PyObject *trunc_name = NULL;
1600 PyObject *trunc_func;
Guido van Rossum4c08d552000-03-10 22:55:18 +00001601 const char *buffer;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001602 Py_ssize_t buffer_len;
Guido van Rossume15dee51995-07-18 14:12:02 +00001603
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001604 if (trunc_name == NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001605 trunc_name = PyString_InternFromString("__trunc__");
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001606 if (trunc_name == NULL)
1607 return NULL;
1608 }
1609
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001610 if (o == NULL)
1611 return null_error();
Tim Peters64b5ce32001-09-10 20:52:51 +00001612 if (PyInt_CheckExact(o)) {
Guido van Rossum9e896b32000-04-05 20:11:21 +00001613 Py_INCREF(o);
1614 return o;
1615 }
Brett Cannonc3647ac2005-04-26 03:45:26 +00001616 m = o->ob_type->tp_as_number;
1617 if (m && m->nb_int) { /* This should include subclasses of int */
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001618 /* Classic classes always take this branch. */
Brett Cannonc3647ac2005-04-26 03:45:26 +00001619 PyObject *res = m->nb_int(o);
1620 if (res && (!PyInt_Check(res) && !PyLong_Check(res))) {
1621 PyErr_Format(PyExc_TypeError,
1622 "__int__ returned non-int (type %.200s)",
1623 res->ob_type->tp_name);
1624 Py_DECREF(res);
1625 return NULL;
1626 }
1627 return res;
1628 }
1629 if (PyInt_Check(o)) { /* A int subclass without nb_int */
Tim Peters64b5ce32001-09-10 20:52:51 +00001630 PyIntObject *io = (PyIntObject*)o;
1631 return PyInt_FromLong(io->ob_ival);
1632 }
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001633 trunc_func = PyObject_GetAttr(o, trunc_name);
1634 if (trunc_func) {
1635 PyObject *truncated = PyEval_CallObject(trunc_func, NULL);
1636 Py_DECREF(trunc_func);
1637 /* __trunc__ is specified to return an Integral type, but
1638 int() needs to return an int. */
1639 return _PyNumber_ConvertIntegralToInt(
1640 truncated,
1641 "__trunc__ returned non-Integral (type %.200s)");
1642 }
1643 PyErr_Clear(); /* It's not an error if o.__trunc__ doesn't exist. */
1644
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001645 if (PyString_Check(o))
1646 return int_from_string(PyString_AS_STRING(o),
1647 PyString_GET_SIZE(o));
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001648#ifdef Py_USING_UNICODE
Guido van Rossum9e896b32000-04-05 20:11:21 +00001649 if (PyUnicode_Check(o))
1650 return PyInt_FromUnicode(PyUnicode_AS_UNICODE(o),
1651 PyUnicode_GET_SIZE(o),
1652 10);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001653#endif
Guido van Rossum4c08d552000-03-10 22:55:18 +00001654 if (!PyObject_AsCharBuffer(o, &buffer, &buffer_len))
Guido van Rossum9e896b32000-04-05 20:11:21 +00001655 return int_from_string((char*)buffer, buffer_len);
Guido van Rossume15dee51995-07-18 14:12:02 +00001656
Georg Brandlccff7852006-06-18 22:17:29 +00001657 return type_error("int() argument must be a string or a "
1658 "number, not '%.200s'", o);
Guido van Rossume15dee51995-07-18 14:12:02 +00001659}
1660
Guido van Rossum9e896b32000-04-05 20:11:21 +00001661/* Add a check for embedded NULL-bytes in the argument. */
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001662static PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00001663long_from_string(const char *s, Py_ssize_t len)
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001664{
Guido van Rossum4c08d552000-03-10 22:55:18 +00001665 char *end;
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001666 PyObject *x;
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001667
Guido van Rossum4c08d552000-03-10 22:55:18 +00001668 x = PyLong_FromString((char*)s, &end, 10);
Guido van Rossum9e896b32000-04-05 20:11:21 +00001669 if (x == NULL)
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001670 return NULL;
Guido van Rossum9e896b32000-04-05 20:11:21 +00001671 if (end != s + len) {
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001672 PyErr_SetString(PyExc_ValueError,
1673 "null byte in argument for long()");
Guido van Rossum9e896b32000-04-05 20:11:21 +00001674 Py_DECREF(x);
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001675 return NULL;
1676 }
1677 return x;
1678}
1679
Guido van Rossume15dee51995-07-18 14:12:02 +00001680PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001681PyNumber_Long(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00001682{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001683 PyNumberMethods *m;
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001684 static PyObject *trunc_name = NULL;
1685 PyObject *trunc_func;
Guido van Rossum4c08d552000-03-10 22:55:18 +00001686 const char *buffer;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001687 Py_ssize_t buffer_len;
Guido van Rossume15dee51995-07-18 14:12:02 +00001688
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001689 if (trunc_name == NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001690 trunc_name = PyString_InternFromString("__trunc__");
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001691 if (trunc_name == NULL)
1692 return NULL;
1693 }
1694
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001695 if (o == NULL)
1696 return null_error();
Brett Cannonc3647ac2005-04-26 03:45:26 +00001697 m = o->ob_type->tp_as_number;
1698 if (m && m->nb_long) { /* This should include subclasses of long */
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001699 /* Classic classes always take this branch. */
Brett Cannonc3647ac2005-04-26 03:45:26 +00001700 PyObject *res = m->nb_long(o);
1701 if (res && (!PyInt_Check(res) && !PyLong_Check(res))) {
1702 PyErr_Format(PyExc_TypeError,
1703 "__long__ returned non-long (type %.200s)",
1704 res->ob_type->tp_name);
1705 Py_DECREF(res);
1706 return NULL;
1707 }
1708 return res;
Guido van Rossum9e896b32000-04-05 20:11:21 +00001709 }
Brett Cannonc3647ac2005-04-26 03:45:26 +00001710 if (PyLong_Check(o)) /* A long subclass without nb_long */
Tim Petersdb30ac42002-03-02 04:14:21 +00001711 return _PyLong_Copy((PyLongObject *)o);
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001712 trunc_func = PyObject_GetAttr(o, trunc_name);
1713 if (trunc_func) {
1714 PyObject *truncated = PyEval_CallObject(trunc_func, NULL);
1715 PyObject *int_instance;
1716 Py_DECREF(trunc_func);
1717 /* __trunc__ is specified to return an Integral type,
1718 but long() needs to return a long. */
1719 int_instance = _PyNumber_ConvertIntegralToInt(
1720 truncated,
1721 "__trunc__ returned non-Integral (type %.200s)");
1722 if (int_instance && PyInt_Check(int_instance)) {
1723 /* Make sure that long() returns a long instance. */
1724 long value = PyInt_AS_LONG(int_instance);
1725 Py_DECREF(int_instance);
1726 return PyLong_FromLong(value);
1727 }
1728 return int_instance;
1729 }
1730 PyErr_Clear(); /* It's not an error if o.__trunc__ doesn't exist. */
1731
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001732 if (PyString_Check(o))
Guido van Rossum77660912002-04-16 16:32:50 +00001733 /* need to do extra error checking that PyLong_FromString()
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001734 * doesn't do. In particular long('9.5') must raise an
1735 * exception, not truncate the float.
1736 */
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001737 return long_from_string(PyString_AS_STRING(o),
1738 PyString_GET_SIZE(o));
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001739#ifdef Py_USING_UNICODE
Guido van Rossum9e896b32000-04-05 20:11:21 +00001740 if (PyUnicode_Check(o))
1741 /* The above check is done in PyLong_FromUnicode(). */
1742 return PyLong_FromUnicode(PyUnicode_AS_UNICODE(o),
1743 PyUnicode_GET_SIZE(o),
1744 10);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001745#endif
Guido van Rossum4c08d552000-03-10 22:55:18 +00001746 if (!PyObject_AsCharBuffer(o, &buffer, &buffer_len))
1747 return long_from_string(buffer, buffer_len);
Guido van Rossume15dee51995-07-18 14:12:02 +00001748
Georg Brandlccff7852006-06-18 22:17:29 +00001749 return type_error("long() argument must be a string or a "
1750 "number, not '%.200s'", o);
Guido van Rossume15dee51995-07-18 14:12:02 +00001751}
1752
1753PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001754PyNumber_Float(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00001755{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001756 PyNumberMethods *m;
Guido van Rossume15dee51995-07-18 14:12:02 +00001757
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001758 if (o == NULL)
1759 return null_error();
Brett Cannonc3647ac2005-04-26 03:45:26 +00001760 m = o->ob_type->tp_as_number;
1761 if (m && m->nb_float) { /* This should include subclasses of float */
1762 PyObject *res = m->nb_float(o);
1763 if (res && !PyFloat_Check(res)) {
1764 PyErr_Format(PyExc_TypeError,
1765 "__float__ returned non-float (type %.200s)",
1766 res->ob_type->tp_name);
1767 Py_DECREF(res);
1768 return NULL;
1769 }
1770 return res;
Guido van Rossum9e896b32000-04-05 20:11:21 +00001771 }
Brett Cannonc3647ac2005-04-26 03:45:26 +00001772 if (PyFloat_Check(o)) { /* A float subclass with nb_float == NULL */
Tim Peters7a50f252001-09-10 21:28:20 +00001773 PyFloatObject *po = (PyFloatObject *)o;
1774 return PyFloat_FromDouble(po->ob_fval);
1775 }
Guido van Rossum4c08d552000-03-10 22:55:18 +00001776 return PyFloat_FromString(o, NULL);
Guido van Rossume15dee51995-07-18 14:12:02 +00001777}
1778
Eric Smith5e527eb2008-02-10 01:36:53 +00001779PyObject *
1780PyNumber_ToBase(PyObject *n, int base)
1781{
1782 PyObject *res = NULL;
1783 PyObject *index = PyNumber_Index(n);
1784
1785 if (!index)
1786 return NULL;
1787 if (PyLong_Check(index))
1788 res = _PyLong_Format(index, base, 0, 1);
1789 else if (PyInt_Check(index))
1790 res = _PyInt_Format((PyIntObject*)index, base, 1);
1791 else
Eric Smith3f914372008-02-15 12:14:32 +00001792 /* It should not be possible to get here, as
1793 PyNumber_Index already has a check for the same
1794 condition */
1795 PyErr_SetString(PyExc_ValueError, "PyNumber_ToBase: index not "
1796 "int or long");
Eric Smith5e527eb2008-02-10 01:36:53 +00001797 Py_DECREF(index);
1798 return res;
1799}
1800
1801
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001802/* Operations on sequences */
Guido van Rossume15dee51995-07-18 14:12:02 +00001803
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001804int
Fred Drake79912472000-07-09 04:06:11 +00001805PySequence_Check(PyObject *s)
Guido van Rossume15dee51995-07-18 14:12:02 +00001806{
Raymond Hettinger1be1a792004-09-19 06:00:15 +00001807 if (s && PyInstance_Check(s))
Raymond Hettingere2eda602004-04-04 08:51:41 +00001808 return PyObject_HasAttrString(s, "__getitem__");
Raymond Hettingerde33c622007-02-07 23:49:03 +00001809 if (PyObject_IsInstance(s, (PyObject *)&PyDict_Type))
Raymond Hettinger4da5bf62007-02-07 22:24:07 +00001810 return 0;
Guido van Rossum8700b422001-09-07 20:20:11 +00001811 return s != NULL && s->ob_type->tp_as_sequence &&
1812 s->ob_type->tp_as_sequence->sq_item != NULL;
Guido van Rossume15dee51995-07-18 14:12:02 +00001813}
1814
Martin v. Löwis18e16552006-02-15 17:27:45 +00001815Py_ssize_t
Jeremy Hylton6253f832000-07-12 12:56:19 +00001816PySequence_Size(PyObject *s)
Guido van Rossume15dee51995-07-18 14:12:02 +00001817{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001818 PySequenceMethods *m;
Guido van Rossume15dee51995-07-18 14:12:02 +00001819
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001820 if (s == NULL) {
1821 null_error();
1822 return -1;
1823 }
Guido van Rossume15dee51995-07-18 14:12:02 +00001824
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001825 m = s->ob_type->tp_as_sequence;
1826 if (m && m->sq_length)
1827 return m->sq_length(s);
Guido van Rossume15dee51995-07-18 14:12:02 +00001828
Georg Brandlb0061c82006-08-08 11:56:21 +00001829 type_error("object of type '%.200s' has no len()", s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001830 return -1;
Guido van Rossume15dee51995-07-18 14:12:02 +00001831}
1832
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +00001833#undef PySequence_Length
Martin v. Löwis18e16552006-02-15 17:27:45 +00001834Py_ssize_t
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +00001835PySequence_Length(PyObject *s)
1836{
1837 return PySequence_Size(s);
1838}
1839#define PySequence_Length PySequence_Size
1840
Guido van Rossume15dee51995-07-18 14:12:02 +00001841PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001842PySequence_Concat(PyObject *s, PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00001843{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001844 PySequenceMethods *m;
Guido van Rossume15dee51995-07-18 14:12:02 +00001845
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001846 if (s == NULL || o == NULL)
1847 return null_error();
Guido van Rossume15dee51995-07-18 14:12:02 +00001848
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001849 m = s->ob_type->tp_as_sequence;
1850 if (m && m->sq_concat)
1851 return m->sq_concat(s, o);
1852
Armin Rigofd163f92005-12-29 15:59:19 +00001853 /* Instances of user classes defining an __add__() method only
1854 have an nb_add slot, not an sq_concat slot. So we fall back
1855 to nb_add if both arguments appear to be sequences. */
1856 if (PySequence_Check(s) && PySequence_Check(o)) {
1857 PyObject *result = binary_op1(s, o, NB_SLOT(nb_add));
1858 if (result != Py_NotImplemented)
1859 return result;
1860 Py_DECREF(result);
1861 }
Georg Brandlccff7852006-06-18 22:17:29 +00001862 return type_error("'%.200s' object can't be concatenated", s);
Guido van Rossume15dee51995-07-18 14:12:02 +00001863}
1864
1865PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00001866PySequence_Repeat(PyObject *o, Py_ssize_t count)
Guido van Rossume15dee51995-07-18 14:12:02 +00001867{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001868 PySequenceMethods *m;
Guido van Rossume15dee51995-07-18 14:12:02 +00001869
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001870 if (o == NULL)
1871 return null_error();
Guido van Rossume15dee51995-07-18 14:12:02 +00001872
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001873 m = o->ob_type->tp_as_sequence;
1874 if (m && m->sq_repeat)
1875 return m->sq_repeat(o, count);
1876
Armin Rigofd163f92005-12-29 15:59:19 +00001877 /* Instances of user classes defining a __mul__() method only
1878 have an nb_multiply slot, not an sq_repeat slot. so we fall back
1879 to nb_multiply if o appears to be a sequence. */
1880 if (PySequence_Check(o)) {
1881 PyObject *n, *result;
Martin v. Löwiseb079f12006-02-16 14:32:27 +00001882 n = PyInt_FromSsize_t(count);
Armin Rigofd163f92005-12-29 15:59:19 +00001883 if (n == NULL)
1884 return NULL;
1885 result = binary_op1(o, n, NB_SLOT(nb_multiply));
1886 Py_DECREF(n);
1887 if (result != Py_NotImplemented)
1888 return result;
1889 Py_DECREF(result);
1890 }
Georg Brandlccff7852006-06-18 22:17:29 +00001891 return type_error("'%.200s' object can't be repeated", o);
Guido van Rossume15dee51995-07-18 14:12:02 +00001892}
1893
1894PyObject *
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001895PySequence_InPlaceConcat(PyObject *s, PyObject *o)
1896{
1897 PySequenceMethods *m;
1898
1899 if (s == NULL || o == NULL)
1900 return null_error();
1901
1902 m = s->ob_type->tp_as_sequence;
1903 if (m && HASINPLACE(s) && m->sq_inplace_concat)
1904 return m->sq_inplace_concat(s, o);
1905 if (m && m->sq_concat)
1906 return m->sq_concat(s, o);
1907
Armin Rigofd163f92005-12-29 15:59:19 +00001908 if (PySequence_Check(s) && PySequence_Check(o)) {
1909 PyObject *result = binary_iop1(s, o, NB_SLOT(nb_inplace_add),
1910 NB_SLOT(nb_add));
1911 if (result != Py_NotImplemented)
1912 return result;
1913 Py_DECREF(result);
1914 }
Georg Brandlccff7852006-06-18 22:17:29 +00001915 return type_error("'%.200s' object can't be concatenated", s);
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001916}
1917
1918PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00001919PySequence_InPlaceRepeat(PyObject *o, Py_ssize_t count)
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001920{
1921 PySequenceMethods *m;
1922
1923 if (o == NULL)
1924 return null_error();
1925
1926 m = o->ob_type->tp_as_sequence;
1927 if (m && HASINPLACE(o) && m->sq_inplace_repeat)
1928 return m->sq_inplace_repeat(o, count);
1929 if (m && m->sq_repeat)
1930 return m->sq_repeat(o, count);
1931
Armin Rigofd163f92005-12-29 15:59:19 +00001932 if (PySequence_Check(o)) {
1933 PyObject *n, *result;
Martin v. Löwiseb079f12006-02-16 14:32:27 +00001934 n = PyInt_FromSsize_t(count);
Armin Rigofd163f92005-12-29 15:59:19 +00001935 if (n == NULL)
1936 return NULL;
1937 result = binary_iop1(o, n, NB_SLOT(nb_inplace_multiply),
1938 NB_SLOT(nb_multiply));
1939 Py_DECREF(n);
1940 if (result != Py_NotImplemented)
1941 return result;
1942 Py_DECREF(result);
1943 }
Georg Brandlccff7852006-06-18 22:17:29 +00001944 return type_error("'%.200s' object can't be repeated", o);
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001945}
1946
1947PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00001948PySequence_GetItem(PyObject *s, Py_ssize_t i)
Guido van Rossume15dee51995-07-18 14:12:02 +00001949{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001950 PySequenceMethods *m;
Guido van Rossume15dee51995-07-18 14:12:02 +00001951
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001952 if (s == NULL)
1953 return null_error();
Guido van Rossume15dee51995-07-18 14:12:02 +00001954
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001955 m = s->ob_type->tp_as_sequence;
1956 if (m && m->sq_item) {
1957 if (i < 0) {
1958 if (m->sq_length) {
Martin v. Löwis18e16552006-02-15 17:27:45 +00001959 Py_ssize_t l = (*m->sq_length)(s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001960 if (l < 0)
1961 return NULL;
1962 i += l;
1963 }
1964 }
1965 return m->sq_item(s, i);
1966 }
Guido van Rossume15dee51995-07-18 14:12:02 +00001967
Skip Montanaro2c7ca9b2008-07-07 11:16:14 +00001968 return type_error("'%.200s' object does not support indexing", s);
Guido van Rossume15dee51995-07-18 14:12:02 +00001969}
1970
1971PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00001972PySequence_GetSlice(PyObject *s, Py_ssize_t i1, Py_ssize_t i2)
Guido van Rossume15dee51995-07-18 14:12:02 +00001973{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001974 PySequenceMethods *m;
Thomas Wouters1d75a792000-08-17 22:37:32 +00001975 PyMappingMethods *mp;
Guido van Rossume15dee51995-07-18 14:12:02 +00001976
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001977 if (!s) return null_error();
Guido van Rossume15dee51995-07-18 14:12:02 +00001978
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001979 m = s->ob_type->tp_as_sequence;
1980 if (m && m->sq_slice) {
1981 if (i1 < 0 || i2 < 0) {
1982 if (m->sq_length) {
Martin v. Löwis18e16552006-02-15 17:27:45 +00001983 Py_ssize_t l = (*m->sq_length)(s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001984 if (l < 0)
1985 return NULL;
1986 if (i1 < 0)
1987 i1 += l;
1988 if (i2 < 0)
1989 i2 += l;
1990 }
1991 }
1992 return m->sq_slice(s, i1, i2);
Thomas Wouters1d75a792000-08-17 22:37:32 +00001993 } else if ((mp = s->ob_type->tp_as_mapping) && mp->mp_subscript) {
1994 PyObject *res;
Neal Norwitzbadc0862006-03-23 06:03:08 +00001995 PyObject *slice = _PySlice_FromIndices(i1, i2);
Thomas Wouters1d75a792000-08-17 22:37:32 +00001996 if (!slice)
1997 return NULL;
1998 res = mp->mp_subscript(s, slice);
1999 Py_DECREF(slice);
2000 return res;
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002001 }
Guido van Rossume15dee51995-07-18 14:12:02 +00002002
Georg Brandlccff7852006-06-18 22:17:29 +00002003 return type_error("'%.200s' object is unsliceable", s);
Guido van Rossume15dee51995-07-18 14:12:02 +00002004}
2005
2006int
Martin v. Löwis18e16552006-02-15 17:27:45 +00002007PySequence_SetItem(PyObject *s, Py_ssize_t i, PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00002008{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002009 PySequenceMethods *m;
Guido van Rossume15dee51995-07-18 14:12:02 +00002010
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002011 if (s == NULL) {
2012 null_error();
2013 return -1;
2014 }
Guido van Rossume15dee51995-07-18 14:12:02 +00002015
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002016 m = s->ob_type->tp_as_sequence;
2017 if (m && m->sq_ass_item) {
2018 if (i < 0) {
2019 if (m->sq_length) {
Martin v. Löwis18e16552006-02-15 17:27:45 +00002020 Py_ssize_t l = (*m->sq_length)(s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002021 if (l < 0)
Guido van Rossumed6219b1998-05-29 02:59:33 +00002022 return -1;
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002023 i += l;
2024 }
2025 }
2026 return m->sq_ass_item(s, i, o);
2027 }
2028
Georg Brandlccff7852006-06-18 22:17:29 +00002029 type_error("'%.200s' object does not support item assignment", s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002030 return -1;
Guido van Rossume15dee51995-07-18 14:12:02 +00002031}
2032
Guido van Rossum6cdc6f41996-08-21 17:41:54 +00002033int
Martin v. Löwis18e16552006-02-15 17:27:45 +00002034PySequence_DelItem(PyObject *s, Py_ssize_t i)
Guido van Rossum6cdc6f41996-08-21 17:41:54 +00002035{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002036 PySequenceMethods *m;
Guido van Rossum6cdc6f41996-08-21 17:41:54 +00002037
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002038 if (s == NULL) {
2039 null_error();
2040 return -1;
2041 }
Guido van Rossum6cdc6f41996-08-21 17:41:54 +00002042
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002043 m = s->ob_type->tp_as_sequence;
2044 if (m && m->sq_ass_item) {
2045 if (i < 0) {
2046 if (m->sq_length) {
Martin v. Löwis18e16552006-02-15 17:27:45 +00002047 Py_ssize_t l = (*m->sq_length)(s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002048 if (l < 0)
Guido van Rossumed6219b1998-05-29 02:59:33 +00002049 return -1;
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002050 i += l;
2051 }
2052 }
2053 return m->sq_ass_item(s, i, (PyObject *)NULL);
2054 }
2055
Georg Brandlccff7852006-06-18 22:17:29 +00002056 type_error("'%.200s' object doesn't support item deletion", s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002057 return -1;
Guido van Rossum6cdc6f41996-08-21 17:41:54 +00002058}
2059
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002060int
Martin v. Löwis18e16552006-02-15 17:27:45 +00002061PySequence_SetSlice(PyObject *s, Py_ssize_t i1, Py_ssize_t i2, PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00002062{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002063 PySequenceMethods *m;
Thomas Wouters1d75a792000-08-17 22:37:32 +00002064 PyMappingMethods *mp;
Guido van Rossume15dee51995-07-18 14:12:02 +00002065
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002066 if (s == NULL) {
2067 null_error();
2068 return -1;
2069 }
Guido van Rossume15dee51995-07-18 14:12:02 +00002070
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002071 m = s->ob_type->tp_as_sequence;
2072 if (m && m->sq_ass_slice) {
2073 if (i1 < 0 || i2 < 0) {
2074 if (m->sq_length) {
Martin v. Löwis18e16552006-02-15 17:27:45 +00002075 Py_ssize_t l = (*m->sq_length)(s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002076 if (l < 0)
Guido van Rossumed6219b1998-05-29 02:59:33 +00002077 return -1;
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002078 if (i1 < 0)
2079 i1 += l;
2080 if (i2 < 0)
2081 i2 += l;
2082 }
2083 }
2084 return m->sq_ass_slice(s, i1, i2, o);
Thomas Wouters1d75a792000-08-17 22:37:32 +00002085 } else if ((mp = s->ob_type->tp_as_mapping) && mp->mp_ass_subscript) {
2086 int res;
Neal Norwitzbadc0862006-03-23 06:03:08 +00002087 PyObject *slice = _PySlice_FromIndices(i1, i2);
Thomas Wouters1d75a792000-08-17 22:37:32 +00002088 if (!slice)
2089 return -1;
2090 res = mp->mp_ass_subscript(s, slice, o);
2091 Py_DECREF(slice);
2092 return res;
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002093 }
Thomas Wouters1d75a792000-08-17 22:37:32 +00002094
Georg Brandlccff7852006-06-18 22:17:29 +00002095 type_error("'%.200s' object doesn't support slice assignment", s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002096 return -1;
Guido van Rossume15dee51995-07-18 14:12:02 +00002097}
2098
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002099int
Martin v. Löwis18e16552006-02-15 17:27:45 +00002100PySequence_DelSlice(PyObject *s, Py_ssize_t i1, Py_ssize_t i2)
Guido van Rossum6cdc6f41996-08-21 17:41:54 +00002101{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002102 PySequenceMethods *m;
Guido van Rossum6cdc6f41996-08-21 17:41:54 +00002103
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002104 if (s == NULL) {
2105 null_error();
2106 return -1;
2107 }
Guido van Rossum6cdc6f41996-08-21 17:41:54 +00002108
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002109 m = s->ob_type->tp_as_sequence;
2110 if (m && m->sq_ass_slice) {
2111 if (i1 < 0 || i2 < 0) {
2112 if (m->sq_length) {
Martin v. Löwis18e16552006-02-15 17:27:45 +00002113 Py_ssize_t l = (*m->sq_length)(s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002114 if (l < 0)
Guido van Rossumed6219b1998-05-29 02:59:33 +00002115 return -1;
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002116 if (i1 < 0)
2117 i1 += l;
2118 if (i2 < 0)
2119 i2 += l;
2120 }
2121 }
2122 return m->sq_ass_slice(s, i1, i2, (PyObject *)NULL);
2123 }
Georg Brandlccff7852006-06-18 22:17:29 +00002124 type_error("'%.200s' object doesn't support slice deletion", s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002125 return -1;
Guido van Rossum6cdc6f41996-08-21 17:41:54 +00002126}
2127
Guido van Rossume15dee51995-07-18 14:12:02 +00002128PyObject *
Fred Drake79912472000-07-09 04:06:11 +00002129PySequence_Tuple(PyObject *v)
Guido van Rossume15dee51995-07-18 14:12:02 +00002130{
Tim Peters6912d4d2001-05-05 03:56:37 +00002131 PyObject *it; /* iter(v) */
Martin v. Löwis18e16552006-02-15 17:27:45 +00002132 Py_ssize_t n; /* guess for result tuple size */
Raymond Hettingerb5163702009-02-02 21:50:13 +00002133 PyObject *result = NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002134 Py_ssize_t j;
Guido van Rossume15dee51995-07-18 14:12:02 +00002135
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002136 if (v == NULL)
2137 return null_error();
Guido van Rossume15dee51995-07-18 14:12:02 +00002138
Tim Peters6912d4d2001-05-05 03:56:37 +00002139 /* Special-case the common tuple and list cases, for efficiency. */
Tim Peters4c3a0a32001-09-10 23:37:46 +00002140 if (PyTuple_CheckExact(v)) {
2141 /* Note that we can't know whether it's safe to return
2142 a tuple *subclass* instance as-is, hence the restriction
Tim Peters8ff70a92001-09-10 23:53:53 +00002143 to exact tuples here. In contrast, lists always make
2144 a copy, so there's no need for exactness below. */
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002145 Py_INCREF(v);
2146 return v;
Guido van Rossume15dee51995-07-18 14:12:02 +00002147 }
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002148 if (PyList_Check(v))
2149 return PyList_AsTuple(v);
2150
Tim Peters6912d4d2001-05-05 03:56:37 +00002151 /* Get iterator. */
2152 it = PyObject_GetIter(v);
2153 if (it == NULL)
Tim Peters1fc240e2001-10-26 05:06:50 +00002154 return NULL;
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002155
Tim Peters6912d4d2001-05-05 03:56:37 +00002156 /* Guess result size and allocate space. */
Raymond Hettinger4e2f7142007-12-06 00:56:53 +00002157 n = _PyObject_LengthHint(v, 10);
Raymond Hettingerb5163702009-02-02 21:50:13 +00002158 if (n == -1)
2159 goto Fail;
Tim Peters6912d4d2001-05-05 03:56:37 +00002160 result = PyTuple_New(n);
2161 if (result == NULL)
2162 goto Fail;
2163
2164 /* Fill the tuple. */
2165 for (j = 0; ; ++j) {
2166 PyObject *item = PyIter_Next(it);
2167 if (item == NULL) {
2168 if (PyErr_Occurred())
2169 goto Fail;
2170 break;
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002171 }
Tim Peters6912d4d2001-05-05 03:56:37 +00002172 if (j >= n) {
Martin v. Löwis18e16552006-02-15 17:27:45 +00002173 Py_ssize_t oldn = n;
Raymond Hettinger4d012592004-12-16 10:38:38 +00002174 /* The over-allocation strategy can grow a bit faster
2175 than for lists because unlike lists the
2176 over-allocation isn't permanent -- we reclaim
2177 the excess before the end of this routine.
2178 So, grow by ten and then add 25%.
2179 */
2180 n += 10;
2181 n += n >> 2;
2182 if (n < oldn) {
2183 /* Check for overflow */
2184 PyErr_NoMemory();
Raymond Hettingere6bdb372004-12-16 15:10:21 +00002185 Py_DECREF(item);
Raymond Hettinger4d012592004-12-16 10:38:38 +00002186 goto Fail;
2187 }
Tim Peters4324aa32001-05-28 22:30:08 +00002188 if (_PyTuple_Resize(&result, n) != 0) {
Tim Peters12d0a6c2001-05-05 04:10:25 +00002189 Py_DECREF(item);
Tim Peters6912d4d2001-05-05 03:56:37 +00002190 goto Fail;
Tim Peters12d0a6c2001-05-05 04:10:25 +00002191 }
Tim Peters6912d4d2001-05-05 03:56:37 +00002192 }
2193 PyTuple_SET_ITEM(result, j, item);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002194 }
2195
Tim Peters6912d4d2001-05-05 03:56:37 +00002196 /* Cut tuple back if guess was too large. */
2197 if (j < n &&
Tim Peters4324aa32001-05-28 22:30:08 +00002198 _PyTuple_Resize(&result, j) != 0)
Tim Peters6912d4d2001-05-05 03:56:37 +00002199 goto Fail;
2200
2201 Py_DECREF(it);
2202 return result;
2203
2204Fail:
2205 Py_XDECREF(result);
2206 Py_DECREF(it);
2207 return NULL;
Guido van Rossume15dee51995-07-18 14:12:02 +00002208}
2209
Guido van Rossum3c5936a1996-12-05 21:51:24 +00002210PyObject *
Fred Drake79912472000-07-09 04:06:11 +00002211PySequence_List(PyObject *v)
Guido van Rossum3c5936a1996-12-05 21:51:24 +00002212{
Tim Petersf553f892001-05-01 20:45:31 +00002213 PyObject *result; /* result list */
Raymond Hettinger8ca92ae2004-03-11 09:13:12 +00002214 PyObject *rv; /* return value from PyList_Extend */
Guido van Rossum4669fb41997-04-02 05:31:09 +00002215
Guido van Rossum5dba9e81998-07-10 18:03:50 +00002216 if (v == NULL)
2217 return null_error();
2218
Raymond Hettinger8ca92ae2004-03-11 09:13:12 +00002219 result = PyList_New(0);
2220 if (result == NULL)
Tim Petersf553f892001-05-01 20:45:31 +00002221 return NULL;
2222
Raymond Hettinger8ca92ae2004-03-11 09:13:12 +00002223 rv = _PyList_Extend((PyListObject *)result, v);
2224 if (rv == NULL) {
2225 Py_DECREF(result);
Tim Petersf553f892001-05-01 20:45:31 +00002226 return NULL;
2227 }
Raymond Hettinger969d8c02004-03-17 05:24:23 +00002228 Py_DECREF(rv);
Tim Petersf553f892001-05-01 20:45:31 +00002229 return result;
Guido van Rossum3c5936a1996-12-05 21:51:24 +00002230}
2231
Andrew M. Kuchling74042d62000-06-18 18:43:14 +00002232PyObject *
Fred Drake79912472000-07-09 04:06:11 +00002233PySequence_Fast(PyObject *v, const char *m)
Andrew M. Kuchling74042d62000-06-18 18:43:14 +00002234{
Raymond Hettinger2fb70292004-01-11 23:26:51 +00002235 PyObject *it;
2236
Andrew M. Kuchling74042d62000-06-18 18:43:14 +00002237 if (v == NULL)
2238 return null_error();
2239
Michael W. Hudson2801fe12002-11-05 18:05:49 +00002240 if (PyList_CheckExact(v) || PyTuple_CheckExact(v)) {
Andrew M. Kuchling74042d62000-06-18 18:43:14 +00002241 Py_INCREF(v);
2242 return v;
2243 }
2244
Raymond Hettinger2fb70292004-01-11 23:26:51 +00002245 it = PyObject_GetIter(v);
2246 if (it == NULL) {
2247 if (PyErr_ExceptionMatches(PyExc_TypeError))
Georg Brandlccff7852006-06-18 22:17:29 +00002248 PyErr_SetString(PyExc_TypeError, m);
Raymond Hettinger2fb70292004-01-11 23:26:51 +00002249 return NULL;
2250 }
2251
Raymond Hettinger193814c2004-12-18 19:00:59 +00002252 v = PySequence_List(it);
Raymond Hettinger2fb70292004-01-11 23:26:51 +00002253 Py_DECREF(it);
Andrew M. Kuchling74042d62000-06-18 18:43:14 +00002254
2255 return v;
2256}
2257
Tim Peters16a77ad2001-09-08 04:00:12 +00002258/* Iterate over seq. Result depends on the operation:
2259 PY_ITERSEARCH_COUNT: -1 if error, else # of times obj appears in seq.
Mark Dickinson3e4caeb2009-02-21 20:27:01 +00002260 PY_ITERSEARCH_INDEX: 0-based index of first occurrence of obj in seq;
Tim Peters16a77ad2001-09-08 04:00:12 +00002261 set ValueError and return -1 if none found; also return -1 on error.
2262 Py_ITERSEARCH_CONTAINS: return 1 if obj in seq, else 0; -1 on error.
2263*/
Neal Norwitz1fc4b772006-03-04 18:49:58 +00002264Py_ssize_t
Tim Peters16a77ad2001-09-08 04:00:12 +00002265_PySequence_IterSearch(PyObject *seq, PyObject *obj, int operation)
Guido van Rossume15dee51995-07-18 14:12:02 +00002266{
Neal Norwitz1fc4b772006-03-04 18:49:58 +00002267 Py_ssize_t n;
Tim Peters16a77ad2001-09-08 04:00:12 +00002268 int wrapped; /* for PY_ITERSEARCH_INDEX, true iff n wrapped around */
2269 PyObject *it; /* iter(seq) */
Guido van Rossume15dee51995-07-18 14:12:02 +00002270
Tim Peters16a77ad2001-09-08 04:00:12 +00002271 if (seq == NULL || obj == NULL) {
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002272 null_error();
2273 return -1;
2274 }
Tim Peters75f8e352001-05-05 11:33:43 +00002275
Tim Peters16a77ad2001-09-08 04:00:12 +00002276 it = PyObject_GetIter(seq);
Tim Peters75f8e352001-05-05 11:33:43 +00002277 if (it == NULL) {
Georg Brandlccff7852006-06-18 22:17:29 +00002278 type_error("argument of type '%.200s' is not iterable", seq);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002279 return -1;
Tim Peters75f8e352001-05-05 11:33:43 +00002280 }
Guido van Rossume15dee51995-07-18 14:12:02 +00002281
Tim Peters16a77ad2001-09-08 04:00:12 +00002282 n = wrapped = 0;
Tim Peters75f8e352001-05-05 11:33:43 +00002283 for (;;) {
2284 int cmp;
2285 PyObject *item = PyIter_Next(it);
2286 if (item == NULL) {
2287 if (PyErr_Occurred())
2288 goto Fail;
2289 break;
2290 }
Tim Peters16a77ad2001-09-08 04:00:12 +00002291
2292 cmp = PyObject_RichCompareBool(obj, item, Py_EQ);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002293 Py_DECREF(item);
Tim Peters75f8e352001-05-05 11:33:43 +00002294 if (cmp < 0)
2295 goto Fail;
2296 if (cmp > 0) {
Tim Peters16a77ad2001-09-08 04:00:12 +00002297 switch (operation) {
2298 case PY_ITERSEARCH_COUNT:
Armin Rigo7ccbca92006-10-04 12:17:45 +00002299 if (n == PY_SSIZE_T_MAX) {
Tim Peters16a77ad2001-09-08 04:00:12 +00002300 PyErr_SetString(PyExc_OverflowError,
Armin Rigo7ccbca92006-10-04 12:17:45 +00002301 "count exceeds C integer size");
Tim Peters16a77ad2001-09-08 04:00:12 +00002302 goto Fail;
2303 }
Armin Rigo7ccbca92006-10-04 12:17:45 +00002304 ++n;
Tim Peters16a77ad2001-09-08 04:00:12 +00002305 break;
2306
2307 case PY_ITERSEARCH_INDEX:
2308 if (wrapped) {
2309 PyErr_SetString(PyExc_OverflowError,
Armin Rigo7ccbca92006-10-04 12:17:45 +00002310 "index exceeds C integer size");
Tim Peters16a77ad2001-09-08 04:00:12 +00002311 goto Fail;
2312 }
2313 goto Done;
2314
2315 case PY_ITERSEARCH_CONTAINS:
2316 n = 1;
2317 goto Done;
2318
2319 default:
2320 assert(!"unknown operation");
Tim Peters75f8e352001-05-05 11:33:43 +00002321 }
Tim Peters16a77ad2001-09-08 04:00:12 +00002322 }
2323
2324 if (operation == PY_ITERSEARCH_INDEX) {
Armin Rigo7ccbca92006-10-04 12:17:45 +00002325 if (n == PY_SSIZE_T_MAX)
Tim Peters16a77ad2001-09-08 04:00:12 +00002326 wrapped = 1;
Armin Rigo7ccbca92006-10-04 12:17:45 +00002327 ++n;
Tim Peters75f8e352001-05-05 11:33:43 +00002328 }
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002329 }
Tim Peters16a77ad2001-09-08 04:00:12 +00002330
2331 if (operation != PY_ITERSEARCH_INDEX)
2332 goto Done;
2333
2334 PyErr_SetString(PyExc_ValueError,
2335 "sequence.index(x): x not in sequence");
2336 /* fall into failure code */
2337Fail:
2338 n = -1;
2339 /* fall through */
2340Done:
Tim Peters75f8e352001-05-05 11:33:43 +00002341 Py_DECREF(it);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002342 return n;
Tim Peters75f8e352001-05-05 11:33:43 +00002343
Guido van Rossume15dee51995-07-18 14:12:02 +00002344}
2345
Tim Peters16a77ad2001-09-08 04:00:12 +00002346/* Return # of times o appears in s. */
Neal Norwitz1fc4b772006-03-04 18:49:58 +00002347Py_ssize_t
Tim Peters16a77ad2001-09-08 04:00:12 +00002348PySequence_Count(PyObject *s, PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00002349{
Tim Peters16a77ad2001-09-08 04:00:12 +00002350 return _PySequence_IterSearch(s, o, PY_ITERSEARCH_COUNT);
Guido van Rossume15dee51995-07-18 14:12:02 +00002351}
2352
Tim Peterscb8d3682001-05-05 21:05:01 +00002353/* Return -1 if error; 1 if ob in seq; 0 if ob not in seq.
Tim Peters16a77ad2001-09-08 04:00:12 +00002354 * Use sq_contains if possible, else defer to _PySequence_IterSearch().
Tim Peterscb8d3682001-05-05 21:05:01 +00002355 */
2356int
2357PySequence_Contains(PyObject *seq, PyObject *ob)
2358{
Neal Norwitz1fc4b772006-03-04 18:49:58 +00002359 Py_ssize_t result;
Tim Peterscb8d3682001-05-05 21:05:01 +00002360 if (PyType_HasFeature(seq->ob_type, Py_TPFLAGS_HAVE_SEQUENCE_IN)) {
2361 PySequenceMethods *sqm = seq->ob_type->tp_as_sequence;
2362 if (sqm != NULL && sqm->sq_contains != NULL)
2363 return (*sqm->sq_contains)(seq, ob);
2364 }
Neal Norwitz1fc4b772006-03-04 18:49:58 +00002365 result = _PySequence_IterSearch(seq, ob, PY_ITERSEARCH_CONTAINS);
2366 return Py_SAFE_DOWNCAST(result, Py_ssize_t, int);
Tim Peterscb8d3682001-05-05 21:05:01 +00002367}
2368
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002369/* Backwards compatibility */
2370#undef PySequence_In
2371int
Fred Drake79912472000-07-09 04:06:11 +00002372PySequence_In(PyObject *w, PyObject *v)
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002373{
2374 return PySequence_Contains(w, v);
2375}
2376
Neal Norwitz1fc4b772006-03-04 18:49:58 +00002377Py_ssize_t
Fred Drake79912472000-07-09 04:06:11 +00002378PySequence_Index(PyObject *s, PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00002379{
Tim Peters16a77ad2001-09-08 04:00:12 +00002380 return _PySequence_IterSearch(s, o, PY_ITERSEARCH_INDEX);
Guido van Rossume15dee51995-07-18 14:12:02 +00002381}
2382
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002383/* Operations on mappings */
2384
2385int
Fred Drake79912472000-07-09 04:06:11 +00002386PyMapping_Check(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00002387{
Raymond Hettinger1be1a792004-09-19 06:00:15 +00002388 if (o && PyInstance_Check(o))
Raymond Hettingere2eda602004-04-04 08:51:41 +00002389 return PyObject_HasAttrString(o, "__getitem__");
2390
2391 return o && o->ob_type->tp_as_mapping &&
2392 o->ob_type->tp_as_mapping->mp_subscript &&
Raymond Hettingered9192e2004-04-05 08:14:48 +00002393 !(o->ob_type->tp_as_sequence &&
2394 o->ob_type->tp_as_sequence->sq_slice);
Guido van Rossume15dee51995-07-18 14:12:02 +00002395}
2396
Martin v. Löwis18e16552006-02-15 17:27:45 +00002397Py_ssize_t
Jeremy Hylton6253f832000-07-12 12:56:19 +00002398PyMapping_Size(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00002399{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002400 PyMappingMethods *m;
Guido van Rossume15dee51995-07-18 14:12:02 +00002401
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002402 if (o == NULL) {
2403 null_error();
2404 return -1;
2405 }
Guido van Rossume15dee51995-07-18 14:12:02 +00002406
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002407 m = o->ob_type->tp_as_mapping;
2408 if (m && m->mp_length)
2409 return m->mp_length(o);
Guido van Rossume15dee51995-07-18 14:12:02 +00002410
Georg Brandlb0061c82006-08-08 11:56:21 +00002411 type_error("object of type '%.200s' has no len()", o);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002412 return -1;
Guido van Rossume15dee51995-07-18 14:12:02 +00002413}
2414
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +00002415#undef PyMapping_Length
Martin v. Löwis18e16552006-02-15 17:27:45 +00002416Py_ssize_t
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +00002417PyMapping_Length(PyObject *o)
2418{
2419 return PyMapping_Size(o);
2420}
2421#define PyMapping_Length PyMapping_Size
2422
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002423PyObject *
Fred Drake79912472000-07-09 04:06:11 +00002424PyMapping_GetItemString(PyObject *o, char *key)
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002425{
2426 PyObject *okey, *r;
2427
2428 if (key == NULL)
2429 return null_error();
2430
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002431 okey = PyString_FromString(key);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002432 if (okey == NULL)
2433 return NULL;
2434 r = PyObject_GetItem(o, okey);
2435 Py_DECREF(okey);
2436 return r;
2437}
2438
2439int
Fred Drake79912472000-07-09 04:06:11 +00002440PyMapping_SetItemString(PyObject *o, char *key, PyObject *value)
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002441{
2442 PyObject *okey;
2443 int r;
2444
2445 if (key == NULL) {
2446 null_error();
2447 return -1;
2448 }
2449
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002450 okey = PyString_FromString(key);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002451 if (okey == NULL)
Guido van Rossumed6219b1998-05-29 02:59:33 +00002452 return -1;
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002453 r = PyObject_SetItem(o, okey, value);
2454 Py_DECREF(okey);
2455 return r;
2456}
2457
2458int
Fred Drake79912472000-07-09 04:06:11 +00002459PyMapping_HasKeyString(PyObject *o, char *key)
Guido van Rossume15dee51995-07-18 14:12:02 +00002460{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002461 PyObject *v;
Guido van Rossume15dee51995-07-18 14:12:02 +00002462
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002463 v = PyMapping_GetItemString(o, key);
2464 if (v) {
2465 Py_DECREF(v);
2466 return 1;
2467 }
2468 PyErr_Clear();
2469 return 0;
Guido van Rossume15dee51995-07-18 14:12:02 +00002470}
2471
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002472int
Fred Drake79912472000-07-09 04:06:11 +00002473PyMapping_HasKey(PyObject *o, PyObject *key)
Guido van Rossume15dee51995-07-18 14:12:02 +00002474{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002475 PyObject *v;
Guido van Rossume15dee51995-07-18 14:12:02 +00002476
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002477 v = PyObject_GetItem(o, key);
2478 if (v) {
2479 Py_DECREF(v);
2480 return 1;
2481 }
2482 PyErr_Clear();
2483 return 0;
Guido van Rossume15dee51995-07-18 14:12:02 +00002484}
2485
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002486/* Operations on callable objects */
2487
2488/* XXX PyCallable_Check() is in object.c */
2489
Guido van Rossume15dee51995-07-18 14:12:02 +00002490PyObject *
Fred Drake79912472000-07-09 04:06:11 +00002491PyObject_CallObject(PyObject *o, PyObject *a)
Guido van Rossume15dee51995-07-18 14:12:02 +00002492{
Guido van Rossum5560b742001-09-14 16:47:50 +00002493 return PyEval_CallObjectWithKeywords(o, a, NULL);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002494}
Guido van Rossume15dee51995-07-18 14:12:02 +00002495
2496PyObject *
Tim Peters6d6c1a32001-08-02 04:15:00 +00002497PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw)
2498{
2499 ternaryfunc call;
2500
2501 if ((call = func->ob_type->tp_call) != NULL) {
Brett Cannon1e534b52007-09-07 04:18:30 +00002502 PyObject *result;
2503 if (Py_EnterRecursiveCall(" while calling a Python object"))
2504 return NULL;
2505 result = (*call)(func, arg, kw);
2506 Py_LeaveRecursiveCall();
Tim Peters6d6c1a32001-08-02 04:15:00 +00002507 if (result == NULL && !PyErr_Occurred())
2508 PyErr_SetString(
2509 PyExc_SystemError,
2510 "NULL result without error in PyObject_Call");
2511 return result;
2512 }
Georg Brandlccff7852006-06-18 22:17:29 +00002513 PyErr_Format(PyExc_TypeError, "'%.200s' object is not callable",
Fred Drake573395a2001-11-01 20:26:12 +00002514 func->ob_type->tp_name);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002515 return NULL;
2516}
2517
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002518static PyObject*
2519call_function_tail(PyObject *callable, PyObject *args)
2520{
2521 PyObject *retval;
2522
2523 if (args == NULL)
2524 return NULL;
2525
2526 if (!PyTuple_Check(args)) {
2527 PyObject *a;
2528
2529 a = PyTuple_New(1);
2530 if (a == NULL) {
2531 Py_DECREF(args);
2532 return NULL;
2533 }
2534 PyTuple_SET_ITEM(a, 0, args);
2535 args = a;
2536 }
2537 retval = PyObject_Call(callable, args, NULL);
2538
2539 Py_DECREF(args);
2540
2541 return retval;
2542}
2543
Tim Peters6d6c1a32001-08-02 04:15:00 +00002544PyObject *
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002545PyObject_CallFunction(PyObject *callable, char *format, ...)
Guido van Rossume15dee51995-07-18 14:12:02 +00002546{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002547 va_list va;
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002548 PyObject *args;
Guido van Rossume15dee51995-07-18 14:12:02 +00002549
Fred Drakeb92cf062001-10-27 06:16:31 +00002550 if (callable == NULL)
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002551 return null_error();
Guido van Rossume15dee51995-07-18 14:12:02 +00002552
Fred Drakeb92cf062001-10-27 06:16:31 +00002553 if (format && *format) {
2554 va_start(va, format);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002555 args = Py_VaBuildValue(format, va);
Fred Drakeb92cf062001-10-27 06:16:31 +00002556 va_end(va);
2557 }
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002558 else
2559 args = PyTuple_New(0);
Guido van Rossume15dee51995-07-18 14:12:02 +00002560
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002561 return call_function_tail(callable, args);
2562}
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002563
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002564PyObject *
2565_PyObject_CallFunction_SizeT(PyObject *callable, char *format, ...)
2566{
2567 va_list va;
2568 PyObject *args;
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002569
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002570 if (callable == NULL)
2571 return null_error();
2572
2573 if (format && *format) {
2574 va_start(va, format);
2575 args = _Py_VaBuildValue_SizeT(format, va);
2576 va_end(va);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002577 }
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002578 else
2579 args = PyTuple_New(0);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002580
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002581 return call_function_tail(callable, args);
Guido van Rossume15dee51995-07-18 14:12:02 +00002582}
2583
2584PyObject *
Guido van Rossume15dee51995-07-18 14:12:02 +00002585PyObject_CallMethod(PyObject *o, char *name, char *format, ...)
Guido van Rossume15dee51995-07-18 14:12:02 +00002586{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002587 va_list va;
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002588 PyObject *args;
Michael W. Hudson0edc7a02005-07-12 10:21:19 +00002589 PyObject *func = NULL;
2590 PyObject *retval = NULL;
Guido van Rossume15dee51995-07-18 14:12:02 +00002591
Fred Drakeb92cf062001-10-27 06:16:31 +00002592 if (o == NULL || name == NULL)
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002593 return null_error();
Guido van Rossume15dee51995-07-18 14:12:02 +00002594
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002595 func = PyObject_GetAttrString(o, name);
2596 if (func == NULL) {
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002597 PyErr_SetString(PyExc_AttributeError, name);
2598 return 0;
2599 }
Guido van Rossume15dee51995-07-18 14:12:02 +00002600
Michael W. Hudson0edc7a02005-07-12 10:21:19 +00002601 if (!PyCallable_Check(func)) {
Georg Brandlccff7852006-06-18 22:17:29 +00002602 type_error("attribute of type '%.200s' is not callable", func);
Michael W. Hudson0edc7a02005-07-12 10:21:19 +00002603 goto exit;
2604 }
Guido van Rossume15dee51995-07-18 14:12:02 +00002605
Fred Drakeb92cf062001-10-27 06:16:31 +00002606 if (format && *format) {
2607 va_start(va, format);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002608 args = Py_VaBuildValue(format, va);
Fred Drakeb92cf062001-10-27 06:16:31 +00002609 va_end(va);
2610 }
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002611 else
2612 args = PyTuple_New(0);
Guido van Rossume15dee51995-07-18 14:12:02 +00002613
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002614 retval = call_function_tail(func, args);
Guido van Rossume15dee51995-07-18 14:12:02 +00002615
Michael W. Hudson0edc7a02005-07-12 10:21:19 +00002616 exit:
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002617 /* args gets consumed in call_function_tail */
2618 Py_XDECREF(func);
2619
2620 return retval;
2621}
2622
2623PyObject *
2624_PyObject_CallMethod_SizeT(PyObject *o, char *name, char *format, ...)
2625{
2626 va_list va;
2627 PyObject *args;
2628 PyObject *func = NULL;
2629 PyObject *retval = NULL;
2630
2631 if (o == NULL || name == NULL)
2632 return null_error();
2633
2634 func = PyObject_GetAttrString(o, name);
2635 if (func == NULL) {
2636 PyErr_SetString(PyExc_AttributeError, name);
2637 return 0;
2638 }
2639
2640 if (!PyCallable_Check(func)) {
Georg Brandlccff7852006-06-18 22:17:29 +00002641 type_error("attribute of type '%.200s' is not callable", func);
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002642 goto exit;
2643 }
2644
2645 if (format && *format) {
2646 va_start(va, format);
2647 args = _Py_VaBuildValue_SizeT(format, va);
2648 va_end(va);
2649 }
2650 else
2651 args = PyTuple_New(0);
2652
2653 retval = call_function_tail(func, args);
2654
2655 exit:
2656 /* args gets consumed in call_function_tail */
Michael W. Hudson0edc7a02005-07-12 10:21:19 +00002657 Py_XDECREF(func);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002658
2659 return retval;
Guido van Rossume15dee51995-07-18 14:12:02 +00002660}
Guido van Rossum823649d2001-03-21 18:40:58 +00002661
2662
Fred Drakeb421b8c2001-10-26 16:21:32 +00002663static PyObject *
Fred Drakeb0c079e2001-10-28 02:39:03 +00002664objargs_mktuple(va_list va)
Fred Drakeb421b8c2001-10-26 16:21:32 +00002665{
2666 int i, n = 0;
2667 va_list countva;
2668 PyObject *result, *tmp;
2669
2670#ifdef VA_LIST_IS_ARRAY
2671 memcpy(countva, va, sizeof(va_list));
2672#else
Martin v. Löwis75d2d942002-07-28 10:23:27 +00002673#ifdef __va_copy
2674 __va_copy(countva, va);
2675#else
Fred Drakeb421b8c2001-10-26 16:21:32 +00002676 countva = va;
2677#endif
Martin v. Löwis75d2d942002-07-28 10:23:27 +00002678#endif
Fred Drakeb421b8c2001-10-26 16:21:32 +00002679
2680 while (((PyObject *)va_arg(countva, PyObject *)) != NULL)
2681 ++n;
2682 result = PyTuple_New(n);
2683 if (result != NULL && n > 0) {
2684 for (i = 0; i < n; ++i) {
2685 tmp = (PyObject *)va_arg(va, PyObject *);
2686 PyTuple_SET_ITEM(result, i, tmp);
2687 Py_INCREF(tmp);
2688 }
2689 }
2690 return result;
2691}
2692
2693PyObject *
Fred Drakeb0c079e2001-10-28 02:39:03 +00002694PyObject_CallMethodObjArgs(PyObject *callable, PyObject *name, ...)
Fred Drakeb421b8c2001-10-26 16:21:32 +00002695{
2696 PyObject *args, *tmp;
2697 va_list vargs;
2698
2699 if (callable == NULL || name == NULL)
2700 return null_error();
2701
2702 callable = PyObject_GetAttr(callable, name);
2703 if (callable == NULL)
2704 return NULL;
2705
2706 /* count the args */
2707 va_start(vargs, name);
Fred Drakeb0c079e2001-10-28 02:39:03 +00002708 args = objargs_mktuple(vargs);
Fred Drakeb421b8c2001-10-26 16:21:32 +00002709 va_end(vargs);
2710 if (args == NULL) {
2711 Py_DECREF(callable);
2712 return NULL;
2713 }
2714 tmp = PyObject_Call(callable, args, NULL);
2715 Py_DECREF(args);
2716 Py_DECREF(callable);
2717
2718 return tmp;
2719}
2720
2721PyObject *
Fred Drakeb0c079e2001-10-28 02:39:03 +00002722PyObject_CallFunctionObjArgs(PyObject *callable, ...)
Fred Drakeb421b8c2001-10-26 16:21:32 +00002723{
2724 PyObject *args, *tmp;
2725 va_list vargs;
2726
2727 if (callable == NULL)
2728 return null_error();
2729
2730 /* count the args */
2731 va_start(vargs, callable);
Fred Drakeb0c079e2001-10-28 02:39:03 +00002732 args = objargs_mktuple(vargs);
Fred Drakeb421b8c2001-10-26 16:21:32 +00002733 va_end(vargs);
2734 if (args == NULL)
2735 return NULL;
2736 tmp = PyObject_Call(callable, args, NULL);
2737 Py_DECREF(args);
2738
2739 return tmp;
2740}
2741
2742
Guido van Rossum823649d2001-03-21 18:40:58 +00002743/* isinstance(), issubclass() */
2744
Barry Warsawf16951c2002-04-23 22:45:44 +00002745/* abstract_get_bases() has logically 4 return states, with a sort of 0th
2746 * state that will almost never happen.
2747 *
2748 * 0. creating the __bases__ static string could get a MemoryError
2749 * 1. getattr(cls, '__bases__') could raise an AttributeError
2750 * 2. getattr(cls, '__bases__') could raise some other exception
2751 * 3. getattr(cls, '__bases__') could return a tuple
2752 * 4. getattr(cls, '__bases__') could return something other than a tuple
2753 *
2754 * Only state #3 is a non-error state and only it returns a non-NULL object
2755 * (it returns the retrieved tuple).
2756 *
2757 * Any raised AttributeErrors are masked by clearing the exception and
2758 * returning NULL. If an object other than a tuple comes out of __bases__,
2759 * then again, the return value is NULL. So yes, these two situations
2760 * produce exactly the same results: NULL is returned and no error is set.
2761 *
2762 * If some exception other than AttributeError is raised, then NULL is also
2763 * returned, but the exception is not cleared. That's because we want the
2764 * exception to be propagated along.
2765 *
2766 * Callers are expected to test for PyErr_Occurred() when the return value
2767 * is NULL to decide whether a valid exception should be propagated or not.
2768 * When there's no exception to propagate, it's customary for the caller to
2769 * set a TypeError.
2770 */
Neil Schemenauer6b471292001-10-18 03:18:43 +00002771static PyObject *
2772abstract_get_bases(PyObject *cls)
Guido van Rossum823649d2001-03-21 18:40:58 +00002773{
2774 static PyObject *__bases__ = NULL;
2775 PyObject *bases;
Guido van Rossum823649d2001-03-21 18:40:58 +00002776
2777 if (__bases__ == NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002778 __bases__ = PyString_InternFromString("__bases__");
Guido van Rossum823649d2001-03-21 18:40:58 +00002779 if (__bases__ == NULL)
Neil Schemenauer6b471292001-10-18 03:18:43 +00002780 return NULL;
Guido van Rossum823649d2001-03-21 18:40:58 +00002781 }
Neil Schemenauer6b471292001-10-18 03:18:43 +00002782 bases = PyObject_GetAttr(cls, __bases__);
Barry Warsawf16951c2002-04-23 22:45:44 +00002783 if (bases == NULL) {
2784 if (PyErr_ExceptionMatches(PyExc_AttributeError))
2785 PyErr_Clear();
Neil Schemenauer6b471292001-10-18 03:18:43 +00002786 return NULL;
Guido van Rossum823649d2001-03-21 18:40:58 +00002787 }
Barry Warsawf16951c2002-04-23 22:45:44 +00002788 if (!PyTuple_Check(bases)) {
2789 Py_DECREF(bases);
2790 return NULL;
2791 }
Neil Schemenauer6b471292001-10-18 03:18:43 +00002792 return bases;
2793}
2794
2795
2796static int
2797abstract_issubclass(PyObject *derived, PyObject *cls)
2798{
Antoine Pitrou0668c622008-08-26 22:42:08 +00002799 PyObject *bases = NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002800 Py_ssize_t i, n;
Neil Schemenauer6b471292001-10-18 03:18:43 +00002801 int r = 0;
2802
Antoine Pitrou0668c622008-08-26 22:42:08 +00002803 while (1) {
2804 if (derived == cls)
2805 return 1;
2806 bases = abstract_get_bases(derived);
2807 if (bases == NULL) {
2808 if (PyErr_Occurred())
2809 return -1;
2810 return 0;
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002811 }
Antoine Pitrou0668c622008-08-26 22:42:08 +00002812 n = PyTuple_GET_SIZE(bases);
2813 if (n == 0) {
2814 Py_DECREF(bases);
2815 return 0;
2816 }
2817 /* Avoid recursivity in the single inheritance case */
2818 if (n == 1) {
2819 derived = PyTuple_GET_ITEM(bases, 0);
2820 Py_DECREF(bases);
2821 continue;
2822 }
2823 for (i = 0; i < n; i++) {
2824 r = abstract_issubclass(PyTuple_GET_ITEM(bases, i), cls);
2825 if (r != 0)
2826 break;
2827 }
2828 Py_DECREF(bases);
2829 return r;
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002830 }
Guido van Rossum823649d2001-03-21 18:40:58 +00002831}
2832
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002833static int
2834check_class(PyObject *cls, const char *error)
2835{
2836 PyObject *bases = abstract_get_bases(cls);
2837 if (bases == NULL) {
2838 /* Do not mask errors. */
2839 if (!PyErr_Occurred())
2840 PyErr_SetString(PyExc_TypeError, error);
2841 return 0;
2842 }
2843 Py_DECREF(bases);
2844 return -1;
2845}
2846
Brett Cannon4f653312004-03-20 22:52:14 +00002847static int
Antoine Pitrou0668c622008-08-26 22:42:08 +00002848recursive_isinstance(PyObject *inst, PyObject *cls)
Guido van Rossum823649d2001-03-21 18:40:58 +00002849{
2850 PyObject *icls;
2851 static PyObject *__class__ = NULL;
2852 int retval = 0;
2853
Guido van Rossum03bc7d32003-02-12 03:32:58 +00002854 if (__class__ == NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002855 __class__ = PyString_InternFromString("__class__");
Guido van Rossum03bc7d32003-02-12 03:32:58 +00002856 if (__class__ == NULL)
2857 return -1;
2858 }
2859
Neil Schemenauer6b471292001-10-18 03:18:43 +00002860 if (PyClass_Check(cls) && PyInstance_Check(inst)) {
2861 PyObject *inclass =
2862 (PyObject*)((PyInstanceObject*)inst)->in_class;
2863 retval = PyClass_IsSubclass(inclass, cls);
Guido van Rossum823649d2001-03-21 18:40:58 +00002864 }
2865 else if (PyType_Check(cls)) {
Tim Peters6d6c1a32001-08-02 04:15:00 +00002866 retval = PyObject_TypeCheck(inst, (PyTypeObject *)cls);
Guido van Rossum03bc7d32003-02-12 03:32:58 +00002867 if (retval == 0) {
2868 PyObject *c = PyObject_GetAttr(inst, __class__);
2869 if (c == NULL) {
2870 PyErr_Clear();
2871 }
2872 else {
Guido van Rossume5b130b2003-02-12 03:36:05 +00002873 if (c != (PyObject *)(inst->ob_type) &&
2874 PyType_Check(c))
Guido van Rossum03bc7d32003-02-12 03:32:58 +00002875 retval = PyType_IsSubtype(
2876 (PyTypeObject *)c,
2877 (PyTypeObject *)cls);
2878 Py_DECREF(c);
2879 }
2880 }
Guido van Rossum823649d2001-03-21 18:40:58 +00002881 }
Neil Schemenauer6b471292001-10-18 03:18:43 +00002882 else {
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002883 if (!check_class(cls,
2884 "isinstance() arg 2 must be a class, type,"
2885 " or tuple of classes and types"))
Neil Schemenauer6b471292001-10-18 03:18:43 +00002886 return -1;
Guido van Rossum823649d2001-03-21 18:40:58 +00002887 icls = PyObject_GetAttr(inst, __class__);
Neil Schemenauer6b471292001-10-18 03:18:43 +00002888 if (icls == NULL) {
2889 PyErr_Clear();
2890 retval = 0;
Guido van Rossum823649d2001-03-21 18:40:58 +00002891 }
Neil Schemenauer6b471292001-10-18 03:18:43 +00002892 else {
2893 retval = abstract_issubclass(icls, cls);
2894 Py_DECREF(icls);
2895 }
Guido van Rossum823649d2001-03-21 18:40:58 +00002896 }
Guido van Rossum823649d2001-03-21 18:40:58 +00002897
Guido van Rossum823649d2001-03-21 18:40:58 +00002898 return retval;
2899}
2900
2901int
Brett Cannon4f653312004-03-20 22:52:14 +00002902PyObject_IsInstance(PyObject *inst, PyObject *cls)
2903{
Christian Heimese247f002008-02-14 22:40:11 +00002904 static PyObject *name = NULL;
Guido van Rossumb5591132007-09-10 22:36:02 +00002905 PyObject *checker;
Raymond Hettinger9a47e622008-03-18 23:22:29 +00002906
2907 /* Quick test for an exact match */
Raymond Hettingerde48d842008-03-19 03:56:59 +00002908 if (Py_TYPE(inst) == (PyTypeObject *)cls)
Raymond Hettinger9a47e622008-03-18 23:22:29 +00002909 return 1;
2910
Antoine Pitrou0668c622008-08-26 22:42:08 +00002911 if (PyTuple_Check(cls)) {
2912 Py_ssize_t i;
2913 Py_ssize_t n;
2914 int r = 0;
2915
2916 if (Py_EnterRecursiveCall(" in __instancecheck__"))
2917 return -1;
2918 n = PyTuple_GET_SIZE(cls);
2919 for (i = 0; i < n; ++i) {
2920 PyObject *item = PyTuple_GET_ITEM(cls, i);
2921 r = PyObject_IsInstance(inst, item);
2922 if (r != 0)
2923 /* either found it, or got an error */
2924 break;
2925 }
2926 Py_LeaveRecursiveCall();
2927 return r;
2928 }
Christian Heimese247f002008-02-14 22:40:11 +00002929 if (name == NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002930 name = PyString_InternFromString("__instancecheck__");
Christian Heimese247f002008-02-14 22:40:11 +00002931 if (name == NULL)
2932 return -1;
2933 }
2934 checker = PyObject_GetAttr(cls, name);
Raymond Hettingerc71d2a92008-03-19 22:47:48 +00002935 if (checker == NULL && PyErr_Occurred())
2936 PyErr_Clear();
Guido van Rossumb5591132007-09-10 22:36:02 +00002937 if (checker != NULL) {
2938 PyObject *res;
2939 int ok = -1;
2940 if (Py_EnterRecursiveCall(" in __instancecheck__")) {
2941 Py_DECREF(checker);
2942 return ok;
2943 }
2944 res = PyObject_CallFunctionObjArgs(checker, inst, NULL);
2945 Py_LeaveRecursiveCall();
2946 Py_DECREF(checker);
2947 if (res != NULL) {
2948 ok = PyObject_IsTrue(res);
2949 Py_DECREF(res);
2950 }
2951 return ok;
2952 }
Antoine Pitrou0668c622008-08-26 22:42:08 +00002953 return recursive_isinstance(inst, cls);
Brett Cannon4f653312004-03-20 22:52:14 +00002954}
2955
2956static int
Antoine Pitrou0668c622008-08-26 22:42:08 +00002957recursive_issubclass(PyObject *derived, PyObject *cls)
Guido van Rossum823649d2001-03-21 18:40:58 +00002958{
2959 int retval;
2960
Antoine Pitrou0668c622008-08-26 22:42:08 +00002961 if (PyType_Check(cls) && PyType_Check(derived)) {
2962 /* Fast path (non-recursive) */
2963 return PyType_IsSubtype(
2964 (PyTypeObject *)derived, (PyTypeObject *)cls);
2965 }
Guido van Rossum823649d2001-03-21 18:40:58 +00002966 if (!PyClass_Check(derived) || !PyClass_Check(cls)) {
Guido van Rossumf6c9ba82003-02-10 16:05:43 +00002967 if (!check_class(derived,
2968 "issubclass() arg 1 must be a class"))
Neil Schemenauer6b471292001-10-18 03:18:43 +00002969 return -1;
Neil Schemenauer6b471292001-10-18 03:18:43 +00002970
Antoine Pitrou0668c622008-08-26 22:42:08 +00002971 if (!check_class(cls,
2972 "issubclass() arg 2 must be a class"
2973 " or tuple of classes"))
2974 return -1;
Neil Schemenauer6b471292001-10-18 03:18:43 +00002975 retval = abstract_issubclass(derived, cls);
Guido van Rossum823649d2001-03-21 18:40:58 +00002976 }
2977 else {
2978 /* shortcut */
2979 if (!(retval = (derived == cls)))
2980 retval = PyClass_IsSubclass(derived, cls);
2981 }
2982
2983 return retval;
2984}
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00002985
Brett Cannon4f653312004-03-20 22:52:14 +00002986int
2987PyObject_IsSubclass(PyObject *derived, PyObject *cls)
2988{
Christian Heimese247f002008-02-14 22:40:11 +00002989 static PyObject *name = NULL;
Guido van Rossumb5591132007-09-10 22:36:02 +00002990 PyObject *t, *v, *tb;
2991 PyObject *checker;
Christian Heimese247f002008-02-14 22:40:11 +00002992
Antoine Pitrou0668c622008-08-26 22:42:08 +00002993 if (PyTuple_Check(cls)) {
2994 Py_ssize_t i;
2995 Py_ssize_t n;
2996 int r = 0;
2997
2998 if (Py_EnterRecursiveCall(" in __subclasscheck__"))
2999 return -1;
3000 n = PyTuple_GET_SIZE(cls);
3001 for (i = 0; i < n; ++i) {
3002 PyObject *item = PyTuple_GET_ITEM(cls, i);
3003 r = PyObject_IsSubclass(derived, item);
3004 if (r != 0)
3005 /* either found it, or got an error */
3006 break;
3007 }
3008 Py_LeaveRecursiveCall();
3009 return r;
3010 }
Christian Heimese247f002008-02-14 22:40:11 +00003011 if (name == NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00003012 name = PyString_InternFromString("__subclasscheck__");
Christian Heimese247f002008-02-14 22:40:11 +00003013 if (name == NULL)
3014 return -1;
3015 }
Antoine Pitrou0668c622008-08-26 22:42:08 +00003016 PyErr_Fetch(&t, &v, &tb);
Christian Heimese247f002008-02-14 22:40:11 +00003017 checker = PyObject_GetAttr(cls, name);
Guido van Rossumb5591132007-09-10 22:36:02 +00003018 PyErr_Restore(t, v, tb);
3019 if (checker != NULL) {
3020 PyObject *res;
3021 int ok = -1;
Antoine Pitrou0668c622008-08-26 22:42:08 +00003022 if (Py_EnterRecursiveCall(" in __subclasscheck__")) {
3023 Py_DECREF(checker);
Guido van Rossumb5591132007-09-10 22:36:02 +00003024 return ok;
Antoine Pitrou0668c622008-08-26 22:42:08 +00003025 }
Guido van Rossumb5591132007-09-10 22:36:02 +00003026 res = PyObject_CallFunctionObjArgs(checker, derived, NULL);
3027 Py_LeaveRecursiveCall();
3028 Py_DECREF(checker);
3029 if (res != NULL) {
3030 ok = PyObject_IsTrue(res);
3031 Py_DECREF(res);
3032 }
3033 return ok;
3034 }
Antoine Pitrou0668c622008-08-26 22:42:08 +00003035 return recursive_issubclass(derived, cls);
3036}
3037
3038int
3039_PyObject_RealIsInstance(PyObject *inst, PyObject *cls)
3040{
3041 return recursive_isinstance(inst, cls);
3042}
3043
3044int
3045_PyObject_RealIsSubclass(PyObject *derived, PyObject *cls)
3046{
3047 return recursive_issubclass(derived, cls);
Brett Cannon4f653312004-03-20 22:52:14 +00003048}
3049
3050
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00003051PyObject *
3052PyObject_GetIter(PyObject *o)
3053{
3054 PyTypeObject *t = o->ob_type;
3055 getiterfunc f = NULL;
3056 if (PyType_HasFeature(t, Py_TPFLAGS_HAVE_ITER))
3057 f = t->tp_iter;
3058 if (f == NULL) {
3059 if (PySequence_Check(o))
Guido van Rossum213c7a62001-04-23 14:08:49 +00003060 return PySeqIter_New(o);
Georg Brandlccff7852006-06-18 22:17:29 +00003061 return type_error("'%.200s' object is not iterable", o);
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00003062 }
Guido van Rossum213c7a62001-04-23 14:08:49 +00003063 else {
3064 PyObject *res = (*f)(o);
3065 if (res != NULL && !PyIter_Check(res)) {
3066 PyErr_Format(PyExc_TypeError,
3067 "iter() returned non-iterator "
3068 "of type '%.100s'",
3069 res->ob_type->tp_name);
3070 Py_DECREF(res);
3071 res = NULL;
3072 }
3073 return res;
3074 }
3075}
3076
Tim Petersf4848da2001-05-05 00:14:56 +00003077/* Return next item.
3078 * If an error occurs, return NULL. PyErr_Occurred() will be true.
3079 * If the iteration terminates normally, return NULL and clear the
3080 * PyExc_StopIteration exception (if it was set). PyErr_Occurred()
3081 * will be false.
3082 * Else return the next object. PyErr_Occurred() will be false.
3083 */
Guido van Rossum213c7a62001-04-23 14:08:49 +00003084PyObject *
3085PyIter_Next(PyObject *iter)
3086{
Tim Petersf4848da2001-05-05 00:14:56 +00003087 PyObject *result;
Tim Petersf4848da2001-05-05 00:14:56 +00003088 result = (*iter->ob_type->tp_iternext)(iter);
3089 if (result == NULL &&
3090 PyErr_Occurred() &&
3091 PyErr_ExceptionMatches(PyExc_StopIteration))
3092 PyErr_Clear();
3093 return result;
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00003094}