A generic solution (cont'd) 1 #define RUBY_CATCH \ 2 catch(Ruby_Jump_Tag const & ex) { \ 3 ruby_jump_tag = ex.tag; \ 4 goto ruby_jump_tag; \ 5 } \ 6 catch(...) { \ 7 RUBY_RETHROW(rb_exc_new2( \ 8 rb_eRuntimeError, \ 9 "unknown C++ exception thrown")); \ 10 }