Commit 25045345 authored by h2so5's avatar h2so5

clone Class/Module rightly

parent e0e5aebc
......@@ -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:
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:
......
......@@ -359,3 +359,13 @@ assert('singleton tests') do
end
end
end
assert('clone Class') do
class Foo
def func
true
end
end
Foo.clone.new.func
end
......@@ -503,3 +503,17 @@ assert('Issue 1467') do
C1.new
C2.new
end
assert('clone Module') do
module M1
def foo
true
end
end
class B
include M1.clone
end
B.new.foo
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment