むらけんです.
ruby-1.8.0 では動作していた拡張ライブラリが ruby-1.8.1-preview2 では例
外を投げるようになってしまいました.簡略化したコードを以下に示します.
#include <ruby.h>
static VALUE
ahi_ahi(VALUE obj)
{
rb_yield(Qnil);
}
static VALUE
ahi_abort(VALUE obj)
{
rb_iter_break();
}
void
Init_ahi(void)
{
VALUE cAhi = rb_define_class("Ahi", rb_cObject);
rb_define_method(cAhi, "ahi", ahi_ahi, 0);
rb_define_method(cAhi, "abort", ahi_abort, 0);
}
この拡張モジュール (ahi.so とする) を以下のように用いると
$ ruby -rahi -e "a = Ahi.new; a.ahi { a.abort }"
-e:1:in `abort': unexpected break (LocalJumpError)
from -e:1
from -e:1:in `ahi'
from -e:1
となってしまいます.ruby-1.8.0 では break されていました.
どのように解決すれば良いでしょうか?
--
1024D/2A3FDBE6 2001-08-26 Kenta MURATA (muraken) <muraken2 / nifty.com>
Key fingerprint = 622A 61D3 280F 4991 4833 5724 8E2D C5E1 2A3F DBE6