From: Nobuyoshi Nakada Date: 2007-08-29T15:28:09+09:00 Subject: [ruby-dev:31676] Re: {|(a)|} assigns outer local variable なかだです。 At Sun, 19 Aug 2007 19:38:30 +0900, Tanaka Akira wrote in [ruby-dev:31507]: > 以下のように、ブロックパラメータの変数への束縛が以前のように > 外部のローカル変数への代入になることがあります。 これでどうでしょうか。 Index: parse.y =================================================================== --- parse.y (revision 13301) +++ parse.y (working copy) @@ -7309,5 +7309,7 @@ assignable_gen(struct parser_params *par return NEW_CVASGN(id, val); } - compile_error(PARSER_ARG "identifier %s is not valid to set", rb_id2name(id)); + else { + compile_error(PARSER_ARG "identifier %s is not valid to set", rb_id2name(id)); + } return 0; } @@ -7322,4 +7324,5 @@ shadowing_lvar_gen(struct parser_params else if (dvar_defined(name) || local_id(name)) { rb_warningS("shadowing outer local variable - %s", rb_id2name(name)); + vtable_add(lvtbl->vars, name); } } Index: bootstraptest/test_knownbug.rb =================================================================== --- bootstraptest/test_knownbug.rb (revision 13301) +++ bootstraptest/test_knownbug.rb (working copy) @@ -3,12 +3,2 @@ # So all tests will cause failure. # - -# massign -assert_equal 'ok', %q{ - def m() - yield :ng - end - r = :ok - m {|(r)|} - r -}, '[ruby-dev:31507]' Index: bootstraptest/test_massign.rb =================================================================== --- bootstraptest/test_massign.rb (revision 13301) +++ bootstraptest/test_massign.rb (working copy) @@ -14,4 +14,10 @@ assert_equal '[1, 2]', %q{ } +assert_equal 'ok', %q{ + r = :ok + :ng.tap {|(r)|} + r +}, '[ruby-dev:31507]' + =begin # generated by this script: -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