PyEval_CallObjectWithKeywords() uses fast call with kwargs
Issue #27809. _PyObject_FastCallDict() now supports keyword arguments, and so the args==NULL fast-path can also be used when kwargs is not NULL.
This commit is contained in:
parent
2990fa11bc
commit
155ea65e5c
|
@ -4590,30 +4590,22 @@ PyEval_CallObjectWithKeywords(PyObject *func, PyObject *args, PyObject *kwargs)
|
|||
#endif
|
||||
|
||||
if (args == NULL) {
|
||||
if (kwargs == NULL) {
|
||||
return _PyObject_CallNoArg(func);
|
||||
}
|
||||
|
||||
args = PyTuple_New(0);
|
||||
if (args == NULL)
|
||||
return NULL;
|
||||
return _PyObject_FastCallDict(func, NULL, 0, kwargs);
|
||||
}
|
||||
else if (!PyTuple_Check(args)) {
|
||||
|
||||
if (!PyTuple_Check(args)) {
|
||||
PyErr_SetString(PyExc_TypeError,
|
||||
"argument list must be a tuple");
|
||||
return NULL;
|
||||
}
|
||||
else {
|
||||
Py_INCREF(args);
|
||||
}
|
||||
|
||||
if (kwargs != NULL && !PyDict_Check(kwargs)) {
|
||||
PyErr_SetString(PyExc_TypeError,
|
||||
"keyword list must be a dictionary");
|
||||
Py_DECREF(args);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Py_INCREF(args);
|
||||
result = PyObject_Call(func, args, kwargs);
|
||||
Py_DECREF(args);
|
||||
|
||||
|
|
Loading…
Reference in New Issue