From f868d7d357d7456f15fa4c1d0219784aa1c8c2c6 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Fri, 24 Jul 2020 13:13:06 +0900 Subject: Change the logic to calculate object (`iv_tbl`) size; #5045 --- src/variable.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'src/variable.c') diff --git a/src/variable.c b/src/variable.c index 8b4bdf0ce..f05fcee90 100644 --- a/src/variable.c +++ b/src/variable.c @@ -1131,9 +1131,16 @@ mrb_class_find_path(mrb_state *mrb, struct RClass *c) mrb_int mrb_obj_iv_tbl_memsize(mrb_state* mrb, mrb_value obj) { - size_t ivsize = iv_size(mrb, mrb_obj_ptr(obj)->iv); - size_t ivsegs = (ivsize + MRB_IV_SEGMENT_SIZE - 1) / MRB_IV_SEGMENT_SIZE; - return sizeof(iv_tbl) + (sizeof(segment) * ivsegs); + size_t nseg = 0; + segment *seg; + + if (mrb_obj_ptr(obj)->iv == NULL) return 0; + seg = mrb_obj_ptr(obj)->iv->rootseg; + while (seg) { + nseg++; + seg = seg->next; + } + return sizeof(iv_tbl) + sizeof(segment)*nseg; } #define identchar(c) (ISALNUM(c) || (c) == '_' || !ISASCII(c)) -- cgit v1.2.3