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 つきを使うようにしています。