From: Tomoyuki Chikanaga Date: 2010-05-01T11:56:43+09:00 Subject: [ruby-dev:41126] [Bug #3229] iseq_s_load で TypeError 発生 Bug #3229: iseq_s_load で TypeError 発生 http://redmine.ruby-lang.org/issues/show/3229 起票者: Tomoyuki Chikanaga ステータス: Open, 優先度: Normal ruby -v: ruby 1.9.2dev (2010-04-30 trunk 27566) [x86_64-darwin10.3.0] [ruby-dev:40911] をチケットにさせて頂きます。 RubyGems の iseq ライブラリを利用して、文字列から compile した ISeq をロードさせようとすると 以下のように TypeError が発生します。 $ cat test.rb require "iseq" iseq = ISeq.compile("pust 'Hello World'") ISeq.load(iseq.to_a) $ ruby -v test.rb ruby 1.9.2dev (2010-04-30 trunk 27566) [x86_64-darwin10.3.0] test.rb:4:in `load': can't convert nil into String (TypeError) from test.rb:4:in `
' iseq->filepath が nil の場合があるのに対応していないようです。 以下のパッチで上記のコードは動くようになりました。 Index: iseq.c =================================================================== --- iseq.c (revision 27566) +++ iseq.c (working copy) @@ -465,7 +465,8 @@ name = CHECK_STRING(rb_ary_entry(data, i++)); filename = CHECK_STRING(rb_ary_entry(data, i++)); - filepath = CHECK_STRING(rb_ary_entry(data, i++)); + filepath = rb_ary_entry(data, i++); + filepath = NIL_P(filepath) ? Qnil : CHECK_STRING(filepath); line_no = CHECK_INTEGER(rb_ary_entry(data, i++)); type = CHECK_SYMBOL(rb_ary_entry(data, i++)); ---------------------------------------- http://redmine.ruby-lang.org