ruby-trunk-changes r54650 - r54655

今日も SyntaxError のメッセージ作成まわりのリファクタリングと標準添付ライブラリ cgiCGI.unescape の拡張ライブラリ版が_unescape でなく直接 unescape を再定義するように変更されています。

nobu: r54650 2016-04-20 10:25:55 +0900

r54649 の続きのリファクタリング。 append_compile_error() からエラーメッセージの追記に rb_syntax_error_append() を利用するようにし、rb_syntax_error_append() では exc が 0 でない時には文字列ではなく例外(SyntaxError)オブジェクトを受け取ってそのメッセージの文字列に追記するように変更しています。parse.y でもこれにあわせて rb_parser_t::error_buffer には SyntaxError オブジェクトが入っているものとして扱うようにしています。

svn: r54651 2016-04-20 10:25:56 +0900

version.h の日付更新。

nobu: r54652 2016-04-20 11:52:07 +0900

さらに compile error 関係の関数のリファクタリング。 prepare_compile_error() で事前に SyntaxError の例外オブジェクトを作っておいて struct iseq_compile_data::err_info にセットしていたのを最初に append_compile_error() を呼ばれた時点で生成するように遅延しています。

nobu: r54653 2016-04-20 13:37:26 +0900

テスト用のライブラリの assert_syntax_error メソッドで戻り値に発生した例外的オブジェクトを返すようにしています。

nobu: r54654 2016-04-20 15:52:30 +0900

SyntaxError のデフォルトのメッセージを parse.y で指定して rb_exc_new_str() で例外オブジェクトを作成していたのを、SyntaxError の initialize メソッドを定義してそこに埋め込むようにしています。

nobu: r54655 2016-04-20 17:33:33 +0900

拡張ライブラリ化された cgi/escape で CGI::Escape#_unescape として定義されていたメソッドを unescape を直接定義するようにしています。このため省略可能な第2引数を受け付けるようにして、また rb_call_super() で super を呼ぶ時に第2引数を捨てていたのを修正しています。