ruby-trunk-changes r52415 - r52421

今日は id_table.c の潜在的GC mark 漏れの修正や Symbol リテラルの不具合修正がありました。

nobu: r52415 2015-11-01 08:34:17 +0900

template/ruby-runner.c.in で RUBY_INSTALL_NAME を @RUBY_BASE_NAME@ を展開して使うのではなく、ruby-runner のコンパイル時のオプションに -DRUBY_INSTALL_NAME で名前を渡してこれを展開するようにしています。

svn: r52416 2015-11-01 08:34:42 +0900

version.h の日付更新。

nobu: r52417 2015-11-01 08:39:37 +0900

拡張ライブラリ tk の Windows 版の初期化処理で ruby_enc_find_basename() が利用可能ならこれを使って filesystem encoding にエンコードしたファイル名で rbtk_win32_SetHINSTANCE() を呼び出すようにしています。

nobu: r52418 2015-11-01 09:12:12 +0900

Symbol リテラルで ":" の直後に "#" でコメントがあると次の行まで Symbol として解釈されてしまっていたのを修正しています。
つまり

:# comment
foo # => :foo

になってしまっていました。

normal: r52419 2015-11-01 11:13:54 +0900

iseq_memsize() に rb_call_cache の容量のぶんを加味するようにしています。

nobu: r52420 2015-11-01 11:50:59 +0900

template/ruby-runner.c.in で冗長な条件チェックをローカル変数に結果を保持するようにしてシンプルにしています。

ko1: r52421 2015-11-01 17:17:25 +0900

ID 専用テーブルの実装 id_table.c の mix_id_table_insert() で容量がオーバーで hash に変換する時に共用体 struct mix_id_table::aux の hash を直接初期化して使うと、変換の間に GC が走る可能性があって元の aux.list のほうの値の mark が漏れて回収されてしまう恐れがあるので、スタック上に struct hash_id_table を作ってそこに構築後に struct mix_id_table::aux.table に代入するようにしています。
生の assert(3) が残ってますね、と思ったけど id_table.c には他にも結構ありますね。