2 #include "mruby/class.h"
3 #include "mruby/string.h"
6 mrb_mod_name(mrb_state *mrb, mrb_value self)
8 mrb_value name = mrb_class_path(mrb, mrb_class_ptr(self));
9 return mrb_nil_p(name)? name : mrb_str_dup(mrb, name);
13 mrb_mod_singleton_class_p(mrb_state *mrb, mrb_value self)
15 return mrb_bool_value(mrb_type(self) == MRB_TT_SCLASS);
20 * module_exec(arg...) {|var...| block } -> obj
21 * class_exec(arg...) {|var...| block } -> obj
23 * Evaluates the given block in the context of the
24 * class/module. The method defined in the block will belong
25 * to the receiver. Any arguments passed to the method will be
26 * passed to the block. This can be used if the block needs to
27 * access instance variables.
32 * def hello() "Hello there!" end
34 * puts Thing.new.hello()
38 mrb_mod_module_exec(mrb_state *mrb, mrb_value self)
40 const mrb_value *argv;
44 mrb_get_args(mrb, "*&", &argv, &argc, &blk);
47 mrb_raise(mrb, E_ARGUMENT_ERROR, "no block given");
50 mrb->c->ci->target_class = mrb_class_ptr(self);
51 return mrb_yield_cont(mrb, blk, self, argc, argv);
55 mrb_mruby_class_ext_gem_init(mrb_state *mrb)
57 struct RClass *mod = mrb->module_class;
59 mrb_define_method(mrb, mod, "name", mrb_mod_name, MRB_ARGS_NONE());
60 mrb_define_method(mrb, mod, "singleton_class?", mrb_mod_singleton_class_p, MRB_ARGS_NONE());
61 mrb_define_method(mrb, mod, "module_exec", mrb_mod_module_exec, MRB_ARGS_ANY()|MRB_ARGS_BLOCK());
62 mrb_define_method(mrb, mod, "class_exec", mrb_mod_module_exec, MRB_ARGS_ANY()|MRB_ARGS_BLOCK());
66 mrb_mruby_class_ext_gem_final(mrb_state *mrb)