ruby-trunk-changes r49402 - r49413

今日は文字列の終端文字関連の修正がありました。拡張ライブラリを書く人にしか影響はないですね。

nobu: r49402 2015-01-26 11:00:43 +0900

文字列オブジェクトのワイド文字エンコーディングの時の終端文字の考慮のテスト用拡張ライブラリでエンコーディングにおいて不正な文字の時に例外が発生しないように MBCLEN_CHARFOUND_P() で文字をチェックして不正な時はバイト列の先頭をそのまま返ししています。 これ *s だけ返しているけどそれでいいんですかね?

nobu: r49403 2015-01-26 11:00:56 +0900

文字列操作の関数のテスト用拡張ライブラリに Bug::String#cstr_term_char だけでなくクラスメソッドとして Bug::String.cstr_term_char も追加しています。後で追加されるテストスクリプトで利用されています。

svn: r49404 2015-01-26 11:00:57 +0900

version.h の日付更新。

nobu: r49405 2015-01-26 11:37:51 +0900

str_make_independent_expand() で struct RVALUE 内に文字列を埋め込んだ時に終端文字 '\0' を追記するようにしています。 あれ、ここではエンコーディングは意識しなくていいのかな……と思ったらとりあえず Pull Request の変更を取り込んで後で再修正しているみたいです。 https://github.com/ruby/ruby/pull/821

nobu: r49406 2015-01-26 11:39:00 +0900

r49405 の追加修正で、終端文字は NUL文字に決め打たず TERM_FILL() を利用してワイド文字エンコーディングの時を考慮するようにしています。 またテストも追加しています。 ここで r49403 で追加したクラスメソッドを利用しています。 https://github.com/ruby/ruby/pull/821

nobu: r49407 2015-01-26 12:43:08 +0900

str_buf_cat() で RSTRING_PTR() や RSTRING_LEN() を毎回呼んでいるところをローカル変数に代入して使いまわすようにしています。こういう時メモリ確保(の副作用としての GC、の副作用としての finalizer 実行)などで Ruby のメソッドが呼ばれる可能性があると対象のオブジェクトが変更される可能性があるので気をつけないといけませんが、rb_str_modify() の後と RESIZE_CAPA() の後は再取得しているので大丈夫そうですね。と思ったけど RESIZE_CAPA() の後 olen は取り直していないけどこれは大丈夫ですかね。まさに操作中の文字列のサイズを弄られるとかだいぶ嫌な想定ですし、きっと考慮済みでしょうけど。

nobu: r49408 2015-01-26 12:43:20 +0900

str_buf_cat() および RESIZE_CAPA() マクロにおいても終端文字のサイズを考慮するようにしています。

nobu: r49410 2015-01-26 16:20:34 +0900

gcc 5 では -Wno-maybe-uninitialized というオプションを追加するようにしています。 thread.c の do_select() で誤検出するので抑制のためだそうです。

nobu: r49411 2015-01-26 17:14:17 +0900

configure で dtrace -G のチェックをしているところで、実際にオブジェクトファイルが更新されているかを diff を取ってチェックしています。環境によって dtrace の -G オプションの有無や挙動が異なるのでその対応のためみたいです。

knu: r49412 2015-01-26 18:06:54 +0900

misc/ruby-electric.el に 2.2.2 をマージしています。 https://github.com/knu/ruby-electric.el

hsbt: r49413 2015-01-26 22:09:50 +0900

.gitignore に r49326 で enc/trans をビルドディレクトリに作成するようにした時に生成されるようになったタイムスタンプファイル enc/trans/.time を追加しています。