Hatena::ブログ(Diary)

PB memo このページをアンテナに追加 RSSフィード

2016-07-29 ruby-trunk-changes r55771 - r55773

[][]ruby-trunk-changes r55771 - r55773

今日は昨日の変更でのビルドエラー修正などがありました。

ko1: r55771 2016-07-29 10:51:09 +0900

r55770 の変更が OS X で暗黙の long -> int の変換でエラーになっていたのを修正しています。 昨日 r55770 の変更は戻り値を 0 か 1 に丸めてるって書きましたけど逆で、条件部の値をそのまま返すようにしてたのですね。それを revert しています。

ko1: r55772 2016-07-29 10:52:17 +0900

未使用になっていた env_write() という static 関数の定義を削除しています。

nobu: r55773 2016-07-29 20:57:14 +0900

rb_funcall2() を使っているところを rb_funcallv() に改名しています。 gem 化する予定のない拡張ライブラリも変更しています。 rb_funcallv() という別名が導入されたのが 2.1 系以降なので、それ以前の rubyビルドできるようにするために gem 化されている(する予定のある)拡張ライブラリでは変更を避けたということみたいです。 https://github.com/ruby/ruby/pull/1406

2016-07-28 ruby-trunk-changes r55764 - r55770

[][]ruby-trunk-changes r55764 - r55770

今日は RubyVM::Env の T_IMEMO 型のオブジェクト化や、 RubyVM のスタックフレーム構造やブロックの扱いの変更など内部的な構造の大きな変更がありました。

nobu: r55764 2016-07-28 15:05:14 +0900

include/ruby/ruby.h の enum ruby_fl_type の宣言や DSIZE_T の変数宣言gcc の時 __extension__ という修飾子を付けるようにしています。警告除去のためみたいです。

svn: r55765 2016-07-28 15:05:15 +0900

version.h の日付更新。

ko1: r55766 2016-07-28 20:02:30 +0900

RubyVM の stack frame と env (環境変数ではなくて Thread 毎の RubyVM の実行環境)の構造を変更しています。大きなパッチでいくつかの変更が混ざってます。

メソッドに渡されたブロックを表現するためBH(Block Handler) という概念を導入して、これまで rb_block_t を直接扱っていたところで VALUE 型の変数で取り回すようにしています。また rb_block_t という型は struct rb_block にして型名の宣言をやめています。

rb_control_frame_t::flag というメンバは特殊ローカル変数を持つ ep[0] に移動しています。

