Feature #7609 ยป singleton_class_p.patch
| object.c | ||
|---|---|---|
|     return rb_cvar_defined(obj, id); | ||
| } | ||
| static VALUE | ||
| rb_mod_singleton_p(VALUE klass) | ||
| { | ||
|     if (RB_TYPE_P(klass, T_CLASS) && FL_TEST(klass, FL_SINGLETON)) | ||
| 	return Qtrue; | ||
|     return Qfalse; | ||
| } | ||
| static struct conv_method_tbl { | ||
|     const char *method; | ||
|     ID id; | ||
| ... | ... | |
|     rb_define_method(rb_cModule, "class_variable_defined?", rb_mod_cvar_defined, 1); | ||
|     rb_define_method(rb_cModule, "public_constant", rb_mod_public_constant, -1); /* in variable.c */ | ||
|     rb_define_method(rb_cModule, "private_constant", rb_mod_private_constant, -1); /* in variable.c */ | ||
|     rb_define_method(rb_cModule, "singleton_class?", rb_mod_singleton_p, 0); | ||
|     rb_define_method(rb_cClass, "allocate", rb_obj_alloc, 0); | ||
|     rb_define_method(rb_cClass, "new", rb_class_new_instance, -1); | ||
| test/ruby/test_class.rb | ||
|---|---|---|
|       EOF | ||
|     end | ||
|   end | ||
|   def test_singleton_class_p | ||
|     assert_predicate(self.singleton_class, :singleton_class?) | ||
|     assert_not_predicate(self.class, :singleton_class?) | ||
|   end | ||
| end | ||