ruby-trunk-changes r56260 - r56276

今日は先日の文法エラー修正による新たな文法エラーの不具合の修正や、Warning.warn というメソッドで警告の扱いをカスタマイズできる仕組みの導入などがありました。

headius: r56260 2016-09-27 06:12:12 +0900

拡張ライブラリ ripper のインデント除去つきヒアドキュメント <<~ ... の対応のテストを追加しています。テストで snippet 用のヒアドキュメントのマーカーとその中で使われてるインデント除去つきヒアドキュメントのマーカーが同じになっていて、snippet 内でヒアドキュメントが終端してない状態になっていますがこれは意図した内容になっているのかな?

svn: r56261 2016-09-27 06:12:13 +0900

version.h の日付更新。

naruse: r56262 2016-09-27 12:17:47 +0900

標準添付ライブラリ webrickcgi で HTTP ヘッダの Cookie をパースする時に複数の Cookie を "," で区切って並べる記法を受け付けないようにしています。 [ruby-core:77416] [Bug #12791]
この挙動が元で Pythonフレームワーク django脆弱性の修正として同様の修正をしているようです。 https://gist.github.com/mala/457a25650950d4daf4144f98159802cc

kazu: r56263 2016-09-27 12:50:41 +0900

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

nobu: r56264 2016-09-27 14:26:26 +0900

r56263 で ChangeLog の先頭にまぎれこんだ余分な行を削除しています。

nobu: r56265 2016-09-27 14:34:41 +0900

iseqw_s_compile_file() から rb_parser_compile_file() を呼んでいたのを rb_parser_compile_file_path() を呼ぶように変更してファイル名の String オブジェクトをバッファを取り出さずそのまま引数に渡すようにしています。これにより Encoding 情報もそのまま渡せるようになっています。

nobu: r56266 2016-09-27 15:23:36 +0900

iseqw_s_compile() や iseqw_s_compile_file() で引数の処理を rb_scan_args() で可変長の引数を取り出さずに rb_error_arity() による arity チェックと組み合わせて直接 argv から要素を取り出すようにしています。また ":" を使ってキーワード引数を Hash オブジェクトとして取り出すようにしています。どっちかというとキーワード引数の取り出しのほうが本命みたいですね。

nobu: r56267 2016-09-27 17:35:30 +0900

ruby 本体のテスト用の test/unit の assertion assert_in_out_err に success というキーワード引数を追加して、指定時には子プロセスの終了ステータスの success? メソッドの結果のチェックを行なうようにしています。

nobu: r56268 2016-09-27 17:35:31 +0900

RubyVM::InstructionSequence.compile_file で SyntaxError でコンパイルに失敗した場合に、rb_thread_t::errinfo に例外が格納されたまま例外を投げなおしていなかったので、File の close 後に例外発生させるようにしています。 またテストに r56267 で追加した assert_in_out_err の success キーワード引数をさっそく利用しています。

shyouhei: r56269 2016-09-27 18:19:14 +0900

rb_warn() やその variant たちが警告メッセージを出力する時に Warning というモジュールの Warning.warn メソッドを呼び出すことで出力するようにしておいて、このメソッドを再定義することで警告の出力方法をカスタマイズできるようにしています。チケットのほうでもトップレベルの名前空間に追加することで衝突の可能性について危惧されていて RubyVM::Warning や Exception::Warning という候補が上げられていますが、ここではトップレベルに Warning モジュールが追加されています。 [ruby-core:75016] [Feature #12299]

kazu: r56270 2016-09-27 21:13:52 +0900

r56260 で追加した ripper のテストで、渡している snippet のヒアドキュメントのマーカーが一致していなかったのを修正しています。

shyouhei: r56271 2016-09-27 23:01:17 +0900

NEWS ファイルに r56269 で追加した Warning モジュールと Warning.warn について追記しています。

nobu: r56272 2016-09-27 23:19:32 +0900

演算子の前後の空白がバランスが取れてない時に二項演算子として解釈する時に警告を出力する機能についてテストケースを追加して、左側の値が Symbol やローカル変数の時のケースもチェックするようにしています。

nobu: r56273 2016-09-27 23:22:33 +0900

r56198 でかっこなしで引数を渡すメソッドの後の do...end ブロックが Syntax Error になることがある不具合の修正の影響で、ローカル変数と同名のメソッド呼び出しに do...end ブロックを渡すのが SyntaxError になっていたのを修正しています。 [ruby-core:72482] [Bug #11873]

nobu: r56274 2016-09-28 00:21:01 +0900

r56269 で追加した Warning.warn の引数が文字列オブジェクトであることと、ASCII compatible な文字列であることをチェックするようにしています。 [ruby-core:77430] [Bug #12793]

svn: r56275 2016-09-28 00:21:02 +0900

version.h の日付更新。

nagachika: r56276 2016-09-28 03:09:00 +0900

r56271 の NEWS ファイルの追記で Warning の特異メソッド名が warning となっていたので warn に修正しました。