ruby-trunk-changes r52033 - r52043

今日は r51989 以降の Symbol をブロック引数として渡した時の最適化で不具合が入ってたところの再修正や、テストや標準添付ライブラリの frozen_string_literal magic comment の追加などがありました。

akr: r52033 2015-10-05 12:19:30 +0900

test/pathname/test_pathname.rb に frozen_string_literal: true のマジックコメントを追加して、必要な箇所に String#dup を追加しています。

nobu: r52034 2015-10-05 15:29:54 +0900

template/ruby-runner.c.in で '@PATH_SEPARATOR@' (C の文字)や "@RUBY_BASE_NAME@" (C の文字列) をマクロとして定義してそれを展開する C のソースとして出力するようにしています。 設定による可変な部分をまとめるためかな?

nobu: r52035 2015-10-05 15:29:58 +0900

ruby-runner で LIBPATHENV で指定される環境変数の内容が separator のみ、または空文字列の時にスキップするようにしています。

nobu: r52036 2015-10-05 15:34:58 +0900

r51989 から続く Symbol をブロック引数として渡した時の最適化で proc_new() で proc->block の初期化を追加しています。 ep (environment pointer でしたっけ?)を引き継ぐためらしいです。 [ruby-core:70980] [Bug #11566]

zzak: r52037 2015-10-05 15:42:14 +0900

Numeric クラスの rdoc 用コメントを追加しています。 [Bug #11555]
"numeric classes such as Integer are implemented as immediates" のあたりは微妙に間違いで immeditate なのは Fixnum と、Float の一部(x86_64 での flonum)ですね。サンプルはおもしろいですね。なるほどこういうことできるのか…。

svn: r52038 2015-10-05 15:42:18 +0900

r52037 の行末の空白除去。

nobu: r52039 2015-10-05 16:10:21 +0900

eval_intern.h の PASS_PASSED_BLOCK_TH() と PASS_PASSED_BLOCK() という関数マクロの実体を inline 関数 pass_passed_block() として定義するようにしています。

nobu: r52040 2015-10-05 16:10:25 +0900

r37293 で inline 関数化されてた GET_THREAD() の実装を OPT_CALL_CFUNC_WITHOUT_FRAME という VM の最適化が無効の時には ruby_current_thread をそのまま返すようにしています。 OPT_CALL_CFUNC_WITHOUT_FRAME の最適化については r37293 の解説を参照してください。そういえばこんなのあったなぁ。我ながらよくできた外部記憶装置です。

eregon: r52041 2015-10-05 20:44:30 +0900

test/ruby/test_thread.rb の test_mutex_owned2 というテストメソッドで、生成した Thread の Thread#status が "sleep" になるまで待つという方法で Mutex が取得済みであることをチェックするようにしていたところは、Mutex#lock で取得するために(完全に取得する前に) "sleep" になることがあるらしいので、Mutex#locked? をチェックすることで Thread が lock 取得済みであることを確認するようにしています。

akr: r52042 2015-10-05 22:27:48 +0900

標準添付ライブラリ pp, resolv, tmpdir およびそのテストや tool/transcode-tblgen.rb に frozen_string_literal magic comment を追加して必要なところに String#dup を追加しています。

nagachika: r52043 2015-10-05 23:23:54 +0900

r52002 で Thread.handle_interrupt のテストで :blocking を指定したので sleep まで例外が遅延されることを確認するようにチェックされる変数の :ok の代入位置を変更しています。 r52002 での変更もメインスレッドが assert_raise のブロック内に入ってから raise しないといけないという順序の問題があったのでそっちも :wait という Symbol を入れてこれで実行順の制御をするようにしています。