まつもと ゆきひろです

In message "[ruby-ext:00216] Re: Interrupt"
    on 99/05/26, Keisuke CHIBA <chiba / lab.imagica.co.jp> writes:

|ところで, 関数 rb_protect は, ドキュメントも使用例も見つから
|ないのですが, 何をする関数でどのように使うのでしょうか?

ドキュメント=ソース ^^;;;

rb_rescueがStandardErrorのサブクラスの例外しか捕捉しないのに
対して,rb_protectはあらゆる例外(というか大域脱出)を捕捉する
関数です.

  val = rb_protect(func, arg, &status);
  if (status != 0) {
    大域脱出が起きた
  }

という風に使います.大域脱出の再発生には

  rb_jump_tag(status);

を使います.