ruby-trunk-changes r35319 - r35324

今日は WEBrick::GenericServer の例外による終了条件の再修正などがありました。

nobu:r35319 2012-04-14 00:34:34 +0900

error.c で TYPE() マクロを使って分岐しているところは RB_TYPE_P() を使うようにしたり、 Qtrue や Qfalse などの即値との直接比較を使うようにしたりしています。

svn:r35320 2012-04-14 00:34:39 +0900

version.h の日付更新。

drbrain:r35321 2012-04-14 08:45:37 +0900

例外の発生させる関数など処理が返ってこない関数を戻り値をもつ関数の最後に呼ぶなどで、値を返していないという警告になるような場所に UNREACHABLE マクロを利用して、そこには処理が戻らないので return していなくてもいいことを明示するようにしています。clang は警告の出力がより厳しいらしいです。 [ruby-core:42815] [Bug #6066]

drbrain:r35322 2012-04-14 09:36:26 +0900

ほぼ同じで、処理が返ってこない関数の後で警告の回避のために return Qnil などとダミーの return 文を書いておいて /* not reached */ とコメントを書いている部分を UNREACHABLE に変更しています。 [ruby-core:42815] [Bug #6066]

naruse:r35323 2012-04-14 11:30:43 +0900

r35315 で WEBrick::GenericServer で処理スレッドが Interrupt でのみ終了してその他の例外では終了しないようにしたのですが、やっぱり StandardError では止めず、それ以外の Exception では終了という処理に戻しています。 [ruby-core:44332]
またテストで Process.kill を送信するとメインスレッドに割り込みの例外が送信されるので期待したようにテストしているスレッドに例外が発生しないので raise SignalException することでシグナル受信をエミュレートするようにしています。 [ruby-core:44348] [Feature #6236]

nobu:r35324 2012-04-14 12:55:06 +0900

configure で gcc の __builtin_unreachable() をテストする時に警告をエラー扱いにするコンパイルオプションを有効にして実際に効果があるかをチェックするようにしています。コミットログによると gcc 4.4 では -O3 をつけると unreachable の指定するコードが削除されてしまうらしいです。
また win32/win32.c のラベルのコロンが消えてしまっていたのを修正しています。