summaryrefslogtreecommitdiffhomepage
path: root/mrbgems
diff options
context:
space:
mode:
authorKOBAYASHI Shuji <[email protected]>2019-04-25 19:48:40 +0900
committerKOBAYASHI Shuji <[email protected]>2019-04-25 19:48:40 +0900
commit8fa3995a1a02e9014ce01351e0260bec20ceefd7 (patch)
treed2cc4cec5af07f02cb0e7f46c0b242e9d46fe37a /mrbgems
parente5799b5d40a5c25beab5db881f8d6315720b987c (diff)
downloadmruby-8fa3995a1a02e9014ce01351e0260bec20ceefd7.tar.gz
mruby-8fa3995a1a02e9014ce01351e0260bec20ceefd7.zip
Singleton class of frozen object should be frozen
Before this patch: p (class << Object.new.freeze; self end).frozen? #=> false sc = class << (o=Object.new); self end; o.freeze; p sc.frozen? #=> false After this patch / Ruby: p (class << Object.new.freeze; self end).frozen? #=> true sc = class << (o=Object.new); self end; o.freeze; p sc.frozen? #=> true
Diffstat (limited to 'mrbgems')
-rw-r--r--mrbgems/mruby-metaprog/test/metaprog.rb16
1 files changed, 16 insertions, 0 deletions
diff --git a/mrbgems/mruby-metaprog/test/metaprog.rb b/mrbgems/mruby-metaprog/test/metaprog.rb
index 0abeb90a6..3aa1d8732 100644
--- a/mrbgems/mruby-metaprog/test/metaprog.rb
+++ b/mrbgems/mruby-metaprog/test/metaprog.rb
@@ -122,6 +122,22 @@ assert('Kernel#define_singleton_method') do
assert_equal :singleton_method_ok, o.test_method
end
+assert('Kernel#singleton_class') do
+ o1 = Object.new
+ assert_same(o1.singleton_class, class << o1; self end)
+
+ o2 = Object.new
+ sc2 = class << o2; self end
+ assert_same(o2.singleton_class, sc2)
+
+ o3 = Object.new
+ sc3 = o3.singleton_class
+ o3.freeze
+ assert_predicate(sc3, :frozen?)
+
+ assert_predicate(Object.new.freeze.singleton_class, :frozen?)
+end
+
def labeled_module(name, &block)
Module.new do
(class <<self; self end).class_eval do