ruby-trunk-changes r55093 - r55108

今日は拡張ライブラリ openssl の不具合修正や OpenSSL::PKey::EC のメソッド名の変更などがありました。

nobu: r55093 2016-05-21 09:26:31 +0900

r55021 で configure.in で組み込み関数 _setjmp() や _setjmpex() のチェックに RUBY_CHECK_SETJMP() を切り出した時に HAVE_XXX のマクロ定義がなくなってしまっていたのを修正しています。

nobu: r55095 2016-05-21 11:12:55 +0900

io.c で rdoc に ARGF をクラスとして認識させるための #if 0 でコメントアウトされた rb_define_class() の呼び出しで "ARGF.class" としていたのを "ARGF" に修正しています。 rdoc が少し賢くなったのかな。 https://github.com/ruby/ruby/pull/1358

nobu: r55096 2016-05-21 11:18:44 +0900

標準添付ライブラリ ipaddr の rdoc 用コメントの typo 修正。 https://github.com/ruby/ruby/pull/1349

rhe: r55097 2016-05-21 12:44:10 +0900

標準添付ライブラリ openssl の OpenSSL::Buffering の #readpartial と #read_nonblock でバッファから読み込んだ文字列が空の時に IOError を発生させるコードがありましたが、この位置ではありえないので削っています。 https://github.com/ruby/openssl/pull/23

rhe: r55098 2016-05-21 14:30:48 +0900

拡張ライブラリ openssl に OpenSSL::PKey::EC の private_key? と public_key? メソッドをそれぞれ private? と public? メソッドに改名して、互換性のため元の名前は alias として残しています。 EC だけ他の鍵のクラスとメソッド名が違ってたんですね。 [ruby-core:45541] [Bug #6567]

rhe: r55099 2016-05-21 14:45:41 +0900

拡張ライブラリ openssl の rdoc 用コメントのサンプルコードで変数名が間違っていたのを修正。 https://github.com/ruby/openssl/pull/32

rhe: r55100 2016-05-21 16:25:00 +0900

拡張ライブラリ openssl の OpenSSL::SSL::SSLSocket#stop で #connect とほぼ同じタイミングで呼ばれると利用中の構造体のメモリ領域を解放してしまって SEGV する可能性があったのを修正しています。 ossl_ssl_stop() では ossl_ssl_shutdown() の呼び出しのみ行いメモリ解放はしないようにしています。 [ruby-core:74978] [Bug #12292]

naruse: r55101 2016-05-21 22:24:32 +0900

configure.in と win32/Makefile.sub で ALWAYS_INLINE マクロの定義を追加しています。 gcc などでは __always_inline__ 属性として、Windows 版は __forceinline として展開されるようになっています。

naruse: r55102 2016-05-21 22:24:33 +0900

rb_scan_args() の定義を class.c から include/ruby/ruby.h に移動してマクロとして定義し、 __VA_ARGS__ を利用して可変長引数を受け取って argc, argv の形で引数を組み立てるようにしています。ここの RB_NARG マクロの書きかたはちょっとした見物ですね。おもしろい方法で引数の数を取り出してます。引数の個数は 19個までに制限されてしまいますが。 また r55101 で追加した ALWAYS_INLINE を使って強制的にインライン化される関数として定義した rb_scan_args0() にこれを渡して呼び出すようにしています。これにより呼び出し場所ごとに引数の数がコンパイル時に決まるので高速になるみたいです。 参考URL: https://gustedt.wordpress.com/2011/07/10/avoid-writing-va_arg-functions/

usa: r55103 2016-05-21 22:47:06 +0900

r55102 で rb_scan_args0() を ALWAYS_INLINE マクロと inline 修飾子両方使っていたのが Windows 版だとビルドに失敗するみたいで inline を削っています。

naruse: r55104 2016-05-21 23:01:23 +0900

r50102 の rb_scan_args() のマクロ化と r55103 の修正を revert しています。 gcc 固有の手法だったみたいです。残念。

naruse: r55105 2016-05-22 02:47:52 +0900

拡張ライブラリ zlib で sizeof() というマクロを導入して本来の sizeof() の型を int にキャストしていたのをやめて、使っているところで適切にキャストするようにしています。

svn: r55106 2016-05-22 02:47:53 +0900

version.h の日付更新。

nobu: r55107 2016-05-22 03:06:04 +0900

Complex, Range, Rational, Struct の hash メソッドのテストで、Fixnum がかえってくることを期待していたテストを Integer であることをチェックするようにしています。 Fixnum/Bignum クラスの Integer への統合の関係かなと思いましたが、コミットログをみると Bignum (内部的な)が帰ってくることもあるのかも。

nobu: r55108 2016-05-22 03:09:05 +0900

Integer や Bignum のテストで、結果のクラスが Fixnum/Bignum のどちらかチェックしていたところを Integer のインスタンスであることをチェックするようにしています。こちらは Integer への統合の関係ですね。