Issue #13224 has been updated by jeremyevans0 (Jeremy Evans).


Only two weeks until the release of 2.5.0, and this hasn't been merged yet.  I've tested and the patch still applies and the tests still pass.

----------------------------------------
Feature #13224: Add FrozenError as a subclass of RuntimeError
https://bugs.ruby-lang.org/issues/13224#change-68283

* Author: jeremyevans0 (Jeremy Evans)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 2.5
----------------------------------------
Currently, attempting to modify a frozen object leads to a `RuntimeError` exception.  Unfortunately, this means it is not easy to differentiate exceptions raised from attempting to modify frozen objects from generic exceptions such as calling `Kernel#raise` with no exception class.

The attached patch adds `FrozenError` as a subclass of `RuntimeError`, and uses `FrozenError` instead of `RuntimeError` for exceptions raised when there is an attempt to modify a frozen object.  It should be backwards compatible in the sense that:

~~~ruby
begin
  "a".freeze << b
rescue RuntimeError
end
~~~

Will still function as before.

More people in the ruby community are starting to use frozen objects for the benefits of immutability (thread-safety, cache-ability, referential transparency), and having an exception class dedicated to misuse of frozen objects will make it easier to handle those exceptions.

The attached patch is a little long, mostly because ruby's test suite is currently brittle in regards to handling exception classes.  For example, `assert_raise(RuntimeError)` needs to be changed to `assert_raise(FrozenError)`, because `assert_raise` uses `instance_of?` instead of `kind_of?` if given an exception class and not a module.  Both RSpec and recent versions of Minitest should automatically handle this type of change without code modifications.

---Files--------------------------------
0001-Add-FrozenError-as-a-subclass-of-RuntimeError.patch (27.2 KB)
0001-Add-FrozenError-as-a-subclass-of-RuntimeError.patch (29 KB)
0001-Add-FrozenError-as-a-subclass-of-RuntimeError.patch (30 KB)


-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>