@@ -373,10 +373,7 @@ def read_statement(state: State, data: ReadBuffer) -> Statement:
373373 return stmt
374374 elif tag == nodes .EXPR_STMT :
375375 es = ExpressionStmt (read_expression (state , data ))
376- es .line = es .expr .line
377- es .column = es .expr .column
378- es .end_line = es .expr .end_line
379- es .end_column = es .expr .end_column
376+ set_line_column_range (es , es .expr )
380377 expect_end_tag (data )
381378 return es
382379 elif tag == nodes .ASSIGNMENT_STMT :
@@ -394,10 +391,7 @@ def read_statement(state: State, data: ReadBuffer) -> Statement:
394391 read_loc (data , a )
395392 # If rvalue is TempNode, copy location from AssignmentStmt
396393 if isinstance (rvalue , TempNode ):
397- rvalue .line = a .line
398- rvalue .column = a .column
399- rvalue .end_line = a .end_line
400- rvalue .end_column = a .end_column
394+ set_line_column_range (rvalue , a )
401395 expect_end_tag (data )
402396 return a
403397 elif tag == nodes .OPERATOR_ASSIGNMENT_STMT :
@@ -452,10 +446,7 @@ def read_statement(state: State, data: ReadBuffer) -> Statement:
452446
453447 # Wrap in a Block to become the else clause for the outer if
454448 current_else = Block ([elif_stmt ])
455- current_else .line = elif_stmt .line
456- current_else .column = elif_stmt .column
457- current_else .end_line = elif_stmt .end_line
458- current_else .end_column = elif_stmt .end_column
449+ set_line_column_range (current_else , elif_stmt )
459450
460451 # Create the main if statement
461452 if_stmt = IfStmt ([expr ], [body ], current_else )
@@ -724,10 +715,7 @@ def read_parameters(state: State, data: ReadBuffer) -> tuple[list[Argument], boo
724715 var .is_inferred = False
725716 arg = Argument (var , ann , default , arg_kind , pos_only )
726717 read_loc (data , arg )
727- var .line = arg .line
728- var .column = arg .column
729- var .end_line = arg .end_line
730- var .end_column = arg .end_column
718+ set_line_column_range (var , arg )
731719 arguments .append (arg )
732720
733721 return arguments , has_ann
@@ -924,10 +912,7 @@ def read_type_alias_stmt(state: State, data: ReadBuffer) -> TypeAliasStmt:
924912 # Wrap the value expression in a LambdaExpr as expected by TypeAliasStmt
925913 # The LambdaExpr body is a Block with a single ReturnStmt
926914 return_stmt = ReturnStmt (value_expr )
927- return_stmt .line = value_expr .line
928- return_stmt .column = value_expr .column
929- return_stmt .end_line = value_expr .end_line
930- return_stmt .end_column = value_expr .end_column
915+ set_line_column_range (return_stmt , value_expr )
931916
932917 block = Block ([return_stmt ])
933918 block .line = - 1 # Synthetic block
@@ -936,10 +921,7 @@ def read_type_alias_stmt(state: State, data: ReadBuffer) -> TypeAliasStmt:
936921 block .end_column = 0
937922
938923 lambda_expr = LambdaExpr ([], block )
939- lambda_expr .line = value_expr .line
940- lambda_expr .column = value_expr .column
941- lambda_expr .end_line = value_expr .end_line
942- lambda_expr .end_column = value_expr .end_column
924+ set_line_column_range (lambda_expr , value_expr )
943925
944926 stmt = TypeAliasStmt (name , type_params , lambda_expr )
945927 read_loc (data , stmt )
@@ -1368,21 +1350,15 @@ def read_expression(state: State, data: ReadBuffer) -> Expression:
13681350 expr = ListComprehension (generator )
13691351 read_loc (data , expr )
13701352 # Also copy location to the inner generator
1371- generator .line = expr .line
1372- generator .column = expr .column
1373- generator .end_line = expr .end_line
1374- generator .end_column = expr .end_column
1353+ set_line_column_range (generator , expr )
13751354 expect_end_tag (data )
13761355 return expr
13771356 elif tag == nodes .SET_COMPREHENSION :
13781357 generator = read_generator_expr (state , data )
13791358 expr = SetComprehension (generator )
13801359 read_loc (data , expr )
13811360 # Also copy location to the inner generator
1382- generator .line = expr .line
1383- generator .column = expr .column
1384- generator .end_line = expr .end_line
1385- generator .end_column = expr .end_column
1361+ set_line_column_range (generator , expr )
13861362 expect_end_tag (data )
13871363 return expr
13881364 elif tag == nodes .DICT_COMPREHENSION :
@@ -1703,6 +1679,13 @@ def set_line_column(target: Context, src: Context) -> None:
17031679 target .column = src .column
17041680
17051681
1682+ def set_line_column_range (target : Context , src : Context ) -> None :
1683+ target .line = src .line
1684+ target .column = src .column
1685+ target .end_line = src .end_line
1686+ target .end_column = src .end_column
1687+
1688+
17061689def read_expression_list (state : State , data : ReadBuffer ) -> list [Expression ]:
17071690 expect_tag (data , LIST_GEN )
17081691 n = read_int_bare (data )
@@ -1865,10 +1848,7 @@ def read_call_type(state: State, data: ReadBuffer) -> Type:
18651848
18661849 # Create CallableArgument
18671850 call_arg = CallableArgument (typ , name , constructor )
1868- call_arg .line = invalid .line
1869- call_arg .column = invalid .column
1870- call_arg .end_line = invalid .end_line
1871- call_arg .end_column = invalid .end_column
1851+ set_line_column_range (call_arg , invalid )
18721852 return call_arg
18731853
18741854
0 commit comments