ruby-trunk-changes r51365 - r51374

今日は Random の Linux 版の実装でブロックしないようにする変更などがありました。

ko1: r51365 2015-07-25 04:49:16 +0900

構造体メンバ struct rb_iseq_constant_body::catch_table の型に const 修飾子を追加しています。

svn: r51366 2015-07-25 04:49:35 +0900

version.h の日付更新。

ko1: r51367 2015-07-25 05:58:09 +0900

構造体メンバ struct rb_iseq_constant_body::param::opt_table の型に const 修飾子を追加しています。 そのために(ついでに?) iseq_set_arguments() からキーワード引数のコンパイル部分を iseq_set_arguments_keywords() に切り出しています。

ko1: r51368 2015-07-25 06:01:09 +0900

構造体メンバ struct rb_iseq_constant_body::line_info_table の型に const 修飾子を追加しています。

ko1: r51369 2015-07-25 06:44:14 +0900

rb_call_info_t::index や struct rb_iseq_constant_body のサイズを表すメンバの型をのきなみ int -> unsigned int に変更しています。

nobu: r51370 2015-07-25 10:48:47 +0900

rb_str_hash_cmp() で文字列の比較をするときに、まず長さが一致するかをチェックしてから rb_str_comparable() を呼び出すようにしています。また fstring のテーブルでの同値性チェックのための fstring_cmp() で rb_str_hash_cmp() を使っていたのを、似たような実装で rb_str_comparable() を呼び出すかわりに Encoding を比較するような定義に書きかえています。 fstring では coderange の比較は不要なんでしょうか?

nobu: r51371 2015-07-25 10:48:53 +0900

str_replace() で分岐によって str_replace_shared() で既に呼び出し済みの rb_enc_cr_str_exact_copy() が再度呼ばれていたので、もう一方の分岐でのみ呼び出すように修正しています。

nobu: r51372 2015-07-25 11:05:34 +0900

String#replace の時の str_replace_shared_without_enc() でワイド文字のエンコーディングでの終端文字に対応しています。

nobu: r51373 2015-07-25 11:18:32 +0900

iseq.c で RARRAY_LEN() に対するループのカウンタに long 型の変数を利用するように修正しています。

nobu: r51374 2015-07-25 21:03:50 +0900

r51182 で Linux において Random の実装でシステムコール getrandom(2) (syscall(SYS_getrandom)) を利用するようにしましたが、エントロピーが枯渇している時にブロックしないように flags に GRND_NONBLOCK を渡すように修正しています。 [ruby-core:70114] [Bug #11395]