diff options
author | Amaury Forgeot d'Arc <amauryfa@gmail.com> | 2007-11-24 00:29:24 (GMT) |
---|---|---|
committer | Amaury Forgeot d'Arc <amauryfa@gmail.com> | 2007-11-24 00:29:24 (GMT) |
commit | e670bd4f636d8a66a55e44b5e368cd2efd1c645c (patch) | |
tree | 1b26c744f305601ab123d4100fc0573e506869a3 | |
parent | 2af1d894e3e8fea6b84b4229ef15be8d422b718d (diff) | |
download | cpython-e670bd4f636d8a66a55e44b5e368cd2efd1c645c.zip cpython-e670bd4f636d8a66a55e44b5e368cd2efd1c645c.tar.gz cpython-e670bd4f636d8a66a55e44b5e368cd2efd1c645c.tar.bz2 |
fix #1409: cell variables were not initialized,
when the value comes from a keyword-only parameter.
-rw-r--r-- | Lib/test/test_scope.py | 11 | ||||
-rw-r--r-- | Python/ceval.c | 2 |
2 files changed, 12 insertions, 1 deletions
diff --git a/Lib/test/test_scope.py b/Lib/test/test_scope.py index 22f254a..ccb9016 100644 --- a/Lib/test/test_scope.py +++ b/Lib/test/test_scope.py @@ -166,6 +166,17 @@ class ScopeTests(unittest.TestCase): self.assertEqual(t.method_and_var(), "method") self.assertEqual(t.actual_global(), "global") + def testCellIsKwonlyArg(self): + # Issue 1409: Initialisation of a cell value, + # when it comes from a keyword-only parameter + def foo(*, a=17): + def bar(): + return a + 5 + return bar() + 3 + + self.assertEqual(foo(a=42), 50) + self.assertEqual(foo(), 25) + def testRecursion(self): def f(x): diff --git a/Python/ceval.c b/Python/ceval.c index 70086e1..b4efa33 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -2708,7 +2708,7 @@ PyEval_EvalCodeEx(PyCodeObject *co, PyObject *globals, PyObject *locals, Py_UNICODE *cellname, *argname; PyObject *c; - nargs = co->co_argcount; + nargs = co->co_argcount + co->co_kwonlyargcount; if (co->co_flags & CO_VARARGS) nargs++; if (co->co_flags & CO_VARKEYWORDS) |