From: Nobuyoshi Nakada Date: 2006-10-06T00:59:44+09:00 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 assoc_list assocs assoc undef_list backref string_dvar %type for_var block_param opt_block_param block_param_def block_param0 -%type block_param1 bparam_post +%type block_param1 bparam_post block_mparam0 block_mparam %type opt_bv_decl bv_decls bv_decl lambda f_larglist lambda_body %type 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はできる。 中田 伸悦