ruby-trunk-changes 2020-08-16

今日は wanabe さん無双の日で主に pattern match の文法を命令列にコンパイルする際にジャンプ先の VM スタックの深さが一致しなくなるようなラベルとジャンプ元の関係ができてしまっていた不具合を修正しています。

[ac399c2c7a] wanabe 2020-08-06 22:56:33 UTC

デバッグ用にビルドした時の RubyVM::InstructionSequence のデバッグ出力で TS_BUILTIN タイプを rb_bug() で異常終了させてたのを通すようにして、また TS_VALUE タイプの表示で対象のオブジェクトが klass を持たない内部的なオブジェクトの時に inspect を呼ばないようにしています。

[a7bd0ec570] wanabe 2020-08-07 23:34:22 UTC

compile.c の fix_sp_depth()、iseq_set_sequence() などでジャンプ先のラベルと sp が一致しない場合に警告メッセージを出力するようにしています。 RubyVMコンパイル時にスタックの深さがわかっているという前提で作られているので、ジャンプ命令で sp が一致しないというのは本来まずいはずなので、そのような事態がおきてるのをデバッグするためかと思われます。

[c1e7f0c709] git 2020-08-15 23:43:57 UTC

version.h の日付更新

[0759862458] wanabe 2020-08-08 07:08:47 UTC

パターンマッチの文法の命令列へのコンパイル時に popped の値によって putnil 命令の追加をしてスタックの深さ調整をするようにしています。

[6bc0c6c18b] wanabe 2020-08-08 12:00:51 UTC

同じくパターンマッチの文法の命令列へのコンパイル時 NODE_OR ノードをコンパイルする時に putnil 命令の追加をしてスタックの深さ調整をするようにしています。

[2bbb7c3d1f] wanabe 2020-08-08 12:48:35 UTC

同じくパターンマッチの文法の命令列へのコンパイル時に NODE_IF や NODE_UNLESS によるパターンをローカル変数に代入する文法のコンパイル時に putnil 命令の追加をしてスタックの深さ調整をするようにしています。

[d594078426] wanabe 2020-08-08 13:27:07 UTC

パターンマッチの文法の命令列へのコンパイル時に array pattern のコンパイル時に putnil 命令と pop 命令の追加をしてスタックの深さ調整をするようにしています。

[c866d6563f] wanabe 2020-08-08 13:34:08 UTC

パターンマッチの文法の命令列へのコンパイル時に NODE_IN のコンパイル時に複数の in があった場合に putnil 命令の追加をしてスタックの深さ調整をするようにしています。

[6c407b3668] wanabe 2020-08-08 14:14:30 UTC

パターンマッチの文法の命令列へのコンパイル時に in 節に複数のパターンがあった時? の putnil 命令の追加をしてスタックの深さ調整をするようにしています。

[691f10dd89] wanabe 2020-08-09 08:49:11 UTC

パターンマッチの文法の命令列へのコンパイル時にさらに in 節に複数の可変長の値のパターン("*")があった時のスタックの深さ調整をするようにしています。

[5c40c88a3e] wanabe 2020-08-09 08:58:01 UTC

パターンマッチの文法の命令列へのコンパイル時に hash pattern で putnil 命令と pop 命令の追加をしてスタックの深さ調整をするようにしています。