ruby-trunk-changes r53771 - r53780

今日も String#downcase の :fold オプションに対応して enc/unicode/casefold.h の変更(再生成)などがありました。

duerst: r53771 2016-02-08 09:44:10 +0900

common.mk で enc/unicode/casefold.h を依存したファイルの更新があったら常に生成するようにしていたのを、unicode-up というターゲットを明示的に指定した時だけ生成するようにしています。ヘッダの生成に gperf が必要だったため、CI でビルド失敗していたので一時的にその回避のためとのこと。

nobu: r53772 2016-02-08 10:30:22 +0900

ruby の --enable/--disable オプションで feature 名は前方一致でマッチする名前で省略できますが、複数の feature 名にマッチする指定の時に例外を発生させる実装を AMBIGUOUS_FEATURE_NAMES というマクロが新の時に有効になるように追加しています。けど今のところ使える feature 名は先頭の文字から違うので、この機能が実際に使われる事態にはなりませんし、AMBIGUOUS_FEATURE_NAMES も 0 に定義されています。 [ruby-core:73700] [Bug #12050] での議論の結果曖昧だったらエラーにしたほうがいいよねってことで入れてるみたいです。

nobu: r53773 2016-02-08 12:41:16 +0900

rb_external_str_with_enc(), rb_str_concat(), rb_str_dump() などの関数で文字列に Encoding を関連付けるのに rb_encoding を使っていたのを encindex で指定するように最適化しています。

nobu: r53774 2016-02-08 12:44:48 +0900

rb_str_dump() で ASCII 非互換な Encoding の文字列を dump した時に '.force_encoding("xxx")' のような suffix を追加する時のサイズの拡張をマジックナンバーを書かずに strlen() などを使って計算するようにしています。

duerst: r53775 2016-02-08 13:00:31 +0900

enc/unicode/case-folding.rb で生成するヘッダファイルの flags に CaseFolding.txt から得た type に応じて ONIGENC_CASE_FOLD のフラグを追加するように処理を加えて、enc/unicode/casefold.h を生成し直したものをコミットしています。

nobu: r53776 2016-02-08 14:01:00 +0900

enc/unicode.c の codepoint の比較にマジックナンバーが使われていたところに enum による宣言を使って定数化したり、C 言語の 'i' の文字リテラルを利用して可読性を上げています。

nobu: r53777 2016-02-08 14:09:49 +0900

r53439 で標準添付ライブラリ webrickWEBrick::Utils::TimeoutHandler の終了処理をちゃんと排他処理するようにした対応で rubyems のテストも修正していたのが r53707 で 2.5.2 にした時に巻き戻ってたので再度適用しています。また古い ruby でも動くように defined? で WEBrick::Utils::TimeoutHandler.terminate の呼び出し可能かチェックしてから呼ぶようにしています。

duerst: r53778 2016-02-08 20:44:12 +0900

String#downcase で省略可能引数に :fold を指定した場合内部的な flags には ONIGENC_CASE_DOWNCASE と ONIGENC_CASE_FOLD の論理和が渡されていたのを、ONIGENC_CASE_FOLD だけビットを立てるようにしています。 ONIGENC_CASE_FOLD が downcase であるという意味を内包するようにしているってことだと思います。しかし onigenc_unicode_case_map で flags のチェックを1箇所だけ変更していますが、その下の code==I_WITH_DOT_ABOVE の時のところとかはいいのかなぁ。

duerst: r53779 2016-02-08 21:26:35 +0900

enc/unicode/case-folding.rb で ONIGENC_CASE_UPCASE と ONIGENC_CASE_DOWNCASE のフラグも出力するようにして enc/unicode/casefold.h を再生成しています。

svn: r53780 2016-02-08 21:26:36 +0900

r53779 の行末の空白除去。