blob: 5eb7b28facffef784c292b03bffe6e8be97fb6d3 [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);
Benjamin Peterson87e50062009-05-25 02:40:21 +0000114 if (hintmeth == NULL) {
115 if (PyErr_Occurred())
116 return -1;
117 else
118 return defaultvalue;
119 }
Benjamin Petersonaf1692a2009-05-09 16:36:39 +0000120 ro = PyObject_CallFunctionObjArgs(hintmeth, NULL);
121 Py_DECREF(hintmeth);
Raymond Hettingerb5163702009-02-02 21:50:13 +0000122 if (ro == NULL) {
Benjamin Petersona7dc9492009-05-09 19:03:05 +0000123 if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
124 !PyErr_ExceptionMatches(PyExc_AttributeError))
Benjamin Petersonaf1692a2009-05-09 16:36:39 +0000125 return -1;
Benjamin Petersonceea1632009-05-09 19:18:36 +0000126 PyErr_Clear();
Raymond Hettingerb5163702009-02-02 21:50:13 +0000127 return defaultvalue;
128 }
Mark Dickinsonb91d2f52009-02-08 13:58:10 +0000129 rv = PyLong_Check(ro) ? PyLong_AsSsize_t(ro) : defaultvalue;
Raymond Hettinger4e2f7142007-12-06 00:56:53 +0000130 Py_DECREF(ro);
Raymond Hettingerb5163702009-02-02 21:50:13 +0000131 return rv;
Raymond Hettinger6b27cda2005-09-24 21:23:05 +0000132}
133
Guido van Rossume15dee51995-07-18 14:12:02 +0000134PyObject *
Fred Drake79912472000-07-09 04:06:11 +0000135PyObject_GetItem(PyObject *o, PyObject *key)
Guido van Rossume15dee51995-07-18 14:12:02 +0000136{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000137 PyMappingMethods *m;
Guido van Rossume15dee51995-07-18 14:12:02 +0000138
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000139 if (o == NULL || key == NULL)
140 return null_error();
Guido van Rossume15dee51995-07-18 14:12:02 +0000141
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000142 m = o->ob_type->tp_as_mapping;
143 if (m && m->mp_subscript)
144 return m->mp_subscript(o, key);
Guido van Rossume15dee51995-07-18 14:12:02 +0000145
Guido van Rossum21308241998-08-13 16:44:44 +0000146 if (o->ob_type->tp_as_sequence) {
Neal Norwitz8a87f5d2006-08-12 17:03:09 +0000147 if (PyIndex_Check(key)) {
148 Py_ssize_t key_value;
149 key_value = PyNumber_AsSsize_t(key, PyExc_IndexError);
Andrew M. Kuchling0f223d22000-02-23 22:21:50 +0000150 if (key_value == -1 && PyErr_Occurred())
151 return NULL;
152 return PySequence_GetItem(o, key_value);
153 }
Guido van Rossum64585f62001-11-24 18:24:47 +0000154 else if (o->ob_type->tp_as_sequence->sq_item)
Georg Brandlccff7852006-06-18 22:17:29 +0000155 return type_error("sequence index must "
156 "be integer, not '%.200s'", key);
Guido van Rossum21308241998-08-13 16:44:44 +0000157 }
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000158
Georg Brandlf5fd5232009-04-18 08:26:21 +0000159 return type_error("'%.200s' object is not subscriptable", o);
Guido van Rossume15dee51995-07-18 14:12:02 +0000160}
161
162int
Fred Drake79912472000-07-09 04:06:11 +0000163PyObject_SetItem(PyObject *o, PyObject *key, PyObject *value)
Guido van Rossume15dee51995-07-18 14:12:02 +0000164{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000165 PyMappingMethods *m;
Guido van Rossume15dee51995-07-18 14:12:02 +0000166
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000167 if (o == NULL || key == NULL || value == NULL) {
168 null_error();
169 return -1;
170 }
171 m = o->ob_type->tp_as_mapping;
172 if (m && m->mp_ass_subscript)
173 return m->mp_ass_subscript(o, key, value);
Guido van Rossume15dee51995-07-18 14:12:02 +0000174
Guido van Rossum21308241998-08-13 16:44:44 +0000175 if (o->ob_type->tp_as_sequence) {
Neal Norwitz8a87f5d2006-08-12 17:03:09 +0000176 if (PyIndex_Check(key)) {
177 Py_ssize_t key_value;
178 key_value = PyNumber_AsSsize_t(key, PyExc_IndexError);
Andrew M. Kuchling0f223d22000-02-23 22:21:50 +0000179 if (key_value == -1 && PyErr_Occurred())
180 return -1;
181 return PySequence_SetItem(o, key_value, value);
182 }
Guido van Rossum64585f62001-11-24 18:24:47 +0000183 else if (o->ob_type->tp_as_sequence->sq_ass_item) {
Georg Brandlccff7852006-06-18 22:17:29 +0000184 type_error("sequence index must be "
185 "integer, not '%.200s'", key);
Guido van Rossum64585f62001-11-24 18:24:47 +0000186 return -1;
187 }
Guido van Rossum21308241998-08-13 16:44:44 +0000188 }
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000189
Georg Brandlccff7852006-06-18 22:17:29 +0000190 type_error("'%.200s' object does not support item assignment", o);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000191 return -1;
Guido van Rossume15dee51995-07-18 14:12:02 +0000192}
193
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000194int
Fred Drake79912472000-07-09 04:06:11 +0000195PyObject_DelItem(PyObject *o, PyObject *key)
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000196{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000197 PyMappingMethods *m;
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000198
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000199 if (o == NULL || key == NULL) {
200 null_error();
201 return -1;
202 }
203 m = o->ob_type->tp_as_mapping;
204 if (m && m->mp_ass_subscript)
205 return m->mp_ass_subscript(o, key, (PyObject*)NULL);
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000206
Guido van Rossum21308241998-08-13 16:44:44 +0000207 if (o->ob_type->tp_as_sequence) {
Neal Norwitz8a87f5d2006-08-12 17:03:09 +0000208 if (PyIndex_Check(key)) {
209 Py_ssize_t key_value;
210 key_value = PyNumber_AsSsize_t(key, PyExc_IndexError);
Andrew M. Kuchling0f223d22000-02-23 22:21:50 +0000211 if (key_value == -1 && PyErr_Occurred())
212 return -1;
213 return PySequence_DelItem(o, key_value);
214 }
Guido van Rossum64585f62001-11-24 18:24:47 +0000215 else if (o->ob_type->tp_as_sequence->sq_ass_item) {
Georg Brandlccff7852006-06-18 22:17:29 +0000216 type_error("sequence index must be "
217 "integer, not '%.200s'", key);
Guido van Rossum64585f62001-11-24 18:24:47 +0000218 return -1;
219 }
Guido van Rossum21308241998-08-13 16:44:44 +0000220 }
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000221
Georg Brandlccff7852006-06-18 22:17:29 +0000222 type_error("'%.200s' object does not support item deletion", o);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000223 return -1;
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000224}
225
Martin v. Löwisb0d71d02002-01-05 10:50:30 +0000226int
227PyObject_DelItemString(PyObject *o, char *key)
228{
229 PyObject *okey;
230 int ret;
231
232 if (o == NULL || key == NULL) {
233 null_error();
234 return -1;
235 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000236 okey = PyString_FromString(key);
Martin v. Löwisb0d71d02002-01-05 10:50:30 +0000237 if (okey == NULL)
238 return -1;
239 ret = PyObject_DelItem(o, okey);
240 Py_DECREF(okey);
241 return ret;
242}
243
Brett Cannonea229bd2006-06-06 18:08:16 +0000244int
245PyObject_AsCharBuffer(PyObject *obj,
Guido van Rossum4c08d552000-03-10 22:55:18 +0000246 const char **buffer,
Martin v. Löwis18e16552006-02-15 17:27:45 +0000247 Py_ssize_t *buffer_len)
Guido van Rossum4c08d552000-03-10 22:55:18 +0000248{
249 PyBufferProcs *pb;
Martin v. Löwis15e62742006-02-27 16:46:16 +0000250 char *pp;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000251 Py_ssize_t len;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000252
253 if (obj == NULL || buffer == NULL || buffer_len == NULL) {
254 null_error();
255 return -1;
256 }
257 pb = obj->ob_type->tp_as_buffer;
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000258 if (pb == NULL ||
Guido van Rossum4c08d552000-03-10 22:55:18 +0000259 pb->bf_getcharbuffer == NULL ||
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000260 pb->bf_getsegcount == NULL) {
Guido van Rossum4c08d552000-03-10 22:55:18 +0000261 PyErr_SetString(PyExc_TypeError,
262 "expected a character buffer object");
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000263 return -1;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000264 }
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000265 if ((*pb->bf_getsegcount)(obj,NULL) != 1) {
Guido van Rossum4c08d552000-03-10 22:55:18 +0000266 PyErr_SetString(PyExc_TypeError,
267 "expected a single-segment buffer object");
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000268 return -1;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000269 }
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000270 len = (*pb->bf_getcharbuffer)(obj, 0, &pp);
Guido van Rossum4c08d552000-03-10 22:55:18 +0000271 if (len < 0)
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000272 return -1;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000273 *buffer = pp;
274 *buffer_len = len;
275 return 0;
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000276}
Guido van Rossum4c08d552000-03-10 22:55:18 +0000277
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000278int
279PyObject_CheckReadBuffer(PyObject *obj)
280{
281 PyBufferProcs *pb = obj->ob_type->tp_as_buffer;
282
283 if (pb == NULL ||
284 pb->bf_getreadbuffer == NULL ||
285 pb->bf_getsegcount == NULL ||
286 (*pb->bf_getsegcount)(obj, NULL) != 1)
287 return 0;
288 return 1;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000289}
290
291int PyObject_AsReadBuffer(PyObject *obj,
292 const void **buffer,
Martin v. Löwis18e16552006-02-15 17:27:45 +0000293 Py_ssize_t *buffer_len)
Guido van Rossum4c08d552000-03-10 22:55:18 +0000294{
295 PyBufferProcs *pb;
296 void *pp;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000297 Py_ssize_t len;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000298
299 if (obj == NULL || buffer == NULL || buffer_len == NULL) {
300 null_error();
301 return -1;
302 }
303 pb = obj->ob_type->tp_as_buffer;
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000304 if (pb == NULL ||
Guido van Rossum4c08d552000-03-10 22:55:18 +0000305 pb->bf_getreadbuffer == NULL ||
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000306 pb->bf_getsegcount == NULL) {
Guido van Rossum4c08d552000-03-10 22:55:18 +0000307 PyErr_SetString(PyExc_TypeError,
308 "expected a readable buffer object");
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000309 return -1;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000310 }
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000311 if ((*pb->bf_getsegcount)(obj, NULL) != 1) {
Guido van Rossum4c08d552000-03-10 22:55:18 +0000312 PyErr_SetString(PyExc_TypeError,
313 "expected a single-segment buffer object");
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000314 return -1;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000315 }
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000316 len = (*pb->bf_getreadbuffer)(obj, 0, &pp);
Guido van Rossum4c08d552000-03-10 22:55:18 +0000317 if (len < 0)
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000318 return -1;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000319 *buffer = pp;
320 *buffer_len = len;
321 return 0;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000322}
323
324int PyObject_AsWriteBuffer(PyObject *obj,
325 void **buffer,
Martin v. Löwis18e16552006-02-15 17:27:45 +0000326 Py_ssize_t *buffer_len)
Guido van Rossum4c08d552000-03-10 22:55:18 +0000327{
328 PyBufferProcs *pb;
329 void*pp;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000330 Py_ssize_t len;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000331
332 if (obj == NULL || buffer == NULL || buffer_len == NULL) {
333 null_error();
334 return -1;
335 }
336 pb = obj->ob_type->tp_as_buffer;
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000337 if (pb == NULL ||
Guido van Rossum4c08d552000-03-10 22:55:18 +0000338 pb->bf_getwritebuffer == NULL ||
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000339 pb->bf_getsegcount == NULL) {
Guido van Rossum4c08d552000-03-10 22:55:18 +0000340 PyErr_SetString(PyExc_TypeError,
341 "expected a writeable buffer object");
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000342 return -1;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000343 }
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000344 if ((*pb->bf_getsegcount)(obj, NULL) != 1) {
Guido van Rossum4c08d552000-03-10 22:55:18 +0000345 PyErr_SetString(PyExc_TypeError,
346 "expected a single-segment buffer object");
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000347 return -1;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000348 }
349 len = (*pb->bf_getwritebuffer)(obj,0,&pp);
350 if (len < 0)
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000351 return -1;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000352 *buffer = pp;
353 *buffer_len = len;
354 return 0;
Guido van Rossum4c08d552000-03-10 22:55:18 +0000355}
356
Travis E. Oliphant3781aef2008-03-18 04:44:57 +0000357/* Buffer C-API for Python 3.0 */
358
359int
360PyObject_GetBuffer(PyObject *obj, Py_buffer *view, int flags)
361{
362 if (!PyObject_CheckBuffer(obj)) {
363 PyErr_Format(PyExc_TypeError,
364 "'%100s' does not have the buffer interface",
365 Py_TYPE(obj)->tp_name);
366 return -1;
367 }
368 return (*(obj->ob_type->tp_as_buffer->bf_getbuffer))(obj, view, flags);
369}
370
Travis E. Oliphant3781aef2008-03-18 04:44:57 +0000371static int
372_IsFortranContiguous(Py_buffer *view)
373{
374 Py_ssize_t sd, dim;
375 int i;
376
377 if (view->ndim == 0) return 1;
378 if (view->strides == NULL) return (view->ndim == 1);
379
380 sd = view->itemsize;
381 if (view->ndim == 1) return (view->shape[0] == 1 ||
382 sd == view->strides[0]);
383 for (i=0; i<view->ndim; i++) {
384 dim = view->shape[i];
385 if (dim == 0) return 1;
386 if (view->strides[i] != sd) return 0;
387 sd *= dim;
388 }
389 return 1;
390}
391
392static int
393_IsCContiguous(Py_buffer *view)
394{
395 Py_ssize_t sd, dim;
396 int i;
397
398 if (view->ndim == 0) return 1;
399 if (view->strides == NULL) return 1;
400
401 sd = view->itemsize;
402 if (view->ndim == 1) return (view->shape[0] == 1 ||
403 sd == view->strides[0]);
404 for (i=view->ndim-1; i>=0; i--) {
405 dim = view->shape[i];
406 if (dim == 0) return 1;
407 if (view->strides[i] != sd) return 0;
408 sd *= dim;
409 }
410 return 1;
411}
412
413int
414PyBuffer_IsContiguous(Py_buffer *view, char fort)
415{
416
417 if (view->suboffsets != NULL) return 0;
418
419 if (fort == 'C')
420 return _IsCContiguous(view);
421 else if (fort == 'F')
422 return _IsFortranContiguous(view);
423 else if (fort == 'A')
424 return (_IsCContiguous(view) || _IsFortranContiguous(view));
425 return 0;
426}
427
428
429void*
430PyBuffer_GetPointer(Py_buffer *view, Py_ssize_t *indices)
431{
432 char* pointer;
433 int i;
434 pointer = (char *)view->buf;
435 for (i = 0; i < view->ndim; i++) {
436 pointer += view->strides[i]*indices[i];
437 if ((view->suboffsets != NULL) && (view->suboffsets[i] >= 0)) {
438 pointer = *((char**)pointer) + view->suboffsets[i];
439 }
440 }
441 return (void*)pointer;
442}
443
444
Antoine Pitrou789be0c2009-04-02 21:18:34 +0000445void
Travis E. Oliphant3781aef2008-03-18 04:44:57 +0000446_add_one_to_index_F(int nd, Py_ssize_t *index, Py_ssize_t *shape)
447{
448 int k;
449
450 for (k=0; k<nd; k++) {
451 if (index[k] < shape[k]-1) {
452 index[k]++;
453 break;
454 }
455 else {
456 index[k] = 0;
457 }
458 }
459}
460
Antoine Pitrou789be0c2009-04-02 21:18:34 +0000461void
Travis E. Oliphant3781aef2008-03-18 04:44:57 +0000462_add_one_to_index_C(int nd, Py_ssize_t *index, Py_ssize_t *shape)
463{
464 int k;
465
466 for (k=nd-1; k>=0; k--) {
467 if (index[k] < shape[k]-1) {
468 index[k]++;
469 break;
470 }
471 else {
472 index[k] = 0;
473 }
474 }
475}
476
477 /* view is not checked for consistency in either of these. It is
478 assumed that the size of the buffer is view->len in
479 view->len / view->itemsize elements.
480 */
481
482int
483PyBuffer_ToContiguous(void *buf, Py_buffer *view, Py_ssize_t len, char fort)
484{
485 int k;
486 void (*addone)(int, Py_ssize_t *, Py_ssize_t *);
487 Py_ssize_t *indices, elements;
488 char *dest, *ptr;
489
490 if (len > view->len) {
491 len = view->len;
492 }
493
494 if (PyBuffer_IsContiguous(view, fort)) {
495 /* simplest copy is all that is needed */
496 memcpy(buf, view->buf, len);
497 return 0;
498 }
499
500 /* Otherwise a more elaborate scheme is needed */
501
502 /* XXX(nnorwitz): need to check for overflow! */
503 indices = (Py_ssize_t *)PyMem_Malloc(sizeof(Py_ssize_t)*(view->ndim));
504 if (indices == NULL) {
505 PyErr_NoMemory();
506 return -1;
507 }
508 for (k=0; k<view->ndim;k++) {
509 indices[k] = 0;
510 }
511
512 if (fort == 'F') {
513 addone = _add_one_to_index_F;
514 }
515 else {
516 addone = _add_one_to_index_C;
517 }
518 dest = buf;
519 /* XXX : This is not going to be the fastest code in the world
520 several optimizations are possible.
521 */
522 elements = len / view->itemsize;
523 while (elements--) {
524 addone(view->ndim, indices, view->shape);
525 ptr = PyBuffer_GetPointer(view, indices);
526 memcpy(dest, ptr, view->itemsize);
527 dest += view->itemsize;
528 }
529 PyMem_Free(indices);
530 return 0;
531}
532
533int
534PyBuffer_FromContiguous(Py_buffer *view, void *buf, Py_ssize_t len, char fort)
535{
536 int k;
537 void (*addone)(int, Py_ssize_t *, Py_ssize_t *);
538 Py_ssize_t *indices, elements;
539 char *src, *ptr;
540
541 if (len > view->len) {
542 len = view->len;
543 }
544
545 if (PyBuffer_IsContiguous(view, fort)) {
546 /* simplest copy is all that is needed */
547 memcpy(view->buf, buf, len);
548 return 0;
549 }
550
551 /* Otherwise a more elaborate scheme is needed */
552
553 /* XXX(nnorwitz): need to check for overflow! */
554 indices = (Py_ssize_t *)PyMem_Malloc(sizeof(Py_ssize_t)*(view->ndim));
555 if (indices == NULL) {
556 PyErr_NoMemory();
557 return -1;
558 }
559 for (k=0; k<view->ndim;k++) {
560 indices[k] = 0;
561 }
562
563 if (fort == 'F') {
564 addone = _add_one_to_index_F;
565 }
566 else {
567 addone = _add_one_to_index_C;
568 }
569 src = buf;
570 /* XXX : This is not going to be the fastest code in the world
571 several optimizations are possible.
572 */
573 elements = len / view->itemsize;
574 while (elements--) {
575 addone(view->ndim, indices, view->shape);
576 ptr = PyBuffer_GetPointer(view, indices);
577 memcpy(ptr, src, view->itemsize);
578 src += view->itemsize;
579 }
580
581 PyMem_Free(indices);
582 return 0;
583}
584
585int PyObject_CopyData(PyObject *dest, PyObject *src)
586{
587 Py_buffer view_dest, view_src;
588 int k;
589 Py_ssize_t *indices, elements;
590 char *dptr, *sptr;
591
592 if (!PyObject_CheckBuffer(dest) ||
593 !PyObject_CheckBuffer(src)) {
594 PyErr_SetString(PyExc_TypeError,
595 "both destination and source must have the "\
596 "buffer interface");
597 return -1;
598 }
599
600 if (PyObject_GetBuffer(dest, &view_dest, PyBUF_FULL) != 0) return -1;
601 if (PyObject_GetBuffer(src, &view_src, PyBUF_FULL_RO) != 0) {
Martin v. Löwisf91d46a2008-08-12 14:49:50 +0000602 PyBuffer_Release(&view_dest);
Travis E. Oliphant3781aef2008-03-18 04:44:57 +0000603 return -1;
604 }
605
606 if (view_dest.len < view_src.len) {
607 PyErr_SetString(PyExc_BufferError,
608 "destination is too small to receive data from source");
Martin v. Löwisf91d46a2008-08-12 14:49:50 +0000609 PyBuffer_Release(&view_dest);
610 PyBuffer_Release(&view_src);
Travis E. Oliphant3781aef2008-03-18 04:44:57 +0000611 return -1;
612 }
613
614 if ((PyBuffer_IsContiguous(&view_dest, 'C') &&
615 PyBuffer_IsContiguous(&view_src, 'C')) ||
616 (PyBuffer_IsContiguous(&view_dest, 'F') &&
617 PyBuffer_IsContiguous(&view_src, 'F'))) {
618 /* simplest copy is all that is needed */
619 memcpy(view_dest.buf, view_src.buf, view_src.len);
Martin v. Löwisf91d46a2008-08-12 14:49:50 +0000620 PyBuffer_Release(&view_dest);
621 PyBuffer_Release(&view_src);
Travis E. Oliphant3781aef2008-03-18 04:44:57 +0000622 return 0;
623 }
624
625 /* Otherwise a more elaborate copy scheme is needed */
626
627 /* XXX(nnorwitz): need to check for overflow! */
628 indices = (Py_ssize_t *)PyMem_Malloc(sizeof(Py_ssize_t)*view_src.ndim);
629 if (indices == NULL) {
630 PyErr_NoMemory();
Martin v. Löwisf91d46a2008-08-12 14:49:50 +0000631 PyBuffer_Release(&view_dest);
632 PyBuffer_Release(&view_src);
Travis E. Oliphant3781aef2008-03-18 04:44:57 +0000633 return -1;
634 }
635 for (k=0; k<view_src.ndim;k++) {
636 indices[k] = 0;
637 }
638 elements = 1;
639 for (k=0; k<view_src.ndim; k++) {
640 /* XXX(nnorwitz): can this overflow? */
641 elements *= view_src.shape[k];
642 }
643 while (elements--) {
644 _add_one_to_index_C(view_src.ndim, indices, view_src.shape);
645 dptr = PyBuffer_GetPointer(&view_dest, indices);
646 sptr = PyBuffer_GetPointer(&view_src, indices);
647 memcpy(dptr, sptr, view_src.itemsize);
648 }
649 PyMem_Free(indices);
Martin v. Löwisf91d46a2008-08-12 14:49:50 +0000650 PyBuffer_Release(&view_dest);
651 PyBuffer_Release(&view_src);
Travis E. Oliphant3781aef2008-03-18 04:44:57 +0000652 return 0;
653}
654
655void
656PyBuffer_FillContiguousStrides(int nd, Py_ssize_t *shape,
657 Py_ssize_t *strides, int itemsize,
658 char fort)
659{
660 int k;
661 Py_ssize_t sd;
662
663 sd = itemsize;
664 if (fort == 'F') {
665 for (k=0; k<nd; k++) {
666 strides[k] = sd;
667 sd *= shape[k];
668 }
669 }
670 else {
671 for (k=nd-1; k>=0; k--) {
672 strides[k] = sd;
673 sd *= shape[k];
674 }
675 }
676 return;
677}
678
679int
Martin v. Löwisf91d46a2008-08-12 14:49:50 +0000680PyBuffer_FillInfo(Py_buffer *view, PyObject *obj, void *buf, Py_ssize_t len,
Travis E. Oliphant3781aef2008-03-18 04:44:57 +0000681 int readonly, int flags)
682{
683 if (view == NULL) return 0;
Travis E. Oliphant3781aef2008-03-18 04:44:57 +0000684 if (((flags & PyBUF_WRITABLE) == PyBUF_WRITABLE) &&
685 (readonly == 1)) {
686 PyErr_SetString(PyExc_BufferError,
687 "Object is not writable.");
688 return -1;
689 }
690
Martin v. Löwisf91d46a2008-08-12 14:49:50 +0000691 view->obj = obj;
Martin v. Löwis241b8342008-08-14 15:54:27 +0000692 if (obj)
693 Py_INCREF(obj);
Travis E. Oliphant3781aef2008-03-18 04:44:57 +0000694 view->buf = buf;
695 view->len = len;
696 view->readonly = readonly;
697 view->itemsize = 1;
698 view->format = NULL;
699 if ((flags & PyBUF_FORMAT) == PyBUF_FORMAT)
700 view->format = "B";
701 view->ndim = 1;
702 view->shape = NULL;
703 if ((flags & PyBUF_ND) == PyBUF_ND)
704 view->shape = &(view->len);
705 view->strides = NULL;
706 if ((flags & PyBUF_STRIDES) == PyBUF_STRIDES)
707 view->strides = &(view->itemsize);
708 view->suboffsets = NULL;
709 view->internal = NULL;
710 return 0;
711}
712
Martin v. Löwisf91d46a2008-08-12 14:49:50 +0000713void
714PyBuffer_Release(Py_buffer *view)
715{
716 PyObject *obj = view->obj;
Martin v. Löwis64034f92008-08-14 20:12:06 +0000717 if (obj && Py_TYPE(obj)->tp_as_buffer && Py_TYPE(obj)->tp_as_buffer->bf_releasebuffer)
718 Py_TYPE(obj)->tp_as_buffer->bf_releasebuffer(obj, view);
719 Py_XDECREF(obj);
Martin v. Löwis241b8342008-08-14 15:54:27 +0000720 view->obj = NULL;
Martin v. Löwisf91d46a2008-08-12 14:49:50 +0000721}
722
Eric Smitha9f7d622008-02-17 19:46:49 +0000723PyObject *
724PyObject_Format(PyObject* obj, PyObject *format_spec)
725{
726 static PyObject * str__format__ = NULL;
727 PyObject *empty = NULL;
728 PyObject *result = NULL;
Benjamin Peterson78821dd2009-01-25 17:15:10 +0000729#ifdef Py_USING_UNICODE
Eric Smitha9f7d622008-02-17 19:46:49 +0000730 int spec_is_unicode;
731 int result_is_unicode;
Benjamin Peterson78821dd2009-01-25 17:15:10 +0000732#endif
Eric Smitha9f7d622008-02-17 19:46:49 +0000733
734 /* Initialize cached value */
735 if (str__format__ == NULL) {
736 /* Initialize static variable needed by _PyType_Lookup */
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000737 str__format__ = PyString_InternFromString("__format__");
Eric Smitha9f7d622008-02-17 19:46:49 +0000738 if (str__format__ == NULL)
739 goto done;
740 }
741
742 /* If no format_spec is provided, use an empty string */
743 if (format_spec == NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000744 empty = PyString_FromStringAndSize(NULL, 0);
Eric Smitha9f7d622008-02-17 19:46:49 +0000745 format_spec = empty;
746 }
747
748 /* Check the format_spec type, and make sure it's str or unicode */
Hirokazu Yamamoto1e234e82009-01-25 17:46:48 +0000749#ifdef Py_USING_UNICODE
Eric Smitha9f7d622008-02-17 19:46:49 +0000750 if (PyUnicode_Check(format_spec))
751 spec_is_unicode = 1;
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000752 else if (PyString_Check(format_spec))
Eric Smitha9f7d622008-02-17 19:46:49 +0000753 spec_is_unicode = 0;
754 else {
Benjamin Peterson78821dd2009-01-25 17:15:10 +0000755#else
756 if (!PyString_Check(format_spec)) {
757#endif
Eric Smitha9f7d622008-02-17 19:46:49 +0000758 PyErr_Format(PyExc_TypeError,
759 "format expects arg 2 to be string "
760 "or unicode, not %.100s", Py_TYPE(format_spec)->tp_name);
761 goto done;
762 }
763
764 /* Make sure the type is initialized. float gets initialized late */
765 if (Py_TYPE(obj)->tp_dict == NULL)
766 if (PyType_Ready(Py_TYPE(obj)) < 0)
767 goto done;
768
769 /* Check for a __format__ method and call it. */
770 if (PyInstance_Check(obj)) {
771 /* We're an instance of a classic class */
772 PyObject *bound_method = PyObject_GetAttr(obj,
773 str__format__);
774 if (bound_method != NULL) {
775 result = PyObject_CallFunctionObjArgs(bound_method,
776 format_spec,
777 NULL);
778 Py_DECREF(bound_method);
779 } else {
780 PyObject *self_as_str;
781 PyObject *format_method;
782
783 PyErr_Clear();
784 /* Per the PEP, convert to str (or unicode,
785 depending on the type of the format
786 specifier). For new-style classes, this
787 logic is done by object.__format__(). */
Benjamin Peterson78821dd2009-01-25 17:15:10 +0000788#ifdef Py_USING_UNICODE
Eric Smitha9f7d622008-02-17 19:46:49 +0000789 if (spec_is_unicode)
790 self_as_str = PyObject_Unicode(obj);
791 else
Benjamin Peterson78821dd2009-01-25 17:15:10 +0000792#endif
Eric Smitha9f7d622008-02-17 19:46:49 +0000793 self_as_str = PyObject_Str(obj);
794 if (self_as_str == NULL)
795 goto done;
796
797 /* Then call str.__format__ on that result */
798 format_method = PyObject_GetAttr(self_as_str,
799 str__format__);
800 if (format_method == NULL) {
801 Py_DECREF(self_as_str);
802 goto done;
803 }
804 result = PyObject_CallFunctionObjArgs(format_method,
805 format_spec,
806 NULL);
807 Py_DECREF(self_as_str);
808 Py_DECREF(format_method);
809 if (result == NULL)
810 goto done;
811 }
812 } else {
813 /* Not an instance of a classic class, use the code
814 from py3k */
815
816 /* Find the (unbound!) __format__ method (a borrowed
817 reference) */
818 PyObject *method = _PyType_Lookup(Py_TYPE(obj),
819 str__format__);
820 if (method == NULL) {
821 PyErr_Format(PyExc_TypeError,
822 "Type %.100s doesn't define __format__",
823 Py_TYPE(obj)->tp_name);
824 goto done;
825 }
826 /* And call it, binding it to the value */
827 result = PyObject_CallFunctionObjArgs(method, obj,
828 format_spec, NULL);
829 }
830
831 if (result == NULL)
832 goto done;
833
834 /* Check the result type, and make sure it's str or unicode */
Benjamin Peterson78821dd2009-01-25 17:15:10 +0000835#ifdef Py_USING_UNICODE
Eric Smitha9f7d622008-02-17 19:46:49 +0000836 if (PyUnicode_Check(result))
837 result_is_unicode = 1;
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000838 else if (PyString_Check(result))
Eric Smitha9f7d622008-02-17 19:46:49 +0000839 result_is_unicode = 0;
840 else {
Benjamin Peterson78821dd2009-01-25 17:15:10 +0000841#else
842 if (!PyString_Check(result)) {
843#endif
Eric Smitha9f7d622008-02-17 19:46:49 +0000844 PyErr_Format(PyExc_TypeError,
845 "%.100s.__format__ must return string or "
846 "unicode, not %.100s", Py_TYPE(obj)->tp_name,
847 Py_TYPE(result)->tp_name);
848 Py_DECREF(result);
849 result = NULL;
850 goto done;
851 }
852
853 /* Convert to unicode, if needed. Required if spec is unicode
854 and result is str */
Benjamin Peterson78821dd2009-01-25 17:15:10 +0000855#ifdef Py_USING_UNICODE
Eric Smitha9f7d622008-02-17 19:46:49 +0000856 if (spec_is_unicode && !result_is_unicode) {
857 PyObject *tmp = PyObject_Unicode(result);
858 /* This logic works whether or not tmp is NULL */
859 Py_DECREF(result);
860 result = tmp;
861 }
Benjamin Peterson78821dd2009-01-25 17:15:10 +0000862#endif
Eric Smitha9f7d622008-02-17 19:46:49 +0000863
864done:
865 Py_XDECREF(empty);
866 return result;
867}
868
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000869/* Operations on numbers */
870
871int
Fred Drake79912472000-07-09 04:06:11 +0000872PyNumber_Check(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +0000873{
Guido van Rossum6921eca2003-02-18 16:36:28 +0000874 return o && o->ob_type->tp_as_number &&
875 (o->ob_type->tp_as_number->nb_int ||
876 o->ob_type->tp_as_number->nb_float);
Guido van Rossume15dee51995-07-18 14:12:02 +0000877}
878
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000879/* Binary operators */
Guido van Rossume15dee51995-07-18 14:12:02 +0000880
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000881/* New style number protocol support */
Guido van Rossume15dee51995-07-18 14:12:02 +0000882
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000883#define NB_SLOT(x) offsetof(PyNumberMethods, x)
884#define NB_BINOP(nb_methods, slot) \
Neil Schemenauerb808c5c2002-11-24 01:34:49 +0000885 (*(binaryfunc*)(& ((char*)nb_methods)[slot]))
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000886#define NB_TERNOP(nb_methods, slot) \
Neil Schemenauerb808c5c2002-11-24 01:34:49 +0000887 (*(ternaryfunc*)(& ((char*)nb_methods)[slot]))
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000888
889/*
890 Calling scheme used for binary operations:
891
892 v w Action
893 -------------------------------------------------------------------
Guido van Rossum4bb1e362001-09-28 23:49:48 +0000894 new new w.op(v,w)[*], v.op(v,w), w.op(v,w)
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000895 new old v.op(v,w), coerce(v,w), v.op(v,w)
896 old new w.op(v,w), coerce(v,w), v.op(v,w)
897 old old coerce(v,w), v.op(v,w)
898
Guido van Rossum4bb1e362001-09-28 23:49:48 +0000899 [*] only when v->ob_type != w->ob_type && w->ob_type is a subclass of
900 v->ob_type
901
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000902 Legend:
903 -------
904 * new == new style number
905 * old == old style number
906 * Action indicates the order in which operations are tried until either
907 a valid result is produced or an error occurs.
908
909 */
910
911static PyObject *
912binary_op1(PyObject *v, PyObject *w, const int op_slot)
Guido van Rossume15dee51995-07-18 14:12:02 +0000913{
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000914 PyObject *x;
Guido van Rossum4bb1e362001-09-28 23:49:48 +0000915 binaryfunc slotv = NULL;
916 binaryfunc slotw = NULL;
917
918 if (v->ob_type->tp_as_number != NULL && NEW_STYLE_NUMBER(v))
Neil Schemenauerb808c5c2002-11-24 01:34:49 +0000919 slotv = NB_BINOP(v->ob_type->tp_as_number, op_slot);
Guido van Rossum4bb1e362001-09-28 23:49:48 +0000920 if (w->ob_type != v->ob_type &&
921 w->ob_type->tp_as_number != NULL && NEW_STYLE_NUMBER(w)) {
Neil Schemenauerb808c5c2002-11-24 01:34:49 +0000922 slotw = NB_BINOP(w->ob_type->tp_as_number, op_slot);
Guido van Rossum4bb1e362001-09-28 23:49:48 +0000923 if (slotw == slotv)
924 slotw = NULL;
Guido van Rossume15dee51995-07-18 14:12:02 +0000925 }
Guido van Rossum4bb1e362001-09-28 23:49:48 +0000926 if (slotv) {
Guido van Rossum89c42642001-10-01 17:10:18 +0000927 if (slotw && PyType_IsSubtype(w->ob_type, v->ob_type)) {
928 x = slotw(v, w);
929 if (x != Py_NotImplemented)
930 return x;
931 Py_DECREF(x); /* can't do it */
932 slotw = NULL;
933 }
Guido van Rossum4bb1e362001-09-28 23:49:48 +0000934 x = slotv(v, w);
935 if (x != Py_NotImplemented)
936 return x;
937 Py_DECREF(x); /* can't do it */
938 }
939 if (slotw) {
940 x = slotw(v, w);
941 if (x != Py_NotImplemented)
942 return x;
943 Py_DECREF(x); /* can't do it */
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000944 }
945 if (!NEW_STYLE_NUMBER(v) || !NEW_STYLE_NUMBER(w)) {
946 int err = PyNumber_CoerceEx(&v, &w);
947 if (err < 0) {
948 return NULL;
949 }
950 if (err == 0) {
951 PyNumberMethods *mv = v->ob_type->tp_as_number;
952 if (mv) {
Guido van Rossum4bb1e362001-09-28 23:49:48 +0000953 binaryfunc slot;
Neil Schemenauerb808c5c2002-11-24 01:34:49 +0000954 slot = NB_BINOP(mv, op_slot);
Guido van Rossum4bb1e362001-09-28 23:49:48 +0000955 if (slot) {
Neal Norwitz0c6e2f12006-01-08 06:13:44 +0000956 x = slot(v, w);
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000957 Py_DECREF(v);
958 Py_DECREF(w);
959 return x;
960 }
961 }
962 /* CoerceEx incremented the reference counts */
963 Py_DECREF(v);
964 Py_DECREF(w);
965 }
966 }
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000967 Py_INCREF(Py_NotImplemented);
968 return Py_NotImplemented;
969}
Guido van Rossum77660912002-04-16 16:32:50 +0000970
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000971static PyObject *
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +0000972binop_type_error(PyObject *v, PyObject *w, const char *op_name)
973{
974 PyErr_Format(PyExc_TypeError,
Georg Brandlccff7852006-06-18 22:17:29 +0000975 "unsupported operand type(s) for %.100s: "
976 "'%.100s' and '%.100s'",
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +0000977 op_name,
978 v->ob_type->tp_name,
979 w->ob_type->tp_name);
980 return NULL;
981}
982
983static PyObject *
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000984binary_op(PyObject *v, PyObject *w, const int op_slot, const char *op_name)
985{
986 PyObject *result = binary_op1(v, w, op_slot);
987 if (result == Py_NotImplemented) {
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +0000988 Py_DECREF(result);
989 return binop_type_error(v, w, op_name);
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000990 }
991 return result;
Guido van Rossume15dee51995-07-18 14:12:02 +0000992}
993
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000994
995/*
996 Calling scheme used for ternary operations:
997
Guido van Rossum84675ac2001-09-29 01:05:03 +0000998 *** In some cases, w.op is called before v.op; see binary_op1. ***
999
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001000 v w z Action
1001 -------------------------------------------------------------------
1002 new new new v.op(v,w,z), w.op(v,w,z), z.op(v,w,z)
1003 new old new v.op(v,w,z), z.op(v,w,z), coerce(v,w,z), v.op(v,w,z)
1004 old new new w.op(v,w,z), z.op(v,w,z), coerce(v,w,z), v.op(v,w,z)
1005 old old new z.op(v,w,z), coerce(v,w,z), v.op(v,w,z)
1006 new new old v.op(v,w,z), w.op(v,w,z), coerce(v,w,z), v.op(v,w,z)
1007 new old old v.op(v,w,z), coerce(v,w,z), v.op(v,w,z)
1008 old new old w.op(v,w,z), coerce(v,w,z), v.op(v,w,z)
1009 old old old coerce(v,w,z), v.op(v,w,z)
1010
1011 Legend:
1012 -------
1013 * new == new style number
1014 * old == old style number
1015 * Action indicates the order in which operations are tried until either
1016 a valid result is produced or an error occurs.
1017 * coerce(v,w,z) actually does: coerce(v,w), coerce(v,z), coerce(w,z) and
1018 only if z != Py_None; if z == Py_None, then it is treated as absent
1019 variable and only coerce(v,w) is tried.
1020
1021 */
1022
1023static PyObject *
1024ternary_op(PyObject *v,
1025 PyObject *w,
1026 PyObject *z,
1027 const int op_slot,
1028 const char *op_name)
Guido van Rossume15dee51995-07-18 14:12:02 +00001029{
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001030 PyNumberMethods *mv, *mw, *mz;
Guido van Rossum84675ac2001-09-29 01:05:03 +00001031 PyObject *x = NULL;
1032 ternaryfunc slotv = NULL;
1033 ternaryfunc slotw = NULL;
1034 ternaryfunc slotz = NULL;
Guido van Rossum77660912002-04-16 16:32:50 +00001035
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001036 mv = v->ob_type->tp_as_number;
Guido van Rossum4bb1e362001-09-28 23:49:48 +00001037 mw = w->ob_type->tp_as_number;
Guido van Rossum84675ac2001-09-29 01:05:03 +00001038 if (mv != NULL && NEW_STYLE_NUMBER(v))
Neil Schemenauerb808c5c2002-11-24 01:34:49 +00001039 slotv = NB_TERNOP(mv, op_slot);
Guido van Rossum84675ac2001-09-29 01:05:03 +00001040 if (w->ob_type != v->ob_type &&
Raymond Hettingerc2e095f2002-12-07 10:05:27 +00001041 mw != NULL && NEW_STYLE_NUMBER(w)) {
Neil Schemenauerb808c5c2002-11-24 01:34:49 +00001042 slotw = NB_TERNOP(mw, op_slot);
Guido van Rossum84675ac2001-09-29 01:05:03 +00001043 if (slotw == slotv)
1044 slotw = NULL;
Guido van Rossum4bb1e362001-09-28 23:49:48 +00001045 }
Guido van Rossum84675ac2001-09-29 01:05:03 +00001046 if (slotv) {
Guido van Rossum89c42642001-10-01 17:10:18 +00001047 if (slotw && PyType_IsSubtype(w->ob_type, v->ob_type)) {
1048 x = slotw(v, w, z);
1049 if (x != Py_NotImplemented)
1050 return x;
1051 Py_DECREF(x); /* can't do it */
1052 slotw = NULL;
1053 }
Guido van Rossum84675ac2001-09-29 01:05:03 +00001054 x = slotv(v, w, z);
1055 if (x != Py_NotImplemented)
1056 return x;
1057 Py_DECREF(x); /* can't do it */
1058 }
1059 if (slotw) {
1060 x = slotw(v, w, z);
1061 if (x != Py_NotImplemented)
1062 return x;
1063 Py_DECREF(x); /* can't do it */
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001064 }
1065 mz = z->ob_type->tp_as_number;
1066 if (mz != NULL && NEW_STYLE_NUMBER(z)) {
Neil Schemenauerb808c5c2002-11-24 01:34:49 +00001067 slotz = NB_TERNOP(mz, op_slot);
Guido van Rossum84675ac2001-09-29 01:05:03 +00001068 if (slotz == slotv || slotz == slotw)
1069 slotz = NULL;
1070 if (slotz) {
1071 x = slotz(v, w, z);
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001072 if (x != Py_NotImplemented)
1073 return x;
Guido van Rossum84675ac2001-09-29 01:05:03 +00001074 Py_DECREF(x); /* can't do it */
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001075 }
1076 }
1077
1078 if (!NEW_STYLE_NUMBER(v) || !NEW_STYLE_NUMBER(w) ||
1079 (z != Py_None && !NEW_STYLE_NUMBER(z))) {
1080 /* we have an old style operand, coerce */
1081 PyObject *v1, *z1, *w2, *z2;
1082 int c;
Guido van Rossum77660912002-04-16 16:32:50 +00001083
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001084 c = PyNumber_Coerce(&v, &w);
1085 if (c != 0)
1086 goto error3;
1087
1088 /* Special case: if the third argument is None, it is
1089 treated as absent argument and not coerced. */
1090 if (z == Py_None) {
1091 if (v->ob_type->tp_as_number) {
Neil Schemenauerb808c5c2002-11-24 01:34:49 +00001092 slotz = NB_TERNOP(v->ob_type->tp_as_number,
1093 op_slot);
Guido van Rossum84675ac2001-09-29 01:05:03 +00001094 if (slotz)
1095 x = slotz(v, w, z);
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001096 else
1097 c = -1;
1098 }
1099 else
1100 c = -1;
1101 goto error2;
1102 }
1103 v1 = v;
1104 z1 = z;
1105 c = PyNumber_Coerce(&v1, &z1);
1106 if (c != 0)
1107 goto error2;
1108 w2 = w;
1109 z2 = z1;
1110 c = PyNumber_Coerce(&w2, &z2);
1111 if (c != 0)
1112 goto error1;
1113
1114 if (v1->ob_type->tp_as_number != NULL) {
Neil Schemenauerb808c5c2002-11-24 01:34:49 +00001115 slotv = NB_TERNOP(v1->ob_type->tp_as_number,
1116 op_slot);
Guido van Rossum84675ac2001-09-29 01:05:03 +00001117 if (slotv)
1118 x = slotv(v1, w2, z2);
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001119 else
1120 c = -1;
1121 }
1122 else
1123 c = -1;
1124
1125 Py_DECREF(w2);
1126 Py_DECREF(z2);
1127 error1:
1128 Py_DECREF(v1);
1129 Py_DECREF(z1);
1130 error2:
Guido van Rossume15dee51995-07-18 14:12:02 +00001131 Py_DECREF(v);
1132 Py_DECREF(w);
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001133 error3:
1134 if (c >= 0)
Guido van Rossume15dee51995-07-18 14:12:02 +00001135 return x;
1136 }
Guido van Rossum5c66a262001-10-22 04:12:44 +00001137
1138 if (z == Py_None)
1139 PyErr_Format(
1140 PyExc_TypeError,
1141 "unsupported operand type(s) for ** or pow(): "
Georg Brandlccff7852006-06-18 22:17:29 +00001142 "'%.100s' and '%.100s'",
Guido van Rossum5c66a262001-10-22 04:12:44 +00001143 v->ob_type->tp_name,
1144 w->ob_type->tp_name);
1145 else
1146 PyErr_Format(
1147 PyExc_TypeError,
1148 "unsupported operand type(s) for pow(): "
Georg Brandlccff7852006-06-18 22:17:29 +00001149 "'%.100s', '%.100s', '%.100s'",
Guido van Rossum5c66a262001-10-22 04:12:44 +00001150 v->ob_type->tp_name,
1151 w->ob_type->tp_name,
1152 z->ob_type->tp_name);
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001153 return NULL;
Guido van Rossume15dee51995-07-18 14:12:02 +00001154}
1155
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001156#define BINARY_FUNC(func, op, op_name) \
1157 PyObject * \
1158 func(PyObject *v, PyObject *w) { \
1159 return binary_op(v, w, NB_SLOT(op), op_name); \
1160 }
Guido van Rossume15dee51995-07-18 14:12:02 +00001161
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001162BINARY_FUNC(PyNumber_Or, nb_or, "|")
1163BINARY_FUNC(PyNumber_Xor, nb_xor, "^")
1164BINARY_FUNC(PyNumber_And, nb_and, "&")
1165BINARY_FUNC(PyNumber_Lshift, nb_lshift, "<<")
1166BINARY_FUNC(PyNumber_Rshift, nb_rshift, ">>")
1167BINARY_FUNC(PyNumber_Subtract, nb_subtract, "-")
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001168BINARY_FUNC(PyNumber_Divide, nb_divide, "/")
1169BINARY_FUNC(PyNumber_Divmod, nb_divmod, "divmod()")
Guido van Rossume15dee51995-07-18 14:12:02 +00001170
1171PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001172PyNumber_Add(PyObject *v, PyObject *w)
Guido van Rossume15dee51995-07-18 14:12:02 +00001173{
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001174 PyObject *result = binary_op1(v, w, NB_SLOT(nb_add));
1175 if (result == Py_NotImplemented) {
1176 PySequenceMethods *m = v->ob_type->tp_as_sequence;
Armin Rigofd163f92005-12-29 15:59:19 +00001177 Py_DECREF(result);
Jeremy Hylton0522d982002-03-08 21:28:54 +00001178 if (m && m->sq_concat) {
Armin Rigofd163f92005-12-29 15:59:19 +00001179 return (*m->sq_concat)(v, w);
Jeremy Hylton0522d982002-03-08 21:28:54 +00001180 }
Armin Rigofd163f92005-12-29 15:59:19 +00001181 result = binop_type_error(v, w, "+");
Guido van Rossume15dee51995-07-18 14:12:02 +00001182 }
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001183 return result;
Guido van Rossume15dee51995-07-18 14:12:02 +00001184}
1185
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001186static PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00001187sequence_repeat(ssizeargfunc repeatfunc, PyObject *seq, PyObject *n)
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001188{
Guido van Rossum38fff8c2006-03-07 18:50:55 +00001189 Py_ssize_t count;
Neal Norwitz8a87f5d2006-08-12 17:03:09 +00001190 if (PyIndex_Check(n)) {
1191 count = PyNumber_AsSsize_t(n, PyExc_OverflowError);
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001192 if (count == -1 && PyErr_Occurred())
1193 return NULL;
1194 }
1195 else {
Georg Brandlccff7852006-06-18 22:17:29 +00001196 return type_error("can't multiply sequence by "
1197 "non-int of type '%.200s'", n);
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001198 }
Guido van Rossum38fff8c2006-03-07 18:50:55 +00001199 return (*repeatfunc)(seq, count);
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001200}
1201
1202PyObject *
1203PyNumber_Multiply(PyObject *v, PyObject *w)
1204{
1205 PyObject *result = binary_op1(v, w, NB_SLOT(nb_multiply));
1206 if (result == Py_NotImplemented) {
1207 PySequenceMethods *mv = v->ob_type->tp_as_sequence;
1208 PySequenceMethods *mw = w->ob_type->tp_as_sequence;
Guido van Rossuma3a243e2002-12-31 19:50:03 +00001209 Py_DECREF(result);
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001210 if (mv && mv->sq_repeat) {
1211 return sequence_repeat(mv->sq_repeat, v, w);
1212 }
1213 else if (mw && mw->sq_repeat) {
1214 return sequence_repeat(mw->sq_repeat, w, v);
1215 }
1216 result = binop_type_error(v, w, "*");
1217 }
1218 return result;
1219}
1220
Guido van Rossume15dee51995-07-18 14:12:02 +00001221PyObject *
Guido van Rossum4668b002001-08-08 05:00:18 +00001222PyNumber_FloorDivide(PyObject *v, PyObject *w)
1223{
1224 /* XXX tp_flags test */
1225 return binary_op(v, w, NB_SLOT(nb_floor_divide), "//");
1226}
1227
1228PyObject *
1229PyNumber_TrueDivide(PyObject *v, PyObject *w)
1230{
1231 /* XXX tp_flags test */
1232 return binary_op(v, w, NB_SLOT(nb_true_divide), "/");
1233}
1234
1235PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001236PyNumber_Remainder(PyObject *v, PyObject *w)
Guido van Rossume15dee51995-07-18 14:12:02 +00001237{
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001238 return binary_op(v, w, NB_SLOT(nb_remainder), "%");
Guido van Rossume15dee51995-07-18 14:12:02 +00001239}
1240
1241PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001242PyNumber_Power(PyObject *v, PyObject *w, PyObject *z)
Guido van Rossume15dee51995-07-18 14:12:02 +00001243{
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001244 return ternary_op(v, w, z, NB_SLOT(nb_power), "** or pow()");
Guido van Rossume15dee51995-07-18 14:12:02 +00001245}
1246
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001247/* Binary in-place operators */
1248
1249/* The in-place operators are defined to fall back to the 'normal',
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001250 non in-place operations, if the in-place methods are not in place.
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001251
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001252 - If the left hand object has the appropriate struct members, and
1253 they are filled, call the appropriate function and return the
1254 result. No coercion is done on the arguments; the left-hand object
1255 is the one the operation is performed on, and it's up to the
1256 function to deal with the right-hand object.
Guido van Rossum77660912002-04-16 16:32:50 +00001257
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001258 - Otherwise, in-place modification is not supported. Handle it exactly as
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001259 a non in-place operation of the same kind.
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001260
1261 */
1262
Guido van Rossum77660912002-04-16 16:32:50 +00001263#define HASINPLACE(t) \
1264 PyType_HasFeature((t)->ob_type, Py_TPFLAGS_HAVE_INPLACEOPS)
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001265
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001266static PyObject *
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001267binary_iop1(PyObject *v, PyObject *w, const int iop_slot, const int op_slot)
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001268{
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001269 PyNumberMethods *mv = v->ob_type->tp_as_number;
1270 if (mv != NULL && HASINPLACE(v)) {
Neil Schemenauerb808c5c2002-11-24 01:34:49 +00001271 binaryfunc slot = NB_BINOP(mv, iop_slot);
1272 if (slot) {
1273 PyObject *x = (slot)(v, w);
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001274 if (x != Py_NotImplemented) {
1275 return x;
1276 }
1277 Py_DECREF(x);
1278 }
Thomas Woutersf2b332d2000-09-02 08:34:40 +00001279 }
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001280 return binary_op1(v, w, op_slot);
1281}
1282
1283static PyObject *
1284binary_iop(PyObject *v, PyObject *w, const int iop_slot, const int op_slot,
1285 const char *op_name)
1286{
1287 PyObject *result = binary_iop1(v, w, iop_slot, op_slot);
1288 if (result == Py_NotImplemented) {
1289 Py_DECREF(result);
1290 return binop_type_error(v, w, op_name);
1291 }
1292 return result;
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001293}
1294
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001295#define INPLACE_BINOP(func, iop, op, op_name) \
1296 PyObject * \
1297 func(PyObject *v, PyObject *w) { \
1298 return binary_iop(v, w, NB_SLOT(iop), NB_SLOT(op), op_name); \
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001299 }
1300
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001301INPLACE_BINOP(PyNumber_InPlaceOr, nb_inplace_or, nb_or, "|=")
1302INPLACE_BINOP(PyNumber_InPlaceXor, nb_inplace_xor, nb_xor, "^=")
1303INPLACE_BINOP(PyNumber_InPlaceAnd, nb_inplace_and, nb_and, "&=")
1304INPLACE_BINOP(PyNumber_InPlaceLshift, nb_inplace_lshift, nb_lshift, "<<=")
1305INPLACE_BINOP(PyNumber_InPlaceRshift, nb_inplace_rshift, nb_rshift, ">>=")
1306INPLACE_BINOP(PyNumber_InPlaceSubtract, nb_inplace_subtract, nb_subtract, "-=")
1307INPLACE_BINOP(PyNumber_InPlaceDivide, nb_inplace_divide, nb_divide, "/=")
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001308
1309PyObject *
Guido van Rossum4668b002001-08-08 05:00:18 +00001310PyNumber_InPlaceFloorDivide(PyObject *v, PyObject *w)
1311{
1312 /* XXX tp_flags test */
1313 return binary_iop(v, w, NB_SLOT(nb_inplace_floor_divide),
1314 NB_SLOT(nb_floor_divide), "//=");
1315}
1316
1317PyObject *
1318PyNumber_InPlaceTrueDivide(PyObject *v, PyObject *w)
1319{
1320 /* XXX tp_flags test */
1321 return binary_iop(v, w, NB_SLOT(nb_inplace_true_divide),
1322 NB_SLOT(nb_true_divide), "/=");
1323}
1324
1325PyObject *
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001326PyNumber_InPlaceAdd(PyObject *v, PyObject *w)
1327{
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001328 PyObject *result = binary_iop1(v, w, NB_SLOT(nb_inplace_add),
1329 NB_SLOT(nb_add));
1330 if (result == Py_NotImplemented) {
1331 PySequenceMethods *m = v->ob_type->tp_as_sequence;
1332 Py_DECREF(result);
1333 if (m != NULL) {
1334 binaryfunc f = NULL;
1335 if (HASINPLACE(v))
1336 f = m->sq_inplace_concat;
1337 if (f == NULL)
1338 f = m->sq_concat;
1339 if (f != NULL)
1340 return (*f)(v, w);
1341 }
1342 result = binop_type_error(v, w, "+=");
Guido van Rossumbb8be932000-09-01 23:27:32 +00001343 }
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001344 return result;
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001345}
1346
1347PyObject *
1348PyNumber_InPlaceMultiply(PyObject *v, PyObject *w)
1349{
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001350 PyObject *result = binary_iop1(v, w, NB_SLOT(nb_inplace_multiply),
1351 NB_SLOT(nb_multiply));
1352 if (result == Py_NotImplemented) {
Martin v. Löwis18e16552006-02-15 17:27:45 +00001353 ssizeargfunc f = NULL;
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001354 PySequenceMethods *mv = v->ob_type->tp_as_sequence;
1355 PySequenceMethods *mw = w->ob_type->tp_as_sequence;
1356 Py_DECREF(result);
1357 if (mv != NULL) {
1358 if (HASINPLACE(v))
1359 f = mv->sq_inplace_repeat;
1360 if (f == NULL)
1361 f = mv->sq_repeat;
1362 if (f != NULL)
1363 return sequence_repeat(f, v, w);
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001364 }
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001365 else if (mw != NULL) {
1366 /* Note that the right hand operand should not be
1367 * mutated in this case so sq_inplace_repeat is not
1368 * used. */
1369 if (mw->sq_repeat)
1370 return sequence_repeat(mw->sq_repeat, w, v);
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001371 }
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001372 result = binop_type_error(v, w, "*=");
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001373 }
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001374 return result;
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001375}
1376
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001377PyObject *
1378PyNumber_InPlaceRemainder(PyObject *v, PyObject *w)
1379{
Neil Schemenauerd46fbc32002-11-24 01:07:42 +00001380 return binary_iop(v, w, NB_SLOT(nb_inplace_remainder),
1381 NB_SLOT(nb_remainder), "%=");
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001382}
1383
1384PyObject *
1385PyNumber_InPlacePower(PyObject *v, PyObject *w, PyObject *z)
1386{
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001387 if (HASINPLACE(v) && v->ob_type->tp_as_number &&
1388 v->ob_type->tp_as_number->nb_inplace_power != NULL) {
1389 return ternary_op(v, w, z, NB_SLOT(nb_inplace_power), "**=");
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001390 }
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001391 else {
1392 return ternary_op(v, w, z, NB_SLOT(nb_power), "**=");
1393 }
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001394}
1395
1396
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001397/* Unary operators and functions */
Guido van Rossume15dee51995-07-18 14:12:02 +00001398
1399PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001400PyNumber_Negative(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00001401{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001402 PyNumberMethods *m;
1403
1404 if (o == NULL)
1405 return null_error();
1406 m = o->ob_type->tp_as_number;
1407 if (m && m->nb_negative)
1408 return (*m->nb_negative)(o);
1409
Georg Brandlccff7852006-06-18 22:17:29 +00001410 return type_error("bad operand type for unary -: '%.200s'", o);
Guido van Rossume15dee51995-07-18 14:12:02 +00001411}
1412
1413PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001414PyNumber_Positive(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00001415{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001416 PyNumberMethods *m;
1417
1418 if (o == NULL)
1419 return null_error();
1420 m = o->ob_type->tp_as_number;
1421 if (m && m->nb_positive)
1422 return (*m->nb_positive)(o);
1423
Georg Brandlccff7852006-06-18 22:17:29 +00001424 return type_error("bad operand type for unary +: '%.200s'", o);
Guido van Rossume15dee51995-07-18 14:12:02 +00001425}
1426
1427PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001428PyNumber_Invert(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00001429{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001430 PyNumberMethods *m;
1431
1432 if (o == NULL)
1433 return null_error();
1434 m = o->ob_type->tp_as_number;
1435 if (m && m->nb_invert)
1436 return (*m->nb_invert)(o);
1437
Georg Brandlccff7852006-06-18 22:17:29 +00001438 return type_error("bad operand type for unary ~: '%.200s'", o);
Guido van Rossume15dee51995-07-18 14:12:02 +00001439}
1440
1441PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001442PyNumber_Absolute(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00001443{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001444 PyNumberMethods *m;
Guido van Rossume15dee51995-07-18 14:12:02 +00001445
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001446 if (o == NULL)
1447 return null_error();
1448 m = o->ob_type->tp_as_number;
1449 if (m && m->nb_absolute)
1450 return m->nb_absolute(o);
Guido van Rossume15dee51995-07-18 14:12:02 +00001451
Georg Brandlccff7852006-06-18 22:17:29 +00001452 return type_error("bad operand type for abs(): '%.200s'", o);
Guido van Rossume15dee51995-07-18 14:12:02 +00001453}
1454
Guido van Rossum9e896b32000-04-05 20:11:21 +00001455/* Add a check for embedded NULL-bytes in the argument. */
1456static PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00001457int_from_string(const char *s, Py_ssize_t len)
Guido van Rossum9e896b32000-04-05 20:11:21 +00001458{
1459 char *end;
1460 PyObject *x;
1461
1462 x = PyInt_FromString((char*)s, &end, 10);
1463 if (x == NULL)
1464 return NULL;
1465 if (end != s + len) {
1466 PyErr_SetString(PyExc_ValueError,
1467 "null byte in argument for int()");
1468 Py_DECREF(x);
1469 return NULL;
1470 }
1471 return x;
1472}
1473
Neal Norwitz8a87f5d2006-08-12 17:03:09 +00001474/* Return a Python Int or Long from the object item
1475 Raise TypeError if the result is not an int-or-long
1476 or if the object cannot be interpreted as an index.
1477*/
1478PyObject *
Guido van Rossum38fff8c2006-03-07 18:50:55 +00001479PyNumber_Index(PyObject *item)
1480{
Neal Norwitz8a87f5d2006-08-12 17:03:09 +00001481 PyObject *result = NULL;
1482 if (item == NULL)
1483 return null_error();
Neal Norwitz271a8682006-08-15 06:29:03 +00001484 if (PyInt_Check(item) || PyLong_Check(item)) {
Neal Norwitz8a87f5d2006-08-12 17:03:09 +00001485 Py_INCREF(item);
1486 return item;
1487 }
1488 if (PyIndex_Check(item)) {
1489 result = item->ob_type->tp_as_number->nb_index(item);
Neal Norwitz8a87f5d2006-08-12 17:03:09 +00001490 if (result &&
Neal Norwitz271a8682006-08-15 06:29:03 +00001491 !PyInt_Check(result) && !PyLong_Check(result)) {
Neal Norwitz8a87f5d2006-08-12 17:03:09 +00001492 PyErr_Format(PyExc_TypeError,
1493 "__index__ returned non-(int,long) " \
1494 "(type %.200s)",
1495 result->ob_type->tp_name);
1496 Py_DECREF(result);
1497 return NULL;
1498 }
Guido van Rossum38fff8c2006-03-07 18:50:55 +00001499 }
1500 else {
Armin Rigo314861c2006-03-30 14:04:02 +00001501 PyErr_Format(PyExc_TypeError,
1502 "'%.200s' object cannot be interpreted "
1503 "as an index", item->ob_type->tp_name);
Guido van Rossum38fff8c2006-03-07 18:50:55 +00001504 }
Neal Norwitz8a87f5d2006-08-12 17:03:09 +00001505 return result;
Guido van Rossum38fff8c2006-03-07 18:50:55 +00001506}
1507
Neal Norwitz8a87f5d2006-08-12 17:03:09 +00001508/* Return an error on Overflow only if err is not NULL*/
1509
1510Py_ssize_t
1511PyNumber_AsSsize_t(PyObject *item, PyObject *err)
1512{
1513 Py_ssize_t result;
1514 PyObject *runerr;
1515 PyObject *value = PyNumber_Index(item);
1516 if (value == NULL)
1517 return -1;
1518
1519 /* We're done if PyInt_AsSsize_t() returns without error. */
1520 result = PyInt_AsSsize_t(value);
1521 if (result != -1 || !(runerr = PyErr_Occurred()))
1522 goto finish;
1523
1524 /* Error handling code -- only manage OverflowError differently */
1525 if (!PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError))
1526 goto finish;
1527
1528 PyErr_Clear();
1529 /* If no error-handling desired then the default clipping
1530 is sufficient.
1531 */
1532 if (!err) {
1533 assert(PyLong_Check(value));
1534 /* Whether or not it is less than or equal to
1535 zero is determined by the sign of ob_size
1536 */
1537 if (_PyLong_Sign(value) < 0)
1538 result = PY_SSIZE_T_MIN;
1539 else
1540 result = PY_SSIZE_T_MAX;
1541 }
1542 else {
1543 /* Otherwise replace the error with caller's error object. */
1544 PyErr_Format(err,
1545 "cannot fit '%.200s' into an index-sized integer",
1546 item->ob_type->tp_name);
1547 }
1548
1549 finish:
1550 Py_DECREF(value);
1551 return result;
1552}
1553
1554
Guido van Rossume15dee51995-07-18 14:12:02 +00001555PyObject *
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001556_PyNumber_ConvertIntegralToInt(PyObject *integral, const char* error_format)
1557{
1558 const char *type_name;
1559 static PyObject *int_name = NULL;
1560 if (int_name == NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001561 int_name = PyString_InternFromString("__int__");
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001562 if (int_name == NULL)
1563 return NULL;
1564 }
1565
1566 if (integral && (!PyInt_Check(integral) &&
1567 !PyLong_Check(integral))) {
1568 /* Don't go through tp_as_number->nb_int to avoid
1569 hitting the classic class fallback to __trunc__. */
1570 PyObject *int_func = PyObject_GetAttr(integral, int_name);
1571 if (int_func == NULL) {
1572 PyErr_Clear(); /* Raise a different error. */
1573 goto non_integral_error;
1574 }
1575 Py_DECREF(integral);
1576 integral = PyEval_CallObject(int_func, NULL);
1577 Py_DECREF(int_func);
1578 if (integral && (!PyInt_Check(integral) &&
1579 !PyLong_Check(integral))) {
1580 goto non_integral_error;
1581 }
1582 }
1583 return integral;
1584
1585non_integral_error:
1586 if (PyInstance_Check(integral)) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001587 type_name = PyString_AS_STRING(((PyInstanceObject *)integral)
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001588 ->in_class->cl_name);
1589 }
1590 else {
1591 type_name = integral->ob_type->tp_name;
1592 }
1593 PyErr_Format(PyExc_TypeError, error_format, type_name);
1594 Py_DECREF(integral);
1595 return NULL;
1596}
1597
1598
1599PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001600PyNumber_Int(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00001601{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001602 PyNumberMethods *m;
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001603 static PyObject *trunc_name = NULL;
1604 PyObject *trunc_func;
Guido van Rossum4c08d552000-03-10 22:55:18 +00001605 const char *buffer;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001606 Py_ssize_t buffer_len;
Guido van Rossume15dee51995-07-18 14:12:02 +00001607
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001608 if (trunc_name == NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001609 trunc_name = PyString_InternFromString("__trunc__");
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001610 if (trunc_name == NULL)
1611 return NULL;
1612 }
1613
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001614 if (o == NULL)
1615 return null_error();
Tim Peters64b5ce32001-09-10 20:52:51 +00001616 if (PyInt_CheckExact(o)) {
Guido van Rossum9e896b32000-04-05 20:11:21 +00001617 Py_INCREF(o);
1618 return o;
1619 }
Brett Cannonc3647ac2005-04-26 03:45:26 +00001620 m = o->ob_type->tp_as_number;
1621 if (m && m->nb_int) { /* This should include subclasses of int */
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001622 /* Classic classes always take this branch. */
Brett Cannonc3647ac2005-04-26 03:45:26 +00001623 PyObject *res = m->nb_int(o);
1624 if (res && (!PyInt_Check(res) && !PyLong_Check(res))) {
1625 PyErr_Format(PyExc_TypeError,
1626 "__int__ returned non-int (type %.200s)",
1627 res->ob_type->tp_name);
1628 Py_DECREF(res);
1629 return NULL;
1630 }
1631 return res;
1632 }
1633 if (PyInt_Check(o)) { /* A int subclass without nb_int */
Tim Peters64b5ce32001-09-10 20:52:51 +00001634 PyIntObject *io = (PyIntObject*)o;
1635 return PyInt_FromLong(io->ob_ival);
1636 }
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001637 trunc_func = PyObject_GetAttr(o, trunc_name);
1638 if (trunc_func) {
1639 PyObject *truncated = PyEval_CallObject(trunc_func, NULL);
1640 Py_DECREF(trunc_func);
1641 /* __trunc__ is specified to return an Integral type, but
1642 int() needs to return an int. */
1643 return _PyNumber_ConvertIntegralToInt(
1644 truncated,
1645 "__trunc__ returned non-Integral (type %.200s)");
1646 }
1647 PyErr_Clear(); /* It's not an error if o.__trunc__ doesn't exist. */
1648
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001649 if (PyString_Check(o))
1650 return int_from_string(PyString_AS_STRING(o),
1651 PyString_GET_SIZE(o));
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001652#ifdef Py_USING_UNICODE
Guido van Rossum9e896b32000-04-05 20:11:21 +00001653 if (PyUnicode_Check(o))
1654 return PyInt_FromUnicode(PyUnicode_AS_UNICODE(o),
1655 PyUnicode_GET_SIZE(o),
1656 10);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001657#endif
Guido van Rossum4c08d552000-03-10 22:55:18 +00001658 if (!PyObject_AsCharBuffer(o, &buffer, &buffer_len))
Guido van Rossum9e896b32000-04-05 20:11:21 +00001659 return int_from_string((char*)buffer, buffer_len);
Guido van Rossume15dee51995-07-18 14:12:02 +00001660
Georg Brandlccff7852006-06-18 22:17:29 +00001661 return type_error("int() argument must be a string or a "
1662 "number, not '%.200s'", o);
Guido van Rossume15dee51995-07-18 14:12:02 +00001663}
1664
Guido van Rossum9e896b32000-04-05 20:11:21 +00001665/* Add a check for embedded NULL-bytes in the argument. */
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001666static PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00001667long_from_string(const char *s, Py_ssize_t len)
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001668{
Guido van Rossum4c08d552000-03-10 22:55:18 +00001669 char *end;
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001670 PyObject *x;
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001671
Guido van Rossum4c08d552000-03-10 22:55:18 +00001672 x = PyLong_FromString((char*)s, &end, 10);
Guido van Rossum9e896b32000-04-05 20:11:21 +00001673 if (x == NULL)
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001674 return NULL;
Guido van Rossum9e896b32000-04-05 20:11:21 +00001675 if (end != s + len) {
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001676 PyErr_SetString(PyExc_ValueError,
1677 "null byte in argument for long()");
Guido van Rossum9e896b32000-04-05 20:11:21 +00001678 Py_DECREF(x);
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001679 return NULL;
1680 }
1681 return x;
1682}
1683
Guido van Rossume15dee51995-07-18 14:12:02 +00001684PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001685PyNumber_Long(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00001686{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001687 PyNumberMethods *m;
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001688 static PyObject *trunc_name = NULL;
1689 PyObject *trunc_func;
Guido van Rossum4c08d552000-03-10 22:55:18 +00001690 const char *buffer;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001691 Py_ssize_t buffer_len;
Guido van Rossume15dee51995-07-18 14:12:02 +00001692
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001693 if (trunc_name == NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001694 trunc_name = PyString_InternFromString("__trunc__");
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001695 if (trunc_name == NULL)
1696 return NULL;
1697 }
1698
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001699 if (o == NULL)
1700 return null_error();
Brett Cannonc3647ac2005-04-26 03:45:26 +00001701 m = o->ob_type->tp_as_number;
1702 if (m && m->nb_long) { /* This should include subclasses of long */
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001703 /* Classic classes always take this branch. */
Brett Cannonc3647ac2005-04-26 03:45:26 +00001704 PyObject *res = m->nb_long(o);
1705 if (res && (!PyInt_Check(res) && !PyLong_Check(res))) {
1706 PyErr_Format(PyExc_TypeError,
1707 "__long__ returned non-long (type %.200s)",
1708 res->ob_type->tp_name);
1709 Py_DECREF(res);
1710 return NULL;
1711 }
1712 return res;
Guido van Rossum9e896b32000-04-05 20:11:21 +00001713 }
Brett Cannonc3647ac2005-04-26 03:45:26 +00001714 if (PyLong_Check(o)) /* A long subclass without nb_long */
Tim Petersdb30ac42002-03-02 04:14:21 +00001715 return _PyLong_Copy((PyLongObject *)o);
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001716 trunc_func = PyObject_GetAttr(o, trunc_name);
1717 if (trunc_func) {
1718 PyObject *truncated = PyEval_CallObject(trunc_func, NULL);
1719 PyObject *int_instance;
1720 Py_DECREF(trunc_func);
1721 /* __trunc__ is specified to return an Integral type,
1722 but long() needs to return a long. */
1723 int_instance = _PyNumber_ConvertIntegralToInt(
1724 truncated,
1725 "__trunc__ returned non-Integral (type %.200s)");
1726 if (int_instance && PyInt_Check(int_instance)) {
1727 /* Make sure that long() returns a long instance. */
1728 long value = PyInt_AS_LONG(int_instance);
1729 Py_DECREF(int_instance);
1730 return PyLong_FromLong(value);
1731 }
1732 return int_instance;
1733 }
1734 PyErr_Clear(); /* It's not an error if o.__trunc__ doesn't exist. */
1735
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001736 if (PyString_Check(o))
Guido van Rossum77660912002-04-16 16:32:50 +00001737 /* need to do extra error checking that PyLong_FromString()
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001738 * doesn't do. In particular long('9.5') must raise an
1739 * exception, not truncate the float.
1740 */
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001741 return long_from_string(PyString_AS_STRING(o),
1742 PyString_GET_SIZE(o));
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001743#ifdef Py_USING_UNICODE
Guido van Rossum9e896b32000-04-05 20:11:21 +00001744 if (PyUnicode_Check(o))
1745 /* The above check is done in PyLong_FromUnicode(). */
1746 return PyLong_FromUnicode(PyUnicode_AS_UNICODE(o),
1747 PyUnicode_GET_SIZE(o),
1748 10);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001749#endif
Guido van Rossum4c08d552000-03-10 22:55:18 +00001750 if (!PyObject_AsCharBuffer(o, &buffer, &buffer_len))
1751 return long_from_string(buffer, buffer_len);
Guido van Rossume15dee51995-07-18 14:12:02 +00001752
Georg Brandlccff7852006-06-18 22:17:29 +00001753 return type_error("long() argument must be a string or a "
1754 "number, not '%.200s'", o);
Guido van Rossume15dee51995-07-18 14:12:02 +00001755}
1756
1757PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001758PyNumber_Float(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00001759{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001760 PyNumberMethods *m;
Guido van Rossume15dee51995-07-18 14:12:02 +00001761
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001762 if (o == NULL)
1763 return null_error();
Brett Cannonc3647ac2005-04-26 03:45:26 +00001764 m = o->ob_type->tp_as_number;
1765 if (m && m->nb_float) { /* This should include subclasses of float */
1766 PyObject *res = m->nb_float(o);
1767 if (res && !PyFloat_Check(res)) {
1768 PyErr_Format(PyExc_TypeError,
1769 "__float__ returned non-float (type %.200s)",
1770 res->ob_type->tp_name);
1771 Py_DECREF(res);
1772 return NULL;
1773 }
1774 return res;
Guido van Rossum9e896b32000-04-05 20:11:21 +00001775 }
Brett Cannonc3647ac2005-04-26 03:45:26 +00001776 if (PyFloat_Check(o)) { /* A float subclass with nb_float == NULL */
Tim Peters7a50f252001-09-10 21:28:20 +00001777 PyFloatObject *po = (PyFloatObject *)o;
1778 return PyFloat_FromDouble(po->ob_fval);
1779 }
Guido van Rossum4c08d552000-03-10 22:55:18 +00001780 return PyFloat_FromString(o, NULL);
Guido van Rossume15dee51995-07-18 14:12:02 +00001781}
1782
Eric Smith5e527eb2008-02-10 01:36:53 +00001783PyObject *
1784PyNumber_ToBase(PyObject *n, int base)
1785{
1786 PyObject *res = NULL;
1787 PyObject *index = PyNumber_Index(n);
1788
1789 if (!index)
1790 return NULL;
1791 if (PyLong_Check(index))
1792 res = _PyLong_Format(index, base, 0, 1);
1793 else if (PyInt_Check(index))
1794 res = _PyInt_Format((PyIntObject*)index, base, 1);
1795 else
Eric Smith3f914372008-02-15 12:14:32 +00001796 /* It should not be possible to get here, as
1797 PyNumber_Index already has a check for the same
1798 condition */
1799 PyErr_SetString(PyExc_ValueError, "PyNumber_ToBase: index not "
1800 "int or long");
Eric Smith5e527eb2008-02-10 01:36:53 +00001801 Py_DECREF(index);
1802 return res;
1803}
1804
1805
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001806/* Operations on sequences */
Guido van Rossume15dee51995-07-18 14:12:02 +00001807
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001808int
Fred Drake79912472000-07-09 04:06:11 +00001809PySequence_Check(PyObject *s)
Guido van Rossume15dee51995-07-18 14:12:02 +00001810{
Raymond Hettinger1be1a792004-09-19 06:00:15 +00001811 if (s && PyInstance_Check(s))
Raymond Hettingere2eda602004-04-04 08:51:41 +00001812 return PyObject_HasAttrString(s, "__getitem__");
Raymond Hettingerde33c622007-02-07 23:49:03 +00001813 if (PyObject_IsInstance(s, (PyObject *)&PyDict_Type))
Raymond Hettinger4da5bf62007-02-07 22:24:07 +00001814 return 0;
Guido van Rossum8700b422001-09-07 20:20:11 +00001815 return s != NULL && s->ob_type->tp_as_sequence &&
1816 s->ob_type->tp_as_sequence->sq_item != NULL;
Guido van Rossume15dee51995-07-18 14:12:02 +00001817}
1818
Martin v. Löwis18e16552006-02-15 17:27:45 +00001819Py_ssize_t
Jeremy Hylton6253f832000-07-12 12:56:19 +00001820PySequence_Size(PyObject *s)
Guido van Rossume15dee51995-07-18 14:12:02 +00001821{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001822 PySequenceMethods *m;
Guido van Rossume15dee51995-07-18 14:12:02 +00001823
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001824 if (s == NULL) {
1825 null_error();
1826 return -1;
1827 }
Guido van Rossume15dee51995-07-18 14:12:02 +00001828
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001829 m = s->ob_type->tp_as_sequence;
1830 if (m && m->sq_length)
1831 return m->sq_length(s);
Guido van Rossume15dee51995-07-18 14:12:02 +00001832
Georg Brandlb0061c82006-08-08 11:56:21 +00001833 type_error("object of type '%.200s' has no len()", s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001834 return -1;
Guido van Rossume15dee51995-07-18 14:12:02 +00001835}
1836
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +00001837#undef PySequence_Length
Martin v. Löwis18e16552006-02-15 17:27:45 +00001838Py_ssize_t
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +00001839PySequence_Length(PyObject *s)
1840{
1841 return PySequence_Size(s);
1842}
1843#define PySequence_Length PySequence_Size
1844
Guido van Rossume15dee51995-07-18 14:12:02 +00001845PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001846PySequence_Concat(PyObject *s, PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00001847{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001848 PySequenceMethods *m;
Guido van Rossume15dee51995-07-18 14:12:02 +00001849
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001850 if (s == NULL || o == NULL)
1851 return null_error();
Guido van Rossume15dee51995-07-18 14:12:02 +00001852
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001853 m = s->ob_type->tp_as_sequence;
1854 if (m && m->sq_concat)
1855 return m->sq_concat(s, o);
1856
Armin Rigofd163f92005-12-29 15:59:19 +00001857 /* Instances of user classes defining an __add__() method only
1858 have an nb_add slot, not an sq_concat slot. So we fall back
1859 to nb_add if both arguments appear to be sequences. */
1860 if (PySequence_Check(s) && PySequence_Check(o)) {
1861 PyObject *result = binary_op1(s, o, NB_SLOT(nb_add));
1862 if (result != Py_NotImplemented)
1863 return result;
1864 Py_DECREF(result);
1865 }
Georg Brandlccff7852006-06-18 22:17:29 +00001866 return type_error("'%.200s' object can't be concatenated", s);
Guido van Rossume15dee51995-07-18 14:12:02 +00001867}
1868
1869PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00001870PySequence_Repeat(PyObject *o, Py_ssize_t count)
Guido van Rossume15dee51995-07-18 14:12:02 +00001871{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001872 PySequenceMethods *m;
Guido van Rossume15dee51995-07-18 14:12:02 +00001873
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001874 if (o == NULL)
1875 return null_error();
Guido van Rossume15dee51995-07-18 14:12:02 +00001876
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001877 m = o->ob_type->tp_as_sequence;
1878 if (m && m->sq_repeat)
1879 return m->sq_repeat(o, count);
1880
Armin Rigofd163f92005-12-29 15:59:19 +00001881 /* Instances of user classes defining a __mul__() method only
1882 have an nb_multiply slot, not an sq_repeat slot. so we fall back
1883 to nb_multiply if o appears to be a sequence. */
1884 if (PySequence_Check(o)) {
1885 PyObject *n, *result;
Martin v. Löwiseb079f12006-02-16 14:32:27 +00001886 n = PyInt_FromSsize_t(count);
Armin Rigofd163f92005-12-29 15:59:19 +00001887 if (n == NULL)
1888 return NULL;
1889 result = binary_op1(o, n, NB_SLOT(nb_multiply));
1890 Py_DECREF(n);
1891 if (result != Py_NotImplemented)
1892 return result;
1893 Py_DECREF(result);
1894 }
Georg Brandlccff7852006-06-18 22:17:29 +00001895 return type_error("'%.200s' object can't be repeated", o);
Guido van Rossume15dee51995-07-18 14:12:02 +00001896}
1897
1898PyObject *
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001899PySequence_InPlaceConcat(PyObject *s, PyObject *o)
1900{
1901 PySequenceMethods *m;
1902
1903 if (s == NULL || o == NULL)
1904 return null_error();
1905
1906 m = s->ob_type->tp_as_sequence;
1907 if (m && HASINPLACE(s) && m->sq_inplace_concat)
1908 return m->sq_inplace_concat(s, o);
1909 if (m && m->sq_concat)
1910 return m->sq_concat(s, o);
1911
Armin Rigofd163f92005-12-29 15:59:19 +00001912 if (PySequence_Check(s) && PySequence_Check(o)) {
1913 PyObject *result = binary_iop1(s, o, NB_SLOT(nb_inplace_add),
1914 NB_SLOT(nb_add));
1915 if (result != Py_NotImplemented)
1916 return result;
1917 Py_DECREF(result);
1918 }
Georg Brandlccff7852006-06-18 22:17:29 +00001919 return type_error("'%.200s' object can't be concatenated", s);
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001920}
1921
1922PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00001923PySequence_InPlaceRepeat(PyObject *o, Py_ssize_t count)
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001924{
1925 PySequenceMethods *m;
1926
1927 if (o == NULL)
1928 return null_error();
1929
1930 m = o->ob_type->tp_as_sequence;
1931 if (m && HASINPLACE(o) && m->sq_inplace_repeat)
1932 return m->sq_inplace_repeat(o, count);
1933 if (m && m->sq_repeat)
1934 return m->sq_repeat(o, count);
1935
Armin Rigofd163f92005-12-29 15:59:19 +00001936 if (PySequence_Check(o)) {
1937 PyObject *n, *result;
Martin v. Löwiseb079f12006-02-16 14:32:27 +00001938 n = PyInt_FromSsize_t(count);
Armin Rigofd163f92005-12-29 15:59:19 +00001939 if (n == NULL)
1940 return NULL;
1941 result = binary_iop1(o, n, NB_SLOT(nb_inplace_multiply),
1942 NB_SLOT(nb_multiply));
1943 Py_DECREF(n);
1944 if (result != Py_NotImplemented)
1945 return result;
1946 Py_DECREF(result);
1947 }
Georg Brandlccff7852006-06-18 22:17:29 +00001948 return type_error("'%.200s' object can't be repeated", o);
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001949}
1950
1951PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00001952PySequence_GetItem(PyObject *s, Py_ssize_t i)
Guido van Rossume15dee51995-07-18 14:12:02 +00001953{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001954 PySequenceMethods *m;
Guido van Rossume15dee51995-07-18 14:12:02 +00001955
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001956 if (s == NULL)
1957 return null_error();
Guido van Rossume15dee51995-07-18 14:12:02 +00001958
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001959 m = s->ob_type->tp_as_sequence;
1960 if (m && m->sq_item) {
1961 if (i < 0) {
1962 if (m->sq_length) {
Martin v. Löwis18e16552006-02-15 17:27:45 +00001963 Py_ssize_t l = (*m->sq_length)(s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001964 if (l < 0)
1965 return NULL;
1966 i += l;
1967 }
1968 }
1969 return m->sq_item(s, i);
1970 }
Guido van Rossume15dee51995-07-18 14:12:02 +00001971
Skip Montanaro2c7ca9b2008-07-07 11:16:14 +00001972 return type_error("'%.200s' object does not support indexing", s);
Guido van Rossume15dee51995-07-18 14:12:02 +00001973}
1974
1975PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00001976PySequence_GetSlice(PyObject *s, Py_ssize_t i1, Py_ssize_t i2)
Guido van Rossume15dee51995-07-18 14:12:02 +00001977{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001978 PySequenceMethods *m;
Thomas Wouters1d75a792000-08-17 22:37:32 +00001979 PyMappingMethods *mp;
Guido van Rossume15dee51995-07-18 14:12:02 +00001980
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001981 if (!s) return null_error();
Guido van Rossume15dee51995-07-18 14:12:02 +00001982
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001983 m = s->ob_type->tp_as_sequence;
1984 if (m && m->sq_slice) {
1985 if (i1 < 0 || i2 < 0) {
1986 if (m->sq_length) {
Martin v. Löwis18e16552006-02-15 17:27:45 +00001987 Py_ssize_t l = (*m->sq_length)(s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001988 if (l < 0)
1989 return NULL;
1990 if (i1 < 0)
1991 i1 += l;
1992 if (i2 < 0)
1993 i2 += l;
1994 }
1995 }
1996 return m->sq_slice(s, i1, i2);
Thomas Wouters1d75a792000-08-17 22:37:32 +00001997 } else if ((mp = s->ob_type->tp_as_mapping) && mp->mp_subscript) {
1998 PyObject *res;
Neal Norwitzbadc0862006-03-23 06:03:08 +00001999 PyObject *slice = _PySlice_FromIndices(i1, i2);
Thomas Wouters1d75a792000-08-17 22:37:32 +00002000 if (!slice)
2001 return NULL;
2002 res = mp->mp_subscript(s, slice);
2003 Py_DECREF(slice);
2004 return res;
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002005 }
Guido van Rossume15dee51995-07-18 14:12:02 +00002006
Georg Brandlccff7852006-06-18 22:17:29 +00002007 return type_error("'%.200s' object is unsliceable", s);
Guido van Rossume15dee51995-07-18 14:12:02 +00002008}
2009
2010int
Martin v. Löwis18e16552006-02-15 17:27:45 +00002011PySequence_SetItem(PyObject *s, Py_ssize_t i, PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00002012{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002013 PySequenceMethods *m;
Guido van Rossume15dee51995-07-18 14:12:02 +00002014
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002015 if (s == NULL) {
2016 null_error();
2017 return -1;
2018 }
Guido van Rossume15dee51995-07-18 14:12:02 +00002019
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002020 m = s->ob_type->tp_as_sequence;
2021 if (m && m->sq_ass_item) {
2022 if (i < 0) {
2023 if (m->sq_length) {
Martin v. Löwis18e16552006-02-15 17:27:45 +00002024 Py_ssize_t l = (*m->sq_length)(s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002025 if (l < 0)
Guido van Rossumed6219b1998-05-29 02:59:33 +00002026 return -1;
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002027 i += l;
2028 }
2029 }
2030 return m->sq_ass_item(s, i, o);
2031 }
2032
Georg Brandlccff7852006-06-18 22:17:29 +00002033 type_error("'%.200s' object does not support item assignment", s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002034 return -1;
Guido van Rossume15dee51995-07-18 14:12:02 +00002035}
2036
Guido van Rossum6cdc6f41996-08-21 17:41:54 +00002037int
Martin v. Löwis18e16552006-02-15 17:27:45 +00002038PySequence_DelItem(PyObject *s, Py_ssize_t i)
Guido van Rossum6cdc6f41996-08-21 17:41:54 +00002039{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002040 PySequenceMethods *m;
Guido van Rossum6cdc6f41996-08-21 17:41:54 +00002041
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002042 if (s == NULL) {
2043 null_error();
2044 return -1;
2045 }
Guido van Rossum6cdc6f41996-08-21 17:41:54 +00002046
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002047 m = s->ob_type->tp_as_sequence;
2048 if (m && m->sq_ass_item) {
2049 if (i < 0) {
2050 if (m->sq_length) {
Martin v. Löwis18e16552006-02-15 17:27:45 +00002051 Py_ssize_t l = (*m->sq_length)(s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002052 if (l < 0)
Guido van Rossumed6219b1998-05-29 02:59:33 +00002053 return -1;
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002054 i += l;
2055 }
2056 }
2057 return m->sq_ass_item(s, i, (PyObject *)NULL);
2058 }
2059
Georg Brandlccff7852006-06-18 22:17:29 +00002060 type_error("'%.200s' object doesn't support item deletion", s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002061 return -1;
Guido van Rossum6cdc6f41996-08-21 17:41:54 +00002062}
2063
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002064int
Martin v. Löwis18e16552006-02-15 17:27:45 +00002065PySequence_SetSlice(PyObject *s, Py_ssize_t i1, Py_ssize_t i2, PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00002066{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002067 PySequenceMethods *m;
Thomas Wouters1d75a792000-08-17 22:37:32 +00002068 PyMappingMethods *mp;
Guido van Rossume15dee51995-07-18 14:12:02 +00002069
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002070 if (s == NULL) {
2071 null_error();
2072 return -1;
2073 }
Guido van Rossume15dee51995-07-18 14:12:02 +00002074
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002075 m = s->ob_type->tp_as_sequence;
2076 if (m && m->sq_ass_slice) {
2077 if (i1 < 0 || i2 < 0) {
2078 if (m->sq_length) {
Martin v. Löwis18e16552006-02-15 17:27:45 +00002079 Py_ssize_t l = (*m->sq_length)(s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002080 if (l < 0)
Guido van Rossumed6219b1998-05-29 02:59:33 +00002081 return -1;
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002082 if (i1 < 0)
2083 i1 += l;
2084 if (i2 < 0)
2085 i2 += l;
2086 }
2087 }
2088 return m->sq_ass_slice(s, i1, i2, o);
Thomas Wouters1d75a792000-08-17 22:37:32 +00002089 } else if ((mp = s->ob_type->tp_as_mapping) && mp->mp_ass_subscript) {
2090 int res;
Neal Norwitzbadc0862006-03-23 06:03:08 +00002091 PyObject *slice = _PySlice_FromIndices(i1, i2);
Thomas Wouters1d75a792000-08-17 22:37:32 +00002092 if (!slice)
2093 return -1;
2094 res = mp->mp_ass_subscript(s, slice, o);
2095 Py_DECREF(slice);
2096 return res;
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002097 }
Thomas Wouters1d75a792000-08-17 22:37:32 +00002098
Georg Brandlccff7852006-06-18 22:17:29 +00002099 type_error("'%.200s' object doesn't support slice assignment", s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002100 return -1;
Guido van Rossume15dee51995-07-18 14:12:02 +00002101}
2102
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002103int
Martin v. Löwis18e16552006-02-15 17:27:45 +00002104PySequence_DelSlice(PyObject *s, Py_ssize_t i1, Py_ssize_t i2)
Guido van Rossum6cdc6f41996-08-21 17:41:54 +00002105{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002106 PySequenceMethods *m;
Guido van Rossum6cdc6f41996-08-21 17:41:54 +00002107
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002108 if (s == NULL) {
2109 null_error();
2110 return -1;
2111 }
Guido van Rossum6cdc6f41996-08-21 17:41:54 +00002112
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002113 m = s->ob_type->tp_as_sequence;
2114 if (m && m->sq_ass_slice) {
2115 if (i1 < 0 || i2 < 0) {
2116 if (m->sq_length) {
Martin v. Löwis18e16552006-02-15 17:27:45 +00002117 Py_ssize_t l = (*m->sq_length)(s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002118 if (l < 0)
Guido van Rossumed6219b1998-05-29 02:59:33 +00002119 return -1;
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002120 if (i1 < 0)
2121 i1 += l;
2122 if (i2 < 0)
2123 i2 += l;
2124 }
2125 }
2126 return m->sq_ass_slice(s, i1, i2, (PyObject *)NULL);
2127 }
Georg Brandlccff7852006-06-18 22:17:29 +00002128 type_error("'%.200s' object doesn't support slice deletion", s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002129 return -1;
Guido van Rossum6cdc6f41996-08-21 17:41:54 +00002130}
2131
Guido van Rossume15dee51995-07-18 14:12:02 +00002132PyObject *
Fred Drake79912472000-07-09 04:06:11 +00002133PySequence_Tuple(PyObject *v)
Guido van Rossume15dee51995-07-18 14:12:02 +00002134{
Tim Peters6912d4d2001-05-05 03:56:37 +00002135 PyObject *it; /* iter(v) */
Martin v. Löwis18e16552006-02-15 17:27:45 +00002136 Py_ssize_t n; /* guess for result tuple size */
Raymond Hettingerb5163702009-02-02 21:50:13 +00002137 PyObject *result = NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002138 Py_ssize_t j;
Guido van Rossume15dee51995-07-18 14:12:02 +00002139
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002140 if (v == NULL)
2141 return null_error();
Guido van Rossume15dee51995-07-18 14:12:02 +00002142
Tim Peters6912d4d2001-05-05 03:56:37 +00002143 /* Special-case the common tuple and list cases, for efficiency. */
Tim Peters4c3a0a32001-09-10 23:37:46 +00002144 if (PyTuple_CheckExact(v)) {
2145 /* Note that we can't know whether it's safe to return
2146 a tuple *subclass* instance as-is, hence the restriction
Tim Peters8ff70a92001-09-10 23:53:53 +00002147 to exact tuples here. In contrast, lists always make
2148 a copy, so there's no need for exactness below. */
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002149 Py_INCREF(v);
2150 return v;
Guido van Rossume15dee51995-07-18 14:12:02 +00002151 }
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002152 if (PyList_Check(v))
2153 return PyList_AsTuple(v);
2154
Tim Peters6912d4d2001-05-05 03:56:37 +00002155 /* Get iterator. */
2156 it = PyObject_GetIter(v);
2157 if (it == NULL)
Tim Peters1fc240e2001-10-26 05:06:50 +00002158 return NULL;
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002159
Tim Peters6912d4d2001-05-05 03:56:37 +00002160 /* Guess result size and allocate space. */
Raymond Hettinger4e2f7142007-12-06 00:56:53 +00002161 n = _PyObject_LengthHint(v, 10);
Raymond Hettingerb5163702009-02-02 21:50:13 +00002162 if (n == -1)
2163 goto Fail;
Tim Peters6912d4d2001-05-05 03:56:37 +00002164 result = PyTuple_New(n);
2165 if (result == NULL)
2166 goto Fail;
2167
2168 /* Fill the tuple. */
2169 for (j = 0; ; ++j) {
2170 PyObject *item = PyIter_Next(it);
2171 if (item == NULL) {
2172 if (PyErr_Occurred())
2173 goto Fail;
2174 break;
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002175 }
Tim Peters6912d4d2001-05-05 03:56:37 +00002176 if (j >= n) {
Martin v. Löwis18e16552006-02-15 17:27:45 +00002177 Py_ssize_t oldn = n;
Raymond Hettinger4d012592004-12-16 10:38:38 +00002178 /* The over-allocation strategy can grow a bit faster
2179 than for lists because unlike lists the
2180 over-allocation isn't permanent -- we reclaim
2181 the excess before the end of this routine.
2182 So, grow by ten and then add 25%.
2183 */
2184 n += 10;
2185 n += n >> 2;
2186 if (n < oldn) {
2187 /* Check for overflow */
2188 PyErr_NoMemory();
Raymond Hettingere6bdb372004-12-16 15:10:21 +00002189 Py_DECREF(item);
Raymond Hettinger4d012592004-12-16 10:38:38 +00002190 goto Fail;
2191 }
Tim Peters4324aa32001-05-28 22:30:08 +00002192 if (_PyTuple_Resize(&result, n) != 0) {
Tim Peters12d0a6c2001-05-05 04:10:25 +00002193 Py_DECREF(item);
Tim Peters6912d4d2001-05-05 03:56:37 +00002194 goto Fail;
Tim Peters12d0a6c2001-05-05 04:10:25 +00002195 }
Tim Peters6912d4d2001-05-05 03:56:37 +00002196 }
2197 PyTuple_SET_ITEM(result, j, item);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002198 }
2199
Tim Peters6912d4d2001-05-05 03:56:37 +00002200 /* Cut tuple back if guess was too large. */
2201 if (j < n &&
Tim Peters4324aa32001-05-28 22:30:08 +00002202 _PyTuple_Resize(&result, j) != 0)
Tim Peters6912d4d2001-05-05 03:56:37 +00002203 goto Fail;
2204
2205 Py_DECREF(it);
2206 return result;
2207
2208Fail:
2209 Py_XDECREF(result);
2210 Py_DECREF(it);
2211 return NULL;
Guido van Rossume15dee51995-07-18 14:12:02 +00002212}
2213
Guido van Rossum3c5936a1996-12-05 21:51:24 +00002214PyObject *
Fred Drake79912472000-07-09 04:06:11 +00002215PySequence_List(PyObject *v)
Guido van Rossum3c5936a1996-12-05 21:51:24 +00002216{
Tim Petersf553f892001-05-01 20:45:31 +00002217 PyObject *result; /* result list */
Raymond Hettinger8ca92ae2004-03-11 09:13:12 +00002218 PyObject *rv; /* return value from PyList_Extend */
Guido van Rossum4669fb41997-04-02 05:31:09 +00002219
Guido van Rossum5dba9e81998-07-10 18:03:50 +00002220 if (v == NULL)
2221 return null_error();
2222
Raymond Hettinger8ca92ae2004-03-11 09:13:12 +00002223 result = PyList_New(0);
2224 if (result == NULL)
Tim Petersf553f892001-05-01 20:45:31 +00002225 return NULL;
2226
Raymond Hettinger8ca92ae2004-03-11 09:13:12 +00002227 rv = _PyList_Extend((PyListObject *)result, v);
2228 if (rv == NULL) {
2229 Py_DECREF(result);
Tim Petersf553f892001-05-01 20:45:31 +00002230 return NULL;
2231 }
Raymond Hettinger969d8c02004-03-17 05:24:23 +00002232 Py_DECREF(rv);
Tim Petersf553f892001-05-01 20:45:31 +00002233 return result;
Guido van Rossum3c5936a1996-12-05 21:51:24 +00002234}
2235
Andrew M. Kuchling74042d62000-06-18 18:43:14 +00002236PyObject *
Fred Drake79912472000-07-09 04:06:11 +00002237PySequence_Fast(PyObject *v, const char *m)
Andrew M. Kuchling74042d62000-06-18 18:43:14 +00002238{
Raymond Hettinger2fb70292004-01-11 23:26:51 +00002239 PyObject *it;
2240
Andrew M. Kuchling74042d62000-06-18 18:43:14 +00002241 if (v == NULL)
2242 return null_error();
2243
Michael W. Hudson2801fe12002-11-05 18:05:49 +00002244 if (PyList_CheckExact(v) || PyTuple_CheckExact(v)) {
Andrew M. Kuchling74042d62000-06-18 18:43:14 +00002245 Py_INCREF(v);
2246 return v;
2247 }
2248
Raymond Hettinger2fb70292004-01-11 23:26:51 +00002249 it = PyObject_GetIter(v);
2250 if (it == NULL) {
2251 if (PyErr_ExceptionMatches(PyExc_TypeError))
Georg Brandlccff7852006-06-18 22:17:29 +00002252 PyErr_SetString(PyExc_TypeError, m);
Raymond Hettinger2fb70292004-01-11 23:26:51 +00002253 return NULL;
2254 }
2255
Raymond Hettinger193814c2004-12-18 19:00:59 +00002256 v = PySequence_List(it);
Raymond Hettinger2fb70292004-01-11 23:26:51 +00002257 Py_DECREF(it);
Andrew M. Kuchling74042d62000-06-18 18:43:14 +00002258
2259 return v;
2260}
2261
Tim Peters16a77ad2001-09-08 04:00:12 +00002262/* Iterate over seq. Result depends on the operation:
2263 PY_ITERSEARCH_COUNT: -1 if error, else # of times obj appears in seq.
Mark Dickinson3e4caeb2009-02-21 20:27:01 +00002264 PY_ITERSEARCH_INDEX: 0-based index of first occurrence of obj in seq;
Tim Peters16a77ad2001-09-08 04:00:12 +00002265 set ValueError and return -1 if none found; also return -1 on error.
2266 Py_ITERSEARCH_CONTAINS: return 1 if obj in seq, else 0; -1 on error.
2267*/
Neal Norwitz1fc4b772006-03-04 18:49:58 +00002268Py_ssize_t
Tim Peters16a77ad2001-09-08 04:00:12 +00002269_PySequence_IterSearch(PyObject *seq, PyObject *obj, int operation)
Guido van Rossume15dee51995-07-18 14:12:02 +00002270{
Neal Norwitz1fc4b772006-03-04 18:49:58 +00002271 Py_ssize_t n;
Tim Peters16a77ad2001-09-08 04:00:12 +00002272 int wrapped; /* for PY_ITERSEARCH_INDEX, true iff n wrapped around */
2273 PyObject *it; /* iter(seq) */
Guido van Rossume15dee51995-07-18 14:12:02 +00002274
Tim Peters16a77ad2001-09-08 04:00:12 +00002275 if (seq == NULL || obj == NULL) {
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002276 null_error();
2277 return -1;
2278 }
Tim Peters75f8e352001-05-05 11:33:43 +00002279
Tim Peters16a77ad2001-09-08 04:00:12 +00002280 it = PyObject_GetIter(seq);
Tim Peters75f8e352001-05-05 11:33:43 +00002281 if (it == NULL) {
Georg Brandlccff7852006-06-18 22:17:29 +00002282 type_error("argument of type '%.200s' is not iterable", seq);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002283 return -1;
Tim Peters75f8e352001-05-05 11:33:43 +00002284 }
Guido van Rossume15dee51995-07-18 14:12:02 +00002285
Tim Peters16a77ad2001-09-08 04:00:12 +00002286 n = wrapped = 0;
Tim Peters75f8e352001-05-05 11:33:43 +00002287 for (;;) {
2288 int cmp;
2289 PyObject *item = PyIter_Next(it);
2290 if (item == NULL) {
2291 if (PyErr_Occurred())
2292 goto Fail;
2293 break;
2294 }
Tim Peters16a77ad2001-09-08 04:00:12 +00002295
2296 cmp = PyObject_RichCompareBool(obj, item, Py_EQ);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002297 Py_DECREF(item);
Tim Peters75f8e352001-05-05 11:33:43 +00002298 if (cmp < 0)
2299 goto Fail;
2300 if (cmp > 0) {
Tim Peters16a77ad2001-09-08 04:00:12 +00002301 switch (operation) {
2302 case PY_ITERSEARCH_COUNT:
Armin Rigo7ccbca92006-10-04 12:17:45 +00002303 if (n == PY_SSIZE_T_MAX) {
Tim Peters16a77ad2001-09-08 04:00:12 +00002304 PyErr_SetString(PyExc_OverflowError,
Armin Rigo7ccbca92006-10-04 12:17:45 +00002305 "count exceeds C integer size");
Tim Peters16a77ad2001-09-08 04:00:12 +00002306 goto Fail;
2307 }
Armin Rigo7ccbca92006-10-04 12:17:45 +00002308 ++n;
Tim Peters16a77ad2001-09-08 04:00:12 +00002309 break;
2310
2311 case PY_ITERSEARCH_INDEX:
2312 if (wrapped) {
2313 PyErr_SetString(PyExc_OverflowError,
Armin Rigo7ccbca92006-10-04 12:17:45 +00002314 "index exceeds C integer size");
Tim Peters16a77ad2001-09-08 04:00:12 +00002315 goto Fail;
2316 }
2317 goto Done;
2318
2319 case PY_ITERSEARCH_CONTAINS:
2320 n = 1;
2321 goto Done;
2322
2323 default:
2324 assert(!"unknown operation");
Tim Peters75f8e352001-05-05 11:33:43 +00002325 }
Tim Peters16a77ad2001-09-08 04:00:12 +00002326 }
2327
2328 if (operation == PY_ITERSEARCH_INDEX) {
Armin Rigo7ccbca92006-10-04 12:17:45 +00002329 if (n == PY_SSIZE_T_MAX)
Tim Peters16a77ad2001-09-08 04:00:12 +00002330 wrapped = 1;
Armin Rigo7ccbca92006-10-04 12:17:45 +00002331 ++n;
Tim Peters75f8e352001-05-05 11:33:43 +00002332 }
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002333 }
Tim Peters16a77ad2001-09-08 04:00:12 +00002334
2335 if (operation != PY_ITERSEARCH_INDEX)
2336 goto Done;
2337
2338 PyErr_SetString(PyExc_ValueError,
2339 "sequence.index(x): x not in sequence");
2340 /* fall into failure code */
2341Fail:
2342 n = -1;
2343 /* fall through */
2344Done:
Tim Peters75f8e352001-05-05 11:33:43 +00002345 Py_DECREF(it);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002346 return n;
Tim Peters75f8e352001-05-05 11:33:43 +00002347
Guido van Rossume15dee51995-07-18 14:12:02 +00002348}
2349
Tim Peters16a77ad2001-09-08 04:00:12 +00002350/* Return # of times o appears in s. */
Neal Norwitz1fc4b772006-03-04 18:49:58 +00002351Py_ssize_t
Tim Peters16a77ad2001-09-08 04:00:12 +00002352PySequence_Count(PyObject *s, PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00002353{
Tim Peters16a77ad2001-09-08 04:00:12 +00002354 return _PySequence_IterSearch(s, o, PY_ITERSEARCH_COUNT);
Guido van Rossume15dee51995-07-18 14:12:02 +00002355}
2356
Tim Peterscb8d3682001-05-05 21:05:01 +00002357/* Return -1 if error; 1 if ob in seq; 0 if ob not in seq.
Tim Peters16a77ad2001-09-08 04:00:12 +00002358 * Use sq_contains if possible, else defer to _PySequence_IterSearch().
Tim Peterscb8d3682001-05-05 21:05:01 +00002359 */
2360int
2361PySequence_Contains(PyObject *seq, PyObject *ob)
2362{
Neal Norwitz1fc4b772006-03-04 18:49:58 +00002363 Py_ssize_t result;
Tim Peterscb8d3682001-05-05 21:05:01 +00002364 if (PyType_HasFeature(seq->ob_type, Py_TPFLAGS_HAVE_SEQUENCE_IN)) {
2365 PySequenceMethods *sqm = seq->ob_type->tp_as_sequence;
2366 if (sqm != NULL && sqm->sq_contains != NULL)
2367 return (*sqm->sq_contains)(seq, ob);
2368 }
Neal Norwitz1fc4b772006-03-04 18:49:58 +00002369 result = _PySequence_IterSearch(seq, ob, PY_ITERSEARCH_CONTAINS);
2370 return Py_SAFE_DOWNCAST(result, Py_ssize_t, int);
Tim Peterscb8d3682001-05-05 21:05:01 +00002371}
2372
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002373/* Backwards compatibility */
2374#undef PySequence_In
2375int
Fred Drake79912472000-07-09 04:06:11 +00002376PySequence_In(PyObject *w, PyObject *v)
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002377{
2378 return PySequence_Contains(w, v);
2379}
2380
Neal Norwitz1fc4b772006-03-04 18:49:58 +00002381Py_ssize_t
Fred Drake79912472000-07-09 04:06:11 +00002382PySequence_Index(PyObject *s, PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00002383{
Tim Peters16a77ad2001-09-08 04:00:12 +00002384 return _PySequence_IterSearch(s, o, PY_ITERSEARCH_INDEX);
Guido van Rossume15dee51995-07-18 14:12:02 +00002385}
2386
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002387/* Operations on mappings */
2388
2389int
Fred Drake79912472000-07-09 04:06:11 +00002390PyMapping_Check(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00002391{
Raymond Hettinger1be1a792004-09-19 06:00:15 +00002392 if (o && PyInstance_Check(o))
Raymond Hettingere2eda602004-04-04 08:51:41 +00002393 return PyObject_HasAttrString(o, "__getitem__");
2394
2395 return o && o->ob_type->tp_as_mapping &&
2396 o->ob_type->tp_as_mapping->mp_subscript &&
Raymond Hettingered9192e2004-04-05 08:14:48 +00002397 !(o->ob_type->tp_as_sequence &&
2398 o->ob_type->tp_as_sequence->sq_slice);
Guido van Rossume15dee51995-07-18 14:12:02 +00002399}
2400
Martin v. Löwis18e16552006-02-15 17:27:45 +00002401Py_ssize_t
Jeremy Hylton6253f832000-07-12 12:56:19 +00002402PyMapping_Size(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00002403{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002404 PyMappingMethods *m;
Guido van Rossume15dee51995-07-18 14:12:02 +00002405
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002406 if (o == NULL) {
2407 null_error();
2408 return -1;
2409 }
Guido van Rossume15dee51995-07-18 14:12:02 +00002410
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002411 m = o->ob_type->tp_as_mapping;
2412 if (m && m->mp_length)
2413 return m->mp_length(o);
Guido van Rossume15dee51995-07-18 14:12:02 +00002414
Georg Brandlb0061c82006-08-08 11:56:21 +00002415 type_error("object of type '%.200s' has no len()", o);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002416 return -1;
Guido van Rossume15dee51995-07-18 14:12:02 +00002417}
2418
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +00002419#undef PyMapping_Length
Martin v. Löwis18e16552006-02-15 17:27:45 +00002420Py_ssize_t
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +00002421PyMapping_Length(PyObject *o)
2422{
2423 return PyMapping_Size(o);
2424}
2425#define PyMapping_Length PyMapping_Size
2426
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002427PyObject *
Fred Drake79912472000-07-09 04:06:11 +00002428PyMapping_GetItemString(PyObject *o, char *key)
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002429{
2430 PyObject *okey, *r;
2431
2432 if (key == NULL)
2433 return null_error();
2434
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002435 okey = PyString_FromString(key);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002436 if (okey == NULL)
2437 return NULL;
2438 r = PyObject_GetItem(o, okey);
2439 Py_DECREF(okey);
2440 return r;
2441}
2442
2443int
Fred Drake79912472000-07-09 04:06:11 +00002444PyMapping_SetItemString(PyObject *o, char *key, PyObject *value)
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002445{
2446 PyObject *okey;
2447 int r;
2448
2449 if (key == NULL) {
2450 null_error();
2451 return -1;
2452 }
2453
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002454 okey = PyString_FromString(key);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002455 if (okey == NULL)
Guido van Rossumed6219b1998-05-29 02:59:33 +00002456 return -1;
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002457 r = PyObject_SetItem(o, okey, value);
2458 Py_DECREF(okey);
2459 return r;
2460}
2461
2462int
Fred Drake79912472000-07-09 04:06:11 +00002463PyMapping_HasKeyString(PyObject *o, char *key)
Guido van Rossume15dee51995-07-18 14:12:02 +00002464{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002465 PyObject *v;
Guido van Rossume15dee51995-07-18 14:12:02 +00002466
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002467 v = PyMapping_GetItemString(o, key);
2468 if (v) {
2469 Py_DECREF(v);
2470 return 1;
2471 }
2472 PyErr_Clear();
2473 return 0;
Guido van Rossume15dee51995-07-18 14:12:02 +00002474}
2475
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002476int
Fred Drake79912472000-07-09 04:06:11 +00002477PyMapping_HasKey(PyObject *o, PyObject *key)
Guido van Rossume15dee51995-07-18 14:12:02 +00002478{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002479 PyObject *v;
Guido van Rossume15dee51995-07-18 14:12:02 +00002480
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002481 v = PyObject_GetItem(o, key);
2482 if (v) {
2483 Py_DECREF(v);
2484 return 1;
2485 }
2486 PyErr_Clear();
2487 return 0;
Guido van Rossume15dee51995-07-18 14:12:02 +00002488}
2489
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002490/* Operations on callable objects */
2491
2492/* XXX PyCallable_Check() is in object.c */
2493
Guido van Rossume15dee51995-07-18 14:12:02 +00002494PyObject *
Fred Drake79912472000-07-09 04:06:11 +00002495PyObject_CallObject(PyObject *o, PyObject *a)
Guido van Rossume15dee51995-07-18 14:12:02 +00002496{
Guido van Rossum5560b742001-09-14 16:47:50 +00002497 return PyEval_CallObjectWithKeywords(o, a, NULL);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002498}
Guido van Rossume15dee51995-07-18 14:12:02 +00002499
2500PyObject *
Tim Peters6d6c1a32001-08-02 04:15:00 +00002501PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw)
2502{
2503 ternaryfunc call;
2504
2505 if ((call = func->ob_type->tp_call) != NULL) {
Brett Cannon1e534b52007-09-07 04:18:30 +00002506 PyObject *result;
2507 if (Py_EnterRecursiveCall(" while calling a Python object"))
2508 return NULL;
2509 result = (*call)(func, arg, kw);
2510 Py_LeaveRecursiveCall();
Tim Peters6d6c1a32001-08-02 04:15:00 +00002511 if (result == NULL && !PyErr_Occurred())
2512 PyErr_SetString(
2513 PyExc_SystemError,
2514 "NULL result without error in PyObject_Call");
2515 return result;
2516 }
Georg Brandlccff7852006-06-18 22:17:29 +00002517 PyErr_Format(PyExc_TypeError, "'%.200s' object is not callable",
Fred Drake573395a2001-11-01 20:26:12 +00002518 func->ob_type->tp_name);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002519 return NULL;
2520}
2521
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002522static PyObject*
2523call_function_tail(PyObject *callable, PyObject *args)
2524{
2525 PyObject *retval;
2526
2527 if (args == NULL)
2528 return NULL;
2529
2530 if (!PyTuple_Check(args)) {
2531 PyObject *a;
2532
2533 a = PyTuple_New(1);
2534 if (a == NULL) {
2535 Py_DECREF(args);
2536 return NULL;
2537 }
2538 PyTuple_SET_ITEM(a, 0, args);
2539 args = a;
2540 }
2541 retval = PyObject_Call(callable, args, NULL);
2542
2543 Py_DECREF(args);
2544
2545 return retval;
2546}
2547
Tim Peters6d6c1a32001-08-02 04:15:00 +00002548PyObject *
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002549PyObject_CallFunction(PyObject *callable, char *format, ...)
Guido van Rossume15dee51995-07-18 14:12:02 +00002550{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002551 va_list va;
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002552 PyObject *args;
Guido van Rossume15dee51995-07-18 14:12:02 +00002553
Fred Drakeb92cf062001-10-27 06:16:31 +00002554 if (callable == NULL)
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002555 return null_error();
Guido van Rossume15dee51995-07-18 14:12:02 +00002556
Fred Drakeb92cf062001-10-27 06:16:31 +00002557 if (format && *format) {
2558 va_start(va, format);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002559 args = Py_VaBuildValue(format, va);
Fred Drakeb92cf062001-10-27 06:16:31 +00002560 va_end(va);
2561 }
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002562 else
2563 args = PyTuple_New(0);
Guido van Rossume15dee51995-07-18 14:12:02 +00002564
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002565 return call_function_tail(callable, args);
2566}
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002567
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002568PyObject *
2569_PyObject_CallFunction_SizeT(PyObject *callable, char *format, ...)
2570{
2571 va_list va;
2572 PyObject *args;
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002573
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002574 if (callable == NULL)
2575 return null_error();
2576
2577 if (format && *format) {
2578 va_start(va, format);
2579 args = _Py_VaBuildValue_SizeT(format, va);
2580 va_end(va);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002581 }
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002582 else
2583 args = PyTuple_New(0);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002584
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002585 return call_function_tail(callable, args);
Guido van Rossume15dee51995-07-18 14:12:02 +00002586}
2587
2588PyObject *
Guido van Rossume15dee51995-07-18 14:12:02 +00002589PyObject_CallMethod(PyObject *o, char *name, char *format, ...)
Guido van Rossume15dee51995-07-18 14:12:02 +00002590{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002591 va_list va;
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002592 PyObject *args;
Michael W. Hudson0edc7a02005-07-12 10:21:19 +00002593 PyObject *func = NULL;
2594 PyObject *retval = NULL;
Guido van Rossume15dee51995-07-18 14:12:02 +00002595
Fred Drakeb92cf062001-10-27 06:16:31 +00002596 if (o == NULL || name == NULL)
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002597 return null_error();
Guido van Rossume15dee51995-07-18 14:12:02 +00002598
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002599 func = PyObject_GetAttrString(o, name);
2600 if (func == NULL) {
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002601 PyErr_SetString(PyExc_AttributeError, name);
2602 return 0;
2603 }
Guido van Rossume15dee51995-07-18 14:12:02 +00002604
Michael W. Hudson0edc7a02005-07-12 10:21:19 +00002605 if (!PyCallable_Check(func)) {
Georg Brandlccff7852006-06-18 22:17:29 +00002606 type_error("attribute of type '%.200s' is not callable", func);
Michael W. Hudson0edc7a02005-07-12 10:21:19 +00002607 goto exit;
2608 }
Guido van Rossume15dee51995-07-18 14:12:02 +00002609
Fred Drakeb92cf062001-10-27 06:16:31 +00002610 if (format && *format) {
2611 va_start(va, format);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002612 args = Py_VaBuildValue(format, va);
Fred Drakeb92cf062001-10-27 06:16:31 +00002613 va_end(va);
2614 }
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002615 else
2616 args = PyTuple_New(0);
Guido van Rossume15dee51995-07-18 14:12:02 +00002617
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002618 retval = call_function_tail(func, args);
Guido van Rossume15dee51995-07-18 14:12:02 +00002619
Michael W. Hudson0edc7a02005-07-12 10:21:19 +00002620 exit:
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002621 /* args gets consumed in call_function_tail */
2622 Py_XDECREF(func);
2623
2624 return retval;
2625}
2626
2627PyObject *
2628_PyObject_CallMethod_SizeT(PyObject *o, char *name, char *format, ...)
2629{
2630 va_list va;
2631 PyObject *args;
2632 PyObject *func = NULL;
2633 PyObject *retval = NULL;
2634
2635 if (o == NULL || name == NULL)
2636 return null_error();
2637
2638 func = PyObject_GetAttrString(o, name);
2639 if (func == NULL) {
2640 PyErr_SetString(PyExc_AttributeError, name);
2641 return 0;
2642 }
2643
2644 if (!PyCallable_Check(func)) {
Georg Brandlccff7852006-06-18 22:17:29 +00002645 type_error("attribute of type '%.200s' is not callable", func);
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002646 goto exit;
2647 }
2648
2649 if (format && *format) {
2650 va_start(va, format);
2651 args = _Py_VaBuildValue_SizeT(format, va);
2652 va_end(va);
2653 }
2654 else
2655 args = PyTuple_New(0);
2656
2657 retval = call_function_tail(func, args);
2658
2659 exit:
2660 /* args gets consumed in call_function_tail */
Michael W. Hudson0edc7a02005-07-12 10:21:19 +00002661 Py_XDECREF(func);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002662
2663 return retval;
Guido van Rossume15dee51995-07-18 14:12:02 +00002664}
Guido van Rossum823649d2001-03-21 18:40:58 +00002665
2666
Fred Drakeb421b8c2001-10-26 16:21:32 +00002667static PyObject *
Fred Drakeb0c079e2001-10-28 02:39:03 +00002668objargs_mktuple(va_list va)
Fred Drakeb421b8c2001-10-26 16:21:32 +00002669{
2670 int i, n = 0;
2671 va_list countva;
2672 PyObject *result, *tmp;
2673
2674#ifdef VA_LIST_IS_ARRAY
2675 memcpy(countva, va, sizeof(va_list));
2676#else
Martin v. Löwis75d2d942002-07-28 10:23:27 +00002677#ifdef __va_copy
2678 __va_copy(countva, va);
2679#else
Fred Drakeb421b8c2001-10-26 16:21:32 +00002680 countva = va;
2681#endif
Martin v. Löwis75d2d942002-07-28 10:23:27 +00002682#endif
Fred Drakeb421b8c2001-10-26 16:21:32 +00002683
2684 while (((PyObject *)va_arg(countva, PyObject *)) != NULL)
2685 ++n;
2686 result = PyTuple_New(n);
2687 if (result != NULL && n > 0) {
2688 for (i = 0; i < n; ++i) {
2689 tmp = (PyObject *)va_arg(va, PyObject *);
2690 PyTuple_SET_ITEM(result, i, tmp);
2691 Py_INCREF(tmp);
2692 }
2693 }
2694 return result;
2695}
2696
2697PyObject *
Fred Drakeb0c079e2001-10-28 02:39:03 +00002698PyObject_CallMethodObjArgs(PyObject *callable, PyObject *name, ...)
Fred Drakeb421b8c2001-10-26 16:21:32 +00002699{
2700 PyObject *args, *tmp;
2701 va_list vargs;
2702
2703 if (callable == NULL || name == NULL)
2704 return null_error();
2705
2706 callable = PyObject_GetAttr(callable, name);
2707 if (callable == NULL)
2708 return NULL;
2709
2710 /* count the args */
2711 va_start(vargs, name);
Fred Drakeb0c079e2001-10-28 02:39:03 +00002712 args = objargs_mktuple(vargs);
Fred Drakeb421b8c2001-10-26 16:21:32 +00002713 va_end(vargs);
2714 if (args == NULL) {
2715 Py_DECREF(callable);
2716 return NULL;
2717 }
2718 tmp = PyObject_Call(callable, args, NULL);
2719 Py_DECREF(args);
2720 Py_DECREF(callable);
2721
2722 return tmp;
2723}
2724
2725PyObject *
Fred Drakeb0c079e2001-10-28 02:39:03 +00002726PyObject_CallFunctionObjArgs(PyObject *callable, ...)
Fred Drakeb421b8c2001-10-26 16:21:32 +00002727{
2728 PyObject *args, *tmp;
2729 va_list vargs;
2730
2731 if (callable == NULL)
2732 return null_error();
2733
2734 /* count the args */
2735 va_start(vargs, callable);
Fred Drakeb0c079e2001-10-28 02:39:03 +00002736 args = objargs_mktuple(vargs);
Fred Drakeb421b8c2001-10-26 16:21:32 +00002737 va_end(vargs);
2738 if (args == NULL)
2739 return NULL;
2740 tmp = PyObject_Call(callable, args, NULL);
2741 Py_DECREF(args);
2742
2743 return tmp;
2744}
2745
2746
Guido van Rossum823649d2001-03-21 18:40:58 +00002747/* isinstance(), issubclass() */
2748
Barry Warsawf16951c2002-04-23 22:45:44 +00002749/* abstract_get_bases() has logically 4 return states, with a sort of 0th
2750 * state that will almost never happen.
2751 *
2752 * 0. creating the __bases__ static string could get a MemoryError
2753 * 1. getattr(cls, '__bases__') could raise an AttributeError
2754 * 2. getattr(cls, '__bases__') could raise some other exception
2755 * 3. getattr(cls, '__bases__') could return a tuple
2756 * 4. getattr(cls, '__bases__') could return something other than a tuple
2757 *
2758 * Only state #3 is a non-error state and only it returns a non-NULL object
2759 * (it returns the retrieved tuple).
2760 *
2761 * Any raised AttributeErrors are masked by clearing the exception and
2762 * returning NULL. If an object other than a tuple comes out of __bases__,
2763 * then again, the return value is NULL. So yes, these two situations
2764 * produce exactly the same results: NULL is returned and no error is set.
2765 *
2766 * If some exception other than AttributeError is raised, then NULL is also
2767 * returned, but the exception is not cleared. That's because we want the
2768 * exception to be propagated along.
2769 *
2770 * Callers are expected to test for PyErr_Occurred() when the return value
2771 * is NULL to decide whether a valid exception should be propagated or not.
2772 * When there's no exception to propagate, it's customary for the caller to
2773 * set a TypeError.
2774 */
Neil Schemenauer6b471292001-10-18 03:18:43 +00002775static PyObject *
2776abstract_get_bases(PyObject *cls)
Guido van Rossum823649d2001-03-21 18:40:58 +00002777{
2778 static PyObject *__bases__ = NULL;
2779 PyObject *bases;
Guido van Rossum823649d2001-03-21 18:40:58 +00002780
2781 if (__bases__ == NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002782 __bases__ = PyString_InternFromString("__bases__");
Guido van Rossum823649d2001-03-21 18:40:58 +00002783 if (__bases__ == NULL)
Neil Schemenauer6b471292001-10-18 03:18:43 +00002784 return NULL;
Guido van Rossum823649d2001-03-21 18:40:58 +00002785 }
Neil Schemenauer6b471292001-10-18 03:18:43 +00002786 bases = PyObject_GetAttr(cls, __bases__);
Barry Warsawf16951c2002-04-23 22:45:44 +00002787 if (bases == NULL) {
2788 if (PyErr_ExceptionMatches(PyExc_AttributeError))
2789 PyErr_Clear();
Neil Schemenauer6b471292001-10-18 03:18:43 +00002790 return NULL;
Guido van Rossum823649d2001-03-21 18:40:58 +00002791 }
Barry Warsawf16951c2002-04-23 22:45:44 +00002792 if (!PyTuple_Check(bases)) {
2793 Py_DECREF(bases);
2794 return NULL;
2795 }
Neil Schemenauer6b471292001-10-18 03:18:43 +00002796 return bases;
2797}
2798
2799
2800static int
2801abstract_issubclass(PyObject *derived, PyObject *cls)
2802{
Antoine Pitrou0668c622008-08-26 22:42:08 +00002803 PyObject *bases = NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002804 Py_ssize_t i, n;
Neil Schemenauer6b471292001-10-18 03:18:43 +00002805 int r = 0;
2806
Antoine Pitrou0668c622008-08-26 22:42:08 +00002807 while (1) {
2808 if (derived == cls)
2809 return 1;
2810 bases = abstract_get_bases(derived);
2811 if (bases == NULL) {
2812 if (PyErr_Occurred())
2813 return -1;
2814 return 0;
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002815 }
Antoine Pitrou0668c622008-08-26 22:42:08 +00002816 n = PyTuple_GET_SIZE(bases);
2817 if (n == 0) {
2818 Py_DECREF(bases);
2819 return 0;
2820 }
2821 /* Avoid recursivity in the single inheritance case */
2822 if (n == 1) {
2823 derived = PyTuple_GET_ITEM(bases, 0);
2824 Py_DECREF(bases);
2825 continue;
2826 }
2827 for (i = 0; i < n; i++) {
2828 r = abstract_issubclass(PyTuple_GET_ITEM(bases, i), cls);
2829 if (r != 0)
2830 break;
2831 }
2832 Py_DECREF(bases);
2833 return r;
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002834 }
Guido van Rossum823649d2001-03-21 18:40:58 +00002835}
2836
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002837static int
2838check_class(PyObject *cls, const char *error)
2839{
2840 PyObject *bases = abstract_get_bases(cls);
2841 if (bases == NULL) {
2842 /* Do not mask errors. */
2843 if (!PyErr_Occurred())
2844 PyErr_SetString(PyExc_TypeError, error);
2845 return 0;
2846 }
2847 Py_DECREF(bases);
2848 return -1;
2849}
2850
Brett Cannon4f653312004-03-20 22:52:14 +00002851static int
Antoine Pitrou0668c622008-08-26 22:42:08 +00002852recursive_isinstance(PyObject *inst, PyObject *cls)
Guido van Rossum823649d2001-03-21 18:40:58 +00002853{
2854 PyObject *icls;
2855 static PyObject *__class__ = NULL;
2856 int retval = 0;
2857
Guido van Rossum03bc7d32003-02-12 03:32:58 +00002858 if (__class__ == NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002859 __class__ = PyString_InternFromString("__class__");
Guido van Rossum03bc7d32003-02-12 03:32:58 +00002860 if (__class__ == NULL)
2861 return -1;
2862 }
2863
Neil Schemenauer6b471292001-10-18 03:18:43 +00002864 if (PyClass_Check(cls) && PyInstance_Check(inst)) {
2865 PyObject *inclass =
2866 (PyObject*)((PyInstanceObject*)inst)->in_class;
2867 retval = PyClass_IsSubclass(inclass, cls);
Guido van Rossum823649d2001-03-21 18:40:58 +00002868 }
2869 else if (PyType_Check(cls)) {
Tim Peters6d6c1a32001-08-02 04:15:00 +00002870 retval = PyObject_TypeCheck(inst, (PyTypeObject *)cls);
Guido van Rossum03bc7d32003-02-12 03:32:58 +00002871 if (retval == 0) {
2872 PyObject *c = PyObject_GetAttr(inst, __class__);
2873 if (c == NULL) {
2874 PyErr_Clear();
2875 }
2876 else {
Guido van Rossume5b130b2003-02-12 03:36:05 +00002877 if (c != (PyObject *)(inst->ob_type) &&
2878 PyType_Check(c))
Guido van Rossum03bc7d32003-02-12 03:32:58 +00002879 retval = PyType_IsSubtype(
2880 (PyTypeObject *)c,
2881 (PyTypeObject *)cls);
2882 Py_DECREF(c);
2883 }
2884 }
Guido van Rossum823649d2001-03-21 18:40:58 +00002885 }
Neil Schemenauer6b471292001-10-18 03:18:43 +00002886 else {
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002887 if (!check_class(cls,
2888 "isinstance() arg 2 must be a class, type,"
2889 " or tuple of classes and types"))
Neil Schemenauer6b471292001-10-18 03:18:43 +00002890 return -1;
Guido van Rossum823649d2001-03-21 18:40:58 +00002891 icls = PyObject_GetAttr(inst, __class__);
Neil Schemenauer6b471292001-10-18 03:18:43 +00002892 if (icls == NULL) {
2893 PyErr_Clear();
2894 retval = 0;
Guido van Rossum823649d2001-03-21 18:40:58 +00002895 }
Neil Schemenauer6b471292001-10-18 03:18:43 +00002896 else {
2897 retval = abstract_issubclass(icls, cls);
2898 Py_DECREF(icls);
2899 }
Guido van Rossum823649d2001-03-21 18:40:58 +00002900 }
Guido van Rossum823649d2001-03-21 18:40:58 +00002901
Guido van Rossum823649d2001-03-21 18:40:58 +00002902 return retval;
2903}
2904
2905int
Brett Cannon4f653312004-03-20 22:52:14 +00002906PyObject_IsInstance(PyObject *inst, PyObject *cls)
2907{
Christian Heimese247f002008-02-14 22:40:11 +00002908 static PyObject *name = NULL;
Raymond Hettinger9a47e622008-03-18 23:22:29 +00002909
2910 /* Quick test for an exact match */
Raymond Hettingerde48d842008-03-19 03:56:59 +00002911 if (Py_TYPE(inst) == (PyTypeObject *)cls)
Raymond Hettinger9a47e622008-03-18 23:22:29 +00002912 return 1;
2913
Antoine Pitrou0668c622008-08-26 22:42:08 +00002914 if (PyTuple_Check(cls)) {
2915 Py_ssize_t i;
2916 Py_ssize_t n;
2917 int r = 0;
2918
2919 if (Py_EnterRecursiveCall(" in __instancecheck__"))
2920 return -1;
2921 n = PyTuple_GET_SIZE(cls);
2922 for (i = 0; i < n; ++i) {
2923 PyObject *item = PyTuple_GET_ITEM(cls, i);
2924 r = PyObject_IsInstance(inst, item);
2925 if (r != 0)
2926 /* either found it, or got an error */
2927 break;
2928 }
2929 Py_LeaveRecursiveCall();
2930 return r;
2931 }
Benjamin Petersonfb6fb062009-05-16 21:44:25 +00002932
Benjamin Petersona27dbc62009-05-16 22:40:56 +00002933 if (!(PyClass_Check(cls) || PyInstance_Check(cls))) {
2934 PyObject *checker;
Benjamin Petersonfb6fb062009-05-16 21:44:25 +00002935 checker = _PyObject_LookupSpecial(cls, "__instancecheck__", &name);
Benjamin Petersona27dbc62009-05-16 22:40:56 +00002936 if (checker != NULL) {
2937 PyObject *res;
2938 int ok = -1;
2939 if (Py_EnterRecursiveCall(" in __instancecheck__")) {
2940 Py_DECREF(checker);
2941 return ok;
2942 }
2943 res = PyObject_CallFunctionObjArgs(checker, inst, NULL);
2944 Py_LeaveRecursiveCall();
Guido van Rossumb5591132007-09-10 22:36:02 +00002945 Py_DECREF(checker);
Benjamin Petersona27dbc62009-05-16 22:40:56 +00002946 if (res != NULL) {
2947 ok = PyObject_IsTrue(res);
2948 Py_DECREF(res);
2949 }
Guido van Rossumb5591132007-09-10 22:36:02 +00002950 return ok;
2951 }
Benjamin Peterson87e50062009-05-25 02:40:21 +00002952 else if (PyErr_Occurred())
2953 return -1;
Guido van Rossumb5591132007-09-10 22:36:02 +00002954 }
Antoine Pitrou0668c622008-08-26 22:42:08 +00002955 return recursive_isinstance(inst, cls);
Brett Cannon4f653312004-03-20 22:52:14 +00002956}
2957
2958static int
Antoine Pitrou0668c622008-08-26 22:42:08 +00002959recursive_issubclass(PyObject *derived, PyObject *cls)
Guido van Rossum823649d2001-03-21 18:40:58 +00002960{
2961 int retval;
2962
Antoine Pitrou0668c622008-08-26 22:42:08 +00002963 if (PyType_Check(cls) && PyType_Check(derived)) {
2964 /* Fast path (non-recursive) */
2965 return PyType_IsSubtype(
2966 (PyTypeObject *)derived, (PyTypeObject *)cls);
2967 }
Guido van Rossum823649d2001-03-21 18:40:58 +00002968 if (!PyClass_Check(derived) || !PyClass_Check(cls)) {
Guido van Rossumf6c9ba82003-02-10 16:05:43 +00002969 if (!check_class(derived,
2970 "issubclass() arg 1 must be a class"))
Neil Schemenauer6b471292001-10-18 03:18:43 +00002971 return -1;
Neil Schemenauer6b471292001-10-18 03:18:43 +00002972
Antoine Pitrou0668c622008-08-26 22:42:08 +00002973 if (!check_class(cls,
2974 "issubclass() arg 2 must be a class"
2975 " or tuple of classes"))
2976 return -1;
Neil Schemenauer6b471292001-10-18 03:18:43 +00002977 retval = abstract_issubclass(derived, cls);
Guido van Rossum823649d2001-03-21 18:40:58 +00002978 }
2979 else {
2980 /* shortcut */
2981 if (!(retval = (derived == cls)))
2982 retval = PyClass_IsSubclass(derived, cls);
2983 }
2984
2985 return retval;
2986}
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00002987
Brett Cannon4f653312004-03-20 22:52:14 +00002988int
2989PyObject_IsSubclass(PyObject *derived, PyObject *cls)
2990{
Christian Heimese247f002008-02-14 22:40:11 +00002991 static PyObject *name = NULL;
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 }
Benjamin Petersona27dbc62009-05-16 22:40:56 +00003011 if (!(PyClass_Check(cls) || PyInstance_Check(cls))) {
3012 PyObject *checker;
Benjamin Petersonfb6fb062009-05-16 21:44:25 +00003013 checker = _PyObject_LookupSpecial(cls, "__subclasscheck__", &name);
Benjamin Petersona27dbc62009-05-16 22:40:56 +00003014 if (checker != NULL) {
3015 PyObject *res;
3016 int ok = -1;
3017 if (Py_EnterRecursiveCall(" in __subclasscheck__")) {
3018 Py_DECREF(checker);
3019 return ok;
3020 }
3021 res = PyObject_CallFunctionObjArgs(checker, derived, NULL);
3022 Py_LeaveRecursiveCall();
Antoine Pitrou0668c622008-08-26 22:42:08 +00003023 Py_DECREF(checker);
Benjamin Petersona27dbc62009-05-16 22:40:56 +00003024 if (res != NULL) {
3025 ok = PyObject_IsTrue(res);
3026 Py_DECREF(res);
3027 }
Guido van Rossumb5591132007-09-10 22:36:02 +00003028 return ok;
Antoine Pitrou0668c622008-08-26 22:42:08 +00003029 }
Benjamin Peterson87e50062009-05-25 02:40:21 +00003030 else if (PyErr_Occurred()) {
3031 return -1;
3032 }
Guido van Rossumb5591132007-09-10 22:36:02 +00003033 }
Antoine Pitrou0668c622008-08-26 22:42:08 +00003034 return recursive_issubclass(derived, cls);
3035}
3036
3037int
3038_PyObject_RealIsInstance(PyObject *inst, PyObject *cls)
3039{
3040 return recursive_isinstance(inst, cls);
3041}
3042
3043int
3044_PyObject_RealIsSubclass(PyObject *derived, PyObject *cls)
3045{
3046 return recursive_issubclass(derived, cls);
Brett Cannon4f653312004-03-20 22:52:14 +00003047}
3048
3049
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00003050PyObject *
3051PyObject_GetIter(PyObject *o)
3052{
3053 PyTypeObject *t = o->ob_type;
3054 getiterfunc f = NULL;
3055 if (PyType_HasFeature(t, Py_TPFLAGS_HAVE_ITER))
3056 f = t->tp_iter;
3057 if (f == NULL) {
3058 if (PySequence_Check(o))
Guido van Rossum213c7a62001-04-23 14:08:49 +00003059 return PySeqIter_New(o);
Georg Brandlccff7852006-06-18 22:17:29 +00003060 return type_error("'%.200s' object is not iterable", o);
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00003061 }
Guido van Rossum213c7a62001-04-23 14:08:49 +00003062 else {
3063 PyObject *res = (*f)(o);
3064 if (res != NULL && !PyIter_Check(res)) {
3065 PyErr_Format(PyExc_TypeError,
3066 "iter() returned non-iterator "
3067 "of type '%.100s'",
3068 res->ob_type->tp_name);
3069 Py_DECREF(res);
3070 res = NULL;
3071 }
3072 return res;
3073 }
3074}
3075
Tim Petersf4848da2001-05-05 00:14:56 +00003076/* Return next item.
3077 * If an error occurs, return NULL. PyErr_Occurred() will be true.
3078 * If the iteration terminates normally, return NULL and clear the
3079 * PyExc_StopIteration exception (if it was set). PyErr_Occurred()
3080 * will be false.
3081 * Else return the next object. PyErr_Occurred() will be false.
3082 */
Guido van Rossum213c7a62001-04-23 14:08:49 +00003083PyObject *
3084PyIter_Next(PyObject *iter)
3085{
Tim Petersf4848da2001-05-05 00:14:56 +00003086 PyObject *result;
Tim Petersf4848da2001-05-05 00:14:56 +00003087 result = (*iter->ob_type->tp_iternext)(iter);
3088 if (result == NULL &&
3089 PyErr_Occurred() &&
3090 PyErr_ExceptionMatches(PyExc_StopIteration))
3091 PyErr_Clear();
3092 return result;
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00003093}