summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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:
{