From 86006209cdcf026dbd394819b64a1bfb4d4c2ebc Mon Sep 17 00:00:00 2001 From: nobu Date: Mon, 15 Aug 2016 11:31:36 +0000 Subject: node.c: nd_alen only in the head * node.c (dump_array): show nd_alen field in NODE_ARRAY only in the first node. it is nd_end in the rest nodes. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55901 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- node.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) (limited to 'node.c') diff --git a/node.c b/node.c index 40cb5a952a..14f9856ba5 100644 --- a/node.c +++ b/node.c @@ -132,11 +132,30 @@ dump_option(VALUE buf, VALUE indent, VALUE opt) rb_hash_foreach(opt, add_option_i, (VALUE)&arg); } +static void dump_node(VALUE, VALUE, int, NODE *); +static const char default_indent[] = "| "; + +static void +dump_array(VALUE buf, VALUE indent, int comment, NODE *node) +{ + int field_flag; + const char *next_indent = default_indent; + D_NODE_HEADER(node); + F_LONG(nd_alen, "length"); + F_NODE(nd_head, "element"); + while (node->nd_next && nd_type(node->nd_next) == NODE_ARRAY) { + node = node->nd_next; + F_NODE(nd_head, "element"); + } + LAST_NODE; + F_NODE(nd_next, "next element"); +} + static void dump_node(VALUE buf, VALUE indent, int comment, NODE *node) { int field_flag; - const char *next_indent = "| "; + const char *next_indent = default_indent; if (!node) { D_NULL_NODE; @@ -488,10 +507,7 @@ dump_node(VALUE buf, VALUE indent, int comment, NODE *node) ANN("format: [ [nd_head], [nd_next].. ] (length: [nd_alen])"); ANN("example: return 1, 2, 3"); ary: - F_LONG(nd_alen, "length"); - F_NODE(nd_head, "element"); - LAST_NODE; - F_NODE(nd_next, "next element"); + dump_array(buf, indent, comment, node); break; case NODE_ZARRAY: -- cgit v1.2.3