ruby-trunk-changes 2020-04-16

今日は -p/-n オプションでのフィルタモードでの標準出力への書き込みが EPIPE になった時の例外を元の Errno::EPIPE に戻す変更などがありました。

[d72fd1e45b] Nobuyoshi Nakada 2020-04-14 15:59:23 UTC

rb_syserr_fail_path_in() から例外を raise せず例外オブジェクトを返すに留める関数を rb_syserr_new_path_in() として切り出しています。外部 API ではないしまだ使っているところはなさそう。

[155f64e3c4] Nobuyoshi Nakada 2020-04-14 16:25:04 UTC

6f28ebd585fba1aff1c9591ced08ed11b68ba9e3 の -p/-n オプションによるフィルタモードで標準出力への書き込みが EPIPE になった時の例外を SIGPIPE に変更してたのを revert してやっぱり Errno::EPIPE にして、かわりに例外を捕捉するところで Errno::EPIPE でメッセージを抑制するようにしています。後方互換性のためとのこと。 [ruby-core:85166] [Feature #14413]

[48273534c7] 卜部昌平 2020-04-16 05:17:15 UTC

FreeBSD で <sys/cdefs.h> というシステムヘッダで提供される __has_attribute() が壊れてるので、ちゃんと動いてなさそうな時は RUBY3_HAVE___HAS_ATTRIBUTE を定義しないようにしてこのマクロで実際に使えるかを判定するようにしています。

[4ab14aece4] git 2020-04-16 05:22:43 UTC

version.h の日付更新

[3eb05a8071] 卜部昌平 2020-04-16 08:00:13 UTC

48273534c7aa6552c9155366a39f54ce10653c5a の続きで古い gcc (4以前)で #ifdef ... #elif がうまく扱えないことがあったそうなので preprocessor 分岐をちょっと修正しています。 #if ... #else #if ... #endif #endif と #if ... #elif #endif は等価じゃない(elif の条件部分が不正な式の時後者は NG)という参考情報がリンクされています。 http://www.open-std.org/JTC1/SC22/WG14/www/docs/dr_412.htm

[d4215dafea] Nobuyoshi Nakada 2020-04-16 08:59:55 UTC

string.c の unescape_ascii() で switch 文の default 節で UNREACHABLE を使ってたのを消して、関数末尾に UNREACHABLE_RETURN() を置くようにしています。関数の型が int なので環境によって return 文になる UNREACHABLE_RETURN のほうが良いということかな。

[693378f105] Nobuyoshi Nakada 2020-04-16 09:02:11 UTC

gc.c の gc_raise() で異常終了させるのに abort() を呼ぶのを関数末尾に移動しています。 if-else の else 節に書いてましたが if のほうは例外発生で大域脱出しているので外に出しても大丈夫というのと、gc_raise() 自体が return しない関数なので末尾に return しない関数を置くようにするとのこと。なにかコンパイラが特別な扱いをしてくれるのかな。