ruby-trunk-changes r46678 - r46696

今日は標準添付ライブラリ uriURI#query= で不正な文字をエラーにしないようにする変更や、Symbol の内部の管理まわりのリファクタリングなどがありました。

naruse: r46678 2014-07-04 02:59:49 +0900

標準添付ライブラリ net/http の Net::HTTP#get の第2引数 initheader のデフォルト値を {} (空の Hash) から nil に変更しています。これが渡される Net::HTTP::Get#initialize ではデフォルトが nil なので、不要なオブジェクトを作成しないようにしています。

svn: r46679 2014-07-04 03:00:00 +0900

version.h の日付更新。

naruse: r46680 2014-07-04 03:00:08 +0900

標準添付ライブラリ uriURI::Generic#query= や #fragment= で不正なクエリ文字列などを渡されると例外を発生させていたのを、%xx 記法でエスケープするようにしています。 これは RFC 3986 では "" などの文字が URI に含められなくなったため、r46491 あたりで RFC 3986 対応した uri では "key=0&key[]=1" のように配列を指定するパラメータがエラーになるようになってしまっていたのでその対応として、不正な文字はエラーではなくエンコードするようにしたとのことです。 [ruby-core:27360] [Feature #2542]

naruse: r46681 2014-07-04 04:46:34 +0900

標準添付ライブラリ net/http で Net::HTTPResponse#inflater で後始末で Net::HTTPResponse::Inflater#finish を実行中に例外が発生した場合に、例外で抜ける途中だった時は元の例外を投げるようにしています。 finish も例外を発生させる蓋然性が高いからみたいです。

naruse: r46682 2014-07-04 04:46:44 +0900

標準添付ライブラリ net/http の Net::HTTPResponse::Inflater#inflate_adapter でエンコーディングの変換がおこらないように出力先の encoding を ASCII-8BIT にセットするようにしています。

hsbt: r46683 2014-07-04 09:47:44 +0900

r46145 での rdoc のテストの Tempfile リーク修正を revert しています。 Tempfile.create を使っているのですが、これは 2.1 からの機能なので 2.0.0 以前だと動かないからとのこと。gem 内のテストじゃなくて test/ だからいいのでは? と思ったけど本家のテストからもってきているんでしたね。 ただ Tempfile.open はブロックを実行しないのでこれだとテストが実行されなくなってしまいます。

hsbt: r46684 2014-07-04 10:09:27 +0900

rubygems のテストで Tempfile.open にブロックを渡していて Tempfile が leak していたのを修正しています。

ko1: r46685 2014-07-04 11:56:34 +0900

parse.y の #if ENABLE_SELECTOR_NAMESPACE という条件でくくられていた、デフォルトでは有効ではないコードを削除しています。 Selector Namespace とか Classbox とかって確か今の Refinements と同様の変更の影響を局所化するやつですよね。かなり昔の実験的コードで Refinements が入ったのでもう不要ということでしょうか。

nobu: r46686 2014-07-04 13:03:28 +0900

r46685 の ChangeLog エントリ の typo 修正。

nobu: r46687 2014-07-04 14:17:04 +0900

tool/compile_prelude.rb で prelude.rb を読み込む時にコメント行はあらかじめ除いておくようにしています。

nobu: r46688 2014-07-04 15:10:37 +0900

parse.y で演算子トークンのテーブル op_tbl の型を文字列部分をポインタではなくて char の配列として構造体自体に埋め込むようにして、またトークンの番号の型も ID から unsigned short に変更しています。

nobu: r46689 2014-07-04 15:32:44 +0900

rb_fstring_new() は US-ASCII なエンコーディングの文字列を返すようにしています。 非ASCII文字を含む fstring を作る時は別の関数を使うべきとのこと。

nobu: r46690 2014-07-04 16:16:21 +0900

parse.y の rb_id2str() で rb_fstring() を直接使っていたのを rb_fstring_new() を呼ぶように変更しています。

nobu: r46691 2014-07-04 16:30:11 +0900

parse.y から演算子の Symbol を op_sym というテーブルでキャッシュしていたのはやめて、fstring の管理にまかせるように変更(フリファクタリング?)しています。

nobu: r46692 2014-07-04 17:00:41 +0900

test-all 用の test/lib/test/unit.rb で並列テストで子プロセスから不明なコマンドが渡された時に表示するメッセージに改行を追加しています。

ko1: r46693 2014-07-04 18:11:05 +0900

parse.y の Dynamic Symbol であるはずの引数をチェックする must_be_dynamic_symbol() で分岐の条件を整理して、まず DYNAMIC_SYM_P() で Dynamic Symbol かチェックしてそこに UNLIKELY() を使うようにしています。

ko1: r46694 2014-07-04 18:39:14 +0900

parse.y の rb_pin_dynamic_symbol() を static 関数にしています。

ko1: r46695 2014-07-04 18:42:55 +0900

r46693 の DYNAMIC_SYM_P() の結果の判定が反転していた不具合を修正。 oh...

ko1: r46696 2014-07-04 20:48:47 +0900

Symbol 管理テーブルの型 struct symbols でシンボル名から ID への対応テーブルを管理する sym_id メンバを str_id と改名しています。これは Symbol から ID ではなくて String から ID へのテーブルだから、とのこと。またこれにあわせて lookup_sym_id() という static 関数も lookup_str_id() に改名しています。