diff --git a/ChangeLog b/ChangeLog index 1f384c557d..9ec777e99d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Sat Aug 18 13:55:58 2007 Koichi Sasada + + * compile.c (iseq_compile_each): fix to allow self.x= + if x= is private. + + * bootstraptest/test_method.rb: add a test for above. + Sat Aug 18 14:05:34 2007 Nobuyoshi Nakada * parse.y (reg_compile_gen): obtain error info from errinfo. diff --git a/bootstraptest/test_method.rb b/bootstraptest/test_method.rb index 28fee41d1b..9a59b63d5d 100644 --- a/bootstraptest/test_method.rb +++ b/bootstraptest/test_method.rb @@ -906,3 +906,13 @@ assert_equal %q{[:ok, :ok, :ok, :ok, :ok, :ok, :ng, :ng]}, %q{ $ans } +assert_equal 'ok', %q{ + class C + def x=(n) + end + def m + self.x = :ok + end + end + C.new.m +} diff --git a/compile.c b/compile.c index 2e7ac73506..a5e997bd92 100644 --- a/compile.c +++ b/compile.c @@ -4359,6 +4359,7 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped) argc = setup_args(iseq, args, node->nd_args, &flag); if (node->nd_recv == (NODE *) 1) { + flag |= VM_CALL_FCALL_BIT; ADD_INSN(recv, nd_line(node), putself); } else {