1 /* Abstract Object Interface (many thanks to Jim Fulton) */
2
3 #include "Python.h"
4 #include <ctype.h>
5 #include "structmember.h" /* we need the offsetof() macro from there */
6 #include "longintrepr.h"
7
8 #define NEW_STYLE_NUMBER(o) PyType_HasFeature((o)->ob_type, \
9 Py_TPFLAGS_CHECKTYPES)
10
11
12 /* Shorthands to return certain errors */
13
14 static PyObject *
type_error(const char * msg,PyObject * obj)15 type_error(const char *msg, PyObject *obj)
16 {
17 PyErr_Format(PyExc_TypeError, msg, obj->ob_type->tp_name);
18 return NULL;
19 }
20
21 static PyObject *
null_error(void)22 null_error(void)
23 {
24 if (!PyErr_Occurred())
25 PyErr_SetString(PyExc_SystemError,
26 "null argument to internal routine");
27 return NULL;
28 }
29
30 /* Operations on any object */
31
32 int
PyObject_Cmp(PyObject * o1,PyObject * o2,int * result)33 PyObject_Cmp(PyObject *o1, PyObject *o2, int *result)
34 {
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;
45 return 0;
46 }
47
48 PyObject *
PyObject_Type(PyObject * o)49 PyObject_Type(PyObject *o)
50 {
51 PyObject *v;
52
53 if (o == NULL)
54 return null_error();
55 v = (PyObject *)o->ob_type;
56 Py_INCREF(v);
57 return v;
58 }
59
60 Py_ssize_t
PyObject_Size(PyObject * o)61 PyObject_Size(PyObject *o)
62 {
63 PySequenceMethods *m;
64
65 if (o == NULL) {
66 null_error();
67 return -1;
68 }
69
70 m = o->ob_type->tp_as_sequence;
71 if (m && m->sq_length)
72 return m->sq_length(o);
73
74 return PyMapping_Size(o);
75 }
76
77 #undef PyObject_Length
78 Py_ssize_t
PyObject_Length(PyObject * o)79 PyObject_Length(PyObject *o)
80 {
81 return PyObject_Size(o);
82 }
83 #define PyObject_Length PyObject_Size
84
85
86 /* The length hint function returns a non-negative value from o.__len__()
87 or o.__length_hint__(). If those methods aren't found or return a negative
88 value, then the defaultvalue is returned. If one of the calls fails,
89 this function returns -1.
90 */
91
92 Py_ssize_t
_PyObject_LengthHint(PyObject * o,Py_ssize_t defaultvalue)93 _PyObject_LengthHint(PyObject *o, Py_ssize_t defaultvalue)
94 {
95 static PyObject *hintstrobj = NULL;
96 PyObject *ro, *hintmeth;
97 Py_ssize_t rv;
98
99 /* try o.__len__() */
100 rv = PyObject_Size(o);
101 if (rv >= 0)
102 return rv;
103 if (PyErr_Occurred()) {
104 if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
105 !PyErr_ExceptionMatches(PyExc_AttributeError))
106 return -1;
107 PyErr_Clear();
108 }
109
110 if (PyInstance_Check(o))
111 return defaultvalue;
112 /* try o.__length_hint__() */
113 hintmeth = _PyObject_LookupSpecial(o, "__length_hint__", &hintstrobj);
114 if (hintmeth == NULL) {
115 if (PyErr_Occurred())
116 return -1;
117 else
118 return defaultvalue;
119 }
120 ro = PyObject_CallFunctionObjArgs(hintmeth, NULL);
121 Py_DECREF(hintmeth);
122 if (ro == NULL) {
123 if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
124 !PyErr_ExceptionMatches(PyExc_AttributeError))
125 return -1;
126 PyErr_Clear();
127 return defaultvalue;
128 }
129 rv = PyNumber_Check(ro) ? PyInt_AsSsize_t(ro) : defaultvalue;
130 Py_DECREF(ro);
131 return rv;
132 }
133
134 PyObject *
PyObject_GetItem(PyObject * o,PyObject * key)135 PyObject_GetItem(PyObject *o, PyObject *key)
136 {
137 PyMappingMethods *m;
138
139 if (o == NULL || key == NULL)
140 return null_error();
141
142 m = o->ob_type->tp_as_mapping;
143 if (m && m->mp_subscript)
144 return m->mp_subscript(o, key);
145
146 if (o->ob_type->tp_as_sequence) {
147 if (PyIndex_Check(key)) {
148 Py_ssize_t key_value;
149 key_value = PyNumber_AsSsize_t(key, PyExc_IndexError);
150 if (key_value == -1 && PyErr_Occurred())
151 return NULL;
152 return PySequence_GetItem(o, key_value);
153 }
154 else if (o->ob_type->tp_as_sequence->sq_item)
155 return type_error("sequence index must "
156 "be integer, not '%.200s'", key);
157 }
158
159 return type_error("'%.200s' object has no attribute '__getitem__'", o);
160 }
161
162 int
PyObject_SetItem(PyObject * o,PyObject * key,PyObject * value)163 PyObject_SetItem(PyObject *o, PyObject *key, PyObject *value)
164 {
165 PyMappingMethods *m;
166
167 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);
174
175 if (o->ob_type->tp_as_sequence) {
176 if (PyIndex_Check(key)) {
177 Py_ssize_t key_value;
178 key_value = PyNumber_AsSsize_t(key, PyExc_IndexError);
179 if (key_value == -1 && PyErr_Occurred())
180 return -1;
181 return PySequence_SetItem(o, key_value, value);
182 }
183 else if (o->ob_type->tp_as_sequence->sq_ass_item) {
184 type_error("sequence index must be "
185 "integer, not '%.200s'", key);
186 return -1;
187 }
188 }
189
190 type_error("'%.200s' object does not support item assignment", o);
191 return -1;
192 }
193
194 int
PyObject_DelItem(PyObject * o,PyObject * key)195 PyObject_DelItem(PyObject *o, PyObject *key)
196 {
197 PyMappingMethods *m;
198
199 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);
206
207 if (o->ob_type->tp_as_sequence) {
208 if (PyIndex_Check(key)) {
209 Py_ssize_t key_value;
210 key_value = PyNumber_AsSsize_t(key, PyExc_IndexError);
211 if (key_value == -1 && PyErr_Occurred())
212 return -1;
213 return PySequence_DelItem(o, key_value);
214 }
215 else if (o->ob_type->tp_as_sequence->sq_ass_item) {
216 type_error("sequence index must be "
217 "integer, not '%.200s'", key);
218 return -1;
219 }
220 }
221
222 type_error("'%.200s' object does not support item deletion", o);
223 return -1;
224 }
225
226 int
PyObject_DelItemString(PyObject * o,char * key)227 PyObject_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 }
236 okey = PyString_FromString(key);
237 if (okey == NULL)
238 return -1;
239 ret = PyObject_DelItem(o, okey);
240 Py_DECREF(okey);
241 return ret;
242 }
243
244 int
PyObject_AsCharBuffer(PyObject * obj,const char ** buffer,Py_ssize_t * buffer_len)245 PyObject_AsCharBuffer(PyObject *obj,
246 const char **buffer,
247 Py_ssize_t *buffer_len)
248 {
249 PyBufferProcs *pb;
250 char *pp;
251 Py_ssize_t len;
252
253 if (obj == NULL || buffer == NULL || buffer_len == NULL) {
254 null_error();
255 return -1;
256 }
257 pb = obj->ob_type->tp_as_buffer;
258 if (pb == NULL ||
259 pb->bf_getcharbuffer == NULL ||
260 pb->bf_getsegcount == NULL) {
261 PyErr_SetString(PyExc_TypeError,
262 "expected a string or other character buffer object");
263 return -1;
264 }
265 if ((*pb->bf_getsegcount)(obj,NULL) != 1) {
266 PyErr_SetString(PyExc_TypeError,
267 "expected a single-segment buffer object");
268 return -1;
269 }
270 len = (*pb->bf_getcharbuffer)(obj, 0, &pp);
271 if (len < 0)
272 return -1;
273 *buffer = pp;
274 *buffer_len = len;
275 return 0;
276 }
277
278 int
PyObject_CheckReadBuffer(PyObject * obj)279 PyObject_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;
289 }
290
PyObject_AsReadBuffer(PyObject * obj,const void ** buffer,Py_ssize_t * buffer_len)291 int PyObject_AsReadBuffer(PyObject *obj,
292 const void **buffer,
293 Py_ssize_t *buffer_len)
294 {
295 PyBufferProcs *pb;
296 void *pp;
297 Py_ssize_t len;
298
299 if (obj == NULL || buffer == NULL || buffer_len == NULL) {
300 null_error();
301 return -1;
302 }
303 pb = obj->ob_type->tp_as_buffer;
304 if (pb == NULL ||
305 pb->bf_getreadbuffer == NULL ||
306 pb->bf_getsegcount == NULL) {
307 PyErr_SetString(PyExc_TypeError,
308 "expected a readable buffer object");
309 return -1;
310 }
311 if ((*pb->bf_getsegcount)(obj, NULL) != 1) {
312 PyErr_SetString(PyExc_TypeError,
313 "expected a single-segment buffer object");
314 return -1;
315 }
316 len = (*pb->bf_getreadbuffer)(obj, 0, &pp);
317 if (len < 0)
318 return -1;
319 *buffer = pp;
320 *buffer_len = len;
321 return 0;
322 }
323
PyObject_AsWriteBuffer(PyObject * obj,void ** buffer,Py_ssize_t * buffer_len)324 int PyObject_AsWriteBuffer(PyObject *obj,
325 void **buffer,
326 Py_ssize_t *buffer_len)
327 {
328 PyBufferProcs *pb;
329 void*pp;
330 Py_ssize_t len;
331
332 if (obj == NULL || buffer == NULL || buffer_len == NULL) {
333 null_error();
334 return -1;
335 }
336 pb = obj->ob_type->tp_as_buffer;
337 if (pb == NULL ||
338 pb->bf_getwritebuffer == NULL ||
339 pb->bf_getsegcount == NULL) {
340 PyErr_SetString(PyExc_TypeError,
341 "expected a writeable buffer object");
342 return -1;
343 }
344 if ((*pb->bf_getsegcount)(obj, NULL) != 1) {
345 PyErr_SetString(PyExc_TypeError,
346 "expected a single-segment buffer object");
347 return -1;
348 }
349 len = (*pb->bf_getwritebuffer)(obj,0,&pp);
350 if (len < 0)
351 return -1;
352 *buffer = pp;
353 *buffer_len = len;
354 return 0;
355 }
356
357 /* Buffer C-API for Python 3.0 */
358
359 int
PyObject_GetBuffer(PyObject * obj,Py_buffer * view,int flags)360 PyObject_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
371 static int
_IsFortranContiguous(Py_buffer * view)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
392 static int
_IsCContiguous(Py_buffer * view)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
413 int
PyBuffer_IsContiguous(Py_buffer * view,char fort)414 PyBuffer_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
429 void*
PyBuffer_GetPointer(Py_buffer * view,Py_ssize_t * indices)430 PyBuffer_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
445 void
_Py_add_one_to_index_F(int nd,Py_ssize_t * index,const Py_ssize_t * shape)446 _Py_add_one_to_index_F(int nd, Py_ssize_t *index, const 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
461 void
_Py_add_one_to_index_C(int nd,Py_ssize_t * index,const Py_ssize_t * shape)462 _Py_add_one_to_index_C(int nd, Py_ssize_t *index, const 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
482 int
PyBuffer_ToContiguous(void * buf,Py_buffer * view,Py_ssize_t len,char fort)483 PyBuffer_ToContiguous(void *buf, Py_buffer *view, Py_ssize_t len, char fort)
484 {
485 int k;
486 void (*addone)(int, Py_ssize_t *, const 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 /* view->ndim <= 64 */
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 = _Py_add_one_to_index_F;
514 }
515 else {
516 addone = _Py_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 ptr = PyBuffer_GetPointer(view, indices);
525 memcpy(dest, ptr, view->itemsize);
526 dest += view->itemsize;
527 addone(view->ndim, indices, view->shape);
528 }
529 PyMem_Free(indices);
530 return 0;
531 }
532
533 int
PyBuffer_FromContiguous(Py_buffer * view,void * buf,Py_ssize_t len,char fort)534 PyBuffer_FromContiguous(Py_buffer *view, void *buf, Py_ssize_t len, char fort)
535 {
536 int k;
537 void (*addone)(int, Py_ssize_t *, const 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 /* view->ndim <= 64 */
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 = _Py_add_one_to_index_F;
565 }
566 else {
567 addone = _Py_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 ptr = PyBuffer_GetPointer(view, indices);
576 memcpy(ptr, src, view->itemsize);
577 src += view->itemsize;
578 addone(view->ndim, indices, view->shape);
579 }
580
581 PyMem_Free(indices);
582 return 0;
583 }
584
PyObject_CopyData(PyObject * dest,PyObject * src)585 int 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) {
602 PyBuffer_Release(&view_dest);
603 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");
609 PyBuffer_Release(&view_dest);
610 PyBuffer_Release(&view_src);
611 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);
620 PyBuffer_Release(&view_dest);
621 PyBuffer_Release(&view_src);
622 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();
631 PyBuffer_Release(&view_dest);
632 PyBuffer_Release(&view_src);
633 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 _Py_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);
650 PyBuffer_Release(&view_dest);
651 PyBuffer_Release(&view_src);
652 return 0;
653 }
654
655 void
PyBuffer_FillContiguousStrides(int nd,Py_ssize_t * shape,Py_ssize_t * strides,int itemsize,char fort)656 PyBuffer_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
679 int
PyBuffer_FillInfo(Py_buffer * view,PyObject * obj,void * buf,Py_ssize_t len,int readonly,int flags)680 PyBuffer_FillInfo(Py_buffer *view, PyObject *obj, void *buf, Py_ssize_t len,
681 int readonly, int flags)
682 {
683 if (view == NULL) return 0;
684 if (((flags & PyBUF_WRITABLE) == PyBUF_WRITABLE) &&
685 (readonly == 1)) {
686 PyErr_SetString(PyExc_BufferError,
687 "Object is not writable.");
688 return -1;
689 }
690
691 view->obj = obj;
692 if (obj)
693 Py_INCREF(obj);
694 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
713 void
PyBuffer_Release(Py_buffer * view)714 PyBuffer_Release(Py_buffer *view)
715 {
716 PyObject *obj = view->obj;
717 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);
720 view->obj = NULL;
721 }
722
723 PyObject *
PyObject_Format(PyObject * obj,PyObject * format_spec)724 PyObject_Format(PyObject* obj, PyObject *format_spec)
725 {
726 PyObject *empty = NULL;
727 PyObject *result = NULL;
728 #ifdef Py_USING_UNICODE
729 int spec_is_unicode;
730 int result_is_unicode;
731 #endif
732
733 /* If no format_spec is provided, use an empty string */
734 if (format_spec == NULL) {
735 empty = PyString_FromStringAndSize(NULL, 0);
736 format_spec = empty;
737 }
738
739 /* Check the format_spec type, and make sure it's str or unicode */
740 #ifdef Py_USING_UNICODE
741 if (PyUnicode_Check(format_spec))
742 spec_is_unicode = 1;
743 else if (PyString_Check(format_spec))
744 spec_is_unicode = 0;
745 else {
746 #else
747 if (!PyString_Check(format_spec)) {
748 #endif
749 PyErr_Format(PyExc_TypeError,
750 "format expects arg 2 to be string "
751 "or unicode, not %.100s", Py_TYPE(format_spec)->tp_name);
752 goto done;
753 }
754
755 /* Check for a __format__ method and call it. */
756 if (PyInstance_Check(obj)) {
757 /* We're an instance of a classic class */
758 PyObject *bound_method = PyObject_GetAttrString(obj, "__format__");
759 if (bound_method != NULL) {
760 result = PyObject_CallFunctionObjArgs(bound_method,
761 format_spec,
762 NULL);
763 Py_DECREF(bound_method);
764 } else {
765 PyObject *self_as_str = NULL;
766 PyObject *format_method = NULL;
767 Py_ssize_t format_len;
768
769 PyErr_Clear();
770 /* Per the PEP, convert to str (or unicode,
771 depending on the type of the format
772 specifier). For new-style classes, this
773 logic is done by object.__format__(). */
774 #ifdef Py_USING_UNICODE
775 if (spec_is_unicode) {
776 format_len = PyUnicode_GET_SIZE(format_spec);
777 self_as_str = PyObject_Unicode(obj);
778 } else
779 #endif
780 {
781 format_len = PyString_GET_SIZE(format_spec);
782 self_as_str = PyObject_Str(obj);
783 }
784 if (self_as_str == NULL)
785 goto done1;
786
787 if (format_len > 0) {
788 /* See the almost identical code in
789 typeobject.c for new-style
790 classes. */
791 if (PyErr_WarnEx(
792 PyExc_PendingDeprecationWarning,
793 "object.__format__ with a non-empty "
794 "format string is deprecated", 1)
795 < 0) {
796 goto done1;
797 }
798 /* Eventually this will become an
799 error:
800 PyErr_Format(PyExc_TypeError,
801 "non-empty format string passed to "
802 "object.__format__");
803 goto done1;
804 */
805 }
806
807 /* Then call str.__format__ on that result */
808 format_method = PyObject_GetAttrString(self_as_str, "__format__");
809 if (format_method == NULL) {
810 goto done1;
811 }
812 result = PyObject_CallFunctionObjArgs(format_method,
813 format_spec,
814 NULL);
815 done1:
816 Py_XDECREF(self_as_str);
817 Py_XDECREF(format_method);
818 if (result == NULL)
819 goto done;
820 }
821 } else {
822 /* Not an instance of a classic class, use the code
823 from py3k */
824 static PyObject *format_cache = NULL;
825
826 /* Find the (unbound!) __format__ method (a borrowed
827 reference) */
828 PyObject *method = _PyObject_LookupSpecial(obj, "__format__",
829 &format_cache);
830 if (method == NULL) {
831 if (!PyErr_Occurred())
832 PyErr_Format(PyExc_TypeError,
833 "Type %.100s doesn't define __format__",
834 Py_TYPE(obj)->tp_name);
835 goto done;
836 }
837 /* And call it. */
838 result = PyObject_CallFunctionObjArgs(method, format_spec, NULL);
839 Py_DECREF(method);
840 }
841
842 if (result == NULL)
843 goto done;
844
845 /* Check the result type, and make sure it's str or unicode */
846 #ifdef Py_USING_UNICODE
847 if (PyUnicode_Check(result))
848 result_is_unicode = 1;
849 else if (PyString_Check(result))
850 result_is_unicode = 0;
851 else {
852 #else
853 if (!PyString_Check(result)) {
854 #endif
855 PyErr_Format(PyExc_TypeError,
856 "%.100s.__format__ must return string or "
857 "unicode, not %.100s", Py_TYPE(obj)->tp_name,
858 Py_TYPE(result)->tp_name);
859 Py_DECREF(result);
860 result = NULL;
861 goto done;
862 }
863
864 /* Convert to unicode, if needed. Required if spec is unicode
865 and result is str */
866 #ifdef Py_USING_UNICODE
867 if (spec_is_unicode && !result_is_unicode) {
868 PyObject *tmp = PyObject_Unicode(result);
869 /* This logic works whether or not tmp is NULL */
870 Py_DECREF(result);
871 result = tmp;
872 }
873 #endif
874
875 done:
876 Py_XDECREF(empty);
877 return result;
878 }
879
880 /* Operations on numbers */
881
882 int
883 PyNumber_Check(PyObject *o)
884 {
885 return o && o->ob_type->tp_as_number &&
886 (o->ob_type->tp_as_number->nb_int ||
887 o->ob_type->tp_as_number->nb_float);
888 }
889
890 /* Binary operators */
891
892 /* New style number protocol support */
893
894 #define NB_SLOT(x) offsetof(PyNumberMethods, x)
895 #define NB_BINOP(nb_methods, slot) \
896 (*(binaryfunc*)(& ((char*)nb_methods)[slot]))
897 #define NB_TERNOP(nb_methods, slot) \
898 (*(ternaryfunc*)(& ((char*)nb_methods)[slot]))
899
900 /*
901 Calling scheme used for binary operations:
902
903 v w Action
904 -------------------------------------------------------------------
905 new new w.op(v,w)[*], v.op(v,w), w.op(v,w)
906 new old v.op(v,w), coerce(v,w), v.op(v,w)
907 old new w.op(v,w), coerce(v,w), v.op(v,w)
908 old old coerce(v,w), v.op(v,w)
909
910 [*] only when v->ob_type != w->ob_type && w->ob_type is a subclass of
911 v->ob_type
912
913 Legend:
914 -------
915 * new == new style number
916 * old == old style number
917 * Action indicates the order in which operations are tried until either
918 a valid result is produced or an error occurs.
919
920 */
921
922 static PyObject *
923 binary_op1(PyObject *v, PyObject *w, const int op_slot)
924 {
925 PyObject *x;
926 binaryfunc slotv = NULL;
927 binaryfunc slotw = NULL;
928
929 if (v->ob_type->tp_as_number != NULL && NEW_STYLE_NUMBER(v))
930 slotv = NB_BINOP(v->ob_type->tp_as_number, op_slot);
931 if (w->ob_type != v->ob_type &&
932 w->ob_type->tp_as_number != NULL && NEW_STYLE_NUMBER(w)) {
933 slotw = NB_BINOP(w->ob_type->tp_as_number, op_slot);
934 if (slotw == slotv)
935 slotw = NULL;
936 }
937 if (slotv) {
938 if (slotw && PyType_IsSubtype(w->ob_type, v->ob_type)) {
939 x = slotw(v, w);
940 if (x != Py_NotImplemented)
941 return x;
942 Py_DECREF(x); /* can't do it */
943 slotw = NULL;
944 }
945 x = slotv(v, w);
946 if (x != Py_NotImplemented)
947 return x;
948 Py_DECREF(x); /* can't do it */
949 }
950 if (slotw) {
951 x = slotw(v, w);
952 if (x != Py_NotImplemented)
953 return x;
954 Py_DECREF(x); /* can't do it */
955 }
956 if (!NEW_STYLE_NUMBER(v) || !NEW_STYLE_NUMBER(w)) {
957 int err = PyNumber_CoerceEx(&v, &w);
958 if (err < 0) {
959 return NULL;
960 }
961 if (err == 0) {
962 PyNumberMethods *mv = v->ob_type->tp_as_number;
963 if (mv) {
964 binaryfunc slot;
965 slot = NB_BINOP(mv, op_slot);
966 if (slot) {
967 x = slot(v, w);
968 Py_DECREF(v);
969 Py_DECREF(w);
970 return x;
971 }
972 }
973 /* CoerceEx incremented the reference counts */
974 Py_DECREF(v);
975 Py_DECREF(w);
976 }
977 }
978 Py_INCREF(Py_NotImplemented);
979 return Py_NotImplemented;
980 }
981
982 static PyObject *
983 binop_type_error(PyObject *v, PyObject *w, const char *op_name)
984 {
985 PyErr_Format(PyExc_TypeError,
986 "unsupported operand type(s) for %.100s: "
987 "'%.100s' and '%.100s'",
988 op_name,
989 v->ob_type->tp_name,
990 w->ob_type->tp_name);
991 return NULL;
992 }
993
994 static PyObject *
995 binary_op(PyObject *v, PyObject *w, const int op_slot, const char *op_name)
996 {
997 PyObject *result = binary_op1(v, w, op_slot);
998 if (result == Py_NotImplemented) {
999 Py_DECREF(result);
1000 return binop_type_error(v, w, op_name);
1001 }
1002 return result;
1003 }
1004
1005
1006 /*
1007 Calling scheme used for ternary operations:
1008
1009 *** In some cases, w.op is called before v.op; see binary_op1. ***
1010
1011 v w z Action
1012 -------------------------------------------------------------------
1013 new new new v.op(v,w,z), w.op(v,w,z), z.op(v,w,z)
1014 new old new v.op(v,w,z), z.op(v,w,z), coerce(v,w,z), v.op(v,w,z)
1015 old new new w.op(v,w,z), z.op(v,w,z), coerce(v,w,z), v.op(v,w,z)
1016 old old new z.op(v,w,z), coerce(v,w,z), v.op(v,w,z)
1017 new new old v.op(v,w,z), w.op(v,w,z), coerce(v,w,z), v.op(v,w,z)
1018 new old old v.op(v,w,z), coerce(v,w,z), v.op(v,w,z)
1019 old new old w.op(v,w,z), coerce(v,w,z), v.op(v,w,z)
1020 old old old coerce(v,w,z), v.op(v,w,z)
1021
1022 Legend:
1023 -------
1024 * new == new style number
1025 * old == old style number
1026 * Action indicates the order in which operations are tried until either
1027 a valid result is produced or an error occurs.
1028 * coerce(v,w,z) actually does: coerce(v,w), coerce(v,z), coerce(w,z) and
1029 only if z != Py_None; if z == Py_None, then it is treated as absent
1030 variable and only coerce(v,w) is tried.
1031
1032 */
1033
1034 static PyObject *
1035 ternary_op(PyObject *v,
1036 PyObject *w,
1037 PyObject *z,
1038 const int op_slot,
1039 const char *op_name)
1040 {
1041 PyNumberMethods *mv, *mw, *mz;
1042 PyObject *x = NULL;
1043 ternaryfunc slotv = NULL;
1044 ternaryfunc slotw = NULL;
1045 ternaryfunc slotz = NULL;
1046
1047 mv = v->ob_type->tp_as_number;
1048 mw = w->ob_type->tp_as_number;
1049 if (mv != NULL && NEW_STYLE_NUMBER(v))
1050 slotv = NB_TERNOP(mv, op_slot);
1051 if (w->ob_type != v->ob_type &&
1052 mw != NULL && NEW_STYLE_NUMBER(w)) {
1053 slotw = NB_TERNOP(mw, op_slot);
1054 if (slotw == slotv)
1055 slotw = NULL;
1056 }
1057 if (slotv) {
1058 if (slotw && PyType_IsSubtype(w->ob_type, v->ob_type)) {
1059 x = slotw(v, w, z);
1060 if (x != Py_NotImplemented)
1061 return x;
1062 Py_DECREF(x); /* can't do it */
1063 slotw = NULL;
1064 }
1065 x = slotv(v, w, z);
1066 if (x != Py_NotImplemented)
1067 return x;
1068 Py_DECREF(x); /* can't do it */
1069 }
1070 if (slotw) {
1071 x = slotw(v, w, z);
1072 if (x != Py_NotImplemented)
1073 return x;
1074 Py_DECREF(x); /* can't do it */
1075 }
1076 mz = z->ob_type->tp_as_number;
1077 if (mz != NULL && NEW_STYLE_NUMBER(z)) {
1078 slotz = NB_TERNOP(mz, op_slot);
1079 if (slotz == slotv || slotz == slotw)
1080 slotz = NULL;
1081 if (slotz) {
1082 x = slotz(v, w, z);
1083 if (x != Py_NotImplemented)
1084 return x;
1085 Py_DECREF(x); /* can't do it */
1086 }
1087 }
1088
1089 if (!NEW_STYLE_NUMBER(v) || !NEW_STYLE_NUMBER(w) ||
1090 (z != Py_None && !NEW_STYLE_NUMBER(z))) {
1091 /* we have an old style operand, coerce */
1092 PyObject *v1, *z1, *w2, *z2;
1093 int c;
1094
1095 c = PyNumber_Coerce(&v, &w);
1096 if (c != 0)
1097 goto error3;
1098
1099 /* Special case: if the third argument is None, it is
1100 treated as absent argument and not coerced. */
1101 if (z == Py_None) {
1102 if (v->ob_type->tp_as_number) {
1103 slotz = NB_TERNOP(v->ob_type->tp_as_number,
1104 op_slot);
1105 if (slotz)
1106 x = slotz(v, w, z);
1107 else
1108 c = -1;
1109 }
1110 else
1111 c = -1;
1112 goto error2;
1113 }
1114 v1 = v;
1115 z1 = z;
1116 c = PyNumber_Coerce(&v1, &z1);
1117 if (c != 0)
1118 goto error2;
1119 w2 = w;
1120 z2 = z1;
1121 c = PyNumber_Coerce(&w2, &z2);
1122 if (c != 0)
1123 goto error1;
1124
1125 if (v1->ob_type->tp_as_number != NULL) {
1126 slotv = NB_TERNOP(v1->ob_type->tp_as_number,
1127 op_slot);
1128 if (slotv)
1129 x = slotv(v1, w2, z2);
1130 else
1131 c = -1;
1132 }
1133 else
1134 c = -1;
1135
1136 Py_DECREF(w2);
1137 Py_DECREF(z2);
1138 error1:
1139 Py_DECREF(v1);
1140 Py_DECREF(z1);
1141 error2:
1142 Py_DECREF(v);
1143 Py_DECREF(w);
1144 error3:
1145 if (c >= 0)
1146 return x;
1147 }
1148
1149 if (z == Py_None)
1150 PyErr_Format(
1151 PyExc_TypeError,
1152 "unsupported operand type(s) for ** or pow(): "
1153 "'%.100s' and '%.100s'",
1154 v->ob_type->tp_name,
1155 w->ob_type->tp_name);
1156 else
1157 PyErr_Format(
1158 PyExc_TypeError,
1159 "unsupported operand type(s) for pow(): "
1160 "'%.100s', '%.100s', '%.100s'",
1161 v->ob_type->tp_name,
1162 w->ob_type->tp_name,
1163 z->ob_type->tp_name);
1164 return NULL;
1165 }
1166
1167 #define BINARY_FUNC(func, op, op_name) \
1168 PyObject * \
1169 func(PyObject *v, PyObject *w) { \
1170 return binary_op(v, w, NB_SLOT(op), op_name); \
1171 }
1172
1173 BINARY_FUNC(PyNumber_Or, nb_or, "|")
1174 BINARY_FUNC(PyNumber_Xor, nb_xor, "^")
1175 BINARY_FUNC(PyNumber_And, nb_and, "&")
1176 BINARY_FUNC(PyNumber_Lshift, nb_lshift, "<<")
1177 BINARY_FUNC(PyNumber_Rshift, nb_rshift, ">>")
1178 BINARY_FUNC(PyNumber_Subtract, nb_subtract, "-")
1179 BINARY_FUNC(PyNumber_Divide, nb_divide, "/")
1180 BINARY_FUNC(PyNumber_Divmod, nb_divmod, "divmod()")
1181
1182 PyObject *
1183 PyNumber_Add(PyObject *v, PyObject *w)
1184 {
1185 PyObject *result = binary_op1(v, w, NB_SLOT(nb_add));
1186 if (result == Py_NotImplemented) {
1187 PySequenceMethods *m = v->ob_type->tp_as_sequence;
1188 Py_DECREF(result);
1189 if (m && m->sq_concat) {
1190 return (*m->sq_concat)(v, w);
1191 }
1192 result = binop_type_error(v, w, "+");
1193 }
1194 return result;
1195 }
1196
1197 static PyObject *
1198 sequence_repeat(ssizeargfunc repeatfunc, PyObject *seq, PyObject *n)
1199 {
1200 Py_ssize_t count;
1201 if (PyIndex_Check(n)) {
1202 count = PyNumber_AsSsize_t(n, PyExc_OverflowError);
1203 if (count == -1 && PyErr_Occurred())
1204 return NULL;
1205 }
1206 else {
1207 return type_error("can't multiply sequence by "
1208 "non-int of type '%.200s'", n);
1209 }
1210 return (*repeatfunc)(seq, count);
1211 }
1212
1213 PyObject *
1214 PyNumber_Multiply(PyObject *v, PyObject *w)
1215 {
1216 PyObject *result = binary_op1(v, w, NB_SLOT(nb_multiply));
1217 if (result == Py_NotImplemented) {
1218 PySequenceMethods *mv = v->ob_type->tp_as_sequence;
1219 PySequenceMethods *mw = w->ob_type->tp_as_sequence;
1220 Py_DECREF(result);
1221 if (mv && mv->sq_repeat) {
1222 return sequence_repeat(mv->sq_repeat, v, w);
1223 }
1224 else if (mw && mw->sq_repeat) {
1225 return sequence_repeat(mw->sq_repeat, w, v);
1226 }
1227 result = binop_type_error(v, w, "*");
1228 }
1229 return result;
1230 }
1231
1232 PyObject *
1233 PyNumber_FloorDivide(PyObject *v, PyObject *w)
1234 {
1235 /* XXX tp_flags test */
1236 return binary_op(v, w, NB_SLOT(nb_floor_divide), "//");
1237 }
1238
1239 PyObject *
1240 PyNumber_TrueDivide(PyObject *v, PyObject *w)
1241 {
1242 /* XXX tp_flags test */
1243 return binary_op(v, w, NB_SLOT(nb_true_divide), "/");
1244 }
1245
1246 PyObject *
1247 PyNumber_Remainder(PyObject *v, PyObject *w)
1248 {
1249 return binary_op(v, w, NB_SLOT(nb_remainder), "%");
1250 }
1251
1252 PyObject *
1253 PyNumber_Power(PyObject *v, PyObject *w, PyObject *z)
1254 {
1255 return ternary_op(v, w, z, NB_SLOT(nb_power), "** or pow()");
1256 }
1257
1258 /* Binary in-place operators */
1259
1260 /* The in-place operators are defined to fall back to the 'normal',
1261 non in-place operations, if the in-place methods are not in place.
1262
1263 - If the left hand object has the appropriate struct members, and
1264 they are filled, call the appropriate function and return the
1265 result. No coercion is done on the arguments; the left-hand object
1266 is the one the operation is performed on, and it's up to the
1267 function to deal with the right-hand object.
1268
1269 - Otherwise, in-place modification is not supported. Handle it exactly as
1270 a non in-place operation of the same kind.
1271
1272 */
1273
1274 #define HASINPLACE(t) \
1275 PyType_HasFeature((t)->ob_type, Py_TPFLAGS_HAVE_INPLACEOPS)
1276
1277 static PyObject *
1278 binary_iop1(PyObject *v, PyObject *w, const int iop_slot, const int op_slot)
1279 {
1280 PyNumberMethods *mv = v->ob_type->tp_as_number;
1281 if (mv != NULL && HASINPLACE(v)) {
1282 binaryfunc slot = NB_BINOP(mv, iop_slot);
1283 if (slot) {
1284 PyObject *x = (slot)(v, w);
1285 if (x != Py_NotImplemented) {
1286 return x;
1287 }
1288 Py_DECREF(x);
1289 }
1290 }
1291 return binary_op1(v, w, op_slot);
1292 }
1293
1294 static PyObject *
1295 binary_iop(PyObject *v, PyObject *w, const int iop_slot, const int op_slot,
1296 const char *op_name)
1297 {
1298 PyObject *result = binary_iop1(v, w, iop_slot, op_slot);
1299 if (result == Py_NotImplemented) {
1300 Py_DECREF(result);
1301 return binop_type_error(v, w, op_name);
1302 }
1303 return result;
1304 }
1305
1306 #define INPLACE_BINOP(func, iop, op, op_name) \
1307 PyObject * \
1308 func(PyObject *v, PyObject *w) { \
1309 return binary_iop(v, w, NB_SLOT(iop), NB_SLOT(op), op_name); \
1310 }
1311
1312 INPLACE_BINOP(PyNumber_InPlaceOr, nb_inplace_or, nb_or, "|=")
1313 INPLACE_BINOP(PyNumber_InPlaceXor, nb_inplace_xor, nb_xor, "^=")
1314 INPLACE_BINOP(PyNumber_InPlaceAnd, nb_inplace_and, nb_and, "&=")
1315 INPLACE_BINOP(PyNumber_InPlaceLshift, nb_inplace_lshift, nb_lshift, "<<=")
1316 INPLACE_BINOP(PyNumber_InPlaceRshift, nb_inplace_rshift, nb_rshift, ">>=")
1317 INPLACE_BINOP(PyNumber_InPlaceSubtract, nb_inplace_subtract, nb_subtract, "-=")
1318 INPLACE_BINOP(PyNumber_InPlaceDivide, nb_inplace_divide, nb_divide, "/=")
1319
1320 PyObject *
1321 PyNumber_InPlaceFloorDivide(PyObject *v, PyObject *w)
1322 {
1323 /* XXX tp_flags test */
1324 return binary_iop(v, w, NB_SLOT(nb_inplace_floor_divide),
1325 NB_SLOT(nb_floor_divide), "//=");
1326 }
1327
1328 PyObject *
1329 PyNumber_InPlaceTrueDivide(PyObject *v, PyObject *w)
1330 {
1331 /* XXX tp_flags test */
1332 return binary_iop(v, w, NB_SLOT(nb_inplace_true_divide),
1333 NB_SLOT(nb_true_divide), "/=");
1334 }
1335
1336 PyObject *
1337 PyNumber_InPlaceAdd(PyObject *v, PyObject *w)
1338 {
1339 PyObject *result = binary_iop1(v, w, NB_SLOT(nb_inplace_add),
1340 NB_SLOT(nb_add));
1341 if (result == Py_NotImplemented) {
1342 PySequenceMethods *m = v->ob_type->tp_as_sequence;
1343 Py_DECREF(result);
1344 if (m != NULL) {
1345 binaryfunc f = NULL;
1346 if (HASINPLACE(v))
1347 f = m->sq_inplace_concat;
1348 if (f == NULL)
1349 f = m->sq_concat;
1350 if (f != NULL)
1351 return (*f)(v, w);
1352 }
1353 result = binop_type_error(v, w, "+=");
1354 }
1355 return result;
1356 }
1357
1358 PyObject *
1359 PyNumber_InPlaceMultiply(PyObject *v, PyObject *w)
1360 {
1361 PyObject *result = binary_iop1(v, w, NB_SLOT(nb_inplace_multiply),
1362 NB_SLOT(nb_multiply));
1363 if (result == Py_NotImplemented) {
1364 ssizeargfunc f = NULL;
1365 PySequenceMethods *mv = v->ob_type->tp_as_sequence;
1366 PySequenceMethods *mw = w->ob_type->tp_as_sequence;
1367 Py_DECREF(result);
1368 if (mv != NULL) {
1369 if (HASINPLACE(v))
1370 f = mv->sq_inplace_repeat;
1371 if (f == NULL)
1372 f = mv->sq_repeat;
1373 if (f != NULL)
1374 return sequence_repeat(f, v, w);
1375 }
1376 else if (mw != NULL) {
1377 /* Note that the right hand operand should not be
1378 * mutated in this case so sq_inplace_repeat is not
1379 * used. */
1380 if (mw->sq_repeat)
1381 return sequence_repeat(mw->sq_repeat, w, v);
1382 }
1383 result = binop_type_error(v, w, "*=");
1384 }
1385 return result;
1386 }
1387
1388 PyObject *
1389 PyNumber_InPlaceRemainder(PyObject *v, PyObject *w)
1390 {
1391 return binary_iop(v, w, NB_SLOT(nb_inplace_remainder),
1392 NB_SLOT(nb_remainder), "%=");
1393 }
1394
1395 PyObject *
1396 PyNumber_InPlacePower(PyObject *v, PyObject *w, PyObject *z)
1397 {
1398 if (HASINPLACE(v) && v->ob_type->tp_as_number &&
1399 v->ob_type->tp_as_number->nb_inplace_power != NULL) {
1400 return ternary_op(v, w, z, NB_SLOT(nb_inplace_power), "**=");
1401 }
1402 else {
1403 return ternary_op(v, w, z, NB_SLOT(nb_power), "**=");
1404 }
1405 }
1406
1407
1408 /* Unary operators and functions */
1409
1410 PyObject *
1411 PyNumber_Negative(PyObject *o)
1412 {
1413 PyNumberMethods *m;
1414
1415 if (o == NULL)
1416 return null_error();
1417 m = o->ob_type->tp_as_number;
1418 if (m && m->nb_negative)
1419 return (*m->nb_negative)(o);
1420
1421 return type_error("bad operand type for unary -: '%.200s'", o);
1422 }
1423
1424 PyObject *
1425 PyNumber_Positive(PyObject *o)
1426 {
1427 PyNumberMethods *m;
1428
1429 if (o == NULL)
1430 return null_error();
1431 m = o->ob_type->tp_as_number;
1432 if (m && m->nb_positive)
1433 return (*m->nb_positive)(o);
1434
1435 return type_error("bad operand type for unary +: '%.200s'", o);
1436 }
1437
1438 PyObject *
1439 PyNumber_Invert(PyObject *o)
1440 {
1441 PyNumberMethods *m;
1442
1443 if (o == NULL)
1444 return null_error();
1445 m = o->ob_type->tp_as_number;
1446 if (m && m->nb_invert)
1447 return (*m->nb_invert)(o);
1448
1449 return type_error("bad operand type for unary ~: '%.200s'", o);
1450 }
1451
1452 PyObject *
1453 PyNumber_Absolute(PyObject *o)
1454 {
1455 PyNumberMethods *m;
1456
1457 if (o == NULL)
1458 return null_error();
1459 m = o->ob_type->tp_as_number;
1460 if (m && m->nb_absolute)
1461 return m->nb_absolute(o);
1462
1463 return type_error("bad operand type for abs(): '%.200s'", o);
1464 }
1465
1466 /* Add a check for embedded NULL-bytes in the argument. */
1467 static PyObject *
1468 int_from_string(const char *s, Py_ssize_t len)
1469 {
1470 char *end;
1471 PyObject *x;
1472
1473 x = PyInt_FromString((char*)s, &end, 10);
1474 if (x == NULL)
1475 return NULL;
1476 if (end != s + len) {
1477 PyErr_SetString(PyExc_ValueError,
1478 "null byte in argument for int()");
1479 Py_DECREF(x);
1480 return NULL;
1481 }
1482 return x;
1483 }
1484
1485 /* Return a Python Int or Long from the object item
1486 Raise TypeError if the result is not an int-or-long
1487 or if the object cannot be interpreted as an index.
1488 */
1489 PyObject *
1490 PyNumber_Index(PyObject *item)
1491 {
1492 PyObject *result = NULL;
1493 if (item == NULL)
1494 return null_error();
1495 if (PyInt_Check(item) || PyLong_Check(item)) {
1496 Py_INCREF(item);
1497 return item;
1498 }
1499 if (PyIndex_Check(item)) {
1500 result = item->ob_type->tp_as_number->nb_index(item);
1501 if (result &&
1502 !PyInt_Check(result) && !PyLong_Check(result)) {
1503 PyErr_Format(PyExc_TypeError,
1504 "__index__ returned non-(int,long) " \
1505 "(type %.200s)",
1506 result->ob_type->tp_name);
1507 Py_DECREF(result);
1508 return NULL;
1509 }
1510 }
1511 else {
1512 PyErr_Format(PyExc_TypeError,
1513 "'%.200s' object cannot be interpreted "
1514 "as an index", item->ob_type->tp_name);
1515 }
1516 return result;
1517 }
1518
1519 /* Return an error on Overflow only if err is not NULL*/
1520
1521 Py_ssize_t
1522 PyNumber_AsSsize_t(PyObject *item, PyObject *err)
1523 {
1524 Py_ssize_t result;
1525 PyObject *runerr;
1526 PyObject *value = PyNumber_Index(item);
1527 if (value == NULL)
1528 return -1;
1529
1530 /* We're done if PyInt_AsSsize_t() returns without error. */
1531 result = PyInt_AsSsize_t(value);
1532 if (result != -1 || !(runerr = PyErr_Occurred()))
1533 goto finish;
1534
1535 /* Error handling code -- only manage OverflowError differently */
1536 if (!PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError))
1537 goto finish;
1538
1539 PyErr_Clear();
1540 /* If no error-handling desired then the default clipping
1541 is sufficient.
1542 */
1543 if (!err) {
1544 assert(PyLong_Check(value));
1545 /* Whether or not it is less than or equal to
1546 zero is determined by the sign of ob_size
1547 */
1548 if (_PyLong_Sign(value) < 0)
1549 result = PY_SSIZE_T_MIN;
1550 else
1551 result = PY_SSIZE_T_MAX;
1552 }
1553 else {
1554 /* Otherwise replace the error with caller's error object. */
1555 PyErr_Format(err,
1556 "cannot fit '%.200s' into an index-sized integer",
1557 item->ob_type->tp_name);
1558 }
1559
1560 finish:
1561 Py_DECREF(value);
1562 return result;
1563 }
1564
1565
1566 PyObject *
1567 _PyNumber_ConvertIntegralToInt(PyObject *integral, const char* error_format)
1568 {
1569 const char *type_name;
1570 static PyObject *int_name = NULL;
1571 if (int_name == NULL) {
1572 int_name = PyString_InternFromString("__int__");
1573 if (int_name == NULL)
1574 return NULL;
1575 }
1576
1577 if (integral && (!PyInt_Check(integral) &&
1578 !PyLong_Check(integral))) {
1579 /* Don't go through tp_as_number->nb_int to avoid
1580 hitting the classic class fallback to __trunc__. */
1581 PyObject *int_func = PyObject_GetAttr(integral, int_name);
1582 if (int_func == NULL) {
1583 PyErr_Clear(); /* Raise a different error. */
1584 goto non_integral_error;
1585 }
1586 Py_DECREF(integral);
1587 integral = PyEval_CallObject(int_func, NULL);
1588 Py_DECREF(int_func);
1589 if (integral && (!PyInt_Check(integral) &&
1590 !PyLong_Check(integral))) {
1591 goto non_integral_error;
1592 }
1593 }
1594 return integral;
1595
1596 non_integral_error:
1597 if (PyInstance_Check(integral)) {
1598 type_name = PyString_AS_STRING(((PyInstanceObject *)integral)
1599 ->in_class->cl_name);
1600 }
1601 else {
1602 type_name = integral->ob_type->tp_name;
1603 }
1604 PyErr_Format(PyExc_TypeError, error_format, type_name);
1605 Py_DECREF(integral);
1606 return NULL;
1607 }
1608
1609
1610 PyObject *
1611 PyNumber_Int(PyObject *o)
1612 {
1613 PyNumberMethods *m;
1614 static PyObject *trunc_name = NULL;
1615 PyObject *trunc_func;
1616 const char *buffer;
1617 Py_ssize_t buffer_len;
1618
1619 if (trunc_name == NULL) {
1620 trunc_name = PyString_InternFromString("__trunc__");
1621 if (trunc_name == NULL)
1622 return NULL;
1623 }
1624
1625 if (o == NULL)
1626 return null_error();
1627 if (PyInt_CheckExact(o)) {
1628 Py_INCREF(o);
1629 return o;
1630 }
1631 m = o->ob_type->tp_as_number;
1632 if (m && m->nb_int) { /* This should include subclasses of int */
1633 /* Classic classes always take this branch. */
1634 PyObject *res = m->nb_int(o);
1635 if (res && (!PyInt_Check(res) && !PyLong_Check(res))) {
1636 PyErr_Format(PyExc_TypeError,
1637 "__int__ returned non-int (type %.200s)",
1638 res->ob_type->tp_name);
1639 Py_DECREF(res);
1640 return NULL;
1641 }
1642 return res;
1643 }
1644 if (PyInt_Check(o)) { /* An int subclass without nb_int */
1645 PyIntObject *io = (PyIntObject*)o;
1646 return PyInt_FromLong(io->ob_ival);
1647 }
1648 trunc_func = PyObject_GetAttr(o, trunc_name);
1649 if (trunc_func) {
1650 PyObject *truncated = PyEval_CallObject(trunc_func, NULL);
1651 Py_DECREF(trunc_func);
1652 /* __trunc__ is specified to return an Integral type, but
1653 int() needs to return an int. */
1654 return _PyNumber_ConvertIntegralToInt(
1655 truncated,
1656 "__trunc__ returned non-Integral (type %.200s)");
1657 }
1658 PyErr_Clear(); /* It's not an error if o.__trunc__ doesn't exist. */
1659
1660 if (PyString_Check(o))
1661 return int_from_string(PyString_AS_STRING(o),
1662 PyString_GET_SIZE(o));
1663 #ifdef Py_USING_UNICODE
1664 if (PyUnicode_Check(o))
1665 return PyInt_FromUnicode(PyUnicode_AS_UNICODE(o),
1666 PyUnicode_GET_SIZE(o),
1667 10);
1668 #endif
1669 if (!PyObject_AsCharBuffer(o, &buffer, &buffer_len)) {
1670 PyObject *result, *str;
1671
1672 /* Copy to NUL-terminated buffer. */
1673 str = PyString_FromStringAndSize((const char *)buffer, buffer_len);
1674 if (str == NULL)
1675 return NULL;
1676 result = int_from_string(PyString_AS_STRING(str), buffer_len);
1677 Py_DECREF(str);
1678 return result;
1679 }
1680
1681 return type_error("int() argument must be a string or a "
1682 "number, not '%.200s'", o);
1683 }
1684
1685 /* Add a check for embedded NULL-bytes in the argument. */
1686 static PyObject *
1687 long_from_string(const char *s, Py_ssize_t len)
1688 {
1689 char *end;
1690 PyObject *x;
1691
1692 x = PyLong_FromString((char*)s, &end, 10);
1693 if (x == NULL)
1694 return NULL;
1695 if (end != s + len) {
1696 PyErr_SetString(PyExc_ValueError,
1697 "null byte in argument for long()");
1698 Py_DECREF(x);
1699 return NULL;
1700 }
1701 return x;
1702 }
1703
1704 PyObject *
1705 PyNumber_Long(PyObject *o)
1706 {
1707 PyNumberMethods *m;
1708 static PyObject *trunc_name = NULL;
1709 PyObject *trunc_func;
1710 const char *buffer;
1711 Py_ssize_t buffer_len;
1712
1713 if (trunc_name == NULL) {
1714 trunc_name = PyString_InternFromString("__trunc__");
1715 if (trunc_name == NULL)
1716 return NULL;
1717 }
1718
1719 if (o == NULL)
1720 return null_error();
1721 m = o->ob_type->tp_as_number;
1722 if (m && m->nb_long) { /* This should include subclasses of long */
1723 /* Classic classes always take this branch. */
1724 PyObject *res = m->nb_long(o);
1725 if (res == NULL)
1726 return NULL;
1727 if (PyInt_Check(res)) {
1728 long value = PyInt_AS_LONG(res);
1729 Py_DECREF(res);
1730 return PyLong_FromLong(value);
1731 }
1732 else if (!PyLong_Check(res)) {
1733 PyErr_Format(PyExc_TypeError,
1734 "__long__ returned non-long (type %.200s)",
1735 res->ob_type->tp_name);
1736 Py_DECREF(res);
1737 return NULL;
1738 }
1739 return res;
1740 }
1741 if (PyLong_Check(o)) /* A long subclass without nb_long */
1742 return _PyLong_Copy((PyLongObject *)o);
1743 trunc_func = PyObject_GetAttr(o, trunc_name);
1744 if (trunc_func) {
1745 PyObject *truncated = PyEval_CallObject(trunc_func, NULL);
1746 PyObject *int_instance;
1747 Py_DECREF(trunc_func);
1748 /* __trunc__ is specified to return an Integral type,
1749 but long() needs to return a long. */
1750 int_instance = _PyNumber_ConvertIntegralToInt(
1751 truncated,
1752 "__trunc__ returned non-Integral (type %.200s)");
1753 if (int_instance && PyInt_Check(int_instance)) {
1754 /* Make sure that long() returns a long instance. */
1755 long value = PyInt_AS_LONG(int_instance);
1756 Py_DECREF(int_instance);
1757 return PyLong_FromLong(value);
1758 }
1759 return int_instance;
1760 }
1761 PyErr_Clear(); /* It's not an error if o.__trunc__ doesn't exist. */
1762
1763 if (PyString_Check(o))
1764 /* need to do extra error checking that PyLong_FromString()
1765 * doesn't do. In particular long('9.5') must raise an
1766 * exception, not truncate the float.
1767 */
1768 return long_from_string(PyString_AS_STRING(o),
1769 PyString_GET_SIZE(o));
1770 #ifdef Py_USING_UNICODE
1771 if (PyUnicode_Check(o))
1772 /* The above check is done in PyLong_FromUnicode(). */
1773 return PyLong_FromUnicode(PyUnicode_AS_UNICODE(o),
1774 PyUnicode_GET_SIZE(o),
1775 10);
1776 #endif
1777 if (!PyObject_AsCharBuffer(o, &buffer, &buffer_len)) {
1778 PyObject *result, *str;
1779
1780 /* Copy to NUL-terminated buffer. */
1781 str = PyString_FromStringAndSize((const char *)buffer, buffer_len);
1782 if (str == NULL)
1783 return NULL;
1784 result = long_from_string(PyString_AS_STRING(str), buffer_len);
1785 Py_DECREF(str);
1786 return result;
1787 }
1788 return type_error("long() argument must be a string or a "
1789 "number, not '%.200s'", o);
1790 }
1791
1792 PyObject *
1793 PyNumber_Float(PyObject *o)
1794 {
1795 PyNumberMethods *m;
1796
1797 if (o == NULL)
1798 return null_error();
1799 m = o->ob_type->tp_as_number;
1800 if (m && m->nb_float) { /* This should include subclasses of float */
1801 PyObject *res = m->nb_float(o);
1802 if (res && !PyFloat_Check(res)) {
1803 PyErr_Format(PyExc_TypeError,
1804 "__float__ returned non-float (type %.200s)",
1805 res->ob_type->tp_name);
1806 Py_DECREF(res);
1807 return NULL;
1808 }
1809 return res;
1810 }
1811 if (PyFloat_Check(o)) { /* A float subclass with nb_float == NULL */
1812 PyFloatObject *po = (PyFloatObject *)o;
1813 return PyFloat_FromDouble(po->ob_fval);
1814 }
1815 return PyFloat_FromString(o, NULL);
1816 }
1817
1818 PyObject *
1819 PyNumber_ToBase(PyObject *n, int base)
1820 {
1821 PyObject *res = NULL;
1822 PyObject *index = PyNumber_Index(n);
1823
1824 if (!index)
1825 return NULL;
1826 if (PyLong_Check(index))
1827 res = _PyLong_Format(index, base, 0, 1);
1828 else if (PyInt_Check(index))
1829 res = _PyInt_Format((PyIntObject*)index, base, 1);
1830 else
1831 /* It should not be possible to get here, as
1832 PyNumber_Index already has a check for the same
1833 condition */
1834 PyErr_SetString(PyExc_ValueError, "PyNumber_ToBase: index not "
1835 "int or long");
1836 Py_DECREF(index);
1837 return res;
1838 }
1839
1840
1841 /* Operations on sequences */
1842
1843 int
1844 PySequence_Check(PyObject *s)
1845 {
1846 if (s == NULL)
1847 return 0;
1848 if (PyInstance_Check(s))
1849 return PyObject_HasAttrString(s, "__getitem__");
1850 if (PyDict_Check(s))
1851 return 0;
1852 return s->ob_type->tp_as_sequence &&
1853 s->ob_type->tp_as_sequence->sq_item != NULL;
1854 }
1855
1856 Py_ssize_t
1857 PySequence_Size(PyObject *s)
1858 {
1859 PySequenceMethods *m;
1860
1861 if (s == NULL) {
1862 null_error();
1863 return -1;
1864 }
1865
1866 m = s->ob_type->tp_as_sequence;
1867 if (m && m->sq_length)
1868 return m->sq_length(s);
1869
1870 type_error("object of type '%.200s' has no len()", s);
1871 return -1;
1872 }
1873
1874 #undef PySequence_Length
1875 Py_ssize_t
1876 PySequence_Length(PyObject *s)
1877 {
1878 return PySequence_Size(s);
1879 }
1880 #define PySequence_Length PySequence_Size
1881
1882 PyObject *
1883 PySequence_Concat(PyObject *s, PyObject *o)
1884 {
1885 PySequenceMethods *m;
1886
1887 if (s == NULL || o == NULL)
1888 return null_error();
1889
1890 m = s->ob_type->tp_as_sequence;
1891 if (m && m->sq_concat)
1892 return m->sq_concat(s, o);
1893
1894 /* Instances of user classes defining an __add__() method only
1895 have an nb_add slot, not an sq_concat slot. So we fall back
1896 to nb_add if both arguments appear to be sequences. */
1897 if (PySequence_Check(s) && PySequence_Check(o)) {
1898 PyObject *result = binary_op1(s, o, NB_SLOT(nb_add));
1899 if (result != Py_NotImplemented)
1900 return result;
1901 Py_DECREF(result);
1902 }
1903 return type_error("'%.200s' object can't be concatenated", s);
1904 }
1905
1906 PyObject *
1907 PySequence_Repeat(PyObject *o, Py_ssize_t count)
1908 {
1909 PySequenceMethods *m;
1910
1911 if (o == NULL)
1912 return null_error();
1913
1914 m = o->ob_type->tp_as_sequence;
1915 if (m && m->sq_repeat)
1916 return m->sq_repeat(o, count);
1917
1918 /* Instances of user classes defining a __mul__() method only
1919 have an nb_multiply slot, not an sq_repeat slot. so we fall back
1920 to nb_multiply if o appears to be a sequence. */
1921 if (PySequence_Check(o)) {
1922 PyObject *n, *result;
1923 n = PyInt_FromSsize_t(count);
1924 if (n == NULL)
1925 return NULL;
1926 result = binary_op1(o, n, NB_SLOT(nb_multiply));
1927 Py_DECREF(n);
1928 if (result != Py_NotImplemented)
1929 return result;
1930 Py_DECREF(result);
1931 }
1932 return type_error("'%.200s' object can't be repeated", o);
1933 }
1934
1935 PyObject *
1936 PySequence_InPlaceConcat(PyObject *s, PyObject *o)
1937 {
1938 PySequenceMethods *m;
1939
1940 if (s == NULL || o == NULL)
1941 return null_error();
1942
1943 m = s->ob_type->tp_as_sequence;
1944 if (m && HASINPLACE(s) && m->sq_inplace_concat)
1945 return m->sq_inplace_concat(s, o);
1946 if (m && m->sq_concat)
1947 return m->sq_concat(s, o);
1948
1949 if (PySequence_Check(s) && PySequence_Check(o)) {
1950 PyObject *result = binary_iop1(s, o, NB_SLOT(nb_inplace_add),
1951 NB_SLOT(nb_add));
1952 if (result != Py_NotImplemented)
1953 return result;
1954 Py_DECREF(result);
1955 }
1956 return type_error("'%.200s' object can't be concatenated", s);
1957 }
1958
1959 PyObject *
1960 PySequence_InPlaceRepeat(PyObject *o, Py_ssize_t count)
1961 {
1962 PySequenceMethods *m;
1963
1964 if (o == NULL)
1965 return null_error();
1966
1967 m = o->ob_type->tp_as_sequence;
1968 if (m && HASINPLACE(o) && m->sq_inplace_repeat)
1969 return m->sq_inplace_repeat(o, count);
1970 if (m && m->sq_repeat)
1971 return m->sq_repeat(o, count);
1972
1973 if (PySequence_Check(o)) {
1974 PyObject *n, *result;
1975 n = PyInt_FromSsize_t(count);
1976 if (n == NULL)
1977 return NULL;
1978 result = binary_iop1(o, n, NB_SLOT(nb_inplace_multiply),
1979 NB_SLOT(nb_multiply));
1980 Py_DECREF(n);
1981 if (result != Py_NotImplemented)
1982 return result;
1983 Py_DECREF(result);
1984 }
1985 return type_error("'%.200s' object can't be repeated", o);
1986 }
1987
1988 PyObject *
1989 PySequence_GetItem(PyObject *s, Py_ssize_t i)
1990 {
1991 PySequenceMethods *m;
1992
1993 if (s == NULL)
1994 return null_error();
1995
1996 m = s->ob_type->tp_as_sequence;
1997 if (m && m->sq_item) {
1998 if (i < 0) {
1999 if (m->sq_length) {
2000 Py_ssize_t l = (*m->sq_length)(s);
2001 if (l < 0)
2002 return NULL;
2003 i += l;
2004 }
2005 }
2006 return m->sq_item(s, i);
2007 }
2008
2009 return type_error("'%.200s' object does not support indexing", s);
2010 }
2011
2012 PyObject *
2013 PySequence_GetSlice(PyObject *s, Py_ssize_t i1, Py_ssize_t i2)
2014 {
2015 PySequenceMethods *m;
2016 PyMappingMethods *mp;
2017
2018 if (!s) return null_error();
2019
2020 m = s->ob_type->tp_as_sequence;
2021 if (m && m->sq_slice) {
2022 if (i1 < 0 || i2 < 0) {
2023 if (m->sq_length) {
2024 Py_ssize_t l = (*m->sq_length)(s);
2025 if (l < 0)
2026 return NULL;
2027 if (i1 < 0)
2028 i1 += l;
2029 if (i2 < 0)
2030 i2 += l;
2031 }
2032 }
2033 return m->sq_slice(s, i1, i2);
2034 } else if ((mp = s->ob_type->tp_as_mapping) && mp->mp_subscript) {
2035 PyObject *res;
2036 PyObject *slice = _PySlice_FromIndices(i1, i2);
2037 if (!slice)
2038 return NULL;
2039 res = mp->mp_subscript(s, slice);
2040 Py_DECREF(slice);
2041 return res;
2042 }
2043
2044 return type_error("'%.200s' object is unsliceable", s);
2045 }
2046
2047 int
2048 PySequence_SetItem(PyObject *s, Py_ssize_t i, PyObject *o)
2049 {
2050 PySequenceMethods *m;
2051
2052 if (s == NULL) {
2053 null_error();
2054 return -1;
2055 }
2056
2057 m = s->ob_type->tp_as_sequence;
2058 if (m && m->sq_ass_item) {
2059 if (i < 0) {
2060 if (m->sq_length) {
2061 Py_ssize_t l = (*m->sq_length)(s);
2062 if (l < 0)
2063 return -1;
2064 i += l;
2065 }
2066 }
2067 return m->sq_ass_item(s, i, o);
2068 }
2069
2070 type_error("'%.200s' object does not support item assignment", s);
2071 return -1;
2072 }
2073
2074 int
2075 PySequence_DelItem(PyObject *s, Py_ssize_t i)
2076 {
2077 PySequenceMethods *m;
2078
2079 if (s == NULL) {
2080 null_error();
2081 return -1;
2082 }
2083
2084 m = s->ob_type->tp_as_sequence;
2085 if (m && m->sq_ass_item) {
2086 if (i < 0) {
2087 if (m->sq_length) {
2088 Py_ssize_t l = (*m->sq_length)(s);
2089 if (l < 0)
2090 return -1;
2091 i += l;
2092 }
2093 }
2094 return m->sq_ass_item(s, i, (PyObject *)NULL);
2095 }
2096
2097 type_error("'%.200s' object doesn't support item deletion", s);
2098 return -1;
2099 }
2100
2101 int
2102 PySequence_SetSlice(PyObject *s, Py_ssize_t i1, Py_ssize_t i2, PyObject *o)
2103 {
2104 PySequenceMethods *m;
2105 PyMappingMethods *mp;
2106
2107 if (s == NULL) {
2108 null_error();
2109 return -1;
2110 }
2111
2112 m = s->ob_type->tp_as_sequence;
2113 if (m && m->sq_ass_slice) {
2114 if (i1 < 0 || i2 < 0) {
2115 if (m->sq_length) {
2116 Py_ssize_t l = (*m->sq_length)(s);
2117 if (l < 0)
2118 return -1;
2119 if (i1 < 0)
2120 i1 += l;
2121 if (i2 < 0)
2122 i2 += l;
2123 }
2124 }
2125 return m->sq_ass_slice(s, i1, i2, o);
2126 } else if ((mp = s->ob_type->tp_as_mapping) && mp->mp_ass_subscript) {
2127 int res;
2128 PyObject *slice = _PySlice_FromIndices(i1, i2);
2129 if (!slice)
2130 return -1;
2131 res = mp->mp_ass_subscript(s, slice, o);
2132 Py_DECREF(slice);
2133 return res;
2134 }
2135
2136 type_error("'%.200s' object doesn't support slice assignment", s);
2137 return -1;
2138 }
2139
2140 int
2141 PySequence_DelSlice(PyObject *s, Py_ssize_t i1, Py_ssize_t i2)
2142 {
2143 PySequenceMethods *m;
2144
2145 if (s == NULL) {
2146 null_error();
2147 return -1;
2148 }
2149
2150 m = s->ob_type->tp_as_sequence;
2151 if (m && m->sq_ass_slice) {
2152 if (i1 < 0 || i2 < 0) {
2153 if (m->sq_length) {
2154 Py_ssize_t l = (*m->sq_length)(s);
2155 if (l < 0)
2156 return -1;
2157 if (i1 < 0)
2158 i1 += l;
2159 if (i2 < 0)
2160 i2 += l;
2161 }
2162 }
2163 return m->sq_ass_slice(s, i1, i2, (PyObject *)NULL);
2164 }
2165 type_error("'%.200s' object doesn't support slice deletion", s);
2166 return -1;
2167 }
2168
2169 PyObject *
2170 PySequence_Tuple(PyObject *v)
2171 {
2172 PyObject *it; /* iter(v) */
2173 Py_ssize_t n; /* guess for result tuple size */
2174 PyObject *result = NULL;
2175 Py_ssize_t j;
2176
2177 if (v == NULL)
2178 return null_error();
2179
2180 /* Special-case the common tuple and list cases, for efficiency. */
2181 if (PyTuple_CheckExact(v)) {
2182 /* Note that we can't know whether it's safe to return
2183 a tuple *subclass* instance as-is, hence the restriction
2184 to exact tuples here. In contrast, lists always make
2185 a copy, so there's no need for exactness below. */
2186 Py_INCREF(v);
2187 return v;
2188 }
2189 if (PyList_CheckExact(v))
2190 return PyList_AsTuple(v);
2191
2192 /* Get iterator. */
2193 it = PyObject_GetIter(v);
2194 if (it == NULL)
2195 return NULL;
2196
2197 /* Guess result size and allocate space. */
2198 n = _PyObject_LengthHint(v, 10);
2199 if (n == -1)
2200 goto Fail;
2201 result = PyTuple_New(n);
2202 if (result == NULL)
2203 goto Fail;
2204
2205 /* Fill the tuple. */
2206 for (j = 0; ; ++j) {
2207 PyObject *item = PyIter_Next(it);
2208 if (item == NULL) {
2209 if (PyErr_Occurred())
2210 goto Fail;
2211 break;
2212 }
2213 if (j >= n) {
2214 size_t newn = (size_t)n;
2215 /* The over-allocation strategy can grow a bit faster
2216 than for lists because unlike lists the
2217 over-allocation isn't permanent -- we reclaim
2218 the excess before the end of this routine.
2219 So, grow by ten and then add 25%.
2220 */
2221 newn += 10u;
2222 newn += newn >> 2;
2223 if (newn > PY_SSIZE_T_MAX) {
2224 /* Check for overflow */
2225 PyErr_NoMemory();
2226 Py_DECREF(item);
2227 goto Fail;
2228 }
2229 n = (Py_ssize_t)newn;
2230 if (_PyTuple_Resize(&result, n) != 0) {
2231 Py_DECREF(item);
2232 goto Fail;
2233 }
2234 }
2235 PyTuple_SET_ITEM(result, j, item);
2236 }
2237
2238 /* Cut tuple back if guess was too large. */
2239 if (j < n &&
2240 _PyTuple_Resize(&result, j) != 0)
2241 goto Fail;
2242
2243 Py_DECREF(it);
2244 return result;
2245
2246 Fail:
2247 Py_XDECREF(result);
2248 Py_DECREF(it);
2249 return NULL;
2250 }
2251
2252 PyObject *
2253 PySequence_List(PyObject *v)
2254 {
2255 PyObject *result; /* result list */
2256 PyObject *rv; /* return value from PyList_Extend */
2257
2258 if (v == NULL)
2259 return null_error();
2260
2261 result = PyList_New(0);
2262 if (result == NULL)
2263 return NULL;
2264
2265 rv = _PyList_Extend((PyListObject *)result, v);
2266 if (rv == NULL) {
2267 Py_DECREF(result);
2268 return NULL;
2269 }
2270 Py_DECREF(rv);
2271 return result;
2272 }
2273
2274 PyObject *
2275 PySequence_Fast(PyObject *v, const char *m)
2276 {
2277 PyObject *it;
2278
2279 if (v == NULL)
2280 return null_error();
2281
2282 if (PyList_CheckExact(v) || PyTuple_CheckExact(v)) {
2283 Py_INCREF(v);
2284 return v;
2285 }
2286
2287 it = PyObject_GetIter(v);
2288 if (it == NULL) {
2289 if (PyErr_ExceptionMatches(PyExc_TypeError))
2290 PyErr_SetString(PyExc_TypeError, m);
2291 return NULL;
2292 }
2293
2294 v = PySequence_List(it);
2295 Py_DECREF(it);
2296
2297 return v;
2298 }
2299
2300 /* Iterate over seq. Result depends on the operation:
2301 PY_ITERSEARCH_COUNT: -1 if error, else # of times obj appears in seq.
2302 PY_ITERSEARCH_INDEX: 0-based index of first occurrence of obj in seq;
2303 set ValueError and return -1 if none found; also return -1 on error.
2304 Py_ITERSEARCH_CONTAINS: return 1 if obj in seq, else 0; -1 on error.
2305 */
2306 Py_ssize_t
2307 _PySequence_IterSearch(PyObject *seq, PyObject *obj, int operation)
2308 {
2309 Py_ssize_t n;
2310 int wrapped; /* for PY_ITERSEARCH_INDEX, true iff n wrapped around */
2311 PyObject *it; /* iter(seq) */
2312
2313 if (seq == NULL || obj == NULL) {
2314 null_error();
2315 return -1;
2316 }
2317
2318 it = PyObject_GetIter(seq);
2319 if (it == NULL) {
2320 type_error("argument of type '%.200s' is not iterable", seq);
2321 return -1;
2322 }
2323
2324 n = wrapped = 0;
2325 for (;;) {
2326 int cmp;
2327 PyObject *item = PyIter_Next(it);
2328 if (item == NULL) {
2329 if (PyErr_Occurred())
2330 goto Fail;
2331 break;
2332 }
2333
2334 cmp = PyObject_RichCompareBool(obj, item, Py_EQ);
2335 Py_DECREF(item);
2336 if (cmp < 0)
2337 goto Fail;
2338 if (cmp > 0) {
2339 switch (operation) {
2340 case PY_ITERSEARCH_COUNT:
2341 if (n == PY_SSIZE_T_MAX) {
2342 PyErr_SetString(PyExc_OverflowError,
2343 "count exceeds C integer size");
2344 goto Fail;
2345 }
2346 ++n;
2347 break;
2348
2349 case PY_ITERSEARCH_INDEX:
2350 if (wrapped) {
2351 PyErr_SetString(PyExc_OverflowError,
2352 "index exceeds C integer size");
2353 goto Fail;
2354 }
2355 goto Done;
2356
2357 case PY_ITERSEARCH_CONTAINS:
2358 n = 1;
2359 goto Done;
2360
2361 default:
2362 assert(!"unknown operation");
2363 }
2364 }
2365
2366 if (operation == PY_ITERSEARCH_INDEX) {
2367 if (n == PY_SSIZE_T_MAX)
2368 wrapped = 1;
2369 ++n;
2370 }
2371 }
2372
2373 if (operation != PY_ITERSEARCH_INDEX)
2374 goto Done;
2375
2376 PyErr_SetString(PyExc_ValueError,
2377 "sequence.index(x): x not in sequence");
2378 /* fall into failure code */
2379 Fail:
2380 n = -1;
2381 /* fall through */
2382 Done:
2383 Py_DECREF(it);
2384 return n;
2385
2386 }
2387
2388 /* Return # of times o appears in s. */
2389 Py_ssize_t
2390 PySequence_Count(PyObject *s, PyObject *o)
2391 {
2392 return _PySequence_IterSearch(s, o, PY_ITERSEARCH_COUNT);
2393 }
2394
2395 /* Return -1 if error; 1 if ob in seq; 0 if ob not in seq.
2396 * Use sq_contains if possible, else defer to _PySequence_IterSearch().
2397 */
2398 int
2399 PySequence_Contains(PyObject *seq, PyObject *ob)
2400 {
2401 Py_ssize_t result;
2402 if (PyType_HasFeature(seq->ob_type, Py_TPFLAGS_HAVE_SEQUENCE_IN)) {
2403 PySequenceMethods *sqm = seq->ob_type->tp_as_sequence;
2404 if (sqm != NULL && sqm->sq_contains != NULL)
2405 return (*sqm->sq_contains)(seq, ob);
2406 }
2407 result = _PySequence_IterSearch(seq, ob, PY_ITERSEARCH_CONTAINS);
2408 return Py_SAFE_DOWNCAST(result, Py_ssize_t, int);
2409 }
2410
2411 /* Backwards compatibility */
2412 #undef PySequence_In
2413 int
2414 PySequence_In(PyObject *w, PyObject *v)
2415 {
2416 return PySequence_Contains(w, v);
2417 }
2418
2419 Py_ssize_t
2420 PySequence_Index(PyObject *s, PyObject *o)
2421 {
2422 return _PySequence_IterSearch(s, o, PY_ITERSEARCH_INDEX);
2423 }
2424
2425 /* Operations on mappings */
2426
2427 int
2428 PyMapping_Check(PyObject *o)
2429 {
2430 if (o && PyInstance_Check(o))
2431 return PyObject_HasAttrString(o, "__getitem__");
2432
2433 return o && o->ob_type->tp_as_mapping &&
2434 o->ob_type->tp_as_mapping->mp_subscript &&
2435 !(o->ob_type->tp_as_sequence &&
2436 o->ob_type->tp_as_sequence->sq_slice);
2437 }
2438
2439 Py_ssize_t
2440 PyMapping_Size(PyObject *o)
2441 {
2442 PyMappingMethods *m;
2443
2444 if (o == NULL) {
2445 null_error();
2446 return -1;
2447 }
2448
2449 m = o->ob_type->tp_as_mapping;
2450 if (m && m->mp_length)
2451 return m->mp_length(o);
2452
2453 type_error("object of type '%.200s' has no len()", o);
2454 return -1;
2455 }
2456
2457 #undef PyMapping_Length
2458 Py_ssize_t
2459 PyMapping_Length(PyObject *o)
2460 {
2461 return PyMapping_Size(o);
2462 }
2463 #define PyMapping_Length PyMapping_Size
2464
2465 PyObject *
2466 PyMapping_GetItemString(PyObject *o, char *key)
2467 {
2468 PyObject *okey, *r;
2469
2470 if (key == NULL)
2471 return null_error();
2472
2473 okey = PyString_FromString(key);
2474 if (okey == NULL)
2475 return NULL;
2476 r = PyObject_GetItem(o, okey);
2477 Py_DECREF(okey);
2478 return r;
2479 }
2480
2481 int
2482 PyMapping_SetItemString(PyObject *o, char *key, PyObject *value)
2483 {
2484 PyObject *okey;
2485 int r;
2486
2487 if (key == NULL) {
2488 null_error();
2489 return -1;
2490 }
2491
2492 okey = PyString_FromString(key);
2493 if (okey == NULL)
2494 return -1;
2495 r = PyObject_SetItem(o, okey, value);
2496 Py_DECREF(okey);
2497 return r;
2498 }
2499
2500 int
2501 PyMapping_HasKeyString(PyObject *o, char *key)
2502 {
2503 PyObject *v;
2504
2505 v = PyMapping_GetItemString(o, key);
2506 if (v) {
2507 Py_DECREF(v);
2508 return 1;
2509 }
2510 PyErr_Clear();
2511 return 0;
2512 }
2513
2514 int
2515 PyMapping_HasKey(PyObject *o, PyObject *key)
2516 {
2517 PyObject *v;
2518
2519 v = PyObject_GetItem(o, key);
2520 if (v) {
2521 Py_DECREF(v);
2522 return 1;
2523 }
2524 PyErr_Clear();
2525 return 0;
2526 }
2527
2528 /* Operations on callable objects */
2529
2530 /* XXX PyCallable_Check() is in object.c */
2531
2532 PyObject *
2533 PyObject_CallObject(PyObject *o, PyObject *a)
2534 {
2535 return PyEval_CallObjectWithKeywords(o, a, NULL);
2536 }
2537
2538 PyObject *
2539 PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw)
2540 {
2541 ternaryfunc call;
2542
2543 if ((call = func->ob_type->tp_call) != NULL) {
2544 PyObject *result;
2545 if (Py_EnterRecursiveCall(" while calling a Python object"))
2546 return NULL;
2547 result = (*call)(func, arg, kw);
2548 Py_LeaveRecursiveCall();
2549 if (result == NULL && !PyErr_Occurred())
2550 PyErr_SetString(
2551 PyExc_SystemError,
2552 "NULL result without error in PyObject_Call");
2553 return result;
2554 }
2555 PyErr_Format(PyExc_TypeError, "'%.200s' object is not callable",
2556 func->ob_type->tp_name);
2557 return NULL;
2558 }
2559
2560 static PyObject*
2561 call_function_tail(PyObject *callable, PyObject *args)
2562 {
2563 PyObject *retval;
2564
2565 if (args == NULL)
2566 return NULL;
2567
2568 if (!PyTuple_Check(args)) {
2569 PyObject *a;
2570
2571 a = PyTuple_New(1);
2572 if (a == NULL) {
2573 Py_DECREF(args);
2574 return NULL;
2575 }
2576 PyTuple_SET_ITEM(a, 0, args);
2577 args = a;
2578 }
2579 retval = PyObject_Call(callable, args, NULL);
2580
2581 Py_DECREF(args);
2582
2583 return retval;
2584 }
2585
2586 PyObject *
2587 PyObject_CallFunction(PyObject *callable, char *format, ...)
2588 {
2589 va_list va;
2590 PyObject *args;
2591
2592 if (callable == NULL)
2593 return null_error();
2594
2595 if (format && *format) {
2596 va_start(va, format);
2597 args = Py_VaBuildValue(format, va);
2598 va_end(va);
2599 }
2600 else
2601 args = PyTuple_New(0);
2602
2603 return call_function_tail(callable, args);
2604 }
2605
2606 PyObject *
2607 _PyObject_CallFunction_SizeT(PyObject *callable, char *format, ...)
2608 {
2609 va_list va;
2610 PyObject *args;
2611
2612 if (callable == NULL)
2613 return null_error();
2614
2615 if (format && *format) {
2616 va_start(va, format);
2617 args = _Py_VaBuildValue_SizeT(format, va);
2618 va_end(va);
2619 }
2620 else
2621 args = PyTuple_New(0);
2622
2623 return call_function_tail(callable, args);
2624 }
2625
2626 PyObject *
2627 PyObject_CallMethod(PyObject *o, char *name, char *format, ...)
2628 {
2629 va_list va;
2630 PyObject *args;
2631 PyObject *func = NULL;
2632 PyObject *retval = NULL;
2633
2634 if (o == NULL || name == NULL)
2635 return null_error();
2636
2637 func = PyObject_GetAttrString(o, name);
2638 if (func == NULL)
2639 return NULL;
2640
2641 if (!PyCallable_Check(func)) {
2642 type_error("attribute of type '%.200s' is not callable", func);
2643 goto exit;
2644 }
2645
2646 if (format && *format) {
2647 va_start(va, format);
2648 args = Py_VaBuildValue(format, va);
2649 va_end(va);
2650 }
2651 else
2652 args = PyTuple_New(0);
2653
2654 retval = call_function_tail(func, args);
2655
2656 exit:
2657 /* args gets consumed in call_function_tail */
2658 Py_XDECREF(func);
2659
2660 return retval;
2661 }
2662
2663 PyObject *
2664 _PyObject_CallMethod_SizeT(PyObject *o, char *name, char *format, ...)
2665 {
2666 va_list va;
2667 PyObject *args;
2668 PyObject *func = NULL;
2669 PyObject *retval = NULL;
2670
2671 if (o == NULL || name == NULL)
2672 return null_error();
2673
2674 func = PyObject_GetAttrString(o, name);
2675 if (func == NULL)
2676 return NULL;
2677
2678 if (!PyCallable_Check(func)) {
2679 type_error("attribute of type '%.200s' is not callable", func);
2680 goto exit;
2681 }
2682
2683 if (format && *format) {
2684 va_start(va, format);
2685 args = _Py_VaBuildValue_SizeT(format, va);
2686 va_end(va);
2687 }
2688 else
2689 args = PyTuple_New(0);
2690
2691 retval = call_function_tail(func, args);
2692
2693 exit:
2694 /* args gets consumed in call_function_tail */
2695 Py_XDECREF(func);
2696
2697 return retval;
2698 }
2699
2700
2701 static PyObject *
2702 objargs_mktuple(va_list va)
2703 {
2704 int i, n = 0;
2705 va_list countva;
2706 PyObject *result, *tmp;
2707
2708 #ifdef VA_LIST_IS_ARRAY
2709 memcpy(countva, va, sizeof(va_list));
2710 #else
2711 #ifdef __va_copy
2712 __va_copy(countva, va);
2713 #else
2714 countva = va;
2715 #endif
2716 #endif
2717
2718 while (((PyObject *)va_arg(countva, PyObject *)) != NULL)
2719 ++n;
2720 result = PyTuple_New(n);
2721 if (result != NULL && n > 0) {
2722 for (i = 0; i < n; ++i) {
2723 tmp = (PyObject *)va_arg(va, PyObject *);
2724 PyTuple_SET_ITEM(result, i, tmp);
2725 Py_INCREF(tmp);
2726 }
2727 }
2728 return result;
2729 }
2730
2731 PyObject *
2732 PyObject_CallMethodObjArgs(PyObject *callable, PyObject *name, ...)
2733 {
2734 PyObject *args, *tmp;
2735 va_list vargs;
2736
2737 if (callable == NULL || name == NULL)
2738 return null_error();
2739
2740 callable = PyObject_GetAttr(callable, name);
2741 if (callable == NULL)
2742 return NULL;
2743
2744 /* count the args */
2745 va_start(vargs, name);
2746 args = objargs_mktuple(vargs);
2747 va_end(vargs);
2748 if (args == NULL) {
2749 Py_DECREF(callable);
2750 return NULL;
2751 }
2752 tmp = PyObject_Call(callable, args, NULL);
2753 Py_DECREF(args);
2754 Py_DECREF(callable);
2755
2756 return tmp;
2757 }
2758
2759 PyObject *
2760 PyObject_CallFunctionObjArgs(PyObject *callable, ...)
2761 {
2762 PyObject *args, *tmp;
2763 va_list vargs;
2764
2765 if (callable == NULL)
2766 return null_error();
2767
2768 /* count the args */
2769 va_start(vargs, callable);
2770 args = objargs_mktuple(vargs);
2771 va_end(vargs);
2772 if (args == NULL)
2773 return NULL;
2774 tmp = PyObject_Call(callable, args, NULL);
2775 Py_DECREF(args);
2776
2777 return tmp;
2778 }
2779
2780
2781 /* isinstance(), issubclass() */
2782
2783 /* abstract_get_bases() has logically 4 return states, with a sort of 0th
2784 * state that will almost never happen.
2785 *
2786 * 0. creating the __bases__ static string could get a MemoryError
2787 * 1. getattr(cls, '__bases__') could raise an AttributeError
2788 * 2. getattr(cls, '__bases__') could raise some other exception
2789 * 3. getattr(cls, '__bases__') could return a tuple
2790 * 4. getattr(cls, '__bases__') could return something other than a tuple
2791 *
2792 * Only state #3 is a non-error state and only it returns a non-NULL object
2793 * (it returns the retrieved tuple).
2794 *
2795 * Any raised AttributeErrors are masked by clearing the exception and
2796 * returning NULL. If an object other than a tuple comes out of __bases__,
2797 * then again, the return value is NULL. So yes, these two situations
2798 * produce exactly the same results: NULL is returned and no error is set.
2799 *
2800 * If some exception other than AttributeError is raised, then NULL is also
2801 * returned, but the exception is not cleared. That's because we want the
2802 * exception to be propagated along.
2803 *
2804 * Callers are expected to test for PyErr_Occurred() when the return value
2805 * is NULL to decide whether a valid exception should be propagated or not.
2806 * When there's no exception to propagate, it's customary for the caller to
2807 * set a TypeError.
2808 */
2809 static PyObject *
2810 abstract_get_bases(PyObject *cls)
2811 {
2812 static PyObject *__bases__ = NULL;
2813 PyObject *bases;
2814
2815 if (__bases__ == NULL) {
2816 __bases__ = PyString_InternFromString("__bases__");
2817 if (__bases__ == NULL)
2818 return NULL;
2819 }
2820 bases = PyObject_GetAttr(cls, __bases__);
2821 if (bases == NULL) {
2822 if (PyErr_ExceptionMatches(PyExc_AttributeError))
2823 PyErr_Clear();
2824 return NULL;
2825 }
2826 if (!PyTuple_Check(bases)) {
2827 Py_DECREF(bases);
2828 return NULL;
2829 }
2830 return bases;
2831 }
2832
2833
2834 static int
2835 abstract_issubclass(PyObject *derived, PyObject *cls)
2836 {
2837 PyObject *bases = NULL;
2838 Py_ssize_t i, n;
2839 int r = 0;
2840
2841 while (1) {
2842 if (derived == cls)
2843 return 1;
2844 bases = abstract_get_bases(derived);
2845 if (bases == NULL) {
2846 if (PyErr_Occurred())
2847 return -1;
2848 return 0;
2849 }
2850 n = PyTuple_GET_SIZE(bases);
2851 if (n == 0) {
2852 Py_DECREF(bases);
2853 return 0;
2854 }
2855 /* Avoid recursivity in the single inheritance case */
2856 if (n == 1) {
2857 derived = PyTuple_GET_ITEM(bases, 0);
2858 Py_DECREF(bases);
2859 continue;
2860 }
2861 for (i = 0; i < n; i++) {
2862 r = abstract_issubclass(PyTuple_GET_ITEM(bases, i), cls);
2863 if (r != 0)
2864 break;
2865 }
2866 Py_DECREF(bases);
2867 return r;
2868 }
2869 }
2870
2871 static int
2872 check_class(PyObject *cls, const char *error)
2873 {
2874 PyObject *bases = abstract_get_bases(cls);
2875 if (bases == NULL) {
2876 /* Do not mask errors. */
2877 if (!PyErr_Occurred())
2878 PyErr_SetString(PyExc_TypeError, error);
2879 return 0;
2880 }
2881 Py_DECREF(bases);
2882 return -1;
2883 }
2884
2885 static int
2886 recursive_isinstance(PyObject *inst, PyObject *cls)
2887 {
2888 PyObject *icls;
2889 static PyObject *__class__ = NULL;
2890 int retval = 0;
2891
2892 if (__class__ == NULL) {
2893 __class__ = PyString_InternFromString("__class__");
2894 if (__class__ == NULL)
2895 return -1;
2896 }
2897
2898 if (PyClass_Check(cls) && PyInstance_Check(inst)) {
2899 PyObject *inclass =
2900 (PyObject*)((PyInstanceObject*)inst)->in_class;
2901 retval = PyClass_IsSubclass(inclass, cls);
2902 }
2903 else if (PyType_Check(cls)) {
2904 retval = PyObject_TypeCheck(inst, (PyTypeObject *)cls);
2905 if (retval == 0) {
2906 PyObject *c = PyObject_GetAttr(inst, __class__);
2907 if (c == NULL) {
2908 PyErr_Clear();
2909 }
2910 else {
2911 if (c != (PyObject *)(inst->ob_type) &&
2912 PyType_Check(c))
2913 retval = PyType_IsSubtype(
2914 (PyTypeObject *)c,
2915 (PyTypeObject *)cls);
2916 Py_DECREF(c);
2917 }
2918 }
2919 }
2920 else {
2921 if (!check_class(cls,
2922 "isinstance() arg 2 must be a class, type,"
2923 " or tuple of classes and types"))
2924 return -1;
2925 icls = PyObject_GetAttr(inst, __class__);
2926 if (icls == NULL) {
2927 PyErr_Clear();
2928 retval = 0;
2929 }
2930 else {
2931 retval = abstract_issubclass(icls, cls);
2932 Py_DECREF(icls);
2933 }
2934 }
2935
2936 return retval;
2937 }
2938
2939 int
2940 PyObject_IsInstance(PyObject *inst, PyObject *cls)
2941 {
2942 static PyObject *name = NULL;
2943
2944 /* Quick test for an exact match */
2945 if (Py_TYPE(inst) == (PyTypeObject *)cls)
2946 return 1;
2947
2948 if (PyTuple_Check(cls)) {
2949 Py_ssize_t i;
2950 Py_ssize_t n;
2951 int r = 0;
2952
2953 if (Py_EnterRecursiveCall(" in __instancecheck__"))
2954 return -1;
2955 n = PyTuple_GET_SIZE(cls);
2956 for (i = 0; i < n; ++i) {
2957 PyObject *item = PyTuple_GET_ITEM(cls, i);
2958 r = PyObject_IsInstance(inst, item);
2959 if (r != 0)
2960 /* either found it, or got an error */
2961 break;
2962 }
2963 Py_LeaveRecursiveCall();
2964 return r;
2965 }
2966
2967 if (!(PyClass_Check(cls) || PyInstance_Check(cls))) {
2968 PyObject *checker;
2969 checker = _PyObject_LookupSpecial(cls, "__instancecheck__", &name);
2970 if (checker != NULL) {
2971 PyObject *res;
2972 int ok = -1;
2973 if (Py_EnterRecursiveCall(" in __instancecheck__")) {
2974 Py_DECREF(checker);
2975 return ok;
2976 }
2977 res = PyObject_CallFunctionObjArgs(checker, inst, NULL);
2978 Py_LeaveRecursiveCall();
2979 Py_DECREF(checker);
2980 if (res != NULL) {
2981 ok = PyObject_IsTrue(res);
2982 Py_DECREF(res);
2983 }
2984 return ok;
2985 }
2986 else if (PyErr_Occurred())
2987 return -1;
2988 }
2989 return recursive_isinstance(inst, cls);
2990 }
2991
2992 static int
2993 recursive_issubclass(PyObject *derived, PyObject *cls)
2994 {
2995 int retval;
2996
2997 if (PyType_Check(cls) && PyType_Check(derived)) {
2998 /* Fast path (non-recursive) */
2999 return PyType_IsSubtype(
3000 (PyTypeObject *)derived, (PyTypeObject *)cls);
3001 }
3002 if (!PyClass_Check(derived) || !PyClass_Check(cls)) {
3003 if (!check_class(derived,
3004 "issubclass() arg 1 must be a class"))
3005 return -1;
3006
3007 if (!check_class(cls,
3008 "issubclass() arg 2 must be a class"
3009 " or tuple of classes"))
3010 return -1;
3011 retval = abstract_issubclass(derived, cls);
3012 }
3013 else {
3014 /* shortcut */
3015 if (!(retval = (derived == cls)))
3016 retval = PyClass_IsSubclass(derived, cls);
3017 }
3018
3019 return retval;
3020 }
3021
3022 int
3023 PyObject_IsSubclass(PyObject *derived, PyObject *cls)
3024 {
3025 static PyObject *name = NULL;
3026
3027 if (PyTuple_Check(cls)) {
3028 Py_ssize_t i;
3029 Py_ssize_t n;
3030 int r = 0;
3031
3032 if (Py_EnterRecursiveCall(" in __subclasscheck__"))
3033 return -1;
3034 n = PyTuple_GET_SIZE(cls);
3035 for (i = 0; i < n; ++i) {
3036 PyObject *item = PyTuple_GET_ITEM(cls, i);
3037 r = PyObject_IsSubclass(derived, item);
3038 if (r != 0)
3039 /* either found it, or got an error */
3040 break;
3041 }
3042 Py_LeaveRecursiveCall();
3043 return r;
3044 }
3045 if (!(PyClass_Check(cls) || PyInstance_Check(cls))) {
3046 PyObject *checker;
3047 checker = _PyObject_LookupSpecial(cls, "__subclasscheck__", &name);
3048 if (checker != NULL) {
3049 PyObject *res;
3050 int ok = -1;
3051 if (Py_EnterRecursiveCall(" in __subclasscheck__")) {
3052 Py_DECREF(checker);
3053 return ok;
3054 }
3055 res = PyObject_CallFunctionObjArgs(checker, derived, NULL);
3056 Py_LeaveRecursiveCall();
3057 Py_DECREF(checker);
3058 if (res != NULL) {
3059 ok = PyObject_IsTrue(res);
3060 Py_DECREF(res);
3061 }
3062 return ok;
3063 }
3064 else if (PyErr_Occurred()) {
3065 return -1;
3066 }
3067 }
3068 return recursive_issubclass(derived, cls);
3069 }
3070
3071 int
3072 _PyObject_RealIsInstance(PyObject *inst, PyObject *cls)
3073 {
3074 return recursive_isinstance(inst, cls);
3075 }
3076
3077 int
3078 _PyObject_RealIsSubclass(PyObject *derived, PyObject *cls)
3079 {
3080 return recursive_issubclass(derived, cls);
3081 }
3082
3083
3084 PyObject *
3085 PyObject_GetIter(PyObject *o)
3086 {
3087 PyTypeObject *t = o->ob_type;
3088 getiterfunc f = NULL;
3089 if (PyType_HasFeature(t, Py_TPFLAGS_HAVE_ITER))
3090 f = t->tp_iter;
3091 if (f == NULL) {
3092 if (PySequence_Check(o))
3093 return PySeqIter_New(o);
3094 return type_error("'%.200s' object is not iterable", o);
3095 }
3096 else {
3097 PyObject *res = (*f)(o);
3098 if (res != NULL && !PyIter_Check(res)) {
3099 PyErr_Format(PyExc_TypeError,
3100 "iter() returned non-iterator "
3101 "of type '%.100s'",
3102 res->ob_type->tp_name);
3103 Py_DECREF(res);
3104 res = NULL;
3105 }
3106 return res;
3107 }
3108 }
3109
3110 /* Return next item.
3111 * If an error occurs, return NULL. PyErr_Occurred() will be true.
3112 * If the iteration terminates normally, return NULL and clear the
3113 * PyExc_StopIteration exception (if it was set). PyErr_Occurred()
3114 * will be false.
3115 * Else return the next object. PyErr_Occurred() will be false.
3116 */
3117 PyObject *
3118 PyIter_Next(PyObject *iter)
3119 {
3120 PyObject *result;
3121 result = (*iter->ob_type->tp_iternext)(iter);
3122 if (result == NULL &&
3123 PyErr_Occurred() &&
3124 PyErr_ExceptionMatches(PyExc_StopIteration))
3125 PyErr_Clear();
3126 return result;
3127 }
3128