diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-05-22 14:12:03 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-05-22 14:12:03 +0900 |
| commit | fc557085d8b5e806232e3edca520d57877cb77dc (patch) | |
| tree | 2a3d021c8d1bfec31d09989d91366ea92f048cc3 | |
| parent | ccaf3e35aaaadbe31a85c6be080a5ca01797bcff (diff) | |
| parent | 1f3d7e939f19ed19a3d45b269d66c1ad5606faaf (diff) | |
| download | mruby-fc557085d8b5e806232e3edca520d57877cb77dc.tar.gz mruby-fc557085d8b5e806232e3edca520d57877cb77dc.zip | |
Merge pull request #2304 from ksss/class-new
Class.new do not call `class_eval'
| -rw-r--r-- | src/class.c | 2 | ||||
| -rw-r--r-- | test/t/class.rb | 7 |
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 |
