ruby-trunk-changes r44799 - r44808

今日は昨日の Dir.glob の変更の再実装や RubyGems の更新、String オブジェクトの内部表現の整理などがありました。

drbrain: r44799 2014-02-04 09:48:31 +0900

RubyGems を 2.2.2 の prerelease 版に更新しています(Gem::VERSION は "2.2.1" のまま)。 コミットログにはCI のエラーを修正とありますが、その他にもいろいろ修正はあるようで、ちょっと要約する余裕がないので詳細は History.txt を参照。 https://github.com/rubygems/rubygems/blob/master/History.txt

svn: r44800 2014-02-04 09:48:37 +0900

version.h の日付更新。

naruse: r44801 2014-02-04 12:19:57 +0900

r44796 の Dir.glob で大文字小文字を無視する時の戻り値の変更を revert しています。どうもビルドがうまくいかなくなっていたそうです。 [ruby-core:42469] [Feature #5994]

nobu: r44802 2014-02-04 12:45:17 +0900

r44796 のリベンジです。ちゃんと読めてないのですがパターン文字列を分解するところで FNM_SYSCASE もしくは HAVE_HFS が真の時はアルファベットをメタキャラクタとして扱うようにしているようです。これだけでいいのかー。 でもテストが復活していないですね。 [ruby-core:42469] [Feature #5994]

nobu: r44803 2014-02-04 12:55:32 +0900

文字列のバッファを拡張する時に struct RString::as.heap.aux.capa を設定する時に STR_UNSET_NOCAPA() を呼び忘れていたのを修正しています。 STR_UNSET_NOCAPA() は文字列の共有を解消するようにしています。 これは Array#pack の指示子 "p" でポインタを取り出した時にその文字列に対して操作した時に unpack 操作できないようにして不正なアドレスを参照しないようにしています。
うーんなんか pack("p") と pack("P") の実装すごーく昔(学生の頃かも)に調べたような気がします。今ならもうちょっと理解できるかも。

nobu: r44804 2014-02-04 14:07:21 +0900

r44803 の続きで、そもそも pack("p") した結果の文字列と元のオブジェクトを関連付けるためにインスタンス変数を利用するように実装を変更しています。 そして不要になった rb_str_associate() と rb_str_associated() を deprecated にマークしています。

ko1: r44805 2014-02-04 16:12:49 +0900

r44804 の変更で文字列オブジェクトが STR_ASSOC というフラグを struct RBasic::flags に持つことはなくなったのでこのフラグに依存した処理を削除しています。 おお、RString がちょっとすっきりしましたね。
あと gc.c にも STR_ASSOC を参照しているところが残っているようです。

ko1: r44806 2014-02-04 16:17:59 +0900

string.c で共有文字列のフラグに ELTS_SHARED のかわりに STR_SHARED を利用するようにリファクタリングしています。 STR_SHARED は ELTS_SHARED と同じ値になるように internal.h で定義されていますが、ELTS_SHARED は多分配列の共有を表現するために利用されているので意味的に STR_SHARED を使ったほうがよい場面で STR_SHARED を使うようにしているのだと思います。

nobu: r44807 2014-02-04 17:20:05 +0900

r44802 の続きで実際にはこっちが r44796 のリベンジだったっぽいです。 ここでテストも復活しています。 [ruby-core:42469] [Feature #5994]

ko1: r44808 2014-02-04 19:17:52 +0900

string.c の文字列オブジェクト生成関数が rb_str_new{234}() や str_new{34}() など数字つきの名前で呼び出していたところを別名の説明的な名前のほうで呼び出すようにしています。