ruby-trunk-changes r38716 - r38732

今日は Refinement が require "refinement" なしで利用できるように戻されました。またキーワード引数について不具合修正や仕様追加などがありました。また TracePoint のイベントフック内で例外が発生した時の不具合の修正がありました。

ko1:r38716 2013-01-07 09:38:06 +0900

NEWS ファイルに起動時に環境変数VM Stack Size および Machine Stack Size を指定できる機能について追記しています。

svn:r38717 2013-01-07 09:38:11 +0900

version.h の日付更新。

nobu:r38718 2013-01-07 10:44:42 +0900

r38716 の NEWS ファイルの追記ぶんのインデントを修正。

nobu:r38719 2013-01-07 12:09:28 +0900

メソッド定義に rest 引数(可変長引数。 * で可変個の引数を配列として受けとれる)と keyrest 引数(キーワードの rest 引数。 ** で Hash としてキーワード引数を受け取れる)を両方していしていると、 rest 引数の最後の要素が keyrest の内容で上書きされてしまっていた不具合を修正。 [ruby-core:51278] [Bug #7665]

usa:r38720 2013-01-07 15:23:15 +0900

r38692 あたりで make の fake ターゲットの依存関係を変更したものの再修正。 fake/yes-fake/no-fake の定義は common.mk に移動して、win32/Makefile.sub で fake.rb を $(arch)-fake.rb に変更しています。 r38692 の変更に追随しているみたいです。

ko1:r38721 2013-01-07 15:24:46 +0900

TracePoint の例外が発生してメソッドから抜ける時のイベントフックが例外を発生させると、同じフックが無限に呼び続けられて抜けなくなる不具合を修正しています。例外に限らず大域脱出(TAG_JUMP)の発生時に tag を pop し忘れていました。 [ruby-core:51289] [Bug #7668]

nobu:r38722 2013-01-07 15:29:44 +0900

make test-all のテスト用ユーティリティの test/ruby/envutil.rb の assert_valid_syntax で第2引数の fname を省略可能にして、デフォルトで caller_location から取得するようにし、またファイル名だけでなく行番号もセットで配列で渡すこともできるように(デフォルトがそうなっている)しています。

nobu:r38723 2013-01-07 15:29:48 +0900

また test/ruby/envutil.rb に SyntaxError になることを確認する assert_syntax_error という新しい assertion を追加しています。

nobu:r38724 2013-01-07 15:32:01 +0900

メソッド定義で keyrest 引数の名前が他の仮引数名と重複していた時にエラーになっていなかったのでその修正と、r38723 で追加した assert_syntax_error を使って各種引数の種類毎に重複していた時に SyntaxError になることをチェックするテストを追加しています。

nobu:r38725 2013-01-07 15:42:13 +0900

rest 引数には仮引数を指定せずただ可変個の引数を受け付けることだけを指定する "*" だけを書く記法が許されているのに keyrest 引数には "**" だけ書くことはできなかったので、それも許容するように文法を修正しています。 [ruby-core:51269] [Bug #7662]

nobu:r38727 2013-01-07 16:50:27 +0900

test/ruby/test_syntax.rb の assert_not_label で assert_valid_syntax を利用していたのを assert_nothing_raised で代替しています。 引数がマッチしなくなった、というより元から一致していなかったみたいですね。あと @result に値を入れるため同じスコープで eval する必要があったようです。

ko1:r38728 2013-01-07 17:38:25 +0900

TracePoint のフックのイベントの種類を表すビットフラグの RUBY_EVENT_SPECIFIED_LINE を値を変更して、RUBY_EVENT_SWITCH/RUBY_EVENT_COVERAGE と共に special events としています。 また RUBY_EVENT_SPECIFIED_LINE のイベントでも TracePoint からは :line イベントとして見えるようにしています。
このフラグは experimental で 2.0.1 からまた名前が変わったり消されるかもしれないよとのことです。

shugo:r38729 2013-01-07 20:22:31 +0900

r38239 で Refinement のメソッド Module#refine, main.using が require "refinement" をしておかないと使えなくなっていたのですが、Matz の一声により再び組み込みで利用できるようになりました。 ただし最初に refine か using を使った段階で "Refinements are experimental, and the behavior may change in future versions of Ruby!" が出力されるようにされています。 [ruby-core:51286] [Bug #7667]

shugo:r38730 2013-01-07 20:30:43 +0900

NEWS ファイルからも r38729 で require "refinement" が不要になったので関連するエントリを削除しています。

shugo:r38731 2013-01-07 20:55:17 +0900

main.include つまり Top Level での include メソッドを private メソッドとしています。これまでは public だったのでどこからでも main.include M のように呼べてしまっていたのですね。 [ruby-core:51293] [Bug #7670]

shugo:r38732 2013-01-07 21:42:48 +0900

r38731 と同様に main.public および main.private main.define_method なども private な特異メソッドとして定義するように修正しています。 あれ、protected はいいのかな、と思ったら main.protected は定義されていないんですね……。