summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2019-08-17 09:02:47 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2019-08-17 09:02:47 +0900
commit0286a7f70954850d767d7708ee6ed8dc1d6de090 (patch)
treebe0f1899873b68f9ea9a6af1301b4c8588d59988
parent99715a2e623e6baac5a16f2112282816a4d4c6a1 (diff)
downloadmruby-0286a7f70954850d767d7708ee6ed8dc1d6de090.tar.gz
mruby-0286a7f70954850d767d7708ee6ed8dc1d6de090.zip
Avoid `mrb_funcall` from `Class#new` when no overloading.
-rw-r--r--src/class.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/class.c b/src/class.c
index e4fda18fc..1aa1bf0e5 100644
--- a/src/class.c
+++ b/src/class.c
@@ -1537,7 +1537,10 @@ mrb_class_new_class(mrb_state *mrb, mrb_value cv)
}
new_class = mrb_obj_value(mrb_class_new(mrb, mrb_class_ptr(super)));
mid = mrb_intern_lit(mrb, "initialize");
- if (!mrb_func_basic_p(mrb, new_class, mid, mrb_bob_init)) {
+ if (mrb_func_basic_p(mrb, new_class, mid, mrb_class_initialize)) {
+ mrb_class_initialize(mrb, new_class);
+ }
+ else {
mrb_funcall_with_block(mrb, new_class, mid, n, &super, blk);
}
mrb_class_inherited(mrb, mrb_class_ptr(super), mrb_class_ptr(new_class));