blob: 0b541ee74887a57d9a70c719a113297faf3f3c72 [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 {
Eric Smithd44b2fc2010-04-02 12:30:56 +0000780 PyObject *self_as_str = NULL;
781 PyObject *format_method = NULL;
782 Py_ssize_t format_len;
Eric Smitha9f7d622008-02-17 19:46:49 +0000783
784 PyErr_Clear();
785 /* Per the PEP, convert to str (or unicode,
786 depending on the type of the format
787 specifier). For new-style classes, this
788 logic is done by object.__format__(). */
Benjamin Peterson78821dd2009-01-25 17:15:10 +0000789#ifdef Py_USING_UNICODE
Eric Smithd44b2fc2010-04-02 12:30:56 +0000790 if (spec_is_unicode) {
791 format_len = PyUnicode_GET_SIZE(format_spec);
Eric Smitha9f7d622008-02-17 19:46:49 +0000792 self_as_str = PyObject_Unicode(obj);
Eric Smithd44b2fc2010-04-02 12:30:56 +0000793 } else
Benjamin Peterson78821dd2009-01-25 17:15:10 +0000794#endif
Eric Smithd44b2fc2010-04-02 12:30:56 +0000795 {
796 format_len = PyString_GET_SIZE(format_spec);
Eric Smitha9f7d622008-02-17 19:46:49 +0000797 self_as_str = PyObject_Str(obj);
Eric Smithd44b2fc2010-04-02 12:30:56 +0000798 }
Eric Smitha9f7d622008-02-17 19:46:49 +0000799 if (self_as_str == NULL)
Eric Smithd44b2fc2010-04-02 12:30:56 +0000800 goto done1;
801
802 if (format_len > 0) {
803 /* See the almost identical code in
804 typeobject.c for new-style
805 classes. */
806 if (PyErr_WarnEx(
807 PyExc_PendingDeprecationWarning,
808 "object.__format__ with a non-empty "
809 "format string is deprecated", 1)
810 < 0) {
811 goto done1;
812 }
813 /* Eventually this will become an
814 error:
815 PyErr_Format(PyExc_TypeError,
816 "non-empty format string passed to "
817 "object.__format__");
818 goto done1;
819 */
820 }
Eric Smitha9f7d622008-02-17 19:46:49 +0000821
822 /* Then call str.__format__ on that result */
823 format_method = PyObject_GetAttr(self_as_str,
824 str__format__);
825 if (format_method == NULL) {
Eric Smithd44b2fc2010-04-02 12:30:56 +0000826 goto done1;
Eric Smitha9f7d622008-02-17 19:46:49 +0000827 }
Eric Smithd44b2fc2010-04-02 12:30:56 +0000828 result = PyObject_CallFunctionObjArgs(format_method,
Eric Smitha9f7d622008-02-17 19:46:49 +0000829 format_spec,
830 NULL);
Eric Smithd44b2fc2010-04-02 12:30:56 +0000831done1:
832 Py_XDECREF(self_as_str);
833 Py_XDECREF(format_method);
Eric Smitha9f7d622008-02-17 19:46:49 +0000834 if (result == NULL)
835 goto done;
Eric Smithd44b2fc2010-04-02 12:30:56 +0000836 }
Eric Smitha9f7d622008-02-17 19:46:49 +0000837 } else {
838 /* Not an instance of a classic class, use the code
839 from py3k */
840
841 /* Find the (unbound!) __format__ method (a borrowed
842 reference) */
843 PyObject *method = _PyType_Lookup(Py_TYPE(obj),
844 str__format__);
845 if (method == NULL) {
846 PyErr_Format(PyExc_TypeError,
847 "Type %.100s doesn't define __format__",
848 Py_TYPE(obj)->tp_name);
849 goto done;
850 }
851 /* And call it, binding it to the value */
852 result = PyObject_CallFunctionObjArgs(method, obj,
853 format_spec, NULL);
854 }
855
856 if (result == NULL)
857 goto done;
858
859 /* Check the result type, and make sure it's str or unicode */
Benjamin Peterson78821dd2009-01-25 17:15:10 +0000860#ifdef Py_USING_UNICODE
Eric Smitha9f7d622008-02-17 19:46:49 +0000861 if (PyUnicode_Check(result))
862 result_is_unicode = 1;
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000863 else if (PyString_Check(result))
Eric Smitha9f7d622008-02-17 19:46:49 +0000864 result_is_unicode = 0;
865 else {
Benjamin Peterson78821dd2009-01-25 17:15:10 +0000866#else
867 if (!PyString_Check(result)) {
868#endif
Eric Smitha9f7d622008-02-17 19:46:49 +0000869 PyErr_Format(PyExc_TypeError,
870 "%.100s.__format__ must return string or "
871 "unicode, not %.100s", Py_TYPE(obj)->tp_name,
872 Py_TYPE(result)->tp_name);
873 Py_DECREF(result);
874 result = NULL;
875 goto done;
876 }
877
878 /* Convert to unicode, if needed. Required if spec is unicode
879 and result is str */
Benjamin Peterson78821dd2009-01-25 17:15:10 +0000880#ifdef Py_USING_UNICODE
Eric Smitha9f7d622008-02-17 19:46:49 +0000881 if (spec_is_unicode && !result_is_unicode) {
882 PyObject *tmp = PyObject_Unicode(result);
883 /* This logic works whether or not tmp is NULL */
884 Py_DECREF(result);
885 result = tmp;
886 }
Benjamin Peterson78821dd2009-01-25 17:15:10 +0000887#endif
Eric Smitha9f7d622008-02-17 19:46:49 +0000888
889done:
890 Py_XDECREF(empty);
891 return result;
892}
893
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000894/* Operations on numbers */
895
896int
Fred Drake79912472000-07-09 04:06:11 +0000897PyNumber_Check(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +0000898{
Guido van Rossum6921eca2003-02-18 16:36:28 +0000899 return o && o->ob_type->tp_as_number &&
900 (o->ob_type->tp_as_number->nb_int ||
901 o->ob_type->tp_as_number->nb_float);
Guido van Rossume15dee51995-07-18 14:12:02 +0000902}
903
Guido van Rossumcea1c8c1998-05-22 00:47:05 +0000904/* Binary operators */
Guido van Rossume15dee51995-07-18 14:12:02 +0000905
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000906/* New style number protocol support */
Guido van Rossume15dee51995-07-18 14:12:02 +0000907
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000908#define NB_SLOT(x) offsetof(PyNumberMethods, x)
909#define NB_BINOP(nb_methods, slot) \
Neil Schemenauerb808c5c2002-11-24 01:34:49 +0000910 (*(binaryfunc*)(& ((char*)nb_methods)[slot]))
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000911#define NB_TERNOP(nb_methods, slot) \
Neil Schemenauerb808c5c2002-11-24 01:34:49 +0000912 (*(ternaryfunc*)(& ((char*)nb_methods)[slot]))
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000913
914/*
915 Calling scheme used for binary operations:
916
917 v w Action
918 -------------------------------------------------------------------
Guido van Rossum4bb1e362001-09-28 23:49:48 +0000919 new new w.op(v,w)[*], v.op(v,w), w.op(v,w)
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000920 new old v.op(v,w), coerce(v,w), v.op(v,w)
921 old new w.op(v,w), coerce(v,w), v.op(v,w)
922 old old coerce(v,w), v.op(v,w)
923
Guido van Rossum4bb1e362001-09-28 23:49:48 +0000924 [*] only when v->ob_type != w->ob_type && w->ob_type is a subclass of
925 v->ob_type
926
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000927 Legend:
928 -------
929 * new == new style number
930 * old == old style number
931 * Action indicates the order in which operations are tried until either
932 a valid result is produced or an error occurs.
933
934 */
935
936static PyObject *
937binary_op1(PyObject *v, PyObject *w, const int op_slot)
Guido van Rossume15dee51995-07-18 14:12:02 +0000938{
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000939 PyObject *x;
Guido van Rossum4bb1e362001-09-28 23:49:48 +0000940 binaryfunc slotv = NULL;
941 binaryfunc slotw = NULL;
942
943 if (v->ob_type->tp_as_number != NULL && NEW_STYLE_NUMBER(v))
Neil Schemenauerb808c5c2002-11-24 01:34:49 +0000944 slotv = NB_BINOP(v->ob_type->tp_as_number, op_slot);
Guido van Rossum4bb1e362001-09-28 23:49:48 +0000945 if (w->ob_type != v->ob_type &&
946 w->ob_type->tp_as_number != NULL && NEW_STYLE_NUMBER(w)) {
Neil Schemenauerb808c5c2002-11-24 01:34:49 +0000947 slotw = NB_BINOP(w->ob_type->tp_as_number, op_slot);
Guido van Rossum4bb1e362001-09-28 23:49:48 +0000948 if (slotw == slotv)
949 slotw = NULL;
Guido van Rossume15dee51995-07-18 14:12:02 +0000950 }
Guido van Rossum4bb1e362001-09-28 23:49:48 +0000951 if (slotv) {
Guido van Rossum89c42642001-10-01 17:10:18 +0000952 if (slotw && PyType_IsSubtype(w->ob_type, v->ob_type)) {
953 x = slotw(v, w);
954 if (x != Py_NotImplemented)
955 return x;
956 Py_DECREF(x); /* can't do it */
957 slotw = NULL;
958 }
Guido van Rossum4bb1e362001-09-28 23:49:48 +0000959 x = slotv(v, w);
960 if (x != Py_NotImplemented)
961 return x;
962 Py_DECREF(x); /* can't do it */
963 }
964 if (slotw) {
965 x = slotw(v, w);
966 if (x != Py_NotImplemented)
967 return x;
968 Py_DECREF(x); /* can't do it */
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000969 }
970 if (!NEW_STYLE_NUMBER(v) || !NEW_STYLE_NUMBER(w)) {
971 int err = PyNumber_CoerceEx(&v, &w);
972 if (err < 0) {
973 return NULL;
974 }
975 if (err == 0) {
976 PyNumberMethods *mv = v->ob_type->tp_as_number;
977 if (mv) {
Guido van Rossum4bb1e362001-09-28 23:49:48 +0000978 binaryfunc slot;
Neil Schemenauerb808c5c2002-11-24 01:34:49 +0000979 slot = NB_BINOP(mv, op_slot);
Guido van Rossum4bb1e362001-09-28 23:49:48 +0000980 if (slot) {
Neal Norwitz0c6e2f12006-01-08 06:13:44 +0000981 x = slot(v, w);
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000982 Py_DECREF(v);
983 Py_DECREF(w);
984 return x;
985 }
986 }
987 /* CoerceEx incremented the reference counts */
988 Py_DECREF(v);
989 Py_DECREF(w);
990 }
991 }
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000992 Py_INCREF(Py_NotImplemented);
993 return Py_NotImplemented;
994}
Guido van Rossum77660912002-04-16 16:32:50 +0000995
Neil Schemenauer5a1f0152001-01-04 01:39:06 +0000996static PyObject *
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +0000997binop_type_error(PyObject *v, PyObject *w, const char *op_name)
998{
999 PyErr_Format(PyExc_TypeError,
Georg Brandlccff7852006-06-18 22:17:29 +00001000 "unsupported operand type(s) for %.100s: "
1001 "'%.100s' and '%.100s'",
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001002 op_name,
1003 v->ob_type->tp_name,
1004 w->ob_type->tp_name);
1005 return NULL;
1006}
1007
1008static PyObject *
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001009binary_op(PyObject *v, PyObject *w, const int op_slot, const char *op_name)
1010{
1011 PyObject *result = binary_op1(v, w, op_slot);
1012 if (result == Py_NotImplemented) {
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001013 Py_DECREF(result);
1014 return binop_type_error(v, w, op_name);
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001015 }
1016 return result;
Guido van Rossume15dee51995-07-18 14:12:02 +00001017}
1018
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001019
1020/*
1021 Calling scheme used for ternary operations:
1022
Guido van Rossum84675ac2001-09-29 01:05:03 +00001023 *** In some cases, w.op is called before v.op; see binary_op1. ***
1024
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001025 v w z Action
1026 -------------------------------------------------------------------
1027 new new new v.op(v,w,z), w.op(v,w,z), z.op(v,w,z)
1028 new old new v.op(v,w,z), z.op(v,w,z), coerce(v,w,z), v.op(v,w,z)
1029 old new new w.op(v,w,z), z.op(v,w,z), coerce(v,w,z), v.op(v,w,z)
1030 old old new z.op(v,w,z), coerce(v,w,z), v.op(v,w,z)
1031 new new old v.op(v,w,z), w.op(v,w,z), coerce(v,w,z), v.op(v,w,z)
1032 new old old v.op(v,w,z), coerce(v,w,z), v.op(v,w,z)
1033 old new old w.op(v,w,z), coerce(v,w,z), v.op(v,w,z)
1034 old old old coerce(v,w,z), v.op(v,w,z)
1035
1036 Legend:
1037 -------
1038 * new == new style number
1039 * old == old style number
1040 * Action indicates the order in which operations are tried until either
1041 a valid result is produced or an error occurs.
1042 * coerce(v,w,z) actually does: coerce(v,w), coerce(v,z), coerce(w,z) and
1043 only if z != Py_None; if z == Py_None, then it is treated as absent
1044 variable and only coerce(v,w) is tried.
1045
1046 */
1047
1048static PyObject *
1049ternary_op(PyObject *v,
1050 PyObject *w,
1051 PyObject *z,
1052 const int op_slot,
1053 const char *op_name)
Guido van Rossume15dee51995-07-18 14:12:02 +00001054{
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001055 PyNumberMethods *mv, *mw, *mz;
Guido van Rossum84675ac2001-09-29 01:05:03 +00001056 PyObject *x = NULL;
1057 ternaryfunc slotv = NULL;
1058 ternaryfunc slotw = NULL;
1059 ternaryfunc slotz = NULL;
Guido van Rossum77660912002-04-16 16:32:50 +00001060
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001061 mv = v->ob_type->tp_as_number;
Guido van Rossum4bb1e362001-09-28 23:49:48 +00001062 mw = w->ob_type->tp_as_number;
Guido van Rossum84675ac2001-09-29 01:05:03 +00001063 if (mv != NULL && NEW_STYLE_NUMBER(v))
Neil Schemenauerb808c5c2002-11-24 01:34:49 +00001064 slotv = NB_TERNOP(mv, op_slot);
Guido van Rossum84675ac2001-09-29 01:05:03 +00001065 if (w->ob_type != v->ob_type &&
Raymond Hettingerc2e095f2002-12-07 10:05:27 +00001066 mw != NULL && NEW_STYLE_NUMBER(w)) {
Neil Schemenauerb808c5c2002-11-24 01:34:49 +00001067 slotw = NB_TERNOP(mw, op_slot);
Guido van Rossum84675ac2001-09-29 01:05:03 +00001068 if (slotw == slotv)
1069 slotw = NULL;
Guido van Rossum4bb1e362001-09-28 23:49:48 +00001070 }
Guido van Rossum84675ac2001-09-29 01:05:03 +00001071 if (slotv) {
Guido van Rossum89c42642001-10-01 17:10:18 +00001072 if (slotw && PyType_IsSubtype(w->ob_type, v->ob_type)) {
1073 x = slotw(v, w, z);
1074 if (x != Py_NotImplemented)
1075 return x;
1076 Py_DECREF(x); /* can't do it */
1077 slotw = NULL;
1078 }
Guido van Rossum84675ac2001-09-29 01:05:03 +00001079 x = slotv(v, w, z);
1080 if (x != Py_NotImplemented)
1081 return x;
1082 Py_DECREF(x); /* can't do it */
1083 }
1084 if (slotw) {
1085 x = slotw(v, w, z);
1086 if (x != Py_NotImplemented)
1087 return x;
1088 Py_DECREF(x); /* can't do it */
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001089 }
1090 mz = z->ob_type->tp_as_number;
1091 if (mz != NULL && NEW_STYLE_NUMBER(z)) {
Neil Schemenauerb808c5c2002-11-24 01:34:49 +00001092 slotz = NB_TERNOP(mz, op_slot);
Guido van Rossum84675ac2001-09-29 01:05:03 +00001093 if (slotz == slotv || slotz == slotw)
1094 slotz = NULL;
1095 if (slotz) {
1096 x = slotz(v, w, z);
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001097 if (x != Py_NotImplemented)
1098 return x;
Guido van Rossum84675ac2001-09-29 01:05:03 +00001099 Py_DECREF(x); /* can't do it */
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001100 }
1101 }
1102
1103 if (!NEW_STYLE_NUMBER(v) || !NEW_STYLE_NUMBER(w) ||
1104 (z != Py_None && !NEW_STYLE_NUMBER(z))) {
1105 /* we have an old style operand, coerce */
1106 PyObject *v1, *z1, *w2, *z2;
1107 int c;
Guido van Rossum77660912002-04-16 16:32:50 +00001108
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001109 c = PyNumber_Coerce(&v, &w);
1110 if (c != 0)
1111 goto error3;
1112
1113 /* Special case: if the third argument is None, it is
1114 treated as absent argument and not coerced. */
1115 if (z == Py_None) {
1116 if (v->ob_type->tp_as_number) {
Neil Schemenauerb808c5c2002-11-24 01:34:49 +00001117 slotz = NB_TERNOP(v->ob_type->tp_as_number,
1118 op_slot);
Guido van Rossum84675ac2001-09-29 01:05:03 +00001119 if (slotz)
1120 x = slotz(v, w, z);
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001121 else
1122 c = -1;
1123 }
1124 else
1125 c = -1;
1126 goto error2;
1127 }
1128 v1 = v;
1129 z1 = z;
1130 c = PyNumber_Coerce(&v1, &z1);
1131 if (c != 0)
1132 goto error2;
1133 w2 = w;
1134 z2 = z1;
1135 c = PyNumber_Coerce(&w2, &z2);
1136 if (c != 0)
1137 goto error1;
1138
1139 if (v1->ob_type->tp_as_number != NULL) {
Neil Schemenauerb808c5c2002-11-24 01:34:49 +00001140 slotv = NB_TERNOP(v1->ob_type->tp_as_number,
1141 op_slot);
Guido van Rossum84675ac2001-09-29 01:05:03 +00001142 if (slotv)
1143 x = slotv(v1, w2, z2);
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001144 else
1145 c = -1;
1146 }
1147 else
1148 c = -1;
1149
1150 Py_DECREF(w2);
1151 Py_DECREF(z2);
1152 error1:
1153 Py_DECREF(v1);
1154 Py_DECREF(z1);
1155 error2:
Guido van Rossume15dee51995-07-18 14:12:02 +00001156 Py_DECREF(v);
1157 Py_DECREF(w);
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001158 error3:
1159 if (c >= 0)
Guido van Rossume15dee51995-07-18 14:12:02 +00001160 return x;
1161 }
Guido van Rossum5c66a262001-10-22 04:12:44 +00001162
1163 if (z == Py_None)
1164 PyErr_Format(
1165 PyExc_TypeError,
1166 "unsupported operand type(s) for ** or pow(): "
Georg Brandlccff7852006-06-18 22:17:29 +00001167 "'%.100s' and '%.100s'",
Guido van Rossum5c66a262001-10-22 04:12:44 +00001168 v->ob_type->tp_name,
1169 w->ob_type->tp_name);
1170 else
1171 PyErr_Format(
1172 PyExc_TypeError,
1173 "unsupported operand type(s) for pow(): "
Georg Brandlccff7852006-06-18 22:17:29 +00001174 "'%.100s', '%.100s', '%.100s'",
Guido van Rossum5c66a262001-10-22 04:12:44 +00001175 v->ob_type->tp_name,
1176 w->ob_type->tp_name,
1177 z->ob_type->tp_name);
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001178 return NULL;
Guido van Rossume15dee51995-07-18 14:12:02 +00001179}
1180
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001181#define BINARY_FUNC(func, op, op_name) \
1182 PyObject * \
1183 func(PyObject *v, PyObject *w) { \
1184 return binary_op(v, w, NB_SLOT(op), op_name); \
1185 }
Guido van Rossume15dee51995-07-18 14:12:02 +00001186
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001187BINARY_FUNC(PyNumber_Or, nb_or, "|")
1188BINARY_FUNC(PyNumber_Xor, nb_xor, "^")
1189BINARY_FUNC(PyNumber_And, nb_and, "&")
1190BINARY_FUNC(PyNumber_Lshift, nb_lshift, "<<")
1191BINARY_FUNC(PyNumber_Rshift, nb_rshift, ">>")
1192BINARY_FUNC(PyNumber_Subtract, nb_subtract, "-")
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001193BINARY_FUNC(PyNumber_Divide, nb_divide, "/")
1194BINARY_FUNC(PyNumber_Divmod, nb_divmod, "divmod()")
Guido van Rossume15dee51995-07-18 14:12:02 +00001195
1196PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001197PyNumber_Add(PyObject *v, PyObject *w)
Guido van Rossume15dee51995-07-18 14:12:02 +00001198{
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001199 PyObject *result = binary_op1(v, w, NB_SLOT(nb_add));
1200 if (result == Py_NotImplemented) {
1201 PySequenceMethods *m = v->ob_type->tp_as_sequence;
Armin Rigofd163f92005-12-29 15:59:19 +00001202 Py_DECREF(result);
Jeremy Hylton0522d982002-03-08 21:28:54 +00001203 if (m && m->sq_concat) {
Armin Rigofd163f92005-12-29 15:59:19 +00001204 return (*m->sq_concat)(v, w);
Jeremy Hylton0522d982002-03-08 21:28:54 +00001205 }
Armin Rigofd163f92005-12-29 15:59:19 +00001206 result = binop_type_error(v, w, "+");
Guido van Rossume15dee51995-07-18 14:12:02 +00001207 }
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001208 return result;
Guido van Rossume15dee51995-07-18 14:12:02 +00001209}
1210
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001211static PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00001212sequence_repeat(ssizeargfunc repeatfunc, PyObject *seq, PyObject *n)
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001213{
Guido van Rossum38fff8c2006-03-07 18:50:55 +00001214 Py_ssize_t count;
Neal Norwitz8a87f5d2006-08-12 17:03:09 +00001215 if (PyIndex_Check(n)) {
1216 count = PyNumber_AsSsize_t(n, PyExc_OverflowError);
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001217 if (count == -1 && PyErr_Occurred())
1218 return NULL;
1219 }
1220 else {
Georg Brandlccff7852006-06-18 22:17:29 +00001221 return type_error("can't multiply sequence by "
1222 "non-int of type '%.200s'", n);
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001223 }
Guido van Rossum38fff8c2006-03-07 18:50:55 +00001224 return (*repeatfunc)(seq, count);
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001225}
1226
1227PyObject *
1228PyNumber_Multiply(PyObject *v, PyObject *w)
1229{
1230 PyObject *result = binary_op1(v, w, NB_SLOT(nb_multiply));
1231 if (result == Py_NotImplemented) {
1232 PySequenceMethods *mv = v->ob_type->tp_as_sequence;
1233 PySequenceMethods *mw = w->ob_type->tp_as_sequence;
Guido van Rossuma3a243e2002-12-31 19:50:03 +00001234 Py_DECREF(result);
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001235 if (mv && mv->sq_repeat) {
1236 return sequence_repeat(mv->sq_repeat, v, w);
1237 }
1238 else if (mw && mw->sq_repeat) {
1239 return sequence_repeat(mw->sq_repeat, w, v);
1240 }
1241 result = binop_type_error(v, w, "*");
1242 }
1243 return result;
1244}
1245
Guido van Rossume15dee51995-07-18 14:12:02 +00001246PyObject *
Guido van Rossum4668b002001-08-08 05:00:18 +00001247PyNumber_FloorDivide(PyObject *v, PyObject *w)
1248{
1249 /* XXX tp_flags test */
1250 return binary_op(v, w, NB_SLOT(nb_floor_divide), "//");
1251}
1252
1253PyObject *
1254PyNumber_TrueDivide(PyObject *v, PyObject *w)
1255{
1256 /* XXX tp_flags test */
1257 return binary_op(v, w, NB_SLOT(nb_true_divide), "/");
1258}
1259
1260PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001261PyNumber_Remainder(PyObject *v, PyObject *w)
Guido van Rossume15dee51995-07-18 14:12:02 +00001262{
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001263 return binary_op(v, w, NB_SLOT(nb_remainder), "%");
Guido van Rossume15dee51995-07-18 14:12:02 +00001264}
1265
1266PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001267PyNumber_Power(PyObject *v, PyObject *w, PyObject *z)
Guido van Rossume15dee51995-07-18 14:12:02 +00001268{
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001269 return ternary_op(v, w, z, NB_SLOT(nb_power), "** or pow()");
Guido van Rossume15dee51995-07-18 14:12:02 +00001270}
1271
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001272/* Binary in-place operators */
1273
1274/* The in-place operators are defined to fall back to the 'normal',
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001275 non in-place operations, if the in-place methods are not in place.
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001276
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001277 - If the left hand object has the appropriate struct members, and
1278 they are filled, call the appropriate function and return the
1279 result. No coercion is done on the arguments; the left-hand object
1280 is the one the operation is performed on, and it's up to the
1281 function to deal with the right-hand object.
Guido van Rossum77660912002-04-16 16:32:50 +00001282
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001283 - Otherwise, in-place modification is not supported. Handle it exactly as
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001284 a non in-place operation of the same kind.
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001285
1286 */
1287
Guido van Rossum77660912002-04-16 16:32:50 +00001288#define HASINPLACE(t) \
1289 PyType_HasFeature((t)->ob_type, Py_TPFLAGS_HAVE_INPLACEOPS)
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001290
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001291static PyObject *
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001292binary_iop1(PyObject *v, PyObject *w, const int iop_slot, const int op_slot)
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001293{
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001294 PyNumberMethods *mv = v->ob_type->tp_as_number;
1295 if (mv != NULL && HASINPLACE(v)) {
Neil Schemenauerb808c5c2002-11-24 01:34:49 +00001296 binaryfunc slot = NB_BINOP(mv, iop_slot);
1297 if (slot) {
1298 PyObject *x = (slot)(v, w);
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001299 if (x != Py_NotImplemented) {
1300 return x;
1301 }
1302 Py_DECREF(x);
1303 }
Thomas Woutersf2b332d2000-09-02 08:34:40 +00001304 }
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001305 return binary_op1(v, w, op_slot);
1306}
1307
1308static PyObject *
1309binary_iop(PyObject *v, PyObject *w, const int iop_slot, const int op_slot,
1310 const char *op_name)
1311{
1312 PyObject *result = binary_iop1(v, w, iop_slot, op_slot);
1313 if (result == Py_NotImplemented) {
1314 Py_DECREF(result);
1315 return binop_type_error(v, w, op_name);
1316 }
1317 return result;
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001318}
1319
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001320#define INPLACE_BINOP(func, iop, op, op_name) \
1321 PyObject * \
1322 func(PyObject *v, PyObject *w) { \
1323 return binary_iop(v, w, NB_SLOT(iop), NB_SLOT(op), op_name); \
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001324 }
1325
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001326INPLACE_BINOP(PyNumber_InPlaceOr, nb_inplace_or, nb_or, "|=")
1327INPLACE_BINOP(PyNumber_InPlaceXor, nb_inplace_xor, nb_xor, "^=")
1328INPLACE_BINOP(PyNumber_InPlaceAnd, nb_inplace_and, nb_and, "&=")
1329INPLACE_BINOP(PyNumber_InPlaceLshift, nb_inplace_lshift, nb_lshift, "<<=")
1330INPLACE_BINOP(PyNumber_InPlaceRshift, nb_inplace_rshift, nb_rshift, ">>=")
1331INPLACE_BINOP(PyNumber_InPlaceSubtract, nb_inplace_subtract, nb_subtract, "-=")
1332INPLACE_BINOP(PyNumber_InPlaceDivide, nb_inplace_divide, nb_divide, "/=")
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001333
1334PyObject *
Guido van Rossum4668b002001-08-08 05:00:18 +00001335PyNumber_InPlaceFloorDivide(PyObject *v, PyObject *w)
1336{
1337 /* XXX tp_flags test */
1338 return binary_iop(v, w, NB_SLOT(nb_inplace_floor_divide),
1339 NB_SLOT(nb_floor_divide), "//=");
1340}
1341
1342PyObject *
1343PyNumber_InPlaceTrueDivide(PyObject *v, PyObject *w)
1344{
1345 /* XXX tp_flags test */
1346 return binary_iop(v, w, NB_SLOT(nb_inplace_true_divide),
1347 NB_SLOT(nb_true_divide), "/=");
1348}
1349
1350PyObject *
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001351PyNumber_InPlaceAdd(PyObject *v, PyObject *w)
1352{
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001353 PyObject *result = binary_iop1(v, w, NB_SLOT(nb_inplace_add),
1354 NB_SLOT(nb_add));
1355 if (result == Py_NotImplemented) {
1356 PySequenceMethods *m = v->ob_type->tp_as_sequence;
1357 Py_DECREF(result);
1358 if (m != NULL) {
1359 binaryfunc f = NULL;
1360 if (HASINPLACE(v))
1361 f = m->sq_inplace_concat;
1362 if (f == NULL)
1363 f = m->sq_concat;
1364 if (f != NULL)
1365 return (*f)(v, w);
1366 }
1367 result = binop_type_error(v, w, "+=");
Guido van Rossumbb8be932000-09-01 23:27:32 +00001368 }
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001369 return result;
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001370}
1371
1372PyObject *
1373PyNumber_InPlaceMultiply(PyObject *v, PyObject *w)
1374{
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001375 PyObject *result = binary_iop1(v, w, NB_SLOT(nb_inplace_multiply),
1376 NB_SLOT(nb_multiply));
1377 if (result == Py_NotImplemented) {
Martin v. Löwis18e16552006-02-15 17:27:45 +00001378 ssizeargfunc f = NULL;
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001379 PySequenceMethods *mv = v->ob_type->tp_as_sequence;
1380 PySequenceMethods *mw = w->ob_type->tp_as_sequence;
1381 Py_DECREF(result);
1382 if (mv != NULL) {
1383 if (HASINPLACE(v))
1384 f = mv->sq_inplace_repeat;
1385 if (f == NULL)
1386 f = mv->sq_repeat;
1387 if (f != NULL)
1388 return sequence_repeat(f, v, w);
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001389 }
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001390 else if (mw != NULL) {
1391 /* Note that the right hand operand should not be
1392 * mutated in this case so sq_inplace_repeat is not
1393 * used. */
1394 if (mw->sq_repeat)
1395 return sequence_repeat(mw->sq_repeat, w, v);
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001396 }
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001397 result = binop_type_error(v, w, "*=");
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001398 }
Neil Schemenauerd4b0fea2002-12-30 20:18:15 +00001399 return result;
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001400}
1401
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001402PyObject *
1403PyNumber_InPlaceRemainder(PyObject *v, PyObject *w)
1404{
Neil Schemenauerd46fbc32002-11-24 01:07:42 +00001405 return binary_iop(v, w, NB_SLOT(nb_inplace_remainder),
1406 NB_SLOT(nb_remainder), "%=");
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001407}
1408
1409PyObject *
1410PyNumber_InPlacePower(PyObject *v, PyObject *w, PyObject *z)
1411{
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001412 if (HASINPLACE(v) && v->ob_type->tp_as_number &&
1413 v->ob_type->tp_as_number->nb_inplace_power != NULL) {
1414 return ternary_op(v, w, z, NB_SLOT(nb_inplace_power), "**=");
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001415 }
Neil Schemenauer5a1f0152001-01-04 01:39:06 +00001416 else {
1417 return ternary_op(v, w, z, NB_SLOT(nb_power), "**=");
1418 }
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001419}
1420
1421
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001422/* Unary operators and functions */
Guido van Rossume15dee51995-07-18 14:12:02 +00001423
1424PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001425PyNumber_Negative(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00001426{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001427 PyNumberMethods *m;
1428
1429 if (o == NULL)
1430 return null_error();
1431 m = o->ob_type->tp_as_number;
1432 if (m && m->nb_negative)
1433 return (*m->nb_negative)(o);
1434
Georg Brandlccff7852006-06-18 22:17:29 +00001435 return type_error("bad operand type for unary -: '%.200s'", o);
Guido van Rossume15dee51995-07-18 14:12:02 +00001436}
1437
1438PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001439PyNumber_Positive(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00001440{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001441 PyNumberMethods *m;
1442
1443 if (o == NULL)
1444 return null_error();
1445 m = o->ob_type->tp_as_number;
1446 if (m && m->nb_positive)
1447 return (*m->nb_positive)(o);
1448
Georg Brandlccff7852006-06-18 22:17:29 +00001449 return type_error("bad operand type for unary +: '%.200s'", o);
Guido van Rossume15dee51995-07-18 14:12:02 +00001450}
1451
1452PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001453PyNumber_Invert(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00001454{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001455 PyNumberMethods *m;
1456
1457 if (o == NULL)
1458 return null_error();
1459 m = o->ob_type->tp_as_number;
1460 if (m && m->nb_invert)
1461 return (*m->nb_invert)(o);
1462
Georg Brandlccff7852006-06-18 22:17:29 +00001463 return type_error("bad operand type for unary ~: '%.200s'", o);
Guido van Rossume15dee51995-07-18 14:12:02 +00001464}
1465
1466PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001467PyNumber_Absolute(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00001468{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001469 PyNumberMethods *m;
Guido van Rossume15dee51995-07-18 14:12:02 +00001470
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001471 if (o == NULL)
1472 return null_error();
1473 m = o->ob_type->tp_as_number;
1474 if (m && m->nb_absolute)
1475 return m->nb_absolute(o);
Guido van Rossume15dee51995-07-18 14:12:02 +00001476
Georg Brandlccff7852006-06-18 22:17:29 +00001477 return type_error("bad operand type for abs(): '%.200s'", o);
Guido van Rossume15dee51995-07-18 14:12:02 +00001478}
1479
Guido van Rossum9e896b32000-04-05 20:11:21 +00001480/* Add a check for embedded NULL-bytes in the argument. */
1481static PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00001482int_from_string(const char *s, Py_ssize_t len)
Guido van Rossum9e896b32000-04-05 20:11:21 +00001483{
1484 char *end;
1485 PyObject *x;
1486
1487 x = PyInt_FromString((char*)s, &end, 10);
1488 if (x == NULL)
1489 return NULL;
1490 if (end != s + len) {
1491 PyErr_SetString(PyExc_ValueError,
1492 "null byte in argument for int()");
1493 Py_DECREF(x);
1494 return NULL;
1495 }
1496 return x;
1497}
1498
Neal Norwitz8a87f5d2006-08-12 17:03:09 +00001499/* Return a Python Int or Long from the object item
1500 Raise TypeError if the result is not an int-or-long
1501 or if the object cannot be interpreted as an index.
1502*/
1503PyObject *
Guido van Rossum38fff8c2006-03-07 18:50:55 +00001504PyNumber_Index(PyObject *item)
1505{
Neal Norwitz8a87f5d2006-08-12 17:03:09 +00001506 PyObject *result = NULL;
1507 if (item == NULL)
1508 return null_error();
Neal Norwitz271a8682006-08-15 06:29:03 +00001509 if (PyInt_Check(item) || PyLong_Check(item)) {
Neal Norwitz8a87f5d2006-08-12 17:03:09 +00001510 Py_INCREF(item);
1511 return item;
1512 }
1513 if (PyIndex_Check(item)) {
1514 result = item->ob_type->tp_as_number->nb_index(item);
Neal Norwitz8a87f5d2006-08-12 17:03:09 +00001515 if (result &&
Neal Norwitz271a8682006-08-15 06:29:03 +00001516 !PyInt_Check(result) && !PyLong_Check(result)) {
Neal Norwitz8a87f5d2006-08-12 17:03:09 +00001517 PyErr_Format(PyExc_TypeError,
1518 "__index__ returned non-(int,long) " \
1519 "(type %.200s)",
1520 result->ob_type->tp_name);
1521 Py_DECREF(result);
1522 return NULL;
1523 }
Guido van Rossum38fff8c2006-03-07 18:50:55 +00001524 }
1525 else {
Armin Rigo314861c2006-03-30 14:04:02 +00001526 PyErr_Format(PyExc_TypeError,
1527 "'%.200s' object cannot be interpreted "
1528 "as an index", item->ob_type->tp_name);
Guido van Rossum38fff8c2006-03-07 18:50:55 +00001529 }
Neal Norwitz8a87f5d2006-08-12 17:03:09 +00001530 return result;
Guido van Rossum38fff8c2006-03-07 18:50:55 +00001531}
1532
Neal Norwitz8a87f5d2006-08-12 17:03:09 +00001533/* Return an error on Overflow only if err is not NULL*/
1534
1535Py_ssize_t
1536PyNumber_AsSsize_t(PyObject *item, PyObject *err)
1537{
1538 Py_ssize_t result;
1539 PyObject *runerr;
1540 PyObject *value = PyNumber_Index(item);
1541 if (value == NULL)
1542 return -1;
1543
1544 /* We're done if PyInt_AsSsize_t() returns without error. */
1545 result = PyInt_AsSsize_t(value);
1546 if (result != -1 || !(runerr = PyErr_Occurred()))
1547 goto finish;
1548
1549 /* Error handling code -- only manage OverflowError differently */
1550 if (!PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError))
1551 goto finish;
1552
1553 PyErr_Clear();
1554 /* If no error-handling desired then the default clipping
1555 is sufficient.
1556 */
1557 if (!err) {
1558 assert(PyLong_Check(value));
1559 /* Whether or not it is less than or equal to
1560 zero is determined by the sign of ob_size
1561 */
1562 if (_PyLong_Sign(value) < 0)
1563 result = PY_SSIZE_T_MIN;
1564 else
1565 result = PY_SSIZE_T_MAX;
1566 }
1567 else {
1568 /* Otherwise replace the error with caller's error object. */
1569 PyErr_Format(err,
1570 "cannot fit '%.200s' into an index-sized integer",
1571 item->ob_type->tp_name);
1572 }
1573
1574 finish:
1575 Py_DECREF(value);
1576 return result;
1577}
1578
1579
Guido van Rossume15dee51995-07-18 14:12:02 +00001580PyObject *
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001581_PyNumber_ConvertIntegralToInt(PyObject *integral, const char* error_format)
1582{
1583 const char *type_name;
1584 static PyObject *int_name = NULL;
1585 if (int_name == NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001586 int_name = PyString_InternFromString("__int__");
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001587 if (int_name == NULL)
1588 return NULL;
1589 }
1590
1591 if (integral && (!PyInt_Check(integral) &&
1592 !PyLong_Check(integral))) {
1593 /* Don't go through tp_as_number->nb_int to avoid
1594 hitting the classic class fallback to __trunc__. */
1595 PyObject *int_func = PyObject_GetAttr(integral, int_name);
1596 if (int_func == NULL) {
1597 PyErr_Clear(); /* Raise a different error. */
1598 goto non_integral_error;
1599 }
1600 Py_DECREF(integral);
1601 integral = PyEval_CallObject(int_func, NULL);
1602 Py_DECREF(int_func);
1603 if (integral && (!PyInt_Check(integral) &&
1604 !PyLong_Check(integral))) {
1605 goto non_integral_error;
1606 }
1607 }
1608 return integral;
1609
1610non_integral_error:
1611 if (PyInstance_Check(integral)) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001612 type_name = PyString_AS_STRING(((PyInstanceObject *)integral)
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001613 ->in_class->cl_name);
1614 }
1615 else {
1616 type_name = integral->ob_type->tp_name;
1617 }
1618 PyErr_Format(PyExc_TypeError, error_format, type_name);
1619 Py_DECREF(integral);
1620 return NULL;
1621}
1622
1623
1624PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001625PyNumber_Int(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00001626{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001627 PyNumberMethods *m;
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001628 static PyObject *trunc_name = NULL;
1629 PyObject *trunc_func;
Guido van Rossum4c08d552000-03-10 22:55:18 +00001630 const char *buffer;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001631 Py_ssize_t buffer_len;
Guido van Rossume15dee51995-07-18 14:12:02 +00001632
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001633 if (trunc_name == NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001634 trunc_name = PyString_InternFromString("__trunc__");
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001635 if (trunc_name == NULL)
1636 return NULL;
1637 }
1638
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001639 if (o == NULL)
1640 return null_error();
Tim Peters64b5ce32001-09-10 20:52:51 +00001641 if (PyInt_CheckExact(o)) {
Guido van Rossum9e896b32000-04-05 20:11:21 +00001642 Py_INCREF(o);
1643 return o;
1644 }
Brett Cannonc3647ac2005-04-26 03:45:26 +00001645 m = o->ob_type->tp_as_number;
1646 if (m && m->nb_int) { /* This should include subclasses of int */
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001647 /* Classic classes always take this branch. */
Brett Cannonc3647ac2005-04-26 03:45:26 +00001648 PyObject *res = m->nb_int(o);
1649 if (res && (!PyInt_Check(res) && !PyLong_Check(res))) {
1650 PyErr_Format(PyExc_TypeError,
1651 "__int__ returned non-int (type %.200s)",
1652 res->ob_type->tp_name);
1653 Py_DECREF(res);
1654 return NULL;
1655 }
1656 return res;
1657 }
1658 if (PyInt_Check(o)) { /* A int subclass without nb_int */
Tim Peters64b5ce32001-09-10 20:52:51 +00001659 PyIntObject *io = (PyIntObject*)o;
1660 return PyInt_FromLong(io->ob_ival);
1661 }
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001662 trunc_func = PyObject_GetAttr(o, trunc_name);
1663 if (trunc_func) {
1664 PyObject *truncated = PyEval_CallObject(trunc_func, NULL);
1665 Py_DECREF(trunc_func);
1666 /* __trunc__ is specified to return an Integral type, but
1667 int() needs to return an int. */
1668 return _PyNumber_ConvertIntegralToInt(
1669 truncated,
1670 "__trunc__ returned non-Integral (type %.200s)");
1671 }
1672 PyErr_Clear(); /* It's not an error if o.__trunc__ doesn't exist. */
1673
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001674 if (PyString_Check(o))
1675 return int_from_string(PyString_AS_STRING(o),
1676 PyString_GET_SIZE(o));
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001677#ifdef Py_USING_UNICODE
Guido van Rossum9e896b32000-04-05 20:11:21 +00001678 if (PyUnicode_Check(o))
1679 return PyInt_FromUnicode(PyUnicode_AS_UNICODE(o),
1680 PyUnicode_GET_SIZE(o),
1681 10);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001682#endif
Guido van Rossum4c08d552000-03-10 22:55:18 +00001683 if (!PyObject_AsCharBuffer(o, &buffer, &buffer_len))
Guido van Rossum9e896b32000-04-05 20:11:21 +00001684 return int_from_string((char*)buffer, buffer_len);
Guido van Rossume15dee51995-07-18 14:12:02 +00001685
Georg Brandlccff7852006-06-18 22:17:29 +00001686 return type_error("int() argument must be a string or a "
1687 "number, not '%.200s'", o);
Guido van Rossume15dee51995-07-18 14:12:02 +00001688}
1689
Guido van Rossum9e896b32000-04-05 20:11:21 +00001690/* Add a check for embedded NULL-bytes in the argument. */
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001691static PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00001692long_from_string(const char *s, Py_ssize_t len)
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001693{
Guido van Rossum4c08d552000-03-10 22:55:18 +00001694 char *end;
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001695 PyObject *x;
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001696
Guido van Rossum4c08d552000-03-10 22:55:18 +00001697 x = PyLong_FromString((char*)s, &end, 10);
Guido van Rossum9e896b32000-04-05 20:11:21 +00001698 if (x == NULL)
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001699 return NULL;
Guido van Rossum9e896b32000-04-05 20:11:21 +00001700 if (end != s + len) {
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001701 PyErr_SetString(PyExc_ValueError,
1702 "null byte in argument for long()");
Guido van Rossum9e896b32000-04-05 20:11:21 +00001703 Py_DECREF(x);
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001704 return NULL;
1705 }
1706 return x;
1707}
1708
Guido van Rossume15dee51995-07-18 14:12:02 +00001709PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001710PyNumber_Long(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00001711{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001712 PyNumberMethods *m;
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001713 static PyObject *trunc_name = NULL;
1714 PyObject *trunc_func;
Guido van Rossum4c08d552000-03-10 22:55:18 +00001715 const char *buffer;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001716 Py_ssize_t buffer_len;
Guido van Rossume15dee51995-07-18 14:12:02 +00001717
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001718 if (trunc_name == NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001719 trunc_name = PyString_InternFromString("__trunc__");
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001720 if (trunc_name == NULL)
1721 return NULL;
1722 }
1723
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001724 if (o == NULL)
1725 return null_error();
Brett Cannonc3647ac2005-04-26 03:45:26 +00001726 m = o->ob_type->tp_as_number;
1727 if (m && m->nb_long) { /* This should include subclasses of long */
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001728 /* Classic classes always take this branch. */
Brett Cannonc3647ac2005-04-26 03:45:26 +00001729 PyObject *res = m->nb_long(o);
1730 if (res && (!PyInt_Check(res) && !PyLong_Check(res))) {
1731 PyErr_Format(PyExc_TypeError,
1732 "__long__ returned non-long (type %.200s)",
1733 res->ob_type->tp_name);
1734 Py_DECREF(res);
1735 return NULL;
1736 }
1737 return res;
Guido van Rossum9e896b32000-04-05 20:11:21 +00001738 }
Brett Cannonc3647ac2005-04-26 03:45:26 +00001739 if (PyLong_Check(o)) /* A long subclass without nb_long */
Tim Petersdb30ac42002-03-02 04:14:21 +00001740 return _PyLong_Copy((PyLongObject *)o);
Jeffrey Yasskina26cf9b2008-02-04 01:04:35 +00001741 trunc_func = PyObject_GetAttr(o, trunc_name);
1742 if (trunc_func) {
1743 PyObject *truncated = PyEval_CallObject(trunc_func, NULL);
1744 PyObject *int_instance;
1745 Py_DECREF(trunc_func);
1746 /* __trunc__ is specified to return an Integral type,
1747 but long() needs to return a long. */
1748 int_instance = _PyNumber_ConvertIntegralToInt(
1749 truncated,
1750 "__trunc__ returned non-Integral (type %.200s)");
1751 if (int_instance && PyInt_Check(int_instance)) {
1752 /* Make sure that long() returns a long instance. */
1753 long value = PyInt_AS_LONG(int_instance);
1754 Py_DECREF(int_instance);
1755 return PyLong_FromLong(value);
1756 }
1757 return int_instance;
1758 }
1759 PyErr_Clear(); /* It's not an error if o.__trunc__ doesn't exist. */
1760
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001761 if (PyString_Check(o))
Guido van Rossum77660912002-04-16 16:32:50 +00001762 /* need to do extra error checking that PyLong_FromString()
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001763 * doesn't do. In particular long('9.5') must raise an
1764 * exception, not truncate the float.
1765 */
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001766 return long_from_string(PyString_AS_STRING(o),
1767 PyString_GET_SIZE(o));
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001768#ifdef Py_USING_UNICODE
Guido van Rossum9e896b32000-04-05 20:11:21 +00001769 if (PyUnicode_Check(o))
1770 /* The above check is done in PyLong_FromUnicode(). */
1771 return PyLong_FromUnicode(PyUnicode_AS_UNICODE(o),
1772 PyUnicode_GET_SIZE(o),
1773 10);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001774#endif
Guido van Rossum4c08d552000-03-10 22:55:18 +00001775 if (!PyObject_AsCharBuffer(o, &buffer, &buffer_len))
1776 return long_from_string(buffer, buffer_len);
Guido van Rossume15dee51995-07-18 14:12:02 +00001777
Georg Brandlccff7852006-06-18 22:17:29 +00001778 return type_error("long() argument must be a string or a "
1779 "number, not '%.200s'", o);
Guido van Rossume15dee51995-07-18 14:12:02 +00001780}
1781
1782PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001783PyNumber_Float(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00001784{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001785 PyNumberMethods *m;
Guido van Rossume15dee51995-07-18 14:12:02 +00001786
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001787 if (o == NULL)
1788 return null_error();
Brett Cannonc3647ac2005-04-26 03:45:26 +00001789 m = o->ob_type->tp_as_number;
1790 if (m && m->nb_float) { /* This should include subclasses of float */
1791 PyObject *res = m->nb_float(o);
1792 if (res && !PyFloat_Check(res)) {
1793 PyErr_Format(PyExc_TypeError,
1794 "__float__ returned non-float (type %.200s)",
1795 res->ob_type->tp_name);
1796 Py_DECREF(res);
1797 return NULL;
1798 }
1799 return res;
Guido van Rossum9e896b32000-04-05 20:11:21 +00001800 }
Brett Cannonc3647ac2005-04-26 03:45:26 +00001801 if (PyFloat_Check(o)) { /* A float subclass with nb_float == NULL */
Tim Peters7a50f252001-09-10 21:28:20 +00001802 PyFloatObject *po = (PyFloatObject *)o;
1803 return PyFloat_FromDouble(po->ob_fval);
1804 }
Guido van Rossum4c08d552000-03-10 22:55:18 +00001805 return PyFloat_FromString(o, NULL);
Guido van Rossume15dee51995-07-18 14:12:02 +00001806}
1807
Eric Smith5e527eb2008-02-10 01:36:53 +00001808PyObject *
1809PyNumber_ToBase(PyObject *n, int base)
1810{
1811 PyObject *res = NULL;
1812 PyObject *index = PyNumber_Index(n);
1813
1814 if (!index)
1815 return NULL;
1816 if (PyLong_Check(index))
1817 res = _PyLong_Format(index, base, 0, 1);
1818 else if (PyInt_Check(index))
1819 res = _PyInt_Format((PyIntObject*)index, base, 1);
1820 else
Eric Smith3f914372008-02-15 12:14:32 +00001821 /* It should not be possible to get here, as
1822 PyNumber_Index already has a check for the same
1823 condition */
1824 PyErr_SetString(PyExc_ValueError, "PyNumber_ToBase: index not "
1825 "int or long");
Eric Smith5e527eb2008-02-10 01:36:53 +00001826 Py_DECREF(index);
1827 return res;
1828}
1829
1830
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001831/* Operations on sequences */
Guido van Rossume15dee51995-07-18 14:12:02 +00001832
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001833int
Fred Drake79912472000-07-09 04:06:11 +00001834PySequence_Check(PyObject *s)
Guido van Rossume15dee51995-07-18 14:12:02 +00001835{
Raymond Hettinger1be1a792004-09-19 06:00:15 +00001836 if (s && PyInstance_Check(s))
Raymond Hettingere2eda602004-04-04 08:51:41 +00001837 return PyObject_HasAttrString(s, "__getitem__");
Benjamin Peterson5fb87702009-12-10 03:37:59 +00001838 if (PyDict_Check(s))
Raymond Hettinger4da5bf62007-02-07 22:24:07 +00001839 return 0;
Guido van Rossum8700b422001-09-07 20:20:11 +00001840 return s != NULL && s->ob_type->tp_as_sequence &&
1841 s->ob_type->tp_as_sequence->sq_item != NULL;
Guido van Rossume15dee51995-07-18 14:12:02 +00001842}
1843
Martin v. Löwis18e16552006-02-15 17:27:45 +00001844Py_ssize_t
Jeremy Hylton6253f832000-07-12 12:56:19 +00001845PySequence_Size(PyObject *s)
Guido van Rossume15dee51995-07-18 14:12:02 +00001846{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001847 PySequenceMethods *m;
Guido van Rossume15dee51995-07-18 14:12:02 +00001848
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001849 if (s == NULL) {
1850 null_error();
1851 return -1;
1852 }
Guido van Rossume15dee51995-07-18 14:12:02 +00001853
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001854 m = s->ob_type->tp_as_sequence;
1855 if (m && m->sq_length)
1856 return m->sq_length(s);
Guido van Rossume15dee51995-07-18 14:12:02 +00001857
Georg Brandlb0061c82006-08-08 11:56:21 +00001858 type_error("object of type '%.200s' has no len()", s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001859 return -1;
Guido van Rossume15dee51995-07-18 14:12:02 +00001860}
1861
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +00001862#undef PySequence_Length
Martin v. Löwis18e16552006-02-15 17:27:45 +00001863Py_ssize_t
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +00001864PySequence_Length(PyObject *s)
1865{
1866 return PySequence_Size(s);
1867}
1868#define PySequence_Length PySequence_Size
1869
Guido van Rossume15dee51995-07-18 14:12:02 +00001870PyObject *
Fred Drake79912472000-07-09 04:06:11 +00001871PySequence_Concat(PyObject *s, PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00001872{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001873 PySequenceMethods *m;
Guido van Rossume15dee51995-07-18 14:12:02 +00001874
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001875 if (s == NULL || o == NULL)
1876 return null_error();
Guido van Rossume15dee51995-07-18 14:12:02 +00001877
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001878 m = s->ob_type->tp_as_sequence;
1879 if (m && m->sq_concat)
1880 return m->sq_concat(s, o);
1881
Armin Rigofd163f92005-12-29 15:59:19 +00001882 /* Instances of user classes defining an __add__() method only
1883 have an nb_add slot, not an sq_concat slot. So we fall back
1884 to nb_add if both arguments appear to be sequences. */
1885 if (PySequence_Check(s) && PySequence_Check(o)) {
1886 PyObject *result = binary_op1(s, o, NB_SLOT(nb_add));
1887 if (result != Py_NotImplemented)
1888 return result;
1889 Py_DECREF(result);
1890 }
Georg Brandlccff7852006-06-18 22:17:29 +00001891 return type_error("'%.200s' object can't be concatenated", s);
Guido van Rossume15dee51995-07-18 14:12:02 +00001892}
1893
1894PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00001895PySequence_Repeat(PyObject *o, Py_ssize_t count)
Guido van Rossume15dee51995-07-18 14:12:02 +00001896{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001897 PySequenceMethods *m;
Guido van Rossume15dee51995-07-18 14:12:02 +00001898
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001899 if (o == NULL)
1900 return null_error();
Guido van Rossume15dee51995-07-18 14:12:02 +00001901
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001902 m = o->ob_type->tp_as_sequence;
1903 if (m && m->sq_repeat)
1904 return m->sq_repeat(o, count);
1905
Armin Rigofd163f92005-12-29 15:59:19 +00001906 /* Instances of user classes defining a __mul__() method only
1907 have an nb_multiply slot, not an sq_repeat slot. so we fall back
1908 to nb_multiply if o appears to be a sequence. */
1909 if (PySequence_Check(o)) {
1910 PyObject *n, *result;
Martin v. Löwiseb079f12006-02-16 14:32:27 +00001911 n = PyInt_FromSsize_t(count);
Armin Rigofd163f92005-12-29 15:59:19 +00001912 if (n == NULL)
1913 return NULL;
1914 result = binary_op1(o, n, NB_SLOT(nb_multiply));
1915 Py_DECREF(n);
1916 if (result != Py_NotImplemented)
1917 return result;
1918 Py_DECREF(result);
1919 }
Georg Brandlccff7852006-06-18 22:17:29 +00001920 return type_error("'%.200s' object can't be repeated", o);
Guido van Rossume15dee51995-07-18 14:12:02 +00001921}
1922
1923PyObject *
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001924PySequence_InPlaceConcat(PyObject *s, PyObject *o)
1925{
1926 PySequenceMethods *m;
1927
1928 if (s == NULL || o == NULL)
1929 return null_error();
1930
1931 m = s->ob_type->tp_as_sequence;
1932 if (m && HASINPLACE(s) && m->sq_inplace_concat)
1933 return m->sq_inplace_concat(s, o);
1934 if (m && m->sq_concat)
1935 return m->sq_concat(s, o);
1936
Armin Rigofd163f92005-12-29 15:59:19 +00001937 if (PySequence_Check(s) && PySequence_Check(o)) {
1938 PyObject *result = binary_iop1(s, o, NB_SLOT(nb_inplace_add),
1939 NB_SLOT(nb_add));
1940 if (result != Py_NotImplemented)
1941 return result;
1942 Py_DECREF(result);
1943 }
Georg Brandlccff7852006-06-18 22:17:29 +00001944 return type_error("'%.200s' object can't be concatenated", s);
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001945}
1946
1947PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00001948PySequence_InPlaceRepeat(PyObject *o, Py_ssize_t count)
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001949{
1950 PySequenceMethods *m;
1951
1952 if (o == NULL)
1953 return null_error();
1954
1955 m = o->ob_type->tp_as_sequence;
1956 if (m && HASINPLACE(o) && m->sq_inplace_repeat)
1957 return m->sq_inplace_repeat(o, count);
1958 if (m && m->sq_repeat)
1959 return m->sq_repeat(o, count);
1960
Armin Rigofd163f92005-12-29 15:59:19 +00001961 if (PySequence_Check(o)) {
1962 PyObject *n, *result;
Martin v. Löwiseb079f12006-02-16 14:32:27 +00001963 n = PyInt_FromSsize_t(count);
Armin Rigofd163f92005-12-29 15:59:19 +00001964 if (n == NULL)
1965 return NULL;
1966 result = binary_iop1(o, n, NB_SLOT(nb_inplace_multiply),
1967 NB_SLOT(nb_multiply));
1968 Py_DECREF(n);
1969 if (result != Py_NotImplemented)
1970 return result;
1971 Py_DECREF(result);
1972 }
Georg Brandlccff7852006-06-18 22:17:29 +00001973 return type_error("'%.200s' object can't be repeated", o);
Thomas Wouterse289e0b2000-08-24 20:08:19 +00001974}
1975
1976PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00001977PySequence_GetItem(PyObject *s, Py_ssize_t i)
Guido van Rossume15dee51995-07-18 14:12:02 +00001978{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001979 PySequenceMethods *m;
Guido van Rossume15dee51995-07-18 14:12:02 +00001980
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001981 if (s == NULL)
1982 return null_error();
Guido van Rossume15dee51995-07-18 14:12:02 +00001983
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001984 m = s->ob_type->tp_as_sequence;
1985 if (m && m->sq_item) {
1986 if (i < 0) {
1987 if (m->sq_length) {
Martin v. Löwis18e16552006-02-15 17:27:45 +00001988 Py_ssize_t l = (*m->sq_length)(s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00001989 if (l < 0)
1990 return NULL;
1991 i += l;
1992 }
1993 }
1994 return m->sq_item(s, i);
1995 }
Guido van Rossume15dee51995-07-18 14:12:02 +00001996
Skip Montanaro2c7ca9b2008-07-07 11:16:14 +00001997 return type_error("'%.200s' object does not support indexing", s);
Guido van Rossume15dee51995-07-18 14:12:02 +00001998}
1999
2000PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00002001PySequence_GetSlice(PyObject *s, Py_ssize_t i1, Py_ssize_t i2)
Guido van Rossume15dee51995-07-18 14:12:02 +00002002{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002003 PySequenceMethods *m;
Thomas Wouters1d75a792000-08-17 22:37:32 +00002004 PyMappingMethods *mp;
Guido van Rossume15dee51995-07-18 14:12:02 +00002005
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002006 if (!s) return null_error();
Guido van Rossume15dee51995-07-18 14:12:02 +00002007
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002008 m = s->ob_type->tp_as_sequence;
2009 if (m && m->sq_slice) {
2010 if (i1 < 0 || i2 < 0) {
2011 if (m->sq_length) {
Martin v. Löwis18e16552006-02-15 17:27:45 +00002012 Py_ssize_t l = (*m->sq_length)(s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002013 if (l < 0)
2014 return NULL;
2015 if (i1 < 0)
2016 i1 += l;
2017 if (i2 < 0)
2018 i2 += l;
2019 }
2020 }
2021 return m->sq_slice(s, i1, i2);
Thomas Wouters1d75a792000-08-17 22:37:32 +00002022 } else if ((mp = s->ob_type->tp_as_mapping) && mp->mp_subscript) {
2023 PyObject *res;
Neal Norwitzbadc0862006-03-23 06:03:08 +00002024 PyObject *slice = _PySlice_FromIndices(i1, i2);
Thomas Wouters1d75a792000-08-17 22:37:32 +00002025 if (!slice)
2026 return NULL;
2027 res = mp->mp_subscript(s, slice);
2028 Py_DECREF(slice);
2029 return res;
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002030 }
Guido van Rossume15dee51995-07-18 14:12:02 +00002031
Georg Brandlccff7852006-06-18 22:17:29 +00002032 return type_error("'%.200s' object is unsliceable", s);
Guido van Rossume15dee51995-07-18 14:12:02 +00002033}
2034
2035int
Martin v. Löwis18e16552006-02-15 17:27:45 +00002036PySequence_SetItem(PyObject *s, Py_ssize_t i, PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00002037{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002038 PySequenceMethods *m;
Guido van Rossume15dee51995-07-18 14:12:02 +00002039
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002040 if (s == NULL) {
2041 null_error();
2042 return -1;
2043 }
Guido van Rossume15dee51995-07-18 14:12:02 +00002044
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002045 m = s->ob_type->tp_as_sequence;
2046 if (m && m->sq_ass_item) {
2047 if (i < 0) {
2048 if (m->sq_length) {
Martin v. Löwis18e16552006-02-15 17:27:45 +00002049 Py_ssize_t l = (*m->sq_length)(s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002050 if (l < 0)
Guido van Rossumed6219b1998-05-29 02:59:33 +00002051 return -1;
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002052 i += l;
2053 }
2054 }
2055 return m->sq_ass_item(s, i, o);
2056 }
2057
Georg Brandlccff7852006-06-18 22:17:29 +00002058 type_error("'%.200s' object does not support item assignment", s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002059 return -1;
Guido van Rossume15dee51995-07-18 14:12:02 +00002060}
2061
Guido van Rossum6cdc6f41996-08-21 17:41:54 +00002062int
Martin v. Löwis18e16552006-02-15 17:27:45 +00002063PySequence_DelItem(PyObject *s, Py_ssize_t i)
Guido van Rossum6cdc6f41996-08-21 17:41:54 +00002064{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002065 PySequenceMethods *m;
Guido van Rossum6cdc6f41996-08-21 17:41:54 +00002066
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002067 if (s == NULL) {
2068 null_error();
2069 return -1;
2070 }
Guido van Rossum6cdc6f41996-08-21 17:41:54 +00002071
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002072 m = s->ob_type->tp_as_sequence;
2073 if (m && m->sq_ass_item) {
2074 if (i < 0) {
2075 if (m->sq_length) {
Martin v. Löwis18e16552006-02-15 17:27:45 +00002076 Py_ssize_t l = (*m->sq_length)(s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002077 if (l < 0)
Guido van Rossumed6219b1998-05-29 02:59:33 +00002078 return -1;
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002079 i += l;
2080 }
2081 }
2082 return m->sq_ass_item(s, i, (PyObject *)NULL);
2083 }
2084
Georg Brandlccff7852006-06-18 22:17:29 +00002085 type_error("'%.200s' object doesn't support item deletion", s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002086 return -1;
Guido van Rossum6cdc6f41996-08-21 17:41:54 +00002087}
2088
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002089int
Martin v. Löwis18e16552006-02-15 17:27:45 +00002090PySequence_SetSlice(PyObject *s, Py_ssize_t i1, Py_ssize_t i2, PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00002091{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002092 PySequenceMethods *m;
Thomas Wouters1d75a792000-08-17 22:37:32 +00002093 PyMappingMethods *mp;
Guido van Rossume15dee51995-07-18 14:12:02 +00002094
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002095 if (s == NULL) {
2096 null_error();
2097 return -1;
2098 }
Guido van Rossume15dee51995-07-18 14:12:02 +00002099
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002100 m = s->ob_type->tp_as_sequence;
2101 if (m && m->sq_ass_slice) {
2102 if (i1 < 0 || i2 < 0) {
2103 if (m->sq_length) {
Martin v. Löwis18e16552006-02-15 17:27:45 +00002104 Py_ssize_t l = (*m->sq_length)(s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002105 if (l < 0)
Guido van Rossumed6219b1998-05-29 02:59:33 +00002106 return -1;
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002107 if (i1 < 0)
2108 i1 += l;
2109 if (i2 < 0)
2110 i2 += l;
2111 }
2112 }
2113 return m->sq_ass_slice(s, i1, i2, o);
Thomas Wouters1d75a792000-08-17 22:37:32 +00002114 } else if ((mp = s->ob_type->tp_as_mapping) && mp->mp_ass_subscript) {
2115 int res;
Neal Norwitzbadc0862006-03-23 06:03:08 +00002116 PyObject *slice = _PySlice_FromIndices(i1, i2);
Thomas Wouters1d75a792000-08-17 22:37:32 +00002117 if (!slice)
2118 return -1;
2119 res = mp->mp_ass_subscript(s, slice, o);
2120 Py_DECREF(slice);
2121 return res;
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002122 }
Thomas Wouters1d75a792000-08-17 22:37:32 +00002123
Georg Brandlccff7852006-06-18 22:17:29 +00002124 type_error("'%.200s' object doesn't support slice assignment", s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002125 return -1;
Guido van Rossume15dee51995-07-18 14:12:02 +00002126}
2127
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002128int
Martin v. Löwis18e16552006-02-15 17:27:45 +00002129PySequence_DelSlice(PyObject *s, Py_ssize_t i1, Py_ssize_t i2)
Guido van Rossum6cdc6f41996-08-21 17:41:54 +00002130{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002131 PySequenceMethods *m;
Guido van Rossum6cdc6f41996-08-21 17:41:54 +00002132
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002133 if (s == NULL) {
2134 null_error();
2135 return -1;
2136 }
Guido van Rossum6cdc6f41996-08-21 17:41:54 +00002137
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002138 m = s->ob_type->tp_as_sequence;
2139 if (m && m->sq_ass_slice) {
2140 if (i1 < 0 || i2 < 0) {
2141 if (m->sq_length) {
Martin v. Löwis18e16552006-02-15 17:27:45 +00002142 Py_ssize_t l = (*m->sq_length)(s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002143 if (l < 0)
Guido van Rossumed6219b1998-05-29 02:59:33 +00002144 return -1;
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002145 if (i1 < 0)
2146 i1 += l;
2147 if (i2 < 0)
2148 i2 += l;
2149 }
2150 }
2151 return m->sq_ass_slice(s, i1, i2, (PyObject *)NULL);
2152 }
Georg Brandlccff7852006-06-18 22:17:29 +00002153 type_error("'%.200s' object doesn't support slice deletion", s);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002154 return -1;
Guido van Rossum6cdc6f41996-08-21 17:41:54 +00002155}
2156
Guido van Rossume15dee51995-07-18 14:12:02 +00002157PyObject *
Fred Drake79912472000-07-09 04:06:11 +00002158PySequence_Tuple(PyObject *v)
Guido van Rossume15dee51995-07-18 14:12:02 +00002159{
Tim Peters6912d4d2001-05-05 03:56:37 +00002160 PyObject *it; /* iter(v) */
Martin v. Löwis18e16552006-02-15 17:27:45 +00002161 Py_ssize_t n; /* guess for result tuple size */
Raymond Hettingerb5163702009-02-02 21:50:13 +00002162 PyObject *result = NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002163 Py_ssize_t j;
Guido van Rossume15dee51995-07-18 14:12:02 +00002164
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002165 if (v == NULL)
2166 return null_error();
Guido van Rossume15dee51995-07-18 14:12:02 +00002167
Tim Peters6912d4d2001-05-05 03:56:37 +00002168 /* Special-case the common tuple and list cases, for efficiency. */
Tim Peters4c3a0a32001-09-10 23:37:46 +00002169 if (PyTuple_CheckExact(v)) {
2170 /* Note that we can't know whether it's safe to return
2171 a tuple *subclass* instance as-is, hence the restriction
Tim Peters8ff70a92001-09-10 23:53:53 +00002172 to exact tuples here. In contrast, lists always make
2173 a copy, so there's no need for exactness below. */
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002174 Py_INCREF(v);
2175 return v;
Guido van Rossume15dee51995-07-18 14:12:02 +00002176 }
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002177 if (PyList_Check(v))
2178 return PyList_AsTuple(v);
2179
Tim Peters6912d4d2001-05-05 03:56:37 +00002180 /* Get iterator. */
2181 it = PyObject_GetIter(v);
2182 if (it == NULL)
Tim Peters1fc240e2001-10-26 05:06:50 +00002183 return NULL;
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002184
Tim Peters6912d4d2001-05-05 03:56:37 +00002185 /* Guess result size and allocate space. */
Raymond Hettinger4e2f7142007-12-06 00:56:53 +00002186 n = _PyObject_LengthHint(v, 10);
Raymond Hettingerb5163702009-02-02 21:50:13 +00002187 if (n == -1)
2188 goto Fail;
Tim Peters6912d4d2001-05-05 03:56:37 +00002189 result = PyTuple_New(n);
2190 if (result == NULL)
2191 goto Fail;
2192
2193 /* Fill the tuple. */
2194 for (j = 0; ; ++j) {
2195 PyObject *item = PyIter_Next(it);
2196 if (item == NULL) {
2197 if (PyErr_Occurred())
2198 goto Fail;
2199 break;
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002200 }
Tim Peters6912d4d2001-05-05 03:56:37 +00002201 if (j >= n) {
Martin v. Löwis18e16552006-02-15 17:27:45 +00002202 Py_ssize_t oldn = n;
Raymond Hettinger4d012592004-12-16 10:38:38 +00002203 /* The over-allocation strategy can grow a bit faster
2204 than for lists because unlike lists the
2205 over-allocation isn't permanent -- we reclaim
2206 the excess before the end of this routine.
2207 So, grow by ten and then add 25%.
2208 */
2209 n += 10;
2210 n += n >> 2;
2211 if (n < oldn) {
2212 /* Check for overflow */
2213 PyErr_NoMemory();
Raymond Hettingere6bdb372004-12-16 15:10:21 +00002214 Py_DECREF(item);
Raymond Hettinger4d012592004-12-16 10:38:38 +00002215 goto Fail;
2216 }
Tim Peters4324aa32001-05-28 22:30:08 +00002217 if (_PyTuple_Resize(&result, n) != 0) {
Tim Peters12d0a6c2001-05-05 04:10:25 +00002218 Py_DECREF(item);
Tim Peters6912d4d2001-05-05 03:56:37 +00002219 goto Fail;
Tim Peters12d0a6c2001-05-05 04:10:25 +00002220 }
Tim Peters6912d4d2001-05-05 03:56:37 +00002221 }
2222 PyTuple_SET_ITEM(result, j, item);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002223 }
2224
Tim Peters6912d4d2001-05-05 03:56:37 +00002225 /* Cut tuple back if guess was too large. */
2226 if (j < n &&
Tim Peters4324aa32001-05-28 22:30:08 +00002227 _PyTuple_Resize(&result, j) != 0)
Tim Peters6912d4d2001-05-05 03:56:37 +00002228 goto Fail;
2229
2230 Py_DECREF(it);
2231 return result;
2232
2233Fail:
2234 Py_XDECREF(result);
2235 Py_DECREF(it);
2236 return NULL;
Guido van Rossume15dee51995-07-18 14:12:02 +00002237}
2238
Guido van Rossum3c5936a1996-12-05 21:51:24 +00002239PyObject *
Fred Drake79912472000-07-09 04:06:11 +00002240PySequence_List(PyObject *v)
Guido van Rossum3c5936a1996-12-05 21:51:24 +00002241{
Tim Petersf553f892001-05-01 20:45:31 +00002242 PyObject *result; /* result list */
Raymond Hettinger8ca92ae2004-03-11 09:13:12 +00002243 PyObject *rv; /* return value from PyList_Extend */
Guido van Rossum4669fb41997-04-02 05:31:09 +00002244
Guido van Rossum5dba9e81998-07-10 18:03:50 +00002245 if (v == NULL)
2246 return null_error();
2247
Raymond Hettinger8ca92ae2004-03-11 09:13:12 +00002248 result = PyList_New(0);
2249 if (result == NULL)
Tim Petersf553f892001-05-01 20:45:31 +00002250 return NULL;
2251
Raymond Hettinger8ca92ae2004-03-11 09:13:12 +00002252 rv = _PyList_Extend((PyListObject *)result, v);
2253 if (rv == NULL) {
2254 Py_DECREF(result);
Tim Petersf553f892001-05-01 20:45:31 +00002255 return NULL;
2256 }
Raymond Hettinger969d8c02004-03-17 05:24:23 +00002257 Py_DECREF(rv);
Tim Petersf553f892001-05-01 20:45:31 +00002258 return result;
Guido van Rossum3c5936a1996-12-05 21:51:24 +00002259}
2260
Andrew M. Kuchling74042d62000-06-18 18:43:14 +00002261PyObject *
Fred Drake79912472000-07-09 04:06:11 +00002262PySequence_Fast(PyObject *v, const char *m)
Andrew M. Kuchling74042d62000-06-18 18:43:14 +00002263{
Raymond Hettinger2fb70292004-01-11 23:26:51 +00002264 PyObject *it;
2265
Andrew M. Kuchling74042d62000-06-18 18:43:14 +00002266 if (v == NULL)
2267 return null_error();
2268
Michael W. Hudson2801fe12002-11-05 18:05:49 +00002269 if (PyList_CheckExact(v) || PyTuple_CheckExact(v)) {
Andrew M. Kuchling74042d62000-06-18 18:43:14 +00002270 Py_INCREF(v);
2271 return v;
2272 }
2273
Raymond Hettinger2fb70292004-01-11 23:26:51 +00002274 it = PyObject_GetIter(v);
2275 if (it == NULL) {
2276 if (PyErr_ExceptionMatches(PyExc_TypeError))
Georg Brandlccff7852006-06-18 22:17:29 +00002277 PyErr_SetString(PyExc_TypeError, m);
Raymond Hettinger2fb70292004-01-11 23:26:51 +00002278 return NULL;
2279 }
2280
Raymond Hettinger193814c2004-12-18 19:00:59 +00002281 v = PySequence_List(it);
Raymond Hettinger2fb70292004-01-11 23:26:51 +00002282 Py_DECREF(it);
Andrew M. Kuchling74042d62000-06-18 18:43:14 +00002283
2284 return v;
2285}
2286
Tim Peters16a77ad2001-09-08 04:00:12 +00002287/* Iterate over seq. Result depends on the operation:
2288 PY_ITERSEARCH_COUNT: -1 if error, else # of times obj appears in seq.
Mark Dickinson3e4caeb2009-02-21 20:27:01 +00002289 PY_ITERSEARCH_INDEX: 0-based index of first occurrence of obj in seq;
Tim Peters16a77ad2001-09-08 04:00:12 +00002290 set ValueError and return -1 if none found; also return -1 on error.
2291 Py_ITERSEARCH_CONTAINS: return 1 if obj in seq, else 0; -1 on error.
2292*/
Neal Norwitz1fc4b772006-03-04 18:49:58 +00002293Py_ssize_t
Tim Peters16a77ad2001-09-08 04:00:12 +00002294_PySequence_IterSearch(PyObject *seq, PyObject *obj, int operation)
Guido van Rossume15dee51995-07-18 14:12:02 +00002295{
Neal Norwitz1fc4b772006-03-04 18:49:58 +00002296 Py_ssize_t n;
Tim Peters16a77ad2001-09-08 04:00:12 +00002297 int wrapped; /* for PY_ITERSEARCH_INDEX, true iff n wrapped around */
2298 PyObject *it; /* iter(seq) */
Guido van Rossume15dee51995-07-18 14:12:02 +00002299
Tim Peters16a77ad2001-09-08 04:00:12 +00002300 if (seq == NULL || obj == NULL) {
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002301 null_error();
2302 return -1;
2303 }
Tim Peters75f8e352001-05-05 11:33:43 +00002304
Tim Peters16a77ad2001-09-08 04:00:12 +00002305 it = PyObject_GetIter(seq);
Tim Peters75f8e352001-05-05 11:33:43 +00002306 if (it == NULL) {
Georg Brandlccff7852006-06-18 22:17:29 +00002307 type_error("argument of type '%.200s' is not iterable", seq);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002308 return -1;
Tim Peters75f8e352001-05-05 11:33:43 +00002309 }
Guido van Rossume15dee51995-07-18 14:12:02 +00002310
Tim Peters16a77ad2001-09-08 04:00:12 +00002311 n = wrapped = 0;
Tim Peters75f8e352001-05-05 11:33:43 +00002312 for (;;) {
2313 int cmp;
2314 PyObject *item = PyIter_Next(it);
2315 if (item == NULL) {
2316 if (PyErr_Occurred())
2317 goto Fail;
2318 break;
2319 }
Tim Peters16a77ad2001-09-08 04:00:12 +00002320
2321 cmp = PyObject_RichCompareBool(obj, item, Py_EQ);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002322 Py_DECREF(item);
Tim Peters75f8e352001-05-05 11:33:43 +00002323 if (cmp < 0)
2324 goto Fail;
2325 if (cmp > 0) {
Tim Peters16a77ad2001-09-08 04:00:12 +00002326 switch (operation) {
2327 case PY_ITERSEARCH_COUNT:
Armin Rigo7ccbca92006-10-04 12:17:45 +00002328 if (n == PY_SSIZE_T_MAX) {
Tim Peters16a77ad2001-09-08 04:00:12 +00002329 PyErr_SetString(PyExc_OverflowError,
Armin Rigo7ccbca92006-10-04 12:17:45 +00002330 "count exceeds C integer size");
Tim Peters16a77ad2001-09-08 04:00:12 +00002331 goto Fail;
2332 }
Armin Rigo7ccbca92006-10-04 12:17:45 +00002333 ++n;
Tim Peters16a77ad2001-09-08 04:00:12 +00002334 break;
2335
2336 case PY_ITERSEARCH_INDEX:
2337 if (wrapped) {
2338 PyErr_SetString(PyExc_OverflowError,
Armin Rigo7ccbca92006-10-04 12:17:45 +00002339 "index exceeds C integer size");
Tim Peters16a77ad2001-09-08 04:00:12 +00002340 goto Fail;
2341 }
2342 goto Done;
2343
2344 case PY_ITERSEARCH_CONTAINS:
2345 n = 1;
2346 goto Done;
2347
2348 default:
2349 assert(!"unknown operation");
Tim Peters75f8e352001-05-05 11:33:43 +00002350 }
Tim Peters16a77ad2001-09-08 04:00:12 +00002351 }
2352
2353 if (operation == PY_ITERSEARCH_INDEX) {
Armin Rigo7ccbca92006-10-04 12:17:45 +00002354 if (n == PY_SSIZE_T_MAX)
Tim Peters16a77ad2001-09-08 04:00:12 +00002355 wrapped = 1;
Armin Rigo7ccbca92006-10-04 12:17:45 +00002356 ++n;
Tim Peters75f8e352001-05-05 11:33:43 +00002357 }
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002358 }
Tim Peters16a77ad2001-09-08 04:00:12 +00002359
2360 if (operation != PY_ITERSEARCH_INDEX)
2361 goto Done;
2362
2363 PyErr_SetString(PyExc_ValueError,
2364 "sequence.index(x): x not in sequence");
2365 /* fall into failure code */
2366Fail:
2367 n = -1;
2368 /* fall through */
2369Done:
Tim Peters75f8e352001-05-05 11:33:43 +00002370 Py_DECREF(it);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002371 return n;
Tim Peters75f8e352001-05-05 11:33:43 +00002372
Guido van Rossume15dee51995-07-18 14:12:02 +00002373}
2374
Tim Peters16a77ad2001-09-08 04:00:12 +00002375/* Return # of times o appears in s. */
Neal Norwitz1fc4b772006-03-04 18:49:58 +00002376Py_ssize_t
Tim Peters16a77ad2001-09-08 04:00:12 +00002377PySequence_Count(PyObject *s, PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00002378{
Tim Peters16a77ad2001-09-08 04:00:12 +00002379 return _PySequence_IterSearch(s, o, PY_ITERSEARCH_COUNT);
Guido van Rossume15dee51995-07-18 14:12:02 +00002380}
2381
Tim Peterscb8d3682001-05-05 21:05:01 +00002382/* Return -1 if error; 1 if ob in seq; 0 if ob not in seq.
Tim Peters16a77ad2001-09-08 04:00:12 +00002383 * Use sq_contains if possible, else defer to _PySequence_IterSearch().
Tim Peterscb8d3682001-05-05 21:05:01 +00002384 */
2385int
2386PySequence_Contains(PyObject *seq, PyObject *ob)
2387{
Neal Norwitz1fc4b772006-03-04 18:49:58 +00002388 Py_ssize_t result;
Tim Peterscb8d3682001-05-05 21:05:01 +00002389 if (PyType_HasFeature(seq->ob_type, Py_TPFLAGS_HAVE_SEQUENCE_IN)) {
2390 PySequenceMethods *sqm = seq->ob_type->tp_as_sequence;
2391 if (sqm != NULL && sqm->sq_contains != NULL)
2392 return (*sqm->sq_contains)(seq, ob);
2393 }
Neal Norwitz1fc4b772006-03-04 18:49:58 +00002394 result = _PySequence_IterSearch(seq, ob, PY_ITERSEARCH_CONTAINS);
2395 return Py_SAFE_DOWNCAST(result, Py_ssize_t, int);
Tim Peterscb8d3682001-05-05 21:05:01 +00002396}
2397
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002398/* Backwards compatibility */
2399#undef PySequence_In
2400int
Fred Drake79912472000-07-09 04:06:11 +00002401PySequence_In(PyObject *w, PyObject *v)
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002402{
2403 return PySequence_Contains(w, v);
2404}
2405
Neal Norwitz1fc4b772006-03-04 18:49:58 +00002406Py_ssize_t
Fred Drake79912472000-07-09 04:06:11 +00002407PySequence_Index(PyObject *s, PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00002408{
Tim Peters16a77ad2001-09-08 04:00:12 +00002409 return _PySequence_IterSearch(s, o, PY_ITERSEARCH_INDEX);
Guido van Rossume15dee51995-07-18 14:12:02 +00002410}
2411
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002412/* Operations on mappings */
2413
2414int
Fred Drake79912472000-07-09 04:06:11 +00002415PyMapping_Check(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00002416{
Raymond Hettinger1be1a792004-09-19 06:00:15 +00002417 if (o && PyInstance_Check(o))
Raymond Hettingere2eda602004-04-04 08:51:41 +00002418 return PyObject_HasAttrString(o, "__getitem__");
2419
2420 return o && o->ob_type->tp_as_mapping &&
2421 o->ob_type->tp_as_mapping->mp_subscript &&
Raymond Hettingered9192e2004-04-05 08:14:48 +00002422 !(o->ob_type->tp_as_sequence &&
2423 o->ob_type->tp_as_sequence->sq_slice);
Guido van Rossume15dee51995-07-18 14:12:02 +00002424}
2425
Martin v. Löwis18e16552006-02-15 17:27:45 +00002426Py_ssize_t
Jeremy Hylton6253f832000-07-12 12:56:19 +00002427PyMapping_Size(PyObject *o)
Guido van Rossume15dee51995-07-18 14:12:02 +00002428{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002429 PyMappingMethods *m;
Guido van Rossume15dee51995-07-18 14:12:02 +00002430
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002431 if (o == NULL) {
2432 null_error();
2433 return -1;
2434 }
Guido van Rossume15dee51995-07-18 14:12:02 +00002435
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002436 m = o->ob_type->tp_as_mapping;
2437 if (m && m->mp_length)
2438 return m->mp_length(o);
Guido van Rossume15dee51995-07-18 14:12:02 +00002439
Georg Brandlb0061c82006-08-08 11:56:21 +00002440 type_error("object of type '%.200s' has no len()", o);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002441 return -1;
Guido van Rossume15dee51995-07-18 14:12:02 +00002442}
2443
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +00002444#undef PyMapping_Length
Martin v. Löwis18e16552006-02-15 17:27:45 +00002445Py_ssize_t
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +00002446PyMapping_Length(PyObject *o)
2447{
2448 return PyMapping_Size(o);
2449}
2450#define PyMapping_Length PyMapping_Size
2451
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002452PyObject *
Fred Drake79912472000-07-09 04:06:11 +00002453PyMapping_GetItemString(PyObject *o, char *key)
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002454{
2455 PyObject *okey, *r;
2456
2457 if (key == NULL)
2458 return null_error();
2459
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002460 okey = PyString_FromString(key);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002461 if (okey == NULL)
2462 return NULL;
2463 r = PyObject_GetItem(o, okey);
2464 Py_DECREF(okey);
2465 return r;
2466}
2467
2468int
Fred Drake79912472000-07-09 04:06:11 +00002469PyMapping_SetItemString(PyObject *o, char *key, PyObject *value)
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002470{
2471 PyObject *okey;
2472 int r;
2473
2474 if (key == NULL) {
2475 null_error();
2476 return -1;
2477 }
2478
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002479 okey = PyString_FromString(key);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002480 if (okey == NULL)
Guido van Rossumed6219b1998-05-29 02:59:33 +00002481 return -1;
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002482 r = PyObject_SetItem(o, okey, value);
2483 Py_DECREF(okey);
2484 return r;
2485}
2486
2487int
Fred Drake79912472000-07-09 04:06:11 +00002488PyMapping_HasKeyString(PyObject *o, char *key)
Guido van Rossume15dee51995-07-18 14:12:02 +00002489{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002490 PyObject *v;
Guido van Rossume15dee51995-07-18 14:12:02 +00002491
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002492 v = PyMapping_GetItemString(o, key);
2493 if (v) {
2494 Py_DECREF(v);
2495 return 1;
2496 }
2497 PyErr_Clear();
2498 return 0;
Guido van Rossume15dee51995-07-18 14:12:02 +00002499}
2500
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002501int
Fred Drake79912472000-07-09 04:06:11 +00002502PyMapping_HasKey(PyObject *o, PyObject *key)
Guido van Rossume15dee51995-07-18 14:12:02 +00002503{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002504 PyObject *v;
Guido van Rossume15dee51995-07-18 14:12:02 +00002505
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002506 v = PyObject_GetItem(o, key);
2507 if (v) {
2508 Py_DECREF(v);
2509 return 1;
2510 }
2511 PyErr_Clear();
2512 return 0;
Guido van Rossume15dee51995-07-18 14:12:02 +00002513}
2514
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002515/* Operations on callable objects */
2516
2517/* XXX PyCallable_Check() is in object.c */
2518
Guido van Rossume15dee51995-07-18 14:12:02 +00002519PyObject *
Fred Drake79912472000-07-09 04:06:11 +00002520PyObject_CallObject(PyObject *o, PyObject *a)
Guido van Rossume15dee51995-07-18 14:12:02 +00002521{
Guido van Rossum5560b742001-09-14 16:47:50 +00002522 return PyEval_CallObjectWithKeywords(o, a, NULL);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002523}
Guido van Rossume15dee51995-07-18 14:12:02 +00002524
2525PyObject *
Tim Peters6d6c1a32001-08-02 04:15:00 +00002526PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw)
2527{
2528 ternaryfunc call;
2529
2530 if ((call = func->ob_type->tp_call) != NULL) {
Brett Cannon1e534b52007-09-07 04:18:30 +00002531 PyObject *result;
2532 if (Py_EnterRecursiveCall(" while calling a Python object"))
2533 return NULL;
2534 result = (*call)(func, arg, kw);
2535 Py_LeaveRecursiveCall();
Tim Peters6d6c1a32001-08-02 04:15:00 +00002536 if (result == NULL && !PyErr_Occurred())
2537 PyErr_SetString(
2538 PyExc_SystemError,
2539 "NULL result without error in PyObject_Call");
2540 return result;
2541 }
Georg Brandlccff7852006-06-18 22:17:29 +00002542 PyErr_Format(PyExc_TypeError, "'%.200s' object is not callable",
Fred Drake573395a2001-11-01 20:26:12 +00002543 func->ob_type->tp_name);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002544 return NULL;
2545}
2546
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002547static PyObject*
2548call_function_tail(PyObject *callable, PyObject *args)
2549{
2550 PyObject *retval;
2551
2552 if (args == NULL)
2553 return NULL;
2554
2555 if (!PyTuple_Check(args)) {
2556 PyObject *a;
2557
2558 a = PyTuple_New(1);
2559 if (a == NULL) {
2560 Py_DECREF(args);
2561 return NULL;
2562 }
2563 PyTuple_SET_ITEM(a, 0, args);
2564 args = a;
2565 }
2566 retval = PyObject_Call(callable, args, NULL);
2567
2568 Py_DECREF(args);
2569
2570 return retval;
2571}
2572
Tim Peters6d6c1a32001-08-02 04:15:00 +00002573PyObject *
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002574PyObject_CallFunction(PyObject *callable, char *format, ...)
Guido van Rossume15dee51995-07-18 14:12:02 +00002575{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002576 va_list va;
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002577 PyObject *args;
Guido van Rossume15dee51995-07-18 14:12:02 +00002578
Fred Drakeb92cf062001-10-27 06:16:31 +00002579 if (callable == NULL)
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002580 return null_error();
Guido van Rossume15dee51995-07-18 14:12:02 +00002581
Fred Drakeb92cf062001-10-27 06:16:31 +00002582 if (format && *format) {
2583 va_start(va, format);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002584 args = Py_VaBuildValue(format, va);
Fred Drakeb92cf062001-10-27 06:16:31 +00002585 va_end(va);
2586 }
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002587 else
2588 args = PyTuple_New(0);
Guido van Rossume15dee51995-07-18 14:12:02 +00002589
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002590 return call_function_tail(callable, args);
2591}
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002592
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002593PyObject *
2594_PyObject_CallFunction_SizeT(PyObject *callable, char *format, ...)
2595{
2596 va_list va;
2597 PyObject *args;
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002598
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002599 if (callable == NULL)
2600 return null_error();
2601
2602 if (format && *format) {
2603 va_start(va, format);
2604 args = _Py_VaBuildValue_SizeT(format, va);
2605 va_end(va);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002606 }
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002607 else
2608 args = PyTuple_New(0);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002609
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002610 return call_function_tail(callable, args);
Guido van Rossume15dee51995-07-18 14:12:02 +00002611}
2612
2613PyObject *
Guido van Rossume15dee51995-07-18 14:12:02 +00002614PyObject_CallMethod(PyObject *o, char *name, char *format, ...)
Guido van Rossume15dee51995-07-18 14:12:02 +00002615{
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002616 va_list va;
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002617 PyObject *args;
Michael W. Hudson0edc7a02005-07-12 10:21:19 +00002618 PyObject *func = NULL;
2619 PyObject *retval = NULL;
Guido van Rossume15dee51995-07-18 14:12:02 +00002620
Fred Drakeb92cf062001-10-27 06:16:31 +00002621 if (o == NULL || name == NULL)
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002622 return null_error();
Guido van Rossume15dee51995-07-18 14:12:02 +00002623
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002624 func = PyObject_GetAttrString(o, name);
2625 if (func == NULL) {
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002626 PyErr_SetString(PyExc_AttributeError, name);
2627 return 0;
2628 }
Guido van Rossume15dee51995-07-18 14:12:02 +00002629
Michael W. Hudson0edc7a02005-07-12 10:21:19 +00002630 if (!PyCallable_Check(func)) {
Georg Brandlccff7852006-06-18 22:17:29 +00002631 type_error("attribute of type '%.200s' is not callable", func);
Michael W. Hudson0edc7a02005-07-12 10:21:19 +00002632 goto exit;
2633 }
Guido van Rossume15dee51995-07-18 14:12:02 +00002634
Fred Drakeb92cf062001-10-27 06:16:31 +00002635 if (format && *format) {
2636 va_start(va, format);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002637 args = Py_VaBuildValue(format, va);
Fred Drakeb92cf062001-10-27 06:16:31 +00002638 va_end(va);
2639 }
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002640 else
2641 args = PyTuple_New(0);
Guido van Rossume15dee51995-07-18 14:12:02 +00002642
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002643 retval = call_function_tail(func, args);
Guido van Rossume15dee51995-07-18 14:12:02 +00002644
Michael W. Hudson0edc7a02005-07-12 10:21:19 +00002645 exit:
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002646 /* args gets consumed in call_function_tail */
2647 Py_XDECREF(func);
2648
2649 return retval;
2650}
2651
2652PyObject *
2653_PyObject_CallMethod_SizeT(PyObject *o, char *name, char *format, ...)
2654{
2655 va_list va;
2656 PyObject *args;
2657 PyObject *func = NULL;
2658 PyObject *retval = NULL;
2659
2660 if (o == NULL || name == NULL)
2661 return null_error();
2662
2663 func = PyObject_GetAttrString(o, name);
2664 if (func == NULL) {
2665 PyErr_SetString(PyExc_AttributeError, name);
2666 return 0;
2667 }
2668
2669 if (!PyCallable_Check(func)) {
Georg Brandlccff7852006-06-18 22:17:29 +00002670 type_error("attribute of type '%.200s' is not callable", func);
Martin v. Löwis5cb69362006-04-14 09:08:42 +00002671 goto exit;
2672 }
2673
2674 if (format && *format) {
2675 va_start(va, format);
2676 args = _Py_VaBuildValue_SizeT(format, va);
2677 va_end(va);
2678 }
2679 else
2680 args = PyTuple_New(0);
2681
2682 retval = call_function_tail(func, args);
2683
2684 exit:
2685 /* args gets consumed in call_function_tail */
Michael W. Hudson0edc7a02005-07-12 10:21:19 +00002686 Py_XDECREF(func);
Guido van Rossumcea1c8c1998-05-22 00:47:05 +00002687
2688 return retval;
Guido van Rossume15dee51995-07-18 14:12:02 +00002689}
Guido van Rossum823649d2001-03-21 18:40:58 +00002690
2691
Fred Drakeb421b8c2001-10-26 16:21:32 +00002692static PyObject *
Fred Drakeb0c079e2001-10-28 02:39:03 +00002693objargs_mktuple(va_list va)
Fred Drakeb421b8c2001-10-26 16:21:32 +00002694{
2695 int i, n = 0;
2696 va_list countva;
2697 PyObject *result, *tmp;
2698
2699#ifdef VA_LIST_IS_ARRAY
2700 memcpy(countva, va, sizeof(va_list));
2701#else
Martin v. Löwis75d2d942002-07-28 10:23:27 +00002702#ifdef __va_copy
2703 __va_copy(countva, va);
2704#else
Fred Drakeb421b8c2001-10-26 16:21:32 +00002705 countva = va;
2706#endif
Martin v. Löwis75d2d942002-07-28 10:23:27 +00002707#endif
Fred Drakeb421b8c2001-10-26 16:21:32 +00002708
2709 while (((PyObject *)va_arg(countva, PyObject *)) != NULL)
2710 ++n;
2711 result = PyTuple_New(n);
2712 if (result != NULL && n > 0) {
2713 for (i = 0; i < n; ++i) {
2714 tmp = (PyObject *)va_arg(va, PyObject *);
2715 PyTuple_SET_ITEM(result, i, tmp);
2716 Py_INCREF(tmp);
2717 }
2718 }
2719 return result;
2720}
2721
2722PyObject *
Fred Drakeb0c079e2001-10-28 02:39:03 +00002723PyObject_CallMethodObjArgs(PyObject *callable, PyObject *name, ...)
Fred Drakeb421b8c2001-10-26 16:21:32 +00002724{
2725 PyObject *args, *tmp;
2726 va_list vargs;
2727
2728 if (callable == NULL || name == NULL)
2729 return null_error();
2730
2731 callable = PyObject_GetAttr(callable, name);
2732 if (callable == NULL)
2733 return NULL;
2734
2735 /* count the args */
2736 va_start(vargs, name);
Fred Drakeb0c079e2001-10-28 02:39:03 +00002737 args = objargs_mktuple(vargs);
Fred Drakeb421b8c2001-10-26 16:21:32 +00002738 va_end(vargs);
2739 if (args == NULL) {
2740 Py_DECREF(callable);
2741 return NULL;
2742 }
2743 tmp = PyObject_Call(callable, args, NULL);
2744 Py_DECREF(args);
2745 Py_DECREF(callable);
2746
2747 return tmp;
2748}
2749
2750PyObject *
Fred Drakeb0c079e2001-10-28 02:39:03 +00002751PyObject_CallFunctionObjArgs(PyObject *callable, ...)
Fred Drakeb421b8c2001-10-26 16:21:32 +00002752{
2753 PyObject *args, *tmp;
2754 va_list vargs;
2755
2756 if (callable == NULL)
2757 return null_error();
2758
2759 /* count the args */
2760 va_start(vargs, callable);
Fred Drakeb0c079e2001-10-28 02:39:03 +00002761 args = objargs_mktuple(vargs);
Fred Drakeb421b8c2001-10-26 16:21:32 +00002762 va_end(vargs);
2763 if (args == NULL)
2764 return NULL;
2765 tmp = PyObject_Call(callable, args, NULL);
2766 Py_DECREF(args);
2767
2768 return tmp;
2769}
2770
2771
Guido van Rossum823649d2001-03-21 18:40:58 +00002772/* isinstance(), issubclass() */
2773
Barry Warsawf16951c2002-04-23 22:45:44 +00002774/* abstract_get_bases() has logically 4 return states, with a sort of 0th
2775 * state that will almost never happen.
2776 *
2777 * 0. creating the __bases__ static string could get a MemoryError
2778 * 1. getattr(cls, '__bases__') could raise an AttributeError
2779 * 2. getattr(cls, '__bases__') could raise some other exception
2780 * 3. getattr(cls, '__bases__') could return a tuple
2781 * 4. getattr(cls, '__bases__') could return something other than a tuple
2782 *
2783 * Only state #3 is a non-error state and only it returns a non-NULL object
2784 * (it returns the retrieved tuple).
2785 *
2786 * Any raised AttributeErrors are masked by clearing the exception and
2787 * returning NULL. If an object other than a tuple comes out of __bases__,
2788 * then again, the return value is NULL. So yes, these two situations
2789 * produce exactly the same results: NULL is returned and no error is set.
2790 *
2791 * If some exception other than AttributeError is raised, then NULL is also
2792 * returned, but the exception is not cleared. That's because we want the
2793 * exception to be propagated along.
2794 *
2795 * Callers are expected to test for PyErr_Occurred() when the return value
2796 * is NULL to decide whether a valid exception should be propagated or not.
2797 * When there's no exception to propagate, it's customary for the caller to
2798 * set a TypeError.
2799 */
Neil Schemenauer6b471292001-10-18 03:18:43 +00002800static PyObject *
2801abstract_get_bases(PyObject *cls)
Guido van Rossum823649d2001-03-21 18:40:58 +00002802{
2803 static PyObject *__bases__ = NULL;
2804 PyObject *bases;
Guido van Rossum823649d2001-03-21 18:40:58 +00002805
2806 if (__bases__ == NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002807 __bases__ = PyString_InternFromString("__bases__");
Guido van Rossum823649d2001-03-21 18:40:58 +00002808 if (__bases__ == NULL)
Neil Schemenauer6b471292001-10-18 03:18:43 +00002809 return NULL;
Guido van Rossum823649d2001-03-21 18:40:58 +00002810 }
Neil Schemenauer6b471292001-10-18 03:18:43 +00002811 bases = PyObject_GetAttr(cls, __bases__);
Barry Warsawf16951c2002-04-23 22:45:44 +00002812 if (bases == NULL) {
2813 if (PyErr_ExceptionMatches(PyExc_AttributeError))
2814 PyErr_Clear();
Neil Schemenauer6b471292001-10-18 03:18:43 +00002815 return NULL;
Guido van Rossum823649d2001-03-21 18:40:58 +00002816 }
Barry Warsawf16951c2002-04-23 22:45:44 +00002817 if (!PyTuple_Check(bases)) {
2818 Py_DECREF(bases);
2819 return NULL;
2820 }
Neil Schemenauer6b471292001-10-18 03:18:43 +00002821 return bases;
2822}
2823
2824
2825static int
2826abstract_issubclass(PyObject *derived, PyObject *cls)
2827{
Antoine Pitrou0668c622008-08-26 22:42:08 +00002828 PyObject *bases = NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002829 Py_ssize_t i, n;
Neil Schemenauer6b471292001-10-18 03:18:43 +00002830 int r = 0;
2831
Antoine Pitrou0668c622008-08-26 22:42:08 +00002832 while (1) {
2833 if (derived == cls)
2834 return 1;
2835 bases = abstract_get_bases(derived);
2836 if (bases == NULL) {
2837 if (PyErr_Occurred())
2838 return -1;
2839 return 0;
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002840 }
Antoine Pitrou0668c622008-08-26 22:42:08 +00002841 n = PyTuple_GET_SIZE(bases);
2842 if (n == 0) {
2843 Py_DECREF(bases);
2844 return 0;
2845 }
2846 /* Avoid recursivity in the single inheritance case */
2847 if (n == 1) {
2848 derived = PyTuple_GET_ITEM(bases, 0);
2849 Py_DECREF(bases);
2850 continue;
2851 }
2852 for (i = 0; i < n; i++) {
2853 r = abstract_issubclass(PyTuple_GET_ITEM(bases, i), cls);
2854 if (r != 0)
2855 break;
2856 }
2857 Py_DECREF(bases);
2858 return r;
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002859 }
Guido van Rossum823649d2001-03-21 18:40:58 +00002860}
2861
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002862static int
2863check_class(PyObject *cls, const char *error)
2864{
2865 PyObject *bases = abstract_get_bases(cls);
2866 if (bases == NULL) {
2867 /* Do not mask errors. */
2868 if (!PyErr_Occurred())
2869 PyErr_SetString(PyExc_TypeError, error);
2870 return 0;
2871 }
2872 Py_DECREF(bases);
2873 return -1;
2874}
2875
Brett Cannon4f653312004-03-20 22:52:14 +00002876static int
Antoine Pitrou0668c622008-08-26 22:42:08 +00002877recursive_isinstance(PyObject *inst, PyObject *cls)
Guido van Rossum823649d2001-03-21 18:40:58 +00002878{
2879 PyObject *icls;
2880 static PyObject *__class__ = NULL;
2881 int retval = 0;
2882
Guido van Rossum03bc7d32003-02-12 03:32:58 +00002883 if (__class__ == NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002884 __class__ = PyString_InternFromString("__class__");
Guido van Rossum03bc7d32003-02-12 03:32:58 +00002885 if (__class__ == NULL)
2886 return -1;
2887 }
2888
Neil Schemenauer6b471292001-10-18 03:18:43 +00002889 if (PyClass_Check(cls) && PyInstance_Check(inst)) {
2890 PyObject *inclass =
2891 (PyObject*)((PyInstanceObject*)inst)->in_class;
2892 retval = PyClass_IsSubclass(inclass, cls);
Guido van Rossum823649d2001-03-21 18:40:58 +00002893 }
2894 else if (PyType_Check(cls)) {
Tim Peters6d6c1a32001-08-02 04:15:00 +00002895 retval = PyObject_TypeCheck(inst, (PyTypeObject *)cls);
Guido van Rossum03bc7d32003-02-12 03:32:58 +00002896 if (retval == 0) {
2897 PyObject *c = PyObject_GetAttr(inst, __class__);
2898 if (c == NULL) {
2899 PyErr_Clear();
2900 }
2901 else {
Guido van Rossume5b130b2003-02-12 03:36:05 +00002902 if (c != (PyObject *)(inst->ob_type) &&
2903 PyType_Check(c))
Guido van Rossum03bc7d32003-02-12 03:32:58 +00002904 retval = PyType_IsSubtype(
2905 (PyTypeObject *)c,
2906 (PyTypeObject *)cls);
2907 Py_DECREF(c);
2908 }
2909 }
Guido van Rossum823649d2001-03-21 18:40:58 +00002910 }
Neil Schemenauer6b471292001-10-18 03:18:43 +00002911 else {
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002912 if (!check_class(cls,
2913 "isinstance() arg 2 must be a class, type,"
2914 " or tuple of classes and types"))
Neil Schemenauer6b471292001-10-18 03:18:43 +00002915 return -1;
Guido van Rossum823649d2001-03-21 18:40:58 +00002916 icls = PyObject_GetAttr(inst, __class__);
Neil Schemenauer6b471292001-10-18 03:18:43 +00002917 if (icls == NULL) {
2918 PyErr_Clear();
2919 retval = 0;
Guido van Rossum823649d2001-03-21 18:40:58 +00002920 }
Neil Schemenauer6b471292001-10-18 03:18:43 +00002921 else {
2922 retval = abstract_issubclass(icls, cls);
2923 Py_DECREF(icls);
2924 }
Guido van Rossum823649d2001-03-21 18:40:58 +00002925 }
Guido van Rossum823649d2001-03-21 18:40:58 +00002926
Guido van Rossum823649d2001-03-21 18:40:58 +00002927 return retval;
2928}
2929
2930int
Brett Cannon4f653312004-03-20 22:52:14 +00002931PyObject_IsInstance(PyObject *inst, PyObject *cls)
2932{
Christian Heimese247f002008-02-14 22:40:11 +00002933 static PyObject *name = NULL;
Raymond Hettinger9a47e622008-03-18 23:22:29 +00002934
2935 /* Quick test for an exact match */
Raymond Hettingerde48d842008-03-19 03:56:59 +00002936 if (Py_TYPE(inst) == (PyTypeObject *)cls)
Raymond Hettinger9a47e622008-03-18 23:22:29 +00002937 return 1;
2938
Antoine Pitrou0668c622008-08-26 22:42:08 +00002939 if (PyTuple_Check(cls)) {
2940 Py_ssize_t i;
2941 Py_ssize_t n;
2942 int r = 0;
2943
2944 if (Py_EnterRecursiveCall(" in __instancecheck__"))
2945 return -1;
2946 n = PyTuple_GET_SIZE(cls);
2947 for (i = 0; i < n; ++i) {
2948 PyObject *item = PyTuple_GET_ITEM(cls, i);
2949 r = PyObject_IsInstance(inst, item);
2950 if (r != 0)
2951 /* either found it, or got an error */
2952 break;
2953 }
2954 Py_LeaveRecursiveCall();
2955 return r;
2956 }
Benjamin Petersonfb6fb062009-05-16 21:44:25 +00002957
Benjamin Petersona27dbc62009-05-16 22:40:56 +00002958 if (!(PyClass_Check(cls) || PyInstance_Check(cls))) {
2959 PyObject *checker;
Benjamin Petersonfb6fb062009-05-16 21:44:25 +00002960 checker = _PyObject_LookupSpecial(cls, "__instancecheck__", &name);
Benjamin Petersona27dbc62009-05-16 22:40:56 +00002961 if (checker != NULL) {
2962 PyObject *res;
2963 int ok = -1;
2964 if (Py_EnterRecursiveCall(" in __instancecheck__")) {
2965 Py_DECREF(checker);
2966 return ok;
2967 }
2968 res = PyObject_CallFunctionObjArgs(checker, inst, NULL);
2969 Py_LeaveRecursiveCall();
Guido van Rossumb5591132007-09-10 22:36:02 +00002970 Py_DECREF(checker);
Benjamin Petersona27dbc62009-05-16 22:40:56 +00002971 if (res != NULL) {
2972 ok = PyObject_IsTrue(res);
2973 Py_DECREF(res);
2974 }
Guido van Rossumb5591132007-09-10 22:36:02 +00002975 return ok;
2976 }
Benjamin Peterson87e50062009-05-25 02:40:21 +00002977 else if (PyErr_Occurred())
2978 return -1;
Guido van Rossumb5591132007-09-10 22:36:02 +00002979 }
Antoine Pitrou0668c622008-08-26 22:42:08 +00002980 return recursive_isinstance(inst, cls);
Brett Cannon4f653312004-03-20 22:52:14 +00002981}
2982
2983static int
Antoine Pitrou0668c622008-08-26 22:42:08 +00002984recursive_issubclass(PyObject *derived, PyObject *cls)
Guido van Rossum823649d2001-03-21 18:40:58 +00002985{
2986 int retval;
2987
Antoine Pitrou0668c622008-08-26 22:42:08 +00002988 if (PyType_Check(cls) && PyType_Check(derived)) {
2989 /* Fast path (non-recursive) */
2990 return PyType_IsSubtype(
2991 (PyTypeObject *)derived, (PyTypeObject *)cls);
2992 }
Guido van Rossum823649d2001-03-21 18:40:58 +00002993 if (!PyClass_Check(derived) || !PyClass_Check(cls)) {
Guido van Rossumf6c9ba82003-02-10 16:05:43 +00002994 if (!check_class(derived,
2995 "issubclass() arg 1 must be a class"))
Neil Schemenauer6b471292001-10-18 03:18:43 +00002996 return -1;
Neil Schemenauer6b471292001-10-18 03:18:43 +00002997
Antoine Pitrou0668c622008-08-26 22:42:08 +00002998 if (!check_class(cls,
2999 "issubclass() arg 2 must be a class"
3000 " or tuple of classes"))
3001 return -1;
Neil Schemenauer6b471292001-10-18 03:18:43 +00003002 retval = abstract_issubclass(derived, cls);
Guido van Rossum823649d2001-03-21 18:40:58 +00003003 }
3004 else {
3005 /* shortcut */
3006 if (!(retval = (derived == cls)))
3007 retval = PyClass_IsSubclass(derived, cls);
3008 }
3009
3010 return retval;
3011}
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00003012
Brett Cannon4f653312004-03-20 22:52:14 +00003013int
3014PyObject_IsSubclass(PyObject *derived, PyObject *cls)
3015{
Christian Heimese247f002008-02-14 22:40:11 +00003016 static PyObject *name = NULL;
Christian Heimese247f002008-02-14 22:40:11 +00003017
Antoine Pitrou0668c622008-08-26 22:42:08 +00003018 if (PyTuple_Check(cls)) {
3019 Py_ssize_t i;
3020 Py_ssize_t n;
3021 int r = 0;
3022
3023 if (Py_EnterRecursiveCall(" in __subclasscheck__"))
3024 return -1;
3025 n = PyTuple_GET_SIZE(cls);
3026 for (i = 0; i < n; ++i) {
3027 PyObject *item = PyTuple_GET_ITEM(cls, i);
3028 r = PyObject_IsSubclass(derived, item);
3029 if (r != 0)
3030 /* either found it, or got an error */
3031 break;
3032 }
3033 Py_LeaveRecursiveCall();
3034 return r;
3035 }
Benjamin Petersona27dbc62009-05-16 22:40:56 +00003036 if (!(PyClass_Check(cls) || PyInstance_Check(cls))) {
3037 PyObject *checker;
Benjamin Petersonfb6fb062009-05-16 21:44:25 +00003038 checker = _PyObject_LookupSpecial(cls, "__subclasscheck__", &name);
Benjamin Petersona27dbc62009-05-16 22:40:56 +00003039 if (checker != NULL) {
3040 PyObject *res;
3041 int ok = -1;
3042 if (Py_EnterRecursiveCall(" in __subclasscheck__")) {
3043 Py_DECREF(checker);
3044 return ok;
3045 }
3046 res = PyObject_CallFunctionObjArgs(checker, derived, NULL);
3047 Py_LeaveRecursiveCall();
Antoine Pitrou0668c622008-08-26 22:42:08 +00003048 Py_DECREF(checker);
Benjamin Petersona27dbc62009-05-16 22:40:56 +00003049 if (res != NULL) {
3050 ok = PyObject_IsTrue(res);
3051 Py_DECREF(res);
3052 }
Guido van Rossumb5591132007-09-10 22:36:02 +00003053 return ok;
Antoine Pitrou0668c622008-08-26 22:42:08 +00003054 }
Benjamin Peterson87e50062009-05-25 02:40:21 +00003055 else if (PyErr_Occurred()) {
3056 return -1;
3057 }
Guido van Rossumb5591132007-09-10 22:36:02 +00003058 }
Antoine Pitrou0668c622008-08-26 22:42:08 +00003059 return recursive_issubclass(derived, cls);
3060}
3061
3062int
3063_PyObject_RealIsInstance(PyObject *inst, PyObject *cls)
3064{
3065 return recursive_isinstance(inst, cls);
3066}
3067
3068int
3069_PyObject_RealIsSubclass(PyObject *derived, PyObject *cls)
3070{
3071 return recursive_issubclass(derived, cls);
Brett Cannon4f653312004-03-20 22:52:14 +00003072}
3073
3074
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00003075PyObject *
3076PyObject_GetIter(PyObject *o)
3077{
3078 PyTypeObject *t = o->ob_type;
3079 getiterfunc f = NULL;
3080 if (PyType_HasFeature(t, Py_TPFLAGS_HAVE_ITER))
3081 f = t->tp_iter;
3082 if (f == NULL) {
3083 if (PySequence_Check(o))
Guido van Rossum213c7a62001-04-23 14:08:49 +00003084 return PySeqIter_New(o);
Georg Brandlccff7852006-06-18 22:17:29 +00003085 return type_error("'%.200s' object is not iterable", o);
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00003086 }
Guido van Rossum213c7a62001-04-23 14:08:49 +00003087 else {
3088 PyObject *res = (*f)(o);
3089 if (res != NULL && !PyIter_Check(res)) {
3090 PyErr_Format(PyExc_TypeError,
3091 "iter() returned non-iterator "
3092 "of type '%.100s'",
3093 res->ob_type->tp_name);
3094 Py_DECREF(res);
3095 res = NULL;
3096 }
3097 return res;
3098 }
3099}
3100
Tim Petersf4848da2001-05-05 00:14:56 +00003101/* Return next item.
3102 * If an error occurs, return NULL. PyErr_Occurred() will be true.
3103 * If the iteration terminates normally, return NULL and clear the
3104 * PyExc_StopIteration exception (if it was set). PyErr_Occurred()
3105 * will be false.
3106 * Else return the next object. PyErr_Occurred() will be false.
3107 */
Guido van Rossum213c7a62001-04-23 14:08:49 +00003108PyObject *
3109PyIter_Next(PyObject *iter)
3110{
Tim Petersf4848da2001-05-05 00:14:56 +00003111 PyObject *result;
Tim Petersf4848da2001-05-05 00:14:56 +00003112 result = (*iter->ob_type->tp_iternext)(iter);
3113 if (result == NULL &&
3114 PyErr_Occurred() &&
3115 PyErr_ExceptionMatches(PyExc_StopIteration))
3116 PyErr_Clear();
3117 return result;
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00003118}