VALUE vm_method(VALUE recv, ID id, int n, va_list ar) { VALUE *argv = 0; if (n > 0) { argv = ALLOCA_N(VALUE, n); int i; for(i=0; i<n ;i++) { argv[i] = va_arg(ar, VALUE); } } Arguments arg; arg.recv = recv; arg.id = id; arg.n = n; arg.argv = argv; int error = 0; VALUE result = rb_protect(method_wrap, reinterpret_cast<VALUE>(&arg), &error); if(error) { Exception e; e.backtrace(); throw e; } return result; }
void load(const char* filename, int anonymous) { int error = 0; rb_load_protect(rb_str_new2(filename), anonymous, &error); if(error) { Exception e; e.backtrace(); throw e; } }