filename=eval.c
macro=false
private=false
type=VALUE
name=rb_catch
params=(const char *tag, VALUE (*proc)(), VALUE data)


catch Ʊư¹Ԥޤ

ޤ proc ˡyield 줿ͤ data ϤƼ¹Ԥޤ
 tag  throw 줿 rb_catch Τλޤ

throw ȯϤ֤ͤޤ
throw ȯʤäȤ proc ֤֤ͤޤ

  static VALUE
  foo_yield(VALUE a, VALUE b)
  {
      return rb_yield(b);
  }

  static VALUE
  foo_catch(VALUE obj)
  {
      return rb_catch("footag", foo_yield, INT2FIX(2));
  }

  static VALUE
  foo_abort(VALUE obj)
  {
      return rb_throw("footag", Qnil);
  }

  void
  Init_foo(void)
  {
      VALUE Foo = rb_define_class("Foo", rb_cObject);
      rb_define_method(Foo, "catch", foo_catch, 0);
      rb_define_method(Foo, "abort", foo_abort, 0);
  }

