ruby-trunk-changes r53910 - r53913

今日は $. という特殊変数の扱いの修正などがありました。

nobu: r53910 2016-02-24 11:20:45 +0900

Float#to_s や Fixnum#to_s の実装で文字列のサイズがわかっている場合に rb_usascii_str_new2() ではなくサイズも指定する rb_usascii_str_new() を呼ぶようにして余分な strlen(3) の呼び出しを抑制しています。

nobu: r53911 2016-02-24 11:38:43 +0900

メソッドの再定義を判定する rb_method_basic_definition_p() で引数の klass が NULL の時は ObjectSpace.each_object から隠すための内部オブジェクトで、そのメソッドが再定義されることはないはずなので、rb_method_entry() を呼び出すまえに TRUE を返すように分岐を追加しています。内部オブジェクトをうっかり渡すと SEGV する危険があったみたいです。

nobu: r53912 2016-02-24 11:42:40 +0900

struct parser_params::compile_option に保持する Hash オブジェクトを rb_obj_hide() で klass を NULL にして内部オブジェクトにしています(ObjectSpace.each_object に表れないようにする)。

nobu: r53913 2016-02-24 17:21:04 +0900

parse.y の lex_io_gets() や require や load で使われる load_file() でファイルを読み込んだ時に $. という、最後に読んだファイルの行数を格納する特殊変数に影響を及ぼさないようにしています。こんな特殊変数が…。