summaryrefslogtreecommitdiff
path: root/parse.y
diff options
context:
space:
mode:
authornagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-11-03 01:46:59 +0000
committernagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-11-03 01:46:59 +0000
commit86bfcc2da07d524845fbfb3a458a84cc8bd3ecf1 (patch)
treef8253548080292e640e2405031c706cdff25b3f5 /parse.y
parent1281e56682692859e726e24fff30e44aac6f948b (diff)
merge revision(s) 58499,58500: [Backport #13181]
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] parse.y: set_line_body is not used in ripper git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_4@60626 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'parse.y')
-rw-r--r--parse.y20
1 files changed, 17 insertions, 3 deletions
diff --git a/parse.y b/parse.y
index cca5e58cde..ad70501fe3 100644
--- a/parse.y
+++ b/parse.y
@@ -397,6 +397,17 @@ static int parser_yyerror(struct parser_params*, const char*);
static int yylex(YYSTYPE*, struct parser_params*);
#ifndef RIPPER
+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);
+ }
+}
+
#define yyparse ruby_yyparse
static NODE* node_newnode(struct parser_params *, enum node_type, VALUE, VALUE, VALUE);
@@ -2644,9 +2655,7 @@ primary : literal
$$ = NEW_NIL();
}
else {
- if (nd_type($3) == NODE_RESCUE ||
- nd_type($3) == NODE_ENSURE)
- nd_set_line($3, $<num>2);
+ set_line_body($3, $<num>2);
$$ = NEW_BEGIN($3);
}
nd_set_line($$, $<num>2);
@@ -2931,6 +2940,7 @@ primary : literal
{
/*%%%*/
$$ = NEW_CLASS($2, $5, $3);
+ set_line_body($5, $<num>4);
nd_set_line($$, $<num>4);
/*%
$$ = dispatch3(class, $2, $3, $5);
@@ -2950,6 +2960,7 @@ primary : literal
{
/*%%%*/
$$ = NEW_SCLASS($3, $6);
+ set_line_body($6, nd_line($3));
fixpos($$, $3);
/*%
$$ = dispatch2(sclass, $3, $6);
@@ -2973,6 +2984,7 @@ primary : literal
{
/*%%%*/
$$ = NEW_MODULE($2, $4);
+ set_line_body($4, $<num>3);
nd_set_line($$, $<num>3);
/*%
$$ = dispatch2(module, $2, $4);
@@ -2997,6 +3009,7 @@ primary : literal
NODE *body = remove_begin($6);
reduce_nodes(&body);
$$ = NEW_DEFN($2, $5, body, METHOD_VISI_PRIVATE);
+ set_line_body(body, $<num>1);
nd_set_line($$, $<num>1);
/*%
$$ = dispatch3(def, $2, $5, $6);
@@ -3022,6 +3035,7 @@ primary : literal
NODE *body = remove_begin($8);
reduce_nodes(&body);
$$ = NEW_DEFS($2, $5, $7, body);
+ set_line_body(body, $<num>1);
nd_set_line($$, $<num>1);
/*%
$$ = dispatch5(defs, $2, $3, $5, $7, $8);