ruby-trunk-changes r50329 - r50338

今日は主に Marshal 関連の例外発生時の埋め込むクラス名のエンコーディングを保持する修正や、メモリリークの修正、拡張ライブラリ tk のエラーの修正などがありました。

nobu: r50329 2015-04-16 20:43:37 +0900

Marshal.dump でも TypeError 例外時にメッセージに含めるクラス名に PRIsVALUE を使うようにしてエンコーディングを保持するようにしています。

nobu: r50330 2015-04-16 21:46:07 +0900

Marshal.dump でもう一箇所 TypeError 例外のメッセージにクラス名を埋め込む時に PRIsVALUE を利用するようにしています。

nobu: r50331 2015-04-16 23:25:19 +0900

今度は Marshal.load 時の _load_data メソッドがない時の例外メッセージに含めるクラス名を PRIsVALUE を使って埋め込むようにしています。

nobu: r50332 2015-04-16 23:25:33 +0900

今度は Marshal.load で _dump メソッドでダンプされたのに _load メソッドが未定義の時の例外のメッセージでクラス名を埋め込むのに PRIsVALUE を利用するようにしています。

nobu: r50333 2015-04-16 23:28:29 +0900

今度は marshal_dump メソッドを定義して dump したものを Marshal.load しようとしたらクラスに marshal_load メソッドが定義されていなかった時に発生させる TypeError のメッセージにクラス名を埋め込むのに PRIsVALUE を利用するようにしています。

nobu: r50334 2015-04-17 11:58:37 +0900

短い文字列オブジェクトのバッファを struct RVALUE のスロット内に収める STR_SET_EMBED() マクロで flags の STR_NOFREE をクリアするようにしています。ptr で文字列のバッファを指さなくなるため。 StringIO でのメモリリークの修正ということなのですが、これは一旦文字列が truncate されて embed になっても NOFREE フラグが消えないまま、今度は文字列が伸長してバッファが確保されてもそれが解放されないため、でしょうかね。 [ruby-core:68436] [Bug #10942]

svn: r50335 2015-04-17 11:58:51 +0900

version.h の日付更新。

nobu: r50336 2015-04-17 12:26:21 +0900

文字列オブジェクトへの追加を行う str_buf_cat() で rb_str_modify() で共有解除するだけでなく同時に必要なバッファサイズへの伸長も行う rb_str_modify_expand() を利用して余分な再確保を抑制するようにしています。

nobu: r50337 2015-04-17 12:55:53 +0900

r50334 の STR_SET_EMBED() で NOFREE フラグをクリアするようにした変更についてのテスト用拡張ライブラリを追加しています。r50334 で追加したテストのための拡張ライブラリをコミット漏れしていたようです。 [ruby-core:68436] [Bug #10942]

nobu: r50338 2015-04-17 14:07:58 +0900

r48250 で拡張ライブラリ tk で Tk::CallbackSubst と Tk::CallbackSubst::Info を Data を継承するクラスとして定義するようにしたのを revert しています。allocate の継承を避けるためだったと思うのですが実際は必要だったようです。 [ruby-list:50115]