ruby-trunk-changes r64833 - r64856

今日は Integer#& や Integer#| のための最適化命令の導入(のリトライ)や Dir.glob の "{}" の処理の再修正などがありました。

nobu: r64833 2018-09-25 22:42:02 +0900

構造体 struct vtm の宣言および strftime.c の関数のプロトタイプ宣言を internal.h から timev.h に移動しています。

svn: r64834 2018-09-25 22:42:05 +0900

r64833 のインデントのタブを空白に展開。

shirosaki: r64835 2018-09-26 00:31:01 +0900

r64810 の Dir.glob でのメタキャラクタ "{}" の処理の高速化で join_path() が返した文字列のバッファの解放が漏れてたのを修正しています。またよく追えてませんが path が NULL の時の対処も追加しています。 [ruby-core:79304] [Feature #13167]

shirosaki: r64836 2018-09-26 00:31:02 +0900

r64810 の Dir.glob でのメタキャラクタ "{}" の処理の高速化再修正。 "**" と "{}" を同時に使った時の不具合を修正しているそうです。変更は少ないんだけどさっぱりわからない。 [ruby-core:79304] [Feature #13167]

svn: r64837 2018-09-26 00:31:03 +0900

version.h の日付更新。

k0kubun: r64838 2018-09-26 02:19:51 +0900

r64829 で revert した r64824 の Integer#& と Integer#| の最適化命令の導入のリトライ。AppVeyor での MinGW ビルド失敗の対処は別コミットで入れるみたいです。

k0kubun: r64839 2018-09-26 02:20:02 +0900

64838 の追加修正。 joke 命令である bitblt 命令を insns.def から削除しています。えー、なぜこれが、と思ったらコミットログに説明があって、MinGWVM 命令が 200 を超えると? 拡張ライブラリのビルドがこけるそうなので、ひとまず不要な bitblt を削除して命令数を抑えることで対処しているみたいです。命令数 200 もあったっけ、と思ったんですが trace つきの命令が別カウントになってるので単純に倍になるんですね(それでも 100 も命令あったんだ、という感じですが)。

k0kubun: r64840 2018-09-26 02:26:34 +0900

appveyor.yml で子プロセスを起動するテストのタイムアウトのスケールを指定する --subprocess-timeout-scale の値を増やしてタイムアウトを伸ばしています。

ko1: r64841 2018-09-26 03:13:29 +0900

VMデバッグ用の各種イベントのカウンターの実装の変更/追加。メッセージの出力フォーマットの体裁の修正やコメントの追加、新規カウンター種類の追加など。

svn: r64842 2018-09-26 03:13:35 +0900

r64841 のインデントのタブを空白の展開。

eregon: r64843 2018-09-26 03:47:17 +0900

mspec を再度 upstream の最新版に更新。

svn: r64844 2018-09-26 03:47:18 +0900

r64843 の新規追加ファイルの svn property 設定。

nobu: r64845 2018-09-26 08:31:22 +0900

r6483 の mspec のマージで r64749, r64751 の File.expand_path のかわりに File.realpath を使って symbolic link を解決させる変更が巻き戻ってたので再適用しています。

k0kubun: r64846 2018-09-26 10:11:20 +0900

r64838 と r64839 Integer#& と Integer#| の最適化命令の導入のリトライを再度 revert しています。まだ(MinGW の?)ビルドが失敗してたみたいです。

svn: r64847 2018-09-26 10:11:26 +0900

r64846 のインデントのタブを空白に展開しています。あー revert でも展開されちゃうのか。

shyouhei: r64848 2018-09-26 11:02:09 +0900

r64806 の -Wnoparentheses オプションの削除の対応でさらに警告除去のため条件文の条件部のかっこの追加と明示的な比較演算子の追加をしています。

ko1: r64849 2018-09-26 11:23:21 +0900

r64810 の Dir.glob のパターンのメタキャラクタ "{}" の処理の高速化で構造体メンバの未初期化の不具合を修正するため初期化を追加しています。

k0kubun: r64850 2018-09-26 11:38:45 +0900

r64846 の Integer#& と Integer#| の最適化命令を再度 revert してたのをまた revert しています。つまり再度導入しています。 どうも r64849 でビルド修正されたみたいで、最適化命令の導入とは別問題だったみたいです。

svn: r64851 2018-09-26 11:38:51 +0900

r64850 のインデントのタブを空白に展開。

shyouhei: r64852 2018-09-26 15:16:32 +0900

rb_intern() で引数がリテラルの時に __builtin_constant_p() を使った最適化をするという実装を __GNUC__ というマクロをチェックして分岐していましたが configure で __builtin_constant_p() の有無をチェックして定義した HAVE_BUILTIN___BUILTIN_CONSTANT_P を参照するように修正しています。

ko1: r64853 2018-09-26 16:28:04 +0900

r64841 にさらに追加して RGenGC のオブジェクトの promote (長生きしているオブジェクトとして昇格させる)や WB Unprotect (write barrier に保護されていないオブジェクトにする)などのイベントのカウンタを追加しています。また obj_free() 時に解放される T_STRUCT 型のオブジェクトが、メンバー数が少なくて RVALUE に埋め込みタイプなのか多くて heap にメモリを確保しているかのカウンタも追加しています。

ko1: r64854 2018-09-26 17:11:05 +0900

VM のメインループの実装が OPT_CALL_THREADED_CODE が真に定義されている時に VM 命令の参照のために命令のコード順に依存関係があるので opt_send_without_block 命令の実装を前のほうに移動しています。

eregon: r64855 2018-09-26 18:32:09 +0900

rubyspec の Encoding の変換のテストで Encoding::Converter.search_convpath の引数の Encoding オブジェクトではなく文字列の名前を渡すようにしています。Windows で SEGV するそうでその対策とのことですが、たぶん何か不具合があるんでしょうね。 Encoding::Converter.search_convpath の実装みると Encoding オブジェクトも受付けてるみたいなので。

suke: r64856 2018-09-26 18:33:46 +0900

拡張ライブラリ win32ole で WIN32OLE#methods が返すメソッド名が文字列のままだったので Symbol に変換するようにしています。