From e670bd4f636d8a66a55e44b5e368cd2efd1c645c Mon Sep 17 00:00:00 2001 From: Amaury Forgeot d'Arc Date: Sat, 24 Nov 2007 00:29:24 +0000 Subject: [PATCH] fix #1409: cell variables were not initialized, when the value comes from a keyword-only parameter. --- Lib/test/test_scope.py | 11 +++++++++++ Python/ceval.c | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/Lib/test/test_scope.py b/Lib/test/test_scope.py index 22f254a321e..ccb9016808a 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 70086e1c217..b4efa33e749 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)