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