[Python-checkins] Fix `SyntaxError` indicator printing too many spaces for multi-line strings (GH-14433)
Miss Islington (bot)
webhook-mailer at python.org
Mon Jul 29 10:19:09 EDT 2019
https://github.com/python/cpython/commit/cf52bd0b9b1c1b7ecdd91e1ebebd15ae5c213a2c
commit: cf52bd0b9b1c1b7ecdd91e1ebebd15ae5c213a2c
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: GitHub <noreply at github.com>
date: 2019-07-29T07:18:47-07:00
summary:
Fix `SyntaxError` indicator printing too many spaces for multi-line strings (GH-14433)
(cherry picked from commit 5b94f3578c662d5f1ee90c0e6b81481d9ec82d89)
Co-authored-by: Anthony Sottile <asottile at umich.edu>
files:
A Misc/NEWS.d/next/Core and Builtins/2019-06-27-15-01-14.bpo-37433.amNGqr.rst
M Lib/test/test_cmd_line_script.py
M Parser/tokenizer.c
diff --git a/Lib/test/test_cmd_line_script.py b/Lib/test/test_cmd_line_script.py
index d138ca027c68..4cc265e60b66 100644
--- a/Lib/test/test_cmd_line_script.py
+++ b/Lib/test/test_cmd_line_script.py
@@ -601,6 +601,20 @@ def test_syntaxerror_indented_caret_position(self):
self.assertNotIn("\f", text)
self.assertIn("\n 1 + 1 = 2\n ^", text)
+ def test_syntaxerror_multi_line_fstring(self):
+ script = 'foo = f"""{}\nfoo"""\n'
+ with support.temp_dir() as script_dir:
+ script_name = _make_test_script(script_dir, 'script', script)
+ exitcode, stdout, stderr = assert_python_failure(script_name)
+ self.assertEqual(
+ stderr.splitlines()[-3:],
+ [
+ b' foo = f"""{}',
+ b' ^',
+ b'SyntaxError: f-string: empty expression not allowed',
+ ],
+ )
+
def test_consistent_sys_path_for_direct_execution(self):
# This test case ensures that the following all give the same
# sys.path configuration:
diff --git a/Misc/NEWS.d/next/Core and Builtins/2019-06-27-15-01-14.bpo-37433.amNGqr.rst b/Misc/NEWS.d/next/Core and Builtins/2019-06-27-15-01-14.bpo-37433.amNGqr.rst
new file mode 100644
index 000000000000..794ddbbfec73
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2019-06-27-15-01-14.bpo-37433.amNGqr.rst
@@ -0,0 +1 @@
+Fix ``SyntaxError`` indicator printing too many spaces for multi-line strings - by Anthony Sottile.
diff --git a/Parser/tokenizer.c b/Parser/tokenizer.c
index c2ec659fed88..31fe970c9003 100644
--- a/Parser/tokenizer.c
+++ b/Parser/tokenizer.c
@@ -956,6 +956,7 @@ tok_nextc(struct tok_state *tok)
while (!done) {
Py_ssize_t curstart = tok->start == NULL ? -1 :
tok->start - tok->buf;
+ Py_ssize_t cur_multi_line_start = tok->multi_line_start - tok->buf;
Py_ssize_t curvalid = tok->inp - tok->buf;
Py_ssize_t newsize = curvalid + BUFSIZ;
char *newbuf = tok->buf;
@@ -968,6 +969,7 @@ tok_nextc(struct tok_state *tok)
}
tok->buf = newbuf;
tok->cur = tok->buf + cur;
+ tok->multi_line_start = tok->buf + cur_multi_line_start;
tok->line_start = tok->cur;
tok->inp = tok->buf + curvalid;
tok->end = tok->buf + newsize;
More information about the Python-checkins
mailing list