[ruby/prism] Fix parsing rescued exception via indexed assignment

Given this code

```ruby
begin
  raise '42'
rescue => A[]
end
```

Prism fails with this backtrace

```
Error: test_unparser/corpus/literal/rescue.txt(Prism::ParserTest): NoMethodError: undefined method `arguments' for nil
prism/lib/prism/translation/parser/compiler.rb:1055:in `visit_index_target_node'
prism/lib/prism/node.rb:9636:in `accept'
prism/lib/prism/compiler.rb:30:in `visit'
prism/lib/prism/translation/parser/compiler.rb:218:in `visit_begin_node'
```

Seems like

```diff
-            visit_all(node.arguments.arguments),
+            visit_all(node.arguments&.arguments || []),
```

fixes the problem.

https://github.com/ruby/prism/commit/76d01aeb6c
This commit is contained in:
viralpraxis 2025-04-10 11:56:25 +03:00 committed by git
parent a35a101b4c
commit 543dd77cc3
2 changed files with 5 additions and 1 deletions

View File

@ -1052,7 +1052,7 @@ module Prism
builder.index_asgn( builder.index_asgn(
visit(node.receiver), visit(node.receiver),
token(node.opening_loc), token(node.opening_loc),
visit_all(node.arguments.arguments), visit_all(node.arguments&.arguments || []),
token(node.closing_loc), token(node.closing_loc),
) )
end end

View File

@ -33,3 +33,7 @@ end
foo if bar rescue baz foo if bar rescue baz
z = x y rescue c d z = x y rescue c d
begin
rescue => A[]
end