[Python-checkins] bpo-43950: make BinOp specializations more reliable (GH-27126)
pablogsal
webhook-mailer at python.org
Thu Jul 15 19:38:19 EDT 2021
https://github.com/python/cpython/commit/919ad537510fdc2c750109e0bc4eceea234324b2
commit: 919ad537510fdc2c750109e0bc4eceea234324b2
branch: main
author: Batuhan Taskaya <batuhan at python.org>
committer: pablogsal <Pablogsal at gmail.com>
date: 2021-07-16T00:38:11+01:00
summary:
bpo-43950: make BinOp specializations more reliable (GH-27126)
files:
M Lib/test/test_traceback.py
M Lib/traceback.py
M Python/traceback.c
diff --git a/Lib/test/test_traceback.py b/Lib/test/test_traceback.py
index 8baf38c1afd5d..402f773814ec4 100644
--- a/Lib/test/test_traceback.py
+++ b/Lib/test/test_traceback.py
@@ -485,6 +485,44 @@ def test_traceback_specialization_with_syntax_error(self):
)
self.assertEqual(result_lines, expected_error.splitlines())
+ def assertSpecialized(self, func, expected_specialization):
+ result_lines = self.get_exception(func)
+ specialization_line = result_lines[-1]
+ self.assertEqual(specialization_line.lstrip(), expected_specialization)
+
+ def test_specialization_variations(self):
+ self.assertSpecialized(lambda: 1/0,
+ "~^~")
+ self.assertSpecialized(lambda: 1/0/3,
+ "~^~")
+ self.assertSpecialized(lambda: 1 / 0,
+ "~~^~~")
+ self.assertSpecialized(lambda: 1 / 0 / 3,
+ "~~^~~")
+ self.assertSpecialized(lambda: 1/ 0,
+ "~^~~")
+ self.assertSpecialized(lambda: 1/ 0/3,
+ "~^~~")
+ self.assertSpecialized(lambda: 1 / 0,
+ "~~~~~^~~~")
+ self.assertSpecialized(lambda: 1 / 0 / 5,
+ "~~~~~^~~~")
+ self.assertSpecialized(lambda: 1 /0,
+ "~~^~")
+ self.assertSpecialized(lambda: 1//0,
+ "~^^~")
+ self.assertSpecialized(lambda: 1//0//4,
+ "~^^~")
+ self.assertSpecialized(lambda: 1 // 0,
+ "~~^^~~")
+ self.assertSpecialized(lambda: 1 // 0 // 4,
+ "~~^^~~")
+ self.assertSpecialized(lambda: 1 //0,
+ "~~^^~")
+ self.assertSpecialized(lambda: 1// 0,
+ "~^^~~")
+
+
@cpython_only
@requires_debug_ranges()
class CPythonTracebackErrorCaretTests(TracebackErrorLocationCaretTests):
diff --git a/Lib/traceback.py b/Lib/traceback.py
index ec5e20d431feb..40d736af56dd7 100644
--- a/Lib/traceback.py
+++ b/Lib/traceback.py
@@ -496,7 +496,7 @@ def format(self):
try:
anchors = _extract_caret_anchors_from_line_segment(
- frame._original_line[colno - 1:end_colno]
+ frame._original_line[colno - 1:end_colno - 1]
)
except Exception:
anchors = None
diff --git a/Python/traceback.c b/Python/traceback.c
index 199d3ea7596bf..643096c81fc8f 100644
--- a/Python/traceback.c
+++ b/Python/traceback.c
@@ -543,7 +543,7 @@ extract_anchors_from_expr(const char *segment_str, expr_ty expr, Py_ssize_t *lef
case BinOp_kind: {
expr_ty left = expr->v.BinOp.left;
expr_ty right = expr->v.BinOp.right;
- for (int i = left->end_col_offset + 1; i < right->col_offset; i++) {
+ for (int i = left->end_col_offset; i < right->col_offset; i++) {
if (IS_WHITESPACE(segment_str[i])) {
continue;
}
More information about the Python-checkins
mailing list