summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2020-10-20 19:32:10 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2020-10-20 23:52:19 +0900
commit081cc4eb283cb01ddffb364397e5175dbfacab66 (patch)
treebe6219891c102c981c0762744eb53488fd7d2205
parentd915e7ee0095727e63104c53b1adc7a70bae6522 (diff)
Dump FrozenCore specially
-rw-r--r--iseq.c3
-rw-r--r--node.c21
-rw-r--r--vm.c1
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);