ruby-trunk-changes r43045 - r43059

今日は "str" =~ /regexp/ や /regexp/ =~ "str" のような式がそれぞれ String#=~ や Regexp#=~ が再定義されていても正規表現マッチを直接実行していた不具合を修正しています。

nobu:r43045 2013-09-26 11:31:26 +0900

gc.c の malloc_increase2 という変数を更新する処理を ATOMIC_SIZE_ADD() と ATOMIC_SIZE_EXCHANGE() というマクロを利用して atomic に処理するようにしています。

svn:r43046 2013-09-26 11:31:34 +0900

version.h の日付更新。

nobu:r43047 2013-09-26 14:46:52 +0900

AddressSanitizer というメモリ不具合検出用ツール(valgrind みたいなものみたいですね)を使うために -fsanitize=address オプションをつけてビルドするとエラーを検出するのに対応しています。 GC の mark 処理のためにマシンスタックをさわる mark_locations_array() に検出の対象外にするための __attribute__() をつけるようにしています。 [ruby-core:57372] [ruby-core:56155] [Bug #8680]

naruse:r43048 2013-09-26 15:06:19 +0900

r43047 の変更で __has_feature() や __SANITIZE_ADDRESS__ の存在有無をチェックしていたのを、__has_feature() が未定義の時は gc.c で空の定義をしておいて分岐を少しシンプルにしています。 gcc 4.6 のコンパイルエラーの対応だそうです。 #if での条件演算子がダメだったんでしょうか。

nobu:r43049 2013-09-26 16:22:43 +0900

gc.c の vm_xrealloc() で realloc(3) の呼び出しが失敗したら garbage_collect_with_gvl() を呼んで GC してからリトライしているところを同様の処理のために定義されている TRY_WITH_GC() マクロを利用するようにしています。

charliesome:r43050 2013-09-26 16:39:48 +0900

/regexp/ =~ "str" が最適化により VM の命令から直接関数を呼ぶのが String#=~ が再定義されていても効いたままでメソッドが呼ばれない不具合を修正しています。 =~ メソッドはレシーバが Regexp で引数(右辺)が String だと直接 rb_reg_match() を呼ぶように最適化する命令 opt_regexpmatch1 にコンパイルされるのですが、ここでメソッドの再定義チェックがされておらず無条件で関数を呼んでいました。 [ruby-core:57385] [Bug #8953]

knu:r43051 2013-09-26 16:50:19 +0900

Emacs 用の misc/ruby-electric.el の修正。 self-insert-command というのを利用しないように書き換えているそうです。

sorah:r43052 2013-09-26 16:58:28 +0900

r43050 の追加修正で "str" =~ /regexp/ の時も最適化により VM の命令から直接関数を呼ぶのが Regexp#=~ が再定義されていても効いたままでメソッドが呼ばれない不具合を修正しています。レシーバが String で引数(右辺)が Regexp の場合は opt_regexpmatch2 という最適化命令にコンパイルされるので、こちらでも String#=~ メソッドの再定義チェックを行うようにしています。 [ruby-core:57385] [Bug #8953]
Regexp#=~ が再定義されているかはみなくていいのかなと思ったのですが、るりまの String#=~ を読むと「other が正規表現でも文字列でもない場合は other =~ self を行います」とあるので "str" =~ /regexp/ が Regexp#=~ を呼ばないで直接正規表現マッチを実行するのが仕様(というか現状)みたいです。ふーむ。

knu:r43053 2013-09-26 21:16:22 +0900

Emacs 用の misc/ruby-electric.el の修正。 smartparen-mode のサポートを追加しているそうです。

zzak:r43054 2013-09-26 22:01:54 +0900

拡張ライブラリ openssl の rdoc で OpenSSL::PKey::RSA#export のサンプルコードの変数名 typo を修正しています。 https://github.com/ruby/ruby/pull/401

zzak:r43055 2013-09-26 22:04:27 +0900

拡張ライブラリ digest の rdoc 用コメントで単語が重複していたのを修正しています。

zzak:r43056 2013-09-26 22:09:13 +0900

標準添付ライブラリ observer.rb の rdoc 用コメントのサンプルコードで変数名が camelCase だったのを snake_case に変更したり、クラスメソッドの定義の方法を修正したりしています。 https://github.com/ruby/ruby/pull/400

zzak:r43057 2013-09-26 22:13:59 +0900

拡張ライブラリ bigdecimal の rdoc 用コメントの typo やサンプルコードの for 文を Integer#times に変更したりといった修正です。 https://github.com/ruby/ruby/pull/398

zzak:r43058 2013-09-27 00:41:02 +0900

Struct.new の rdoc 用コメントの英文法の修正。 [Bug #8936]

svn:r43059 2013-09-27 00:41:08 +0900

version.h の日付更新。