diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-10-30 17:28:32 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-10-30 17:28:32 +0900 |
| commit | abe6db945491105ac265884990b73af0a073d16d (patch) | |
| tree | 33b2d105a12286bcfb127a0e7ad306bccc242330 /src/class.c | |
| parent | ad4ce2ba4e7dd3336ecee986f526a8ed0c2f72d5 (diff) | |
| parent | 12e00f9238bf5164df98551db029a581fd25d54e (diff) | |
| download | mruby-abe6db945491105ac265884990b73af0a073d16d.tar.gz mruby-abe6db945491105ac265884990b73af0a073d16d.zip | |
resolve conflict #1552
Diffstat (limited to 'src/class.c')
| -rw-r--r-- | src/class.c | 15 |
1 files changed, 9 insertions, 6 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 |
