summaryrefslogtreecommitdiff
path: root/ext/objspace/objspace_dump.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/objspace/objspace_dump.c')
-rw-r--r--ext/objspace/objspace_dump.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/ext/objspace/objspace_dump.c b/ext/objspace/objspace_dump.c
index 9c2055d..e235c58 100644
--- a/ext/objspace/objspace_dump.c
+++ b/ext/objspace/objspace_dump.c
@@ -192,6 +192,25 @@ dump_append_string_content(struct dump_config *dc, VALUE obj)
}
}
+static const char *
+imemo_name(int imemo)
+{
+ switch(imemo) {
+#define TYPE_STR(t) case(imemo_##t): return #t; break;
+ TYPE_STR(env)
+ TYPE_STR(cref)
+ TYPE_STR(svar)
+ TYPE_STR(throw_data)
+ TYPE_STR(ifunc)
+ TYPE_STR(memo)
+ TYPE_STR(ment)
+ TYPE_STR(iseq)
+ default:
+ return "unknown";
+#undef TYPE_STR
+ }
+}
+
static void
dump_object(VALUE obj, struct dump_config *dc)
{
@@ -229,6 +248,10 @@ dump_object(VALUE obj, struct dump_config *dc)
dump_append(dc, ", \"node_type\":\"%s\"", ruby_node_name(nd_type(obj)));
break;
+ case T_IMEMO:
+ dump_append(dc, ", \"imemo_type\":\"%s\"", imemo_name(imemo_type(obj)));
+ break;
+
case T_SYMBOL:
dump_append_string_content(dc, rb_sym2str(obj));
break;