ruby-trunk-changes r50494 - r50502

今日は Module#autoload の実装に変更があり、内部の実装を直接利用するのではなく require メソッドを呼び出すようにしています。また CGI::Cookie に httponly フラグを指定するメソッドの追加がありました。

tenderlove: r50494 2015-05-15 06:57:33 +0900

autoload でファイルを require するのに C API の rb_require_safe() を呼ぶのではなくて、rb_funcall() で ruby レベルで require メソッドを呼ぶように変更しています。autoload でも RubyGems で再定義した require を介在させることで intercept できるようにするためだそうです。ただこのせいで rubygems の require が無限再帰する現象が起きているようですね。 [ruby-core:69132] [Feature #11140]

svn: r50495 2015-05-15 06:57:52 +0900

version.h の日付更新。

xibbar: r50496 2015-05-15 08:27:01 +0900

標準添付ライブラリ cgiCGI::Cookie に HttpOnly の属性を指定できる機能を追加しています。 https://github.com/ruby/ruby/pull/887
ただついでに GGI::Cookie#secure= で true か false 以外の値を渡しても無視していたのが、!! で真偽値にして代入されるように変化している(つまり nil を代入しても今まで変化しなかったのが false になるようになってる)と微妙な仕様変更が含まれています。変更後のほうが自然だとは思いますけどね。

nobu: r50497 2015-05-15 17:59:33 +0900

と、思ったら r50496 のうち CGI::Cookie#secure= の変更の部分が revert されています。ドキュメントに secure= の引数は boolean じゃないといけないと明記されていたとのこと。

nobu: r50498 2015-05-15 18:05:57 +0900

Range#cover? と Range#include? の実装から判定部分を r_cover_p() という関数に切り出して共有するリファクタリング

nobu: r50499 2015-05-15 18:06:18 +0900

range.c で r_le() と r_lt() という大小比較の関数は戻り値を int にして 正/0/負 でイコールを含めるかどうかを呼び元で判定させることができるので r_less() という関数にまとめるリファクタリング。まあ、この戻り値だと r_less() というより r_cmp() と呼ぶほうがいいような気もしますけど。

nobu: r50500 2015-05-15 18:06:25 +0900

String#upto の実装 rb_str_upto() から文字列が数字だけからなることを確認する処理が複数回書かれていたので all_digits_p() という関数に切り出すリファクタリング

nobu: r50501 2015-05-15 18:28:24 +0900

Array#assoc と Array#rassoc で rdoc には戻り値は新しい Array オブジェクトが作成されると書かれていたのですが、実際は Array の要素の Array そのものが返されていたので、ドキュメントのほうを修正しています。

nobu: r50502 2015-05-15 21:39:56 +0900

Range#include? の実装で Range の始点、終点が文字列だったときの処理を rb_str_include_range_p() という関数として切り出して string.c に追加しています。またそこで rb_str_upto() から str_upto_each() という関数を切り出してそれを利用するようにリファクタリングしています。