mirror of
https://github.com/python/cpython.git
synced 2025-11-18 01:57:37 +00:00
bpo-43950: make BinOp specializations more reliable (GH-27126)
This commit is contained in:
parent
074e7659f2
commit
919ad53751
3 changed files with 40 additions and 2 deletions
|
|
@ -485,6 +485,44 @@ class TracebackErrorLocationCaretTests(unittest.TestCase):
|
||||||
)
|
)
|
||||||
self.assertEqual(result_lines, expected_error.splitlines())
|
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
|
@cpython_only
|
||||||
@requires_debug_ranges()
|
@requires_debug_ranges()
|
||||||
class CPythonTracebackErrorCaretTests(TracebackErrorLocationCaretTests):
|
class CPythonTracebackErrorCaretTests(TracebackErrorLocationCaretTests):
|
||||||
|
|
|
||||||
|
|
@ -496,7 +496,7 @@ class StackSummary(list):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
anchors = _extract_caret_anchors_from_line_segment(
|
anchors = _extract_caret_anchors_from_line_segment(
|
||||||
frame._original_line[colno - 1:end_colno]
|
frame._original_line[colno - 1:end_colno - 1]
|
||||||
)
|
)
|
||||||
except Exception:
|
except Exception:
|
||||||
anchors = None
|
anchors = None
|
||||||
|
|
|
||||||
|
|
@ -543,7 +543,7 @@ extract_anchors_from_expr(const char *segment_str, expr_ty expr, Py_ssize_t *lef
|
||||||
case BinOp_kind: {
|
case BinOp_kind: {
|
||||||
expr_ty left = expr->v.BinOp.left;
|
expr_ty left = expr->v.BinOp.left;
|
||||||
expr_ty right = expr->v.BinOp.right;
|
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])) {
|
if (IS_WHITESPACE(segment_str[i])) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue