summaryrefslogtreecommitdiff
path: root/gc.c
diff options
context:
space:
mode:
authorko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-03-18 19:57:53 +0000
committerko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-03-18 19:57:53 +0000
commit05704f51fb2d3e183535fa52fd43ac0b7227cdb7 (patch)
tree09e291c644eab9ffaa7e743176fcc4bd6ff0381e /gc.c
parent33aaa89a79b4969655b1c4ee1ba52f6b22d17a4a (diff)
* internal.h (IMEMO_DEBUG): added.
* internal.h: remove unused FL_IMEMO_MARK_V[0-3]. * gc.c (rb_imemo_new_debug): added. * gc.c (obj_info): show imemo type name. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50014 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'gc.c')
-rw-r--r--gc.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/gc.c b/gc.c
index c0fd8f5cfd..dd5a4bd51a 100644
--- a/gc.c
+++ b/gc.c
@@ -1796,6 +1796,17 @@ rb_imemo_new(enum imemo_type type, VALUE v1, VALUE v2, VALUE v3, VALUE v0)
return newobj_of(v0, flags, v1, v2, v3);
}
+#if IMEMO_DEBUG
+VALUE
+rb_imemo_new_debug(enum imemo_type type, VALUE v1, VALUE v2, VALUE v3, VALUE v0, const char *file, int line)
+{
+ VALUE flags = T_IMEMO | (type << FL_USHIFT) | FL_WB_PROTECTED;
+ VALUE memo = newobj_of(v0, flags, v1, v2, v3);
+ fprintf(stderr, "memo %p (type: %d) @ %s:%d\n", memo, imemo_type(memo), file, line);
+ return memo;
+}
+#endif
+
VALUE
rb_data_object_alloc(VALUE klass, void *datap, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree)
{
@@ -8831,6 +8842,21 @@ obj_info(VALUE obj)
}
break;
}
+ case T_IMEMO: {
+ const char *imemo_name;
+ switch (imemo_type(obj)) {
+#define IMEMO_NAME(x) case imemo_##x: imemo_name = #x; break;
+ IMEMO_NAME(none);
+ IMEMO_NAME(cref);
+ IMEMO_NAME(svar);
+ IMEMO_NAME(throw_data);
+ IMEMO_NAME(ifunc);
+ IMEMO_NAME(memo);
+ default: rb_bug("unknown IMEMO");
+#undef IMEMO_NAME
+ }
+ snprintf(buff, OBJ_INFO_BUFFERS_SIZE, "%s %s", buff, imemo_name);
+ }
default:
break;
}