ruby-trunk-changes r47604 - r47613

今日は RubyGems の更新でインストールが失敗していたのを修正しています。

nobu: r47604 2014-09-17 09:54:10 +0900

vm_method.c で OPT_GLOBAL_METHOD_CACHE が偽に定義されていた時の関数マクロ GLOBAL_METHOD_CACHE() の定義に void 型の rb_bug() を使っているため、値のある式とするために "," で繋げていたところを、マクロが展開された時にマクロの置換部分が1つの式になるようにかっこで括って後に ",NULL" をつけるようにしています。
これ、元は 0,rb_bug(...) という定義になっていて、これがどう展開されるかというと

env = GLOBAL_METHOD_CACHE(klass, id);

env = 0,rb_bug(...);

となるので、env = 0 と rb_bug() を繋げた式となってたのですね。
けどこれだとマクロの展開の結果が呼び元の代入文などとくっついた結果1つの複文(複式?)になっていてなんだか妙なので

env = (rb_bug(...),NULL);

と展開されるようにしてマクロ展開部分だけで1つの式になるようにしています。どこかのコンパイラで警告になったのでしょうかね。

svn: r47605 2014-09-17 09:54:20 +0900

version.h の日付更新。

hsbt: r47606 2014-09-17 11:09:27 +0900

tool/rbinstall.rb の Gem.install の引数の間違いを修正しています。RubyGems の更新でメソッドの仕様が変化したということですかね。 https://github.com/rubygems/rubygems/issues/1013

hsbt: r47607 2014-09-17 11:33:41 +0900

拡張ライブラリ fiddle の sizeof のテストで long long の型のサイズを取得するテストを追加しています。けどなかださんは Fiddle::SIZEOF_LONG_LONG が存在しない環境もあるのではないかというようなことをおっしゃってましたね。 https://github.com/ruby/ruby/pull/716

normal: r47613 2014-09-17 16:26:12 +0900

拡張ライブラリ zlib の zlib_mem_alloc() で配列のメモリ確保に呼び出す関数を ruby_xmalloc() からサイズのオーバフローチェックつきの ruby_xmalloc2() に変更しています。なるほどー自分で xmalloc(size*n) のようにかけ算でサイズを求めるようなところは xmalloc2() を使ったほうがいいんですね。これは知らなかった。そして README.EXT(.ja) にも書いてなかった。というか xmalloc() 自体書かれてないですね。ALLOC() も Data_Make_Struct() の説明としてしか書かれていない。あれ、そんなもんでしたっけ?