summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-class-ext
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-07-19 09:08:11 +0900
committerGitHub <[email protected]>2017-07-19 09:08:11 +0900
commitca2cfc6fe91c60c7e8014dec1f36dda719c67ba1 (patch)
treef469ecb5696628f4e302fdfc5c9a406bdd7d6646 /mrbgems/mruby-class-ext
parent645b0fb58c9dda7d15cc42748d74d791380444db (diff)
parentdd52b881017ae2c39d8afeed4f0560eff19031da (diff)
downloadmruby-ca2cfc6fe91c60c7e8014dec1f36dda719c67ba1.tar.gz
mruby-ca2cfc6fe91c60c7e8014dec1f36dda719c67ba1.zip
Merge pull request #3746 from christopheraue/mod_singleton_class_p
Implemented Module#singleton_class?
Diffstat (limited to 'mrbgems/mruby-class-ext')
-rw-r--r--mrbgems/mruby-class-ext/src/class.c7
-rw-r--r--mrbgems/mruby-class-ext/test/module.rb10
2 files changed, 17 insertions, 0 deletions
diff --git a/mrbgems/mruby-class-ext/src/class.c b/mrbgems/mruby-class-ext/src/class.c
index 8ca7d66c2..5506c4829 100644
--- a/mrbgems/mruby-class-ext/src/class.c
+++ b/mrbgems/mruby-class-ext/src/class.c
@@ -9,12 +9,19 @@ mrb_mod_name(mrb_state *mrb, mrb_value self)
return mrb_nil_p(name)? name : mrb_str_dup(mrb, name);
}
+static mrb_value
+mrb_mod_singleton_class_p(mrb_state *mrb, mrb_value self)
+{
+ return mrb_bool_value(mrb_type(self) == MRB_TT_SCLASS);
+}
+
void
mrb_mruby_class_ext_gem_init(mrb_state *mrb)
{
struct RClass *mod = mrb->module_class;
mrb_define_method(mrb, mod, "name", mrb_mod_name, MRB_ARGS_NONE());
+ mrb_define_method(mrb, mod, "singleton_class?", mrb_mod_singleton_class_p, MRB_ARGS_NONE());
}
void
diff --git a/mrbgems/mruby-class-ext/test/module.rb b/mrbgems/mruby-class-ext/test/module.rb
index cfe6a540f..65abde108 100644
--- a/mrbgems/mruby-class-ext/test/module.rb
+++ b/mrbgems/mruby-class-ext/test/module.rb
@@ -22,3 +22,13 @@ assert 'Module#name' do
assert_nil mod.name
assert_nil cls.name
end
+
+assert 'Module#singleton_class?' do
+ mod = Module.new
+ cls = Class.new
+ scl = cls.singleton_class
+
+ assert_false mod.singleton_class?
+ assert_false cls.singleton_class?
+ assert_true scl.singleton_class?
+end