ruby-trunk-changes r53173 - r53191

今日は prepend したモジュールによるメソッド再定義で VM 最適化命令の脱最適化がうまくいかないことがある不具合の修正や、拡張ライブラリ stringio の encoding の扱いの変更などがありました。

shugo: r53173 2015-12-18 07:43:35 +0900

VM の最適化命令の脱最適化のためなどにメソッドの再定義がされているかチェックする rb_vm_check_redefinition_opt_method() にて prepend で Module が指し込まれている時に再定義されているのを検出できなくなっていた不具合を修正しています。 [ruby-core:72188] [Bug #11826]

svn: r53174 2015-12-18 07:44:21 +0900

version.h の日付更新。

hsbt: r53175 2015-12-18 09:42:49 +0900

拡張ライブラリ nkf の ext/nkf/nkf-utf8/utf8tbl.c と ext/nkf/nkf-utf8/utf8tbl.h のヘッダ部分のコメントの typo 修正。 https://github.com/ruby/ruby/pull/1159

hsbt: r53176 2015-12-18 09:44:52 +0900

拡張ライブラリ pty の PTY.spawn の rdoc 用コメントの typo 修正。 https://github.com/ruby/ruby/pull/1157

hsbt: r53177 2015-12-18 10:25:08 +0900

irb で新規追加されたインデント除去つきヒアドキュメント "<<~" に対応するようにしています。 https://github.com/ruby/ruby/pull/1127

kosaki: r53178 2015-12-18 11:09:38 +0900

RubyKaigi 2015 の kosaki さんのキーノートで触れられていた DTrace の発火イベントが typo して METHOD_RETURN_HOOK になっていたのを CMETHOD_RETURN_HOOK に修正しています。

shugo: r53179 2015-12-18 11:32:17 +0900

r53173 とちょっと似ていますが、Module を prepend で追加してからその後でその Module でメソッドを定義して上書きした時に最適化命令のメソッド再定義検出がうまくいかない不具合を修正しています。なかなか難しい。 [ruby-core:72226] [Bug #11836]

nobu: r53180 2015-12-18 12:05:53 +0900

拡張ライブラリ stringio の StringIO#ungetc と StringIO#pos= でポジションを変更した時の挙動のテストを追加しています。 r26588 に対するテストということでかなり前のものですね。

nobu: r53181 2015-12-18 12:09:16 +0900

拡張ライブラリ stringio で StringIO#pos= でバッファの文字列の末尾以降に移動した状態で StringIO#ungetbyte した時に間に NUL 文字(\000)を埋めるようにしています。またこれ以外にも StringIO#ungetbyte と #pos= の組み合わせについてのテストが追加されているようです。

hsbt: r53182 2015-12-18 12:39:49 +0900

doc/syntax/*.rdoc の文法というかカンマの使いかたの修正です。 https://github.com/ruby/ruby/pull/1121

nobu: r53183 2015-12-18 12:55:08 +0900

標準添付ライブラリ csvCSV#shift のコメントの typo 修正。 https://github.com/ruby/ruby/pull/1160

nobu: r53184 2015-12-18 12:55:29 +0900

標準添付ライブラリ csv で Hash リテラルを書いている場所で最後の要素のあとにカンマを追加しています。将来要素を追加する時に最後の行を変更しなくてすむようにしているということのようです。あとインデントというかコーディングスタイルも修正しています。

nobu: r53185 2015-12-18 15:40:00 +0900

拡張ライブラリ stringio の #ungetc と #ungetbyte の実装で処理のメイン部分を strio_unget_bytes() という関数に括り出して共有するようにリファクタリングしています。

ko1: r53186 2015-12-18 16:13:16 +0900

r52949 で RubyVM::InstructionSequence のバイナリフォーマットの読み書き機能追加時に USE_LAZY_LOAD というマクロで遅延ロード(バイナリファイルの内容も一度に全部読んでしまうのではなくて必要になったモジュールやクラスの部分を都度読む)の実装を ON/OFF していますが、この定義を外から(コンパイラオプションなどで) ON にした時に有効にできるようにデフォルトの定義を #ifndef の中に入れています。

ko1: r53187 2015-12-18 16:51:58 +0900

同じく r52949 で追加された RubyVM::InstructionSequence のバイナリフォーマットからのロード時に引数の文字列オブジェクトの taint チェックを追加しています。

nobu: r53188 2015-12-18 16:54:33 +0900

拡張ライブラリ stringio の Encoding の扱いについての変更で、Encoding はバッファとなる String オブジェクトのものをそのまま使うのではなく StringIO の構造体 struct String() のメンバとして別に保持するようにして、読み込みモード時には String オブジェクト自体の encoding は変更しないようにしています。チケットは StringIO のバッファとなる文字列に freeze されたものを渡すと read するだけでも例外が発生するというものです。 [ruby-core:72189] [Bug #11827]

shugo: r53189 2015-12-18 17:08:08 +0900

r53179 の ChangeLog エントリの typo 修正。

nobu: r53190 2015-12-18 17:16:02 +0900

NEWS ファイルの r53188 の StringIO の encoding についての記述を修正して、中の String オブジェクトと StringIO 自体の encoding が異なると問題が発生する可能性があるという点を強調するようにしています。

ko1: r53191 2015-12-18 17:24:29 +0900

RubyVM::InstructionSequence をバイナリフォーマットからロードする時の ibf_load_object_string で個別のオブジェクト毎のメタデータで freeze が指定されていた時に文字列は rb_obj_freeze() ではなく rb_fstring() を用いて fstring を作るようにしています。