1 #include "Python.h" 2 #include "internal/pystate.h" 3 #include "frameobject.h" 4 5 6 int 7 _PyObject_HasFastCall(PyObject *callable) 8 { 9 if (PyFunction_Check(callable)) { 10 return 1; 11 } 12 else if (PyCFunction_Check(callable)) { 13 return !(PyCFunction_GET_FLAGS(callable) & METH_VARARGS); 14 } 15 else { 16 assert (PyCallable_Check(callable)); 17 return 0; 18 } 19 } 20 21 22 static PyObject * 23 null_error(void) 24 { 25 if (!PyErr_Occurred()) 26 PyErr_SetString(PyExc_SystemError, 27 "null argument to internal routine"); 28 return NULL; 29 } 30 31 32 PyObject* 33 _Py_CheckFunctionResult(PyObject *callable, PyObject *result, const char *where) 34 { 35 int err_occurred = (PyErr_Occurred() != NULL); 36 37 assert((callable != NULL) ^ (where != NULL)); 38 39 if (result == NULL) { 40 if (!err_occurred) { 41 if (callable) 42 PyErr_Format(PyExc_SystemError, 43 "%R returned NULL without setting an error", 44 callable); 45 else 46 PyErr_Format(PyExc_SystemError, 47 "%s returned NULL without setting an error", 48 where); 49 #ifdef Py_DEBUG 50 /* Ensure that the bug is caught in debug mode */ 51 Py_FatalError("a function returned NULL without setting an error"); 52 #endif 53 return NULL; 54 } 55 } 56 else { 57 if (err_occurred) { 58 Py_DECREF(result); 59 60 if (callable) { 61 _PyErr_FormatFromCause(PyExc_SystemError, 62 "%R returned a result with an error set", 63 callable); 64 } 65 else { 66 _PyErr_FormatFromCause(PyExc_SystemError, 67 "%s returned a result with an error set", 68 where); 69 } 70 #ifdef Py_DEBUG 71 /* Ensure that the bug is caught in debug mode */ 72 Py_FatalError("a function returned a result with an error set"); 73 #endif 74 return NULL; 75 } 76 } 77 return result; 78 } 79 80 81 /* --- Core PyObject call functions ------------------------------- */ 82 83 PyObject * 84 _PyObject_FastCallDict(PyObject *callable, PyObject *const *args, Py_ssize_t nargs, 85 PyObject *kwargs) 86 { 87 /* _PyObject_FastCallDict() must not be called with an exception set, 88 because it can clear it (directly or indirectly) and so the 89 caller loses its exception */ 90 assert(!PyErr_Occurred()); 91 92 assert(callable != NULL); 93 assert(nargs >= 0); 94 assert(nargs == 0 || args != NULL); 95 assert(kwargs == NULL || PyDict_Check(kwargs)); 96 97 if (PyFunction_Check(callable)) { 98 return _PyFunction_FastCallDict(callable, args, nargs, kwargs); 99 } 100 else if (PyCFunction_Check(callable)) { 101 return _PyCFunction_FastCallDict(callable, args, nargs, kwargs); 102 } 103 else { 104 PyObject *argstuple, *result; 105 ternaryfunc call; 106 107 /* Slow-path: build a temporary tuple */ 108 call = callable->ob_type->tp_call; 109 if (call == NULL) { 110 PyErr_Format(PyExc_TypeError, "'%.200s' object is not callable", 111 callable->ob_type->tp_name); 112 return NULL; 113 } 114 115 argstuple = _PyStack_AsTuple(args, nargs); 116 if (argstuple == NULL) { 117 return NULL; 118 } 119 120 if (Py_EnterRecursiveCall(" while calling a Python object")) { 121 Py_DECREF(argstuple); 122 return NULL; 123 } 124 125 result = (*call)(callable, argstuple, kwargs); 126 127 Py_LeaveRecursiveCall(); 128 Py_DECREF(argstuple); 129 130 result = _Py_CheckFunctionResult(callable, result, NULL); 131 return result; 132 } 133 } 134 135 136 PyObject * 137 _PyObject_FastCallKeywords(PyObject *callable, PyObject *const *stack, Py_ssize_t nargs, 138 PyObject *kwnames) 139 { 140 /* _PyObject_FastCallKeywords() must not be called with an exception set, 141 because it can clear it (directly or indirectly) and so the 142 caller loses its exception */ 143 assert(!PyErr_Occurred()); 144 145 assert(nargs >= 0); 146 assert(kwnames == NULL || PyTuple_CheckExact(kwnames)); 147 148 /* kwnames must only contains str strings, no subclass, and all keys must 149 be unique: these checks are implemented in Python/ceval.c and 150 _PyArg_ParseStackAndKeywords(). */ 151 152 if (PyFunction_Check(callable)) { 153 return _PyFunction_FastCallKeywords(callable, stack, nargs, kwnames); 154 } 155 if (PyCFunction_Check(callable)) { 156 return _PyCFunction_FastCallKeywords(callable, stack, nargs, kwnames); 157 } 158 else { 159 /* Slow-path: build a temporary tuple for positional arguments and a 160 temporary dictionary for keyword arguments (if any) */ 161 162 ternaryfunc call; 163 PyObject *argstuple; 164 PyObject *kwdict, *result; 165 Py_ssize_t nkwargs; 166 167 nkwargs = (kwnames == NULL) ? 0 : PyTuple_GET_SIZE(kwnames); 168 assert((nargs == 0 && nkwargs == 0) || stack != NULL); 169 170 call = callable->ob_type->tp_call; 171 if (call == NULL) { 172 PyErr_Format(PyExc_TypeError, "'%.200s' object is not callable", 173 callable->ob_type->tp_name); 174 return NULL; 175 } 176 177 argstuple = _PyStack_AsTuple(stack, nargs); 178 if (argstuple == NULL) { 179 return NULL; 180 } 181 182 if (nkwargs > 0) { 183 kwdict = _PyStack_AsDict(stack + nargs, kwnames); 184 if (kwdict == NULL) { 185 Py_DECREF(argstuple); 186 return NULL; 187 } 188 } 189 else { 190 kwdict = NULL; 191 } 192 193 if (Py_EnterRecursiveCall(" while calling a Python object")) { 194 Py_DECREF(argstuple); 195 Py_XDECREF(kwdict); 196 return NULL; 197 } 198 199 result = (*call)(callable, argstuple, kwdict); 200 201 Py_LeaveRecursiveCall(); 202 203 Py_DECREF(argstuple); 204 Py_XDECREF(kwdict); 205 206 result = _Py_CheckFunctionResult(callable, result, NULL); 207 return result; 208 } 209 } 210 211 212 PyObject * 213 PyObject_Call(PyObject *callable, PyObject *args, PyObject *kwargs) 214 { 215 ternaryfunc call; 216 PyObject *result; 217 218 /* PyObject_Call() must not be called with an exception set, 219 because it can clear it (directly or indirectly) and so the 220 caller loses its exception */ 221 assert(!PyErr_Occurred()); 222 assert(PyTuple_Check(args)); 223 assert(kwargs == NULL || PyDict_Check(kwargs)); 224 225 if (PyFunction_Check(callable)) { 226 return _PyFunction_FastCallDict(callable, 227 &PyTuple_GET_ITEM(args, 0), 228 PyTuple_GET_SIZE(args), 229 kwargs); 230 } 231 else if (PyCFunction_Check(callable)) { 232 return PyCFunction_Call(callable, args, kwargs); 233 } 234 else { 235 call = callable->ob_type->tp_call; 236 if (call == NULL) { 237 PyErr_Format(PyExc_TypeError, "'%.200s' object is not callable", 238 callable->ob_type->tp_name); 239 return NULL; 240 } 241 242 if (Py_EnterRecursiveCall(" while calling a Python object")) 243 return NULL; 244 245 result = (*call)(callable, args, kwargs); 246 247 Py_LeaveRecursiveCall(); 248 249 return _Py_CheckFunctionResult(callable, result, NULL); 250 } 251 } 252 253 254 /* --- PyFunction call functions ---------------------------------- */ 255 256 static PyObject* _Py_HOT_FUNCTION 257 function_code_fastcall(PyCodeObject *co, PyObject *const *args, Py_ssize_t nargs, 258 PyObject *globals) 259 { 260 PyFrameObject *f; 261 PyThreadState *tstate = PyThreadState_GET(); 262 PyObject **fastlocals; 263 Py_ssize_t i; 264 PyObject *result; 265 266 assert(globals != NULL); 267 /* XXX Perhaps we should create a specialized 268 _PyFrame_New_NoTrack() that doesn't take locals, but does 269 take builtins without sanity checking them. 270 */ 271 assert(tstate != NULL); 272 f = _PyFrame_New_NoTrack(tstate, co, globals, NULL); 273 if (f == NULL) { 274 return NULL; 275 } 276 277 fastlocals = f->f_localsplus; 278 279 for (i = 0; i < nargs; i++) { 280 Py_INCREF(*args); 281 fastlocals[i] = *args++; 282 } 283 result = PyEval_EvalFrameEx(f,0); 284 285 if (Py_REFCNT(f) > 1) { 286 Py_DECREF(f); 287 _PyObject_GC_TRACK(f); 288 } 289 else { 290 ++tstate->recursion_depth; 291 Py_DECREF(f); 292 --tstate->recursion_depth; 293 } 294 return result; 295 } 296 297 298 PyObject * 299 _PyFunction_FastCallDict(PyObject *func, PyObject *const *args, Py_ssize_t nargs, 300 PyObject *kwargs) 301 { 302 PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); 303 PyObject *globals = PyFunction_GET_GLOBALS(func); 304 PyObject *argdefs = PyFunction_GET_DEFAULTS(func); 305 PyObject *kwdefs, *closure, *name, *qualname; 306 PyObject *kwtuple, **k; 307 PyObject **d; 308 Py_ssize_t nd, nk; 309 PyObject *result; 310 311 assert(func != NULL); 312 assert(nargs >= 0); 313 assert(nargs == 0 || args != NULL); 314 assert(kwargs == NULL || PyDict_Check(kwargs)); 315 316 if (co->co_kwonlyargcount == 0 && 317 (kwargs == NULL || PyDict_GET_SIZE(kwargs) == 0) && 318 (co->co_flags & ~PyCF_MASK) == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) 319 { 320 /* Fast paths */ 321 if (argdefs == NULL && co->co_argcount == nargs) { 322 return function_code_fastcall(co, args, nargs, globals); 323 } 324 else if (nargs == 0 && argdefs != NULL 325 && co->co_argcount == PyTuple_GET_SIZE(argdefs)) { 326 /* function called with no arguments, but all parameters have 327 a default value: use default values as arguments .*/ 328 args = &PyTuple_GET_ITEM(argdefs, 0); 329 return function_code_fastcall(co, args, PyTuple_GET_SIZE(argdefs), 330 globals); 331 } 332 } 333 334 nk = (kwargs != NULL) ? PyDict_GET_SIZE(kwargs) : 0; 335 if (nk != 0) { 336 Py_ssize_t pos, i; 337 338 /* bpo-29318, bpo-27840: Caller and callee functions must not share 339 the dictionary: kwargs must be copied. */ 340 kwtuple = PyTuple_New(2 * nk); 341 if (kwtuple == NULL) { 342 return NULL; 343 } 344 345 k = &PyTuple_GET_ITEM(kwtuple, 0); 346 pos = i = 0; 347 while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { 348 /* We must hold strong references because keyword arguments can be 349 indirectly modified while the function is called: 350 see issue #2016 and test_extcall */ 351 Py_INCREF(k[i]); 352 Py_INCREF(k[i+1]); 353 i += 2; 354 } 355 nk = i / 2; 356 } 357 else { 358 kwtuple = NULL; 359 k = NULL; 360 } 361 362 kwdefs = PyFunction_GET_KW_DEFAULTS(func); 363 closure = PyFunction_GET_CLOSURE(func); 364 name = ((PyFunctionObject *)func) -> func_name; 365 qualname = ((PyFunctionObject *)func) -> func_qualname; 366 367 if (argdefs != NULL) { 368 d = &PyTuple_GET_ITEM(argdefs, 0); 369 nd = PyTuple_GET_SIZE(argdefs); 370 } 371 else { 372 d = NULL; 373 nd = 0; 374 } 375 376 result = _PyEval_EvalCodeWithName((PyObject*)co, globals, (PyObject *)NULL, 377 args, nargs, 378 k, k != NULL ? k + 1 : NULL, nk, 2, 379 d, nd, kwdefs, 380 closure, name, qualname); 381 Py_XDECREF(kwtuple); 382 return result; 383 } 384 385 PyObject * 386 _PyFunction_FastCallKeywords(PyObject *func, PyObject *const *stack, 387 Py_ssize_t nargs, PyObject *kwnames) 388 { 389 PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); 390 PyObject *globals = PyFunction_GET_GLOBALS(func); 391 PyObject *argdefs = PyFunction_GET_DEFAULTS(func); 392 PyObject *kwdefs, *closure, *name, *qualname; 393 PyObject **d; 394 Py_ssize_t nkwargs = (kwnames == NULL) ? 0 : PyTuple_GET_SIZE(kwnames); 395 Py_ssize_t nd; 396 397 assert(PyFunction_Check(func)); 398 assert(nargs >= 0); 399 assert(kwnames == NULL || PyTuple_CheckExact(kwnames)); 400 assert((nargs == 0 && nkwargs == 0) || stack != NULL); 401 /* kwnames must only contains str strings, no subclass, and all keys must 402 be unique */ 403 404 if (co->co_kwonlyargcount == 0 && nkwargs == 0 && 405 (co->co_flags & ~PyCF_MASK) == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) 406 { 407 if (argdefs == NULL && co->co_argcount == nargs) { 408 return function_code_fastcall(co, stack, nargs, globals); 409 } 410 else if (nargs == 0 && argdefs != NULL 411 && co->co_argcount == PyTuple_GET_SIZE(argdefs)) { 412 /* function called with no arguments, but all parameters have 413 a default value: use default values as arguments .*/ 414 stack = &PyTuple_GET_ITEM(argdefs, 0); 415 return function_code_fastcall(co, stack, PyTuple_GET_SIZE(argdefs), 416 globals); 417 } 418 } 419 420 kwdefs = PyFunction_GET_KW_DEFAULTS(func); 421 closure = PyFunction_GET_CLOSURE(func); 422 name = ((PyFunctionObject *)func) -> func_name; 423 qualname = ((PyFunctionObject *)func) -> func_qualname; 424 425 if (argdefs != NULL) { 426 d = &PyTuple_GET_ITEM(argdefs, 0); 427 nd = PyTuple_GET_SIZE(argdefs); 428 } 429 else { 430 d = NULL; 431 nd = 0; 432 } 433 return _PyEval_EvalCodeWithName((PyObject*)co, globals, (PyObject *)NULL, 434 stack, nargs, 435 nkwargs ? &PyTuple_GET_ITEM(kwnames, 0) : NULL, 436 stack + nargs, 437 nkwargs, 1, 438 d, (int)nd, kwdefs, 439 closure, name, qualname); 440 } 441 442 443 /* --- PyCFunction call functions --------------------------------- */ 444 445 PyObject * 446 _PyMethodDef_RawFastCallDict(PyMethodDef *method, PyObject *self, 447 PyObject *const *args, Py_ssize_t nargs, 448 PyObject *kwargs) 449 { 450 /* _PyMethodDef_RawFastCallDict() must not be called with an exception set, 451 because it can clear it (directly or indirectly) and so the 452 caller loses its exception */ 453 assert(!PyErr_Occurred()); 454 455 assert(method != NULL); 456 assert(nargs >= 0); 457 assert(nargs == 0 || args != NULL); 458 assert(kwargs == NULL || PyDict_Check(kwargs)); 459 460 PyCFunction meth = method->ml_meth; 461 int flags = method->ml_flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST); 462 PyObject *result = NULL; 463 464 if (Py_EnterRecursiveCall(" while calling a Python object")) { 465 return NULL; 466 } 467 468 switch (flags) 469 { 470 case METH_NOARGS: 471 if (kwargs != NULL && PyDict_GET_SIZE(kwargs) != 0) { 472 goto no_keyword_error; 473 } 474 475 if (nargs != 0) { 476 PyErr_Format(PyExc_TypeError, 477 "%.200s() takes no arguments (%zd given)", 478 method->ml_name, nargs); 479 goto exit; 480 } 481 482 result = (*meth) (self, NULL); 483 break; 484 485 case METH_O: 486 if (kwargs != NULL && PyDict_GET_SIZE(kwargs) != 0) { 487 goto no_keyword_error; 488 } 489 490 if (nargs != 1) { 491 PyErr_Format(PyExc_TypeError, 492 "%.200s() takes exactly one argument (%zd given)", 493 method->ml_name, nargs); 494 goto exit; 495 } 496 497 result = (*meth) (self, args[0]); 498 break; 499 500 case METH_VARARGS: 501 if (kwargs != NULL && PyDict_GET_SIZE(kwargs) != 0) { 502 goto no_keyword_error; 503 } 504 /* fall through */ 505 506 case METH_VARARGS | METH_KEYWORDS: 507 { 508 /* Slow-path: create a temporary tuple for positional arguments */ 509 PyObject *argstuple = _PyStack_AsTuple(args, nargs); 510 if (argstuple == NULL) { 511 goto exit; 512 } 513 514 if (flags & METH_KEYWORDS) { 515 result = (*(PyCFunctionWithKeywords)meth) (self, argstuple, kwargs); 516 } 517 else { 518 result = (*meth) (self, argstuple); 519 } 520 Py_DECREF(argstuple); 521 break; 522 } 523 524 case METH_FASTCALL: 525 { 526 if (kwargs != NULL && PyDict_GET_SIZE(kwargs) != 0) { 527 goto no_keyword_error; 528 } 529 530 result = (*(_PyCFunctionFast)meth) (self, args, nargs); 531 break; 532 } 533 534 case METH_FASTCALL | METH_KEYWORDS: 535 { 536 PyObject *const *stack; 537 PyObject *kwnames; 538 _PyCFunctionFastWithKeywords fastmeth = (_PyCFunctionFastWithKeywords)meth; 539 540 if (_PyStack_UnpackDict(args, nargs, kwargs, &stack, &kwnames) < 0) { 541 goto exit; 542 } 543 544 result = (*fastmeth) (self, stack, nargs, kwnames); 545 if (stack != args) { 546 PyMem_Free((PyObject **)stack); 547 } 548 Py_XDECREF(kwnames); 549 break; 550 } 551 552 default: 553 PyErr_SetString(PyExc_SystemError, 554 "Bad call flags in _PyMethodDef_RawFastCallDict. " 555 "METH_OLDARGS is no longer supported!"); 556 goto exit; 557 } 558 559 goto exit; 560 561 no_keyword_error: 562 PyErr_Format(PyExc_TypeError, 563 "%.200s() takes no keyword arguments", 564 method->ml_name); 565 566 exit: 567 Py_LeaveRecursiveCall(); 568 return result; 569 } 570 571 572 PyObject * 573 _PyCFunction_FastCallDict(PyObject *func, 574 PyObject *const *args, Py_ssize_t nargs, 575 PyObject *kwargs) 576 { 577 PyObject *result; 578 579 assert(func != NULL); 580 assert(PyCFunction_Check(func)); 581 582 result = _PyMethodDef_RawFastCallDict(((PyCFunctionObject*)func)->m_ml, 583 PyCFunction_GET_SELF(func), 584 args, nargs, kwargs); 585 result = _Py_CheckFunctionResult(func, result, NULL); 586 return result; 587 } 588 589 590 PyObject * 591 _PyMethodDef_RawFastCallKeywords(PyMethodDef *method, PyObject *self, 592 PyObject *const *args, Py_ssize_t nargs, 593 PyObject *kwnames) 594 { 595 /* _PyMethodDef_RawFastCallKeywords() must not be called with an exception set, 596 because it can clear it (directly or indirectly) and so the 597 caller loses its exception */ 598 assert(!PyErr_Occurred()); 599 600 assert(method != NULL); 601 assert(nargs >= 0); 602 assert(kwnames == NULL || PyTuple_CheckExact(kwnames)); 603 /* kwnames must only contains str strings, no subclass, and all keys must 604 be unique */ 605 606 PyCFunction meth = method->ml_meth; 607 int flags = method->ml_flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST); 608 Py_ssize_t nkwargs = kwnames == NULL ? 0 : PyTuple_GET_SIZE(kwnames); 609 PyObject *result = NULL; 610 611 if (Py_EnterRecursiveCall(" while calling a Python object")) { 612 return NULL; 613 } 614 615 switch (flags) 616 { 617 case METH_NOARGS: 618 if (nkwargs) { 619 goto no_keyword_error; 620 } 621 622 if (nargs != 0) { 623 PyErr_Format(PyExc_TypeError, 624 "%.200s() takes no arguments (%zd given)", 625 method->ml_name, nargs); 626 goto exit; 627 } 628 629 result = (*meth) (self, NULL); 630 break; 631 632 case METH_O: 633 if (nkwargs) { 634 goto no_keyword_error; 635 } 636 637 if (nargs != 1) { 638 PyErr_Format(PyExc_TypeError, 639 "%.200s() takes exactly one argument (%zd given)", 640 method->ml_name, nargs); 641 goto exit; 642 } 643 644 result = (*meth) (self, args[0]); 645 break; 646 647 case METH_FASTCALL: 648 if (nkwargs) { 649 goto no_keyword_error; 650 } 651 result = ((_PyCFunctionFast)meth) (self, args, nargs); 652 break; 653 654 case METH_FASTCALL | METH_KEYWORDS: 655 /* Fast-path: avoid temporary dict to pass keyword arguments */ 656 result = ((_PyCFunctionFastWithKeywords)meth) (self, args, nargs, kwnames); 657 break; 658 659 case METH_VARARGS: 660 if (nkwargs) { 661 goto no_keyword_error; 662 } 663 /* fall through */ 664 665 case METH_VARARGS | METH_KEYWORDS: 666 { 667 /* Slow-path: create a temporary tuple for positional arguments 668 and a temporary dict for keyword arguments */ 669 PyObject *argtuple; 670 671 argtuple = _PyStack_AsTuple(args, nargs); 672 if (argtuple == NULL) { 673 goto exit; 674 } 675 676 if (flags & METH_KEYWORDS) { 677 PyObject *kwdict; 678 679 if (nkwargs > 0) { 680 kwdict = _PyStack_AsDict(args + nargs, kwnames); 681 if (kwdict == NULL) { 682 Py_DECREF(argtuple); 683 goto exit; 684 } 685 } 686 else { 687 kwdict = NULL; 688 } 689 690 result = (*(PyCFunctionWithKeywords)meth) (self, argtuple, kwdict); 691 Py_XDECREF(kwdict); 692 } 693 else { 694 result = (*meth) (self, argtuple); 695 } 696 Py_DECREF(argtuple); 697 break; 698 } 699 700 default: 701 PyErr_SetString(PyExc_SystemError, 702 "Bad call flags in _PyCFunction_FastCallKeywords. " 703 "METH_OLDARGS is no longer supported!"); 704 goto exit; 705 } 706 707 goto exit; 708 709 no_keyword_error: 710 PyErr_Format(PyExc_TypeError, 711 "%.200s() takes no keyword arguments", 712 method->ml_name); 713 714 exit: 715 Py_LeaveRecursiveCall(); 716 return result; 717 } 718 719 720 PyObject * 721 _PyCFunction_FastCallKeywords(PyObject *func, 722 PyObject *const *args, Py_ssize_t nargs, 723 PyObject *kwnames) 724 { 725 PyObject *result; 726 727 assert(func != NULL); 728 assert(PyCFunction_Check(func)); 729 730 result = _PyMethodDef_RawFastCallKeywords(((PyCFunctionObject*)func)->m_ml, 731 PyCFunction_GET_SELF(func), 732 args, nargs, kwnames); 733 result = _Py_CheckFunctionResult(func, result, NULL); 734 return result; 735 } 736 737 738 static PyObject * 739 cfunction_call_varargs(PyObject *func, PyObject *args, PyObject *kwargs) 740 { 741 assert(!PyErr_Occurred()); 742 assert(kwargs == NULL || PyDict_Check(kwargs)); 743 744 PyCFunction meth = PyCFunction_GET_FUNCTION(func); 745 PyObject *self = PyCFunction_GET_SELF(func); 746 PyObject *result; 747 748 if (PyCFunction_GET_FLAGS(func) & METH_KEYWORDS) { 749 if (Py_EnterRecursiveCall(" while calling a Python object")) { 750 return NULL; 751 } 752 753 result = (*(PyCFunctionWithKeywords)meth)(self, args, kwargs); 754 755 Py_LeaveRecursiveCall(); 756 } 757 else { 758 if (kwargs != NULL && PyDict_GET_SIZE(kwargs) != 0) { 759 PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments", 760 ((PyCFunctionObject*)func)->m_ml->ml_name); 761 return NULL; 762 } 763 764 if (Py_EnterRecursiveCall(" while calling a Python object")) { 765 return NULL; 766 } 767 768 result = (*meth)(self, args); 769 770 Py_LeaveRecursiveCall(); 771 } 772 773 return _Py_CheckFunctionResult(func, result, NULL); 774 } 775 776 777 PyObject * 778 PyCFunction_Call(PyObject *func, PyObject *args, PyObject *kwargs) 779 { 780 /* first try METH_VARARGS to pass directly args tuple unchanged. 781 _PyMethodDef_RawFastCallDict() creates a new temporary tuple 782 for METH_VARARGS. */ 783 if (PyCFunction_GET_FLAGS(func) & METH_VARARGS) { 784 return cfunction_call_varargs(func, args, kwargs); 785 } 786 else { 787 return _PyCFunction_FastCallDict(func, 788 &PyTuple_GET_ITEM(args, 0), 789 PyTuple_GET_SIZE(args), 790 kwargs); 791 } 792 } 793 794 795 /* --- More complex call functions -------------------------------- */ 796 797 /* External interface to call any callable object. 798 The args must be a tuple or NULL. The kwargs must be a dict or NULL. */ 799 PyObject * 800 PyEval_CallObjectWithKeywords(PyObject *callable, 801 PyObject *args, PyObject *kwargs) 802 { 803 #ifdef Py_DEBUG 804 /* PyEval_CallObjectWithKeywords() must not be called with an exception 805 set. It raises a new exception if parameters are invalid or if 806 PyTuple_New() fails, and so the original exception is lost. */ 807 assert(!PyErr_Occurred()); 808 #endif 809 810 if (args != NULL && !PyTuple_Check(args)) { 811 PyErr_SetString(PyExc_TypeError, 812 "argument list must be a tuple"); 813 return NULL; 814 } 815 816 if (kwargs != NULL && !PyDict_Check(kwargs)) { 817 PyErr_SetString(PyExc_TypeError, 818 "keyword list must be a dictionary"); 819 return NULL; 820 } 821 822 if (args == NULL) { 823 return _PyObject_FastCallDict(callable, NULL, 0, kwargs); 824 } 825 else { 826 return PyObject_Call(callable, args, kwargs); 827 } 828 } 829 830 831 PyObject * 832 PyObject_CallObject(PyObject *callable, PyObject *args) 833 { 834 return PyEval_CallObjectWithKeywords(callable, args, NULL); 835 } 836 837 838 /* Positional arguments are obj followed by args: 839 call callable(obj, *args, **kwargs) */ 840 PyObject * 841 _PyObject_FastCall_Prepend(PyObject *callable, PyObject *obj, 842 PyObject *const *args, Py_ssize_t nargs) 843 { 844 PyObject *small_stack[_PY_FASTCALL_SMALL_STACK]; 845 PyObject **args2; 846 PyObject *result; 847 848 nargs++; 849 if (nargs <= (Py_ssize_t)Py_ARRAY_LENGTH(small_stack)) { 850 args2 = small_stack; 851 } 852 else { 853 args2 = PyMem_Malloc(nargs * sizeof(PyObject *)); 854 if (args2 == NULL) { 855 PyErr_NoMemory(); 856 return NULL; 857 } 858 } 859 860 /* use borrowed references */ 861 args2[0] = obj; 862 if (nargs > 1) { 863 memcpy(&args2[1], args, (nargs - 1) * sizeof(PyObject *)); 864 } 865 866 result = _PyObject_FastCall(callable, args2, nargs); 867 if (args2 != small_stack) { 868 PyMem_Free(args2); 869 } 870 return result; 871 } 872 873 874 /* Call callable(obj, *args, **kwargs). */ 875 PyObject * 876 _PyObject_Call_Prepend(PyObject *callable, 877 PyObject *obj, PyObject *args, PyObject *kwargs) 878 { 879 PyObject *small_stack[_PY_FASTCALL_SMALL_STACK]; 880 PyObject **stack; 881 Py_ssize_t argcount; 882 PyObject *result; 883 884 assert(PyTuple_Check(args)); 885 886 argcount = PyTuple_GET_SIZE(args); 887 if (argcount + 1 <= (Py_ssize_t)Py_ARRAY_LENGTH(small_stack)) { 888 stack = small_stack; 889 } 890 else { 891 stack = PyMem_Malloc((argcount + 1) * sizeof(PyObject *)); 892 if (stack == NULL) { 893 PyErr_NoMemory(); 894 return NULL; 895 } 896 } 897 898 /* use borrowed references */ 899 stack[0] = obj; 900 memcpy(&stack[1], 901 &PyTuple_GET_ITEM(args, 0), 902 argcount * sizeof(PyObject *)); 903 904 result = _PyObject_FastCallDict(callable, 905 stack, argcount + 1, 906 kwargs); 907 if (stack != small_stack) { 908 PyMem_Free(stack); 909 } 910 return result; 911 } 912 913 914 /* --- Call with a format string ---------------------------------- */ 915 916 static PyObject * 917 _PyObject_CallFunctionVa(PyObject *callable, const char *format, 918 va_list va, int is_size_t) 919 { 920 PyObject* small_stack[_PY_FASTCALL_SMALL_STACK]; 921 const Py_ssize_t small_stack_len = Py_ARRAY_LENGTH(small_stack); 922 PyObject **stack; 923 Py_ssize_t nargs, i; 924 PyObject *result; 925 926 if (callable == NULL) { 927 return null_error(); 928 } 929 930 if (!format || !*format) { 931 return _PyObject_CallNoArg(callable); 932 } 933 934 if (is_size_t) { 935 stack = _Py_VaBuildStack_SizeT(small_stack, small_stack_len, 936 format, va, &nargs); 937 } 938 else { 939 stack = _Py_VaBuildStack(small_stack, small_stack_len, 940 format, va, &nargs); 941 } 942 if (stack == NULL) { 943 return NULL; 944 } 945 946 if (nargs == 1 && PyTuple_Check(stack[0])) { 947 /* Special cases for backward compatibility: 948 - PyObject_CallFunction(func, "O", tuple) calls func(*tuple) 949 - PyObject_CallFunction(func, "(OOO)", arg1, arg2, arg3) calls 950 func(*(arg1, arg2, arg3)): func(arg1, arg2, arg3) */ 951 PyObject *args = stack[0]; 952 result = _PyObject_FastCall(callable, 953 &PyTuple_GET_ITEM(args, 0), 954 PyTuple_GET_SIZE(args)); 955 } 956 else { 957 result = _PyObject_FastCall(callable, stack, nargs); 958 } 959 960 for (i = 0; i < nargs; ++i) { 961 Py_DECREF(stack[i]); 962 } 963 if (stack != small_stack) { 964 PyMem_Free(stack); 965 } 966 return result; 967 } 968 969 970 PyObject * 971 PyObject_CallFunction(PyObject *callable, const char *format, ...) 972 { 973 va_list va; 974 PyObject *result; 975 976 va_start(va, format); 977 result = _PyObject_CallFunctionVa(callable, format, va, 0); 978 va_end(va); 979 980 return result; 981 } 982 983 984 /* PyEval_CallFunction is exact copy of PyObject_CallFunction. 985 * This function is kept for backward compatibility. 986 */ 987 PyObject * 988 PyEval_CallFunction(PyObject *callable, const char *format, ...) 989 { 990 va_list va; 991 PyObject *result; 992 993 va_start(va, format); 994 result = _PyObject_CallFunctionVa(callable, format, va, 0); 995 va_end(va); 996 997 return result; 998 } 999 1000 1001 PyObject * 1002 _PyObject_CallFunction_SizeT(PyObject *callable, const char *format, ...) 1003 { 1004 va_list va; 1005 PyObject *result; 1006 1007 va_start(va, format); 1008 result = _PyObject_CallFunctionVa(callable, format, va, 1); 1009 va_end(va); 1010 1011 return result; 1012 } 1013 1014 1015 static PyObject* 1016 callmethod(PyObject* callable, const char *format, va_list va, int is_size_t) 1017 { 1018 assert(callable != NULL); 1019 1020 if (!PyCallable_Check(callable)) { 1021 PyErr_Format(PyExc_TypeError, 1022 "attribute of type '%.200s' is not callable", 1023 Py_TYPE(callable)->tp_name); 1024 return NULL; 1025 } 1026 1027 return _PyObject_CallFunctionVa(callable, format, va, is_size_t); 1028 } 1029 1030 1031 PyObject * 1032 PyObject_CallMethod(PyObject *obj, const char *name, const char *format, ...) 1033 { 1034 va_list va; 1035 PyObject *callable, *retval; 1036 1037 if (obj == NULL || name == NULL) { 1038 return null_error(); 1039 } 1040 1041 callable = PyObject_GetAttrString(obj, name); 1042 if (callable == NULL) 1043 return NULL; 1044 1045 va_start(va, format); 1046 retval = callmethod(callable, format, va, 0); 1047 va_end(va); 1048 1049 Py_DECREF(callable); 1050 return retval; 1051 } 1052 1053 1054 /* PyEval_CallMethod is exact copy of PyObject_CallMethod. 1055 * This function is kept for backward compatibility. 1056 */ 1057 PyObject * 1058 PyEval_CallMethod(PyObject *obj, const char *name, const char *format, ...) 1059 { 1060 va_list va; 1061 PyObject *callable, *retval; 1062 1063 if (obj == NULL || name == NULL) { 1064 return null_error(); 1065 } 1066 1067 callable = PyObject_GetAttrString(obj, name); 1068 if (callable == NULL) 1069 return NULL; 1070 1071 va_start(va, format); 1072 retval = callmethod(callable, format, va, 0); 1073 va_end(va); 1074 1075 Py_DECREF(callable); 1076 return retval; 1077 } 1078 1079 1080 PyObject * 1081 _PyObject_CallMethodId(PyObject *obj, _Py_Identifier *name, 1082 const char *format, ...) 1083 { 1084 va_list va; 1085 PyObject *callable, *retval; 1086 1087 if (obj == NULL || name == NULL) { 1088 return null_error(); 1089 } 1090 1091 callable = _PyObject_GetAttrId(obj, name); 1092 if (callable == NULL) 1093 return NULL; 1094 1095 va_start(va, format); 1096 retval = callmethod(callable, format, va, 0); 1097 va_end(va); 1098 1099 Py_DECREF(callable); 1100 return retval; 1101 } 1102 1103 1104 PyObject * 1105 _PyObject_CallMethod_SizeT(PyObject *obj, const char *name, 1106 const char *format, ...) 1107 { 1108 va_list va; 1109 PyObject *callable, *retval; 1110 1111 if (obj == NULL || name == NULL) { 1112 return null_error(); 1113 } 1114 1115 callable = PyObject_GetAttrString(obj, name); 1116 if (callable == NULL) 1117 return NULL; 1118 1119 va_start(va, format); 1120 retval = callmethod(callable, format, va, 1); 1121 va_end(va); 1122 1123 Py_DECREF(callable); 1124 return retval; 1125 } 1126 1127 1128 PyObject * 1129 _PyObject_CallMethodId_SizeT(PyObject *obj, _Py_Identifier *name, 1130 const char *format, ...) 1131 { 1132 va_list va; 1133 PyObject *callable, *retval; 1134 1135 if (obj == NULL || name == NULL) { 1136 return null_error(); 1137 } 1138 1139 callable = _PyObject_GetAttrId(obj, name); 1140 if (callable == NULL) { 1141 return NULL; 1142 } 1143 1144 va_start(va, format); 1145 retval = callmethod(callable, format, va, 1); 1146 va_end(va); 1147 1148 Py_DECREF(callable); 1149 return retval; 1150 } 1151 1152 1153 /* --- Call with "..." arguments ---------------------------------- */ 1154 1155 static PyObject * 1156 object_vacall(PyObject *callable, va_list vargs) 1157 { 1158 PyObject *small_stack[_PY_FASTCALL_SMALL_STACK]; 1159 PyObject **stack; 1160 Py_ssize_t nargs; 1161 PyObject *result; 1162 Py_ssize_t i; 1163 va_list countva; 1164 1165 if (callable == NULL) { 1166 return null_error(); 1167 } 1168 1169 /* Count the number of arguments */ 1170 va_copy(countva, vargs); 1171 nargs = 0; 1172 while (1) { 1173 PyObject *arg = va_arg(countva, PyObject *); 1174 if (arg == NULL) { 1175 break; 1176 } 1177 nargs++; 1178 } 1179 va_end(countva); 1180 1181 /* Copy arguments */ 1182 if (nargs <= (Py_ssize_t)Py_ARRAY_LENGTH(small_stack)) { 1183 stack = small_stack; 1184 } 1185 else { 1186 stack = PyMem_Malloc(nargs * sizeof(stack[0])); 1187 if (stack == NULL) { 1188 PyErr_NoMemory(); 1189 return NULL; 1190 } 1191 } 1192 1193 for (i = 0; i < nargs; ++i) { 1194 stack[i] = va_arg(vargs, PyObject *); 1195 } 1196 1197 /* Call the function */ 1198 result = _PyObject_FastCall(callable, stack, nargs); 1199 1200 if (stack != small_stack) { 1201 PyMem_Free(stack); 1202 } 1203 return result; 1204 } 1205 1206 1207 PyObject * 1208 PyObject_CallMethodObjArgs(PyObject *callable, PyObject *name, ...) 1209 { 1210 va_list vargs; 1211 PyObject *result; 1212 1213 if (callable == NULL || name == NULL) { 1214 return null_error(); 1215 } 1216 1217 callable = PyObject_GetAttr(callable, name); 1218 if (callable == NULL) { 1219 return NULL; 1220 } 1221 1222 va_start(vargs, name); 1223 result = object_vacall(callable, vargs); 1224 va_end(vargs); 1225 1226 Py_DECREF(callable); 1227 return result; 1228 } 1229 1230 1231 PyObject * 1232 _PyObject_CallMethodIdObjArgs(PyObject *obj, 1233 struct _Py_Identifier *name, ...) 1234 { 1235 va_list vargs; 1236 PyObject *callable, *result; 1237 1238 if (obj == NULL || name == NULL) { 1239 return null_error(); 1240 } 1241 1242 callable = _PyObject_GetAttrId(obj, name); 1243 if (callable == NULL) { 1244 return NULL; 1245 } 1246 1247 va_start(vargs, name); 1248 result = object_vacall(callable, vargs); 1249 va_end(vargs); 1250 1251 Py_DECREF(callable); 1252 return result; 1253 } 1254 1255 1256 PyObject * 1257 PyObject_CallFunctionObjArgs(PyObject *callable, ...) 1258 { 1259 va_list vargs; 1260 PyObject *result; 1261 1262 va_start(vargs, callable); 1263 result = object_vacall(callable, vargs); 1264 va_end(vargs); 1265 1266 return result; 1267 } 1268 1269 1270 /* --- PyStack functions ------------------------------------------ */ 1271 1272 /* Issue #29234: Inlining _PyStack_AsTuple() into callers increases their 1273 stack consumption, Disable inlining to optimize the stack consumption. */ 1274 PyObject* _Py_NO_INLINE 1275 _PyStack_AsTuple(PyObject *const *stack, Py_ssize_t nargs) 1276 { 1277 PyObject *args; 1278 Py_ssize_t i; 1279 1280 args = PyTuple_New(nargs); 1281 if (args == NULL) { 1282 return NULL; 1283 } 1284 1285 for (i=0; i < nargs; i++) { 1286 PyObject *item = stack[i]; 1287 Py_INCREF(item); 1288 PyTuple_SET_ITEM(args, i, item); 1289 } 1290 return args; 1291 } 1292 1293 1294 PyObject* 1295 _PyStack_AsTupleSlice(PyObject *const *stack, Py_ssize_t nargs, 1296 Py_ssize_t start, Py_ssize_t end) 1297 { 1298 PyObject *args; 1299 Py_ssize_t i; 1300 1301 assert(0 <= start); 1302 assert(end <= nargs); 1303 assert(start <= end); 1304 1305 args = PyTuple_New(end - start); 1306 if (args == NULL) { 1307 return NULL; 1308 } 1309 1310 for (i=start; i < end; i++) { 1311 PyObject *item = stack[i]; 1312 Py_INCREF(item); 1313 PyTuple_SET_ITEM(args, i - start, item); 1314 } 1315 return args; 1316 } 1317 1318 1319 PyObject * 1320 _PyStack_AsDict(PyObject *const *values, PyObject *kwnames) 1321 { 1322 Py_ssize_t nkwargs; 1323 PyObject *kwdict; 1324 Py_ssize_t i; 1325 1326 assert(kwnames != NULL); 1327 nkwargs = PyTuple_GET_SIZE(kwnames); 1328 kwdict = _PyDict_NewPresized(nkwargs); 1329 if (kwdict == NULL) { 1330 return NULL; 1331 } 1332 1333 for (i = 0; i < nkwargs; i++) { 1334 PyObject *key = PyTuple_GET_ITEM(kwnames, i); 1335 PyObject *value = *values++; 1336 /* If key already exists, replace it with the new value */ 1337 if (PyDict_SetItem(kwdict, key, value)) { 1338 Py_DECREF(kwdict); 1339 return NULL; 1340 } 1341 } 1342 return kwdict; 1343 } 1344 1345 1346 int 1347 _PyStack_UnpackDict(PyObject *const *args, Py_ssize_t nargs, PyObject *kwargs, 1348 PyObject *const **p_stack, PyObject **p_kwnames) 1349 { 1350 PyObject **stack, **kwstack; 1351 Py_ssize_t nkwargs; 1352 Py_ssize_t pos, i; 1353 PyObject *key, *value; 1354 PyObject *kwnames; 1355 1356 assert(nargs >= 0); 1357 assert(kwargs == NULL || PyDict_CheckExact(kwargs)); 1358 1359 if (kwargs == NULL || (nkwargs = PyDict_GET_SIZE(kwargs)) == 0) { 1360 *p_stack = args; 1361 *p_kwnames = NULL; 1362 return 0; 1363 } 1364 1365 if ((size_t)nargs > PY_SSIZE_T_MAX / sizeof(stack[0]) - (size_t)nkwargs) { 1366 PyErr_NoMemory(); 1367 return -1; 1368 } 1369 1370 stack = PyMem_Malloc((nargs + nkwargs) * sizeof(stack[0])); 1371 if (stack == NULL) { 1372 PyErr_NoMemory(); 1373 return -1; 1374 } 1375 1376 kwnames = PyTuple_New(nkwargs); 1377 if (kwnames == NULL) { 1378 PyMem_Free(stack); 1379 return -1; 1380 } 1381 1382 /* Copy position arguments (borrowed references) */ 1383 memcpy(stack, args, nargs * sizeof(stack[0])); 1384 1385 kwstack = stack + nargs; 1386 pos = i = 0; 1387 /* This loop doesn't support lookup function mutating the dictionary 1388 to change its size. It's a deliberate choice for speed, this function is 1389 called in the performance critical hot code. */ 1390 while (PyDict_Next(kwargs, &pos, &key, &value)) { 1391 Py_INCREF(key); 1392 PyTuple_SET_ITEM(kwnames, i, key); 1393 /* The stack contains borrowed references */ 1394 kwstack[i] = value; 1395 i++; 1396 } 1397 1398 *p_stack = stack; 1399 *p_kwnames = kwnames; 1400 return 0; 1401 } 1402