aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLysandros Nikolaou <lisandrosnik@gmail.com>2020-05-04 14:32:18 +0300
committerGitHub <noreply@github.com>2020-05-04 12:32:18 +0100
commit846d8b28ab9bb6197ee81372820311c0abe509c0 (patch)
treebbcdb73b768194661bef017b18aed9e870d98c24
parente10e7c771bf06112c4a311e0ef6b8af6423b0cca (diff)
downloadcpython3-846d8b28ab9bb6197ee81372820311c0abe509c0.tar.gz
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.
-rw-r--r--Include/errcode.h1
-rw-r--r--Lib/test/test_fstring.py2
-rw-r--r--Misc/NEWS.d/next/Core and Builtins/2020-05-03-23-28-11.bpo-40246.c1D7x8.rst1
-rw-r--r--Parser/pegen/pegen.c3
-rw-r--r--Parser/tokenizer.c4
-rw-r--r--Python/pythonrun.c3
6 files changed, 2 insertions, 12 deletions
diff --git a/Include/errcode.h b/Include/errcode.h
index 9af8d5c03d..b37cd261d5 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 fe465b7e1d..ac5aa9a76e 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 0000000000..62cd632ffd
--- /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 391f9b91ea..c311593af7 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 95dfc53880..0f2b6af5e5 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 79147e430a..1b79a33c81 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";