ruby-trunk-changes r50402 - r50408

今日は lambda 式で Syntax Error が発生することがある不具合の修正や、拡張ライブラリ socket のエラー処理の不具合修正、private な accessor と自己代入演算子の仕様の変更などがありました。

nobu: r50402 2015-04-30 16:22:19 +0900

p ->() do a(1) do end end のように ->() による lambda 式に do end ブロックを渡してその中にかっこ付きのメソッド呼び出し + do-end によるブロック という式が syntax error になるのを修正しています。 だいぶややこしいですが lambda 式の引数の parse 後に cmdarg_stack 変数をリセットしておいて、lambda の body 部の parse 後の規則で $ から退避しておいた値を取り出すように修正しています。 cmdarg_stack 変数は parser の規則部で利用されている parser 全体で共有されている変数(構造体のメンバ)なので、再帰的に利用される場所では退避/リセットが必要なようです。 [ruby-core:69017] [Bug #11107]

svn: r50403 2015-04-30 16:22:45 +0900

version.h の日付更新。

nobu: r50404 2015-04-30 16:39:46 +0900

拡張ライブラリ socket の socket(2) や connect(2) listen(2) などのシステムコールのエラー時に errno を退避せずに close(2) を呼んでいたため errno が上書きされて、errno が 0 の状態で SystemCallError を発生させようとして rb_bug() で異常終了することがあった不具合を修正しています。 [ruby-core:68531] [Bug #10975]

nobu: r50405 2015-04-30 16:45:36 +0900

拡張ライブラリ socket の IPSocket の初期化で何らかのシステムコールでエラーが発生した時に例外を発生させる rsock_syserr_fail_host_port() に渡す引数が間違っていたため冗長な例外メッセージを生成してしまっていた不具合を修正しています。 [ruby-core:68531] [Bug #10975]

hsbt: r50406 2015-04-30 17:02:38 +0900

rational.c の Rational の rdoc 用コメントで 2r のような r-suffix による Rational の literal 表記について追記しています。 [Bug #11075] https://github.com/ruby/ruby/pull/885

svn: r50407 2015-04-30 17:02:56 +0900

r50406 のコメントの編集の行末の空白除去。

nobu: r50408 2015-04-30 19:51:13 +0900

private な attr_accessor を定義した時の += のような自己再代入するメソッドのために VM の命令列のコンパイルを修正した r46873 と r46875 の変更を revert しています。 そもそも private なメソッドの呼び出しの制限が += のような記法の時だけ無視されるのはダメなんじゃね? という仕様面での指摘を受けてやっぱりやめということ。 [ruby-core:68984] [Bug #11096]
うーん、[Bug #10060] とは真っ向から対立する仕様なんですが、どっちがいいんですかねぇ。個人的には private な attr_accessor ってそもそも必要か? という気がしますが…