From: Yukihiro Matsumoto Date: 2012-01-09T20:29:15+09:00 Subject: [ruby-core:41999] [ruby-trunk - Feature #5856] Feature: Raise any object Issue #5856 has been updated by Yukihiro Matsumoto. C++ style raising any object does not seem like "exception handling" for me. Besides that, since exception dispatch is based on inheritance hierarchy, it is natural (for me at least) to use Exception as a root of all exceptions. ---------------------------------------- Feature #5856: Feature: Raise any object https://bugs.ruby-lang.org/issues/5856 Author: Kurt Stephens Status: Feedback Priority: Normal Assignee: Yukihiro Matsumoto Category: core Target version: Feature: Raise any object = Proposal The ability to raise any object that conforms to the protocol of Exception. = Problem * The Exception subclass hierarchy is well-established. * CRuby does not allow any object that behaves as an Exception to be raised, it must be a subclass of Exception. * 3rd-party code often rescues Exception; e.g. for error recovery, retry and/or logging. * Users need the ability to raise objects that would not normally be rescued by *any* code; e.g.: hard timeouts or custom signal handlers in an application. = Solution * ruby/eval.c: Remove make_exception() assertion rb_obj_is_kind_of(mesg, rb_mRaiseable). = Implementation * See attached patch or https://github.com/kstephens/ruby/tree/trunk-raise-any = Example * See test/ruby/test_raise_any.rb = See also * https://bugs.ruby-lang.org/issues/5818 -- http://bugs.ruby-lang.org/