ruby-trunk-changes r54911 - r54921

今日は Random で arc4random_buf() を使った実装の追加や bmcall() のリファクタリングなどがありました。

yui-knk: r54911 2016-05-04 23:12:10 +0900

internal.h に rb_nucomp_add() と rb_nucomp_mul() のプロトタイプ宣言を追加して numeric.c の関数内で宣言していた箇所を削除しています。

nobu: r54912 2016-05-05 10:49:35 +0900

random.c の Windows 版の CryptGenRandom() を使った実装や Linuxシステムコール getrandom を使った実装を wrap した fill_random_bytes_syscall() という関数の定義を arc4random_buf() という関数が使えるときにはこちらを利用するようにしています。

svn: r54913 2016-05-05 10:49:36 +0900

version.h の日付更新。

nobu: r54914 2016-05-05 12:22:20 +0900

全体的に JUMP_TAG() を使っていたところを TH_JUMP_TAG() を利用するようにして、rb_catch_protect() からは vm_catch_protect() という rb_thread_t を引数に追加した関数を切り出して rb_catch_obj() からもこちらを利用するようにリファクタリングしています。

yui-knk: r54915 2016-05-05 14:39:35 +0900

String#sub の rdoc 用コメントで言及されていた正規表現マッチした部分文字列の特殊変数の typo 修正(&$ -> $&)。

nobu: r54916 2016-05-05 16:11:34 +0900

古い gcc での TH_EXEC_TAG() 内での "clobbered by 'longjmp' or 'vfork'" 警告の対策だと思われますが、r54910 で導入した proc.c の call_method_data_safe() で call_method_data() の戻り値を代入する result を一旦 volatile VALUE * にキャストすることで警告を抑制しようとしています。

nobu: r54917 2016-05-05 16:18:14 +0900

bmcall() で引数 args が配列オブジェクトでなかった時に一時的な配列オブジェクトを作っていたのを直接 rb_method_call_with_block() を呼ぶようにしています。args と argc/argv ってこれどういう関係なんだろ。あと(次の r54918 で消されてますが)ここではちょっと変わった RB_GC_GUARD() の呼びかたがされてましたね。

nobu: r54918 2016-05-05 16:27:10 +0900

r54917 の続き。 bmcall() で args は argc/argv を元に作られた配列なのでそもそも分岐なども不要ということでいきなり rb_method_call_with_block() を呼ぶだけのただの wrapper 関数にしています。

yui-knk: r54919 2016-05-05 18:06:39 +0900

test/ruby/test_complexrational.rb で raise がダブっていたところがあったのを修正しています。

nobu: r54920 2016-05-06 00:00:05 +0900

random.c の struct MT で素朴に unsigned int を使っていたところを uint32_t を使うようにしています。int が 32bit 以上あることを期待していたのを明示的に型を指定するようにしているようです(assume int is enough to store 32bits というコメントがあった)。

svn: r54921 2016-05-06 00:00:06 +0900

version.h の日付更新。