ruby-trunk-changes r58854 - r58871

今日は Dir.glob にキーワード引数 base を追加する変更や Array#inject の不具合修正などがありました。

nobu: r58854 2017-05-23 21:11:57 +0900

INSNS を文字列化する時に label 用のフォーマット文字列を LABEL_FORMAT というマクロに切り出すリファクタリング

nobu: r58855 2017-05-23 21:38:01 +0900

標準添付ライブラリ net/http のテストで Net::HTTP.start を呼んだ後に Net::HTTP#finish を読んで fd leak を修正しています。けどこれ例外発生時は h が nil になって NoMethodError になるんじゃないかな。

nobu: r58856 2017-05-23 21:42:40 +0900

.travis.yml で build というディレクトリを掘ってそこでビルド実行するようにしています。ソースディレクトリ以外でのビルドをテストするようにしてるんですかね。

nobu: r58857 2017-05-23 22:18:45 +0900

r58856 の続きで .travis.yml でソースディレクトリを書き込み不可にしてビルドするようにしています。

nobu: r58858 2017-05-23 22:47:36 +0900

Dir.glob に base というキーワード引数を追加して、glob の結果に prefix を付けたものを返すことができるようにしています。 [ruby-core:78767] [Feature #13056]

nobu: r58859 2017-05-23 22:54:10 +0900

r58858 で追加したテストで Dir.glob の結果の順序に依存しないように sort を追加しています。 [ruby-core:78767] [Feature #13056]

nobu: r58860 2017-05-23 23:34:12 +0900

r58858 で追加した Dir.glob のキーワード引数 base に Dir オブジェクトを渡すことができるようにしています。 ついでに(?) openat(3) を使ってディレクトリの fd を元にサブディレクトリの fd を開いていくように実装を書き換えています。 [ruby-core:78767] [Feature #13056]

naruse: r58861 2017-05-24 01:51:48 +0900

IO.select に MSG_OOB に書き込みのある TCPSocket を渡して exceptfds で検出できるというテストが Solaris 11 でうまくパスしないそうで(readfds のほうで検知されるらしい)、skip するようにしています。

svn: r58862 2017-05-24 01:51:48 +0900

version.h の日付更新。

normal: r58863 2017-05-24 09:34:12 +0900

rubyspec の IO.popen のテストで無限に sleep する子プロセスを起動する時に環境によって shell が間にはさまると長時間待たされるのを直接 ruby を起動するようにして修正しています。

normal: r58864 2017-05-24 12:01:44 +0900

String#crypt の実装で struct crypt_data を自動変数としてスタックに確保していたのを ALLOC() を使ってヒープにメモリを確保するようにしています。環境によっては 131232 bytes もあるそうです。

ko1: r58865 2017-05-24 15:46:44 +0900

r57676 で導入した DEBUG_COUNTER に様々な条件のオブジェクトの数をみる obj_free, obj_str_ptr, obj_str_embed, obj_str_shared, obj_str_nofree, obj_str_fstr, obj_ary_ptr, obj_ary_embed, obj_obj_ptr, obj_obj_embed などを追加しています。

nobu: r58866 2017-05-24 15:55:09 +0900

r58864 の再修正。missing/crypt.h を使っていたら struct crypt_data のサイズは小さいのでやっぱりスタック上に置くようにしています。っていうか ALLOCV() とかでサイズをみて大きかったら自動でヒープに変えてくれるマクロがありませんでしたっけ?

watson1978: r58867 2017-05-24 15:57:08 +0900

Array#push や Array#<< で要素を追加する時に共有されてない配列では rb_ary_modify() を呼ばず rb_ary_modify_check() だけ直接呼ぶようにして最適化しています。 https://github.com/ruby/ruby/pull/1609 [ruby-core:81082] [Bug #13553]

nobu: r58868 2017-05-24 16:11:41 +0900

test/ruby/test_enum.rb で assert_float_equal という assertion method が重複して定義されていたので 1つ消しています。

nobu: r58869 2017-05-24 16:57:18 +0900

ruby のテスト用のライブラリ test/unit で assert_all_assertions_foreach というメソッドを追加して、第2引数以降に渡した引数を使ってブロックを呼び出して全て成功したら成功とするようにしています。こういうのまだなかったっけ?

nobu: r58870 2017-05-24 16:57:19 +0900

r58869 で追加した assert_all_assertions_foreach をさっそく利用して Integer の演算子メソッドを再定義した時の Array#inject の挙動のテストを + だけじゃなく他の二項演算子もテストするようにしています。 [ruby-dev:49510] [Bug #12178]

nobu: r58871 2017-05-24 17:00:42 +0900

Array#inject (#reduce) に Symbol をブロック引数として渡した時に要素が Integer だと最適化されてメソッドの visibility が考慮されないことがあるという不具合を修正しています。 [ruby-core:81349] [Bug #13592]