ruby-trunk-changes r45644 - r45652

今日は拡張ライブラリ stringio の StringIO#putc の不具合修正や文字列の coderange 判定の処理の効率化などがありました。

nobu: r45644 2014-04-21 09:39:43 +0900

RGenGC の導入により GC.stress= にセットする値がただの真偽値でなく major GC や LazySweep の挙動を指定するビットフラグになっているのを内部的に定数を定義してマジックナンバーをソース内に埋め込まないようにしています。 また rdoc 用コメントにも追記しています。

svn: r45645 2014-04-21 09:39:47 +0900

version.h の日付更新。

nobu: r45646 2014-04-21 14:11:50 +0900

拡張ライブラリ stringio の StringIO#putc で非ASCII文字の時に文字のバイト幅を考慮せずに 1バイト追加していたのをエンコーディングを意識するように修正しています。 [ruby-dev:48114] [Bug #9765]

nobu: r45647 2014-04-21 17:31:30 +0900

string.c の rb_str_update() と rb_str_splice() が同じ実装だったのを wrapper 関数として定義していたのを関数マクロとして別名定義するようにしています。 これは RUBY_ALIAS_FUNCTION() は使わないんですかね。
[追記] static 関数なので RUBY_ALIAS_FUNCTION() を使わなかったとのことでした。[/追記]

naruse: r45648 2014-04-21 19:14:43 +0900

string.c の coderange_scan() で code range の推定で、絶対に真にならない条件の分岐があったのを消しています。

naruse: r45649 2014-04-21 19:14:46 +0900

文字列操作の coderange 回りのテスト用の拡張ライブラリで 文字列にキャッシュされた coderange も取れるようにしてスキャンは明示的に呼ぶようにしてより内部的な状態をテストするようにしているようです。

naruse: r45650 2014-04-21 19:15:20 +0900

r45648 と同じく string.c の coderange_scan() をリファクタリングしてループと条件分岐の構造をシンプルにしています。

naruse: r45651 2014-04-21 19:15:54 +0900

string.c の coderange_scan() で ASCII_8BIT の encindex を 0 固定で判定していたのを rb_ascii8bit_encindex() で判定するようにしています。 また rb_str_coderange_scan_restartable() でエンコーディングが ASCII_8BIT の時の coderange のスキャンで既に ENC_CODERANGE_VALID が返されてた時(非ASCII文字を検出していた時)はすぐ末尾までスキップするようにしています。

nobu: r45652 2014-04-21 19:16:06 +0900

r45649 で新規追加したファイル test/-ext-/string/test_coderange.rb の svn property を設定しています。