@@ -397,6 +397,17 @@ static int parser_yyerror(struct parser_params*, const char*);
397397static int yylex (YYSTYPE*, struct parser_params *);
398398
399399#ifndef RIPPER
400+ static inline void
401+ set_line_body (NODE *body, int line)
402+ {
403+ if (!body) return ;
404+ switch (nd_type (body)) {
405+ case NODE_RESCUE:
406+ case NODE_ENSURE:
407+ nd_set_line (body, line);
408+ }
409+ }
410+
400411#define yyparse ruby_yyparse
401412
402413static NODE* node_newnode (struct parser_params *, enum node_type, VALUE, VALUE, VALUE);
@@ -2644,9 +2655,7 @@ primary : literal
26442655 $$ = NEW_NIL();
26452656 }
26462657 else {
2647- if (nd_type($3 ) == NODE_RESCUE ||
2648- nd_type ($3 ) == NODE_ENSURE)
2649- nd_set_line($3 , $<num>2 );
2658+ set_line_body ($3 , $<num>2 );
26502659 $$ = NEW_BEGIN($3 );
26512660 }
26522661 nd_set_line ($$, $<num>2 );
@@ -2931,6 +2940,7 @@ primary : literal
29312940 {
29322941 /* %%%*/
29332942 $$ = NEW_CLASS($2 , $5 , $3 );
2943+ set_line_body ($5 , $<num>4 );
29342944 nd_set_line ($$, $<num>4 );
29352945 /* %
29362946 $$ = dispatch3(class, $2, $3, $5);
@@ -2950,6 +2960,7 @@ primary : literal
29502960 {
29512961 /* %%%*/
29522962 $$ = NEW_SCLASS($3 , $6 );
2963+ set_line_body ($6 , nd_line($3 ));
29532964 fixpos ($$, $3 );
29542965 /* %
29552966 $$ = dispatch2(sclass, $3, $6);
@@ -2973,6 +2984,7 @@ primary : literal
29732984 {
29742985 /* %%%*/
29752986 $$ = NEW_MODULE($2 , $4 );
2987+ set_line_body ($4 , $<num>3 );
29762988 nd_set_line ($$, $<num>3 );
29772989 /* %
29782990 $$ = dispatch2(module, $2, $4);
@@ -2997,6 +3009,7 @@ primary : literal
29973009 NODE *body = remove_begin($6 );
29983010 reduce_nodes (&body);
29993011 $$ = NEW_DEFN($2 , $5 , body, METHOD_VISI_PRIVATE);
3012+ set_line_body (body, $<num>1 );
30003013 nd_set_line ($$, $<num>1 );
30013014 /* %
30023015 $$ = dispatch3(def, $2, $5, $6);
@@ -3022,6 +3035,7 @@ primary : literal
30223035 NODE *body = remove_begin($8 );
30233036 reduce_nodes (&body);
30243037 $$ = NEW_DEFS($2 , $5 , $7 , body);
3038+ set_line_body (body, $<num>1 );
30253039 nd_set_line ($$, $<num>1 );
30263040 /* %
30273041 $$ = dispatch5(defs, $2, $3, $5, $7, $8);
0 commit comments