summaryrefslogtreecommitdiffstats
path: root/Python/ceval.c
diff options
context:
space:
mode:
authorJeremy Hylton <jeremy@alum.mit.edu>2001-05-29 16:23:26 (GMT)
committerJeremy Hylton <jeremy@alum.mit.edu>2001-05-29 16:23:26 (GMT)
commit4c9dace392c537c40c2721141aab98f5799aa38b (patch)
tree5204b2208cff83f5ac2743ea51fe5959b830aebc /Python/ceval.c
parent964c074a627cad21f072e9651067b8b120e3b3f7 (diff)
downloadcpython-4c9dace392c537c40c2721141aab98f5799aa38b.zip
cpython-4c9dace392c537c40c2721141aab98f5799aa38b.tar.gz
cpython-4c9dace392c537c40c2721141aab98f5799aa38b.tar.bz2
Fix bug reported by Tim Peters on python-dev:
Keyword arguments passed to builtin functions that don't take them are ignored. >>> {}.clear(x=2) >>> instead of >>> {}.clear(x=2) Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: clear() takes no keyword arguments
Diffstat (limited to 'Python/ceval.c')
-rw-r--r--Python/ceval.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/Python/ceval.c b/Python/ceval.c
index e407de4..902d529 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -1970,18 +1970,17 @@ eval_code2(PyCodeObject *co, PyObject *globals, PyObject *locals,
*/
if (PyCFunction_Check(func)) {
int flags = PyCFunction_GET_FLAGS(func);
- if (flags == METH_VARARGS) {
+ if (flags > 1 || nk != 0)
+ x = do_call(func, &stack_pointer,
+ na, nk);
+ else if (flags == METH_VARARGS) {
PyObject *callargs;
callargs = load_args(&stack_pointer, na);
x = call_cfunction(func, callargs, NULL);
Py_XDECREF(callargs);
- } else if (flags == 0) {
+ } else if (flags == 0)
x = fast_cfunction(func,
&stack_pointer, na);
- } else {
- x = do_call(func, &stack_pointer,
- na, nk);
- }
} else {
if (PyMethod_Check(func)
&& PyMethod_GET_SELF(func) != NULL) {