なかだです。
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はできる。
中田 伸悦
|