diff options
| author | h2so5 <[email protected]> | 2014-01-25 07:47:15 +0900 |
|---|---|---|
| committer | h2so5 <[email protected]> | 2014-01-25 07:47:15 +0900 |
| commit | 25045345c9ae9f456b27c9fbc63caee6372e16d4 (patch) | |
| tree | 3240f552ea496ffc3a32f5e7635fbb37691ba526 /src/kernel.c | |
| parent | e0e5aebc66833dfe55b362678032f7e0e4a265d7 (diff) | |
| download | mruby-25045345c9ae9f456b27c9fbc63caee6372e16d4.tar.gz mruby-25045345c9ae9f456b27c9fbc63caee6372e16d4.zip | |
clone Class/Module rightly
Diffstat (limited to 'src/kernel.c')
| -rw-r--r-- | src/kernel.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/kernel.c b/src/kernel.c index 15567a65f..e811b394c 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -294,12 +294,22 @@ 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: |
