diff options
author | Pablo Galindo <Pablogsal@gmail.com> | 2019-12-14 10:55:00 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-12-14 10:55:00 +0000 |
commit | 4b75466f5a539021217cff18bc248c1593cee262 (patch) | |
tree | aec67ddba5a097c8d5df7d2902bcf6443eded211 | |
parent | 26892c7d5fc761a7f0e5523937283a3deaaead76 (diff) | |
download | cpython-git-4b75466f5a539021217cff18bc248c1593cee262.tar.gz |
[3.7] Fix elif start column offset when there is an else following (GH-17596) (GH-17601)
(cherry picked from commit 5936a4ce914d42af97b9238e5090dedc8d5b0bd2)
Co-authored-by: Lysandros Nikolaou <lisandrosnik@gmail.com>
-rw-r--r-- | Lib/test/test_ast.py | 9 | ||||
-rw-r--r-- | Python/ast.c | 4 |
2 files changed, 11 insertions, 2 deletions
diff --git a/Lib/test/test_ast.py b/Lib/test/test_ast.py index 0daa2f77dc..830fb58a02 100644 --- a/Lib/test/test_ast.py +++ b/Lib/test/test_ast.py @@ -66,6 +66,8 @@ exec_tests = [ "if v:pass", # If-Elif "if a:\n pass\nelif b:\n pass", + # If-Elif-Else + "if a:\n pass\nelif b:\n pass\nelse:\n pass", # With "with x as y: pass", "with x as y, z as q: pass", @@ -606,6 +608,12 @@ class ASTHelpers_Test(unittest.TestCase): self.assertEqual(elif_stmt.lineno, 3) self.assertEqual(elif_stmt.col_offset, 0) + def test_elif_stmt_start_position_with_else(self): + node = ast.parse('if a:\n pass\nelif b:\n pass\nelse:\n pass\n') + elif_stmt = node.body[0].orelse[0] + self.assertEqual(elif_stmt.lineno, 3) + self.assertEqual(elif_stmt.col_offset, 0) + def test_literal_eval(self): self.assertEqual(ast.literal_eval('[1, 2, 3]'), [1, 2, 3]) self.assertEqual(ast.literal_eval('{"foo": 42}'), {"foo": 42}) @@ -1244,6 +1252,7 @@ exec_results = [ ('Module', [('While', (1, 0), ('Name', (1, 6), 'v', ('Load',)), [('Pass', (1, 8))], [])]), ('Module', [('If', (1, 0), ('Name', (1, 3), 'v', ('Load',)), [('Pass', (1, 5))], [])]), ('Module', [('If', (1, 0), ('Name', (1, 3), 'a', ('Load',)), [('Pass', (2, 2))], [('If', (3, 0), ('Name', (3, 5), 'b', ('Load',)), [('Pass', (4, 2))], [])])]), +('Module', [('If', (1, 0), ('Name', (1, 3), 'a', ('Load',)), [('Pass', (2, 2))], [('If', (3, 0), ('Name', (3, 5), 'b', ('Load',)), [('Pass', (4, 2))], [('Pass', (6, 2))])])]), ('Module', [('With', (1, 0), [('withitem', ('Name', (1, 5), 'x', ('Load',)), ('Name', (1, 10), 'y', ('Store',)))], [('Pass', (1, 13))])]), ('Module', [('With', (1, 0), [('withitem', ('Name', (1, 5), 'x', ('Load',)), ('Name', (1, 10), 'y', ('Store',))), ('withitem', ('Name', (1, 13), 'z', ('Load',)), ('Name', (1, 18), 'q', ('Store',)))], [('Pass', (1, 21))])]), ('Module', [('Raise', (1, 0), ('Call', (1, 6), ('Name', (1, 6), 'Exception', ('Load',)), [('Str', (1, 16), 'string')], []), None)]), diff --git a/Python/ast.c b/Python/ast.c index d1b87d888e..9d8a3544bd 100644 --- a/Python/ast.c +++ b/Python/ast.c @@ -3601,8 +3601,8 @@ ast_for_if_stmt(struct compiling *c, const node *n) asdl_seq_SET(orelse, 0, If(expression, suite_seq, suite_seq2, - LINENO(CHILD(n, NCH(n) - 6)), - CHILD(n, NCH(n) - 6)->n_col_offset, + LINENO(CHILD(n, NCH(n) - 7)), + CHILD(n, NCH(n) - 7)->n_col_offset, c->c_arena)); /* the just-created orelse handled the last elif */ n_elif--; |