ruby-trunk-changes r60756 - r60762

今日は VM 命令列の最適化の修正や ISeq のバージョンの更新などがありました。

nobu: r60756 2017-11-14 08:53:00 +0900

r60727 の iseq_peephole_optimize() の concatstrings 命令の対象によって命令を削る最適化で、freezestring 命令が続いてた時も考慮して削るようにしています。

svn: r60757 2017-11-14 08:53:01 +0900

version.h の日付更新。

ko1: r60758 2017-11-14 10:37:41 +0900

ISEQ_MAJOR_VERSION と ISEQ_MINOR_VERSION を RUBY_API_VERSION_MAJOR と RUBY_API_VERSION_MINOR を使って定義するようにして、API Version が変更になったら自動的に変更されるようにしています。 ISeq の dump/load 時にバージョンチェックされるので、互換性がなくなった時に上げ忘れないようにということみたいです。

nobu: r60759 2017-11-14 11:40:04 +0900

iseq_peephole_optimize() の concatstrings についての最適化にコメントでどのような命令の削除が行なわれるのか記述を追加しています。

nobu: r60760 2017-11-14 12:00:23 +0900

r60758 の変更に追随して iseq.h から version.h への依存関係を common.mk の依存関係の列挙に追加しています。

nobu: r60761 2017-11-14 12:02:58 +0900

String#crypt で crypt(3) のエラー時の SystemError 例外発生時に rb_syserr_fail() を使って errno ではなく戻り値を明示的に与えるようにして、一時的に errno を上書きしないようにしています。

nobu: r60762 2017-11-14 13:42:38 +0900

process.c で errno を退避しつつ式を実行する preserving_errno() というマクロを使っていた箇所は、エラーを返り値で返すようにしたり、呼び元で別途変数に errno を保存しておくようにしたりして、マクロを削除しています。また retry_fork_ruby() を呼び元に展開して関数定義を削除したりしています。