ruby-trunk-changes 2020-06-28

今日は rubyspec の更新と拡張ライブラリ fiddle の可変長引数の C 関数を呼び出す機能追加などがありました。

[64d8c0815e] Benoit Daloze 2020-06-27 13:51:35 UTC

mspec の upstream からのマージ。 Truffle Ruby 向けの変更が含まれてるようです。

[b3fa158d1c] Benoit Daloze 2020-06-27 13:51:37 UTC

rubyspec の upstream からのマージ。

[25fbc88666] Nobuyoshi Nakada 2020-06-27 14:13:58 UTC

compile.c のコメントに非 ASCII 文字が含まれててコンパイラによっては警告が出るそうなので置換。ぱっと見だとわかりませんが "-" のようにみえる文字がそうだったようです。

[50fbd00e76] Sutou Kouhei 2020-06-26 22:10:37 UTC

拡張ライブラリ fiddle の Check_Max_Args_() という関数マクロの定義を文にするため do{...}while(0) を使うようにしています。

[9f740acaf9] Sutou Kouhei 2020-06-26 22:11:19 UTC

拡張ライブラリ fiddle の変数名を内容に合わせて改名。

[ae18220f99] Sutou Kouhei 2020-06-26 22:25:47 UTC

拡張ライブラリ fiddle で可変長引数の C 関数を呼べるように機能追加しています。

[6429b6d973] Sutou Kouhei 2020-06-26 22:27:05 UTC

拡張ライブラリ fiddle の ext/fiddle/function.c に #include <stdbool.h> を追加しています。

[a40b390b17] Sutou Kouhei 2020-06-26 23:31:59 UTC

拡張ライブラリ fiddle のテストで sprintf() を利用するところで Windows ではシンボル名が _snprintf になるので環境によって変えるようにしています。

[f2bcdc7283] Sutou Kouhei 2020-06-27 02:01:22 UTC

拡張ライブラリ fiddle の mswin 環境サポートのために extconf.rb などを書きかえています。とはいえ大部分は変数名などをより説明的にする改名などなので本質的なのは -DHAVE_FFI_PREP_CIF_VAR を追加するところくらいかな? https://github.com/ruby/fiddle/pull/43

[c405a8d37a] Nobuyoshi Nakada 2020-06-27 15:57:37 UTC

f2bcdc7283f2137e0916e251df3a52c40b1f6151 の fiddle の extconf.rb の同梱版 libffi を使うオプション指定についての条件分岐でデフォルト(オプションが指定されてない時)では同梱版を利用するようにしています。

[247dd8743e] git 2020-06-27 17:03:05 UTC

version.h の日付更新

[0703e01471] Takashi Kokubun 2020-06-27 17:07:47 UTC

7561db8c009bb79a75024fa4ed0350bfb3d0626c で Integer#zero? の実装を inline 可能な C 関数に委譲した ruby 実装におきかえたのと同様に Integer の abs, bit_length, even?, integer?, magnitude, odd?, ord, to_i, to_int などのメソッドも Primitive.attr! 'inline' と Primitive.cexpr! を用いた ruby 実装に変更しています。 https://github.com/ruby/ruby/pull/3264

[48fb6299c6] Nobuyoshi Nakada 2020-06-28 01:34:01 UTC

ae18220f9904c70304bd1672eecadbb3618fc7e5 の fiddle での可変長引数関数サポートの変更で非常に古い libffi だと ffi_prep_cif_var() という関数がなくて失敗するので HAVE_FFI_PREP_CIF_VAR をチェックして定数 Fiddle::TYPE_VARIADIC を定義するようにしています。

[44a659ad97] Nobuyoshi Nakada 2020-06-28 04:20:40 UTC

組み込みメソッドを ruby 実装したスクリプトを事前コンパイルして読み込む tool/mk_builtin_loader.rb でファイルパスのセパレーターの File::ALT_SEPARATOR を File::SEPARATOR に置換しています。つまり Windows 環境でファイルパスのセパレーターが "\" になってるものを "/" に置換しているようです。

[1020f7e3aa] Nobuyoshi Nakada 2020-06-28 05:12:26 UTC

44a659ad976221cfec3355e036daeb4e4942db55 のファイルパス置換を生成するソースコード内のコメントに埋め込むファイルパスも置換するように前のほうに移動しています。

[09b936d89c] Nobuyoshi Nakada 2020-06-28 05:13:48 UTC

tool/mk_builtin_loader.rb で生成する C ソースコードの #line に埋め込むソースコード行数の基準になる行番号を固定で書いてたのを ruby スクリプト内の __LINE__ を基準に計算するようにしています。この間に C のソースコード出力以外の行を追加するとずれちゃうので注意ですね。