[#18440] racc segv revisited — "Akinori MUSHA" <knu@...>

 次のバグの件なんですが、現時点では原因究明を含めて未解決という

24 messages 2002/10/02
[#18617] Re: racc segv revisited — "Akinori MUSHA" <knu@...> 2002/11/02

At Wed, 2 Oct 2002 23:19:59 +0900,

[ruby-dev:18535] eliminate useless NODE_BEGIN

From: nobu.nakada@...
Date: 2002-10-18 13:46:36 UTC
List: ruby-dev #18535
なかだです。

後判定ループのためのマーク以外ではNODE_BEGINは使われないので、
消すようにしてみました。


Index: parse.y
===================================================================
RCS file: /cvs/ruby/src/ruby/parse.y,v
retrieving revision 1.222
diff -u -2 -p -r1.222 parse.y
--- parse.y	17 Oct 2002 07:26:59 -0000	1.222
+++ parse.y	18 Oct 2002 13:04:42 -0000
@@ -120,7 +120,10 @@ static NODE *newline_node();
 static void fixpos();
 
-static int value_expr();
-static void void_expr();
+static int value_expr0();
+static void void_expr0();
 static void void_stmts();
+static NODE *remove_begin();
+#define value_expr(node) value_expr0((node) = remove_begin(node))
+#define void_expr(node) void_expr0((node) = remove_begin(node))
 
 static NODE *block_append();
@@ -4698,6 +4701,6 @@ node_assign(lhs, rhs)
 
 static int
-value_expr(node)
+value_expr0(node)
     NODE *node;
 {
@@ -4753,5 +4756,5 @@ value_expr(node)
 
 static void
-void_expr(node)
+void_expr0(node)
     NODE *node;
 {
@@ -4861,4 +4864,23 @@ void_stmts(node)
 	node = node->nd_next;
     }
+}
+
+static NODE *
+remove_begin(node)
+    NODE *node;
+{
+    NODE **n = &node;
+    while (*n) {
+	switch (nd_type(*n)) {
+	  case NODE_NEWLINE:
+	    n = &(*n)->nd_next;
+	    continue;
+	  case NODE_BEGIN:
+	    *n = (*n)->nd_body;
+	  default:
+	    return node;
+	}
+    }
+    return node;
 }
 


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread

Prev Next