bpo-34876: Change the lineno of the AST for decorated function and cl… · python/cpython@95b6acf (original) (raw)
`@@ -124,6 +124,12 @@ def to_tuple(t):
`
124
124
`"{*{1, 2}, 3}",
`
125
125
`# Asynchronous comprehensions
`
126
126
`"async def f():\n [i async for b in c]",
`
``
127
`+
Decorated FunctionDef
`
``
128
`+
"@deco1\n@deco2()\ndef f(): pass",
`
``
129
`+
Decorated AsyncFunctionDef
`
``
130
`+
"@deco1\n@deco2()\nasync def f(): pass",
`
``
131
`+
Decorated ClassDef
`
``
132
`+
"@deco1\n@deco2()\nclass C: pass",
`
127
133
`]
`
128
134
``
129
135
`# These are compiled through "single"
`
`@@ -203,13 +209,16 @@ def _assertTrueorder(self, ast_node, parent_pos):
`
203
209
`return
`
204
210
`if isinstance(ast_node, (ast.expr, ast.stmt, ast.excepthandler)):
`
205
211
`node_pos = (ast_node.lineno, ast_node.col_offset)
`
206
``
`-
self.assertTrue(node_pos >= parent_pos)
`
``
212
`+
self.assertGreaterEqual(node_pos, parent_pos)
`
207
213
`parent_pos = (ast_node.lineno, ast_node.col_offset)
`
208
214
`for name in ast_node._fields:
`
209
215
`value = getattr(ast_node, name)
`
210
216
`if isinstance(value, list):
`
``
217
`+
first_pos = parent_pos
`
``
218
`+
if value and name == 'decorator_list':
`
``
219
`+
first_pos = (value[0].lineno, value[0].col_offset)
`
211
220
`for child in value:
`
212
``
`-
self._assertTrueorder(child, parent_pos)
`
``
221
`+
self._assertTrueorder(child, first_pos)
`
213
222
`elif value is not None:
`
214
223
`self._assertTrueorder(value, parent_pos)
`
215
224
``
`@@ -1289,6 +1298,9 @@ def main():
`
1289
1298
`('Module', [('Expr', (1, 0), ('Dict', (1, 0), [None, ('Constant', (1, 10), 2)], [('Dict', (1, 3), [('Constant', (1, 4), 1)], [('Constant', (1, 6), 2)]), ('Constant', (1, 12), 3)]))]),
`
1290
1299
`('Module', [('Expr', (1, 0), ('Set', (1, 0), [('Starred', (1, 1), ('Set', (1, 2), [('Constant', (1, 3), 1), ('Constant', (1, 6), 2)]), ('Load',)), ('Constant', (1, 10), 3)]))]),
`
1291
1300
`('Module', [('AsyncFunctionDef', (1, 0), 'f', ('arguments', [], None, [], [], None, []), [('Expr', (2, 1), ('ListComp', (2, 2), ('Name', (2, 2), 'i', ('Load',)), [('comprehension', ('Name', (2, 14), 'b', ('Store',)), ('Name', (2, 19), 'c', ('Load',)), [], 1)]))], [], None)]),
`
``
1301
`+
('Module', [('FunctionDef', (3, 0), 'f', ('arguments', [], None, [], [], None, []), [('Pass', (3, 9))], [('Name', (1, 1), 'deco1', ('Load',)), ('Call', (2, 0), ('Name', (2, 1), 'deco2', ('Load',)), [], [])], None)]),
`
``
1302
`+
('Module', [('AsyncFunctionDef', (3, 0), 'f', ('arguments', [], None, [], [], None, []), [('Pass', (3, 15))], [('Name', (1, 1), 'deco1', ('Load',)), ('Call', (2, 0), ('Name', (2, 1), 'deco2', ('Load',)), [], [])], None)]),
`
``
1303
`+
('Module', [('ClassDef', (3, 0), 'C', [], [], [('Pass', (3, 9))], [('Name', (1, 1), 'deco1', ('Load',)), ('Call', (2, 0), ('Name', (2, 1), 'deco2', ('Load',)), [], [])])]),
`
1292
1304
`]
`
1293
1305
`single_results = [
`
1294
1306
`('Interactive', [('Expr', (1, 0), ('BinOp', (1, 0), ('Constant', (1, 0), 1), ('Add',), ('Constant', (1, 2), 2)))]),
`