From: Nobuyoshi Nakada Date: 2012-01-08T17:09:24+09:00 Subject: [ruby-core:41982] [ruby-trunk - Feature #5856][Feedback] Feature: Raise any object Issue #5856 has been updated by Nobuyoshi Nakada. Category set to core Status changed from Open to Feedback Assignee set to Yukihiro Matsumoto =begin * 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. It doesn't sound to make sense. Then such 3rd-party code will just rescue (({Object})) (or (({BasicObject}))) instead of (({Exception})), won't it? What you expect seems something different from exceptions to me. =end ---------------------------------------- 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://redmine.ruby-lang.org