summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2013-10-30 17:28:32 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2013-10-30 17:28:32 +0900
commitabe6db945491105ac265884990b73af0a073d16d (patch)
tree33b2d105a12286bcfb127a0e7ad306bccc242330
parentad4ce2ba4e7dd3336ecee986f526a8ed0c2f72d5 (diff)
parent12e00f9238bf5164df98551db029a581fd25d54e (diff)
downloadmruby-abe6db945491105ac265884990b73af0a073d16d.tar.gz
mruby-abe6db945491105ac265884990b73af0a073d16d.zip
resolve conflict #1552
-rw-r--r--src/class.c15
-rw-r--r--test/t/class.rb10
2 files changed, 18 insertions, 7 deletions
diff --git a/src/class.c b/src/class.c
index 60c9ced19..a07cf17e4 100644
--- a/src/class.c
+++ b/src/class.c
@@ -1080,15 +1080,18 @@ mrb_obj_new(mrb_state *mrb, struct RClass *c, int argc, mrb_value *argv)
static mrb_value
mrb_class_new_class(mrb_state *mrb, mrb_value cv)
{
- mrb_value super;
- struct RClass *new_class;
+ mrb_value super, blk;
+ mrb_value new_class;
- if (mrb_get_args(mrb, "|C", &super) == 0) {
+ if (mrb_get_args(mrb, "|C&", &super, &blk) == 0) {
super = mrb_obj_value(mrb->object_class);
}
- new_class = mrb_class_new(mrb, mrb_class_ptr(super));
- mrb_funcall(mrb, super, "inherited", 1, mrb_obj_value(new_class));
- return mrb_obj_value(new_class);
+ 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_cstr(mrb, "class_eval"), 0, NULL, blk);
+ }
+ mrb_funcall(mrb, super, "inherited", 1, new_class);
+ return new_class;
}
mrb_value
diff --git a/test/t/class.rb b/test/t/class.rb
index 403a95f10..d6c0f1c9a 100644
--- a/test/t/class.rb
+++ b/test/t/class.rb
@@ -9,7 +9,15 @@ assert('Class superclass', '15.2.3.2') do
assert_equal(Module, Class.superclass)
end
-# Class#initialize '15.2.3.3.1' is tested in Class#new
+assert('Class#initialize', '15.2.3.3.1') do
+ c = Class.new do
+ def test
+ :test
+ end
+ end.new
+
+ assert_equal(c.test, :test)
+end
assert('Class#initialize_copy', '15.2.3.3.2') do
class TestClass