From 7d085cca4be9c7292fbf58c75b2c49d7d06f79fe Mon Sep 17 00:00:00 2001 From: nobu Date: Fri, 28 Apr 2017 08:06:33 +0000 Subject: parse.y: fix line in rescue * parse.y (set_line_body, primary): fix line number of bodystmt as the beginning of the block. [ruby-core:79388] [Bug #13181] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58499 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- parse.y | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) (limited to 'parse.y') diff --git a/parse.y b/parse.y index 86486ac38a..538a3b17db 100644 --- a/parse.y +++ b/parse.y @@ -327,6 +327,17 @@ parser_set_line(NODE *n, int l) nd_set_line(n, l); } +static inline void +set_line_body(NODE *body, int line) +{ + if (!body) return; + switch (nd_type(body)) { + case NODE_RESCUE: + case NODE_ENSURE: + nd_set_line(body, line); + } +} + #ifndef RIPPER #define yyparse ruby_yyparse @@ -2463,9 +2474,7 @@ primary : literal $$ = NEW_NIL(); } else { - if (nd_type($3) == NODE_RESCUE || - nd_type($3) == NODE_ENSURE) - nd_set_line($3, $2); + set_line_body($3, $2); $$ = NEW_BEGIN($3); } nd_set_line($$, $2); @@ -2742,6 +2751,7 @@ primary : literal { /*%%%*/ $$ = NEW_CLASS($2, $5, $3); + set_line_body($5, $4); nd_set_line($$, $4); /*% $$ = dispatch3(class, $2, $3, $5); @@ -2761,6 +2771,7 @@ primary : literal { /*%%%*/ $$ = NEW_SCLASS($3, $6); + set_line_body($6, nd_line($3)); fixpos($$, $3); /*% $$ = dispatch2(sclass, $3, $6); @@ -2784,6 +2795,7 @@ primary : literal { /*%%%*/ $$ = NEW_MODULE($2, $4); + set_line_body($4, $3); nd_set_line($$, $3); /*% $$ = dispatch2(module, $2, $4); @@ -2808,6 +2820,7 @@ primary : literal NODE *body = remove_begin($6); reduce_nodes(&body); $$ = NEW_DEFN($2, $5, body, METHOD_VISI_PRIVATE); + set_line_body(body, $1); nd_set_line($$, $1); /*% $$ = dispatch3(def, $2, $5, $6); @@ -2833,6 +2846,7 @@ primary : literal NODE *body = remove_begin($8); reduce_nodes(&body); $$ = NEW_DEFS($2, $5, $7, body); + set_line_body(body, $1); nd_set_line($$, $1); /*% $$ = dispatch5(defs, $2, $3, $5, $7, $8); -- cgit v1.2.3