summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRaymond Hettinger <python@rcn.com>2003-05-31 07:04:16 (GMT)
committerRaymond Hettinger <python@rcn.com>2003-05-31 07:04:16 (GMT)
commit40174c358fc87cd1af79969e60da5d76093768a3 (patch)
tree0ea3e622119884d25d7540adc3c333861d4d5d2a
parentca2a2f11d0ee7c8dee0f74d001c6f3f7d15adac9 (diff)
downloadcpython-40174c358fc87cd1af79969e60da5d76093768a3.zip
cpython-40174c358fc87cd1af79969e60da5d76093768a3.tar.gz
cpython-40174c358fc87cd1af79969e60da5d76093768a3.tar.bz2
SF bug #733667: kwargs handled incorrectly
The fast_function() inlining optimization only applies when there are zero keyword arguments.
-rw-r--r--Lib/test/test_extcall.py11
-rw-r--r--Python/ceval.c2
2 files changed, 12 insertions, 1 deletions
diff --git a/Lib/test/test_extcall.py b/Lib/test/test_extcall.py
index d3c2e3f..f85baf8 100644
--- a/Lib/test/test_extcall.py
+++ b/Lib/test/test_extcall.py
@@ -1,6 +1,9 @@
from test.test_support import verify, verbose, TestFailed, sortdict
from UserList import UserList
+def e(a, b):
+ print a, b
+
def f(*a, **k):
print a, sortdict(k)
@@ -22,6 +25,14 @@ f(1, 2, 3, **{'a':4, 'b':5})
f(1, 2, 3, *(4, 5), **{'a':6, 'b':7})
f(1, 2, 3, x=4, y=5, *(6, 7), **{'a':8, 'b':9})
+# Verify clearing of SF bug #733667
+try:
+ e(c=3)
+except TypeError:
+ pass
+else:
+ print "should raise TypeError: e() got an unexpected keyword argument 'c'"
+
try:
g()
except TypeError, err:
diff --git a/Python/ceval.c b/Python/ceval.c
index 85e9e6b..c652b07 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -3468,7 +3468,7 @@ fast_function(PyObject *func, PyObject ***pp_stack, int n, int na, int nk)
PCALL(PCALL_FUNCTION);
PCALL(PCALL_FAST_FUNCTION);
- if (argdefs == NULL && co->co_argcount == n &&
+ if (argdefs == NULL && co->co_argcount == n && nk==0 &&
co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) {
PyFrameObject *f;
PyObject *retval = NULL;