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)))]),

`