ruby-trunk-changes r42072 - r42083

今日も主に Array の処理について RGenGC の Write Barrier の追加削除が行なわれていました。

ko1:r42072 2013-07-19 21:56:58 +0900

array.c の RGenGC 絡みの最適化の続き。 Write Barrier の不要なところでの RARRAY_PTR() のかわりに RARRAY_RAWPTR() を利用するようにする変更。

ko1:r42073 2013-07-19 22:00:23 +0900

gc.c の static 関数 type_name() の前置プロトタイプ宣言を追加しています。

nobu:r42074 2013-07-19 22:31:03 +0900

gc.c のコンパイラ警告除去のための明示的なキャスト追加。

nobu:r42075 2013-07-20 11:27:29 +0900

test/ruby/test_io.rb のテストメソッドを複数のメソッドの分割しているようです。あと使い回せる処理を Module に切り出して再利用するようにしています。

svn:r42076 2013-07-20 11:27:33 +0900

version.h の日付更新。

nobu:r42077 2013-07-20 12:13:40 +0900

rb_enc_code_to_mbclen() という公開 API を追加しています。引数の codepoint とエンコーディングからバイト幅を返す(ただしそのエンコーディングにおいて不正な文字だったら 0 を返す)関数だそうです。

nobu:r42078 2013-07-20 12:14:09 +0900

String#succ で UTF-16UTF-32 などのワイド文字のエンコーディングで文字ベースでのインクリメント処理を行うように実装を追加しています。 [ruby-core:56071] [Bug #8653]

ko1:r42079 2013-07-20 14:39:57 +0900

配列のバッファを共有した時に RGenGC で shady オブジェクトにするようにしています。原因のわからない SEGV が rubyci で発生しているそうでその(とりあえずの?)対応みたいです。

nobu:r42080 2013-07-20 15:02:54 +0900

safe.c に ruby_safe_level_4_warning() という関数の定義を追加しています。 古い拡張ライブラリのためとのことで互換性のためだと思いますが、r42037 で ruby 本体以外では rb_ensure(4); を警告に留めるために gcc 4.4 以降の拡張機能の attribute をつけて追加した宣言で、本体がないとコンパイルエラーになってしまうからだと思います。 [ruby-dev:47517] [Bug #8652]

ko1:r42081 2013-07-20 15:24:11 +0900

Array#resize で配列が RVALUE に埋め込まれる時に要素をコピーする処理で新たな参照の書きこみがないので Write Barrier 不要として MEMCPY() でのコピーに置き換えています。

naruse:r42082 2013-07-20 18:10:12 +0900

r42078 で String#succ がワイド文字のエンコーディングを意識するようにしたのですが、enc_succ_char() が NEIGHBOR_WRAPPED を返した時の処理が抜けていて桁上がり時の処理が適切に行なわれていなかった不具合を修正しています。

naruse:r42083 2013-07-20 18:10:17 +0900

test/ruby/test_m17n_comb.rb でテストに代表的なエンコーディングに変換する1文字メソッドを定義していた Module で ASCII-8BIT に変換していた a() を b() という名称に変更して(ついでに String#b を利用するように変更して)、a() は US-ASCII に変換するメソッドとして新たに追加しています。で先の r42082 で追加した String#succ のテストで a() を使うようにしているようです。