ruby-trunk-changes r49706 - r49725

今日は String#chomp のエンコーディングに関する修正、Time#zone のエンコーディングの再修正、Complex#* の特殊なケースの挙動の変更などがありました。

nobu: r49706 2015-02-24 09:47:12 +0900

String#chomp でエンコーディングを goto smart_chomp; でジャンプした時に取り直すように修正しています。 reciever と引数でエンコーディングが異なる時の処理を正しくするようにしているみたいです。 [ruby-core:68258] [Bug #10893]

svn: r49707 2015-02-24 09:47:21 +0900

version.h の日付更新。

nobu: r49709 2015-02-24 11:05:28 +0900

eval.c や eval_jump.c、load.c で PUSH_TAG() や POP_TAG() を利用していたのを明示的に対象の rb_thread_t を引数で指定する TH_PUSH_TAG() と TH_POP_TAG() を利用するように修正しています。と、思ったけど TH_POP_TAG() は引数を受け取ってませんでしたね。まあ実体は同じなのですが TH_PUSH_TAG() と対応しているということで。

nobu: r49710 2015-02-24 11:49:51 +0900

Time#zone のエンコーディングについて r46907 で ASCII-8BIT にして、r49693 で US-ASCII にしたのを再修正して、7bit ASCII 文字のみ含む場合は US-ASCII にして、そうでない時は locale encoding にするようにしています。文字列の内容を判定するまではバイト列として扱うようにしています。最初から rb_usascii_str_new_cstr() で作ってしまうと非 ASCII 文字が含まれている時にエラーになってしまうということですかね。 [ruby-core:68230] [Bug #10887]

nobu: r49711 2015-02-24 11:50:35 +0900

r49710 で ChangeLog エントリが重複していたので1つ削除しています。

nobu: r49712 2015-02-24 12:34:10 +0900

OS Xファイルシステムの情報を得るためのシステムコール getattrlist(2) の引数を uint32_t の配列として定義していたのを、古い gcc での警告除去のため packed された構造体として宣言するようにしています。

nobu: r49713 2015-02-24 13:51:33 +0900

enc/trans のタイムスタンプファイルを指す ENC_TRANS_D に、これがビルドディレクトリにあることを明示的に示すために "./" ではじめるようにしています。 Makefile 難しいですね…。

nobu: r49714 2015-02-24 13:51:39 +0900

win32/win32.c で Windows 版の spawn 類で組み込みのコマンドを保持する配列を、char* の配列ではなく固定長の2次元配列として定義することで省メモリ化しています。

nobu: r49715 2015-02-24 13:59:03 +0900

tool/mkrunnable.rb の ln_safe で mklink の呼び出しをこれまでメッセージの出力のみに留めていたのを cmd /c mklink dest src にして実行するようにしています。これも古い Windows のサポートを終了して cmd 前提にして良くなったからですかね。
また ln_relative と ln_dir_relative では File.identical? を呼び出して、ファイル/ディレクトリが既に同一でリンクが不要ならすぐにメソッドを抜けるようにしています。

ko1: r49721 2015-02-24 19:11:14 +0900

LEP(Local EP、メソッドなど最外スコープのローカル変数の情報を持つ領域へのポインタ)が指す領域には特殊変数も格納されるのですが、これまで参照しただけでその領域が確保されていたのを、セットするまで確保しないようにして余分なオブジェクト(T_NODE オブジェクト)の確保を抑制するようにしています。

gogotanaka: r49722 2015-02-24 21:57:23 +0900

Math.cbrt のテストに Math.cbrt(1.0/0) が Float::INFINITY を返すことをチェックする assertion を追加しています。 gogotanaka さんは matrix や math にパッチを投げてた方です。コミッタになられてたんですね。

nobu: r49723 2015-02-24 22:58:52 +0900

Complex#* で real 部または imag 部が Float::INFINITY だった時に Complex(1, 0) や Complex(0, 1) を掛けると回転するように振る舞うようにしています。

nobu: r49724 2015-02-24 22:59:06 +0900

Fixnum の加算(+)や乗算(*)で引数(右辺)が Complex だった時に左右を交換して rb_nucomp_plus() や rb_nucomp_mul() を呼び出すようにしています。 coerce をショートカットするようにしています。

nobu: r49725 2015-02-24 23:02:38 +0900

common.mk に TESTOPTS 変数を環境変数 RUBY_TESTOPTS で初期化するようにしています。 TESTOPTS だと他のツールなどの環境変数とかぶるので RUBY_ を prefix につけるようにしたものを受け付けるようにしているみたいです。