ruby-trunk-changes 2019-10-05

今日は一時メモリの管理用の API の変更や GC.compact の潜在的不具合修正などがありました。

[c8a18e25c1] Yusuke Endoh 2019-10-04 12:30:32 UTC

RubyVM::InstructionSequence.compile で使う rb_iseq_compile_with_option() の引数から struct rb_block のポインタを削除しています。ここに NULL 以外を渡す rb_iseq_compile_on_base() という関数がそもそも使われてなかったとのこと。

[cbbe198c89] Nobuyoshi Nakada 2019-10-04 17:08:07 UTC

GC にメモリ解放をまかせる T_IMEMO を使った一時バッファのための関数 rb_imemo_tmpbuf_auto_free_pointer() はオブジェクトから参照するためのポインタを引数に受け取るようになっていましたが、これだとまず管理したいメモリ領域を確保してから T_IMEMO 型のオブジェクトを確保しようとするため、ここで例外が発生した場合メモリリークが起きる可能性があるためよくないインタフェースになっていたので引数を削除して、まずオブジェクトを確保してからポインタを rb_imemo_tmpbuf_set_ptr() でセットするように使いかたを修正しています。

[cbf88064f5] git 2019-10-04 18:07:31 UTC

version.h の日付更新

[a20ed0565e] Aaron Patterson 2019-10-04 00:52:00 UTC

gc.c の gc_compact() で gc_compact_stats() という関数の戻り値を返すようにしていたのを消して戻り値なしに変更しています。かわりに戻り値を使っている rb_gc_compact() や gc_verify_compaction_references() の呼び元のほうで gc_compact_stats() を呼ぶようにリファクタリングしています。

[bd4b65f4b0] Aaron Patterson 2019-10-04 18:17:43 UTC

GC.compact で参照を移動させる gc_update_object_references() で T_IMEMO 型オブジェクトの時の switch 文の break を return に変更。 T_IMEMO では klass を変更しないので UPDATE_IF_MOVED() は呼ばなくていいらしい。

[076d3d758b] Yusuke Endoh 2019-10-04 21:30:27 UTC

拡張ライブラリ json で 91793b8967e0531bd1159a8ff0cc7e50739c7620、79ead821dd4880725c9c6bb9645b3fad71715c5b、80b5a0ff2a7709367178f29d4ebe1c54122b1c27 などで ext/json/parser/parser.c を直接編集していましたが、このソースコードは parser.rl から自動生成されるものなので元になっている parser.rl のほうにも対応する変更を入れています。

[5717e55e9a] Yusuke Endoh 2019-10-04 22:00:07 UTC

拡張ライブラリ json の parser.c を生成する時に先頭にこのファイルが自動生成されている旨を注意するコメントを追加するようにしています。

[417c64b9a8] Yusuke Endoh 2019-10-04 22:00:57 UTC

で拡張ライブラリ json の parser で負の値を格納しうる char 型の変数に明示的に signed char と宣言するようにしています。 ARM の環境では unsigned になるため警告が出ることがあったようです。

[170d154059] Yusuke Endoh 2019-10-04 22:37:19 UTC

signal.c で MINSIGSTKSZ というマクロを参照する時に int にキャストするようにしています。 OpenBSD の環境でこのマクロが unsigned な値だったらしく警告が出ていたのを抑制しています。

[f8104d9e9f] Nobuyoshi Nakada 2019-09-26 10:38:56 UTC

rubygems の Gem::Package のテストで assert_equal の引数の expected と actual が反対になってたのを修正しています。

[39e8d5e1cd] Nobuyoshi Nakada 2019-09-26 10:47:22 UTC

同じく rubygems の Gem::Package のテストで素の assert を使ってたのを assert_kind_of とか assert_operator とか適切な assertion メソッドを使うようにしてエラー時のメッセージがわかりやすくなるようにしています。

[caa9d0bd78] Nobuyoshi Nakada 2019-09-26 11:01:03 UTC

rubygems の Gem::Package のテストで Zlib::GzipReader.wrap というメソッド(ってこれはなんだろう)にキーワード引数を渡すのになぜか Hash を作ってから **opts で keyword splat 使って渡してたのを普通に渡すようにしています。

[871005bdd2] Nobuyoshi Nakada 2019-09-26 11:11:24 UTC

rubygems の require のテストで生成するスクリプトが Kernel#warn の最後の引数に空の Hash を渡していたのが keyword splat 変換あたりの警告の対象になってたようなので空配列に変更しています。でもこれチェックしてる警告をみたらわざとなんじゃないのかな。

[b659c1b92f] bronzdoc 2019-09-29 14:41:49 UTC

