ruby-trunk-changes r60055 - r60061

今日は String#unpack("M") や String#tr の結果の ascii_only? の判定が間違うことがある不具合の修正や Windows での socket の close 時に例外割り込みがあると SEGV する可能性があった不具合の修正などがありました。

shirosaki: r60055 2017-09-28 22:43:21 +0900

Windows で socket を close する時に fptr_finalize_flush() で GVL を解放すると、例外処理中に再度例外が発生して SEGV することがあるのを修正しています。 io_close_fptr() から呼ばれた時に Windows 環境では GVL 解放しないようにしています。 [ruby-core:82602] [Bug #13856]

shirosaki: r60056 2017-09-28 22:55:48 +0900

Windows での DLL のロードのテストで MinGW で PATH_SEPARATOR を RbConfig::CONFIG["PATH_SEPARATOR"] を使うとテストが通らなかったので File::PATH_SEPARATOR を使うように修正しています。 [ruby-core:81623] [Bug #13642]

nobu: r60057 2017-09-29 16:43:22 +0900

Array の Array#-, #&, #| などのメソッドで receiver も引数も小さなサイズの配列の時には中間オブジェクトの Hash は使わずに直接二重ループで検査するようにしています。このほうが余計なオブジェクト確保が抑えられて良いようです。 [ruby-core:82725] [Feature #13884]

svn: r60058 2017-09-29 16:43:23 +0900

version.h の日付更新。

nobu: r60059 2017-09-29 17:00:47 +0900

String#unpack の指示子 "M" で ASCII 文字の範囲に収まってなかったら coderange を正確にセットするようにしています。 unpack("M") でできた文字列の String#ascii_only? の判定結果が間違うことがあったようです。 [ruby-core:83055] [Bug #13949]

nobu: r60060 2017-09-29 17:15:50 +0900

String#tr で UTF-16LE などの ASCII-incompatible なエンコーディングの文字列を変換しようとした時に結果の文字列の coderange が間違って、こちらも String#ascii_only? の判定が間違うことがあった不具合を修正しています。 [ruby-core:83056] [Bug #13950]

kazu: r60061 2017-09-29 20:00:00 +0900

標準添付ライブラリ erb で String#unpack に [0] を使って最初の要素だけ使っていたのを String#unpack1 を利用するようにリファクタリングしています。 [ruby-core:83027] [Feature #13943]