ruby-trunk-changes r45581 - r45587

今日は文字列の連結時のエンコーディング回りの変更や UnboundMethod#bind したメソッド内の super の不具合修正などがありました。

nobu: r45581 2014-04-14 14:33:40 +0900

文字列オブジェクトに文字列を連結する rb_enc_cr_str_buf_cat() でエンコーディングは同じで、連結先の文字列の coderange が不明の時に連結する文字列の coderange も不明としていたのをやめています。なにやらよくわかりませんが多分続く変更の布石でしょう。と思ったけど特に続いてないですね…

nobu: r45582 2014-04-14 14:33:42 +0900

rb_enc_cr_str_buf_cat() で同じ rb_enc_from_index() を複数回呼んでいたところを結果をローカル変数に格納して共有するようにして呼び出し回数を減らしています。

svn: r45583 2014-04-14 14:33:45 +0900

version.h の日付更新。

nobu: r45584 2014-04-14 16:59:42 +0900

rb_obj_is_kind_of() からあるクラスの継承ツリー上に指定のクラスを検索する処理を rb_class_search_ancestor() として切り出して、rb_class_inherited_p() でもこれを利用するようにしています。 次の r45585 とも関係しているかも。

nobu: r45585 2014-04-14 17:20:10 +0900

UnboundMethod#bind で既に必要な IClass が存在していたら挿入しないようにしています。 UnboundMethod#bind した Method を call したメソッド中の super の呼び出しが失敗するのを修正した r45565 で今度はメソッド探索で無限ループに陥る不具合があったそうで、その修正になります。 [ruby-core:62014] [Bug #9721]

naruse: r45586 2014-04-14 19:08:02 +0900

addr2line.c で実行中のプログラムの実行形式ファイルのパスを取得する方法の FreeBSD 版の実装を追加しています。 sysctl(3) で {CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1} というのを指定すると取れるそうです。なおコミットログによるとプログラムを呼び出す側がセットしておくものっぽくて、sh, csh, tcsh, bash, zsh はセットしてくれるけど gdb はしてくれない、と書いてある気がします。

naruse: r45587 2014-04-14 19:08:04 +0900

addr2line.c の C level backtrace 取得で fill_lines() がベースアドレスを返すようにして r45563 で導入した dladdr_fbases に格納するようにしています。 PIE でなかった時にこれまで呼び元で traces のアドレスを元に dladdr(3) を呼んでいたのを fill_lines() の中で .dynsym/.dynstr のセクションの情報を元に dladdr(3) を呼んでいるのでその結果を返して使いまわすようにしたということかなと思います。