diff options
| author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2024-03-27 12:53:43 +0900 |
|---|---|---|
| committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2024-03-27 13:26:22 +0900 |
| commit | 16c18eafb579cf2263c7e0057c4c81358fe62075 (patch) | |
| tree | 04822f8d14130b37f8e38dd4462e341f9beee1a9 | |
| parent | 0c114dfcc79cb4690705ec88ebf9147e5c03702d (diff) | |
Revert "Mark iseq structs with rb_gc_mark_movable"
This reverts commit a31ca3500d995b6706f94ff72166d699c5faeb27 which
broke debug inspector API.
| -rw-r--r-- | iseq.c | 30 |
1 files changed, 9 insertions, 21 deletions
@@ -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); |
