ruby-trunk-changes 2019-04-26

今日は主に irb の出力に色をつける対応や組込みIDの不具合修正、MSAN/ASAN で検出した不具合修正などがありました。

[2272cb00ea] Nobuyoshi Nakada 2019-04-25 20:33:18 +0900

parse.y で拡張ライブラリ ripper 向けの実装の時には internal_id() で組み込みのSymbolのIDは利用しないようにしています。

[790f6709ae] Kazuhiro NISHIYAMA 2019-04-25 23:46:47 +0900

NEWS ファイルに $, に nil 以外を設定すると警告が出るようになることを追記しています。

[94af6cd383] Takashi Kokubun 2019-04-26 00:47:39 +0900

標準添付ライブラリ irb に lib/irb/color.rb というファイルを追加して端末の色付けのためのライブラリを追加しています。そして Binding#irb で周辺のソースを表示する時に色付けして表示するようにしています。 https://github.com/ruby/ruby/pull/2150

[b55201dd09] Takashi Kokubun 2019-04-26 00:47:40 +0900

f6cd383f9dc3ae1204a5fba8f56ee7826cbce の続きで irb でコードを評価した結果のオブジェクトを inspect した結果の出力も色付けするようにしています。 https://github.com/ruby/ruby/pull/2150

[022cbb278f] Pocket7878 2019-04-26 00:47:42 +0900

94af6cd383f9dc3ae1204a5fba8f56ee7826cbce の再修正で色付けするかどうかを$stdoutが端末かどうかと環境変数TERMがあるかで判定していましたが、TERMの値が "dump" だった時は色付けしないようにしています。 https://github.com/ruby/ruby/pull/2150

[0c54d2e2c7] Takashi Kokubun 2019-04-26 00:47:43 +0900

irb の色付けのテストで色がつくように StringIO のインスタンスに特異メソッド tty? を追加したり環境変数TERMをセットしたりして実行するようにするhelperメソッド with_term を追加しています。 https://github.com/ruby/ruby/pull/2150

[e64bab5f77] Takashi Kokubun 2019-04-26 00:53:38 +0900

NEWS ファイルにirb の色付けについて追記しています。

[5fe99aefd3] Takashi Kokubun 2019-04-26 01:15:30 +0900

irb の色付けで正規表現リテラルも色付けするようにしています。

[2422316aea] Takashi Kokubun 2019-04-26 01:18:39 +0900

NEWS ファイルの irb の色付けについての記述に pry.gem を参考にした旨追記しています。

[0408b8b390] Takashi Kokubun 2019-04-26 01:43:14 +0900

irb の色付けで予約語 yield に色をつけるようにしています。

[5689c46457] git 2019-04-26 01:43:26 +0900

version.h の日付更新。

[54eac83b2a] Nobuyoshi Nakada 2019-04-26 09:33:48 +0900

