diff options
author | Masataka Pocke Kuwabara <[email protected]> | 2021-01-01 14:25:08 +0900 |
---|---|---|
committer | GitHub <[email protected]> | 2021-01-01 14:25:08 +0900 |
commit | de5f8a92d5001799bedb3b1a271a2d9b23c6c8fb (patch) | |
tree | c8946966dfd3799e3dbec572d055805487a93a46 /parse.y | |
parent | 3d7f71801acbe90e6b484fa944b7c93fd46cc2cf (diff) |
Make args info for RubyVM::AST to available on endless method without parens
Problem
===
Arguments information is missing for endless method without parens.
For example:
```ruby
# ok
pp RubyVM::AbstractSyntaxTree.parse(<<~RUBY).children[2]
def x() = 42
RUBY
# => (DEFN@1:0-1:12
# mid: :x
# body:
# (SCOPE@1:0-1:12
# tbl: []
# args:
# (ARGS@1:5-1:6
# pre_num: 0
# pre_init: nil
# opt: nil
# first_post: nil
# post_num: 0
# post_init: nil
# rest: nil
# kw: nil
# kwrest: nil
# block: nil)
# body: (LIT@1:10-1:12 42)))
# ok
pp RubyVM::AbstractSyntaxTree.parse(<<~RUBY).children[2]
def x() 42 end
RUBY
# => (DEFN@1:0-1:14
# mid: :x
# body:
# (SCOPE@1:0-1:14
# tbl: []
# args:
# (ARGS@1:5-1:6
# pre_num: 0
# pre_init: nil
# opt: nil
# first_post: nil
# post_num: 0
# post_init: nil
# rest: nil
# kw: nil
# kwrest: nil
# block: nil)
# body: (LIT@1:8-1:10 42)))
# It has a problem, the `args` is nil
pp RubyVM::AbstractSyntaxTree.parse(<<~RUBY).children[2]
def x = 42
RUBY
# => (DEFN@1:0-1:10
# mid: :x
# body: (SCOPE@1:0-1:10 tbl: [] args: nil body: (LIT@1:8-1:10 42)))
```
It causes an error if a program expects `args` node exists.
For example: https://github.com/ruby/rbs/issues/551
Solution
====
Call `new_args` on this case.
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/4016
Merged-By: nobu <[email protected]>
Diffstat (limited to 'parse.y')
-rw-r--r-- | parse.y | 8 |
1 files changed, 7 insertions, 1 deletions
@@ -5003,7 +5003,13 @@ superclass : '<' } ; -f_opt_paren_args: f_paren_args | none; +f_opt_paren_args: f_paren_args + | none + { + $$ = new_args_tail(p, Qnone, Qnone, Qnone, &@0); + $$ = new_args(p, Qnone, Qnone, Qnone, Qnone, $$, &@0); + } + ; f_paren_args : '(' f_args rparen { |