ruby-trunk-changes r51857 - r51867

今日は主に組み込みエンコーディングの比較をオブジェクト管理なしでできるようにする内部的な変更がありました。

nobu: r51857 2015-09-15 12:44:34 +0900

BSD 系には qsort_r(3) という比較関数に渡す追加の引数を受け取れる標準ライブラリがあるそうで(OS X にもありますね)、これが定義されている環境では sort に qsort_r(3) を利用するようにしています。

svn: r51858 2015-09-15 12:45:05 +0900

version.h の日付更新。

nobu: r51859 2015-09-15 12:49:12 +0900

Array#sort の rdoc 用コメントでブロックが渡された時のブロックの評価値についての説明が反転していたのを修正しています。おおう…。 https://github.com/ruby/ruby/pull/1020

nobu: r51860 2015-09-15 13:13:15 +0900

r51859 に続き Array#sort の rdoc 用コメントでブロックの評価値が -1/0/+1 のいずれかを解釈すると書かれてましたが、実際には 負数/0/正数 で判断するのでそのように修正しています。

nobu: r51861 2015-09-15 14:49:20 +0900

internal.h から encoding index 関連の定数の定義を encindex.h というヘッダに分離しています。

nobu: r51862 2015-09-15 14:49:52 +0900

enc/ascii.c と enc/us_ascii.c, enc/utf_8.c で encindex.h を #include して index を 0 にしていたところを定数を利用するようにしています。

nobu: r51863 2015-09-15 14:57:30 +0900

localeinit.c でも ENCINDEX_ASCII と ENCINDEX_US_ASCII を利用していたので r51861 で分離した encindex.h を #include するようにしています。

nobu: r51864 2015-09-15 15:03:37 +0900

win32/win32.c でも ENCINDEX_XXX の定数を参照していたので #include "encindex.h" するようにしています。

nobu: r51865 2015-09-15 15:06:19 +0900

dir.c に fundamental_encoding_p() という関数を導入して、ASCII, US_ASCII, UTF-8 などの組み込みのエンコーディングを encoding index を元に判定できるようにしいます。

nobu: r51866 2015-09-15 15:15:44 +0900

win32/win32.c でエンコーディングの比較をしているところを encoding index での比較を使うようにしています。 コミットメッセージによるとこれにより組み込みのエンコーディングがオブジェクトの確保なしで比較できるというのが目的みたいです(初期化時に呼ばれるところではまだオブジェクトが使えない場合がある)。

nobu: r51867 2015-09-15 19:38:58 +0900

ENABLE_VM_OBJSPACE というマクロが偽でも rb_objspace_alloc() と free_stack_chunks() は定義するようにしています。 これが偽のことってあるのかなーと思って調べてみると、Windows 版では rb_w32_sysinit() でソケットの管理用の st_table をオブジェクトの管理が始まる前に作っているため 0 に定義されているようです。そうなのかー。