From 11955ca1a18f2613c62c8cd48c2d8ac0a155dc73 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Thu, 25 Jun 2020 17:57:31 +0900 Subject: Call `#initialize_copy` from `init_copy` only if it's redefined. --- src/kernel.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/kernel.c b/src/kernel.c index e4948143d..020bce226 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -283,6 +283,8 @@ copy_class(mrb_state *mrb, mrb_value dst, mrb_value src) MRB_SET_INSTANCE_TT(dc, MRB_INSTANCE_TT(sc)); } +static mrb_value mrb_obj_init_copy(mrb_state *mrb, mrb_value self); + static void init_copy(mrb_state *mrb, mrb_value dest, mrb_value obj) { @@ -310,7 +312,9 @@ init_copy(mrb_state *mrb, mrb_value dest, mrb_value obj) default: break; } - mrb_funcall_id(mrb, dest, MRB_SYM(initialize_copy), 1, obj); + if (!mrb_func_basic_p(mrb, dest, MRB_SYM(initialize_copy), mrb_obj_init_copy)) { + mrb_funcall_id(mrb, dest, MRB_SYM(initialize_copy), 1, obj); + } } /* 15.3.1.3.8 */ -- cgit v1.2.3