diff options
author | Anthony Sottile <asottile@umich.edu> | 2020-01-05 01:57:21 (GMT) |
---|---|---|
committer | Pablo Galindo <Pablogsal@gmail.com> | 2020-01-05 01:57:21 (GMT) |
commit | ec007cb43faf5f33d06efbc28152c7fdcb2edb9c (patch) | |
tree | 4a5ee08f0316fdfca2910d9a869cced9b8fd5b07 | |
parent | 7dc72b8d4f2c9d1eed20f314fd6425eab66cbc89 (diff) | |
download | cpython-ec007cb43faf5f33d06efbc28152c7fdcb2edb9c.zip cpython-ec007cb43faf5f33d06efbc28152c7fdcb2edb9c.tar.gz cpython-ec007cb43faf5f33d06efbc28152c7fdcb2edb9c.tar.bz2 |
Fix SystemError when nested function has annotation on positional-only argument (GH-17826)
-rw-r--r-- | Lib/test/test_positional_only_arg.py | 7 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Core and Builtins/2020-01-04-17-25-34.bpo-39215.xiqiIz.rst | 2 | ||||
-rw-r--r-- | Python/symtable.c | 2 |
3 files changed, 11 insertions, 0 deletions
diff --git a/Lib/test/test_positional_only_arg.py b/Lib/test/test_positional_only_arg.py index 59b0b8f..63dee7c 100644 --- a/Lib/test/test_positional_only_arg.py +++ b/Lib/test/test_positional_only_arg.py @@ -15,6 +15,10 @@ def global_pos_only_and_normal(a, /, b): def global_pos_only_defaults(a=1, /, b=2): return a, b +def global_inner_has_pos_only(): + def f(x: int, /): ... + return f + class PositionalOnlyTestCase(unittest.TestCase): @@ -412,6 +416,9 @@ class PositionalOnlyTestCase(unittest.TestCase): self.assertEqual(C().method(), sentinel) + def test_annotations(self): + assert global_inner_has_pos_only().__annotations__ == {'x': int} + if __name__ == "__main__": unittest.main() diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-01-04-17-25-34.bpo-39215.xiqiIz.rst b/Misc/NEWS.d/next/Core and Builtins/2020-01-04-17-25-34.bpo-39215.xiqiIz.rst new file mode 100644 index 0000000..9a3178f --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2020-01-04-17-25-34.bpo-39215.xiqiIz.rst @@ -0,0 +1,2 @@ +Fix ``SystemError`` when nested function has annotation on positional-only +argument - by Anthony Sottile. diff --git a/Python/symtable.c b/Python/symtable.c index b871358..30482d9 100644 --- a/Python/symtable.c +++ b/Python/symtable.c @@ -1717,6 +1717,8 @@ static int symtable_visit_annotations(struct symtable *st, stmt_ty s, arguments_ty a, expr_ty returns) { + if (a->posonlyargs && !symtable_visit_argannotations(st, a->posonlyargs)) + return 0; if (a->args && !symtable_visit_argannotations(st, a->args)) return 0; if (a->vararg && a->vararg->annotation) |