From cbf52087a2d4ac3c2db698ddc5b0b023f6bb2eca Mon Sep 17 00:00:00 2001 From: Alan Wu Date: Thu, 9 Jul 2020 18:37:03 -0400 Subject: Fix missing imemo cases in objspace_dump by refactoring imemo_callcache and imemo_callinfo were not handled by the `objspace` module and were showing up as "unknown" in the dump. Extract the code for naming imemos and use that in both the GC and the `objspace` module. --- gc.c | 45 +++++++++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 20 deletions(-) (limited to 'gc.c') diff --git a/gc.c b/gc.c index 1e3b6c279d..9baddb969d 100644 --- a/gc.c +++ b/gc.c @@ -2256,6 +2256,30 @@ rb_newobj_of(VALUE klass, VALUE flags) rb_bug(#func"(): GC does not handle T_NODE 0x%x(%p) 0x%"PRIxVALUE, \ BUILTIN_TYPE(obj), (void*)(obj), RBASIC(obj)->flags) +const char * +rb_imemo_name(enum imemo_type type) +{ + // put no default case to get a warning if an imemo type is missing + switch (type) { +#define IMEMO_NAME(x) case imemo_##x: return #x; + IMEMO_NAME(env); + IMEMO_NAME(cref); + IMEMO_NAME(svar); + IMEMO_NAME(throw_data); + IMEMO_NAME(ifunc); + IMEMO_NAME(memo); + IMEMO_NAME(ment); + IMEMO_NAME(iseq); + IMEMO_NAME(tmpbuf); + IMEMO_NAME(ast); + IMEMO_NAME(parser_strterm); + IMEMO_NAME(callinfo); + IMEMO_NAME(callcache); +#undef IMEMO_NAME + } + return "unknown"; +} + #undef rb_imemo_new VALUE @@ -11662,26 +11686,7 @@ rb_raw_obj_info(char *buff, const int buff_size, VALUE obj) break; } case T_IMEMO: { - const char *imemo_name = "\0"; - switch (imemo_type(obj)) { -#define IMEMO_NAME(x) case imemo_##x: imemo_name = #x; break; - IMEMO_NAME(env); - IMEMO_NAME(cref); - IMEMO_NAME(svar); - IMEMO_NAME(throw_data); - IMEMO_NAME(ifunc); - IMEMO_NAME(memo); - IMEMO_NAME(ment); - IMEMO_NAME(iseq); - IMEMO_NAME(tmpbuf); - IMEMO_NAME(ast); - IMEMO_NAME(parser_strterm); - IMEMO_NAME(callinfo); - IMEMO_NAME(callcache); -#undef IMEMO_NAME - default: UNREACHABLE; - } - APPENDF((BUFF_ARGS, "<%s> ", imemo_name)); + APPENDF((BUFF_ARGS, "<%s> ", rb_imemo_name(imemo_type(obj)))); switch (imemo_type(obj)) { case imemo_ment: { -- cgit v1.2.3