summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--compile.c2
-rw-r--r--yarvtest/test_class.rb21
3 files changed, 28 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index bcc4770838..a6974c5411 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Tue Feb 6 15:44:11 2007 Koichi Sasada <ko1@atdot.net>
+
+ * compile.c (iseq_compile_each): fix setting is_local flag.
+
+ * yarvtest/test_class.rb: add a test for class local isntance variable.
+
Tue Feb 6 14:15:34 2007 Koichi Sasada <ko1@atdot.net>
* compile.c, insns.def: remove (get|set)instancevariable2 and add a
diff --git a/compile.c b/compile.c
index 0329a0ef1d..fb584c4811 100644
--- a/compile.c
+++ b/compile.c
@@ -3325,7 +3325,7 @@ iseq_compile_each(yarv_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
}
case NODE_IASGN:
case NODE_IASGN2:{
- int is_local = (nd_type(node) == NODE_IVAR2) ? 1 : 0;
+ int is_local = (nd_type(node) == NODE_IASGN2) ? 1 : 0;
COMPILE(ret, "lvalue", node->nd_value);
if (!poped) {
ADD_INSN(ret, nd_line(node), dup);
diff --git a/yarvtest/test_class.rb b/yarvtest/test_class.rb
index 488b3ccfd9..43d3e3aa55 100644
--- a/yarvtest/test_class.rb
+++ b/yarvtest/test_class.rb
@@ -754,6 +754,27 @@ class TestClass < YarvTestBase
ae %q{
class C
def initialize
+ @_v = 1
+ end
+
+ def foo
+ @_v
+ end
+ end
+ class D < C
+ def initialize
+ @_v = 2
+ super
+ end
+ def foo
+ [@_v, super]
+ end
+ end
+ D.new.foo
+ }
+ ae %q{
+ class C
+ def initialize
@_c = 1
end
end