ruby-trunk-changes r52839 - r52865

今日は rb_iseq_t の動的に変更される部分を配列オブジェクトで持つようにする内部実装の変更などがありました。

kosaki: r52839 2015-12-02 06:52:02 +0900

r52806 (実際は r52821) で追加された random.c で explicit_bzero() を使うための代替実装で gcc の拡張の attribute weak が使えたら ruby_explicit_bzero_hook_unused() という空の関数を weak 参照で定義して最適化を抑制させる方法で memset(3) を使って実装するようにしています。

svn: r52840 2015-12-02 06:55:16 +0900

version.h の日付更新。

normal: r52841 2015-12-02 07:42:00 +0900

r52839 の missing/explicit_bzero.c の weak attribute を使うバージョンの実装で memset() の引数の数を修正しています。

normal: r52842 2015-12-02 07:49:05 +0900

拡張ライブラリ openssl の変数 mSSLExtConfig、eSSLError、ID_callback_state、ossl_ssl_ex_vcb_idx、ossl_ssl_ex_store_p、ossl_ssl_ex_ptr_idx などの変数が extern されていたのを static 変数に変更しています。

naruse: r52843 2015-12-02 09:03:51 +0900

missing/explicit_bzero.c で #undef explicit_bzero するのを実装を分岐する preprocessor の #ifdef directive の前に置くようにしています。

nobu: r52844 2015-12-02 09:45:32 +0900

r52833 で str_make_independent_expand() に追加した引数に const 修飾子を追加しています。 VC の不具合対応とのこと。

nobu: r52845 2015-12-02 09:55:50 +0900

missing/explicit_bzero.c のコメントの英文と、Windows でのサポート状況について修正しています。 Visual Studio 12.0 では memset_s() がないとのこと。 SecureZeroMemory() を代替としています。

hsbt: r52846 2015-12-02 10:36:30 +0900

拡張ライブラリ bigdecimal の rdoc 用コメントの typo 修正。 https://github.com/ruby/ruby/pull/1120

nobu: r52847 2015-12-02 10:50:34 +0900

include/ruby/missing.h で memset_s(3) を利用するために #define __STDC_WANT_LIB_EXT1__ 1 を追加しています。

hsbt: r52848 2015-12-02 11:23:12 +0900

標準添付ライブラリ csv に frozen_string_literal: true の magic comment を追加して必要なところに String.new を使うようにしています。 https://github.com/ruby/ruby/pull/1116

nobu: r52849 2015-12-02 11:36:58 +0900

missing/explicit_bzero.c のコメントの typo 修正。

nobu: r52850 2015-12-02 11:40:02 +0900

r52848 の lib/csv.rb の magic comment の修正。 encoding: の指定のほうを1行目にしています。お、これは順番が重要なのか。 https://github.com/ruby/ruby/pull/1116

hsbt: r52851 2015-12-02 14:56:10 +0900

test/ruby/test_string.rb で既に不要になっていた $= という特殊変数についてのテストコード pre_1_7_1 というメソッドとその呼び出しを削除しています。 [ruby-dev:49397] [misc #11757]

hsbt: r52852 2015-12-02 15:12:49 +0900

configure の --disable-install-doc の usage メッセージの文法修正。 [ruby-core:71506] [Bug #11698]

nobu: r52854 2015-12-02 15:48:51 +0900

Encoding#_dump の実装で引数のチェックを rb_scan_args() を呼び出していたのを、省略可能な引数は利用していなかったので rb_check_arity() の呼び出しだけにしています。

nobu: r52855 2015-12-02 15:50:41 +0900

marshal.c の r_fixup_compat() で互換性のために特定のクラスでオブジェクトの型をすりかえすためのテーブルからの参照で st_delete() で要素を取り出した時に要素を消すようにしています。

nobu: r52856 2015-12-02 16:27:22 +0900

Marshal.load で taint された文字列からロードすると Encoding::XXX のクラスが誤って taint されることがある不具合を修正しています。 rb_marshal_define_compat() で Encoding のロード時のすりかえを定義して USERDEF のオブジェクトロード時にも compat table を参照するようにしています。 [ruby-core:71793] [Bug #11760]

nobu: r52857 2015-12-02 16:31:23 +0900

compile.c で rb_compile_bug() を呼び出す時の行番号の参照元が間違っていたところがあったのを修正しています。また iobj, lobj などの変数のスコープを変更しています。必要とされるブロック内で宣言するようにしています。

ko1: r52858 2015-12-02 16:52:12 +0900

struct rb_iseq_struct::compile_data にアクセスするためのマクロ ISEQ_COMPILE_DATA() を定義して、これを利用するようにリファクタリングしています。そして構造体メンバの名前を struct rb_iseq_struct::compile_data_ に変更しています。これ修正漏れがないかチェックのために変えたんだと思いますけど、変えなくても良いような気も…。しかしその謎は r52865 で解けるのでした。

nobu: r52859 2015-12-02 17:00:56 +0900

Encoding#name や Encoding.name_list で freeze された文字列を作るのに rb_fstring_cstr() を利用するようにして実体が共有される fstring を使うようにしています。

ko1: r52860 2015-12-02 17:05:36 +0900

struct rb_iseq_variable_body::coverage にアクセスするためのマクロ ISEQ_COVERAGE() および ISEQ_COVERAGE_SET() を定義して、これを利用するようにするリファクタリング。また構造体メンバ名を struct rb_iseq_variable_body::coverate_ に変更しています。これ変更しなくても(ry

ko1: r52861 2015-12-02 17:11:27 +0900

flip-flop 用の struct rb_iseq_variable_body::flip_cnt の increment を行うマクロ ISEQ_FLIP_CNT_INCREMENT() を定義してこれを使うようにするリファクタリング。そして構造体のメンバ名も struct rb_iseq_variable_body::flip_cnt_ に改名しているのですが(ry

ko1: r52862 2015-12-02 17:20:35 +0900

struct rb_iseq_variable_body::iseq を参照/メモリ確保を行うマクロ ISEQ_ORIGINAL_ISEQ() と ISEQ_ORIGINAL_ISEQ_ALLOC() を定義してこれを利用するようにしています。 また構造体メンバ名も struct rb_iseq_variable_body::iseq_ に(ry
あと rb_iseq_free() と iseq_memsize() では定義したマクロを利用していないみたいですがこれはわざとでしょうか?

nobu: r52863 2015-12-02 18:17:42 +0900

r52847 で include/ruby/missing.h に追加した #define __STDC_WANT_LIB_EXT1__ 1 ですが、定義済みの時には上書きしてしまわないようにしています。

nobu: r52864 2015-12-02 18:17:49 +0900

Thread#name= で OS X では pthread_setname_np() を使い、引数は1つだけ渡すようにしています。スレッドを指定する引数はなくて、現在のスレッドの名前だけ変更できるようです。まじか。

ko1: r52865 2015-12-02 22:58:07 +0900

ISeq のうち実行時に書き変わる部分を集めた rb_iseq_t::variable_body を削除して rb_iseq_t::body::mark_ary という配列に詰めるようにしています。なるほどこのためにアクセスをマクロ化してたわけですね。改名された構造体メンバたちももうなくなったので問題ありませんでした。
しかしなぜか test/ruby/test_process.rb の test_execopts_redirect_open_fifo_interrupt_print というテストで sleep 時間をのばしていて、これはなぜだろう…。