зеркало из https://github.com/github/ruby.git
Set cloned flag after checked if copiable
This commit is contained in:
Родитель
478dc67cf5
Коммит
28cd254b49
9
class.c
9
class.c
|
@ -354,16 +354,17 @@ static void ensure_origin(VALUE klass);
|
|||
VALUE
|
||||
rb_mod_init_copy(VALUE clone, VALUE orig)
|
||||
{
|
||||
if (RB_TYPE_P(clone, T_CLASS)) {
|
||||
class_init_copy_check(clone, orig);
|
||||
}
|
||||
if (!OBJ_INIT_COPY(clone, orig)) return clone;
|
||||
|
||||
/* cloned flag is refer at constant inline cache
|
||||
* see vm_get_const_key_cref() in vm_insnhelper.c
|
||||
*/
|
||||
FL_SET(clone, RCLASS_CLONED);
|
||||
FL_SET(orig , RCLASS_CLONED);
|
||||
|
||||
if (RB_TYPE_P(clone, T_CLASS)) {
|
||||
class_init_copy_check(clone, orig);
|
||||
}
|
||||
if (!OBJ_INIT_COPY(clone, orig)) return clone;
|
||||
if (!FL_TEST(CLASS_OF(clone), FL_SINGLETON)) {
|
||||
RBASIC_SET_CLASS(clone, rb_singleton_class_clone(orig));
|
||||
rb_singleton_class_attached(RBASIC(clone)->klass, (VALUE)clone);
|
||||
|
|
Загрузка…
Ссылка в новой задаче