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 `<main>'

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