diff options
author | Jeroen Demeyer <J.Demeyer@UGent.be> | 2019-06-18 11:05:41 (GMT) |
---|---|---|
committer | Inada Naoki <songofacandy@gmail.com> | 2019-06-18 11:05:41 (GMT) |
commit | 59543347d12a7717235f941e7fd363d4df92984a (patch) | |
tree | e1f2ba54fe86cf9010bb30d997839073e7dae4bd /Objects/call.c | |
parent | d8f336fdc10decdd82d3bc81a63aea8be149c0c8 (diff) | |
download | cpython-59543347d12a7717235f941e7fd363d4df92984a.zip cpython-59543347d12a7717235f941e7fd363d4df92984a.tar.gz cpython-59543347d12a7717235f941e7fd363d4df92984a.tar.bz2 |
bpo-37151: remove _PyFunction_FastCallDict (GH-13864)
Diffstat (limited to 'Objects/call.c')
-rw-r--r-- | Objects/call.c | 88 |
1 files changed, 0 insertions, 88 deletions
diff --git a/Objects/call.c b/Objects/call.c index f9a3207..75dbd6f 100644 --- a/Objects/call.c +++ b/Objects/call.c @@ -304,94 +304,6 @@ function_code_fastcall(PyCodeObject *co, PyObject *const *args, Py_ssize_t nargs PyObject * -_PyFunction_FastCallDict(PyObject *func, PyObject *const *args, Py_ssize_t nargs, - PyObject *kwargs) -{ - PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); - PyObject *globals = PyFunction_GET_GLOBALS(func); - PyObject *argdefs = PyFunction_GET_DEFAULTS(func); - PyObject *kwdefs, *closure, *name, *qualname; - PyObject *kwtuple, **k; - PyObject **d; - Py_ssize_t nd, nk; - PyObject *result; - - assert(func != NULL); - assert(nargs >= 0); - assert(nargs == 0 || args != NULL); - assert(kwargs == NULL || PyDict_Check(kwargs)); - - if (co->co_kwonlyargcount == 0 && - (kwargs == NULL || PyDict_GET_SIZE(kwargs) == 0) && - (co->co_flags & ~PyCF_MASK) == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) - { - /* Fast paths */ - if (argdefs == NULL && co->co_argcount == nargs) { - return function_code_fastcall(co, args, nargs, globals); - } - else if (nargs == 0 && argdefs != NULL - && co->co_argcount == PyTuple_GET_SIZE(argdefs)) { - /* function called with no arguments, but all parameters have - a default value: use default values as arguments .*/ - args = _PyTuple_ITEMS(argdefs); - return function_code_fastcall(co, args, PyTuple_GET_SIZE(argdefs), - globals); - } - } - - nk = (kwargs != NULL) ? PyDict_GET_SIZE(kwargs) : 0; - if (nk != 0) { - Py_ssize_t pos, i; - - /* bpo-29318, bpo-27840: Caller and callee functions must not share - the dictionary: kwargs must be copied. */ - kwtuple = PyTuple_New(2 * nk); - if (kwtuple == NULL) { - return NULL; - } - - k = _PyTuple_ITEMS(kwtuple); - pos = i = 0; - while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { - /* We must hold strong references because keyword arguments can be - indirectly modified while the function is called: - see issue #2016 and test_extcall */ - Py_INCREF(k[i]); - Py_INCREF(k[i+1]); - i += 2; - } - assert(i / 2 == nk); - } - else { - kwtuple = NULL; - k = NULL; - } - - kwdefs = PyFunction_GET_KW_DEFAULTS(func); - closure = PyFunction_GET_CLOSURE(func); - name = ((PyFunctionObject *)func) -> func_name; - qualname = ((PyFunctionObject *)func) -> func_qualname; - - if (argdefs != NULL) { - d = _PyTuple_ITEMS(argdefs); - nd = PyTuple_GET_SIZE(argdefs); - } - else { - d = NULL; - nd = 0; - } - - result = _PyEval_EvalCodeWithName((PyObject*)co, globals, (PyObject *)NULL, - args, nargs, - k, k != NULL ? k + 1 : NULL, nk, 2, - d, nd, kwdefs, - closure, name, qualname); - Py_XDECREF(kwtuple); - return result; -} - - -PyObject * _PyFunction_Vectorcall(PyObject *func, PyObject* const* stack, size_t nargsf, PyObject *kwnames) { |