2272cb00eadcbc48640c69fcd6a30e45a5977cd5 の続きと思われますがparse.yのinternal_id()でIDを採番する時にカウントアップしていくのでなくてRB_ID_SERIAL_MAXからカウントダウンしていくようにして、組み込みのSymbolのIDの領域に突き抜けるのを防いでいる? のだと思います。テストをみるとたくさんの無名ブロックパラメータを持つ Proc の parameters におかしな値が混じるという不具合の修正。
チケットの参照として [Bug #15768] のほうが書かれてるんですが、たぶんこれは [Bug #15786] の間違いじゃないかと。

[b6ebbee5d6] Urabe, Shyouhei 2019-04-26 15:59:40 +0900

vm_insnhelper.c の vm_callee_setup_arg() で警告除去のために明示的なキャスト追加。

[171a6ad1c1] Urabe, Shyouhei 2019-04-26 15:59:40 +0900

VM 命令の leaf フラグが正しいかチェックするための canary の不整合検出時のメッセージが空文字列になってたので disasm した命令を含めるようにしています。コメントアウトされた状態になってたのを戻しています。

[bdd1b300f8] Urabe, Shyouhei 2019-04-26 15:59:40 +0900

transient_heap.c の transient_heap_block_update_refs() で警告除去のため明示的キャストを追加。

[1f4204a762] Urabe, Shyouhei 2019-04-26 15:59:40 +0900

gc.c の newobj_init() でflags をチェックしているところは未初期化領域の参照になる可能性があり MSAN によるチェックと相性が悪いので、__hash_feature(memory_sanitizer) でチェックして有効な時は削るように preprocessor の分岐を追加しています。

[fa09acafde] Urabe, Shyouhei 2019-04-26 15:59:40 +0900

ASAN, MSAN が有効な時に vm_core.h で machine stack のサイズを大きめに定義しなおすようにしています。ASAN/MSAN 利用時には machine stack の消費量が増えるみたいです。

[572f2ddff6] Urabe, Shyouhei 2019-04-26 15:59:40 +0900

ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS() というマクロを追加して局所的に MSAN/ASAN を同時に無効にできるようにしています。

[6201a89b38] Urabe, Shyouhei 2019-04-26 15:59:40 +0900

572f2ddff64ddf12f2331ad77b72d2b0c9d9883c で定義した ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS() を使って transient_heap.c の transient_heap_ptr_check()、transient_heap_block_verify()、transient_heap_ptr() などをチェック対象外に指定しています。

[b11b26bcaf] Urabe, Shyouhei 2019-04-26 15:59:40 +0900

transient_heap.c の rb_transient_heap_alloc() で unpoison_memory_region() でアドレスのチェック対象に戻す領域をヘッダぶん減らしています。ptr は header を1つインクリメントした位置からのポインタなので size とすると末尾ポインタ1つぶんはみ出した領域まで指定してしまっていました。こういう指定自体のオーバーランもチェックされるんでしょうね、やっぱり。

[504ce460d2] Urabe, Shyouhei 2019-04-26 15:59:40 +0900

vsprintf.c の vfprintf() も ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS でメモリチェック対象外にしています。

[3ba485c0bf] Urabe, Shyouhei 2019-04-26 15:59:40 +0900

gc.c の mark_current_machine_context() で setjmp() で register の内容を退避する前に save_regs_gc_mark をゼロクリアしておくようにしています。

[f02760fc0a] Urabe, Shyouhei 2019-04-26 15:59:40 +0900

rb_autoload_load() で排他処理のために持つ構造体 struct autoload_state のメンバー result を Qfalse で初期化しておくようにしています。MSAN で未初期化領域の参照が検出されたようですね。

[40b5f2b85d] Urabe, Shyouhei 2019-04-26 15:59:40 +0900

enum.c の enum_sum() でも未初期化領域の参照を防ぐため struct enum_sum_memo のメンバーの明示的初期化を追加しています。

[1aa05fddd8] Urabe, Shyouhei 2019-04-26 15:59:40 +0900

b11b26bcaf711ad01d1a81943cca42f7ff40bfee と類似ですが transient_heap.c の clear_marked_index() でヘッダ部分のメモリの unpoison の呼び出しが漏れてたので追加しています。

[aa190abe20] Urabe, Shyouhei 2019-04-26 15:59:40 +0900

obj_ivar_heap_alloc() の呼び出し結果の NULL チェックしているところがありましたが、NULL にはなりえないということで分岐を消してかわりに assert() を追加しています。

[2a863d4bab] Urabe, Shyouhei 2019-04-26 15:59:40 +0900

VM 命令の leaf フラグをチェックする vm_check_canary() で reg_cfp がまだ VM スタックの底を指してる時に不正な領域を参照してしまうのを防ぐように先に return するようにしています。

[7b7043e5da] Urabe, Shyouhei 2019-04-26 15:59:40 +0900

Kernel#` (バッククオートでくくってコマンド実行するやつ)で rb_io_close() を呼んだ後で解放済みの領域を参照してしまうのを防ぐため IO オブジェクトの fptr を NULL にクリアしています。

[2a49a47956] Urabe, Shyouhei 2019-04-26 15:59:40 +0900

.travis.yml の MSAN/ASAN つきビルド時の cflags などに -fPIC を追加しています。また openssl/readline や libgmp (Bignum の実装に使うやつ)などを利用しないように configure の引数を設定するようにしています。

[3175c54cb6] Urabe, Shyouhei 2019-04-26 15:59:40 +0900

.travis.yml に各種チェックやデバッグモードを有効にしたビルドを追加しています。

[d700a8a0eb] Urabe, Shyouhei 2019-04-26 15:59:40 +0900

.travis.yml の clang を使ったビルドに clang-8 を使うようにしています。clang-7 には memory sanitizer の誤検出があるらしいとのこと。

[267ac0624d] Urabe, Shyouhei 2019-04-26 15:59:40 +0900

.travis.yml の make-test-only というビルドで環境変数 GEMS_FOR_TEST を空にして bundled gem のテストをスキップさせるようにしています。

[0523b02f48] Urabe, Shyouhei 2019-04-26 15:59:40 +0900

267ac0624dad6be5c3f4760f691258ae7dc83861 の変更では GEMS_FOR_TEST のクリアがうまくできなかった(YAML のエントリで alias 使うと項目ごとに上書きになるので配列の内容をマージしてくれない)ので必要な場所に設定をばらまくようにしています。

[1cef6a0c0c] Kazuhiro NISHIYAMA 2019-04-26 17:47:23 +0900

r67347 あたりからの Travis-CI の Permission Denied のエラーのデバッグにさらに miniruby を使って mtime と ctime を表示するようにしています。numbered parameter を使ってますね。

[a93f555699] Takashi Kokubun 2019-04-26 18:18:09 +0900

tool/sync_default_gems.rb で ../ に対象のディレクトリがない場合にエラーにするようにしています。

[a6805771ec] Takashi Kokubun 2019-04-26 18:25:56 +0900

make sync-default-gems というターゲットを追加して tool/sync_default_gems.rb を実行できるようにしています。

[52cfb17086] Takashi Kokubun 2019-04-26 18:28:57 +0900

default gem としての upstream から irb を同期しています。色付けのまわりで若干修正されてますね。

[6669c966d2] Takashi Kokubun 2019-04-26 18:42:51 +0900

irb の評価結果の色付けで Class のインスタンスも色をつけるようにしています。

[a429b3601f] Takashi Kokubun 2019-04-26 18:46:43 +0900

6669c966d2744f21315047d1725ad4494d15b8ba を revert しています。テストが失敗したとのこと。

ruby-trunk-changes 2019-04-25

今日は主に make で GitHub の Pull Request からのチェックアウトやマージができるようにするルールの追加などの git 化対応の続きなどがありました。

6061aa0ac1 Takashi Kokubun 2019-04-25 00:12:13 +0900

daff4cbd6c7d6be07ae094bda45bca076b37a375 の make merge-github で GPG鍵による署名も可能ならするように追加しています。

dd5b6c71c6 Kazuhiro NISHIYAMA 2019-04-25 00:52:16 +0900

test/ruby/test_settracefunc.rb のコメントの typo 修正。

68e3f8192b Masatoshi SEKI 2019-04-25 01:08:54 +0900

test/drb/test_drbobject.rb という DRbObject のテストファイルを追加。
DRb.to_obj による同一性チェックのテストを追加しているようです。

7d2cb60e48 git 2019-04-25 01:09:06 +0900

version.h の日付更新。

9bfc185a0d Kouhei Sutou 2019-04-25 05:28:56 +0900

gems/bundled_gems の test-unit のバージョンを 3.3.2 に更新。

99084f5401 Lourens Naudé 2019-04-25 12:37:29 +0900

ISeq のコンパイル時に rb_iseq_data_t::catch_table_ary を nil を含む配列で初期化していたのを nil にしておいて必要になったら ADD_CATCH_ENTRY() で格納するようにしています。 https://github.com/ruby/ruby/pull/2119

d0ba4abf1a Nobuyoshi Nakada 2019-04-25 13:22:06 +0900

symbol.h で RB_ID_SERIAL_MAX という定数を定義しています。 ID から RUBY_ID_SCOPE_SHIFT のぶんを削ったサイズまたは uint32 の上限をセットしています。

09ce223b0b Nobuyoshi Nakada 2019-04-25 15:03:54 +0900

defs/gmake.mk の make merge-github で git コマンドのブランチ名に1つ前に居たブランチを指す(たぶん) "-" を使うのをやめてgitコマンドを使って取得するようにしています。

116f91ab50 Nobuyoshi Nakada 2019-04-25 15:33:05 +0900

defs/gmake.mk の merge-github で git worktree のために作るディレクトリをソースディレクトリ内に作るようにしています。
なんかまえ srcdir には書き込みパーミッションがない状態でのビルドができないっていうチケットがあったような気がするのでこれもそのケースだと失敗しそう。

6de9128fe9 Takashi Kokubun 2019-04-25 18:05:52 +0900

defs/gmake.mk に checkout-github というターゲットも追加して Pull Request のブランチをチェックアウトできるようにしています。

44bb429bb1 Nobuyoshi Nakada 2019-04-25 18:27:16 +0900

defs/gmake.mk の fetch-github と merge-github で git config の結果を変数に格納しておいて使うようにしています。makeの変数と起動するシェルの変数でこんがらがる。

70adfdcd8d Nobuyoshi Nakada 2019-04-25 18:29:58 +0900

さらに fetch-github-*, pr-* みたいな prefix で任意の Pull Request をマージできるターゲットも作っています。

b2e92bfd9f Takashi Kokubun 2019-04-25 18:54:44 +0900

70adfdcd8de3296e9015338216073e8144dbea04 で call コマンド(?)の引数の間に空白が入ってるとまずいみたいなので空白を消しています。

57225dc07a Takashi Kokubun 2019-04-25 19:25:03 +0900

make help に checkout-gibhub と merge-github を表示するようにしています。

3581a64239 Takashi Kokubun 2019-04-25 19:42:10 +0900

make merge-github 内で git worktree のためにディレクトリを掘る時に mktemp -p を使ってましたが、BSD 系の mktemp にこのオプションがないそうで -d オプションに変更しています。

c9715eb494 Kazuhiro NISHIYAMA 2019-04-25 20:02:49 +0900

r67347 以降の一連の Travis-CI で並列で動かしてると Permission Denied になる問題のデバッグの続きで ../ext と ../ext/bigdecimal のモードも表示するようにしています。build ってディレクトリを掘ってそこでビルドしているのでソースディレクトリのサブディレクトリをみるようにしてるわけですね。

ruby-trunk-changes 2019-04-24

今日は GC.compact 関連の不具合修正(?)や RUBY_DEBUG=gc_stress を設定してた時の起動中の SEGV 対策として起動時に GC しないようにする変更などがありました。

f2cd4f4cd0 aycabta 2019-04-23 20:08:02 +0900

標準添付ライブラリ reline 追加と irb の reline 対応。なんですが、これAuthorはaycabtaさんだけどCommiterはnobuで、Pull Requestのブランチのコミットをうっかり混ぜてpushしてしまったみたいです。

89271d4a37 Nobuyoshi Nakada 2019-04-23 20:27:24 +0900

parse.y のインデントの調整のみ。

f4f66bd11c Nobuyoshi Nakada 2019-04-23 21:55:29 +0900

誤って push してしまった f2cd4f4cd0a1e352fcc48a216127beaeda2b2399 を revert しています。

14dd8d6b37 Hiroshi SHIBATA 2019-04-23 22:26:40 +0900

NEWS ファイルに公式の git リポジトリのURLを追記しています。

31cf13060c Lourens Naudé 2019-04-24 00:40:17 +0900

onigmo.h の構造体 struct re_registers のメンバー history_root を USE_CAPTURE_HISTORY が定義されている時だけ宣言するようにしています。

9629f4c051 git 2019-04-24 00:40:29 +0900

version.h の日付更新。

bc8e54911d Takashi Kokubun 2019-04-24 00:41:24 +0900

.travis.yml で Travis-CI 上での macOS のテストで GC.compact のテストを別コマンドに分離するようにしています。

82ef172a8c Takashi Kokubun 2019-04-24 01:10:14 +0900

bc8e54911db505d9e1776673a86e956c7d7e3b89 の .travis.yml の分岐の書きかたが変数 TEST_ALL_ISOLATED_TESTS が未定義だとコマンドのエラーと解釈されてたので if を使って書きなおしています。

cf930985da Lourens Naudé 2019-04-24 02:02:05 +0900

include/ruby/re.h の構造体 struct rmatch の char_offset_updated というメンバーを削除して char_offset_num_allocated が正になってるかどうかのチェックで代替するようにしています。

75061f46ae Aaron Patterson 2019-04-23 14:21:15 -0700

objid_hash() で LLP64 環境向けにポインタのサイズが long と long long どちらと一致するかで数値の変換マクロ(NUM2LONG/NUM2LL)どちらを使うかをpreprocessorで分岐するようにしています。うーん、でもこれってこれだけではだめなんではなかったっけ。よく憶えていないけどこれでいいんだったらもう直されているような。

19d454a957 Aaron Patterson 2019-04-23 15:26:21 -0700

拡張ライブラリ psych で例外クラスを static 変数に格納するのをやめて毎回定数参照するようにしています。

2ef6673708 Koichi Sasada 2019-04-24 09:30:07 +0900

defs/gmake.mk の update-src で更新後に表示する commit hash を先頭10文字までに切り詰めるようにしています。

f1a52d96a5 Nobuyoshi Nakada 2019-04-24 13:02:01 +0900

環境変数 RUBY_DEBUG に gc_stress を指定した時に起動時のheapの初期化の処理が終わってから有効になるようにしています。 [ruby-core:92376] [Bug #15784]

1613917ae6 Nobuyoshi Nakada 2019-04-24 17:34:21 +0900

f1a52d96a59c63d46cb23af60cdcaf38e30e0512 の再修正で、起動中の GC 全体を止めてたのを RUBY_DEBUG=gc_stress の指定だけを off にするようにしているようです。

2642f22050 Kazuhiro NISHIYAMA 2019-04-24 18:19:44 +0900

r67347、r67376 や r67543 などで .travis.yml で並列ビルドするとたまに Permission Denied でエラーになる件のデバッグで git status の結果表示も追加しています。
コミットの内容とは関係ないですが古いコミットの参照はリビジョン番号にしようかなと。日記内でそっちで書いてあるので検索もそちらでないといけないし。

daff4cbd6c Takashi Kokubun 2019-04-24 22:48:21 +0900

def/gmake.mk に fetch-github と merge-github というターゲットを追加して、GitHub 上の Pull Request をマージしてコミットするためのコマンド群をまとめています。

ruby-trunk-changes 2019-04-23

今日は rubyリポジトリの trunk が git がメインになったので、その関連の変更(のテストのためのドキュメントなどの無難な変更)が主でした。あと GC.compact の関連の修正や RUBY_REVISION を commit hash の文字列にする変更などがありました。
リポジトリが git になったのでリビジョン番号やアカウント名などもなくなったので、各エントリの見出しやタイトルもちょっと変わっています。

e949c084b5 Takashi Kokubun 2019-04-22 10:06:03 +0900

4c570abf77 の README.md のリポジトリの記述の順番変更を README.ja.md にも適用しています。

b26a7c8d86 svn 2019-04-22 10:06:50 +0900

e949c084b5 の行末の空白削除。

beaddd1d32 NAKAMURA Usaku 2019-04-22 11:33:56 +0900

win32/README.win32 の nmake up のコメントから svn のサポートについての記述削除。またサンプルで test のかわりに exam を使うようにしています。

6013e41a7b Kazuhiro NISHIYAMA 2019-04-22 11:39:08 +0900

.travis.yml から 2.3 でのビルドを消しています。

f005ccc771 Shugo Maeda 2019-04-22 17:15:49 +0900

Comparable の各種メソッドの rdoc 用コメントで <=> メソッドの戻り値の扱いについてより正確に記述するようにしています。 [ruby-core:91650] [Misc #15630]

ae3f38dc53 Kazuhiro NISHIYAMA 2019-04-22 19:02:17 +0900

doc/contributing.rdoc のリポジトリについての記述を git メインに更新しています。

184447d91c SHIBATA Hiroshi 2019-04-22 19:37:22 +0900

ViewVC も停止されたみたいなのでその URL を含んだ include/ruby/vm.h のコメントの MVM ブランチについての記述を削除しています。

6a2c8e46f6 SHIBATA Hiroshi 2019-04-22 20:00:32 +0900

test/minitest/test_minitest_unit.rb の revsion の参照も ViewVC から GitHub に変更しています。

c697bade0f SHIBATA Hiroshi 2019-04-22 20:01:07 +0900

.gitignore に拡張子 .vscode のファイルを追加しています。

dd0b516399 Kazuhiro NISHIYAMA 2019-04-22 21:02:28 +0900

doc/contributing.rdoc のビルドに必要なライブラリなどの記述から標準添付からtkが外れたのでTcl/Tkの記述を消しています。

5da52d1210 Takashi Kokubun 2019-04-22 21:27:34 +0900

version.h の RUBY_REVISION を commit hash の先頭10桁の文字列として定義するように変更しています。
tool/file2lastrev.rb で書き変えるんですが、これ merger.rb から trunk のを呼ばれるとまずいな、と思いましたが merger.rb が file2lastrev.rb を呼ぶ時はカレントディレクトリからの相対パスで呼ぶので安定版ブランチからは古いのを呼ぶから大丈夫そうですね。

87261cf59f Kazuhiro NISHIYAMA 2019-04-22 21:45:13 +0900

5da52d1210 で tool/vcs.rb のコミットログ取得のコマンドでHEADだけでなく複数のコミットに対応するようにしています。

4cd67a848a Takashi Kokubun 2019-04-22 22:00:48 +0900

5da52d1210 の RUBY_REVISION の変更で rubyspec がエラーになってたので spec を変更しています。

8c689e216f Kazuhiro NISHIYAMA 2019-04-22 22:45:32 +0900

Array#union の rdoc 用コメントの call-seq で戻り値がコピーであることがわかるようにレシーバと別の名前にしています。 https://github.com/ruby/ruby/pull/2084

6fbf4e22c8 Kazuhiro NISHIYAMA 2019-04-22 23:11:32 +0900

Bindingクラスのrdoc用コメントにset_trace_funcについて書かれてる部分にTracePointへの言及も追記。もうset_trace_funcのほうは消しても良さそう。

98ee63693d Aaron Patterson 2019-04-22 18:19:40 -0700

GC.compact 対応で iseq.c の Symbol を VALUE 型の変数に格納していたのをやめて ID で保持するようにしています。
GC.compact で移動しても変数からの参照が移動できないので不正アクセスになるということみたいです。
RubyVM::InstructionSequence#to_a でダンプする時などその時点でオブジェクト化するようにしています。

a8d4dc287f git 2019-04-23 10:19:47 +0900

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

a9b57862bd git 2019-04-23 10:19:53 +0900

version.h の日付更新。

9cdb736672 Nobuyoshi Nakada 2019-04-23 10:24:31 +0900

parse.y のセミコロンが抜けてたのを追加しています。

660c071659 Urabe, Shyouhei 2019-04-23 10:27:44 +0900

tool/ruby_vm/views/_copyright.erb のコメントの重複した空白の除去やtypo修正。

ea520ca927 Aaron Patterson 2019-04-22 20:08:01 -0700

これも GC.compact 対応で rb_define_class() や rb_define_module() で定義した Class/Module のオブジェクトを rb_vm_t::defined_module_hash で Hash で管理していたのを ID をキーにした st_table で管理するようにしています。コミットログによると Symbol で管理してたので衝突時に参照が消えてることがあったようです。そうすると GC の mark 漏れが置きそうなものですが、たいていそういうのは static 変数にも格納していて、mark の root になっていたので問題が表出していなかったのでしょう。

ae07b66aaa Seiei Miyagi 2019-04-23 12:16:14 +0900

lambdaのキーワード引数のデフォルト値に @1 などのデフォルトブロックパラメーターを書くことができてしまっていたのを修正して SyntaxError にしています。

6ca9e7cc07 Seiei Miyagi 2019-04-23 12:16:15 +0900

ae07b66aaa092c59ac9d544c9b582712290dc357 と同様に lambda の省略可能引数のデフォルト値にもデフォルトブロックパラメーターが書けてしまってたのを SyntaxError にするように修正しています。

5a58318a90 Aaron Patterson 2019-04-22 20:33:16 -0700

拡張ライブラリ objspace の type2sym() で GC.compact で追加した T_MOVED に対応しています。

e50e60b96a git 2019-04-23 12:34:10 +0900

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

2e1ac22089 Aaron Patterson 2019-04-22 20:39:03 -0700

78d3e4396d3c2ca53875fdbc9a24032d6eebf4f6 でうっかり gc_verify_compaction_references() に rb_gc_disable() を追加したままコミットしてしまっていたのを削っています。

4946c3e4b5 Kazuhiro NISHIYAMA 2019-04-23 14:09:45 +0900

.gitattributes に tool/format-release の diff のタイプについて追加しています。こんな指定できるのか。

0d41adf6e2 Nobuyoshi Nakada 2019-04-23 14:12:36 +0900

complex.c の f_divide() で real/imag のそれぞれに rb_rational_canonicalize() 呼んで引数にしてたところを一旦ローカル変数に受けとるようにするリファクタリング

18eb9e5855 Nobuyoshi Nakada 2019-04-23 15:13:36 +0900

rubyspec の RUBY_REVISION のテストが仕様変更でこけるので 2.7 を除外するために追加した ruby_version_is の guard の書きかたをちょっと変更しています。
これって実際違いあるんだっけ。

2fb83a0af7 Nobuyoshi Nakada 2019-04-23 15:39:36 +0900

tool/vcs.rb で GIT クラスから git-svn で操作するメソッドを GITSVN というクラスに切り出しています。

2ae5f6f97c Nobuyoshi Nakada 2019-04-23 15:43:51 +0900

2fb83a0af7a49788e80c55fd324dfa8e046cd9d9 の続きで tool/vcs.rb の GIT クラスのメソッド commit の実装を追加しています。
git svn dcommmit ではなく単に git push するようにしています。 公式リポジトリの git 化の対応ですね。

87cf45a512 Kazuhiro NISHIYAMA 2019-04-23 16:50:15 +0900

configure.ac のコメントの typo 修正。

ruby-trunk-changes r67694 - r67701

今日はバックポート用のツールの git 対応などがありました。
そしてソースコードの変更ではありませんが、rubyリポジトリの trunk ブランチへのコミットが svn.ruby-lang.org ではなく git.ruby-lang.org に対して行なわれるようになりました。
そのため今日は svn に対して行なわれたコミットまでをエントリにしています。今日はこの後もう少しコミットがありますが、そちらは明日からのエントリに回します。明日からは ruby trunk changes のエントリの URL やタイトルのフォーマットなども少し変更になると思います。

k0kubun: r67694 2019-04-21 21:03:39 +0900

tool/merger.rb で cgit からパッチを取得するようにした時に差分からヘッダ部分を切り出すのに使った正規表現のマッチが失敗した時にもエラーにならないように safe guard 演算子を使うようにしています。

k0kubun: r67695 2019-04-21 21:26:06 +0900

tool/generate-backport-changelog.rb という backport 時の ChangeLog の conflict を解消して上に追記するためのスクリプトがあったのですが、もう不要になったので削除しています。

k0kubun: r67696 2019-04-21 22:05:32 +0900

tool/redmine-backporter.rb の未使用のメソッドを削除。端末上での表示のためのものっぽいけど最初から使われてなかったらしい。

k0kubun: r67697 2019-04-21 23:24:38 +0900

tool/redmine-backporter.rb で backport 用の merger.rb のコマンドラインを git の commit hash で生成するようにしています。また rel コマンドで commit hash での指定可能にしています(svn の revision もまだ可能)

kazu: r67698 2019-04-22 00:04:06 +0900

NEWS ファイルの typo 修正。

svn: r67699 2019-04-22 00:04:07 +0900

version.h の日付更新。

k0kubun: r67700 2019-04-22 09:55:19 +0900

README.md のリポジトリについての説明を git と svn の順番を入れ替えています。

svn: r67701 2019-04-22 09:55:20 +0900

r67700 の行末の空白除去。

ruby-trunk-changes r67650 - r67693

今日は GC.compact 関連のテストの修正というか skip やパターンマッチのテストケース追加、reline の再修正からの一旦 revert、tool/merger.rb の trunk の git リポジトリ対応などがありました。

tenderlove: r67650 2019-04-21 07:25:59 +0900

GC.compact で object_id の衝突を検出するテストですが Travis-CI と Wercker だけでなく常に skip するようにしています。

k0kubun: r67651 2019-04-21 10:06:25 +0900

README.md を README.ja.md のレイアウトとあわせるように修正しています。 svn hook のテストのために無難なコミットをしたみたいです。

svn: r67652 2019-04-21 10:39:09 +0900

version.h の日付更新。

ktsj: r67653 2019-04-21 11:18:28 +0900

compile.c のパターンマッチの構文をコンパイルする iseq_compile_pattern_each() で Array pattern の * で可変長の末尾を受容するパターンの命令を出力するところで post_args_num が正の時しか通らないところで use_rest_num のチェックは冗長だったので(おそらく)削っています。

nobu: r67654 2019-04-21 11:33:14 +0900

reline のテストで require してる名前を "test-unit" から test/unit" に変更しています。 gem のバージョンの test-unit でも require する時の名前は test/unit ですよね確か。

svn: r67655 2019-04-21 11:33:15 +0900

r67654 でさわったファイルの svn property を設定。

ktsj: r67656 2019-04-21 11:43:31 +0900

パターンマッチの array pattern のテストにテストケースを追加しています。

kazu: r67657 2019-04-21 11:51:03 +0900

gc.c の冗長なキャストを削除しています。

k0kubun: r67658 2019-04-21 11:58:10 +0900

tool/merger.rb のコマンド引数にはふだん使ってない記法があったので、削っています。 usa さんも使ったことないって言っていたのでたぶん今使っている人はいないはず。 trunk の git 移行に向けての布石で余計な仕様は削ろうという意図です。 https://github.com/ruby/ruby/pull/2136

k0kubun: r67659 2019-04-21 11:58:10 +0900

同じく tool/merger.rb で revision の指定に 1234:1235 とか 1234-1235 みたいな範囲指定ができるのですが、git の commit hash 指定だと(できなくはないかもしれないけど)あんまり自明ではなさそうだなということで削っています。こっちは最近でも使うことはあるかとは思いますが、通常は tool/redmine-backporter.rb で生成されたコマンドラインをそのまま使うことが多いので連続してても1つずつ指定することのほうが多いと思うので。 https://github.com/ruby/ruby/pull/2136

ktsj: r67660 2019-04-21 12:11:38 +0900

パターンマッチングのテストにローカル変数の値を展開して Value match する記法のテストを追加しています。

k0kubun: r67661 2019-04-21 12:12:05 +0900

common.mk の tool/ruby_vm に関する依存関係記載についての TODO コメントを削除しています。

nobu: r67662 2019-04-21 12:30:38 +0900

make update-src でローカルのリポジトリ working copy が git の時に最新の commit hash を表示するようにしています。

nobu: r67663 2019-04-21 12:30:48 +0900

reline のテストで RELINE_TEST_ENCODING というトップレベルの定数が環境変数 RELINE_TEST_ENCODING が未定義だと定数自体定義されななったので、定義するけど内容が nil という状態になるようにしています。

hsbt: r67664 2019-04-21 12:31:34 +0900

doc/maintainer.rdoc から ubygems.rb (-r オプションとくみあわせることで -rubygemsrubygems を require できるというみためのための wrapper ライブラリ)についてのエントリを削除しています。

k0kubun: r67665 2019-04-21 12:32:03 +0900

Windows 環境(というか VC コンパイラ?)での警告の抑制のため構造体 struct compile_status のメンバーにつけてた const 修飾子を削除しています。 https://ci.appveyor.com/project/ruby/ruby/builds/23995093/job/qo728n1uorepkx16

usa: r67666 2019-04-21 12:33:05 +0900

r67665 とも関連してそうですが const を外した struct compile_status::inlined_iseqs を memset(3) に渡す時に明示的な void* へのキャストを追加しています。

k0kubun: r67667 2019-04-21 12:35:07 +0900

r67665 のほうは revert しています。 r67666 のほうがより良い修正ということですね。

nobu: r67668 2019-04-21 12:38:52 +0900

reline のテストで setup で cwd を保存しておいて teardown で元に戻すようにしています。

svn: r67669 2019-04-21 12:38:53 +0900

r67668 でいじったファイルの svn property 設定。

ko1: r67670 2019-04-21 12:46:25 +0900

reline のテストで $stdout を StringIO にすりかえてるところで元に戻すのを ensure にしてなかったので例外発生するとそのままになる状態だったのを修正しています。

aycabta: r67671 2019-04-21 12:51:26 +0900

reline のテストがたぶん CI で通らなかったかなにかで一旦全削除しています。

ktsj: r67672 2019-04-21 12:56:42 +0900

パターンマッチの Variable match で多値代入っぽいのがおきた時に同じ変数を複数指定した時の評価順番のテストを追加しています。

k0kubun: r67673 2019-04-21 13:02:24 +0900

README.md に公式の git リポジトリの URL について追記しています。 svn hook のテスト用コミットとのこと。

usa: r67674 2019-04-21 13:52:38 +0900

win32/Makefile.sub で VM 命令の定義からソース生成するコマンドに V=1 で表示するようにするための $$(Q) を先頭につけるようにしています。

usa: r67675 2019-04-21 13:53:44 +0900

r67674 で余分なコメントアウトも入ってしまったのでその部分 revert しています。

kazu: r67676 2019-04-21 13:54:04 +0900

r67673 で README.md に cgit の URL が追記されましたが、レイテンシが小さいと書いてあったけどそれは日本からのアクセスの場合なのでそのように追記しています。

naruse: r67677 2019-04-21 14:37:11 +0900

rb_hash_bulk_insert() を公開 API とするらしく prototype 宣言を internal.h から include/ruby/intern.h に移動しています。

naruse: r67678 2019-04-21 14:48:35 +0900

irb のテストの警告抑制のための $VERBOSE 設定や子プロセス起動する時のコマンドラインオプションの調整。

naruse: r67679 2019-04-21 14:48:35 +0900

標準添付ライブラリ irb でメソッド再定義の警告抑制のため remove_method で一旦定義削除するようにしています。

nobu: r67680 2019-04-21 15:08:00 +0900

r67678 でいじっていた irb のテストでさらに assert_in_out_err の戻り値を利用していなかったので変数への代入を削除しています。

aycabta: r67681 2019-04-21 16:08:26 +0900

r67671 で削除された reline のテストが復活しています。

k0kubun: r67682 2019-04-21 16:08:32 +0900

r67673 および r67676 で README.md に追記した cgit の URL について README.ja.md にも追記しています。

k0kubun: r67683 2019-04-21 16:12:51 +0900

r67682 の cgit についての日本語版 README.ja.md の記述をちょっと変更しています。

k0kubun: r67684 2019-04-21 16:14:59 +0900

README.ja.md の末尾についてた作成日時を削っています。

k0kubun: r67685 2019-04-21 16:17:35 +0900

README.ja.md で半角のカンマが文中に使われてるところがあったのを他とそろえるため全角の文字に変更しています。

k0kubun: r67686 2019-04-21 16:21:55 +0900

README.ja.md の長くなってた行に改行を追加しています。

k0kubun: r67687 2019-04-21 16:27:52 +0900

逆に README.md の不要な改行を削っています。

aycabta: r67688 2019-04-21 16:37:34 +0900

標準添付ライブラリ reline の upstream からのマージ。 テストの helper の require を require_relative に修正する変更再適用しています。

k0kubun: r67689 2019-04-21 17:19:48 +0900

tool/merger.rb の r67569 で廃止した revision の記法を help メッセージから削除しています。

k0kubun: r67690 2019-04-21 17:34:37 +0900

r67677 で include/ruby/intern.h に宣言を移動して公開した rb_hash_bulk_insert() を MJIT 用に precompiled header で公開するためつけてた関数の定義につけてた MJIT_FUNC_EXPORTED を外しています。

aycabta: r67691 2019-04-21 18:13:49 +0900

r67645 の reline の導入と関連する irb の変更を一旦 revert しています。

k0kubun: r67692 2019-04-21 19:01:44 +0900

tool/merger.rb で ChangeLog の conflict を特別に処理している部分は現在メンテナンスされている ruby_2_4 からはもう ChangeLog ファイルは存在していないので削って、ChangeLog の変更をコミットログに追加するのも(最近のコミットではそもそも ChangeLog の編集もないはずなので)削っています。

k0kubun: r67693 2019-04-21 20:49:11 +0900

tool/merger.rb で revision の指定に commit hash も受け付けてその場合 git.ruby-lang.org からパッチを取得して適用するように対応しています。

ruby-trunk-changes r67619 - r67649

今日は readline に互換なライブラリ reline の追加と irb でこれを利用するようにする変更や RubyVM::AbstractSyntaxTree#children の戻り値の一部に種類をはっきりさせるための Symbol の追加などがありました。

k0kubun: r67619 2019-04-19 22:57:21 +0900

README.ja.md に README.md にはあった git でのブランチ一覧の取得方法について追記しています。

tenderlove: r67620 2019-04-20 10:19:47 +0900

3度目の正直なるか。 GC.compact の追加再度コミットされました。T_MODULE/T_CLASS などの super まわりが違うくらいかなぁ。

svn: r67621 2019-04-20 10:20:08 +0900

r67620 の新規追加ファイルの svn property 設定。

svn: r67622 2019-04-20 10:20:09 +0900

version.h の日付更新。

tenderlove: r67623 2019-04-20 10:59:34 +0900

r67620 の GC.compact のテストでオブジェクトの保守的 mark のためにオブジェクトが移動できなくなるのを抑えようとしてオブジェクト生成するメソッドで再帰呼び出しを何度か繰り返してスタックを埋めておくようにしています。マシンスタックを深くしてスタックからの偽 mark を減らそうとしてるのかなぁと思ったのですが、このメソッド Ruby だから C のマシンスタックは使わないよなぁ多分。

tenderlove: r67624 2019-04-20 11:40:41 +0900

r67620 の GC.compact でのオブジェクトの移動時に RubyVM::InstructionSequence オブジェクトが移動すると MJIT の worker にも影響するので mjit.c に mjit_update_references() っていう関数を追加して移動時に MJIT worker にも追随させるようにしています。ちなみに CRITICAL_SECTION_START()/CRITICAL_SECTION_FIINSH() に渡してる関数名がコピー元のままになってるっぽい。

tenderlove: r67625 2019-04-20 12:00:08 +0900

r67624 の再修正。 mjit_update_references() で明示的なキャストを追加して警告抑制しています。

tenderlove: r67626 2019-04-20 12:00:49 +0900

r67620 で追加されたテストで slot 再利用を検出するのに Array#include? を使ってたところを Array#index でチェックするように変更しています。ううむ、これはなんでだろ。

yui-knk: r67627 2019-04-20 12:25:36 +0900

RubyVM::AbstractSyntaxTree#children が返す配列に NODE が NODE_MASGN、NODE_CVASGN、NODE_POSTARG などの時に最後の要素に種類を表す Symbol を含めるようにしています。 Pattern Match で受け取って分解しやすくするためだそうです。

k0kubun: r67628 2019-04-20 12:29:20 +0900

r67624 で追加した mjit_update_references() で stale_units のリストから参照されている iseq も移動に追随させるようにしています。

ktsj: r67629 2019-04-20 12:37:22 +0900

r67586 で導入された pattern match で Array Pattern のマッチ時の AST に NODE_BEGIN を使いまわしていたところを NODE_SPECIAL_NO_NAME_REST という NODE を使うようにリファクタリング? しています。

tenderlove: r67630 2019-04-20 13:13:29 +0900

r67620 の GC.compact のテストに assertion をチェックしてもっと細かくチェックするようにしています。

k0kubun: r67631 2019-04-20 13:50:21 +0900

r67628 と同様に mjit_free_iseq() でも stale_units というリストに入っている ISeq も考慮するように追加修正しています。

nobu: r67632 2019-04-20 14:00:43 +0900

Time#floor というメソッドを追加して、秒の小数点以下の精度を指定した桁(省略されたら秒単位)で切り捨てる丸めを行なった Time オブジェクトを返せるようにしています。 https://github.com/ruby/ruby/pull/2092 [ruby-core:91739] [Feature #15653]

svn: r67633 2019-04-20 14:00:45 +0900

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

svn: r67634 2019-04-20 14:00:45 +0900

r67632 の新規追加ファイルの svn property の設定。

tenderlove: r67635 2019-04-20 14:11:37 +0900

r67620 の GC.compact の追加修正で gc_mark_maybe_() という関数で渡されたオブジェクトの型が T_MOVED と T_ZOMBIE の時は gc_pin() を呼んで移動しないように指定するようにしています。 T_MOVED はそこにあったオブジェクトが移動したって意味なので当然ですね。 T_ZOMBIE は finalizer 待ちのオブジェクトでもうすぐ消えるから、かな?

k0kubun: r67636 2019-04-20 14:44:47 +0900

r67631 が CI でエラーになってるのか、mjit.c の free_list() にデバッグ用に? stale_units リストから要素を削除する時に free_unit() 関数内の iseq メンバーを触る処理を省いた処理を行なうようにしてみています。

k0kubun: r67637 2019-04-20 14:45:56 +0900

でやはりデバッグ用だったみたいなので r67636 は revert されています。

k0kubun: r67638 2019-04-20 14:48:22 +0900

GC.compact でオブジェクトを移動したら MJIT で JIT コンパイルしたコード内に含まれるポインタが不正になる可能性があるので全てキャンセルすることができるようにする仕組みを導入している(TracePoint で trace が有効になった時と同じ)らしい。 mjit_call_p を false にしてます。mjit_call_p はこれまで mjit_finish() で false に落とされていて、再度 true にするパスがなさそうなので、一度 GC.compact するとそれ以降ずっと MJIT 無効になるのかな。

k0kubun: r67639 2019-04-20 14:50:19 +0900

r67636 でデバッグのため? 入れた mjit.c の free_list() での stale_units の特別扱いを r67637 で revert してましたが、再度適用しています。 デバッグ用だから消したんじゃなくて r67638 のテストを先にしたかったので一旦 revert したみたいです。

tenderlove: r67640 2019-04-20 15:08:54 +0900

r67635 の gc_mark_maybe_() での T_MOVED と T_ZOMBIE の gc_pin() 呼び出しを revert して、かわりに gc_ref_update() でオブジェクトを確保する heap の page 単位の has_remembered_objects というフラグの更新を行なうように修正しています。

k0kubun: r67641 2019-04-20 15:54:41 +0900

GC.compact のテストの一部を Travis-CI の macOS および Wercker では skip するようにしています。

k0kubun: r67642 2019-04-20 16:16:11 +0900

r67641 で環境変数 WERCKER_STEP_ID の有無で Wercker での実行か判定しようとしたけどうまくいかなかったようなので RubyVM::MJIT.enabled? だったらとにかく skip するようにしています。

k0kubun: r67643 2019-04-20 16:37:29 +0900

mjit.c の mjit_wait_call() という関数に rb_ の prefix を追加する改名。

k0kubun: r67644 2019-04-20 16:52:59 +0900

r67624 の CRITICAL_SECTION_START()/CRITICAL_SECTION_FINISH() の引数の関数名の typo を修正しています。

aycabta: r67645 2019-04-20 17:51:20 +0900

標準添付ライブラリとして reline という readline 互換なライブラリを追加して、irb で readline が使えない環境ではかわりに reline を利用して readline のような操作感を使えるようにしています。あとひっそり irb の --irb_debug というオプションは削除されています(使ったことないし)。 また reline には複数行の編集をサポートする機能があるそうで、その恩恵にも与ることができるほか completion にもなにやら新機能が入っているっぽい……のですが、この時点で reline より readline のほうが優先してロードされるのだけど reline にしかない multiline 用のメソッドが呼ばれてしまってるためエラーになっていました。

aycabta: r67646 2019-04-20 18:16:16 +0900

r67645 の Reline のテストで helper を require_relative でロードするように修正しています。

aycabta: r67647 2019-04-20 18:23:09 +0900

同じく r67645 で追加しているテスト test/reline/key_actor_emacs_test.rb で require "stringio" が漏れていたので追加しています。

tenderlove: r67648 2019-04-20 18:29:19 +0900

GC.compact の GC.stat(:object_id_collisions) をチェックするテストを MJIT 有効化時には skip するようにしています。

aycabta: r67649 2019-04-20 18:32:44 +0900

irb のテストファイル test/irb/test_completion.rb と test/irb/test_ruby-lex.rb を削除しています。