diff options
-rw-r--r-- | eval.c | 15 | ||||
-rw-r--r-- | test/ruby/test_class.rb | 6 |
2 files changed, 19 insertions, 2 deletions
@@ -412,8 +412,21 @@ rb_frozen_class_p(VALUE klass) if (OBJ_FROZEN(klass)) { const char *desc; - if (FL_TEST(klass, FL_SINGLETON)) + if (FL_TEST(klass, FL_SINGLETON)) { desc = "object"; + klass = rb_ivar_get(klass, id__attached__); + if (!SPECIAL_CONST_P(klass)) { + switch (BUILTIN_TYPE(klass)) { + case T_MODULE: + case T_ICLASS: + desc = "Module"; + break; + case T_CLASS: + desc = "Class"; + break; + } + } + } else { switch (BUILTIN_TYPE(klass)) { case T_MODULE: diff --git a/test/ruby/test_class.rb b/test/ruby/test_class.rb index 9a4cdb0f58..7259594f8e 100644 --- a/test/ruby/test_class.rb +++ b/test/ruby/test_class.rb @@ -389,8 +389,12 @@ class TestClass < Test::Unit::TestCase obj = Object.new c = obj.singleton_class obj.freeze - assert_raise(RuntimeError, /frozen object/) { + assert_raise_with_message(RuntimeError, /frozen object/) { c.class_eval {def f; end} } + c = Class.new.freeze + assert_raise_with_message(RuntimeError, /frozen Class/) { + def c.f; end + } end end |