summaryrefslogtreecommitdiff
path: root/gc.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-08-15 03:00:31 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-08-15 03:00:31 +0000
commit85691b9578fae7de871fba8084e4c35205b441e9 (patch)
tree21bd583e60256b64696a6d9135930f47889fafd5 /gc.c
parente5c9e568937873d32370298ccca2484e96ca2e03 (diff)
gc.c: memsize of T_NODE
* gc.c (obj_memsize_of): fix size of T_NODE and comments. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47188 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'gc.c')
-rw-r--r--gc.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/gc.c b/gc.c
index 0de194139f..88216b0dde 100644
--- a/gc.c
+++ b/gc.c
@@ -2601,18 +2601,24 @@ obj_memsize_of(VALUE obj, int use_tdata)
size += BIGNUM_LEN(obj) * sizeof(BDIGIT);
}
break;
+
case T_NODE:
switch (nd_type(obj)) {
case NODE_SCOPE:
- if (RNODE(obj)->u1.tbl) {
- /* TODO: xfree(RANY(obj)->as.node.u1.tbl); */
+ if (RNODE(obj)->nd_tbl) {
+ size += (RNODE(obj)->nd_tbl[0]+1) * sizeof(*RNODE(obj)->nd_tbl);
+ }
+ break;
+ case NODE_ARGS:
+ if (RNODE(obj)->nd_ainfo) {
+ size += sizeof(*RNODE(obj)->nd_ainfo);
}
break;
case NODE_ALLOCA:
- /* TODO: xfree(RANY(obj)->as.node.u1.node); */
- ;
+ size += RNODE(obj)->nd_cnt * sizeof(VALUE);
+ break;
}
- break; /* no need to free iv_tbl */
+ break;
case T_STRUCT:
if ((RBASIC(obj)->flags & RSTRUCT_EMBED_LEN_MASK) == 0 &&