ruby-trunk-changes r53488 - r53495

今日は Hash の要素への代入を左辺値に含む多重代入で SEGV することがある不具合修正などがありました。

normal: r53488 2016-01-10 09:35:43 +0900

標準添付ライブラリ内で Base64 エンコードのために Array#pack の "m" を利用して、後から改行を削除していたところを "m0" 指示子を使って最初から改行が含まれないようにしています。 [ruby-core:72666] [Feature #11938]

svn: r53489 2016-01-10 09:35:44 +0900

version.h の日付更新。

nobu: r53490 2016-01-10 11:07:00 +0900

insns.def のコメントには英語と日本語の解説があるのですが、それぞれ一方だけ書かれていたものを両方書くようにしています(主に英語の説明を追加)。

normal: r53491 2016-01-10 13:43:41 +0900

r53488 の ChangeLog エントリのインデント修正。

normal: r53492 2016-01-10 13:44:08 +0900

io.c の rb_deferr というグローバル変数を削除しています。 "rescue VIM plugin" というコメントがついていて、r3782 で導入されて r4190 で使われなくなったものだったとのこと。なんだろこれ。

nobu: r53493 2016-01-10 15:45:36 +0900

explicit_bzero(3) が存在しない時に memset_s(3) を利用した代替の inline 関数の定義を include/ruby/missing.h で inline 関数として書いていたのを missing.c で定義するようにしています。また missing.c で #include を追加しています。拡張ライブラリでヘッダの #include 順によるのビルドエラーを回避するための修正だそうです。

nobu: r53494 2016-01-10 18:43:47 +0900

テスト用の拡張ライブラリ ext/-test- の extconf.rb で冗長な拡張ライブラリ名をつけていた(ディレクトリ名+ファイル名)のを削ってディレクトリ名のみで足りるものはディレクトリ名までの名前に変更しています。

nobu: r53495 2016-01-10 20:57:51 +0900

条件が複雑なのですが、代入の左辺値がカンマで複数の値が書かれている(実際に複数書かれていなくても a, = *ary みたいなのでも可)いわゆる多重代入で、さらにそこに Hash のキーに配列を * で展開した記法(でも配列の要素は1つ)が書かれていると SEGV する不具合を修正しています。 [ruby-core:72777] [Bug #11970]
つまりこういうので SEGV していました。

h = {}
k = [:key]
h[*k], = 0