parse.y: Fix locations of modifier_rescue

* parse.y: Fix to only include a range from modifier_rescue
  to stmt (or arg).

  e.g. The locations of the NODE_RESBODY is fixed:

  ```
  a rescue 1
  ```

  * Before

  ```
  NODE_RESBODY (line: 1, code_range: (1,0)-(1,10))
  ```

  * After

  ```
  NODE_RESBODY (line: 1, code_range: (1,2)-(1,10))
  ```

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61074 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
yui-knk 2017-12-08 00:33:38 +00:00
Родитель 3bc080bac9
Коммит c6b31b76ee
1 изменённых файлов: 12 добавлений и 3 удалений

15
parse.y
Просмотреть файл

@ -1453,7 +1453,10 @@ stmt : keyword_alias fitem {SET_LEX_STATE(EXPR_FNAME|EXPR_FITEM);} fitem
| stmt modifier_rescue stmt | stmt modifier_rescue stmt
{ {
/*%%%*/ /*%%%*/
NODE *resq = new_resbody(0, remove_begin($3), 0, &@$); YYLTYPE location;
location.first_loc = @2.first_loc;
location.last_loc = @3.last_loc;
NODE *resq = new_resbody(0, remove_begin($3), 0, &location);
$$ = new_rescue(remove_begin($1), resq, 0, &@$); $$ = new_rescue(remove_begin($1), resq, 0, &@$);
/*% /*%
$$ = dispatch2(rescue_mod, $1, $3); $$ = dispatch2(rescue_mod, $1, $3);
@ -1572,8 +1575,11 @@ command_rhs : command_call %prec tOP_ASGN
| command_call modifier_rescue stmt | command_call modifier_rescue stmt
{ {
/*%%%*/ /*%%%*/
YYLTYPE location;
location.first_loc = @2.first_loc;
location.last_loc = @3.last_loc;
value_expr($1); value_expr($1);
$$ = new_rescue($1, new_resbody(0, remove_begin($3), 0, &@$), 0, &@$); $$ = new_rescue($1, new_resbody(0, remove_begin($3), 0, &location), 0, &@$);
/*% /*%
$$ = dispatch2(rescue_mod, $1, $3); $$ = dispatch2(rescue_mod, $1, $3);
%*/ %*/
@ -2423,8 +2429,11 @@ arg_rhs : arg %prec tOP_ASGN
| arg modifier_rescue arg | arg modifier_rescue arg
{ {
/*%%%*/ /*%%%*/
YYLTYPE location;
location.first_loc = @2.first_loc;
location.last_loc = @3.last_loc;
value_expr($1); value_expr($1);
$$ = new_rescue($1, new_resbody(0, remove_begin($3), 0, &@$), 0, &@$); $$ = new_rescue($1, new_resbody(0, remove_begin($3), 0, &location), 0, &@$);
/*% /*%
$$ = dispatch2(rescue_mod, $1, $3); $$ = dispatch2(rescue_mod, $1, $3);
%*/ %*/