ruby-trunk-changes r51284 - r51291

今日は ARGF.read_nonblock に exception: false キーワード引数を追加する変更などがありました。

nobu: r51284 2015-07-17 23:51:34 +0900

vm_eval.c に $SAFE=4 にセットするコードが残っていたので、RUBY_SAFE_LEVEL_MAX という定数を利用するように修正しています。

normal: r51285 2015-07-18 03:02:53 +0900

ARGF.read_nonblock に exception: false というキーワード引数を受け付けるようにしています。 ARGF も IO を模倣しているので IO や Socket、StringIO と同様に受け付けるようにしています。 でもこれは [ruby-core:69892] で提案しているキーワード引数の parse の方法の変更の前段だそうです。この提案もおもしろいですね。 C の実装が遅いから Ruby で実装してしまおうという…。 [ruby-core:70000] [Feature #11358]

svn: r51286 2015-07-18 03:03:05 +0900

version.h の日付更新。

normal: r51287 2015-07-18 07:08:49 +0900

Signal.trap のハンドラ登録時に "SIG_IGN" や "SIG_DFL" などの文字列で挙動を指定するものが渡された時にそれをチェックするのに strncmp(3) のかわりに memcmp(3) を利用するようにしています。 先に switch 文による分岐で文字列のサイズが一致することはチェック済みなので単に指定のサイズの比較をするようにしています。

normal: r51288 2015-07-18 07:21:37 +0900

拡張ライブラリ socket no sendmsg_nonblock のテストをするために用意するバッファのサイズを小さくしています。 OpenBSD でのサイズ制限にひっかかったとのこと。 [ruby-core:70016] [Bug #11364]

normal: r51289 2015-07-18 10:29:25 +0900

test/ruby/test_process.rb に fork してから Kernel#exec で外部コマンドを実行しようとしてエラーが発生した後に、複数 Thread のブロックや signal の受信がうまく動くか、つまり timer thread の仕事がきちんと動いているかをチェックするテストを追加しています。

nobu: r51290 2015-07-18 18:45:25 +0900

ruby_cleanup() の終了処理でプロセスの終了ステータスに error_handle() で変換したものを再度 EXIT_SUCCESS や EXIT_FAILURE に変換していて冗長だったので削っています。

nobu: r51291 2015-07-18 19:52:19 +0900

run_finalizer() で rb_safe_level() と rb_errinfo() を保存しておいて finalizer の実行後に戻すようにすることで、run_single_final() で rb_eval_cmd() を使って EXEC_TAG つきで(SAFE level を変えて実行するため)実行していたのを rb_check_funcall() で単なるメソッドコールとして呼び出すように軽量にしています。