ruby-trunk-changes r35085 - r35092

今日は at_exit で登録した終了処理で例外を rescue した時の修正の手直しなど最近の変更の微調整が主でした。

nobu:r35085 2012-03-19 00:21:00 +0900

r34982 で at_exit で登録した終了処理の中でのエラー処理を考慮して rb_thread_t::errinfo のバックアップを取っておく変数 errinfo に volatile を付加しています。コメントによると setjmp/longjmp から保護するためらしいとのこと。そうかレジスタにのせられてしまうと longjmp した時に元に戻ってしまいますね。

nobu:r35086 2012-03-19 00:21:04 +0900

NUM2???() 系の変換マクロ/関数のテストのための拡張ライブラリで、NUM2LL, NUM2ULL のチェックは long long 型が利用可能な時だけにしています。また sprintf() に渡す指示子に PRI_LL_PREFIX マクロを利用するようにしています。

svn:r35087 2012-03-19 00:21:04 +0900

version.h の日付更新。

shyouhei:r35088 2012-03-19 15:08:44 +0900

PTY のテストでプラットフォームの制限で例外が発生する場合があるので skip するようにしています。

nobu:r35089 2012-03-19 15:20:55 +0900

compile.c で if ... else if ... で else if をたくさん並べていたところを switch 文で書き直して、共通した処理をマクロでコンパクトに書くようにしています。 https://github.com/ruby/ruby/pull/105

shugo:r35090 2012-03-19 15:41:02 +0900

Enumerator::Lazy の rdoc に cycle と zip にはブロックが渡されるとその場で値が評価される(遅延評価されない)ことを追記しています。 [ruby-core:43344] [Bug #6158]

shugo:r35091 2012-03-19 16:39:12 +0900

r35049 と同様に rb_rescue2() の可変長引数に 0 をそのまま渡しているのを明示的に VALUE にキャストするようにしています。sizeof(VALUE) != sizeof(int) の時のためです。

shugo:r35092 2012-03-19 17:22:29 +0900

Enumerator::Lazy#flat_map でブロックが返した値が Array でない時には each を読んで要素を取得するようにしていたのを、each が NoMethodError を発生させたら to_ary で Array に変換して利用する方法を試すようにしています。 [ruby-core:43334] [Bug #6155]