From 25045345c9ae9f456b27c9fbc63caee6372e16d4 Mon Sep 17 00:00:00 2001 From: h2so5 Date: Sat, 25 Jan 2014 07:47:15 +0900 Subject: clone Class/Module rightly --- src/kernel.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/kernel.c b/src/kernel.c index 15567a65f..e811b394c 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -293,13 +293,23 @@ mrb_singleton_class_clone(mrb_state *mrb, mrb_value obj) } } +static void +copy_class(mrb_state *mrb, mrb_value dst, mrb_value src) +{ + struct RClass *dc = mrb_class_ptr(dst); + struct RClass *sc = mrb_class_ptr(src); + dc->mt = kh_copy(mt, mrb, sc->mt); + dc->super = sc->super; +} + static void init_copy(mrb_state *mrb, mrb_value dest, mrb_value obj) { - switch (mrb_type(obj)) { - case MRB_TT_OBJECT: + switch (mrb_type(obj)) { case MRB_TT_CLASS: case MRB_TT_MODULE: + copy_class(mrb, dest, obj); + case MRB_TT_OBJECT: case MRB_TT_SCLASS: case MRB_TT_HASH: case MRB_TT_DATA: -- cgit v1.2.3