mirror of https://github.com/python/cpython
mangle keyword-only argname when loading defaults (closes #14607)
This commit is contained in:
parent
ab2d58eefa
commit
32c59b6fc1
|
@ -170,6 +170,12 @@ class KeywordOnlyArgTestCase(unittest.TestCase):
|
||||||
# used to fail with a SystemError.
|
# used to fail with a SystemError.
|
||||||
lambda *, k1=unittest: None
|
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():
|
def test_main():
|
||||||
run_unittest(KeywordOnlyArgTestCase)
|
run_unittest(KeywordOnlyArgTestCase)
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,8 @@ What's New in Python 3.2.4
|
||||||
Core and Builtins
|
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
|
- 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
|
any of the dtoa.c string <-> float conversion functions, on MSVC builds of
|
||||||
Python. This fixes issues when embedding Python in a Delphi app.
|
Python. This fixes issues when embedding Python in a Delphi app.
|
||||||
|
|
|
@ -1319,7 +1319,11 @@ compiler_visit_kwonlydefaults(struct compiler *c, asdl_seq *kwonlyargs,
|
||||||
arg_ty arg = asdl_seq_GET(kwonlyargs, i);
|
arg_ty arg = asdl_seq_GET(kwonlyargs, i);
|
||||||
expr_ty default_ = asdl_seq_GET(kw_defaults, i);
|
expr_ty default_ = asdl_seq_GET(kw_defaults, i);
|
||||||
if (default_) {
|
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_)) {
|
if (!compiler_visit_expr(c, default_)) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue