ruby-trunk-changes r34350 - r34354

今日は Encoding.compatible? の不具合修正などがありました。

naruse:r34350 2012-01-21 21:57:37 +0900

Encoding.compatible? に Symbol を渡した時に、String オブジェクトかどうかチェックするために BUILTIN_TYPE() に渡されてしまっていて SEGV する不具合を修正しています。BUILTIN_TYPE() には Fixnum や nil, ture, false そして Symbol といった即値の値は渡せないので、RB_TYPE_P() を使ってチェックするようにして、また何度もチェックしていたので結果を変数に格納しておくようにしています。 [ruby-core:42204] [Bug #5921]

nobu:r34351 2012-01-21 22:21:10 +0900

VALUE 型の値が Fixnum かどうかチェックするマクロ FIXNUM_P() で引数を FIXNUM_FLAG とビット論理積とる前に int にキャストするようにしています。 FIXNUM_FLAG が int だからそろえているということだと思います。

nobu:r34352 2012-01-22 15:23:38 +0900

rb_intern3() で文字列が ASCII 文字のみだった場合にエンコーディングを US-ASCII にするためのチェックを rb_enc_str_coderange() を利用して最初にやってしまうようにしています。

svn:r34353 2012-01-22 15:23:45 +0900

version.h の日付更新。

nobu:r34354 2012-01-22 15:41:29 +0900

シンボルのテーブルに登録する関数 register_symid() から String オブジェクトを生成してからの処理を register_symid_str() として切り出してこれを利用するようにリファクタリングしています。既に String オブジェクトが渡されている rb_intern_str() ではわざわざこれを再度 C の文字列として渡す必要がなくなります。