ruby-trunk-changes r48847 - r48866

今日は先日の Struct の高速化で入った非互換性の修正のため ISeq まわりに変更がありました。

headius: r48847 2014-12-16 03:56:30 +0900

IO#read に第2引数としてバッファに使う文字列オブジェクトを渡した場合に、ascii_only? のチェックが再取得されることを確認するテストを追加しています。 JRuby に ascii_only? が読み込み前の状態が残ってしまう不具合があったようでそれに対応したテストみたいです。 https://github.com/jruby/jruby/issues/2316

svn: r48848 2014-12-16 03:56:44 +0900

version.h の日付更新。

nobu: r48849 2014-12-16 04:09:25 +0900

compile.c で ISeq のコンパイルや disasm に TS_FUNCPTR という最適化命令の種類を対応するようにしています。はて、なんだろうこれ…。

nobu: r48850 2014-12-16 04:13:07 +0900

iseq.c で内部的に利用する一時的な配列を klass を 0 にして ObjectSpace から隠すようにしています。

nobu: r48851 2014-12-16 04:13:15 +0900

r48748 あたりで Struct の高速化のために動的に ISeq を作るようにした rb_method_for_self_aref() や rb_method_for_self_aset() でファイル名や行番号の設定を caller_location() という関数に括り出して、可能なら呼び出し元を設定するようにしています。

headius: r48852 2014-12-16 04:59:12 +0900

Time.getlocal(nil) と明示的に nil の引数を与えた時のテストを追加しています。 これも JRuby の不具合に対応するテストみたいです。 https://github.com/jruby/jruby/issues/2310

normal: r48853 2014-12-16 05:44:54 +0900

tool/vcs.rb で 1.8 で使えない &:to_i などでブロック化する記法をやめています。

headius: r48854 2014-12-16 07:33:44 +0900

古い Linux では ioctl(2) が pipe に対して errno=ENOTTY で返るべきところで EINVAL で返ることがあるそうで、テストで捕捉する例外を追加しています。 [ruby-core:66191] [Bug #10494]

normal: r48855 2014-12-16 07:39:33 +0900

GC 用の環境変数のドキュメントの文法修正と man/ruby.1 に環境変数について追記しています。 [ruby-core:64717] [Feature #10197]

normal: r48856 2014-12-16 09:08:14 +0900

tool/vcs.rb の ruby 1.8 対応で Time.new への引数で * で配列展開して渡した後で通常の引数を渡す記法は 1.8 では使えないのであらかじめ配列に入れておくようにしています。 そういえばそうだったなぁ…。

nobu: r48857 2014-12-16 10:14:20 +0900

RubyVM::InstructionSequence(通称 ISeq)#to_a でダンプする時にも TC_FUNCPTR という命令タイプに対応しています。 って言っても nil を入れてるんですけど。

nobu: r48858 2014-12-16 10:14:27 +0900

TS_FUNCPTR タイプの命令を文字列化する時に可能ならば(dladdr(3) が利用可能でかつ関数ポインタのシンボルが取得できたら)関数名を表示するようにしています。 あーなるほど、命令が C の関数になっているものなのですね。

ko1: r48859 2014-12-16 12:03:24 +0900

fork 時のシグナルハンドラの挙動のテストで試行回数が多いのでタイムアウトをのばしています。

nobu: r48860 2014-12-16 13:39:17 +0900

SEGV を発生させるテストで Mac OS X で ~/Library/Logs/DiagnosticReports に残るバックトレースなどの情報の入ったファイルの内容をチェックして削除もするようにしています。

nobu: r48861 2014-12-16 13:59:31 +0900

.travis.yml に Mac OS X では ~/Library/Logs/DiagnosticReports/ のクラッシュダンプも表示させるようにコマンドを追加しています。

nobu: r48862 2014-12-16 14:05:00 +0900

r48861 の修正。 エスケープが不十分だったのを修正しています。

nobu: r48863 2014-12-16 14:54:32 +0900

ISeq の to_a および配列からの load 関数での TS_FUNCPTR の扱いの修正。 ダンプする時に VALUE に関数ポインタをそのまま入れていましたが、Integer に変換して入れるように修正しています。

nobu: r48864 2014-12-16 15:18:25 +0900

r48748 の Struct の属性アクセスの高速化で ISeq を構築する時に直接対象の関数を呼び出すopt_call_c_function 命令を生成するようにしています。なるほどーこのための布石だったのですね。チケットのほうをみると Struct から生成したクラスで []= メソッドを再定義した時の挙動に問題があったようです。 [ruby-core:66846] [Bug #10601]

nobu: r48865 2014-12-16 16:38:52 +0900

iseq.c の rb_method_for_self_aref() から不要な行を削除しています。

usa: r48866 2014-12-16 16:48:22 +0900

NEWS ファイルの Windows での IO#flush でのメタデータ更新の抑制の変更点に IO#fsync なら書き込みを待つことを追記しています。