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