summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-os-memsize/src
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2020-08-18 21:37:16 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2020-10-12 16:21:47 +0900
commit18e3d39ee23389d9a7955149c09b6de026804ca3 (patch)
tree2448219106417e09af82e72e8c017b5fb298c441 /mrbgems/mruby-os-memsize/src
parent55163a8a0a5737e9113f16d0f03b7ab4258706ba (diff)
downloadmruby-18e3d39ee23389d9a7955149c09b6de026804ca3.tar.gz
mruby-18e3d39ee23389d9a7955149c09b6de026804ca3.zip
Fixed wrong size calculation for `memsize_of()`.
Diffstat (limited to 'mrbgems/mruby-os-memsize/src')
-rw-r--r--mrbgems/mruby-os-memsize/src/memsize.c22
1 files changed, 8 insertions, 14 deletions
diff --git a/mrbgems/mruby-os-memsize/src/memsize.c b/mrbgems/mruby-os-memsize/src/memsize.c
index 625ffb258..359c2683c 100644
--- a/mrbgems/mruby-os-memsize/src/memsize.c
+++ b/mrbgems/mruby-os-memsize/src/memsize.c
@@ -108,17 +108,6 @@ os_memsize_of_object(mrb_state* mrb, mrb_value obj)
if(!MRB_PROC_CFUNC_P(proc)) size += os_memsize_of_irep(mrb, proc->body.irep);
break;
}
- case MRB_TT_DATA:
- size += mrb_objspace_page_slot_size();
- break;
-#ifndef MRB_NO_FLOAT
- case MRB_TT_FLOAT:
-#ifdef MRB_WORD_BOXING
- size += mrb_objspace_page_slot_size() +
- sizeof(struct RFloat);
-#endif
- break;
-#endif
case MRB_TT_RANGE:
#ifndef MRB_RANGE_EMBED
size += mrb_objspace_page_slot_size() +
@@ -131,20 +120,25 @@ os_memsize_of_object(mrb_state* mrb, mrb_value obj)
ptrdiff_t ci_size = f->cxt->ciend - f->cxt->cibase;
size += mrb_objspace_page_slot_size() +
- sizeof(struct RFiber) +
sizeof(struct mrb_context) +
sizeof(mrb_value) * stack_size +
sizeof(mrb_callinfo) * ci_size;
break;
}
- case MRB_TT_ISTRUCT:
+#ifndef MRB_NO_FLOAT
+ case MRB_TT_FLOAT:
+#endif
+ case MRB_TT_INTEGER:
+ if (mrb_immediate_p(obj))
+ break;
+ case MRB_TT_DATA:
+ case MRB_TT_ISTRUCT:
size += mrb_objspace_page_slot_size();
break;
/* zero heap size types.
* immediate VM stack values, contained within mrb_state, or on C stack */
case MRB_TT_TRUE:
case MRB_TT_FALSE:
- case MRB_TT_INTEGER:
case MRB_TT_BREAK:
case MRB_TT_CPTR:
case MRB_TT_SYMBOL: