summaryrefslogtreecommitdiff
path: root/parse.y
diff options
context:
space:
mode:
authorJeremy Evans <code@jeremyevans.net>2019-08-08 20:02:54 -0700
committerJeremy Evans <code@jeremyevans.net>2019-08-09 09:25:30 -0700
commit53b3be5d58a9bf1efce229b3dce723f96e820c79 (patch)
treec0752c19a5477720720f12b9aaf2ccbb35594ad5 /parse.y
parentcecae8593abb79213f818078ee0361277401f86c (diff)
Fix parsing of mutiple assignment with rescue modifier
Single assignment with rescue modifier applies rescue to the RHS: a = raise rescue 1 # a = (raise rescue 1) Previously, multiple assignment with rescue modifier applied rescue to the entire expression: a, b = raise rescue [1, 2] # (a, b = raise) rescue [1, 2] This makes multiple assignment with rescue modifier consistent with single assignment with rescue modifier, applying rescue to the RHS: a, b = raise rescue [1, 2] # a, b = (raise rescue [1, 2]) Implements [Feature #8239] Fixes [Bug #8279]
Diffstat (limited to 'parse.y')
-rw-r--r--parse.y9
1 files changed, 9 insertions, 0 deletions
diff --git a/parse.y b/parse.y
index de2a92285c..a6a9a4160b 100644
--- a/parse.y
+++ b/parse.y
@@ -1387,6 +1387,15 @@ stmt : keyword_alias fitem {SET_LEX_STATE(EXPR_FNAME|EXPR_FITEM);} fitem
/*% %*/
/*% ripper: assign!($1, $3) %*/
}
+ | mlhs '=' mrhs_arg modifier_rescue stmt
+ {
+ /*%%%*/
+ YYLTYPE loc = code_loc_gen(&@4, &@5);
+ value_expr($3);
+ $$ = node_assign(p, $1, NEW_RESCUE($3, NEW_RESBODY(0, remove_begin($5), 0, &loc), 0, &@$), &@$);
+ /*% %*/
+ /*% ripper: massign!($1, rescue_mod!($3, $5)) %*/
+ }
| mlhs '=' mrhs_arg
{
/*%%%*/