diff Python/ceval.c @ 17991:0769e11d9d5f legacy-trunk

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
author Jeremy Hylton <jeremy@alum.mit.edu>
date Tue, 29 May 2001 16:23:26 +0000
parents d2d3f88661a3
children 15f4381cff0f
line wrap: on
line diff
--- a/Python/ceval.c	Tue May 29 16:10:07 2001 +0000
+++ b/Python/ceval.c	Tue May 29 16:23:26 2001 +0000
@@ -1970,18 +1970,17 @@
 		    */
 		    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) {