ruby-trunk-changes r61471 - r61485

今日は古い gccgcc 以外のコンパイラでのビルドの問題の修正、Refinements の不具合修正、Binding#source_location メソッドの追加などがありました。

nobu: r61471 2017-12-25 21:32:09 +0900

hash.c の mult_and_mix() で __uint128_t を使いかどうかのチェックに gcc かどうかを含めていたので、HAVE_UINT128_T だけチェックするようにしています。 gcc 以外のコンパイラ(具体的には e2k というプラットフォーム? 上の lcc)で問題があったようです。 https://github.com/ruby/ruby/pull/1781 [ruby-core:84438] [Bug #14231]

nobu: r61472 2017-12-25 21:32:10 +0900

r61471 の追加修正。 HAVE_UINT128_T をチェックするようにしたので、型として __uint128_t のかわりに uint128_t を利用するようにしています。 https://github.com/ruby/ruby/pull/1781 [ruby-core:84438] [Bug #14231]

nobu: r61473 2017-12-25 21:41:52 +0900

hash.c の定数 prime2 を uint32_t 型に変更しています。 uint64_t で定義されていたけど uint32_t にキャストして使われていたため、素数でない下位32bitの部分が使われているという状態だったため。うひょー。まあ seed として加算していただけなので素数でなくてもすごく問題、というわけではなかったのかな。

matz: r61474 2017-12-25 23:05:59 +0900

matz の 1年ぶりのコミットです。RUBY_VERSION および RUBY_API_VERSION_MINOR を更新して 2.6.0 の開発を開始しています。もう時代は 2.6.0 です。

k0kubun: r61475 2017-12-25 23:22:21 +0900

cont.c の cont_save_thread() のコメントで変数名が th -> ec に変更前のものだったのを変更に追随させています。

nobu: r61476 2017-12-26 08:33:52 +0900

Kernel#system に :in キーワード引数など渡した時の割り込みのテスト? でタイミング問題の回避のため、pipe 経由のメッセージの読み書きで待ち合わせするようにしています。

svn: r61477 2017-12-26 08:33:53 +0900

version.h の日付更新。

nobu: r61478 2017-12-26 08:59:56 +0900

r61459 で template/prelude.c.tmpl に導入した #pragma が古い gcc だと関数の中では使えないそうで CentOS 6.9 でビルドエラーになったそうなので、#pragma を関数定義の外に出しています。 [ruby-core:84449] [Bug #14234]

nobu: r61479 2017-12-26 14:30:31 +0900

rb_autoload() の定義に RUBY_FUNC_EXPORTED をつけてシンボルを export するようにしています。2.5.0 で意図せず(?)関数の可視性が変化してしまっていたみたいです。 [ruby-core:84454] [Bug #14236]

mame: r61480 2017-12-26 17:38:35 +0900

Binding#source_location というメソッドを新設して、Bining が確保されたソースコード上の位置が返せるようにしています。またこれを利用して irb で Binding#eval を使って位置情報を取得していたところを、このメソッドを利用するように変更しています。 [ruby-core:84435] [Feature #14230]

mame: r61481 2017-12-26 18:04:26 +0900

r61480 の続きで Binding#source_location のテストを追加しています。

nobu: r61482 2017-12-26 18:05:28 +0900

eval の中で例外を発生させた場合にメッセージにバックトレースから取り出した位置を入れようとして、"eval" って文字が含まれてたのを修正しています。多分そういうことだと思う…。 adjust_backtrace_in_eval() という関数で上記のような調整をしていたのをやめています。 [ruby-core:75302] [Feature #12338] [ruby-core:84434] [Bug #14229]

nobu: r61483 2017-12-26 19:10:41 +0900

parse.y で struct parser_params::warn_location という bit field のフラグを追加して、これがセットされていたら eval の中で __FILE__ と __LINE__ が使われていたら警告を出力するようにして Binding#source_location に誘導するようにしています。

nobu: r61484 2017-12-26 19:32:58 +0900

Refinements で Module を refine した時に、その Module を include していてさらに継承もしているクラスのメソッドからの super が using していなくても super class の探索に失敗するという不具合を修正しています。 rb_method_entry_complement_defined_class() において rb_method_definition_t::type が VM_METHOD_TYPE_REFINED の時を考慮して method entry をコピーするようにしています。もう Refinements まわりの実装は理解が追いつかないな…。 [ruby-dev:50390] [Bug #14232]

nobu: r61485 2017-12-26 19:40:48 +0900

r61481 でなぜか Method#source_location のテストメソッドも追加されていたのですが(たぶんコピペの消し忘れ)、既に存在しているテストメソッドなので削除しています。