diff options
author | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-02-06 05:22:17 +0000 |
---|---|---|
committer | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-02-06 05:22:17 +0000 |
commit | 42ce75cdff741d69927e407ac57b68dd58408111 (patch) | |
tree | 23c31bb9a51e489645b42457e69ac9a50fd5014d /compile.c | |
parent | d4d5f27077dd356fb2bef031991864777cc54ef6 (diff) | |
download | ruby-42ce75cdff741d69927e407ac57b68dd58408111.tar.gz |
* compile.c, insns.def: remove (get|set)instancevariable2 and add a
operand is_local to (get|set)instancevariable.
* yarvtest/test_class.rb: add a test for class local instance variable.
* parse.y (rb_decompose_ivar2): remove unused variable oid.
* tool/insns2vm.rb: remove needless require.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@11639 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'compile.c')
-rw-r--r-- | compile.c | 30 |
1 files changed, 9 insertions, 21 deletions
@@ -3323,22 +3323,15 @@ iseq_compile_each(yarv_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped) (((long)node->nd_entry) | 1)); break; } - case NODE_IASGN:{ - COMPILE(ret, "lvalue", node->nd_value); - if (!poped) { - ADD_INSN(ret, nd_line(node), dup); - } - ADD_INSN1(ret, nd_line(node), setinstancevariable, - ID2SYM(node->nd_vid)); - break; - } + case NODE_IASGN: case NODE_IASGN2:{ + int is_local = (nd_type(node) == NODE_IVAR2) ? 1 : 0; COMPILE(ret, "lvalue", node->nd_value); if (!poped) { ADD_INSN(ret, nd_line(node), dup); } - ADD_INSN1(ret, nd_line(node), setinstancevariable2, - ID2SYM(node->nd_vid)); + ADD_INSN2(ret, nd_line(node), setinstancevariable, + ID2SYM(node->nd_vid), INT2FIX(is_local)); break; } case NODE_CDECL:{ @@ -3909,19 +3902,14 @@ iseq_compile_each(yarv_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped) } break; } - case NODE_IVAR:{ - debugi("nd_vid", node->nd_vid); - if (!poped) { - ADD_INSN1(ret, nd_line(node), getinstancevariable, - ID2SYM(node->nd_vid)); - } - break; - } + case NODE_IVAR: case NODE_IVAR2:{ + int is_local = (nd_type(node) == NODE_IVAR2) ? 1 : 0; + debugi("nd_vid", node->nd_vid); if (!poped) { - ADD_INSN1(ret, nd_line(node), getinstancevariable2, - ID2SYM(node->nd_vid)); + ADD_INSN2(ret, nd_line(node), getinstancevariable, + ID2SYM(node->nd_vid), INT2FIX(is_local)); } break; } |