ruby-trunk-changes r43519 - r43525

今日は大域脱出の実装である TH_EXEC_TAG() および TH_EXEC_JUMP() の実装を setjmp(3) の未定義の挙動を回避するように書き換える変更などがありました。コアですね。つまりメジャーなプラットフォームでは不具合修正や仕様に関わる変更などはありませんでした。

nobu:r43519 2013-11-03 21:40:24 +0900

更新されたファイルのみ変更するための tool/ifchange および win32/ifchange.bat にデフォルトでは新しいファイルが空のときは上書きしないようにして、従来の挙動をさせるためにオプション --empty を追加しています。

nobu:r43520 2013-11-03 21:40:29 +0900

gc.c の obj_free() で free_immediately という変数が真偽値を表わしていることを明確にするために 0 ではなく FALSE で初期化し、ビット演算の結果をそのまま代入するのではなくて == 0 との比較結果を代入するようにしています。

akr:r43521 2013-11-03 23:09:35 +0900

sample/test.rb で一時ファイルの名称に pid を付加して複数同時に実行してもファイルが競合しないようにしています。

nobu:r43522 2013-11-04 10:08:21 +0900

setjmp(3) を代入文の右辺値に使った時の未定義の挙動を回避するためにタグジャンプ時に rb_thread_t::status に status を格納してから longjmp() して setjmp() から非0 で返ってきた時には rb_thread_t::status の値を取り出して使うように TH_EXEC_TAG() および TH_JUMP_TAG() の実装を変更しています。 (参考 [ISO/IEC 9899:1999] 7.13.1.1)

svn:r43523 2013-11-04 10:08:26 +0900

version.h の日付更新。

akr:r43524 2013-11-04 15:27:54 +0900

r43517 と対になる変更のようですが xmlrpc の WEBrick を使ったテストで WEBrick::HTTPServer の初期化を子 Thread で実施していたのをメインスレッドで初期化しておくようにすることで初期化時のエラーをすぐに検出できるようにしています。

kazu:r43525 2013-11-04 16:17:47 +0900

r43514 の ChangeLog エントリの typo 修正。