[2.7] bpo-33308: Fix a crash in the parser module when convert an ST object. (GH-6519) by serhiy-storchaka · Pull Request #6532 · python/cpython

Expand Up @@ -263,21 +263,19 @@ def test_position(self): # An absolutely minimal test of position information. Better # tests would be a big project. code = "def f(x):\n return x + 1" st1 = parser.suite(code) st2 = st1.totuple(line_info=1, col_info=1) st = parser.suite(code)
def walk(tree): node_type = tree[0] next = tree[1] if isinstance(next, tuple): if isinstance(next, (tuple, list)): for elt in tree[1:]: for x in walk(elt): yield x else: yield tree
terminals = list(walk(st2)) self.assertEqual([ expected = [ (1, 'def', 1, 0), (1, 'f', 1, 4), (7, '(', 1, 5), Expand All @@ -293,8 +291,25 @@ def walk(tree): (4, '', 2, 16), (6, '', 2, -1), (4, '', 2, -1), (0, '', 2, -1)], terminals) (0, '', 2, -1), ]
self.assertEqual(list(walk(st.totuple(line_info=True, col_info=True))), expected) self.assertEqual(list(walk(st.totuple())), [(t, n) for t, n, l, c in expected]) self.assertEqual(list(walk(st.totuple(line_info=True))), [(t, n, l) for t, n, l, c in expected]) self.assertEqual(list(walk(st.totuple(col_info=True))), [(t, n, c) for t, n, l, c in expected]) self.assertEqual(list(walk(st.tolist(line_info=True, col_info=True))), [list(x) for x in expected]) self.assertEqual(list(walk(parser.st2tuple(st, line_info=True, col_info=True))), expected) self.assertEqual(list(walk(parser.st2list(st, line_info=True, col_info=True))), [list(x) for x in expected])

# Expand Down