Hatena::ブログ(Diary)

miura1729の日記 このページをアンテナに追加 RSSフィード

2007-12-30

Ruby 1.9.0のバイトコードをいじり倒す(その5)

09:17 |  Ruby 1.9.0のバイトコードをいじり倒す(その5)を含むブックマーク  Ruby 1.9.0のバイトコードをいじり倒す(その5)のブックマークコメント

現在分かっているInstructionSequcenceの問題点です。いろいろ、追ってみたのですが分からないです。

prog = <<EOS
[
 ["abc", 123],
 ["def", 999]
].each do |x|
    p x
  end
EOS

print "--- with InstructionSequence\n"
iseq = VM::InstructionSequence.compile(prog)
VM::InstructionSequence.load(iseq.to_a).eval
print "--- without InstructionSequence\n"
eval(prog)

with/withoutで結果が同じになる必要があるのですが、InstructionSequenceでは第1要素だけしか取り出せないです。

c:\cygwin\usr\local\bin\ruby test3.rb
--- with InstructionSequence
"abc"
"def"
--- without InstructionSequence
["abc", 123]
["def", 999]

yarv-devかruby-devに報告した方がいいのかなー?でも、自家製パッチを当てた上のバグだから、報告するのもおかしいよなー。時間があるときにまた追ってみます。この問題があるから、実用で使えないのですよね。