Issue #16129 has been reported by jeremyevans0 (Jeremy Evans).

----------------------------------------
Feature #16129: Call initialize_clone with freeze: false if clone called with freeze: false
https://bugs.ruby-lang.org/issues/16129

* Author: jeremyevans0 (Jeremy Evans)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
----------------------------------------
This makes it possible for `initialize_clone` to correctly not freeze internal state if the `freeze: false` keyword is passed to `clone`.

If `clone` is called with `freeze: true` or no keyword, do not pass a second argument to `initialize_clone` to keep backwards compatibility.

This makes it so that external libraries that override `initialize_clone` but do not support the freeze keyword will fail with `ArgumentError` if passing `freeze: false` to `clone`.  I think that is better than the current behavior, which succeeds but results in an unfrozen object with frozen internals.

The attached patch implements this support and fixes related issues in set and delegate in stdlib.

---Files--------------------------------
initialize-clone-freeze-false.patch (8.1 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>