summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/class.c2
-rw-r--r--test/t/class.rb7
2 files changed, 7 insertions, 2 deletions
diff --git a/src/class.c b/src/class.c
index 44d415f0c..d336dcd0f 100644
--- a/src/class.c
+++ b/src/class.c
@@ -1105,7 +1105,7 @@ mrb_class_new_class(mrb_state *mrb, mrb_value cv)
}
new_class = mrb_obj_value(mrb_class_new(mrb, mrb_class_ptr(super)));
if (!mrb_nil_p(blk)) {
- mrb_funcall_with_block(mrb, new_class, mrb_intern_lit(mrb, "class_eval"), 0, NULL, blk);
+ mrb_yield_with_class(mrb, blk, 1, &new_class, new_class, mrb_class_ptr(new_class));
}
mrb_funcall(mrb, super, "inherited", 1, new_class);
return new_class;
diff --git a/test/t/class.rb b/test/t/class.rb
index bea20ee24..821259c5e 100644
--- a/test/t/class.rb
+++ b/test/t/class.rb
@@ -226,8 +226,13 @@ assert('Class Dup 2') do
assert_equal(Module, M.dup.class)
end
-assert('Class new') do
+assert('Class.new') do
assert_equal(Class, Class.new.class)
+ a = []
+ klass = Class.new do |c|
+ a << c
+ end
+ assert_equal([klass], a)
end
assert('class to return the last value') do