ruby-changes:44275
From: nobu <ko1@a...>
Date: Wed, 5 Oct 2016 15:43:40 +0900 (JST)
Subject: [ruby-changes:44275] nobu:r56348 (trunk): node.c: flatten NODE_BLOCK [ci skip]
nobu 2016-10-05 15:43:34 +0900 (Wed, 05 Oct 2016) New Revision: 56348 https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=56348 Log: node.c: flatten NODE_BLOCK [ci skip] * node.c (dump_node): flatten statements in NODE_BLOCK. Modified files: trunk/ChangeLog trunk/node.c Index: ChangeLog =================================================================== --- ChangeLog (revision 56347) +++ ChangeLog (revision 56348) @@ -1,3 +1,7 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1 +Wed Oct 5 15:43:32 2016 Nobuyoshi Nakada <nobu@r...> + + * node.c (dump_node): flatten statements in NODE_BLOCK. + Wed Oct 5 14:27:36 2016 Byron Bowerman <me@b...> * range.c: Add docs for max/min behavior with exclusive range. Index: node.c =================================================================== --- node.c (revision 56347) +++ node.c (revision 56348) @@ -16,6 +16,8 @@ https://github.com/ruby/ruby/blob/trunk/node.c#L16 #define AR(str) rb_str_concat(buf, (str)) #define A_INDENT add_indent(buf, indent) +#define D_INDENT rb_str_cat2(indent, next_indent) +#define D_DEDENT rb_str_resize(indent, RSTRING_LEN(indent) - 4) #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)) @@ -32,9 +34,9 @@ https://github.com/ruby/ruby/blob/trunk/node.c#L34 #define COMPOUND_FIELD(len, name, block) \ do { \ D_FIELD_HEADER((len), (name), "\n"); \ - rb_str_cat2(indent, next_indent); \ + D_INDENT; \ block; \ - rb_str_resize(indent, RSTRING_LEN(indent) - 4); \ + D_DEDENT; \ } while (0) #define COMPOUND_FIELD1(name, ann, block) \ @@ -154,6 +156,7 @@ static void https://github.com/ruby/ruby/blob/trunk/node.c#L156 dump_node(VALUE buf, VALUE indent, int comment, NODE *node) { int field_flag; + int i; const char *next_indent = default_indent; if (!node) { @@ -166,9 +169,21 @@ dump_node(VALUE buf, VALUE indent, int c https://github.com/ruby/ruby/blob/trunk/node.c#L169 switch (nd_type(node)) { case NODE_BLOCK: ANN("statement sequence"); - ANN("format: [nd_head]; [nd_next]"); + ANN("format: [nd_head]; ...; [nd_next]"); ANN("example: foo; bar"); - F_NODE(nd_head, "current statement"); + i = 0; + do { + A_INDENT; + rb_str_catf(buf, "+- nd_head (%s%d):\n", + comment ? "statement #" : "", ++i); + if (!node->nd_next) LAST_NODE; + D_INDENT; + dump_node(buf, indent, comment, node->nd_head); + D_DEDENT; + } while (node->nd_next && + nd_type(node->nd_next) == NODE_BLOCK && + (node = node->nd_next, 1)); + if (!node->nd_next) break; LAST_NODE; F_NODE(nd_next, "next block"); break; -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/