diff --git a/mrbgems/mruby-class-ext/src/class.c b/mrbgems/mruby-class-ext/src/class.c index 0155b2713..67dbc373b 100644 --- a/mrbgems/mruby-class-ext/src/class.c +++ b/mrbgems/mruby-class-ext/src/class.c @@ -4,6 +4,7 @@ #include #include #include +#include #include static mrb_value @@ -44,18 +45,7 @@ mod_singleton_class_p(mrb_state *mrb, mrb_value self) static mrb_value mod_module_exec(mrb_state *mrb, mrb_value self) { - const mrb_value *argv; - mrb_int argc; - mrb_value blk; - - mrb_get_args(mrb, "*&!", &argv, &argc, &blk); - - struct RClass *c = mrb_class_ptr(self); - if (mrb->c->ci->cci > 0) { - return mrb_yield_with_class(mrb, blk, argc, argv, self, c); - } - mrb_vm_ci_target_class_set(mrb->c->ci, c); - return mrb_yield_cont(mrb, blk, self, argc, argv); + return mrb_object_exec(mrb, self, mrb_class_ptr(self)); } struct subclass_args { diff --git a/mrbgems/mruby-class-ext/test/class.rb b/mrbgems/mruby-class-ext/test/class.rb index fba2a19f9..65b16bb28 100644 --- a/mrbgems/mruby-class-ext/test/class.rb +++ b/mrbgems/mruby-class-ext/test/class.rb @@ -27,3 +27,20 @@ assert 'Class#attached_object' do assert_raise(TypeError){TrueClass.attached_object} assert_raise(TypeError){NilClass.attached_object} end + +assert 'Class#class_exec' do + c = Class.new + class << c + def index + 12345 + end + end + c.class_exec do + def index + 54321 + end + end + + assert_equal 12345, c.index + assert_equal 54321, c.new.index +end