ruby-trunk-changes r40090 - r40112

今日は Pathname#write, binwrite の追加と、 Symbol の生成の遅延などがありました。

naruse:r40090 2013-04-04 03:28:56 +0900

拡張ライブラリ openssl で OpenSSL::BN.new の引数に OpenSSL::BN のインスタンスを渡された時に、型による分岐前に StringValue() で文字列としてアクセスしようとしてしまって TypeError が発生していたのを修正しています。

svn:r40091 2013-04-04 03:29:00 +0900

version.h の日付更新。

akr:r40092 2013-04-04 07:24:57 +0900

拡張ライブラリ socket の extconf.rb で have_library や have_func でチェックする関数を名前だけじゃなくて引数の数を明示した書きかたをするようにしています。こういう書き方もできるんですねー。

naruse:r40094 2013-04-04 11:35:07 +0900

拡張ライブラリ openssl の OpenSSL::BN#to_i で 10進数表記にしてから Integer に変換していたのを高速化のため 16進数文字列を使うように変更しています。

nobu:r40095 2013-04-04 14:37:19 +0900

$SAFE >= 4 の時にスレッドローカル変数にアクセスすると発生する SecurityError の例外メッセージを修正。

nobu:r40096 2013-04-04 14:37:21 +0900

Thread#[] や Thread#thread_variable_get による fiber local 変数や thread local 変数のアクセス時にキーワードに文字列を渡した時に不必要な Symbol の生成を行なわないようにしています。

nobu:r40097 2013-04-04 15:46:53 +0900

Enumerable#inject にブロックを渡さずメソッド名を渡した時に不要なシンボル生成を抑制するようにしています。

nobu:r40100 2013-04-04 16:54:44 +0900

Module#const_set および Object#instance_variable_set, Module#class_variable_set でも Symbol を生成するのを遅延しています。 set 系は成功すれば結局 Symbol が作られるのですが、その前の文字種などのチェックで弾かれた時には Symbol を作らないようにしています。

nobu:r40101 2013-04-04 16:55:11 +0900

Struct.new や Struct で生成したクラスの [] メソッドも Symbol を生成するのを遅延させています。エラーチェック後に生成するようにしています。

yugui:r40102 2013-04-04 17:01:23 +0900

MAINSTACKADDR_AVAILABLE が真の時に get_stack() がエラーを返した時に未初期化の変数を参照してしまっていたので get_stack() のエラーチェックを追加しています。

yugui:r40103 2013-04-04 17:01:27 +0900

thread_pthread.c の #if USE_SLEEPY_TIMER_THREAD の条件コンパイルを3箇所ほど条件を外して,setup_communication_pipe() の呼び出しにだけ条件をかけるようにしています。 NativeClient 版のビルドエラーになっていたのを修正しているみたいです。

nobu:r40104 2013-04-04 17:18:54 +0900

r40100 の const_set, instance_variable_set, class_variable_set などの Symbol 生成遅延の変更で Symbol の文字種などのチェックがされなくなってしまっていたのを修正しています。

nobu:r40105 2013-04-04 17:23:10 +0900

object.c および eval.c で TYPE() マクロを使っていた部分を BUILTIN_TYPE() や XXXX_P() マクロを使った書き方に変更しています。

nobu:r40106 2013-04-04 17:23:16 +0900

test-all 用ユーティリティ assert_separately で子プロセスからの通信の Marshal.load に失敗したときに ignore_stderr オプションを無効にするようにしています。

akr:r40107 2013-04-04 20:12:12 +0900

Pathname#write と Pathname#binwrite メソッドを追加しています。 ありそうでこれまでなかったメソッドですね。 [ruby-core:49468] [Feature #7378]

akr:r40108 2013-04-04 22:26:39 +0900

r40100 および r40104 で Module#class_variable_set の Symbol 生成を遅延させた変更の部分を revert しています。 Class.new.class_variable_set(1, 2) とすると SEGV するとのこと。

akr:r40109 2013-04-04 22:37:22 +0900

Time#strftime の rdoc 用コメントで %N および %H の指示子について特定の数値で丸められることを追記しています。 [ruby-core:52130] [Bug #7829]

akr:r40110 2013-04-04 22:54:10 +0900

include/ruby/ruby.h で定義している関数マクロ FIX2LONG() を定義全体をかっこでくくるようにしています。

akr:r40111 2013-04-04 23:25:19 +0900

拡張ライブラリ openssl の extconf.rb で bcc 環境向けの検出やコメントを削除しています。

akr:r40112 2013-04-04 23:55:36 +0900

標準添付ライブラリ resolv.rb で SunOS 上で bind(2) が EACCES を返して失敗することがあるらしく、Socket#bind からの例外 Errno::EACCES の rescue と retry を追加しています。 [ruby-core:48064] [Bug #7183]