ruby-trunk-changes r45325 - r45335

今日は lambda で作った Proc オブジェクトをブロック引数としてメソッドに渡して、そのメソッドから yield に配列を渡してブロックを呼び出した時の挙動の変更がありました。

nobu: r45325 2014-03-14 01:18:30 +0900

r45299 で追加した dl と fiddle のメモリリークのテストでエラーと判定するしきい値の条件を緩めて assert_no_memory_leak のデフォルトの設定値を利用するようにしています。

svn: r45326 2014-03-14 01:18:33 +0900

version.h の日付更新。

nobu: r45327 2014-03-14 01:18:45 +0900

Enumerator に lambda を渡した時に複数の値を yield した時の arity チェックによるエラーを回避するため invoke_block_from_c() に splattable という引数を追加して yield によるブロック起動時には arity チェックを回避して配列渡しを splat するようにしています。ただし splat して配列の中身をばらした時にやっぱりブロックパラメータの数と異なる時は(lambda 型の Proc だったら) ArgumentError を発生させるようにしています。 [ruby-core:61340] [Bug #9605]
この変更でメソッドにブロックを &blk のようなブロック引数で渡した時の yield に配列を渡した時の挙動が微妙に異なっていたのが変化しているんじゃないかなぁと思います。

nobu: r45328 2014-03-14 10:27:41 +0900

String#hash の rdoc 用コメントに文字列の Encoding も hash 値の計算に利用している旨を追記しています。

nobu: r45329 2014-03-14 10:27:43 +0900

Array#hash, Bignum#hash, Hash#hash, Float#hash, Proc#hash, Method#hash, Range#hash, Regexp#hash, MatchData#hash, String#hash, Struct#hash, Time#hash の rdoc 用コメントに Object#hash も参照するように文言を追加しています。 Object#hash の rdoc 自身にも追加しているような。 https://github.com/ruby/ruby/pull/567

nobu: r45330 2014-03-14 10:27:44 +0900

bignum.c で Bignum の文字列化のために n 進数での表示のため n で割った余りをのテーブルを BDIGIT のサイズによって条件コンパイルするようにしているところの条件を HAVE_UINT??_T で必要なくても定義していたのを SIZEOF_BDIGIT_DBL をみて必要な配列のみ定義するようにしています。

nobu: r45331 2014-03-14 10:27:46 +0900

range.c の未使用になっていた関数 SETEXCL() を削除しています。

zzak: r45332 2014-03-14 12:09:17 +0900

doc/syntax/literals.rdoc のシングルクオーテーションによる文字列リテラルの説明にバックスラッシュ自体のエスケープはあることを追記しています。 https://github.com/ruby/ruby/pull/553

nobu: r45333 2014-03-14 13:29:35 +0900

misc/rdoc-mode.el で emacs の rdoc モードでなにやらインデントを調整するようにしているようです。

nobu: r45334 2014-03-14 13:29:36 +0900

r45327 で lambda 型の Proc オブジェクトをブロック引数として渡した時のメソッドからのブロック起動で yield に配列を渡した時の挙動の変更を NEWS ファイルに追記しています。

naruse: r45335 2014-03-14 15:29:39 +0900

addr2line.c で rb_bug() などで表示する C level backtrace の関数名や行番号の取得機能を強化して、これまで取れなかったケースでも表示できるようにしています。デバッグ情報を読んだり、dladdr(3) を利用するようにしたりしています。また関数名が main のフレームに到達したら処理を止めるようにしています。 FreeBSD では dladdr(3) で main をその下の _start として認識してしまうことがあるそうで、シンボルテーブルをみて正しい名前を検出してから main で止めるようにしているそうです。