今日も statx(2) による birthtime 対応の続きで File#birthtime の対応追加やテストの修正、C実装メソッド呼び出しのちょとした最適化などがありました。
eregon: r67109 2019-02-22 00:38:36 +0900
ruby/mspec を upstream から最新版に更新しています。
svn: r67110 2019-02-22 00:38:37 +0900
r67109 の新規追加ファイルの svn property 設定。
svn: r67111 2019-02-22 00:38:38 +0900
version.h の日付更新。
eregon: r67112 2019-02-22 00:38:59 +0900
ruby/spec を upstream の最新版に更新しています。
ko1: r67113 2019-02-22 05:59:08 +0900
compile.c の compile_if(), compile_case(), compile_case2(), compile_loop() などで分岐条件を表す VALUE 型の変数の初期化を 0 でなく Qfalse にする変更や、iseq_compile_each0() からさらにメソッド呼び出しをコンパイルする compile_call()、"".freeze のような文字列リテラルの freeze をコンパイル時に処理する compile_call_precheck_freeze() を切り出すリファクタリング。
svn: r67114 2019-02-22 05:59:12 +0900
r67113 のインデントのタブを空白に展開。
nobu: r67115 2019-02-22 12:08:38 +0900
File.birthtime の実装 rb_file_s_birthtime() を関数定義全体のブロックごと preprocessor の分岐してたのを、構造体名などをマクロで共通化して同一の関数定義にするようにしています。これみて気がついたのですがシステムが対応しているけど file system が未対応という場合もあるんですね。その場合は NotImplementedError ではなく Errno::ENOSYS になるみたいです。
nobu: r67116 2019-02-22 15:01:08 +0900
File#birthtime (インスタンスメソッドのほう)も statx(2) による実装を追加しています。
nobu: r67117 2019-02-22 15:07:30 +0900
r67116 の File#birthtime の実装追加に伴なって rubyspec の NotImplementedError 発生を期待しているテストから Linux を外しています。
nobu: r67118 2019-02-22 15:14:22 +0900
r67116 で追加した File#birthtime のテストは filesystem に依存するので Errno::ENOSYS 例外を捕捉して skip するようにしています。
nobu: r67119 2019-02-22 15:22:24 +0900
67118 の Errno::ENOSYS に追加してコンテナ内だと Errno::EPERM が発生することもあるので、これも無視させるようにしています。
nobu: r67120 2019-02-22 15:35:44 +0900
r67118、r67119 の続きで Errno::ENOSYS は単に無視して Errno::EPERM の時は skipするようにしています。
nobu: r67121 2019-02-22 15:43:11 +0900
同様に r67097 および r67102 の Pathname#birthtime のテストでもコンテナ内のため Errno::EPERM が発生した時に対応して skip するようにしています。
ko1: r67122 2019-02-22 16:25:51 +0900
構造体 rb_method_cfunc_t の invoker メンバーの型を変更して、関数の引数を入れ換えています。順番の入れ換えだけですがこうすることで引数の数ごとに展開して定義される関数 call_cfunc_#() のコンパイル結果のコードが小さくできる場合があるそうです。呼ぶ関数ポインタが引数の最後にあると直接ジャンプ命令を呼べるレジスタに入るとかそういうことらしいけど、これはどのくらい普遍的なんだろう。
svn: r67123 2019-02-22 16:25:54 +0900
r67122 のインデントのタブを空白に展開。