今日は Symbol GC の導入により ID2SYM() を使って Symbol を作ると GC されなくなる(pindown)ので、これを避けるようにする変更をあちこちでしていました。
ko1: r46999 2014-07-30 15:24:05 +0900
gc.c の未使用になっていたマクロ定義を削除しています。
svn: r47000 2014-07-30 15:24:16 +0900
version.h の日付更新。
suke: r47001 2014-07-30 21:35:15 +0900
拡張ライブラリ win32ole の WIN32OLE_RECORD 対応の続き。正直 WIN32OLE_RECORD クラスの背景もわかってないので詳細は省きます。
nobu: r47002 2014-07-30 21:36:27 +0900
thread.c の threadptr_local_aset() で if - else の if 節で return していたので else は削除しています。
nobu: r47003 2014-07-30 21:36:31 +0900
rb_to_symbol() という C API を追加しています。任意のオブジェクトを(Symbol か String 以外だったら) to_str で文字列化してからその Symbol を返します。
nobu: r47004 2014-07-30 21:36:34 +0900
r47003 で導入した rb_to_symbol() を ID2SYM(rb_to_id(id)) を使っていたところに利用して不要な pindown を避けるようにしています。
ktsj: r47005 2014-07-30 22:17:45 +0900
同じく Symbol の文字列を rb_id2name(SYM2ID(sym)) で得て symbol を pindown してしまっていたところを rb_sym2str() を使うように変更しています。
nobu: r47006 2014-07-30 22:46:41 +0900
r47005 の変更で RSTRING_PTR(rb_sym2str()) のように RSTRING_PTR() マクロの引数に関数呼び出しを渡していたので、複数回関数呼び出しが行なわれてしまっていたのを修正しています。一旦 VALUE 型の変数に代入してから使うようにしています。
nobu: r47007 2014-07-30 23:27:15 +0900
Process.kill や Signal.trap の引数のシグナルを指定する文字列が不正な時の ArgumentError 例外のメッセージに埋め込む時に PRIsVALUE を使ってエンコーディングを保持するようにしています。
ktsj: r47008 2014-07-30 23:31:53 +0900
sprintf.c で RSTRING_PTR() の中で関数呼び出し(rb_sym2str) をしてしまっていたところがあったので、ついでに PRIsVALUE を使って文字列オブジェクトのまま埋め込むようにして RSTRING_PTR() を使わないようにしています。