ruby-trunk-changes 2019-05-21

今日は reline の不具合修正、irb の --colorize/--nocolorize オプション追加、VM 起動時の load_path の shared 配列を操作していた不具合の修正などがありました。

[e83f10b368] Nobuyoshi Nakada 2019-05-20 21:58:06 +0900

snprintf(3) に %s で埋め込む文字列を書き込むバッファそのものにして末尾追記などをしていたのを避けるようにしています。未定義挙動なので保証がないみたいでした。

[583ecd5fc5] git 2019-05-20 22:08:27 +0900

e83f10b36865c7fc3f3e09deab679c4270310021 のインデントのタブを空白に展開。

[6592f5fcc8] aycabta 2019-05-21 01:10:09 +0900

9f49ff4965da8b05887912506dff7d0d20388550 の reline での vi モードでの編集時のカーソル移動の修正で、編集バッファが空の時は末尾にならざるを得ないのでバッファサイズによる分岐を追加しています。

[8023b3ce9d] git 2019-05-21 01:10:47 +0900

version.h の日付更新。

[b69dfdb4b3] aycabta 2019-05-21 01:49:27 +0900

標準添付ライブラリ reline の multiline editing 時のカーソルを上にうごかした時の再描画で行がひとつずれてたのを修正しているようです。

[34d7ec4e9b] aycabta 2019-05-21 01:50:07 +0900

標準添付ライブラリ reline の multiline editing で入力を確定する条件として空行があった時というのを追加? しているようです。

[df6a673ca5] aycabta 2019-05-21 08:10:36 +0900

同じく標準添付ライブラリ reline の multilin editing で上の行にスクロールする時の処理を修正?

[3a9008b984] aycabta 2019-05-21 08:57:21 +0900

ir のオプションに --colorize/--nocolorize を追加して色付けをオプションで on/off できるようにしています。

[29c81265c1] aycabta 2019-05-21 09:14:08 +0900

3a9008b9845db544d0788851f9527ce9f9f6bf4a の続きで irb で色付けする処理をオプションによる設定をみて行なうようにしています。

[be0d9c0d26] aycabta 2019-05-21 09:24:09 +0900

irb のテストスクリプトに明示的な require "irb" を追加しています。

[f9696ca6cb] Nobuyoshi Nakada 2019-05-21 13:49:31 +0900

pattern match のテストで文法のチェックのためヒアドキュメントでスクリプトを埋め込んで eval で評価してるところで、エディタを騙してインデントをさせるためにヒアドキュメントのマーカーに begin; と end; を使ってたのを普通の(?)マーカーを使うように書き直しています。古いバージョン向けらしいんですが <<~ は使っているのでそんなに古いの向けでないというか本体のテストだから実行バージョンは最新版のはずだし、ううーんどういうことだろう。

[ac00bdc8a8] Nobuyoshi Nakada 2019-05-21 14:17:51 +0900

環境変数 RUBY_DEBUG に gc_stress をセットしていると起動時に死ぬ不具合の修正。 rb_vm_t::load_path の配列に要素を追加する時に rb_ary_modify() を呼んでおくようにしています。共有している配列を直接編集してしまったために RGenGC 用の Write Barrier がきいてなくて必要なオブジェクトが解放されてしまうことがあったようです。 [ruby-core:92537] [Bug #15821]

[0b9a7b3528] Koichi Sasada 2019-05-21 15:02:54 +0900

f2606d6250d5f4b2e7d02b97567b74de6435864a で追加した shared array でないかのチェックつき RARRAY_ASET() である ARY_SET() を inline 関数による実装に変更して、freeze されていないかのチェックも追加しています。さらに array.c 内では常に ARY_SET() 経由で使うようにしています。

[7ff4abe650] Koichi Sasada 2019-05-21 07:45:21 +0100

rb_gc_compact() と gc_verify_compaction_references() の共通の後処理を gc_compact_after_gc() として切り出しています。

[8c004c7123] Koichi Sasada 2019-05-21 09:45:28 +0100

32e8b42852fc59a7064ec9ad642774c562b69c21 で GC.compact のテスト全体を実行しないようにしてたのを revert しています。

[6d93baaedd] aycabta 2019-05-21 17:46:41 +0900

標準添付ライブラリ reline で DEL キーに対応するようにしています。カーソルの位置の文字を消す(Backspace はカーソルの前を消す)キーですね。手元のキーボードだと delete キーで BS が送信されてる気がする。ファンクションキーとか使って DEL を発行できるのかな。

[3f6b5f447c] Koichi Sasada 2019-05-21 18:35:10 +0900

8c004c71235c5ee8b2d4846672788d3089f3e884 で revert した GC.compact のテスト全スキップですが再度入れなおしています。まだ CI 通らなかった模様。

[fd95ab44c6] aycabta 2019-05-21 18:37:35 +0900

irb で行末に "." があったら式の継続にするのをやめるようにしているようです。

[bb5b4f9044] aycabta 2019-05-21 18:45:00 +0900

標準添付ライブラリ reline の Reline::LineEditor で multi line の入力が完了した時にインスタンス変数 @cursor を 0 にリセットするようにしています。

[4613c4bd5c] aycabta 2019-05-21 18:55:31 +0900

irb の ripper で tokenize したトークンをみて文字列リテラル等を解析するメソッドで :"foo-bar" みたいな Symbol リテラルを判定する時の条件を修正しています。 大文字で始まる定数になる文字列もクオートなしで Symbol リテラルになれるのでそれを除外するように追加しています。