ruby-trunk-changes r55834 - r55847

今日は拡張ライブラリ tk が標準添付から外れる変更と、Hash#map_v, Hash#map_v! メソッドの新規追加がありました。

suke: r55834 2016-08-08 21:04:45 +0900

拡張ライブラリ win32ole のサンプルスクリプトに deprecated になった定数 TRUE の参照があったので予約語の true を使うように修正しています。

kazu: r55835 2016-08-09 00:16:30 +0900

doc/maintainers.rdoc に lib/date の記述があったのですが ext/date に移動しているので削除しています。

svn: r55836 2016-08-09 00:16:31 +0900

version.h の日付更新。

nobu: r55837 2016-08-09 10:42:48 +0900

拡張ライブラリ tk のライブラリおよびサンプルスクリプトで TRUE/FALSE を使っているところがあったので予約語 true/false に変更しています。また win32ole のサンプルスクリプトで FALSE を参照しているところが残っていましたので false に変更しています。

nobu: r55838 2016-08-09 10:42:49 +0900

拡張ライブラリ tk のサンプルスクリプトで Kernel#attr を使っているところがあったので attr_accessor を使うように変更しています。 attr とか久しぶりに見た…。

nobu: r55839 2016-08-09 10:42:51 +0900

拡張ライブラリ tk の tcltk.rb で戻り値になる式が代入文で警告が出てたので明示的な return 文を追加しています。

nobu: r55840 2016-08-09 14:05:09 +0900

拡張ライブラリ tk で switch 文の case 節の最後の break が忘れられていて fallthrough していたのを修正しています。TckTkLib.set_max_block_time() に Float でタイムアウトを渡した時に ArgumentError になってしまっていたようです。

nobu: r55841 2016-08-09 14:05:10 +0900

r55840 のついでで set_max_block_time() で ArgumentError 例外を発生させる時に rb_funcallv() で inspect を呼び出してたのを PRIsVALUE を使ってメッセージに埋め込むようにしています。

nobu: r55842 2016-08-09 14:05:11 +0900

拡張ライブラリ tk の ext/tk/tcltklib.c で StringValuePtr() を使っていたところで NUL 文字終端を期待しているところは StringValueCStr() を使うように修正しています。

nobu: r55843 2016-08-09 14:05:12 +0900

ext/tk/tcltklib.c で r55842 で StringValueCStr() に変更したところで strcmp(3) への引数に繰り返し同じオブジェクトの StringValueCStr() を渡してたので、1回変換してポインタを取り出して memcmp(3) でチェックするように最適化しています。

naruse: r55844 2016-08-09 15:44:45 +0900

拡張ライブラリ tk は標準添付から外されて https://github.com/ruby/tk で管理されるようになりました。 [ruby-core:55530] [Feature #8539]

nobu: r55845 2016-08-09 16:36:14 +0900

test/ruby/test_objectspace.rb で finalizer のテストで finalizer に渡すための Proc で Module#module_eval を呼んでいるところで引数に __FILE__ と __LINE__ を渡してファイル名と行数を指定してエラー時のバックトレースにこの位置が出るようにしています。

naruse: r55846 2016-08-09 16:52:23 +0900

vm_insnhelper.c の vm_getivar() には INLINE ではなく ALWAYS_INLINE() マクロによる __always_inline__ attribute の設定 or __forceinline 修飾子の付加に変更しています。こっちを使わないと gcc7 でインライン化されないとのこと。 ALWAYS_INLINE() マクロは引数に関数のプロトタイプ宣言を渡すのが本来の呼び方だと思いますが、まあ展開後も引数の前に __attribute__ ( (__always_inline__) ) が付くだけだと思うので展開後の結果は同じですね。

mrkn: r55847 2016-08-09 17:54:15 +0900

Hash#map_v および Hash#map_v! という新規メソッドが追加されました。ブロックに各要素に value の値が渡されて、その結果で value のほうを置き換えた Hash を返す、もしくは破壊的にその値で value を置き換えるというメソッドです。 ActiveSupport の Hash#transform_values というメソッドと同様の機能みたいですね。 [ruby-core:76095] [Feature #12512]