summaryrefslogtreecommitdiffstats
path: root/Python/ceval.c
diff options
context:
space:
mode:
Diffstat (limited to 'Python/ceval.c')
-rw-r--r--Python/ceval.c37
1 files changed, 19 insertions, 18 deletions
diff --git a/Python/ceval.c b/Python/ceval.c
index dd626e5..1559456 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -2607,23 +2607,30 @@ call_cfunction(PyObject *func, PyObject *arg, PyObject *kw)
PyObject *self = PyCFunction_GET_SELF(func);
int flags = PyCFunction_GET_FLAGS(func);
- if (flags & METH_KEYWORDS && kw == NULL) {
- static PyObject *dict = NULL;
- if (dict == NULL) {
- dict = PyDict_New();
- if (dict == NULL)
- return NULL;
+ if (flags & METH_KEYWORDS) {
+ if (kw == NULL) {
+ static PyObject *dict = NULL;
+ if (dict == NULL) {
+ dict = PyDict_New();
+ if (dict == NULL)
+ return NULL;
+ }
+ kw = dict;
+ Py_INCREF(dict);
}
- kw = dict;
- Py_INCREF(dict);
+ return (*(PyCFunctionWithKeywords)meth)(self, arg, kw);
}
- if (flags & METH_VARARGS && kw == NULL) {
- return (*meth)(self, arg);
+ if (kw != NULL && PyDict_Size(kw) != 0) {
+ PyErr_Format(PyExc_TypeError,
+ "%.200s() takes no keyword arguments",
+ f->m_ml->ml_name);
+ return NULL;
}
- if (flags & METH_KEYWORDS) {
- return (*(PyCFunctionWithKeywords)meth)(self, arg, kw);
+ if (flags & METH_VARARGS) {
+ return (*meth)(self, arg);
}
if (!(flags & METH_VARARGS)) {
+ /* the really old style */
int size = PyTuple_GET_SIZE(arg);
if (size == 1)
arg = PyTuple_GET_ITEM(arg, 0);
@@ -2631,12 +2638,6 @@ call_cfunction(PyObject *func, PyObject *arg, PyObject *kw)
arg = NULL;
return (*meth)(self, arg);
}
- if (kw != NULL && PyDict_Size(kw) != 0) {
- PyErr_Format(PyExc_TypeError,
- "%.200s() takes no keyword arguments",
- f->m_ml->ml_name);
- return NULL;
- }
/* should never get here ??? */
PyErr_BadInternalCall();
return NULL;