ruby-trunk-changes r43687 - r43693

今日はここ数日の callcc についての不具合の修正の別のアプローチや REXML の不具合修正などがありました。

tarui:r43687 2013-11-16 02:08:52 +0900

Hash#each のブロック内での callcc による不具合の対応である r43675 と r43683 を revert しています。 次のコミットで別の方針で修正しています。

tarui:r43688 2013-11-16 02:15:31 +0900

Continuation に rb_ensure() で定義された ensure 節に相当する処理を終えた後でまたその前の処理に戻った時に、ensure 節の処理を取り消す処理を実行させる機構を追加して、これを利用して Hash#each の処理も修正しています。 callcc で Continuation を生成した時にその時点で実行予定の ensure 処理を保持しておいて、ensure 処理で rollback 用の関数を登録しておいて Continuation で処理を巻き戻したらその時点まで rollback 処理を逆向きに実行して状態を元に戻すということをするみたいです。 [ruby-dev:47803] [Bug #9105]
いやーこれはおおごとですね。また ensure 処理が2重に実行してはいけない場合この rollback 関数の登録に対応していないといけなくなるわけなので、拡張ライブラリでの対応まで考えると、どうもそこまでする必要があるのかなぁという気も。 Rubyスクリプトで書かれた ensure 節の内容もこの対応とは別の問題ですしね。

zzak:r43689 2013-11-16 03:36:54 +0900

r43688 の ChangeLogtypo 修正。

nobu:r43690 2013-11-16 05:54:16 +0900

r43685 の at_exit のブロック内での callcc のテストで assert に system を渡していたところを assert_normal_exit を利用するように修正しています。

nobu:r43691 2013-11-16 07:14:09 +0900

make test-all 用のユーティリティ test/ruby/envutil.rb で Mac OS X では [BUG] などで異常終了した時に C のバックトレースなどがそのまま表示されずファイルとして保存されるため情報が不完全なので、この crash report ファイルを検索して内容を取得して、ついでにファイルを削除するメソッドを追加しています。そして一部のテストでこの情報をメッセージ等に含めるようにしています。

tarui:r43692 2013-11-16 09:24:39 +0900

Hash#each のブロック内の callcc による Continuation の再実行のテストケースを再度追加しています。 [ruby-dev:47803] [Bug #9105]

kou:r43693 2013-11-16 18:31:24 +0900

標準添付ライブラリ rexml の REXML::Parsers::UltraLightParser#parse で start_doctype のノードがまちがった構造のツリーを返してしまう不具合を修正しているとのこと。 [ruby-dev:47778] [Bug #9061]