rubygems の Gem::Dependency#identity メソッドというのを追加して、依存関係のバージョンの指定の種類が取れるようにしているようです。

[7d4ab8bbe7] bronzdoc 2019-09-29 14:43:17 UTC

b659c1b92f3d5f251a3436073cd60d955d5fc457 で導入した Gem::Dependency#identity メソッドを使って Gem::SpecFetcher#search_for_dependency の一部をおきかえています。

[6dfe0c9dcd] Nobuyoshi Nakada 2019-10-01 01:41:10 UTC

rubygems のテストで gemspec を生成した時に date のテストで日付のちょうど変更するタイミングでこける可能性を考慮して余裕を持たせたチェックを行うようにしています。 [ruby-core:95153] [Bug #16189]

[212da9a6ae] Nobuyoshi Nakada 2019-10-05 02:04:23 UTC

common.mk の ext/ripper/ripper.c、ext/json/parser/parser.c、ext/date/zonetab.h などの自動生成されるソースコードの依存関係に depend ファイルや prereq.mk を追加しています。

[3e3cc0885a] Nobuyoshi Nakada 2019-10-05 02:28:53 UTC

871005bdd2044ef7bd532a7cc4f0756217161f97 で弄ってた rubygems の require のテストですが警告の抑制に合わせて警告をチェックしていた assertion を変更しています。

[70e3fda2eb] Yusuke Endoh 2019-10-05 08:54:36 UTC

5717e55e9a7790c938afa694a9bf558c0e54bb83 で ext/json/parser/parser.c の先頭に自動生成ファイルであることをコメント追記するようにした時に余分な改行が入ったのを削っています。

[96452373fd] Yusuke Endoh 2019-10-05 09:28:19 UTC

70e3fda2eb45c841e5fb4574273d20f8df5455e5 の続きでコメント追加のための one liner で $. 変数を利用するようにしています。

[06a04a1aa3] Yusuke Endoh 2019-10-05 10:08:23 UTC

拡張ライブラリ openssl で ossl_sslctx_session_get_cb() の型を判定するのに LibreSSL を使っている時は無条件で const なしの引数の宣言を使ってましたが、LIBRESSL_VERSION_NUMBER の範囲もチェックして 2.8 以降だったら const つきを使うようにしています。

ruby-trunk-changes 2019-10-04

今日は CI に Drone を使う設定の追加や RubyVM::InstructionSequence.compile でメインスクリプトとして compile していたのを require されたファイルや eval されている時のように? compile するようにダミーの context を渡すようにする変更などがありました。

[711c40ebdc] Yusuke Endoh 2019-10-03 16:29:21 UTC

parse.y の struct parser_param から in_main というフラグ(トップレベル、とはちょっと違うのか。直接実行するスクリプト毎の最上位のみ?)を削除し、main のスクリプトの parse 時にも base_block を NULL にするようにしています。eval 系の時は base_block に値が入るらしい。

[b43afa0a8f] Yusuke Endoh 2019-10-03 16:48:31 UTC

711c40ebdcd0974ef3e6ac6870412dc88ae25f3e の続きでローカル変数の定義時に struct parser_param::base_block を利用せず rb_iseq_t を直接参照するようにしています。

[bb9604e18c] git 2019-10-03 17:30:54 UTC

version.h の日付更新

[b732a9f8a0] Yusuke Endoh 2019-10-03 17:33:39 UTC

b43afa0a8f82a5d806adc24afa2eaf41479da1a3 の変更で parse.y で rb_iseq_t という型を使ってましたが、ここでは typedef されてなかったということで struct rb_iseq_struct を使うようにしています。そうなのか。

[c3dd3b9553] Yusuke Endoh 2019-10-03 17:35:10 UTC

711c40ebdcd0974ef3e6ac6870412dc88ae25f3e の変更とも関連しそうですが RubyVM::InstructionSequence.compile で文字列から ISeq を作るのは eval とは違ってコンテキストは引き継がないので parent_iseq が NULL を渡しているので、通常のスクリプトのように末尾に未使用の参照があると警告が出るそうで、けどそれは抑制したい(compile した ISeq をメソッド内に埋め込むみたいに評価結果を使うようなことをしたい?)ので dummy の rb_iseq_t を作って渡すようにしています。

[bdbf8de498] Jun Aruga 2019-10-03 21:12:58 UTC

.drone.yml を追加し Drone という CI ツールで ARM のテストを実行できるようにしています。 Drone ひさしぶりにきいた。これは自前でホストするやつじゃなくてサービスとして提供されているものが使えるってことかな? https://github.com/ruby/ruby/pull/2520 [ruby-core:95201] [Misc #16234]

[12e27a411c] Jeremy Evans 2019-10-03 20:14:08 UTC

doc/syntax/methods.rdoc と doc/syntax/calling_methods.rdoc にメソッドの引数の書きかたなどについてちょっと追記しています。

[c7715a4936] Jeremy Evans 2019-10-03 20:14:45 UTC

doc/syntax/methods.rdoc と doc/syntax/calling_methods.rdoc にキーワード引数の仕様変更に関連して追記しています。

[9f24e8fdbb] Jeremy Evans 2019-10-03 21:07:32 UTC

doc/extension.rdoc にメソッドやブロック起動で keyword splat 対応した rb_xxx_kw() みたいな名前の C API の追加ぶんについて追記しています。

[804672e7b4] Takashi Kokubun 2019-10-03 21:17:36 UTC

bdbf8de4980ef54f466809ee27a9f2a00614b0f0 で追加した .drone.yml で master のみビルド対象になるようにしています。

[182336ccb5] Takashi Kokubun 2019-10-03 21:24:57 UTC

rubyspec の Gem.bin_path についてのテストを Windows 環境では常に skip するようにしています。

[ac69a051cf] Takashi Kokubun 2019-10-03 22:15:05 UTC

.drone.yml で arm32 での make test がエラーになるそうなのでこれを無視するように failure: ignore の設定を追加しています。

[a56d742e69] Takashi Kokubun 2019-10-03 22:33:10 UTC

182336ccb5a8d46fbcddbdad9e7bbca6d5d5d63f の追加修正で rubyspec の Gem.bin_path のテストの guard が guard_not + platform_is になってたのを platform_is_not を使うようにリファクタリング。 guard_not が思ったように動いてないらしいという問題もあったようです。

[7db83b04d0] Takashi Kokubun 2019-10-03 22:58:20 UTC

が a56d742e69aa8a3a1fe92fc515d93f6e51cf5fbc は revert しています。やっぱり guard_not はちゃんと動いてたらしい。

[5be2af5f90] Alan Wu 2019-10-04 01:15:24 UTC

Process::Status#to_i の rdoc 用コメントの call-seq に to_int も別名であるかのように書かれていましたが、実際には定義されていなかったので削除しています。

[113bef6976] Yusuke Endoh 2019-10-04 07:07:46 UTC

rb_mem_clear() の宣言で第1引数に register 修飾子がつけられていたのが C++ の拡張ライブラリビルドのテストで警告が出ていたので register を消しています。なんでここだけついてたんだろ。

ruby-trunk-changes 2019-10-03

今日は rb_method_entry_t などの構造体を極力書き換えないようにする変更の revert や class/module 直下のブロック内での return をエラーにする修正などがありました。

[ef697388be] Jeremy Evans 2019-10-02 14:56:28 UTC

メソッド内でない class/module 文のコンテキストにある proc や Proc.new のブロックなどからの return がエラーになってなかった(lambda のブロックの場合は return は break 相当なので OK)ので LocalJumpError にするように修正しています。 2.4 で top-level return を導入した影響でエラーにならなくなってたみたいです。これは不具合扱いでもいいような気もするけど rubyspec は一応 2.7 限定でテスト変更しています。てか rubyspec はこれを認識してたのか。 https://github.com/ruby/ruby/pull/2511

[eb92159d72] 卜部昌平 2019-10-03 03:26:41 UTC

dd883de5ba311c38818d0f638a94b4fbc63f5ee5 とそれに関連する rb_method_entry_t などの method 関連の構造体を極力書き換えないようにする変更(https://github.com/ruby/ruby/pull/2486)を revert しています。よくわかってませんが method の再定義が繰り返し行なわれた場合に、実際には cache が破棄されて GC で解放されているのに検索結果の method entry が同じものに戻っている場合に inline cache がまだ有効だと誤判定してしまって SEGV を引き起こすケースがあったようです。コミットログにサンプルがあります。だいぶ珍しい条件な気がするけどまあテストとかでメソッドを一時的に書き換えるとかではありそうですね。

[7e060d5018] git 2019-10-03 03:48:20 UTC

eb92159d72fc711387f7e17ffbaca1678f23fd47 のインデントのタブを空白に展開。

[a515e3f99e] git 2019-10-03 03:48:30 UTC

version.h の日付更新

[1c999952e7] Romain Tartière 2019-10-02 20:26:39 UTC

misc/lldb_cruby.py の lldb_inspect で T_ARRAY 型オブジェクトの表示で文字列への埋め込みを忘れてた変数があったのを修正しています。

[84fc1de512] 卜部昌平 2019-10-03 05:56:35 UTC

tool/lib/test/unit.rb に UnboundMethod に bind と call をチェインして呼んでたところを UnboundMethod#bind_call を使うようにリファクタリング

[3ffd98c5cd] 卜部昌平 2019-10-01 07:45:14 UTC

VM の debug counters に mc_miss_by_xxx といった method cache の cache miss を原因ごとにカウントするカウンタを追加しています。

[c14755e9ca] Hiroshi SHIBATA 2019-10-03 09:32:21 UTC

標準添付ライブラリ fileutils の Test::Unit::CoreAssertions::MiniTest という深いところにある module の Skip という例外クラスを同じ名前空間の Assertion という例外クラスを継承するようにしています。 minitest との互換性のためらしい。

[ad67adb5f9] Hiroshi SHIBATA 2019-10-03 05:47:18 UTC

標準添付ライブラリ fileutils のテストの skip を skip メソッドのかわりに pend というメソッドを使うようにしています。 pend っていうのもあるのか。

[b7ae26e2ee] Nobuyoshi Nakada 2019-10-03 07:47:05 UTC

tool/lib/vcs.rb で ChangeLog 生成のために revision の範囲を指定するのに HEAD を使うのをやめてブランチ名(やタグ名?)を明示的に指定するようにし、git-svnリポジトリでの整形を修正しています。 git-svn で作ることって今あるのかな。

[47d143be17] Nobuyoshi Nakada 2019-10-03 07:47:57 UTC

tool/make-snapshot で gem パッケージや Unicode 用データファイルの cache への symlink を生成していたところをやめて直接コピーするようにしています。またコピーしたファイルの mode を rwXr-Xr-X に設定しなおすようにしています。

[8142a9b43d] Nobuyoshi Nakada 2019-10-03 10:12:03 UTC

tool/make-snapshot の 5af2c8735a22e6b54acf4164b1f1f7bac98e7111 で system のエラーを検出するようにしたのを MAKE っていうクラスに分離して Process.spawn を使って make コマンドを実行するようにしています。これ ensure での Process.wait は Process.spawn で例外発生時にエラーになるんじゃないかな。どっちみちエラーではあるけど。

[8f7fca784a] Nobuyoshi Nakada 2019-10-03 10:13:05 UTC

5af2c8735a22e6b54acf4164b1f1f7bac98e7111 や 8142a9b43dfc3e141fd7cb3fc255fc102523f6df の続きで tool/make-snapshot で make prepare-package と make clean-cache を実行するのをファイルの更新時刻を調整する前に移動しています。

ruby-trunk-changes 2019-10-02

今日は主に tool/make-snapshot の修正や RubyVM::InstructionSequence#to_binary の **nil 引数対応などがありました。

[15606963de] Hiroshi SHIBATA 2019-10-01 11:53:16 UTC

tool/lib/test/unit/assertions.rb に定義されていた assert_raise、assert_join_threads を tool/lib/test/unit/core_assertions.rb に移動。gem のテストでも利用できるように?

[5af2c8735a] NAKAMURA Usaku 2019-10-02 03:59:59 UTC

tool/make-snapshot で make update-download や make prepare-package を実行する子プロセスがエラーだった時に Kernel#system が false を返すのをチェックしていなかったので、なにかエラーがあっても処理が進んでしまっていたのでエラーメッセージを表示して終了するようにしています。

[a61ae414b6] NAKAMURA Usaku 2019-10-02 04:00:17 UTC

tool/make-snapshot が生成する Makefile で update-download の依存関係に after-update が書かれてたのを prepare-package の依存関係に移動しています。

[4946d83a1c] git 2019-10-02 04:00:56 UTC

version.h の日付更新

[99d3043bd8] Alan Wu 2019-10-02 07:05:40 UTC

6a9ce1fea89bc5c6518dd6bb7ff3b824a9321976 でメソッド定義の引数に **nil と書いて余分なキーワード引数を受け付けないことを明示できるようになったのにあわせて RubyVM::InstructionSequence#to_binary でバイナリフォーマットでダンプする時のフォーマットのフラグも拡張しています。 https://github.com/ruby/ruby/pull/2508

[84cbce3d88] Koichi Sasada 2019-10-02 07:02:00 UTC

tool/lib/iseq_loader_checker.rb の ISeq の to_s やバイナリフォーマットへのダンプのチェックで parallel test 時に対応するようにしているようです。これテスト時に差し込んで使われるものだったんだ。 https://github.com/ruby/ruby/pull/2508

[4ed51b3956] Nobuyoshi Nakada 2019-10-02 06:00:17 UTC

a61ae414b6f8310c9dff9a6f18b6064499167513 で tool/make-snapshot で make prepare-package と make clean-cache を別の make コマンドに分けて実行するようにした時に make clean-cache が失敗した時のメッセージが prepare-package のままだったので修正しています。

[9759e3c9f0] Koichi Sasada 2019-10-02 08:16:04 UTC

84cbce3d880f0d6a51ccf3622b8d1e79132b9a0e の変更で test/unit も弄った影響か test/unit の parallel test 自体のテストで worker が返した payload の内容チェックの値をちょっと変更しています。 これまで動いてなかった checker が動くようになった影響かな。

ruby-trunk-changes 2019-10-01

今日は keyword splat 対応の Enumerator 生成用の API の追加や File.fnmatch、標準添付ライブラリ webrick の不具合修正などがありました。
また今日は安定版 2.6.5/2.5.7/2.4.8 のセキュリティリリースがありました。

https://www.ruby-lang.org/ja/news/2019/10/01/ruby-2-6-5-released/
https://www.ruby-lang.org/ja/news/2019/10/01/ruby-2-5-7-released/
https://www.ruby-lang.org/ja/news/2019/10/01/ruby-2-4-8-released/

[3073404e74] Jeremy Evans 2019-09-30 04:33:59 UTC

Enumerable#lazy で Enumerator::Lazy を作る時に keyword splat の有無の設定を伝播させるようにしています。また size メソッドの定義つきで Enumerator を生成する C API に keyword splat の指定も追加した rb_enumeratorize_with_size_kw() およびマクロ SIZED_ENUMERATOR_KW() なども追加しています。

[a8c436d9a1] Jeremy Evans 2019-09-30 05:49:43 UTC

1edcfd610703fb6f773e8f31f88f8ca920bda1ac の add_empty_keyword() (その後改名されて今は rb_adjust_argv_kw_splat()) の条件分岐が誤ってたのを修正しています。 argc が 0 の時も警告を出力するようにしています。

[671ca21254] Koichi Sasada 2019-09-30 16:14:19 UTC

88f38c187e3171f8f351f3198247d20ea9f016ee で追加したテストメソッドの未使用の変数の警告抑制のため自己代入する文をしてしています。

[01e75b6be9] git 2019-09-30 16:14:45 UTC

version.h の日付更新

[a38fe1fbf0] Yusuke Endoh 2019-09-30 23:57:50 UTC

3073404e741df19ae16248126640777ed36110e8 で追加したテスト用拡張ライブラリの未使用変数の警告除去。

[a0a2640b39] Nobuyoshi Nakada 2018-12-12 05:38:09 UTC

File.fnmatch で第1引数のパターンのほうに NUL 文字を含めてもエラーにならないので、不正なパターンでマッチができてしまう不具合を修正。 StringValueCStr() を使って pattern に NUL 文字があったら ArgumentError になるようにしています。

[36e057e26e] Nobuyoshi Nakada 2019-08-13 03:14:28 UTC

標準添付ライブラリ webrick の Digest 認証のチェックのループが効率が悪かったので String#scan を使って明示的なループを書かずに処理するようにしています。目がチカチカする正規表現

[3ce238b5f9] Yusuke Endoh 2019-10-01 03:29:18 UTC

標準添付ライブラリ webrick でヘッダに改行が含まれないことのチェックで \r\n の連続した改行のみチェックしててどちらかだけある場合は漏れてたので単独でもエラーになるようにしています。

[55de0282da] Kazuhiro NISHIYAMA 2019-10-01 12:26:54 UTC

タグを打った時にパッケージを作るための GitHub Actions の設定ファイル .github/workflows/draft-release.yml を削除しています。 GitHub Actions はタグに反応する場合そのタグを打った commit の tree の .github/workflows を使って処理するみたいなので、安定版に .github/workflows が含まれてないと動かなかったので、専用のリポジトリで動かすことにしてメインのリポジトリからは消しています。

ruby-trunk-changes 2019-09-30

今日は method entry など method 関連の構造体を極力途中で書き変えないようにする変更やキーワード引数の扱いの対応のための C API 追加などがありました。

[31bb66a19d] Benoit Daloze 2019-09-29 14:03:47 UTC

spec/mspec を upstream から更新しています。

[1c938a72aa] Benoit Daloze 2019-09-29 14:03:58 UTC

spec/ruby も upstream からマージしています。

[f9a9f3c7c6] Benoit Daloze 2019-09-29 16:01:30 UTC

spec/mspec を再度更新。この2回に分かれるのなんでなんだろうなー。

[a17bc04d15] Benoit Daloze 2019-09-29 16:01:32 UTC

spec/ruby も再度 upstream からマージしています。

[f39314a98a] git 2019-09-29 16:02:54 UTC

version.h の日付更新

[59648af296] Nobuyoshi Nakada 2019-09-29 16:08:32 UTC

Numeric#step がブロックなしで呼ばれた時の Enumerator の size メソッドでキーワード引数の警告抑制のため Enumerator 作成時に引数をそのまま委譲せずに一旦解釈したものを通常引数経由で渡すようにしています。

[2d41c712a7] Benoit Daloze 2019-09-29 16:34:12 UTC

rubyspec の rubygems のテストで ruby 本体のテストで make install していない場合には通せないテストを回避するようにしています。

[869e4f6e4c] Jeremy Evans 2019-09-29 16:15:43 UTC

rubyspec の rb_scan_args() のテストでキーワード引数の 'k' 対応で警告抑制するようにしています。

[54d49aeb52] Benoit Daloze 2019-09-29 17:56:15 UTC

spec/ruby を再度 upstream からマージ。

[2740b86905] Benoit Daloze 2019-09-29 21:42:51 UTC

gems/bundled_gems の test-unit のバージョンを 3.3.4 に更新。

[59060aadea] Benoit Daloze 2019-09-29 21:43:15 UTC

d090e449ef4e92b2020e51fe495cd039e4f6fdda の GitHub Actions の macOSUbuntu 環境の設定で make test-bundled-gems で test-unit のテストのエラー無視する設定を revert しています。

[58dfea0c8d] Jeremy Evans 2019-09-29 20:15:04 UTC

d53cf854741bbf496298c5a722988d2dd84314a1 で Struct.new の keyword_init キーワード引数での警告抑制のため rb_funcall_passing_block() でメソッド呼び出しで module_eval を呼び出すようにしてましたが、これを revert して rb_mod_module_eval() を直接呼び出すように戻し、module_eval や instance_eval, instance_exec などのブロックを特定のコンテキスト化で実行するメソッドの実装関数で keyword splat の伝播を明示的に指定するようにしています。

[6fdd701472] Jeremy Evans 2019-09-29 23:41:00 UTC

メソッド呼び出しやブロック呼び出しの関数群の kw_splat 引数に渡して keyword splat を渡さないことを明示するためのフラグの定数 VM_NO_KEYWORDS を削除して RB_NO_KEYWORDS を同じ用途に使いまわすようにしています。

[86427a3219] 卜部昌平 2019-09-26 01:26:40 UTC

ここから dd883de5ba311c38818d0f638a94b4fbc63f5ee5 までは fba8627dc1c5b191713edeb5fc21cbe0ddde9e3c の invokeblock VM 命令での分岐を消すため構造体 struct rb_call_cache の def メンバーを消すためにこれを使っている箇所をなくすための変更が続きます。
method.h の METHOD_ENTRY_COMPLEMENTED() というマクロを削除して呼び元の rb_free_method_entry() で直接 rb_method_definition_t::complemented_count で判定するようにしています。

[f56506be0d] 卜部昌平 2019-09-25 04:11:28 UTC

id_table.h の enum rb_id_table_iterator_result の最後の要素 ID_TABLE_ITERATOR_RESULT_END を削除しています。未使用なので。たぶん以前 trailing comma が使えなかった時に毎回要素を追加するたびに2行変更になるのを防ぐために番兵的に置いてたやつだろうな。

[3632a812c0] 卜部昌平 2019-09-25 04:00:56 UTC

id_table.c の rb_id_table_foreach() や rb_id_table_foreach_with_replace() から共通部分を rb_id_table_foreach_with_replace_with_key() という関数に切り出すリファクタリング

[cf33608203] 卜部昌平 2019-09-20 05:12:51 UTC

構造体 rb_method_iseq_t や rb_method_cfunc_t、rb_method_attr_t、rb_method_alias_t、rb_method_refined_t、rb_method_bmethod_t、rb_method_definition_t などのメソッド関連のメンバに const を付けています。

[c11c5e69ac] 卜部昌平 2019-09-20 08:01:53 UTC

rb_method_definition_set() の定義を分割するリファクタリング

[1521f7cf89] 卜部昌平 2019-09-20 08:16:44 UTC

vm.c の vm_cref_dump() という関数は未使用になってたので削除。

[595b3c4fdd] 卜部昌平 2019-09-23 08:42:27 UTC

c11c5e69ac66ae10255a20a6b84e481f0423703d のリファクタリングで分割した rb_method_definition_new() をrb_method_definition_create() から利用して rb_method_definition_t の内容を適切に初期化するところまでまとめてやるようにしています。

[3207979278] 卜部昌平 2019-09-24 06:41:52 UTC

595b3c4fddc5cde58add2fa2637acb2664694194 の続きで rb_method_definition_set() で rb_method_definition_t の内容を memcpy(3) で書き換えるのはやめて生成時に適切にセットしておくようにしています。

[7cb96d41a5] 卜部昌平 2019-09-25 04:51:06 UTC

Refinements のために Class の method table の内容を移動するのに rb_method_entry_copy() で rb_method_definition_t の内容をコピーしてたのを、新たな構造体を作って入れかえるように変更しています。 rb_method_definition_t の内容の書き換えをなくすため。

[167e6b48f1] 卜部昌平 2019-09-25 06:52:02 UTC

rb_method_entry_alloc() の引数に flags を追加して rb_method_entry_t::flags も初期化してから返すようにしています。ついでに(?)構造体 rb_method_entry_t も一旦確保してから内容を書き換えないようにしようとしているようです。もっとも rb_method_entry_alloc() 内でも一旦確保してから METHOD_ENTRY_FLAGS_COPY() でコピーしてますが、これも後で消されます。

[6c6a25feca] 卜部昌平 2019-09-25 08:00:25 UTC

167e6b48f1b321d671998728adf5a0db06d24445 と同様に METHOD_ENTRY_FLAGS_COPY() を使ってる場所を減らして rb_method_entry_t を確保する rb_method_entry_create() は引数に元となる rb_method_entry_t を受け取る rb_method_entry_from_template() という関数に変更しています。

[dd883de5ba] 卜部昌平 2019-09-26 01:22:01 UTC

構造体 rb_callable_method_entry_t と rb_method_entry_t の全メンバーに const 修飾子をつけるようにしています。 一箇所だけになった METHOD_ENTRY_FLAGS_COPY() の呼び元に内容を展開して METHOD_ENTRY_FLAGS_COPY() の定義は削除。

[fba8627dc1] 卜部昌平 2019-09-26 04:44:51 UTC

86427a321997b733bf8ebb6036157c341a52edfc からの一連の変更で不要になった rb_call_cache_t::def メンバーを削除して calccall() の中の分岐を1つ削除しています。

[649a64ae29] Jeremy Evans 2019-09-30 00:47:17 UTC

メソッド呼び出しやブロック起動に keyword splat の情報を渡せる C API シリーズに rb_funcallv_public_kw()、rb_funcall_passing_block_kw()、rb_yield_splat_kw() などの API を追加しています。

[8ba48c1b85] Koichi Sasada 2019-09-30 05:27:02 UTC

c11c5e69ac66ae10255a20a6b84e481f0423703d で切り出した the_location() という関数(見過してたけどすごい名前の関数だ)で rb_method_attr_t::location に空を表すつもりで Qnil を返してたのを Qfalse に修正しています。ここは 0 (Qfalse) で判定していた模様。

[bf8d7d9c1d] Koichi Sasada 2019-09-30 06:35:22 UTC

tool/lib/iseq_loader_checker.rb というツール…なんだっけこれ? 名前からして ISeq のバイナリフォーマットもしくは Array からのロードがうまくいってるかのチェックを行うツールみたいですが、どっちのフォーマットを使うかの指定を行う環境変数 RUBY_ISEQ_DUMP_DEBUG の内容を標準出力に表示するようにしています。

[88f38c187e] Koichi Sasada 2019-09-30 06:36:19 UTC

8ba48c1b8509bc52c2fc1f020990c8a3a8eca2c9 の修正に対応するテストの追加?

[c3b84f2de8] Koichi Sasada 2019-09-30 08:23:36 UTC

tool/lib/leakchecker.rb に require してみるというチェックが追加されてるんですが、うーんこれはなんだろう…。 require が上書きされて戻されてないのを検出するため? CI のエラー調査のためみたいです。

[1722c156dd] Nobuyoshi Nakada 2019-09-30 08:35:29 UTC

88f38c187e3171f8f351f3198247d20ea9f016ee で追加したテストメソッドで不要そうな変数があったのでコメントアウトしています。参照位置も true or ... の右辺にしてるので評価はされないけど消してはないですね。

[771fd915a4] Nobuyoshi Nakada 2019-09-30 08:39:38 UTC

同じく 88f38c187e3171f8f351f3198247d20ea9f016ee で追加されたテストメソッドでただの assert が使われてたのを assert_operator を使うように修正しています。

[10d6a3aca7] Nobuyoshi Nakada 2019-09-30 08:43:11 UTC

3207979278bea11c50cb84f4044047b9c503230b の変更で VM_ASSERT() でチェックしている rb_method_entry_t の条件は callable_method_entry_p() だと型がおかしいみたいなので、 rb_method_entry_t::defined_class を callable_class_p() でチェックするように修正しています。

[945560008f] Koichi Sasada 2019-09-30 08:59:10 UTC

c3b84f2de83a27acc638f99743bfa2c44bac621c のデバッグ用に tool/lib/leakchecker.rb に追加したチェックを revert しています。

[fc66947c61] Yusuke Endoh 2019-09-30 11:22:29 UTC

共有文字列のテストで String#-@ の結果を使ってないのが警告になってたので未使用のローカル変数("_" ではじまる変数名を使うことで警告を抑制してる)に代入しておくようにしています。

[5ddc2ba13e] Yusuke Endoh 2019-09-30 11:24:26 UTC

Kernel#open が引数に対して to_open メソッドを内部的に呼ぶ時のキーワード引き数の委譲についてのテストで、特異メソッドの to_open を再定義する前に remove_method で定義を削除して再定義の警告を抑制しています。

ruby-trunk-changes 2019-09-29

今日は拡張ライブラリや bundled gems の更新や古い ruby でもビルドできるようにする修正などがありました。

[6e1b72ae4a] Yuki Nishijima 2019-09-29 04:15:09 UTC

bundled gem の did_you_mean のバージョンを 1.3.1 に更新しています。

[289cad501d] git 2019-09-29 04:17:05 UTC

version.h の日付更新

[e2d97cffe5] Nobuyoshi Nakada 2019-09-29 08:28:58 UTC

Array#to_s が各要素を文字列化する際に inspect メソッドを呼ぶことを rdoc 用コメントに明記しています。 [ruby-list:50826]

[ce477089f6] Benoit Daloze 2019-09-29 09:04:28 UTC

e2d97cffe5aecc88f3fc4dc7be9a7b3a57bede87 の rdoc 用コメントの追記の文法修正。

[f10c9cb1f2] Nobuyoshi Nakada 2019-09-29 09:21:17 UTC

拡張ライブラリ zlib の gemspec ファイルでバージョンを取得するために zlib.c を探すディレクトリを独立した gem の時のディレクトリ構成にも対応するようにしています。

[94db8cda9b] Nobuyoshi Nakada 2019-09-29 09:52:31 UTC

拡張ライブラリ zlib で古い ruby 向けに rb_nogvl() がない時にかわりに rb_thread_call_without_gvl() を使うようにしているのと、キーワード引数の警告抑制のための rb_class_new_instance_kw() も古い ruby 向けの fallback マクロを定義するようにしています。

[7f30783af7] Nobuyoshi Nakada 2019-09-29 09:13:00 UTC

拡張ライブラリ stringio の gemspec ファイルでバージョン取得でクオート記号をはずすために String#undump を使ってたのを、これも古い ruby 対応で元々クオート記号を除いて切り出すように修正しています。

[ef795f9abd] Nobuyoshi Nakada 2019-09-29 09:13:41 UTC

拡張ライブラリ stringio のサポートする ruby のバージョンを 2.4 以降に更新しています。

[68ab4a5e35] Nobuyoshi Nakada 2019-09-29 09:02:00 UTC

拡張ライブラリ stringio で古い名前の rb_funcall2() を使っていたところを rb_funcallv() を使うように修正しています。

[7fe253f47f] Nobuyoshi Nakada 2019-09-29 09:06:02 UTC

そして拡張ライブラリ stringio でも引数を丸ごと別メソッドに委譲する時にキーワード引数の警告が有効になるように rb_funcallv_kw() を利用するようにしています。古い ruby 向けの fallback マクロの定義も追加しています。

[f6f03dcad6] Nobuyoshi Nakada 2019-09-29 09:07:51 UTC

拡張ライブラリ stringio のバージョンを 0.0.3 に更新しています。

[e3b11566bf] Benoit Daloze 2019-09-28 09:45:23 UTC

GitHub Actions の macOSUbuntu の workflow から make test-bundled-gems のエラーを無視させる設定を消しています。

[d090e449ef] Benoit Daloze 2019-09-29 10:18:49 UTC

同じく GitHub Actions の macOSUbuntu の設定で make test-bundled-gems のテストでエラーを無視する gem に test-unit を追加しています。

[4096e4b08c] Benoit Daloze 2019-09-29 10:16:10 UTC

make test-bundled-gems のルールに直接書いてあった shell の内容を tool/test-bundled-gems.rb というファイルに分離して Makefile のほうをシンプルに記述するようにしています。

[a27dc83113] Benoit Daloze 2019-09-29 10:38:21 UTC

4096e4b08c46dddb8edc9dabf70e737946ac6df8 の再修正。tool/test-bundled-gems.rb にそれを実行している ruby 自体のファイルパスを渡すようにしています。