Hatena::ブログ(Diary)

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

2013-06-18 ruby-trunk-changes r41367 - r41390

[][]ruby-trunk-changes r41367 - r41390

今日は attr_writer/attr_accessor で定義された foo= のようなメソッドを無引数で呼んだ時の不具合修正や GC の write barrier 漏れの修正などがありました。

ko1:r41367 2013-06-18 04:21:36 +0900

r41345 の変更で T_ZOMBIE 型になったオブジェクトは mark 関数を呼び出さなくなったので gc_mark_children() で T_ZOMBIE を考慮していたのを削っています。

svn:r41368 2013-06-18 04:21:41 +0900

version.h の日付更新。

naruse:r41370 2013-06-18 09:53:20 +0900

test/ruby/test_lazy_enumerator.rb の assert_ruby_status の第2引数にエラー時のメッセージを渡してしまっていた(本来は stdin に渡す文字列を指定する引数)のを修正しています。

ko1:r41371 2013-06-18 10:18:32 +0900

variable.c の rb_autoload() で Module/Class の Write Barrier 挿入漏れがあったのを修正しています。

ko1:r41372 2013-06-18 11:17:59 +0900

r41345 で追加した gc_mark_maybe() で T_ZOMBIE 型だけでなく T_NONE 型のオブジェクトも無視するようにしています。また markable_object_p() でチェックする型にも T_NONE を追加しています。また flags == 0 のチェックは不要とのことで消しています。

ko1:r41373 2013-06-18 11:27:37 +0900

マクロ RGENGC_PROFILE が 2以上に定義されていた時に GC::Profiler で収集できるプロファイル情報に generated_normal_object_count_types という項目で内部的なオブジェクトの型ごとの確保数を取得できるようにしています。

akr:r41374 2013-06-18 12:37:53 +0900

bignum.c の rb_big_xor() で無意味な符号のセット(x の符号を取り出して x にセットする、などとしていた)を削除しています。

akr:r41375 2013-06-18 12:56:49 +0900

bignum.c の nlz() で戻り値に明示的なキャストを追加したり、big2dbl() で BDIGIT 値を int 型の変数に代入していた(0 か非0かの判定のみに使っていた模様)のを避けるようにするなどコンパイラの警告の除去らしき変更です。

naruse:r41376 2013-06-18 13:43:21 +0900

test/ruby/test_notimp.rb の TestNotImplement#test_call_fork で fork した子プロセスKernel#sleep による無期限のスリープタイムアウトの検出のコードを仕込んでわざえとエラーを起こすようにしているようです。 CI でのハングアップの調査のためと思われます。

naruse:r41377 2013-06-18 16:10:56 +0900

r41376 で仕込んだテストでの子プロセスの sleep を削除しています。

nobu:r41378 2013-06-18 16:43:47 +0900

parse.y のヒアドキュメントのパース時の lexer の状態変更のタイミングを修正しています。 r41372 での GC mark 時のチェックの変更で表出した不具合の修正とのこと。

akr:r41379 2013-06-18 18:46:01 +0900

