Skip to content
  • viralpraxis's avatar
    543dd77c
    [ruby/prism] Fix parsing rescued exception via indexed assignment · 543dd77c
    viralpraxis authored
    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
    543dd77c
    [ruby/prism] Fix parsing rescued exception via indexed assignment
    viralpraxis authored
    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
Loading