Revert "Mark iseq structs with rb_gc_mark_movable"

This reverts commit a31ca3500d which
broke debug inspector API.
This commit is contained in:
Nobuyoshi Nakada 2024-03-27 12:53:43 +09:00
Родитель 0c114dfcc7
Коммит 16c18eafb5
1 изменённых файлов: 9 добавлений и 21 удалений

30
iseq.c
Просмотреть файл

@ -1386,30 +1386,18 @@ rb_iseq_remove_coverage_all(void)
static void
iseqw_mark(void *ptr)
{
rb_gc_mark_movable(*(VALUE *)ptr);
rb_gc_mark((VALUE)ptr);
}
static size_t
iseqw_memsize(const void *ptr)
{
return rb_iseq_memsize(*(const rb_iseq_t **)ptr);
}
static void
iseqw_ref_update(void *ptr)
{
VALUE *vptr = ptr;
*vptr = rb_gc_location(*vptr);
return rb_iseq_memsize((const rb_iseq_t *)ptr);
}
static const rb_data_type_t iseqw_data_type = {
"T_IMEMO/iseq",
{
iseqw_mark,
RUBY_TYPED_DEFAULT_FREE,
iseqw_memsize,
iseqw_ref_update,
},
{iseqw_mark, NULL, iseqw_memsize,},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY|RUBY_TYPED_WB_PROTECTED
};
@ -1424,9 +1412,11 @@ iseqw_new(const rb_iseq_t *iseq)
return iseq->wrapper;
}
else {
rb_iseq_t **ptr;
VALUE obj = TypedData_Make_Struct(rb_cISeq, rb_iseq_t *, &iseqw_data_type, ptr);
RB_OBJ_WRITE(obj, ptr, iseq);
union { const rb_iseq_t *in; void *out; } deconst;
VALUE obj;
deconst.in = iseq;
obj = TypedData_Wrap_Struct(rb_cISeq, &iseqw_data_type, deconst.out);
RB_OBJ_WRITTEN(obj, Qundef, iseq);
/* cache a wrapper object */
RB_OBJ_WRITE((VALUE)iseq, &iseq->wrapper, obj);
@ -1750,9 +1740,7 @@ iseqw_s_compile_option_get(VALUE self)
static const rb_iseq_t *
iseqw_check(VALUE iseqw)
{
rb_iseq_t **iseq_ptr;
TypedData_Get_Struct(iseqw, rb_iseq_t *, &iseqw_data_type, iseq_ptr);
rb_iseq_t *iseq = *iseq_ptr;
rb_iseq_t *iseq = DATA_PTR(iseqw);
if (!ISEQ_BODY(iseq)) {
rb_ibf_load_iseq_complete(iseq);