summaryrefslogtreecommitdiffhomepage
path: root/src/kernel.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2020-06-25 17:57:31 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2020-10-12 16:21:21 +0900
commit11955ca1a18f2613c62c8cd48c2d8ac0a155dc73 (patch)
treea1b5f8be360c8ed67e0697681abc9fa3812e19d3 /src/kernel.c
parent52dd0a8cd79974e4394aaae2aa6ca6bb616ecf55 (diff)
downloadmruby-11955ca1a18f2613c62c8cd48c2d8ac0a155dc73.tar.gz
mruby-11955ca1a18f2613c62c8cd48c2d8ac0a155dc73.zip
Call `#initialize_copy` from `init_copy` only if it's redefined.
Diffstat (limited to 'src/kernel.c')
-rw-r--r--src/kernel.c6
1 files changed, 5 insertions, 1 deletions
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 */