[Python-checkins] cpython (3.2): mangle keyword-only argname when loading defaults (closes #14607)

benjamin.peterson python-checkins at python.org
Wed Apr 18 01:54:29 CEST 2012


http://hg.python.org/cpython/rev/f8540b8d076c
changeset:   76382:f8540b8d076c
branch:      3.2
parent:      76377:428bece48029
user:        Benjamin Peterson <benjamin at python.org>
date:        Tue Apr 17 19:53:21 2012 -0400
summary:
  mangle keyword-only argname when loading defaults (closes #14607)

files:
  Lib/test/test_keywordonlyarg.py |  6 ++++++
  Misc/NEWS                       |  2 ++
  Python/compile.c                |  6 +++++-
  3 files changed, 13 insertions(+), 1 deletions(-)


diff --git a/Lib/test/test_keywordonlyarg.py b/Lib/test/test_keywordonlyarg.py
--- a/Lib/test/test_keywordonlyarg.py
+++ b/Lib/test/test_keywordonlyarg.py
@@ -170,6 +170,12 @@
         # 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
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,8 @@
 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
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -1319,7 +1319,11 @@
         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;
             }

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list