diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2016-12-11 17:37:19 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2016-12-11 17:37:19 (GMT) |
commit | 4cc30ae31341ba233a861899be7d225519c71830 (patch) | |
tree | 0743a75a586d301a15f37355a567488eee239618 /Python/ast.c | |
parent | 8114f21668fe9775d2542d079c6396a745f4f094 (diff) | |
download | cpython-4cc30ae31341ba233a861899be7d225519c71830.zip cpython-4cc30ae31341ba233a861899be7d225519c71830.tar.gz cpython-4cc30ae31341ba233a861899be7d225519c71830.tar.bz2 |
Issue #28739: f-string expressions no longer accepted as docstrings and
by ast.literal_eval() even if they do not include subexpressions.
Diffstat (limited to 'Python/ast.c')
-rw-r--r-- | Python/ast.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/Python/ast.c b/Python/ast.c index 82f4529..217ea14 100644 --- a/Python/ast.c +++ b/Python/ast.c @@ -4789,6 +4789,7 @@ ExprList_Finish(ExprList *l, PyArena *arena) typedef struct { PyObject *last_str; ExprList expr_list; + int fmode; } FstringParser; #ifdef NDEBUG @@ -4807,6 +4808,7 @@ static void FstringParser_Init(FstringParser *state) { state->last_str = NULL; + state->fmode = 0; ExprList_Init(&state->expr_list); FstringParser_check_invariants(state); } @@ -4869,6 +4871,7 @@ FstringParser_ConcatFstring(FstringParser *state, const char **str, struct compiling *c, const node *n) { FstringParser_check_invariants(state); + state->fmode = 1; /* Parse the f-string. */ while (1) { @@ -4960,7 +4963,8 @@ FstringParser_Finish(FstringParser *state, struct compiling *c, /* If we're just a constant string with no expressions, return that. */ - if(state->expr_list.size == 0) { + if (!state->fmode) { + assert(!state->expr_list.size); if (!state->last_str) { /* Create a zero length string. */ state->last_str = PyUnicode_FromStringAndSize(NULL, 0); @@ -4984,11 +4988,6 @@ FstringParser_Finish(FstringParser *state, struct compiling *c, if (!seq) goto error; - /* If there's only one expression, return it. Otherwise, we need - to join them together. */ - if (seq->size == 1) - return seq->elements[0]; - return JoinedStr(seq, LINENO(n), n->n_col_offset, c->c_arena); error: |