From: nobu.nakada@... Date: 2002-10-18T22:46:36+09:00 Subject: [ruby-dev:18535] eliminate useless NODE_BEGIN なかだです。 後判定ループのためのマーク以外では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はできる。 中田 伸悦