ruby-trunk-changes r48701 - r48708

今日は ISeq のロード処理(本体のメソッドからは呼べない C-API ですが)の不具合修正などがありました。

nobu: r48701 2014-12-03 23:39:46 +0900

r48699 の解説がコミットから漏れていたので ChangeLog エントリに追記しています。拡張ライブラリを static link した時にも Init_xxx() の初期化は require された時まで遅延するようにすることで、mathn/complex や mathn/rational のような組み込みのクラスの挙動を変更するようなライブラリがデフォルトで有効になってしまうのを避けるという意味があったようです。

nobu: r48702 2014-12-04 04:20:36 +0900

ruby_require_internal() で rb_require_internal() を呼んだ時に例外などのエラーを無視しているので rb_set_errinfo() で th->errinfo をクリアするようにしています。 こうしないと例外などが漏れ出してしまうんですよね。

svn: r48703 2014-12-04 04:20:49 +0900

version.h の日付更新。

normal: r48704 2014-12-04 07:03:59 +0900

iseq の解放処理の SEGV の可能性のある不具合を修正しています。iseq->callinfo_entries のメモリ領域が確保される前にコンパイル処理がエラーになって、その iseq が解放される時にチェックなしにこの領域をさわろうとしてしまっていたので、文法エラー時などに SEGV のおそれがあったようです。

normal: r48705 2014-12-04 07:16:58 +0900

rb_iseq_load() の不具合修正盛り合わせって感じであれこれ修正されています。この関数はメソッドになっていなくて、wanabe さんの iseq.gem を使うと ISeq.load として呼べますがデフォルトでは呼べなくなっているので、コードが古くなりやすいんですよね。型の修正やキーワード引数の対応などなど他にもいろいろあるようです。拡張ライブラリを使ったテストも追加されているのでもうちょっと追随が楽になりそうです。 [Feature #8543]

svn: r48706 2014-12-04 07:17:03 +0900

r48705 で新規追加されたファイルの svn property 設定。

nobu: r48707 2014-12-04 08:24:57 +0900

r48705 で追加したテスト用の拡張ライブラリでクラスの取得に rb_eval_string() を使っていたのを rb_path2class() を用いるように修正しています。

nobu: r48708 2014-12-04 08:25:01 +0900

template/prelude.c.tmpl で prelude ファイル内でのコメントに ## のように # が連続しているとうまく削れてなかったのを対応したり、require のパス書きかえを require_relative にも対応するようにしています。