[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]