summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--bootstraptest/test_method.rb10
-rw-r--r--compile.c1
3 files changed, 18 insertions, 0 deletions
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 <ko1@atdot.net>
+
+ * 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 <nobu@ruby-lang.org>
* 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 {