summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Peterson <benjamin@python.org>2012-04-17 23:54:35 (GMT)
committerBenjamin Peterson <benjamin@python.org>2012-04-17 23:54:35 (GMT)
commit2a1fdc4c760bf862accf625558e9bf54b9b9cd7c (patch)
tree86069f9cb1c3d0b9f74f9d3d3c6771dc64e8f833
parent64befe939c1da377053f6a410f082db02184c5e2 (diff)
parent32c59b6fc1140486a9915876054365b40bd88da9 (diff)
downloadcpython-2a1fdc4c760bf862accf625558e9bf54b9b9cd7c.zip
cpython-2a1fdc4c760bf862accf625558e9bf54b9b9cd7c.tar.gz
cpython-2a1fdc4c760bf862accf625558e9bf54b9b9cd7c.tar.bz2
merge 3.2 (#14607)
-rw-r--r--Lib/test/test_keywordonlyarg.py6
-rw-r--r--Misc/NEWS2
-rw-r--r--Python/compile.c6
3 files changed, 13 insertions, 1 deletions
diff --git a/Lib/test/test_keywordonlyarg.py b/Lib/test/test_keywordonlyarg.py
index 61d40f9..0503a7f 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 9f0009f..60471a4 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -13,6 +13,8 @@ Core and Builtins
- Issue #14592: Attempting a relative import w/o __package__ or __name__ set in
globals raises a KeyError.
+- Issue #14607: Fix defaults keyword-only arguments which started with ``__``.
+
- Issue #10854: The ImportError raised when an extension module on Windows
fails to import now uses the new path and name attributes from
Issue #1559549.
diff --git a/Python/compile.c b/Python/compile.c
index 1722a5f..79d1d21 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -1409,7 +1409,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;
}