diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2020-07-24 13:13:06 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2020-07-24 13:13:06 +0900 |
| commit | f868d7d357d7456f15fa4c1d0219784aa1c8c2c6 (patch) | |
| tree | 31b96f6d13c0e6130c46ff8bca0aed85b4ab5155 /src/variable.c | |
| parent | c69ca2c7f824d48203a49f194203db93b64994bf (diff) | |
| download | mruby-f868d7d357d7456f15fa4c1d0219784aa1c8c2c6.tar.gz mruby-f868d7d357d7456f15fa4c1d0219784aa1c8c2c6.zip | |
Change the logic to calculate object (`iv_tbl`) size; #5045
Diffstat (limited to 'src/variable.c')
| -rw-r--r-- | src/variable.c | 13 |
1 files changed, 10 insertions, 3 deletions
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)) |
