summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2017-01-18 14:16:57 +0100
committerVictor Stinner <victor.stinner@gmail.com>2017-01-18 14:16:57 +0100
commit807baefab55327c47a01cb3136b36d8ef6bc5e0e (patch)
tree4d3c5c9e4f8e6a5523f9356bd2fcaf732c9c40a3
parent4a6bc8201521488a56ced3d3825e21915f681fae (diff)
downloadcpython-807baefab55327c47a01cb3136b36d8ef6bc5e0e.tar.gz
Cleanup _PyMethodDef_RawFastCallDict()
Issue #29259: use a different case for METH_VARARGS and METH_VARARGS|METH_KEYWORDS to avoid testing again flags to decide if keywords should be checked or not.
-rw-r--r--Objects/methodobject.c20
1 files changed, 9 insertions, 11 deletions
diff --git a/Objects/methodobject.c b/Objects/methodobject.c
index ebea8b3d50..35a827e164 100644
--- a/Objects/methodobject.c
+++ b/Objects/methodobject.c
@@ -93,6 +93,7 @@ _PyMethodDef_RawFastCallDict(PyMethodDef *method, PyObject *self, PyObject **arg
PyCFunction meth;
PyObject *result;
int flags;
+ PyObject *argstuple;
/* _PyMethodDef_RawFastCallDict() must not be called with an exception set,
because it can clear it (directly or indirectly) and so the
@@ -140,30 +141,27 @@ _PyMethodDef_RawFastCallDict(PyMethodDef *method, PyObject *self, PyObject **arg
break;
case METH_VARARGS:
- case METH_VARARGS | METH_KEYWORDS:
- {
- /* Slow-path: create a temporary tuple for positional arguments */
- PyObject *tuple;
-
if (!(flags & METH_KEYWORDS)
&& kwargs != NULL && PyDict_GET_SIZE(kwargs) != 0) {
goto no_keyword_error;
}
+ /* fall through next case */
- tuple = _PyStack_AsTuple(args, nargs);
- if (tuple == NULL) {
+ case METH_VARARGS | METH_KEYWORDS:
+ /* Slow-path: create a temporary tuple for positional arguments */
+ argstuple = _PyStack_AsTuple(args, nargs);
+ if (argstuple == NULL) {
return NULL;
}
if (flags & METH_KEYWORDS) {
- result = (*(PyCFunctionWithKeywords)meth) (self, tuple, kwargs);
+ result = (*(PyCFunctionWithKeywords)meth) (self, argstuple, kwargs);
}
else {
- result = (*meth) (self, tuple);
+ result = (*meth) (self, argstuple);
}
- Py_DECREF(tuple);
+ Py_DECREF(argstuple);
break;
- }
case METH_FASTCALL:
{