ruby-trunk-changes r34280 - r34295

今日は Shellwords の不具合修正の他、ドキュメントの修正やリファクタリングがありました。

marcandre:r34280 2012-01-13 01:37:03 +0900

Module.constants の rdoc のサンプルの追加と説明を変更しています。 Module.constants は「Module.constants が呼ばれた位置で参照できる定数のシンボルのリスト」を返します。また Module.constants(true) や Module.constants(false) は、Module#constants (インスタンス変数)を呼び、こちらは「Module の配下に定義されている定数のシンボルのリスト」を返します。これは Module は Module を継承した Class のインスタンスであるため、Module.constants というクラスメソッドがインスタンスメソッドと名前が衝突しているため、引数が明示的に渡されたらインスタンスメソッドを呼ぶようにしているようです。本来の Module#constants (インスタンスメソッドのほう)は引数は省略可能ですが、Module に対して呼ぶ時だけは省略不可能ということですね。 [ruby-core:42080] [Bug #5887]

svn:r34281 2012-01-13 01:37:07 +0900

version.h の日付更新。

luislavena:r34284 2012-01-13 03:28:17 +0900

ext/socket/extconf.rb で $CPPFLAGS に -D_WIN32_WINNT を重複して追加しないようにしています。

knu:r34285 2012-01-13 03:42:03 +0900

Shellwords#shellsplit でバックスラッシュ2つならべたものが消えてしまう不具合を修正しています。

knu:r34286 2012-01-13 03:49:27 +0900

Shellwords の rdoc の記法を修正。

knu:r34287 2012-01-13 03:49:30 +0900

Shellwords.escape や Shellwords.join は String でないオブジェクト(の配列)を受け取った時も to_s を呼んで文字列かしてから処理するようにしています。

knu:r34289 2012-01-13 15:10:37 +0900

r34287 の Shellwords の引数に to_s を呼ぶ仕様追加についてのテストを追加しています。

nobu:r34291 2012-01-13 16:44:50 +0900

Exception#equal で引数の exception メソッドを呼んで例外オブジェクトを取得してクラスの同一性も比較するようにしています。これまではメッセージとバックトレースだけ比較していたようです。 [ruby-core:41979] [Bug #5865]

nobu:r34292 2012-01-13 17:23:43 +0900

load.c の複数の Thread から同じファイルを require した時の排他処理(ある Thread が require に成功したら他の Thread は読み込まず false を返す。ただし require 内で例外が発生したら再度読み込みする)で st_table からエントリを削除するのに st_lookup() で検索して st_delete() していたのを r34141 で追加された st_update() を利用して一度で済ませるようにしています。

nobu:r34293 2012-01-13 18:25:54 +0900

struct RBasic の flag に埋め込まれている Barrier の待っている Thread 数のオーバフロー修正。

nobu:r34294 2012-01-13 18:29:13 +0900

rb_mutex_unlock_th() で Mutex を unlock してから rb_thread_t の keeping_mutexes のリストからその rb_mutex_t 構造体を抜き取る処理をシンプルにリファクタリングしています。
ここに rb_mutex_t *volatile* という型の宣言があってちょっとどういう意味かなと考えてしまいました。

nobu:r34295 2012-01-13 18:41:22 +0900

rb_enc_vsprintf()/rb_enc_sprintf() で指定されたエンコーディングが ASCII incompatible なものだったら例外を発生させるようにしています。
ざっと見たところここにはだいたい US-ASCII を渡しているか、バックトレースを生成しているところでファイル名のエンコーディングを利用しているところなので現状はエラーになることはないかと思います。