configure で 128bit 整数型 int128_t が利用可能かチェックして、利用可能な時には bignum.c で BDIGIT を uint64_t に、BDIGIT_DBL を uint128_t に定義するようにしています。 Bignum の演算のパフォーマンスの向上が見込めるようです。しかしこれで環境によっては BigDecimal のテストが失敗するらしいです(手元では発生せず)。 [ruby-dev:47413] [Feature #8509]

zzak:r41380 2013-06-18 20:21:38 +0900

r41355 で拡張ライブラリ objspace で追加される ObjectSpace のメソッドの個別の rdoc 用コメントに reuire "objspace" が必要なことを追記していたのをやめて overview のところにだけ追記するようにしています。

zzak:r41381 2013-06-18 20:38:10 +0900

ext/.document に objspace/object_tracing.c を追記しています。

zzak:r41382 2013-06-18 20:41:28 +0900

拡張ライブラリ objspace に最近追加された ext/objspace/object_tracing.c で RDoc に ObjectSpace モジュールを認識させるためにコメントアウトされた状態で rb_define_module() の呼び出しを書いています。 [ruby-core:55525] [Bug #8537]

zzak:r41383 2013-06-18 20:56:03 +0900

拡張ライブラリ objspace の InternalObjectWrapper クラスについての rdoc 用コメントを追記しています。

zzak:r41384 2013-06-18 21:59:02 +0900

gc.c で ObjectSpace の Module を格納する変数名が rb_mObSpace だったのを rb_ObjSpace に改名しています。

zzak:r41385 2013-06-18 22:05:32 +0900

拡張ライブラリ objpace の ext/objspace/object_tracing.c で追加している各メソッドの rdoc 用コメントを追記しています。

nobu:r41386 2013-06-18 22:08:00 +0900

r41343 で追加していたテストでテストコードの引数のミスで失敗していたのを修正して、skip を削っています。 [ruby-dev:47438] [Bug #8531]

zzak:r41387 2013-06-18 22:10:25 +0900

r41385 で追記した ext/objspace/object_tracing.c の rdoc 用コメントのメソッド名の typo を修正。

tarui:r41388 2013-06-18 22:37:09 +0900

gc.c のプロファイル情報取得用に GC が走る原因を表す定数 gc_profile_record_flag の GPR_FLAG_STRESS の値を変更しています。ビットフラグとして使えるように2の累乗にするようにしています。 one-hot encoding という呼び方はじめて知りました。

charliesome:r41389 2013-06-18 23:01:32 +0900

attr_writer などで定義された foo= のようなメソッドを Object#send で引数なしで呼び出した時に arity チェックが間違っていて SEGV していた不具合を修正しています。 [ruby-core:55543] [Bug #8540]

tarui:r41390 2013-06-18 23:02:58 +0900

r41388 の ChangeLog エントリの内容を変更しています。 GC 理由は複合がありえるので、ビットフラグとして使えないとダメだったので typo だった、ということなのですが、元のほうが情報が多かったので良いような。"seems like" を "should be" にするだけでも良かったと思います。

2013-06-17 ruby-trunk-changes r41338 - r41361

[][]ruby-trunk-changes r41338 - r41361

今日は Symbol#to_proc や Method#to_proc で作った Proc オブジェクトにブロックを渡して呼び出した時の不具合修正や引き続き bignum.c のリファクタリングtk の不具合修正などがありました。

akr:r41338 2013-06-16 23:16:33 +0900

bignum.c に最近導入された BDIGIT の配列で直接演算する bary_add(), bary_sub(), bary_mul(), bary_divmod(), bary_zero_p() などの関数のラッパのマクロ BARY_ADD(), BARY_SUB(), BARY_MUL, BARY_DIVMOD(), BARY_ZERO_P() などのマクロ定義を追加し、これを利用するようにしています。

akr:r41339 2013-06-17 07:39:46 +0900

bignum.c から absint_numwords_bytes() という関数を削除して rb_absint_numwords() でこの関数を呼んでいたところは absint_numwords_generic() を使う(条件分岐を削除する)ようにしています。

svn:r41340 2013-06-17 07:39:50 +0900

version.h の日付更新。

akr:r41341 2013-06-17 07:57:22 +0900

bignum.c の関数名の改名。 bdigs_small_lshift() を bary_small_lshift() へ、bdigs_small_rshift() を bary_small_rshift() へ改名しています。 BDIGIT の配列を扱う関数として bary_??? を導入したので接頭語をそれに揃えるようにしているようです。

nobu:r41342 2013-06-17 10:01:07 +0900

Method#to_proc で作った Proc オブジェクトにブロックを渡して call すると、次にブロックを渡さずに call してもまだ block_given? が真になったままになる不具合についてのテストを追加しています。これは修正に先んじてテストを追加していたみたいです。 [ruby-core:54626] [Bug #8341]

nobu:r41343 2013-06-17 10:01:09 +0900

r41342 のとほぼ同様なのですが Symbol#to_proc で作った Proc オブジェクトについても一度ブロックつきで呼び出すとそれが残ったままになって次にブロックなしで呼び出しても block_given? が真になってしまうという不具合についてのテストを追加しています。 [ruby-dev:47438] [Bug #8531]

nobu:r41344 2013-06-17 10:01:12 +0900

r41342, r41343 で追加したテストを修正が完了するまでは skip するようにしています。

ko1:r41345 2013-06-17 11:54:25 +0900

gc.c に gc_mark_maybe() という is_pointer_to_heap() でオブジェクト用のヒープスロットに含まれているポインタかどうかと、T_ZOMBIE 型のオブジェクトではないことをチェックした上で mark する関数を新設して使うようにしています。使っている箇所ではもともと is_pointer_to_heap() によるチェックはしていましたが、T_ZOMBIE のチェックは追加されたチェックのようです。 T_ZOMBIE は sweep 時に T_FILE や T_DATA の free 関数に固有の関数が指定されていた時に実際の解放を次の finalizer 実行後まで遅延する特別扱いをするので、その間のオブジェクトの型として使われるものです。確か finalizer でこれら型のオブジェクトが持つポインタアクセスする処理を書いてしまっても SEGV しないようにする救済措置として導入されたものだったかと思います。

knu:r41346 2013-06-17 13:33:52 +0900

tool/ifchange の条件文の書きかたを変更しています。多分より汎用的に使えるシェルスクリプトの書きかたにしたのだと思います。

[追記]数値としての比較なのでそれに相応わしい演算子を使うようにしたということっだそうです。コメント欄も参照[/追記]

nagai:r41347 2013-06-17 14:21:16 +0900

拡張ライブラリ tk の修正がいくつか入っています。

まず extconf.rb での 64bit 環境の検出として RUBY_PLATFORM の s390x という環境に対応しています。 [ruby-core:40243] [Bug #5465]

また extconf.rb のパス検出で Mac OS X Lion でのビルドエラーの不具合修正。 [ruby-core:38172] [Bug #5048]

それから Tk::Canvas.create が例外を発生するという不具合の修正のほか、サンブルのコードで例外の捕捉が不足していたのを追加しています。 [ruby-core:54544] [Bug #8319]

zzak:r41348 2013-06-17 14:31:28 +0900

Backtrace#label の rdoc 用コメントにサンプルを追記しています。

kazu:r41349 2013-06-17 14:41:02 +0900

r41345 の ChangeLog エントリの typo を修正。

naruse:r41350 2013-06-17 16:08:00 +0900

test/json/test_json_generate.rb の TestJSONGenerate#test_broken_bignum という大きすぎる整数JSON 化しようとした時のテストを fork を使って書かれていたのを assert_separately を使って書き変えています。 また TestJSONGenerate#test_gc というテストは assert_in_out_err を使って子プロセスで raise することでテストが書かれていたので assert_separately を使うように書き変えています。

nobu:r41351 2013-06-17 16:59:55 +0900

拡張ライブラリ tkコンパイラ最適化により必要なオブジェクトのマークが漏れるのを防ぐため文字列化のフォーマット文字列の指示子に %i を使って C 言語の char * の文字列を取り出して使わずに String オブジェクトのまま取り扱うようにしています。 [ruby-core:39000] [Bug #5199]

nobu:r41352 2013-06-17 17:08:25 +0900

common.mk の依存関係の変更。 loadpath.o の依存関係から revision.h を削除しています。 また dmyloadpath.o というロードパスの変数のみ保持するオブジェクトファイルの依存関係はソースファイルのみにしています。

eregon:r41353 2013-06-17 17:39:39 +0900

gc.c の ObjectSpace.define_finalizer の rdoc 用コメントのサンプルコードがトップレベルに include ObjectSpace するように書かれていたので特異メソッドを使う書きかたに変更しています。

eregon:r41354 2013-06-17 17:44:56 +0900

gc.c の ObjectSpace 用の rdoc コメントで Document-class ではなく Document-module を使うようにしています。また ext/objspace/objspace.c での ObjectSpace の rdoc 用コメントでも Document-module を使って対象のモジュールの明示するようにしています。 これはどうやら ext/objspace/objspace.c の RDoc でのパースが失敗することの対策みたいです。 [ruby-core:55525] [Bug #8537]

eregon:r41355 2013-06-17 18:16:32 +0900

拡張ライブラリ objspace の rdoc コメントで require "objspace" が必要な旨を追記しています。また RDoc が ObjectSpace を認識できるようにコメントアウトした状態で rb_define_module() を呼ぶコードを追加しています。どっちかというとこっちのほうが RDoc のパースエラー対策の本命でしょうか。 [ruby-core:55525] [Bug #8537]

naruse:r41356 2013-06-17 19:24:48 +0900

test/ruby/envutil.rb の invoke_ruby で stdin のパイプに書き込むのは書きこむデータが空でない時だけにしています。空でも書き込めるかどうかのチェックはしてしまいそうな気がするのでブロックを防ぐためとかでしょうか。と思ったら、どうやらこの変更は r41350 の TestJSONGenerate のテストで assert_separately を使うようにした時にタイムアウトしていたのを修正しているようです。

akr:r41357 2013-06-17 20:56:21 +0900

r41352 で loadpath.o から revision.h の依存関係を削除したので loadpath.c で RUBY_REVISION を定義するようにしています。 RUBY_REVISION が未定義だと version.h から revision.h が #include されてしまうため。

akr:r41358 2013-06-17 20:56:53 +0900

r41357 のインデント修正のみ。

ktsj:r41359 2013-06-17 21:38:52 +0900

r41342 で先行してテストが追加されていた Method#to_proc で Proc オブジェクト化したメソッドにブロックを渡して call するとブロックが残ってしまう不具合を修正しています。 [ruby-core:54626] [Bug #8341]

ktsj:r41360 2013-06-17 21:47:26 +0900

r41343 で先行してテストが追加されていた Symbol#to_proc で Proc オブジェクト化したものにブロックつきで call を呼び出すとブロックが残ってしまう不具合を修正しています。 すごく似た現象でしたけど両者にそれぞれ別の対応が必要だったんですね。 [ruby-dev:47438] [Bug #8531]

ktsj:r41361 2013-06-17 22:18:54 +0900

r41359 のためのテストの skip を削除しています。

2013-06-16 ruby-trunk-changes r41322 - r41337

[][]ruby-trunk-changes r41322 - r41337

今日も主に bignum.c のリファクタリングと、GC の修正がありました。

tarui:r41322 2013-06-16 02:06:15 +0900

gc.c のリファクタリング。 GC_PROFILE_MORE_DETAIL の有無で追加の処理を関数まるごと分岐していたのを関数内の分岐するようにしています。

tarui:r41324 2013-06-16 05:18:11 +0900

GC_PROFILE_MORE_DETAIL が真に定義されていた時に収集する GC の profile 情報を追加しています。

tarui:r41325 2013-06-16 05:53:01 +0900

GC の修正で malloc(3) によるメモリ確保時に allocate_increase にげたをはかせているみたいで、GC が頻発するのを防いでいるそうですが、GCパラメータ把握できてないのでどういう理屈なのかちょっとわからないです。あとこれはいつからの問題なのでしょうか。 LazySweep からなら 1.9.3 と 2.0.0 にもバックポートしたほうがいいでしょうか。

akr:r41326 2013-06-16 08:46:07 +0900

bignum.c のリファクタリング。 bary_divmod() という BDIGIT 配列のまま除算を計算する関数を新設してそれを使うようにしています。 また bigdivrem() から bigdivrem_num_extra_words() という関数を括り出しています。この関数内の assert() 文はあきらかに常に成り立つはず(BIGDIVREM_EXTRA_WORDS が 2 なら)ので冗長ではないでしょうか。

akr:r41327 2013-06-16 08:56:32 +0900

bignum.c のリファクタリング。 bigdivrem() で bigdivrem_single() の戻り値を受け取るのに BDIGIT_DBL を使っていたのを BDIGIT で受け取るようにしています。

akr:r41328 2013-06-16 10:41:58 +0900

bignum.c のリファクタリング。 BDIGIT の配列のまま加算を計算する bary_add() を追加して、これを利用するようにしています。 これで四則演算が揃いましたね。 その他 bary_mul() と bary_divmod() の引数の型修正などもありました。

kou:r41329 2013-06-16 11:02:33 +0900

NEWS ファイルに r41286 での XMLRPC::Client#http メソッドの追加について追記しています。 [ruby-core:55197] [Feature #8461]

akr:r41330 2013-06-16 14:33:39 +0900

bignum.c のリファクタリング。 rb_integer_pack_internal() から bary_pack() を切り出してこれを再利用するようにしています。ここでも r41312 と同様に bary_pack() の結果と rb_integer_unpack() の結果をチェックする assert() 文が追加されていますね。新設した関数なので sanity check を入れているということでしょうか。

naruse:r41331 2013-06-16 16:10:17 +0900

r41293 で追加した config.guess, config.sub を GNU のサイトからダウンロードするためのツール tool/config_files.rb で Symbol のブロック引数渡しの記法が利用されていたので 1.8.5 でも動くように URI.read を使うようにしています。むしろ URI.read を知らなかった。こんなことができるんですね。

naruse:r41332 2013-06-16 16:10:20 +0900

.gitignore にダウンロードされる tool/config.guess と tool/config.sub を追加しています。

kazu:r41333 2013-06-16 16:56:20 +0900

r41324 の ChangeLog エントリの typo 修正。

naruse:r41334 2013-06-16 17:24:09 +0900

r41331 の URI#read を使うようにする修正で引数を渡すメソッドの間違いを修正しています。

akr:r41335 2013-06-16 17:49:26 +0900

bignum.c の absint_numwords_generic() で rb_funcall() を用いてメソッド呼び出しで計算していた部分を削っています。同様に bary_pack() と rb_integer_unpack() の結果を比較していた assert() 文も削っていて、やっぱりこのあたりは元々ある計算とダブルチェックをしていたみたいですね。

akr:r41336 2013-06-16 18:53:45 +0900

bignum.c の rb_integer_pack_2comp() という別の関数として分離されていたのを削って、flags 引数に INTEGER_PACK_2COMP というビットフラグを追加してこれで指定できるようにしています。

akr:r41337 2013-06-16 21:59:26 +0900

bignum.c のリファクタリング。 bary_2comp() という関数を get2comp() から括り出し、integer_unpack_num_bdigits() を rb_integer_unpack_internal() から括り出し、bary_unpack_internal() を bary_unpack() から括り出して INTEGER_PACK_2COMP フラグのサポートを追加、rb_integer_unpack_internal() と rb_integer_unpack_2comp は削除する、などなど r41336 の変更に追随するための関数の呼び出し関係の再構築をしている感じです。

2013-06-15 ruby-trunk-changes r41303 - r41316

[][]ruby-trunk-changes r41303 - r41316

今日も引き続き bignum.c のリファクタリングと、__dir__ の不具合修正がありました。

akr:r41303 2013-06-15 02:41:38 +0900

bignum.c の bigdivrem() からシフト演算処理を bdigs_small_lshift() として切り出して再利用するリファクタリング

svn:r41304 2013-06-15 02:41:45 +0900

version.h の日付更新。

nobu:r41305 2013-06-15 08:37:33 +0900

__dir__ のテストで File.expand_path ではなく File.realpath を利用するように変更しています。よく勘違いされる点ですが __dir__ は File.expand_path(File.dirname(__FILE__)) とか File.expand_path("..", __FILE__) ではなくて File.dirname(File.realpath(__FILE__)) と同等(シンボリックリンクだった時に違いがある)なんですよね。

nobu:r41306 2013-06-15 08:37:35 +0900

Binding オブジェクトを渡した eval の中で __dir__ を参照すると nil になる不具合を修正しています。 [ruby-core:55123]. [Bug #8436]

akr:r41307 2013-06-15 10:03:37 +0900

bignum.c の bigdivrem() と bdigs_small_rshift() という関数から右シフト演算の処理を bdigs_small_rshift() として括り出しています。

zzak:r41308 2013-06-15 10:19:30 +0900

ext/bigdecimal/bigdecimal.gemspec の Author のリストに zzak の名前を追加しています。

zzak:r41309 2013-06-15 10:20:27 +0900

ext/bigdecimal/bigdecimal.c の先頭部分のコメントの体裁や copyright 表記の移動を行なっています。

akr:r41310 2013-06-15 17:15:40 +0900

これでいいのかよく確認していませんが bigmul1_normal() が返す Bignum のバッファサイズを 1 BDIGIT ぶん小さいものにしています。

akr:r41311 2013-06-15 19:35:52 +0900

bignum.c の absint_numwords_bytes() absint_numwords_small() absint_numwords_generic() などの切り出した関数群に static をつけています。

akr:r41312 2013-06-15 20:15:23 +0900

ちょっと差分がわかりずらいですが bignum.c の rb_integer_unpack_internal() から、ワード列から Bignum の BDIGITS の配列に変換するところまでの処理を bary_unpack() として切り出しています。

そしてこれがちょっと意図がわからなかったのですが absint_numwords_generic() で bary_unpack() と rb_integer_unpack() を使って引数 numbytes を Bignum として unpack しなおして比較する assert() 文を追加しています。オーバフローのチェックとかでしょうか。

akr:r41313 2013-06-15 22:32:16 +0900

bignum.c に bary_mul() bary_mul_single() bary_mul_normal() という BDIGIT の配列引数として受け取って乗算を計算する関数を切り出してこれを利用するようにリファクタリング

akr:r41314 2013-06-15 23:52:02 +0900

これも bignum.c のリファクタリングです。 今度は bary_sub() という BDIGIT の配列どうしの減算を行う関数を切り出しています。

nobu:r41315 2013-06-16 00:31:44 +0900

r41306 で eval 内での __dir__ の不具合修正のため導入した absolute_path の宣言位置を利用しているブロック内に移動しています。 r40759 の時の bind 変数と同様に "clobbered by 'setjmp' or 'vfork'" のコンパイラ警告を抑制するためです。 [ruby-core:55123] [Bug #8436]

svn:r41316 2013-06-16 00:31:54 +0900

version.h の日付更新。

2013-06-14 ruby-trunk-changes r41290 - r41302

[][]ruby-trunk-changes r41290 - r41302

今日は tool/config.guess, tool/config.sub という configure で使うツールの管理方法の変更や RGenGC で Class/Module も Write Barrier で保護されるようになって Normal オブジェクトになれるようにする変更などがありました。 GC の性能は向上したでしょうか。

shugo:r41290 2013-06-14 09:53:37 +0900

NEWS ファイルに $SAFE=4 の機能が削除されたこと、untrust, untrusted?, trust が deprecated になったことなどを追記しています。

また doc/security.rdoc から $SAFE = 4 についての記述を削っています。

shugo:r41291 2013-06-14 09:56:52 +0900

r41290 の ChangeLogtypo 修正。

nobu:r41292 2013-06-14 12:21:23 +0900

r41273 で rb_secure() の引数に 4 が渡されていたらコンパイル時にエラーにするようにする gcc 4.4 以降の拡張を使ったしくみで、コンパイラの警告を抑制するため修正しています。カンマで区切った式を書くと警告になっていた模様。

nobu:r41293 2013-06-14 13:01:54 +0900

tool/config.guess, tool/config.sub というファイルをリポジトリ内に含んでいたのを削除して、git.savannah.gnu.org のリポジトリから動的にダウンロードするように tool/get-config_files というツールと common.mk にルールを追加しています。

これはどういう動機なのでしょうね。 config.guess, config.sub の機能がよくわかってないので必要性がよくわかっていませんが、最新版をリポジトリに含めるわけにはいかないのでしょうか。ライセンス関係かな?

nobu:r41294 2013-06-14 13:40:32 +0900

Travis CI 上でビルドするために .travis.yml の設定で autoconf 前に tool/config.guess と tool/config.sub をダウンロードしてくるように make コマンドの実行を追加しています。また tool/config_files.rb のラッパとして tool/get-config_files を追加しています。

nobu:r41295 2013-06-14 14:10:12 +0900

r41294 で追加した tool/get-config_files でダウンロードするファイル名を標準出力に表示するようにしています。

nobu:r41296 2013-06-14 14:10:15 +0900

ちょっと動作原理はよくわかってないのですが、コミットログによると configure を使わないプラットフォームで(主に Windows だと思います) make up ターゲットで make update-cofig_files を実行して tool/config.{guess,sub} をダウンロードしないようにしているそうです。

nobu:r41297 2013-06-14 14:10:17 +0900

configure.in で tool/config.{guess,sub} のそれぞれが存在しなかったらその時に tool/get-config_files を使ってダウンロードするようにしています。

shugo:r41298 2013-06-14 14:35:11 +0900

r41261 で追加した Module#using を NEWS ファイルに追記しています。また untrust 系のメソッドの deprecated についてのエントリの位置をアルファベット順に並ぶようにソートしています。

ko1:r41299 2013-06-14 18:23:54 +0900

RGenGC で Class, Module や内部的に生成される IClass (Module を include した時に継承ツリー上に挿入される Module の代理のクラス)を Shady ではなく Normal なオブジェクトとして扱えるように Write Barrier を挿入しています。これに伴ない struct RClass のメンバには直接は存在しませんがそこからリンクされている構造体の VALUE 型のメンバに const を付けて直接更新することを禁止して、操作する場所で Write Barrier を挿入しています。 RClass は既に割と内部を直接触るのより API を通じて操作することを推奨してきていたので、新たに操作用のマクロを導入したりということはないので、拡張ライブラリからもこれまで通り API を経由して操作するようにすればいいと思います。

ko1:r41300 2013-06-14 18:54:58 +0900

TracePoint の B_RETURN_EVENT によるトレースがブロックから next を使って抜けた時に呼び出されない不具合を修正しています。 VM 命令列へコンパイルする時に trace 命令を挿入する位置がブロック終了のアンカーの前だったため next でジャンプすると trace 命令が飛ばされていたのを修正しています。 [ruby-core:55305] [Bug #8489]

akr:r41301 2013-06-14 20:13:16 +0900

bignum.c の bigdivrem() で ny == 1 の時(y つまり分母側の数値が BDIGIT 1つだけのサイズしかなかった時)に rb_bit_closen(x) で x のコピーを作成していたところを bignew() を使って、ついでに符号の処理も一緒にするようにしています。

akr:r41302 2013-06-14 21:05:38 +0900

bignum.c の bigdivrem() で作成する中間データの Bignum オブジェクトバッファを、作成後に不要な上位のワードをスキップしていたのを、生成前に検出して無駄なメモリ確保を防ぐようにしています。