diff options
author | Guido van Rossum <guido@python.org> | 2018-01-26 08:20:18 -0800 |
---|---|---|
committer | Ćukasz Langa <lukasz@langa.pl> | 2018-01-26 08:20:18 -0800 |
commit | 95e4d589137260530e18ef98a2ed84ee3ec57e12 (patch) | |
tree | 9d0c3bc48158e9f0c83f1b9cb509c1fbebd9cfde /Python/compile.c | |
parent | d7773d92bd11640a8c950d6c36a9cef1cee36f96 (diff) | |
download | cpython-git-95e4d589137260530e18ef98a2ed84ee3ec57e12.tar.gz |
String annotations [PEP 563] (#4390)
* Document `from __future__ import annotations`
* Provide plumbing and tests for `from __future__ import annotations`
* Implement unparsing the AST back to string form
This is required for PEP 563 and as such only implements a part of the
unparsing process that covers expressions.
Diffstat (limited to 'Python/compile.c')
-rw-r--r-- | Python/compile.c | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/Python/compile.c b/Python/compile.c index 31efc28da4..3e8323b933 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -1700,12 +1700,29 @@ error: } static int +compiler_visit_annexpr(struct compiler *c, expr_ty annotation) +{ + PyObject *ann_as_str; + ann_as_str = _PyAST_ExprAsUnicode(annotation, 1); + if (!ann_as_str) { + return 0; + } + ADDOP_N(c, LOAD_CONST, ann_as_str, consts); + return 1; +} + +static int compiler_visit_argannotation(struct compiler *c, identifier id, expr_ty annotation, PyObject *names) { if (annotation) { PyObject *mangled; - VISIT(c, expr, annotation); + if (c->c_future->ff_features & CO_FUTURE_ANNOTATIONS) { + VISIT(c, annexpr, annotation) + } + else { + VISIT(c, expr, annotation); + } mangled = _Py_Mangle(c->u->u_private, id); if (!mangled) return 0; @@ -4688,7 +4705,12 @@ compiler_annassign(struct compiler *c, stmt_ty s) if (!mangled) { return 0; } - VISIT(c, expr, s->v.AnnAssign.annotation); + if (c->c_future->ff_features & CO_FUTURE_ANNOTATIONS) { + VISIT(c, annexpr, s->v.AnnAssign.annotation) + } + else { + VISIT(c, expr, s->v.AnnAssign.annotation); + } /* ADDOP_N decrefs its argument */ ADDOP_N(c, STORE_ANNOTATION, mangled, names); } |