logo       
Google Custom Search
    AddThis Social Bookmark Button
-->

[ruby-dev:29638] Re: Module.new: msg#00017

Subject: [ruby-dev:29638] Re: Module.new
なかだです。

At Thu, 5 Oct 2006 18:09:18 +0900,
WATANABE Hirofumi wrote in [ruby-dev:29637]:
> 1.9のModule.newのブロック引数がなぜかnilになってしまいます。
> 
> % ruby-1.9 -e 'Module.new{|mod| p mod}'
> nil

こっちはまだよく見てないんですが

> それはそれとして、make minirubyだけでなく少なくともmakeでき
> てからコミットしてください。

こっちはこんなとこでしょうか。


Index: parse.y
===================================================================
RCS file: /pub/cvs/ruby/src/ruby/parse.y,v
retrieving revision 1.464
diff -U 2 -p -u -r1.464 parse.y
--- parse.y     4 Oct 2006 07:17:16 -0000       1.464
+++ parse.y     5 Oct 2006 15:52:43 -0000
@@ -541,5 +541,5 @@ static void ripper_compile_error(struct 
 %type <node> assoc_list assocs assoc undef_list backref string_dvar
 %type <node> for_var block_param opt_block_param block_param_def block_param0
-%type <node> block_param1 bparam_post
+%type <node> block_param1 bparam_post block_mparam0 block_mparam
 %type <node> opt_bv_decl bv_decls bv_decl lambda f_larglist lambda_body
 %type <node> brace_block cmd_brace_block do_block lhs none fitem
@@ -2859,8 +2859,8 @@ for_var   : lhs
 
 block_param1   : bv_decl
-               | tLPAREN block_param rparen
+               | tLPAREN block_mparam rparen
                    {
                    /*%%%*/
-                       $$ = NEW_MASGN(NEW_LIST($2), 0);
+                       $$ = $2;
                    /*%
                        $$ = dispatch1(mlhs_paren, $2);
@@ -2909,16 +2909,36 @@ block_param     : block_param0
                    {
                    /*%%%*/
-                        if ($1->nd_alen == 1) {
-                            $$ = $1->nd_head;
-                            rb_gc_force_recycle((VALUE)$1);
-                        }
-                        else {
-                            $$ = NEW_MASGN($1, 0);
-                        }
+                       if ($1->nd_alen == 1) {
+                           $$ = $1->nd_head;
+                           rb_gc_force_recycle((VALUE)$1);
+                       }
+                       else {
+                           $$ = NEW_MASGN($1, 0);
+                       }
+                   /*%
+                       $$ = blockvar_new($1);
+                   %*/
+                   }
+               | block_mparam0
+                   {
+                       $$ = $1;
+                   }
+               ;
+
+block_mparam   : block_param0
+                   {
+                   /*%%%*/
+                       $$ = NEW_MASGN($1, 0);
                    /*%
                        $$ = blockvar_new($1);
                    %*/
                    }
-               | block_param0 ','
+               | block_mparam0
+                   {
+                       $$ = $1;
+                   }
+               ;
+
+block_mparam0  : block_param0 ','
                    {
                    /*%%%*/


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




<Prev in Thread] Current Thread [Next in Thread>