From: EGUCHI Osamu Date: 1999-07-28T01:06:37+09:00 Subject: [ruby-dev:7453] [PATCH] reduce recursive calls to rb_eval() えぐち@エスアンドイー です。 [ruby-list:10173] の続編のような性能向上パッチです。 内容ですが、[ruby-list:10173] では、再帰の抑制を 『単一の文からなるブロック』 に限っていましたが、今度のパッチは 『ブロックの最後の文』 を再帰の抑制の対象にします。 #当然従来のケースもカバーされます。 このパッチは、時間とスタックの再帰コストを節約します。 えぐち Index: eval.c =================================================================== RCS file: /usr/home/eguchi/cvs.netlab.co.jp//ruby/eval.c,v retrieving revision 1.1.1.3.2.29 diff -d -c -r1.1.1.3.2.29 eval.c *** eval.c 1999/07/22 10:58:07 1.1.1.3.2.29 --- eval.c 1999/07/27 09:38:08 *************** *** 1730,1744 **** switch (nd_type(node)) { case NODE_BLOCK: ! if (!node->nd_next) { ! node = node->nd_head; ! goto again; ! } ! while (node) { ! result = rb_eval(self, node->nd_head); node = node->nd_next; } ! break; case NODE_POSTEXE: rb_f_END(); nd_set_type(node, NODE_NIL); /* exec just once */ --- 1730,1742 ---- switch (nd_type(node)) { case NODE_BLOCK: ! while (node->nd_next) { ! rb_eval(self, node->nd_head); node = node->nd_next; } ! node = node->nd_head; ! goto again; ! case NODE_POSTEXE: rb_f_END(); nd_set_type(node, NODE_NIL); /* exec just once */