From 32c59b6fc1140486a9915876054365b40bd88da9 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Tue, 17 Apr 2012 19:53:21 -0400 Subject: mangle keyword-only argname when loading defaults (closes #14607) --- Lib/test/test_keywordonlyarg.py | 6 ++++++ Misc/NEWS | 2 ++ Python/compile.c | 6 +++++- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/Lib/test/test_keywordonlyarg.py b/Lib/test/test_keywordonlyarg.py index 3aebd68..108ed18 100644 --- a/Lib/test/test_keywordonlyarg.py +++ b/Lib/test/test_keywordonlyarg.py @@ -170,6 +170,12 @@ class KeywordOnlyArgTestCase(unittest.TestCase): # used to fail with a SystemError. lambda *, k1=unittest: None + def test_mangling(self): + class X: + def f(self, *, __a=42): + return __a + self.assertEqual(X().f(), 42) + def test_main(): run_unittest(KeywordOnlyArgTestCase) diff --git a/Misc/NEWS b/Misc/NEWS index adb0b08..2c13563 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -10,6 +10,8 @@ What's New in Python 3.2.4 Core and Builtins ----------------- +- Issue #14607: Fix defaults keyword-only arguments which started with ``__``. + - Issue #13889: Check and (if necessary) set FPU control word before calling any of the dtoa.c string <-> float conversion functions, on MSVC builds of Python. This fixes issues when embedding Python in a Delphi app. diff --git a/Python/compile.c b/Python/compile.c index ba593a0..19e7cb2 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -1319,7 +1319,11 @@ compiler_visit_kwonlydefaults(struct compiler *c, asdl_seq *kwonlyargs, arg_ty arg = asdl_seq_GET(kwonlyargs, i); expr_ty default_ = asdl_seq_GET(kw_defaults, i); if (default_) { - ADDOP_O(c, LOAD_CONST, arg->arg, consts); + PyObject *mangled = _Py_Mangle(c->u->u_private, arg->arg); + if (!mangled) + return -1; + ADDOP_O(c, LOAD_CONST, mangled, consts); + Py_DECREF(mangled); if (!compiler_visit_expr(c, default_)) { return -1; } -- cgit v0.12