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