ruby-trunk-changes r51414 - r51434

今日は open に :flags オプションを追加する機能追加や、flonum や dynamic symbol の hash メソッドの計算の修正/変更などがありました。

normal: r51414 2015-07-29 05:02:38 +0900

rubygems の Gem::RemoteFetcher のテストで毎回 2048bit の DH 鍵を生成するのでなくてあらかじめ生成しておいた鍵を使うようにして、テスト時間を短縮しています。 [ruby-core:70151] [Bug #11397]

svn: r51415 2015-07-29 05:02:56 +0900

version.h の日付更新。

naruse: r51416 2015-07-29 10:39:14 +0900

Kernel#open や File.open などのオプションに :flags を追加して、File::CREAT や File::BINARY などのビットフラグの論理和による open(2) の flags のような指定ができるようにしています。おおっ、っていうかこれできないんでしたっけ? [ruby-core:69539] [Feature #11253]

naruse: r51417 2015-07-29 10:39:17 +0900

r51329 の .gdbinit での rb_ps_vm コマンドの再修正。linked list 構造を利用して辿るようにしています。また rb_ps_thread で Thread の情報の表示を追加、整形しています。

hsbt: r51418 2015-07-29 10:44:49 +0900

ObjectSpace.define_finalizer の rdoc 用コメントで設定した finalizer 用 Proc の call に渡される引数について追記しています。 https://github.com/ruby/ruby/pull/976

nobu: r51419 2015-07-29 11:06:38 +0900

いつ追加されたか追えなかったのですが、少し前に fake.rb の生成のために version.i というファイルを生成して template/fake.rb.in でそれを参照したりするようになっていましたが、version.i を使うのをやめ標準入力から直接読ませるように変更しています。 tool/update-deps で依存関係の解決時に矛盾が発生してしまっていたそうです。 r51398 で make clean にターゲットにも version.i が追加されていたはず。まだ残ってますね。

nobu: r51420 2015-07-29 11:13:00 +0900

internal.h の LIKELY() と UNLIKELY() の定義で引数 x を __builtin_expect() に渡すまえに ! で一旦真偽値を反転させて、常に 0 か 1 を渡すようにしています。

nobu: r51421 2015-07-29 12:37:24 +0900

r51420 の続きで、! で反転してましたが、!! で二重否定することで真偽値は反転せずに 0 or 1 にそろえるようにしています。

naruse: r51422 2015-07-29 13:10:19 +0900

r51416 の open の :flags オプション追加のテストで Tempfile を open の引数に渡してしまっていたのを修正しています。

nobu: r51423 2015-07-29 14:06:32 +0900

test/ruby/test_hash.rb の即値をキーにした Hash のテストで Fixnum だけテストしてたのを true, false, nil でもテストするようにしています。 [ruby-core:59638] [Bug #9381]

usa: r51424 2015-07-29 14:32:38 +0900

r51416 の open の :flags オプション追加のテストで IO#binmode? とまちがえて IO#binmode を呼んでいたのを修正しています。ついでにテストメソッド名の typo も修正しています。

nobu: r51425 2015-07-29 14:53:35 +0900

Hash のキーに Float を使った時に 64bit 環境で 即値の flonum になっている Float の場合の hash 値の計算が Fixnum から long に変換されていない不具合を修正しています。 これ、2.1 向けに backport 済みのチケットですけど、追加 backport が必要ですかね。 [ruby-core:59638] [Bug #9381]

nobu: r51426 2015-07-29 14:54:21 +0900

Symbol の hash 値を r51410 での dynamic symbol の hash 値を文字列としての hash 値を使うようにした変更に追随するため Symbol#hash を 定義し(rb_sym_hash() を追加)しています。 r51425 と同様に Hash のキーに使う即値のテストに Symbol のリテラルと to_sym による dynamic symbol も追加しています。 [ruby-core:59638] [Bug #9381]

nobu: r51427 2015-07-29 15:25:21 +0900

send_internal() で method_missing を呼び出す時にその理由を rb_thread_t::method_missing_reason にセットし忘れていたため、send でメソッドを呼び出した時に method_missing でも対応せず Object#method_missing まで行った時に NoMethodError ではなく NameError が発生していたのを修正しています。 method_missing_reason なんてあったんですね…。 [ruby-core:68515] [Bug #10969]

nobu: r51428 2015-07-29 16:00:25 +0900

str_buf_cat() で embed でなくて heap にバッファを取っているけどサイズが 0 の文字列を渡すと無限ループするという不具合を修正しています。 [ruby-core:70074] [Bug #11383]

nobu: r51429 2015-07-29 16:53:12 +0900

r51401 で ext/fiddle/extconf.rb で libffi のライブラリパスを展開せずに LIBFFI_A 変数の参照として埋め込むようにしたもののうち、$LOCAL_LIBS へ追加する部分は revert しています。 $LOCAL_LIBS は exts.mk にコピーされるので展開しておかないといけなかったとのこと。

nobu: r51430 2015-07-29 17:25:49 +0900

r51426 で Symbol 用の hash の定義 rb_sym_hash() はやっぱり削除して、rb_any_hash() から hash 関数の実装を関数ポインタで渡す any_hash() を切り出して rb_obj_hash() からこれを呼び出すようにしています。ん、結局これ dynamic symbol の時の hash は objid_hash() になる(r51426 の修正前と同じ)んじゃないのかな?

nobu: r51431 2015-07-29 21:35:42 +0900

test/ruby/test_hash.rb で未使用の変数の警告除去(実際には文字列の埋め込みに使われてるのですが、eval した時に埋め込まれるようになってるので検出されない)と assertion のメッセージに ML 番号を渡すようにする修正です。

nobu: r51432 2015-07-29 21:38:43 +0900

r51410 の dynamic symbol の hash 値の計算の変更で hashval には rb_str_hash() が返した値を 1bit 右シフトしたものを格納するようにしています。 Fixnum でかえってくるので最下位ビットを消しています。なのですがこの後結局 any_hash() でも 1bit 左シフトしてから 1bit 右シフトして返しているんですよね。これが何をしているのかよくわからない…。上位1bitを消してFixnumに収まる範囲の数値に切り詰めてるということかなぁ。

nobu: r51433 2015-07-29 21:41:09 +0900

r51348 で追加した openssl のテストで生成した Thread を待っていなくて Thread leak していたので Thread#join を追加しています。

nobu: r51434 2015-07-29 21:45:32 +0900

r51433 の続きで r51348 で追加された openssl のテストやその他のテストでも Thread#join するのを socket を閉じる前に行うようにして、処理中に閉じてしまわないようにしています。