ruby-trunk-changes 2019-09-07

今日も keyword splat の警告まわりの変更や tool/lib/vcs.rb や tool/file2lastrev.rb などのパッケージ作成用ツールのリファクタリングなどがありました。

[055b441093] Nobuyoshi Nakada 2019-09-06 13:15:36 UTC

tool/lib/vcs.rb の VCS::GIT は常にローカルの working copy で処理するようになったので不要になったローカルかどうかのチェックを削っています。

[ade1283ca2] Yusuke Endoh 2019-09-06 14:18:26 UTC

rb_str_intern() で rb_str_new_frozen() を使っていたところを dup して OBJ_FREEZE() を使うように修正しています。 rb_str_new_frozen() は fstring 用? で共有文字列として新たな String オブジェクトを作るのに、必要なフラグがないため root 文字列が解放される時にバッファが解放されてしまうという不具合があったようです。 [ruby-core:94757] [Bug #16136]

[bb53ddfe0e] Takashi Kokubun 2019-09-06 15:43:26 UTC

make benchmark で利用する benchmark-driver のタグを v0.15.3 に更新しています。

[2d076dd5ac] git 2019-09-06 15:45:44 UTC

version.h の日付更新

[258843106f] Jeremy Evans 2019-06-05 02:08:54 UTC

標準添付ライブラリ set の SortedSet の initialize メソッドで再帰的に initialize を読んでたのを super を使うように修正。参照されてるチケットは SortedSet をさらに継承したクラスで initialize が定義されてたらそっちが呼ばれてしまうからっていう内容でしたが、そもそも素の SortedSet のインスタンスでここで initialize 呼ぶと同じメソッドを呼ぶので無限再帰になってたのでは。initialize はなにか特殊な扱いがあるのかな。 [ruby-core:92563] [Bug #15830]

[9c0626fa90] Takashi Kokubun 2019-09-07 00:14:32 UTC

make benchmark で利用する benchmark-driver のタグをさらに v0.15.4 に更新しています。

[3bb3fa4051] Yusuke Endoh 2019-09-07 00:18:38 UTC

rb_rescue2() で可変長引数を扱うための va_end() より前に return 文を置いてしまっていて後始末が漏れる可能性があったのを修正しています。

[4068be1d9f] MSP-Greg 2019-09-07 00:14:15 UTC

appveyor.yml で pacman コマンドでパッケージインストールする時に mingw-w64-x86_64-gettext のインストールはやめています。また mingw-w64-x86_64-toolchain のインストール時に --nodeps オプションをつけてたのをやめています。

[799de9122e] Nobuyoshi Nakada 2019-09-06 15:36:08 UTC

tool/lib/vcs.rb のコマンドラインオプションの処理の SVN/GIT の共通部分を VCS.define_options に切り出すリファクタリング

[71f7b0421a] Nobuyoshi Nakada 2019-09-06 16:00:14 UTC

revision.h の更新のために使う tool/file2lastrev.rb で 799de9122e2bd9c2f4cc7e0611f6f8313876ca1d で追加した VCS.define_options を使うようにしています。

[3890c9eeee] Nobuyoshi Nakada 2019-09-06 16:01:52 UTC

tool/lib/vcs.rb にデバッグモードでの git コマンド実行結果のダンプなどを追加しています。

[5118aa2d58] Nobuyoshi Nakada 2019-09-06 16:02:37 UTC

VCS::GIT#_get_revisions でタグ名を得るのに git tag --list を使っていたのを git describe サブコマンドを使うようにしています。こんなコマンドあるのか。

[d783609ac3] Nobuyoshi Nakada 2019-09-07 02:33:26 UTC

tool/make-snapshot で空の revision.tmp と .revision.time ファイルを生成することで revision.h が再生成されてしまわないようにしています。また Makefile をいじって revision.tmp の依存関係に Makefile 自身を追加しています。がこれだと revision.tmp が更新されちゃうんじゃないかな。いやファイル生成するのは make update した後のことだから revision.tmp ファイル生成が Makefile 更新よりは後だからいいのか。

[3fafc549ba] Nobuyoshi Nakada 2019-09-07 02:35:00 UTC

VCS::GIT#_get_revisions でコミットログから git-svn 経由の場合の svn の revision 番号が抽出できなかった場合は last の上書きを抑制しています。うーん、これログの取り直ししているのは git rev-parse で取ったものと git log から抽出した commit hash が一致しなかった場合ですけど、これってタイミングの問題ではないですよね、ローカルなんだから。どういう場合にこれが異なることがあるんだろう。というのと、どうせ異なることがあるのなら log を取る時に path じゃなくてその直上で取った last を使えばいいのではないかという気がするのですが。

[37a2c660aa] Jeremy Evans 2019-09-06 02:25:34 UTC

Class#new, Method#call, UnboundMethod#bind_call などでも keyword splat で渡した引数を必要に応じて必須引数の最後の Hash への変換を行いつつ警告を出力するようにしています。 Class#new の場合って別に対応必要なんだ。もう ruby のメソッド呼び出しがさっぱりわからない。

[80e679ef2d] Jeremy Evans 2019-09-06 20:33:19 UTC

Enumerable#to_enum や #enum_for で生成された Enumerator へのメソッドのキーワード引数の時の警告対応のために struct enumerator にも kw_splat メンバーを追加して呼び出し時に keyword splat が渡されていたかどうかを保持するようにしています。

[5603681520] Jeremy Evans 2019-09-06 20:35:50 UTC

setup_parameters_complex() で keyword splat についての変換および警告をする処理は ec->cfp->iseq をチェックして C 関数からのメソッド呼び出し時には警告を抑制していたのを削って、同じように変換と警告の対象にするようにしています。てことは拡張ライブラリからのメソッド呼び出しには非互換ができるのかな。っていうか C API からのメソッド呼び出しで keyword splat ってあるんだっけ。

[434582d888] Jeremy Evans 2019-09-06 20:37:09 UTC

標準添付ライブラリ tempfile の Tempfile.open() の引数に **kw を追加して Tempfile.new への委譲時に暗黙の変換に頼らず引数を引き継ぐように修正しています。

[146677a1e7] Jeremy Evans 2019-09-06 20:37:31 UTC

C 実装からのメソッド呼び出しの keyword splat も通常引数への変換と警告の対象になったことでテストに警告が出るようになったのでテスト用のヘルパーメソッドのメソッド定義を修正しています。

[59e29389a8] Nobuyoshi Nakada 2019-09-07 02:47:21 UTC

71f7b0421acff068b94953f4d3f5b4d987ce5350 の tool/file2lastrev.rb の修正でリポジトリがみつからない時の ops からの引数削除のためのメソッドが間違ってたのを修正しています。配列じゃなくて OptionParser のインスタンスなので remove だった。こんなメソッドあったんだな…。

[8b290448e3] Nobuyoshi Nakada 2019-09-07 02:56:23 UTC

同じく 71f7b0421acff068b94953f4d3f5b4d987ce5350 の tool/file2lastrev.rb の変更でリポジトリがみつからなかった時に opts.remove の結果が new_proc から返されてたのでそれを VCS::XXX のインスタンスとして扱かってしまってたので Proc の中で外のスコープの変数に直接代入するようにしています。うーむ、お行儀が悪い。rescue 時に nil を返すようにすればいいのでは。

[8bfc46a9a3] Nobuyoshi Nakada 2019-09-07 02:59:19 UTC

revision.h の生成時に tool/file2lastrev.rb を実行する時に srcdir を渡すのに普通の引数ではなく --srcdir オプションの引数として渡すように変更しています。

[f223ab47e6] Kazuhiro NISHIYAMA 2019-09-07 04:49:47 UTC

拡張ライブラリ ripper の Ripper.sexp の rdoc 用コメントのサンプルの出力結果を現状に合わせて変更しています。

[99c9431ea1] Yusuke Endoh 2019-09-07 01:42:00 UTC

NODE のタイプの定数 NODE_ARRAY と NODE_ZARRAY をそれぞれ NODE_LIST と NODE_ZLIST に改名しています。これらは実際には NODE* による linked list なので、ちょっと気にはなっていたんですけどねー。 --dump=parsetree の結果も変わるので NEWS にも書いてあったほうがいいかも。RubyVM::AbstractSyntaxTree::Node も影響するかな? クラス名だけだから結果を使うだけならあまり影響はないかなぁ。

[a7a2be7a31] Yusuke Endoh 2019-09-07 04:51:18 UTC

99c9431ea1cc538489c3da70f52121aa8bc0800b の改名に追随して parse.y のヘルパー関数や compile.c の関数や enum などの名前も array -> list に改名しています。

[c725a4e48f] Kazuhiro NISHIYAMA 2019-09-07 05:02:35 UTC

.github/workflows/doxygen.yml で doxygen によるドキュメント生成の GitHub Actions ではリポジトリruby/ruby の本家のものの時だけ動くように各ステップに if: を追加しています。まとめて全体を停止できないのはちょっと不便ですね。

[1e008105bc] Yusuke Endoh 2019-09-07 07:01:16 UTC

compile_list() (ちょうど a7a2be7a31b66b05a118fb41dabf0cb965f4a9c0 で改名されたばかりで元は compile_array() だった)で引数リストや Array リテラルで最後の要素のチェックはしていたものの、途中の要素も中身が Hash だったら(つまり Hash リテラルかな)常に newarraykwsplat 命令を使うようになってしまっていたので、最後の要素のみ newarraykwsplat を利用するように修正しています。

[2f2f8107d0] Yusuke Endoh 2019-09-07 07:26:38 UTC

compile.c の compile_list() で巨大な Array リテラルの最適化のため静的に配列を生成する処理は要素数2つずつのペアでしか処理されてなくて(Hash の場合も同じコードで対応していたので)、要素数が奇数の場合は最後の要素は別途 concatarray 命令で連結されるようになってしまっていたので、COMPILE_ARRAY_TYPE_ARRAY と COMPILE_ARRAY_TYPE_HASH で分岐して配列の場合は奇数でも可能なものは全て静的に配列オブジェクトにつめるようにしています。

[a2260bd636] Yusuke Endoh 2019-09-07 07:45:49 UTC

compile.c の compile_list() は Array のための処理と Hash のための処理が同居していたので、これをさらに compile_array() と compile_hash() という関数に分割して呼び分けるようにしています。

[5b5c9b6101] Nobuyoshi Nakada 2019-09-07 08:23:42 UTC

tool/file2lastrev.rb で未使用になってたトップレベルのローカル変数 srcdir を削除しています。

[5511213487] Nobuyoshi Nakada 2019-09-07 08:25:52 UTC

tool/file2lastrev.rb でリポジトリが検出できず vcsnil の時にすぐ exit するようにしています。

[324dd9d01f] Benoit Daloze 2019-09-07 10:53:07 UTC

rubyspec の platform による gurad で armv7l は armv7 とだけ書くように修正しています。 [ruby-core:93810] [Bug #16007]

[187328b703] Yusuke Endoh 2019-09-07 09:54:01 UTC

compile.c の compile_array() で poped が真の時の処理は最初に分岐してまとめてしまって、あちこちで poped の時の処理を分散させてたのをやめるリファクタリング

[07876bf6db] Yusuke Endoh 2019-09-07 11:24:24 UTC

187328b7037e54f1f5c2558d84215f3d5d3fbdee と同様に poped の時の処理をまとめるリファクタリングを compile_hash() でも行なっています。