Copy instance variables to regexp from marshaled data

`rb_ivar_foreach` disallows `ST_DELETE`.
This commit is contained in:
Nobuyoshi Nakada 2023-06-20 14:02:40 +09:00
Родитель 2dfbe91cad
Коммит 9ac070d0ff
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 7CD2805BFA3770C6
1 изменённых файлов: 1 добавлений и 15 удалений

Просмотреть файл

@ -1803,20 +1803,6 @@ r_object0(struct load_arg *arg, bool partial, int *ivp, VALUE extmod)
return r_object_for(arg, partial, ivp, extmod, type);
}
static int
r_move_ivar(st_data_t k, st_data_t v, st_data_t d)
{
ID key = (ID)k;
VALUE value = (VALUE)v;
VALUE dest = (VALUE)d;
if (rb_is_instance_id(key)) {
rb_ivar_set(dest, key, value);
return ST_DELETE;
}
return ST_CONTINUE;
}
static VALUE
r_object_for(struct load_arg *arg, bool partial, int *ivp, VALUE extmod, int type)
{
@ -2034,7 +2020,7 @@ r_object_for(struct load_arg *arg, bool partial, int *ivp, VALUE extmod, int typ
rb_str_set_len(str, dst - ptr);
}
VALUE regexp = rb_reg_new_str(str, options);
rb_ivar_foreach(str, r_move_ivar, regexp);
r_copy_ivar(regexp, str);
v = r_entry0(regexp, idx, arg);
v = r_leave(v, arg, partial);