ruby-trunk-changes r55647 - r55666

今日は ISO-8859-XXX 系のいくつかのエンコーディングの casemap 対応の実装、RubyVM の特異クラスが作られた時に GC の mark が漏れる不具合の修正、Object や Kernel に translate というメソッドを定義すると死ぬ不具合の修正などがありました。

duerst: r55647 2016-07-13 08:40:26 +0900

ISO-8859-3 のテストで dotless i という文字(code point 0xa9)をテスト対象からはずしています。

duerst: r55648 2016-07-13 09:02:34 +0900

r55647 とも関連してそうですが ISO-8859-3 の dotless i と I を大文字小文字の関係ではないという扱いにするように casemap 処理を修正しています。

svn: r55649 2016-07-13 09:02:35 +0900

version.h の日付更新。

duerst: r55650 2016-07-13 10:31:44 +0900

Encoding の Windows-1257 の alias だった ISO-8859-13 を独立したエンコーディングとして定義しています。

duerst: r55651 2016-07-13 10:50:17 +0900

r55650 の続き。 ISO-8859-13 の大文字小文字の casemap 対応を独自のもので実装しています。

duerst: r55652 2016-07-13 13:08:36 +0900

ISO-8859-7 の alias として定義されていた Windows-1253 を独自のエンコーディングとして定義するように切り出しています。

duerst: r55653 2016-07-13 13:19:17 +0900

エンコーディング ISO-8859-9 から alias として定義されていた Windows-1254 を独自のエンコーディングとして切り出して定義するようにしています。

duerst: r55654 2016-07-13 14:15:28 +0900

r55653 の続き。 切り出した enc/windows_1254.c のマクロや変数名を元の ISO-8859-9 に由来していた名前から独自のものに改名するリファクタリング

ko1: r55655 2016-07-13 14:19:12 +0900

method_entry_get_without_cache() で ruby_running が偽の時にもメソッドが未定義の時のチェックを追加して明示的に NULL を返して不定値を返していたのを修正しています。 VM が起動前ということなので、普通は通らないところだと思いますが…。Coverity で検出されたとかかな。

ko1: r55656 2016-07-13 14:26:00 +0900

r52921 で導入された RubyVM::InstructionSequence で translate というメソッドがあったら命令列をこのメソッドにわたして変換をかけるようにするというフックに思わぬ副作用があって、Object とか Kernel に translate メソッドを定義してしまうと RubyVM::InstructionSequence でも respond_to? で反応してしまうので、変換機能があると誤解して呼んでしまって落ちる、という問題があったので、明示的に undef して RubyVM::InstructionSequence に再定義された時だけ反応するようにしています。さっきのはこれの修正の過程で発見されたのかも。

naruse: r55657 2016-07-13 14:29:30 +0900

r55646 の Math.sqrt の Complex 対応で signbit(3) を VALUE の値に直接呼び出してしまっていたのを f_signbit() という関数を導入してこちらを利用するようにしています。

duerst: r55658 2016-07-13 14:40:12 +0900

エンコーディングの ISO-8859-5 の大文字小文字変換の独自 casemap 対応を追加しています。

naruse: r55659 2016-07-13 14:47:48 +0900

r55657 で f_signbit() の戻り値を受ける変数の型を int -> VALUE に修正。

duerst: r55660 2016-07-13 15:19:07 +0900

先日の r55632 での ISO-8859-1 の分岐の修正を revert しています。変更されないのに flags に ONIGENC_CASE_MODIFIED を立ててしまっていたのがだめだったようです。また enc/iso_8859_4.c でも同様に変換してないのに flags に余計なフラグを立てることがあったのを修正しています。

nobu: r55661 2016-07-13 15:32:37 +0900

enc/windows_125{0,1,2,3,4}.c の先頭のコメントに書かれているファイル名を修正しています。

usa: r55662 2016-07-13 16:03:23 +0900

r55641 の log(1), log(2), log(10) の定数参照への変更で Windows 用に _USE_MATH_DEFINES というマクロを定義していたのを #include "internal.h" の前に移動しています。 internal.h -> ruby.h -> win32.h -> math.h という依存関係でここで math.h が include されてしまうのでその前にマクロ定義しておかないといけないということでした。

ko1: r55663 2016-07-13 16:08:32 +0900

ObjectSpace.each_object のブロック内で singleton_class と instance_methods を呼ぶと SEGV することがある不具合を修正。なんだかよくわからないのですが RubyVM 自体を GC の root として mark していなかったみたいです。正確には rb_mark_set() で RubyVM 自体の mark はしてたけど再帰的な mark をしていなかったので RubyVM の特異クラスが生成されるとそれが mark から漏れてたということみたいです。 [ruby-dev:49731] [Bug #12583]

duerst: r55664 2016-07-13 16:19:25 +0900

エンコーディング ISO-8859-7 の大文字小文字変換で独自の casemap 対応を実装しています。

duerst: r55665 2016-07-13 17:21:29 +0900

エンコーディング Windows-1252 の大文字小文字変換で独自の casemap 対応を実装しています。

duerst: r55666 2016-07-13 18:09:47 +0900

エンコーディング ISO-8859-9 で大文字小文字変換の独自の casemap 対応を実装しています。またここでも r55648 と同様に dotless i と I の大文字小文字対応をやめる変更をしています。