ruby-trunk-changes r37397 - r37408

refinement の機能追加と、BigDecimal の不具合修正などがありました。
ところでもうすぐ 2.0 プレビュー版 2.0.0-preview1 がリリースされそうです。

nobu:r37397 2012-11-01 13:17:01 +0900

iseq.c で複数の条件分岐に登場していた同じような処理をまとめるリファクタリング。しかしこれだと動作が変化してしまっていたので後ほど r37403 で修正されています。

svn:r37398 2012-11-01 13:17:05 +0900

version.h の日付更新。

shugo:r37399 2012-11-01 14:45:28 +0900

refinement の機能(仕様)の拡張で、いくつかのモジュールを Module#using で拡張した Module (チケットの例だと Z)を作っておいて、それを Module#using で取り込むことでその Module が using していた Module たち(チケットの例だと X, Y) を using で取り込んだのと同じように振る舞うようにしています。 Module#include も Module に include しておいたものを include すると全て Module#ancestors に現われるのでそれと同じようなものですね。 [ruby-dev:46326] [Feature #7251]
実装は Module に __using_modules__ という隠しインスタンス変数があり using した Module を記録しているので、using した時にその Module たちも rb_using_module() を呼んで同時に using したように挙動しています。

さて、このコミットの説明で何回 using と書いたでしょう。 using がゲシュタルト崩壊気味です。

shugo:r37400 2012-11-01 14:45:30 +0900

r37394 の ChangeLog のエントリのインデント修正。

shugo:r37401 2012-11-01 16:48:29 +0900

NEWS ファイルに refinement の機能で追加されたメソッド(Module#refine, Module#refinements, Module#using, Kernel#using)について追記しています。

nobu:r37402 2012-11-01 19:47:27 +0900

Solaris 10 で PTHREAD_STACK_MIN が関数呼び出しとして定義されているため enum の値として使えなくてコンパイルエラーになっていたのに対処しています。RUBY_STACK_MIN と RUBY_STACK_MIN_SPACE, RUBY_STACK_SPACE を enum としてではなく 定数マクロとして定義するように変更しています。 [ruby-dev:46322] [Bug #7247]

nobu:r37403 2012-11-01 21:20:00 +0900

r37397 で誤って iseq->parent_iseq = piseq; が漏れるケースがあって ISeq のコンパイルエラーになることがあったので修正しています。

mame:r37404 2012-11-01 21:33:51 +0900

Process.exec が Linux 3.5.0-17-generic で Errno::EACCES を発生させることがあるということで Process のテストの rescue 節に Errno::EACCES を追加しています。実行権限がなかったら EACCES になると思いますが……と思ったらこれはすぐ次の r37405 で revert されていました。

mame:r37405 2012-11-01 21:46:27 +0900

r37404 を revert しています。存在しないファイルパスということで /nonexistent というパスを指定して Process.exec するテストだったのですが、実際に /nonexistent というファイルがあったために EACCES になっていたそうです。

mrkn:r37406 2012-11-01 22:03:53 +0900

BigDecimal#+ で引数が Rational の時、つまり BigDecimal と Rational の足し算で左辺が BigDecimal の時に coerce に失敗して TypeError が発生していたので GetVpValueWithPrec() を使って精度の指定つきで変換するように修正しています。引数が Float の時も失敗はしていなかったけど精度の指定をつけるようにしています。これで BigDecimal + Float が Float に変換されていたのが BigDecimal に変換されるようになりました(が、これはついででテストもないようです)。 [ruby-core:48045] [Bug #7176]

mrkn:r37407 2012-11-01 22:04:04 +0900

BigDecimal.new に Float や Rational を渡した時に精度の指定がないと ArgumentError が発生しますが、そのメッセージに含まれるクラス名が Rational で固定になっていたので、引数のクラス名を埋め込むようにしています。

ko1:r37408 2012-11-01 22:29:28 +0900

NEWS ファイルに新規メソッド ObjectSpace.reachable_objects_from を追記しています。