From: Mathieu Bouchard Date: 2005-02-26T06:48:32+09:00 Subject: Re: Function request: rb_raisef() On Sat, 26 Feb 2005, Berger, Daniel wrote: > Hi all, > Or is this impractical? ------------------8<--------cut-here--------8<------------------ from gridflow/base/main.c : extern "C"{ void rb_raise0( const char *file, int line, const char *func, VALUE exc, const char *fmt, ...) { va_list args; char buf[BUFSIZ]; va_start(args,fmt); vsnprintf(buf, BUFSIZ, fmt, args); buf[BUFSIZ-1]=0; va_end(args); VALUE e = rb_exc_new2(exc, buf); char buf2[BUFSIZ]; snprintf(buf2, BUFSIZ, "%s:%d:in `%s'", file, line, func); buf2[BUFSIZ-1]=0; VALUE ary = rb_funcall(e,SI(caller),0); if (gf_stack.n) { rb_funcall(ary,SI(unshift),2,rb_str_new2(buf2), rb_str_new2(gf_stack.s[gf_stack.n-1].o->info())); } else { rb_funcall(ary,SI(unshift),1,rb_str_new2(buf2)); } rb_funcall(e,SI(set_backtrace),1,ary); rb_exc_raise(e); }}; ------------------8<--------cut-here--------8<------------------ from gridflow/base/grid.h : #define RAISE(args...) \ rb_raise0(__FILE__,__LINE__,__PRETTY_FUNCTION__,rb_eArgError,args) ------------------8<--------cut-here--------8<------------------ you'll just have to remove the parts related to gf_stack and then it's yours. _____________________________________________________________________ Mathieu Bouchard -=- Montr�al QC Canada -=- http://artengine.ca/matju