From c27ef66dd7dc00fa22dce416dd2080f5da501a47 Mon Sep 17 00:00:00 2001 From: ko1 Date: Tue, 6 Feb 2007 06:50:40 +0000 Subject: [PATCH] * compile.c (iseq_compile_each): fix setting is_local flag. * yarvtest/test_class.rb: add a test for class local isntance variable. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@11640 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 6 ++++++ compile.c | 2 +- yarvtest/test_class.rb | 21 +++++++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) 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 + + * 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 * 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 @@ -751,6 +751,27 @@ class TestClass < YarvTestBase end def test_ivar2 + 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