[pypy-commit] pypy stdlib-3.2.5: mangle keyword-only argname when loading defaults (CPython issue #14607)

amauryfa noreply at buildbot.pypy.org
Wed Apr 2 02:58:11 CEST 2014


Author: Amaury Forgeot d'Arc <amauryfa at gmail.com>
Branch: stdlib-3.2.5
Changeset: r70391:a15b2d272f8e
Date: 2014-04-02 01:15 +0200
http://bitbucket.org/pypy/pypy/changeset/a15b2d272f8e/

Log:	mangle keyword-only argname when loading defaults (CPython issue
	#14607)

diff --git a/pypy/interpreter/astcompiler/codegen.py b/pypy/interpreter/astcompiler/codegen.py
--- a/pypy/interpreter/astcompiler/codegen.py
+++ b/pypy/interpreter/astcompiler/codegen.py
@@ -306,7 +306,8 @@
         for i, default in enumerate(args.kw_defaults):
             if default:
                 kwonly = args.kwonlyargs[i]
-                self.load_const(self.space.wrap(kwonly.arg.decode('utf-8')))
+                mangled = self.scope.mangle(kwonly.arg.decode('utf-8'))
+                self.load_const(self.space.wrap(mangled))
                 default.walkabout(self)
                 defaults += 1
         return defaults
diff --git a/pypy/interpreter/test/test_interpreter.py b/pypy/interpreter/test/test_interpreter.py
--- a/pypy/interpreter/test/test_interpreter.py
+++ b/pypy/interpreter/test/test_interpreter.py
@@ -347,6 +347,14 @@
         assert l(1, 2, k=10) == 1 + 2 + 10
         """
 
+    def test_kwonlyarg_mangling(self):
+        """
+        class X:
+            def f(self, *, __a=42):
+                return __a
+        assert X().f() == 42
+        """
+
     def test_extended_unpacking_short(self):
         """
         class Seq:


More information about the pypy-commit mailing list