ruby-trunk-changes r67401 - r67414

今日は clang のメモリチェック(ASAN)などでのメモリチェックの対象から外す poisoned のマークを不要になったら戻すようにする修正などがありました。

eregon: r67401 2019-04-02 05:35:10 +0900

rubyspec で Float#to_s のテストで厳密な数値を得るために String#unpack を使ってたのを普通にリテラルを使うようにしています。プラットフォームによってバイナリ表現が異なるため。しかしリテラルリテラルで狙った厳密な数値になってるかわからないような気もするけどいいのかなぁ。

svn: r67402 2019-04-02 05:35:13 +0900

version.h の日付更新。

eregon: r67403 2019-04-02 05:45:55 +0900

rubyspec のコマンドラインオプション --enable-jit などのテストで、configure 時に MJIT 無効にされてた時のことを考慮するようにしていましたが、そのテスト自体を削除しています。MJIT がサポートされてるかどうか判定するのが難しいとのこと。

eregon: r67404 2019-04-02 05:46:10 +0900

r67403 の追加変更で、とにかく --enable-jit や --disable=jit などのオプションの指定どちらがあってもスクリプトの実行自体は行なわれるというのをチェックするように変更しています。他のRuby実装のことも考慮した内容にしたということだそうです。

tenderlove: r67405 2019-04-02 07:52:35 +0900

r65573 あたりで clans の ASAN などのチェッカーでの誤検出抑制のため gc.c に poison_xxx() や unpoison_xxx() というマクロ導入してチェックを緩めるようにしていましたが、iseq.c でも remove_coverage_i() や trace_set_i() で一時的に unpoison してチェックを緩めるため今 poisoned されているメモリ領域かどうか判定する poisoned_object_p() という inline 関数を追加しています。

svn: r67406 2019-04-02 07:52:39 +0900

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

tenderlove: r67407 2019-04-02 07:53:34 +0900

misc/lldb_cruby.py の lldb_inspect で T_REGEXP 型のオブジェクト(正規表現)の表示に対応しています。

tenderlove: r67408 2019-04-02 08:55:02 +0900

さらに gc.c で何箇所か一時的に unpoison したオブジェクトを元に戻す処理を追加しています。

nobu: r67409 2019-04-02 12:48:58 +0900

拡張ライブラリ date で Date._strptime で Hash オブジェクトから要素を破壊的に取り出すのに ref_hash()+del_hash() を使ってたのを del_hash() で削除と同時に要素を取り出すように変更しています。たぶん Hash オブジェクトが共有されることは(ObjectSpace で無理矢理取り出さないかぎり)ないので race condition 的なことよりリファクタリングであろうと思います。

svn: r67410 2019-04-02 12:49:00 +0900

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

nobu: r67411 2019-04-02 13:36:33 +0900

昨日 r67397 で導入した JIS X 0301 での日付の parse のための年号の省略表示の文字を保持するマクロ JAPANESE_ERA_INITIALS を JISX0301_ERA_INITIALS に改名しています。

nobu: r67412 2019-04-02 13:36:34 +0900

そして JIS X 0301 には年号が省略された時にデフォルトの年号というのが想定されているらしくて、それを JISX0301_DEFAULT_ERA として定義して "H" (つまり)としています。これいつか変わるのかな。

nobu: r67413 2019-04-02 17:08:29 +0900

tool/downloader.rb のキャッシュファイルの判定を変更しているのですが、うーん条件が複雑でよくわからない。 とりあえず `return unless cache or cache.eql?(file)` の部分はなんかおかしいような気がするんですが。

k0kubun: r67414 2019-04-02 19:51:35 +0900

azure-pipelines.yml で Linux でエラーを無視する設定 continueOnError: true を追加しています。 bundler と bundled gems のテストが失敗しはじめているので修正されるまで通知をとめるためとのこと。