* [ruby-dev:51197] [Ruby master Bug#19132] `**` を引数に指定すると no anonymous keyword rest parameter になる
2022-11-16 5:15 [ruby-dev:51196] [Ruby master Bug#19132] `**` を引数に指定すると no anonymous keyword rest parameter になる tommy (Masahiro Tomita)
@ 2022-11-16 14:16 ` shugo (Shugo Maeda)
2022-11-16 23:03 ` [ruby-dev:51198] " shugo (Shugo Maeda)
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: shugo (Shugo Maeda) @ 2022-11-16 14:16 UTC (permalink / raw)
To: ruby-dev
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/
^ permalink raw reply [flat|nested] 7+ messages in thread
* [ruby-dev:51198] [Ruby master Bug#19132] `**` を引数に指定すると no anonymous keyword rest parameter になる
2022-11-16 5:15 [ruby-dev:51196] [Ruby master Bug#19132] `**` を引数に指定すると no anonymous keyword rest parameter になる tommy (Masahiro Tomita)
2022-11-16 14:16 ` [ruby-dev:51197] " shugo (Shugo Maeda)
@ 2022-11-16 23:03 ` shugo (Shugo Maeda)
2022-11-17 3:23 ` [ruby-dev:51199] " nobu (Nobuyoshi Nakada)
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: shugo (Shugo Maeda) @ 2022-11-16 23:03 UTC (permalink / raw)
To: ruby-dev
Issue #19132 has been updated by shugo (Shugo Maeda).
shugo (Shugo Maeda) wrote in #note-1:
> 内部的な変数名が変わってtest/ruby/test_ast.rbが失敗するようになったのでその部分は対処しましたが、この修正方法だと他にも問題があるかもしれません。
案の定RBSのテストで失敗したのでANON_KEYWORD_REST_IDを内部IDに変えてみたのですが、今度はUnboundMethod#parametersなどで `:**` が返ることを期待しているテストがコケるようになってしまいました。
https://github.com/ruby/ruby/pull/6743#issuecomment-1317787459
内部IDか `:**` のどちらかに統一して、必要ならこれらのテストかRBSを修正した方がいい気がするのですが、どうするのがいいでしょう。
----------------------------------------
Bug #19132: `**` を引数に指定すると no anonymous keyword rest parameter になる
https://bugs.ruby-lang.org/issues/19132#change-100131
* 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/
^ permalink raw reply [flat|nested] 7+ messages in thread
* [ruby-dev:51199] [Ruby master Bug#19132] `**` を引数に指定すると no anonymous keyword rest parameter になる
2022-11-16 5:15 [ruby-dev:51196] [Ruby master Bug#19132] `**` を引数に指定すると no anonymous keyword rest parameter になる tommy (Masahiro Tomita)
2022-11-16 14:16 ` [ruby-dev:51197] " shugo (Shugo Maeda)
2022-11-16 23:03 ` [ruby-dev:51198] " shugo (Shugo Maeda)
@ 2022-11-17 3:23 ` nobu (Nobuyoshi Nakada)
2022-11-17 3:32 ` [ruby-dev:51200] " shugo (Shugo Maeda)
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: nobu (Nobuyoshi Nakada) @ 2022-11-17 3:23 UTC (permalink / raw)
To: ruby-dev
Issue #19132 has been updated by nobu (Nobuyoshi Nakada).
`:**`に統一でいいのではないでしょうか。
----------------------------------------
Bug #19132: `**` を引数に指定すると no anonymous keyword rest parameter になる
https://bugs.ruby-lang.org/issues/19132#change-100134
* Author: tommy (Masahiro Tomita)
* Status: Open
* Priority: Normal
* ruby -v: ruby 3.2.0preview3 (2022-11-14) [arm64-darwin21]
* Backport: 2.7: DONTNEED, 3.0: DONTNEED, 3.1: DONTNEED
----------------------------------------
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/
^ permalink raw reply [flat|nested] 7+ messages in thread
* [ruby-dev:51200] [Ruby master Bug#19132] `**` を引数に指定すると no anonymous keyword rest parameter になる
2022-11-16 5:15 [ruby-dev:51196] [Ruby master Bug#19132] `**` を引数に指定すると no anonymous keyword rest parameter になる tommy (Masahiro Tomita)
` (2 preceding siblings ...)
2022-11-17 3:23 ` [ruby-dev:51199] " nobu (Nobuyoshi Nakada)
@ 2022-11-17 3:32 ` shugo (Shugo Maeda)
2022-11-17 8:52 ` [ruby-dev:51201] " shugo (Shugo Maeda)
2022-11-17 9:09 ` [ruby-dev:51202] " yui-knk (Kaneko Yuichiro)
5 siblings, 0 replies; 7+ messages in thread
From: shugo (Shugo Maeda) @ 2022-11-17 3:32 UTC (permalink / raw)
To: ruby-dev
Issue #19132 has been updated by shugo (Shugo Maeda).
nobu (Nobuyoshi Nakada) wrote in #note-4:
> `:**`に統一でいいのではないでしょうか。
Rubyレベルで公開されている情報が `:**` なので私もそちらに合わせる方がよいように思います。
----------------------------------------
Bug #19132: `**` を引数に指定すると no anonymous keyword rest parameter になる
https://bugs.ruby-lang.org/issues/19132#change-100135
* Author: tommy (Masahiro Tomita)
* Status: Open
* Priority: Normal
* ruby -v: ruby 3.2.0preview3 (2022-11-14) [arm64-darwin21]
* Backport: 2.7: DONTNEED, 3.0: DONTNEED, 3.1: DONTNEED
----------------------------------------
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/
^ permalink raw reply [flat|nested] 7+ messages in thread
* [ruby-dev:51201] [Ruby master Bug#19132] `**` を引数に指定すると no anonymous keyword rest parameter になる
2022-11-16 5:15 [ruby-dev:51196] [Ruby master Bug#19132] `**` を引数に指定すると no anonymous keyword rest parameter になる tommy (Masahiro Tomita)
` (3 preceding siblings ...)
2022-11-17 3:32 ` [ruby-dev:51200] " shugo (Shugo Maeda)
@ 2022-11-17 8:52 ` shugo (Shugo Maeda)
2022-11-17 9:09 ` [ruby-dev:51202] " yui-knk (Kaneko Yuichiro)
5 siblings, 0 replies; 7+ messages in thread
From: shugo (Shugo Maeda) @ 2022-11-17 8:52 UTC (permalink / raw)
To: ruby-dev
Issue #19132 has been updated by shugo (Shugo Maeda).
shugo (Shugo Maeda) wrote in #note-5:
> nobu (Nobuyoshi Nakada) wrote in #note-4:
> > `:**`に統一でいいのではないでしょうか。
>
> Rubyレベルで公開されている情報が `:**` なので私もそちらに合わせる方がよいように思います。
上記の修正でRBSのテストがこけるのを調べてみたのですが、RubyVM::ASTのテストが通るように以下の修正をしたせいでした。
```
--- a/ast.c
+++ b/ast.c
@@ -348,6 +348,7 @@ static VALUE
var_name(ID id)
{
if (!id) return Qnil;
+ if (!rb_is_local_id(id)) return Qnil;
if (!rb_id2str(id)) return Qnil;
return ID2SYM(id);
}
```
変数名が `**` の時に名前なし扱いするためでしたが、これが `def foo(...)` とかで定義される `*` なども隠してしまっていたようです。
`**` の時だけ隠すという修正もできますが、UnboundMethod#parametersなどでは `**` という変数名が見えているので、RubyVM::ASTも合わせた方がいいように思います。
----------------------------------------
Bug #19132: `**` を引数に指定すると no anonymous keyword rest parameter になる
https://bugs.ruby-lang.org/issues/19132#change-100148
* Author: tommy (Masahiro Tomita)
* Status: Open
* Priority: Normal
* ruby -v: ruby 3.2.0preview3 (2022-11-14) [arm64-darwin21]
* Backport: 2.7: DONTNEED, 3.0: DONTNEED, 3.1: DONTNEED
----------------------------------------
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/
^ permalink raw reply [flat|nested] 7+ messages in thread
* [ruby-dev:51202] [Ruby master Bug#19132] `**` を引数に指定すると no anonymous keyword rest parameter になる
2022-11-16 5:15 [ruby-dev:51196] [Ruby master Bug#19132] `**` を引数に指定すると no anonymous keyword rest parameter になる tommy (Masahiro Tomita)
` (4 preceding siblings ...)
2022-11-17 8:52 ` [ruby-dev:51201] " shugo (Shugo Maeda)
@ 2022-11-17 9:09 ` yui-knk (Kaneko Yuichiro)
5 siblings, 0 replies; 7+ messages in thread
From: yui-knk (Kaneko Yuichiro) @ 2022-11-17 9:09 UTC (permalink / raw)
To: ruby-dev
Issue #19132 has been updated by yui-knk (Kaneko Yuichiro).
* UnboundMethod#parametersなどでは ** という変数名が見えている
* `DVAR@1:6-1:8 nil` で `**`を表現するよりは、`kwrest: (DVAR@1:6-1:8 :**)`で表現したほうが理解がしやすい
という点からRubyVM::AST側でも `**` が取得できるというふうに修正し test/ruby/test_ast.rb のexpectationを更新するのがよいと思います。
また調べたところ、議論になっているtest caseが追加されたのが https://github.com/ruby/ruby/commit/fa41a7b2608#diff-7db75141987f9cf709ba4cb68969d3bc97b0de8dfe175d845df2f3de2b91cae6R320 で、Add support for anonymous rest and keyword rest argument forwarding (https://github.com/ruby/ruby/commit/f53dfab95c3)のほうがあとであることもあり、expectationを更新することに前向きです。
anonymousでない場合:
```ruby
pp RubyVM::AbstractSyntaxTree.parse("def a(**a) end")
#=> (SCOPE@1:0-1:14
tbl: []
args: nil
body:
(DEFN@1:0-1:14
mid: :a
body:
(SCOPE@1:0-1:14
tbl: [:a]
args:
(ARGS@1:6-1:9
pre_num: 0
pre_init: nil
opt: nil
first_post: nil
post_num: 0
post_init: nil
rest: nil
kw: nil
kwrest: (DVAR@1:6-1:9 :a)
block: nil)
body: nil)))
```
anonymousで、`**`を隠す場合:
```ruby
pp RubyVM::AbstractSyntaxTree.parse("def a(**) end")
#=> (SCOPE@1:0-1:13
tbl: []
args: nil
body:
(DEFN@1:0-1:13
mid: :a
body:
(SCOPE@1:0-1:13
tbl: [nil]
args:
(ARGS@1:6-1:8
pre_num: 0
pre_init: nil
opt: nil
first_post: nil
post_num: 0
post_init: nil
rest: nil
kw: nil
kwrest: (DVAR@1:6-1:8 nil)
block: nil)
body: nil)))
```
anonymousで、`**`を隠さない場合:
```ruby
pp RubyVM::AbstractSyntaxTree.parse("def a(**) end")
#=> (SCOPE@1:0-1:13
tbl: []
args: nil
body:
(DEFN@1:0-1:13
mid: :a
body:
(SCOPE@1:0-1:13
tbl: [:**]
args:
(ARGS@1:6-1:8
pre_num: 0
pre_init: nil
opt: nil
first_post: nil
post_num: 0
post_init: nil
rest: nil
kw: nil
kwrest: (DVAR@1:6-1:8 :**)
block: nil)
body: nil)))
```
----------------------------------------
Bug #19132: `**` を引数に指定すると no anonymous keyword rest parameter になる
https://bugs.ruby-lang.org/issues/19132#change-100149
* Author: tommy (Masahiro Tomita)
* Status: Open
* Priority: Normal
* ruby -v: ruby 3.2.0preview3 (2022-11-14) [arm64-darwin21]
* Backport: 2.7: DONTNEED, 3.0: DONTNEED, 3.1: DONTNEED
----------------------------------------
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/
^ permalink raw reply [flat|nested] 7+ messages in thread