[#27417] selector namespace — Shugo Maeda <shugo@...>

前田です。

17 messages 2005/10/13

[#27458] Matrix class is broken without mathn — akira yamada / やまだあきら <akira@...>

Debianユーザからrequire "mathn"しないときに

28 messages 2005/10/19
[#27461] Re: Matrix class is broken without mathn — Yukihiro Matsumoto <matz@...> 2005/10/19

まつもと ゆきひろです

[#27596] Re: Matrix class is broken without mathn — Masahiro Sakai (酒井政裕) <sakai@...> 2005/10/31

酒井といいます。

[#27601] Re: Matrix class is broken without mathn — Yukihiro Matsumoto <matz@...> 2005/10/31

まつもと ゆきひろです

[#27605] Re: Matrix class is broken without mathn — keiju@... (石塚圭樹) 2005/10/31

けいじゅ@いしつかです.

[#27691] Re: Matrix class is broken without mathn — Shin-ichiro HARA <sinara@...> 2005/11/12

原です。

[#27700] Re: Matrix class is broken without mathn — keiju@... (石塚圭樹) 2005/11/14

けいじゅ@いしつかです.

[#27484] 1.8.4 feature freeze? — "URABE Shyouhei aka. mput" <root@...>

卜部です。

19 messages 2005/10/23
[#27485] Re: 1.8.4 feature freeze? — Yukihiro Matsumoto <matz@...> 2005/10/23

まつもと ゆきひろです

[#27492] Re: [ ruby-Bugs-2613 ] building ruby 1.8.3 on Solaris — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

山本です。

20 messages 2005/10/24
[#27493] Re: [ ruby-Bugs-2613 ] building ruby 1.8.3 on Solaris — Yukihiro Matsumoto <matz@...> 2005/10/24

まつもと ゆきひろです

[#27494] Re: [ ruby-Bugs-2613 ] building ruby 1.8.3 on Solaris — WATANABE Hirofumi <eban@...> 2005/10/24

わたなべです。

[#27495] Re: [ ruby-Bugs-2613 ] building ruby 1.8.3 on Solaris — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2005/10/24

山本です。

[#27503] Re: [ ruby-Bugs-2613 ] building ruby 1.8.3 on Solaris — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2005/10/25

山本です。

[#27504] Re: [ ruby-Bugs-2613 ] building ruby 1.8.3 on Solaris — "U.Nakamura" <usa@...> 2005/10/25

こんにちは、なかむら(う)です。

[#27505] Re: [ ruby-Bugs-2613 ] building ruby 1.8.3 on Solaris — nobuyoshi nakada <nobuyoshi.nakada@...> 2005/10/25

なかだです。

[#27551] 1.8.4 検証を(だれが|どのように)行うか — "URABE Shyouhei aka.mput" <root@...>

さて、 1.8.4-Preview1

41 messages 2005/10/28
[#27561] Re: 1.8.4 検証を(だれが|どのように)行うか — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2005/10/30

山本です。

[#27562] Re: 1.8.4 検証を(だれが�匹里茲Δ�)行うか — "URABE Shyouhei aka.mput" <root@...> 2005/10/30

卜部です。

[#27566] Re: 1.8.4 検証を(だれが|どのように)行うか — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2005/10/30

山本です。

[#27586] Re: 1.8.4 検証を(だれが|どのように)行うか — "U.Nakamura" <usa@...> 2005/10/31

こんにちは、なかむら(う)です。

[#27587] Re: 1.8.4 検証を(だれが|どのように)行うか — Yukihiro Matsumoto <matz@...> 2005/10/31

まつもと ゆきひろです

[ruby-dev:27424] value of BEGIN block

From: nobu@...
Date: 2005-10-13 16:24:30 UTC
List: ruby-dev #27424
なかだです。

one linerでは-n/-pオプションは便利なんですが、BEGINで前処理をし
たいとき(たとえば集計のためにHashを初期化しておくとか)、スコー
プが独立しているためにローカル変数を使うわけにはいきません。こ
れがちょっと不便な場合もあるので、BEGINの結果を後から参照できる
ようにしてみました。

結果を参照するところまでBEGINに入るわけではないので a ||= BEGIN
{...} のようにしないと毎回代入してしまうという制限もありますが、
コンテナ系ではこれで充分な場面も多いのではないかと。


Index: eval.c
===================================================================
RCS file: /cvs/ruby/src/ruby/eval.c,v
retrieving revision 1.838
diff -U2 -p -u -r1.838 eval.c
--- eval.c	11 Oct 2005 12:42:32 -0000	1.838
+++ eval.c	13 Oct 2005 12:00:39 -0000
@@ -1338,6 +1338,6 @@ eval_node(VALUE self, NODE *node)
 	rb_eval(self, node->nd_head);
 	node = node->nd_body;
+	if (!node) return Qnil;
     }
-    if (!node) return Qnil;
     return rb_eval(self, node);
 }
@@ -3946,4 +3946,11 @@ rb_eval(VALUE self, NODE *n)
 	break;
 
+      case NODE_PRELUDE:
+	result = rb_eval(self, node->nd_body);
+	node->nd_body = 0;
+	nd_set_type(node, NODE_LIT);
+	node->nd_lit = result;
+	break;
+
       default:
 	unknown_node(node);
Index: parse.y
===================================================================
RCS file: /cvs/ruby/src/ruby/parse.y,v
retrieving revision 1.419
diff -U2 -p -u -r1.419 parse.y
--- parse.y	11 Oct 2005 12:42:32 -0000	1.419
+++ parse.y	13 Oct 2005 11:57:41 -0000
@@ -689,4 +689,5 @@ compstmt	: stmts opt_terms
 		    {
 		    /*%%%*/
+			if ($1 && nd_type($1) == NODE_PRELUDE) $1 = 0;
 			void_stmts($1);
 		        $$ = $1;
@@ -838,28 +839,4 @@ stmt		: kALIAS fitem {lex_state = EXPR_F
 		    %*/
 		    }
-		| klBEGIN
-		    {
-		    /*%%%*/
-			if (in_def || in_single) {
-			    yyerror("BEGIN in method");
-			}
-			local_push(0);
-		    /*%
-			if (in_def || in_single) {
-			    yyerror("BEGIN in method");
-			}
-		    %*/
-		    }
-		  '{' compstmt '}'
-		    {
-		    /*%%%*/
-			ruby_eval_tree_begin = block_append(ruby_eval_tree_begin,
-						            NEW_PREEXE($4));
-		        local_pop();
-		        $$ = 0;
-		    /*%
-			$$ = dispatch1(BEGIN, $4);
-		    %*/
-		    }
 		| klEND '{' compstmt '}'
 		    {
@@ -2923,4 +2900,32 @@ primary		: literal
 		    %*/
 		    }
+		| klBEGIN
+		    {
+		    /*%%%*/
+			if (in_def || in_single) {
+			    yyerror("BEGIN in method");
+			}
+			local_push(0);
+		    /*%
+			if (in_def || in_single) {
+			    yyerror("BEGIN in method");
+			}
+		    %*/
+		    }
+		  '{' compstmt '}'
+		    {
+		    /*%%%*/
+			NODE *pre = 0;
+			if ($4) {
+			    pre = NEW_PRELUDE(0, NEW_PREEXE($4));
+			}
+			ruby_eval_tree_begin = block_append(ruby_eval_tree_begin,
+							    pre);
+			local_pop();
+			$$ = pre;
+		    /*%
+			$$ = dispatch1(BEGIN, $4);
+		    %*/
+		    }
 		;
 


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

In This Thread

Prev Next