From 081cc4eb283cb01ddffb364397e5175dbfacab66 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Tue, 20 Oct 2020 19:32:10 +0900 Subject: Dump FrozenCore specially --- iseq.c | 3 ++- node.c | 21 ++++++++++++++++++++- vm.c | 1 + 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/iseq.c b/iseq.c index 2f10cd6223..85ced1212c 100644 --- a/iseq.c +++ b/iseq.c @@ -1861,6 +1861,7 @@ local_var_name(const rb_iseq_t *diseq, VALUE level, VALUE op) } int rb_insn_unified_local_var_level(VALUE); +VALUE rb_dump_literal(VALUE lit); VALUE rb_insn_operand_intern(const rb_iseq_t *iseq, @@ -1936,7 +1937,7 @@ rb_insn_operand_intern(const rb_iseq_t *iseq, break; } } - ret = rb_inspect(op); + ret = rb_dump_literal(op); if (CLASS_OF(op) == rb_cISeq) { if (child) { rb_ary_push(child, op); diff --git a/node.c b/node.c index 936043794a..b68d9c1cfe 100644 --- a/node.c +++ b/node.c @@ -26,7 +26,7 @@ #define A_ID(id) add_id(buf, (id)) #define A_INT(val) rb_str_catf(buf, "%d", (val)) #define A_LONG(val) rb_str_catf(buf, "%ld", (val)) -#define A_LIT(lit) AR(rb_inspect(lit)) +#define A_LIT(lit) AR(rb_dump_literal(lit)) #define A_NODE_HEADER(node, term) \ rb_str_catf(buf, "@ %s (line: %d, location: (%d,%d)-(%d,%d))%s"term, \ ruby_node_name(nd_type(node)), nd_line(node), \ @@ -79,6 +79,25 @@ #define LAST_NODE (next_indent = " ") +VALUE +rb_dump_literal(VALUE lit) +{ + if (!RB_SPECIAL_CONST_P(lit)) { + VALUE str; + switch (RB_BUILTIN_TYPE(lit)) { + case T_CLASS: case T_MODULE: case T_ICLASS: + str = rb_class_path(lit); + if (FL_TEST(lit, FL_SINGLETON)) { + str = rb_sprintf("<%"PRIsVALUE">", str); + } + return str; + default: + break; + } + } + return rb_inspect(lit); +} + static void add_indent(VALUE buf, VALUE indent) { diff --git a/vm.c b/vm.c index ada33ae87b..1f3d97b56d 100644 --- a/vm.c +++ b/vm.c @@ -3123,6 +3123,7 @@ Init_VM(void) /* FrozenCore (hidden) */ fcore = rb_class_new(rb_cBasicObject); + rb_set_class_path(fcore, rb_cRubyVM, "FrozenCore"); RBASIC(fcore)->flags = T_ICLASS; klass = rb_singleton_class(fcore); rb_define_method_id(klass, id_core_set_method_alias, m_core_set_method_alias, 3); -- cgit v1.2.3