2023-11-23: 神碑を擦っていた
やったこと
MD
神碑を擦っていたら無限に負け続けていた。
自分は神碑の才能が無いのだと思う。
Prism
デフォルト引数のところで現在定義中の名前を使うとCRubyだとそれを検出してくれるらしいので、それを実装した。
正直 pm_parser_t
に新しいフィールドを追加してまでやることなのかはよく分からない。
https://github.com/ruby/prism/pull/1916
あと、デフォルト引数がネストしてると検出できないよなぁとか思ったりした。
ちなみにその場合は nil
になるらしい。壊れるかと思ったのに残念。
$ ruby -e 'def foo(&block) = block.call; def bar(baz = foo { |fuzz = baz| fuzz }) = baz; p bar'
nil
どうでもいいけどCRubyだとこっちもエラーにならない。
パラメーターを消すとエラーが出るのでネストを考慮してないっぽい。
報告すべきか‥‥。
$ ruby -e 'def foo(&block) = block.call; def bar(baz = foo { |fuzz = baz| baz }) = baz; p bar'
nil