Commit 97c1bef6 authored by Amaury Forgeot d'Arc's avatar Amaury Forgeot d'Arc

Issue #13343: Fix a SystemError when a lambda expression uses a global

variable in the default value of a keyword-only argument:
(lambda *, arg=GLOBAL_NAME: None)
parent 3c85fe07
......@@ -162,6 +162,14 @@ class KeywordOnlyArgTestCase(unittest.TestCase):
self.assertEqual(Example.f(Example(), k1=1, k2=2), (1, 2))
self.assertRaises(TypeError, Example.f, k1=1, k2=2)
def test_issue13343(self):
# The Python compiler must scan all symbols of a function to
# determine their scope: global, local, cell...
# This was not done for the default values of keyword
# arguments in a lambda definition, and the following line
# used to fail with a SystemError.
lambda *, k1=unittest: None
def test_main():
run_unittest(KeywordOnlyArgTestCase)
......
......@@ -10,6 +10,10 @@ What's New in Python 3.2.3?
Core and Builtins
-----------------
- Issue #13343: Fix a SystemError when a lambda expression uses a global
variable in the default value of a keyword-only argument:
(lambda *, arg=GLOBAL_NAME: None)
- Issue #10519: Avoid unnecessary recursive function calls in
setobject.c.
......
......@@ -1334,6 +1334,9 @@ symtable_visit_expr(struct symtable *st, expr_ty e)
return 0;
if (e->v.Lambda.args->defaults)
VISIT_SEQ(st, expr, e->v.Lambda.args->defaults);
if (e->v.Lambda.args->kw_defaults)
VISIT_KWONLYDEFAULTS(st,
e->v.Lambda.args->kw_defaults);
if (!symtable_enter_block(st, lambda,
FunctionBlock, (void *)e, e->lineno,
e->col_offset))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment