summaryrefslogtreecommitdiff
path: root/lib/set.rb
diff options
context:
space:
mode:
authorJeremy Evans <code@jeremyevans.net>2019-09-23 16:03:15 -0700
committerJeremy Evans <code@jeremyevans.net>2020-03-22 09:30:07 -0700
commit4f7b435c955792af780fe9e94f98d3dde839e056 (patch)
treee6d3a5433aca7a48b79eba02056cc905dc3c88c4 /lib/set.rb
parent095e9f57af30fc286ba66557d86f080003ab6d5a (diff)
Support obj.clone(freeze: true) for freezing clone
This freezes the clone even if the receiver is not frozen. It is only for consistency with freeze: false not freezing the clone even if the receiver is frozen. Because Object#clone is now partially implemented in Ruby and not fully implemented in C, freeze: nil must be supported to provide the default behavior of only freezing the clone if the receiver is frozen. This requires modifying delegate and set, to set freeze: nil instead of freeze: true as the keyword parameter for initialize_clone. Those are the two libraries in stdlib that override initialize_clone. Implements [Feature #16175]
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/2969
Diffstat (limited to 'lib/set.rb')
-rw-r--r--lib/set.rb2
1 files changed, 1 insertions, 1 deletions
diff --git a/lib/set.rb b/lib/set.rb
index 684115539b..b8ab6ab172 100644
--- a/lib/set.rb
+++ b/lib/set.rb
@@ -137,7 +137,7 @@ class Set
end
# Clone internal hash.
- def initialize_clone(orig, freeze: true)
+ def initialize_clone(orig, freeze: nil)
super
@hash = orig.instance_variable_get(:@hash).clone(freeze: freeze)
end