From 846d8b28ab9bb6197ee81372820311c0abe509c0 Mon Sep 17 00:00:00 2001 From: Lysandros Nikolaou Date: Mon, 4 May 2020 14:32:18 +0300 Subject: [PATCH] bpo-40246: Revert reporting of invalid string prefixes (GH-19888) Due to backwards compatibility concerns regarding keywords immediately followed by a string without whitespace between them (like in `bg="#d00" if clear else"#fca"`) will fail to parse, commit 41d5b94af44e34ac05d4cd57460ed104ccf96628 has to be reverted. --- Include/errcode.h | 1 - Lib/test/test_fstring.py | 2 +- .../2020-05-03-23-28-11.bpo-40246.c1D7x8.rst | 1 + Parser/pegen/pegen.c | 3 --- Parser/tokenizer.c | 4 ---- Python/pythonrun.c | 3 --- 6 files changed, 2 insertions(+), 12 deletions(-) create mode 100644 Misc/NEWS.d/next/Core and Builtins/2020-05-03-23-28-11.bpo-40246.c1D7x8.rst diff --git a/Include/errcode.h b/Include/errcode.h index 9af8d5c03d5..b37cd261d5e 100644 --- a/Include/errcode.h +++ b/Include/errcode.h @@ -31,7 +31,6 @@ extern "C" { #define E_LINECONT 25 /* Unexpected characters after a line continuation */ #define E_IDENTIFIER 26 /* Invalid characters in identifier */ #define E_BADSINGLE 27 /* Ill-formed single statement input */ -#define E_BADPREFIX 28 /* Bad string prefixes */ #ifdef __cplusplus } diff --git a/Lib/test/test_fstring.py b/Lib/test/test_fstring.py index fe465b7e1d4..ac5aa9a76ef 100644 --- a/Lib/test/test_fstring.py +++ b/Lib/test/test_fstring.py @@ -864,7 +864,7 @@ non-important content "Bf''", "BF''",] double_quote_cases = [case.replace("'", '"') for case in single_quote_cases] - self.assertAllRaise(SyntaxError, 'invalid string prefix', + self.assertAllRaise(SyntaxError, 'unexpected EOF while parsing', single_quote_cases + double_quote_cases) def test_leading_trailing_spaces(self): diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-05-03-23-28-11.bpo-40246.c1D7x8.rst b/Misc/NEWS.d/next/Core and Builtins/2020-05-03-23-28-11.bpo-40246.c1D7x8.rst new file mode 100644 index 00000000000..62cd632ffd0 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2020-05-03-23-28-11.bpo-40246.c1D7x8.rst @@ -0,0 +1 @@ +Reporting a specialised error message for invalid string prefixes, which was introduced in :issue:`40246`, is being reverted due to backwards compatibility concerns for strings that immediately follow a reserved keyword without whitespace between them. Constructs like `bg="#d00" if clear else"#fca"` were failing to parse, which is not an acceptable breakage on such short notice. diff --git a/Parser/pegen/pegen.c b/Parser/pegen/pegen.c index 391f9b91eab..c311593af70 100644 --- a/Parser/pegen/pegen.c +++ b/Parser/pegen/pegen.c @@ -334,9 +334,6 @@ tokenizer_error(Parser *p) case E_IDENTIFIER: msg = "invalid character in identifier"; break; - case E_BADPREFIX: - RAISE_SYNTAX_ERROR("invalid string prefix"); - return -1; case E_EOFS: RAISE_SYNTAX_ERROR("EOF while scanning triple-quoted string literal"); return -1; diff --git a/Parser/tokenizer.c b/Parser/tokenizer.c index 95dfc538803..0f2b6af5e50 100644 --- a/Parser/tokenizer.c +++ b/Parser/tokenizer.c @@ -1396,10 +1396,6 @@ tok_get(struct tok_state *tok, const char **p_start, const char **p_end) *p_start = tok->start; *p_end = tok->cur; - if (c == '"' || c == '\'') { - tok->done = E_BADPREFIX; - return ERRORTOKEN; - } /* async/await parsing block. */ if (tok->cur - tok->start == 5 && tok->start[0] == 'a') { /* May be an 'async' or 'await' token. For Python 3.7 or diff --git a/Python/pythonrun.c b/Python/pythonrun.c index 79147e430a1..1b79a33c814 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -1609,9 +1609,6 @@ err_input(perrdetail *err) case E_BADSINGLE: msg = "multiple statements found while compiling a single statement"; break; - case E_BADPREFIX: - msg = "invalid string prefix"; - break; default: fprintf(stderr, "error=%d\n", err->error); msg = "unknown parsing error";