diff options
author | Jeremy Evans <code@jeremyevans.net> | 2022-08-24 12:32:46 -0700 |
---|---|---|
committer | Jeremy Evans <code@jeremyevans.net> | 2022-11-24 14:26:08 -0800 |
commit | f5d73da8062377e5b93100c6ea109a37bd04b4c1 (patch) | |
tree | 44a00213b30d221aee0dbde591653dd05f49b1b1 /parse.y | |
parent | 07169fd824529c0f7f69ff0c10939b63abecc6ef (diff) | |
download | ruby-f5d73da8062377e5b93100c6ea109a37bd04b4c1.tar.gz |
Fix the position of rescue clause without exc_list
If the rescue clause has only exc_var and not exc_list, use the
exc_var position instead of the rescue body position.
This issue appears to have been introduced in
688169fd83b24564b653c03977c168cea50ccd35 when "opt_list" was split
into "exc_list exc_var".
Fixes [Bug #18974]
Diffstat (limited to 'parse.y')
-rw-r--r-- | parse.y | 11 |
1 files changed, 10 insertions, 1 deletions
@@ -4948,7 +4948,16 @@ opt_rescue : k_rescue exc_list exc_var then $$ = NEW_RESBODY($2, $3 ? block_append(p, node_assign(p, $3, NEW_ERRINFO(&@3), NO_LEX_CTXT, &@3), $5) : $5, $6, &@$); - fixpos($$, $2?$2:$5); + + if ($2) { + fixpos($$, $2); + } + else if ($3) { + fixpos($$, $3); + } + else { + fixpos($$, $5); + } /*% %*/ /*% ripper: rescue!(escape_Qundef($2), escape_Qundef($3), escape_Qundef($5), escape_Qundef($6)) %*/ } |