Proc, Binding, RubyVM::Env などのオブジェクトを RGenGC の write-barrier を実装して wb-protected な種類のオブジェクトにしています。 [ruby-core:76568] [Bug #12628]

svn: r55767 2016-07-28 20:02:32 +0900

r55766 の行末の空白除去。

ko1: r55768 2016-07-29 04:13:26 +0900

ユーザは直接使ってなかっただろうと思いますが RubyVM::Env クラスは削除して、内部的なオブジェクトをまとめている T_IMEMO オブジェクトの仲間入りをしています。

svn: r55769 2016-07-29 04:13:27 +0900

version.h の日付更新。

ko1: r55770 2016-07-29 04:27:52 +0900

r55766 の再修正。 rb_vm_make_proc_lambda() で導入した VM_ENV_ESCAPED_P() マクロを利用するようにリファクタリングしています。また VM_ENV_LOCAL_P() の戻り値を 0 か 1 にそろえるようにしています。 っていうのは間違いで 0 か 1 を返すようにしていたのを、条件部の値をそのまま返すようにしています。ただ手元の環境だと VM_ENV_FLAGS() のところで整数型の long to int の暗黙の変換の警告がエラー扱いになっててビルドできないですね…。 CI でも同様みたいです。 http://rubyci.s3.amazonaws.com/osx1010/ruby-trunk/log/20160728T194501Z.fail.html.gz

2016-07-27 ruby-trunk-changes r55760 - r55763

[][]ruby-trunk-changes r55760 - r55763

nobu: r55760 2016-07-27 01:03:51 +0900

make install の前に make test-framework でテスト用フレームワーク自体のテストを実施するように依存関係を調節しています。

svn: r55761 2016-07-27 01:03:52 +0900

version.h の日付更新。

nobu: r55762 2016-07-27 01:22:56 +0900

r55736 および r55756 あたりで DTrace を使ったテストで OS X で PTY を使うようにしたコードで子プロセスの出力を読み取った後で Process.wait で子プロセスの終了を待つようにしています。

duerst: r55763 2016-07-27 10:33:01 +0900

enc/windows_1253.c で決して通らない分岐が Coverity Scan で指摘されていたので削っています。

2016-07-26 ruby-trunk-changes r55746 - r55759

[][]ruby-trunk-changes r55746 - r55759

今日は Windows-{1250, 1251, 1253, 1257} などの casemap 対応、内部的な関数として rb_vm_pop_frame() を追加するリファクタリングなどがありました。

duerst: r55746 2016-07-26 13:05:03 +0900

test/ruby/enc/test_case_comprehensive.rb で Unicode 用のデータファイルが存在しない時にテストクラスの定義自体をやめてテストしないようにするための条件を TestComprehensiveCaseFold.data_files_available? というメソッドに切り出して、また明示的な skip を追加するメソッド TestComprehensiveCaseFold.data_files_available も追加しています。

svn: r55747 2016-07-26 13:05:04 +0900

r55746 の行末の空白除去。

svn: r55748 2016-07-26 13:05:04 +0900

version.h の日付更新。

duerst: r55749 2016-07-26 15:30:39 +0900

Windows-1251 の Encoding での大文字小文字変換の casemap 対応。

duerst: r55750 2016-07-26 15:54:18 +0900

Encoding Windows-1253 の大文字小文字の casemap 対応の実装。 コミットログは Windows-1251 になってますね。

duerst: r55751 2016-07-26 16:19:43 +0900

Encoding Windows-1250 の大文字小文字変換の casemap 対応の実装。 r55749 と 55750 の ChangeLog エントリの修正も含まれています。

duerst: r55752 2016-07-26 16:33:18 +0900

Encoding Windows-1257 の大文字小文字変換の casemap 対応の実装。

ko1: r55753 2016-07-26 18:57:50 +0900

gc_mark() に inline 修飾子をつけています。できるだけ inline 化してほしいからだそうです(って書くとあたりまえですが)。

ko1: r55754 2016-07-26 19:07:12 +0900

rb_raw_obj_info() で T_DATA 型のオブジェクトのうち Proc オブジェクトの表示に対応しています。

ko1: r55755 2016-07-26 19:28:21 +0900

rb_vm_pop_frame() という vm_pop_frame() を wrap した関数を追加して、rb_thread_t::cfp を直接操作していたところでこの関数経由で control frame を pop するようにしています。また vm_pop_frame() に cfp と ep という引数を追加しています。 ep はまだ使ってないな、と思ったらコメントにも "we'll use ep soon" と書かれているのでそのうちこれを使う変更を入れる予定みたいです。

nobu: r55756 2016-07-26 21:51:50 +0900

r55736 で OS X (そういえば今度から macOS が正式な名前になったんでしたっけ)での DTrace を使ったテストで PTY を使うようにしたので readlines で取得した行から "\r" を chomp して削るように修正しています。

nobu: r55757 2016-07-26 22:02:33 +0900

テストで(minitest の?) assert_includes を使っていたところを assert_include を利用するように修正しています。

nobu: r55758 2016-07-26 22:02:34 +0900

make の love ターゲットの時に test-almost というターゲットの依存関係に install を追加しています。そもそも test-almost ってなんだっけ…。忘れてしまってましたが test/unit を標準添付ライブラリから test/lib に移動して ruby 自体のテスト専用のライブラリとした時に make check は make test-all から test framework 自体のテストは除いたものにしてて、それのことでした。うーんすっかり忘れてた。つまりその時から make love で install が必須じゃなくなってたんですかね。それも気がつかなかった。

nobu: r55759 2016-07-26 22:43:38 +0900

run_finalizer() で longjmp() による clobbered の警告回避のため、errinfo や safe_level を退避しておく変数を volatile つきの構造体として宣言してまとめておくようにしています。

2016-07-25 ruby-trunk-changes r55741 - r55745

[][]ruby-trunk-changes r55741 - r55745

今日は Range#step で引数のチェックで内部的に呼び出すメソッドの変更がありました。

nobu: r55741 2016-07-25 06:43:05 +0900

DTrace を使ったテストの helper で r55735 で ruby-runner を miniruby に置換する部分を条件分岐をやめて String#sub で正規表現で変換するようにしています。

svn: r55742 2016-07-25 06:43:06 +0900

version.h の日付更新。

ko1: r55743 2016-07-25 17:00:46 +0900

debug.c の ruby_debug_printf() で標準エラー出力オブジェクトの内容をダンプする時に rb_inspect() を使っていたのを rb_raw_obj_info() を呼び出して内部情報を取り出すようにしています。

kazu: r55744 2016-07-25 21:12:19 +0900

doc/maintainers.rdoc のファイル名の typo拡張子抜けを修正しています。

nobu: r55745 2016-07-25 21:33:15 +0900

Range#step の引数チェックで rb_funcall() で < や > メソッドを呼び出して正数であるか確認していたところを、より一般的というか primitive な比較用の演算子 '<=>' メソッドを呼び出して、その結果でチェックするように変更しています。ここに来た step はもう rb_to_int() で Integer に変換されているはずなので、受け付けるオブジェクトの汎用化というよりは効率とか一貫性のためかなぁ。