From: "shugo (Shugo Maeda)" <noreply@...>
Date: 2022-11-16T14:16:06+00:00
Subject: [ruby-dev:51197] [Ruby master Bug#19132] `**` を引数に指定すると no anonymous keyword rest parameter になる

Issue #19132 has been updated by shugo (Shugo Maeda).


new_args_tail()でkw_argsがある時にANON_KEYWORD_REST_IDがローカル変数のテーブルから削られてしまうようです。
f_kwrestの値をinternal_idからANON_KEYWORD_REST_IDに変えると動くようになりました。

  https://github.com/ruby/ruby/pull/6743

内部的な変数名が変わってtest/ruby/test_ast.rbが失敗するようになったのでその部分は対処しましたが、この修正方法だと他にも問題があるかもしれません。

----------------------------------------
Bug #19132: `**` を引数に指定すると no anonymous keyword rest parameter になる
https://bugs.ruby-lang.org/issues/19132#change-100122

* Author: tommy (Masahiro Tomita)
* Status: Open
* Priority: Normal
* ruby -v: ruby 3.2.0preview3 (2022-11-14) [arm64-darwin21]
* Backport: 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN
----------------------------------------
Ruby 3.2.0-preview3 で次のスクリプトを実行するとエラーになります。
```ruby
def hoge(a, *, k: nil, **)
  foo(*, **)
end
```

```
% ruby hoge.rb   
hoge.rb:2: no anonymous keyword rest parameter
```

次のようにキーワードパラメータが `**` だけであればエラーになりませんでした。
```ruby
def hoge(a, *, **)
  foo(*, **)
end
```




-- 
https://bugs.ruby-lang.org/