diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-09-04 06:49:05 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-09-04 06:49:05 +0900 |
| commit | 8a5d783f2ee5ddccdb2b8de2edf5dc6b5ba1c3fc (patch) | |
| tree | 0e74cf052363590b5e66727e7d10705edabe4188 /src/class.c | |
| parent | 5d7e4957e067bc88f412904161efea05fc10022e (diff) | |
| download | mruby-8a5d783f2ee5ddccdb2b8de2edf5dc6b5ba1c3fc.tar.gz mruby-8a5d783f2ee5ddccdb2b8de2edf5dc6b5ba1c3fc.zip | |
Call `initialize` only when it's not empty.
Diffstat (limited to 'src/class.c')
| -rw-r--r-- | src/class.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/class.c b/src/class.c index df1d3aebe..e3888001b 100644 --- a/src/class.c +++ b/src/class.c @@ -279,7 +279,7 @@ mrb_class_inherited(mrb_state *mrb, struct RClass *super, struct RClass *klass) mid = mrb_intern_lit(mrb, "inherited"); if (!mrb_func_basic_p(mrb, s, mid, mrb_bob_init)) { mrb_value c = mrb_obj_value(klass); - mrb_funcall_argv(mrb, mrb_obj_value(super), mid, 1, &c); + mrb_funcall_argv(mrb, s, mid, 1, &c); } } @@ -1530,10 +1530,14 @@ mrb_instance_new(mrb_state *mrb, mrb_value cv) mrb_value obj, blk; mrb_value *argv; mrb_int argc; + mrb_sym init; mrb_get_args(mrb, "*&", &argv, &argc, &blk); obj = mrb_instance_alloc(mrb, cv); - mrb_funcall_with_block(mrb, obj, mrb_intern_lit(mrb, "initialize"), argc, argv, blk); + init = mrb_intern_lit(mrb, "initialize"); + if (!mrb_func_basic_p(mrb, obj, init, mrb_bob_init)) { + mrb_funcall_with_block(mrb, obj, init, argc, argv, blk); + } return obj; } |
