ruby-trunk-changes r52551 - r52563

今日は特異メソッド内でメソッド定義した時の可視性の修正などがありました。

hsbt: r52551 2015-11-13 10:08:45 +0900

拡張ライブラリ pysch の psych.gemspec のバージョンを 2.0.15 に上げています。実体に合わせて上げているのだと思います。

svn: r52552 2015-11-13 10:09:16 +0900

version.h の日付更新。

nobu: r52553 2015-11-13 10:36:42 +0900

後置 unless のパース時に if の時と同様に nil, true, false などのリテラルや文字列リテラルなどが直接書かれていた時に、最適化して実行される文の AST のみ生成するようにする最適化を有効にしています。 https://github.com/ruby/ruby/pull/1092

nobu: r52554 2015-11-13 13:05:43 +0900

Thread.exclusive というメソッドを deprecated として呼ばれたら警告を出力するようにしています。あれ、まだあったんだ…。 Thread.critical= と一緒に葬られたかと思ってました。

zzak: r52555 2015-11-13 13:10:58 +0900

拡張ライブラリ openssl で OpenSSL のマクロ TLS_DH_anon_WITH_AES_256_GCM_SHA384 の定義の有無を OpenSSL::ExtConfig::TLS_DH_anon_WITH_AES_256_GCM_SHA384 という定数で参照できるようにしています。これを利用して OpenSSL::SSL::SSLContext#ciphers に "aNULL" を指定した時のテストをスキップするようにしています。

zzak: r52556 2015-11-13 14:01:15 +0900

拡張ライブラリ openssl の OpenSSL::PKey#sign で EVP_MD_CTX_cleanup() の呼び出しが抜けててメモリリークしていたのを修正しているようです。 [ruby-core:67550] [Bug #10735]

zzak: r52557 2015-11-13 14:03:55 +0900

r52556 で文末のセミコロンが抜けていたのを修正しています。

shirosaki: r52558 2015-11-13 23:11:30 +0900

mingw で PRELOADENV を空にして tool/runruby.rb で環境変数 LD_PRELOAD を使わないようにさせています。 テストで diff.exe を起動する時にエラーになってしまうそうです。 [ruby-core:71461] [Bug #11680]

ngoto: r52559 2015-11-14 02:06:43 +0900

Oracle Solaris Studio 12.4 での最適化の不具合の対策のため pack_unpack() で変数 tmp_len に volatile 修飾子をつけるため AVOID_CC_BUG というマクロを導入してこれをつけるようにしています。 [ruby-core:71485] [Bug #11684]

svn: r52560 2015-11-14 02:07:03 +0900

version.h の日付更新。

ko1: r52561 2015-11-14 02:20:11 +0900

rb_cref_t のメンバ scope_visi に const 修飾子を追加して、このメンバを操作する処理を vm_cref_set_visibility() として切り出してキャストを追加しています。

ko1: r52562 2015-11-14 02:38:12 +0900

特異メソッド定義内でメソッド定義すると private になるようになってしまっていたので(正確には Class/Module の定義の最後の可視性の指定が影響していたみたいですね) module_function 扱いするかどうかの判定で cref をチェックするようにしているみたいです。ううむ難しい。 [Bug #11571]

ko1: r52563 2015-11-14 03:01:59 +0900

メソッド定義時の命令列で VM の内部的な動作のためのメソッド RubyVM::FrozenCore.define_method への引数に VM_SPECIAL_OBJECT_CBASE を渡していたのをやめて、vm_define_method() で cref から対象のクラスを決めさせるようにしています。 また vm_defined_method() の引数から cref を削って関数内で rb_vm_cref() で cref を取得させるようにしています。