ruby-trunk-changes r40578 - r40587

今日は defined?(super) の不具合の修正などがありました。

kazu:r40578 2013-05-05 11:40:33 +0900

r40559 の ChangeLogtypo 修正。 r40366 から連なる変更の一部です。

svn:r40579 2013-05-05 11:40:38 +0900

version.h の日付更新。

nobu:r40580 2013-05-05 13:29:01 +0900

multiarch 対応のために template/ruby.pc.in の Cflags に使うアーキテクチャ依存のヘッダファイルディレクトリパスを ${rubyhdrdir}/${arch} から ${rubyarchhdrdir} に変更しています。 [ruby-core:52622] [Bug #7874]

nobu:r40581 2013-05-05 13:37:48 +0900

ビルド時に実行ファイルのリンク後に実行するコマンドを指定する POSTLINK を、Mac OS X で実行ファイルの署名するために codesign を呼ぶ設定をする時にその場で $LINK_SO にその時点での ${POSTLINK} の内容を埋め込まずに、変数の参照として入れておくようにしています。あとで POSTLINK を上書きできるようにしたのでしょうか。

nobu:r40582 2013-05-05 15:54:32 +0900

r40581 の再修正。 LINK_SO の改行を消さないようにしているそうです。

nobu:r40583 2013-05-05 16:29:44 +0900

defined?(super) がブロック内で呼ばれると nil がかえってきてしまう不具合を修正しています。 r36369 で method entry の検索を iseq から cfp を見るように変更した影響でブロック内のときにメソッドエントリをみつけそこなっていたようです。 VM の control frame stack を EP == LP のところまで(つまりメソッド定義の直下、ローカル変数が定義されるところ)まで辿ってから method entry を探すようにしています。 [ruby-core:54769] [Bug #8367]
これって今度は define_method にブロック渡ししてメソッドを定義した時のそのブロック内の defined?(super) が別のものを見るようになったりしないんでしょうか? と、思ってちょっと実験してみたのですが、どうやら大丈夫みたいでした。

class A
  def a; end # A の a と def_a をそれぞれコメントアウトして実験
  def def_a; end
end

class B < A
  def def_a
    1.times{ p [:in_block, defined?(super)] }
    self.class.module_eval do
      define_method(:a) do
        p [:in_define_method_block, defined?(super)]
      end
    end
  end
end

b = B.new
b.def_a
b.a

A#a を定義した時は :in_define_method_block で "super" を、A#def_a を定義した時は :in_block で "super" を返したので大丈夫そうです。

nobu:r40584 2013-05-05 18:57:02 +0900

r40583 の追加。 VM の命令 defined のなかで ZSUPER(引数なし、引数のかっこもなしの super) の時の super の呼び先を探索するのに vm_search_superclass() を使うようにしています。またこのために vm_search_superclass() で継承しているメソッドがみつからなかった時に例外を発生させていたのをやめて、戻り値で結果を返し、これまでの呼び元(1箇所だけ)で条件分岐して例外を発生させるようにしています。これで実際に super を呼ぶ時と同じ探索方法を使うので確実に判定できるようになっているはず。 [ruby-core:54769] [Bug #8367]

nobu:r40585 2013-05-05 19:02:41 +0900

r40584 の変更に関連して、トップレベルでの defined?(super) (nil を返す)のテストを追加しています。

eregon:r40586 2013-05-05 20:49:53 +0900

doc/syntax/refinements.rdoc のサンプルコードのクオート閉じ忘れを修正しています。

xibbar:r40587 2013-05-05 22:27:26 +0900

標準添付ライブラリ cgiCGI::Session#[]= の rdoc コメントの typo 修正。