ruby-trunk-changes r62678 - r62685

今日は機能の続きで MJIT のさらなる最適化や、メソッドの rescue 節でブロック引数を利用した時の不具合修正、拡張ライブラリ date の不具合修正などがありました。

k0kubun: r62678 2018-03-06 22:23:22 +0900

r62654 で追加した rb_iseq_body_t::catch_except_p というフラグを利用してさらに MJIT で生成するコードの最適化をしています。例外を捕捉する必要のない ISeq では reg_cfp->pc を復旧する必要がないので(ちょっとここの理屈はよくわかってないですが) reg_cfp->pc を代入する文を書き出すのをやめています。ただし trace を有効にした命令(trace でファイル内の位置の計算に pc が必要なのでしょう)と opt_xxx の最適化命令系で最適化が訊かなくてデフォルトの処理に fallback する時に代入するようにしています。

nobu: r62679 2018-03-06 22:43:54 +0900

test/ruby/test_signal.rb で assert_equal の引数の順序が逆だったところを修正しています。

nobu: r62680 2018-03-07 00:14:22 +0900

VM の関数 vm_call_opt_block_call() でメソッドの rescue 節内でブロック引数を利用した時に VM_CF_LEP() を噛ませていなかったのでブロック引数の遅延した Proc 化がされなくて SEGV していたのを修正しています。
https://twitter.com/wannabe53/status/970955125786263552
https://twitter.com/wannabe53/status/970955247626567680

svn: r62681 2018-03-07 00:14:23 +0900

version.h の日付更新。

nobu: r62682 2018-03-07 11:27:18 +0900

rational.c と complex.c にあった CANONICALIZATION_FOR_MATHN の省略形の CANON というマクロを定義するようにして、こっちで分岐していましたが、これは削除して直接 CANONICALIZATION_FOR_MATHN で分岐するようにしています。このマクロなんであるんだろって不思議だったんですが、単に短く書きたいだけだったんですかね?

nobu: r62683 2018-03-07 16:43:07 +0900

object.c の rb_to_integer() で変換時に使うメソッドの mid を引数に受け付けるようにして convert_type() のかわりに convert_type_with_id() を使うようにして rb_intern() を省略するようにしています。

nobu: r62684 2018-03-07 16:56:40 +0900

test/date/test_date_arith.rb にテストメソッドなのに test_ で始まっていなかったので実行されてなかったメソッドがあったので prefix を追加しています。

nobu: r62685 2018-03-07 17:07:24 +0900

拡張ライブラリ date の offset_to_sec() および d_lite_plus() で引数が Rational じゃなかったら Rational に変換して再帰的に呼び出してましが、to_r で変換した結果が Rational じゃないようなオブジェクトを定義して渡すと無限再帰に陥ってスタックオーバーフローを起こす不具合があったみたいなので修正しています。