diff options
| author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-02-04 19:17:33 +0000 |
|---|---|---|
| committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-02-04 19:17:33 +0000 |
| commit | 44133346923781aaa1022d9b881aeb4e58dd5940 (patch) | |
| tree | 3f74f159fcc7abf2e87ff7295e6400651a26a8c4 /compile.c | |
| parent | 11703607ac25a15def2197bb91e53b4b0d7cf84d (diff) | |
| download | ruby-44133346923781aaa1022d9b881aeb4e58dd5940.tar.gz ruby-44133346923781aaa1022d9b881aeb4e58dd5940.tar.xz ruby-44133346923781aaa1022d9b881aeb4e58dd5940.zip | |
* parse.y (rb_compose_ivar2): function to create a new ivar2
symbol from a symbol and a class. back-ported from matzruby.
* parse.y (rb_decompose_ivar2): reverse function of
rb_compose_ivar2().
* marshal.c (w_symbol): support class local instance variables.
* marshal.c (r_object0): ditto.
* compile.c (defined_expr): ditto.
* compile.c (iseq_compile_each): ditto.
* insns.def: add two new instructions: getinstancevariable2 and
setinstancevariable2.
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@11630 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'compile.c')
| -rw-r--r-- | compile.c | 22 |
1 files changed, 22 insertions, 0 deletions
@@ -2345,6 +2345,11 @@ defined_expr(yarv_iseq_t *iseq, LINK_ANCHOR *ret, ADD_INSN3(ret, nd_line(node), defined, INT2FIX(DEFINED_IVAR), ID2SYM(node->nd_vid), needstr); return 1; + case NODE_IVAR2: + ADD_INSN(ret, nd_line(node), putnil); + ADD_INSN3(ret, nd_line(node), defined, INT2FIX(DEFINED_IVAR2), + ID2SYM(node->nd_vid), needstr); + return 1; case NODE_GVAR: ADD_INSN(ret, nd_line(node), putnil); @@ -3327,6 +3332,15 @@ iseq_compile_each(yarv_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped) ID2SYM(node->nd_vid)); break; } + case NODE_IASGN2:{ + 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)); + break; + } case NODE_CDECL:{ COMPILE(ret, "lvalue", node->nd_value); @@ -3903,6 +3917,14 @@ iseq_compile_each(yarv_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped) } break; } + case NODE_IVAR2:{ + debugi("nd_vid", node->nd_vid); + if (!poped) { + ADD_INSN1(ret, nd_line(node), getinstancevariable2, + ID2SYM(node->nd_vid)); + } + break; + } case NODE_CONST:{ debugi("nd_vid", node->nd_vid); |
