mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
committed by
Yukihiro "Matz" Matsumoto
parent
88604e39ac
commit
451985d44b
@@ -71,6 +71,9 @@ MRuby::GemBox.new do |conf|
|
||||
# Use Kernel module extension
|
||||
conf.gem :core => "mruby-kernel-ext"
|
||||
|
||||
# Use extensional Module class
|
||||
conf.gem :core => "mruby-module-ext"
|
||||
|
||||
# Use mruby-compiler to build other mrbgems
|
||||
conf.gem :core => "mruby-compiler"
|
||||
end
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
MRuby::Gem::Specification.new('mruby-module-ext') do |spec|
|
||||
spec.license = 'MIT'
|
||||
spec.author = 'mruby developers'
|
||||
spec.summary = 'extensional Module class'
|
||||
end
|
||||
@@ -0,0 +1,23 @@
|
||||
#include "mruby.h"
|
||||
#include "mruby/class.h"
|
||||
#include "mruby/string.h"
|
||||
|
||||
static mrb_value
|
||||
mrb_mod_name(mrb_state *mrb, mrb_value self)
|
||||
{
|
||||
mrb_value name = mrb_class_path(mrb, mrb_class_ptr(self));
|
||||
return mrb_nil_p(name)? name : mrb_str_dup(mrb, name);
|
||||
}
|
||||
|
||||
void
|
||||
mrb_mruby_module_ext_gem_init(mrb_state *mrb)
|
||||
{
|
||||
struct RClass *mod = mrb->module_class;
|
||||
|
||||
mrb_define_method(mrb, mod, "name", mrb_mod_name, MRB_ARGS_NONE());
|
||||
}
|
||||
|
||||
void
|
||||
mrb_mruby_module_ext_gem_final(mrb_state *mrb)
|
||||
{
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
assert 'Module#name' do
|
||||
module A
|
||||
class B
|
||||
end
|
||||
end
|
||||
|
||||
assert_nil A::B.singleton_class.name
|
||||
assert_equal 'Fixnum', Fixnum.name
|
||||
assert_equal 'A::B', A::B.name
|
||||
end
|
||||
Reference in New Issue
Block a user