mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
node.h: no attrset ID in NODE
* compile.c (iseq_compile_each), node.h (NEW_OP_ASGN22): attrset ID no longer needs to be stored in a NODE, create at byte code generation. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52113 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
324d7c8995
commit
14059af326
2 changed files with 5 additions and 4 deletions
|
@ -4315,6 +4315,7 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
|
||||||
}
|
}
|
||||||
case NODE_OP_ASGN2:{
|
case NODE_OP_ASGN2:{
|
||||||
ID atype = node->nd_next->nd_mid;
|
ID atype = node->nd_next->nd_mid;
|
||||||
|
ID vid = node->nd_next->nd_vid, aid = rb_id_attrset(vid);
|
||||||
VALUE asgnflag;
|
VALUE asgnflag;
|
||||||
LABEL *lfin = NEW_LABEL(line);
|
LABEL *lfin = NEW_LABEL(line);
|
||||||
LABEL *lcfin = NEW_LABEL(line);
|
LABEL *lcfin = NEW_LABEL(line);
|
||||||
|
@ -4362,7 +4363,7 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
|
||||||
|
|
||||||
asgnflag = COMPILE_RECV(ret, "NODE_OP_ASGN2#recv", node);
|
asgnflag = COMPILE_RECV(ret, "NODE_OP_ASGN2#recv", node);
|
||||||
ADD_INSN(ret, line, dup);
|
ADD_INSN(ret, line, dup);
|
||||||
ADD_SEND(ret, line, node->nd_next->nd_vid, INT2FIX(0));
|
ADD_SEND(ret, line, vid, INT2FIX(0));
|
||||||
|
|
||||||
if (atype == 0 || atype == 1) { /* 0: OR or 1: AND */
|
if (atype == 0 || atype == 1) { /* 0: OR or 1: AND */
|
||||||
ADD_INSN(ret, line, dup);
|
ADD_INSN(ret, line, dup);
|
||||||
|
@ -4376,7 +4377,7 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
|
||||||
COMPILE(ret, "NODE_OP_ASGN2 val", node->nd_value);
|
COMPILE(ret, "NODE_OP_ASGN2 val", node->nd_value);
|
||||||
ADD_INSN(ret, line, swap);
|
ADD_INSN(ret, line, swap);
|
||||||
ADD_INSN1(ret, line, topn, INT2FIX(1));
|
ADD_INSN1(ret, line, topn, INT2FIX(1));
|
||||||
ADD_SEND_WITH_FLAG(ret, line, node->nd_next->nd_aid, INT2FIX(1), INT2FIX(asgnflag));
|
ADD_SEND_WITH_FLAG(ret, line, aid, INT2FIX(1), INT2FIX(asgnflag));
|
||||||
ADD_INSNL(ret, line, jump, lfin);
|
ADD_INSNL(ret, line, jump, lfin);
|
||||||
|
|
||||||
ADD_LABEL(ret, lcfin);
|
ADD_LABEL(ret, lcfin);
|
||||||
|
@ -4397,7 +4398,7 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
|
||||||
ADD_INSN(ret, line, swap);
|
ADD_INSN(ret, line, swap);
|
||||||
ADD_INSN1(ret, line, topn, INT2FIX(1));
|
ADD_INSN1(ret, line, topn, INT2FIX(1));
|
||||||
}
|
}
|
||||||
ADD_SEND_WITH_FLAG(ret, line, node->nd_next->nd_aid, INT2FIX(1), INT2FIX(asgnflag));
|
ADD_SEND_WITH_FLAG(ret, line, aid, INT2FIX(1), INT2FIX(asgnflag));
|
||||||
ADD_INSN(ret, line, pop);
|
ADD_INSN(ret, line, pop);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
2
node.h
2
node.h
|
@ -395,7 +395,7 @@ typedef struct RNode {
|
||||||
#define NEW_CVDECL(v,val) NEW_NODE(NODE_CVDECL,v,val,0)
|
#define NEW_CVDECL(v,val) NEW_NODE(NODE_CVDECL,v,val,0)
|
||||||
#define NEW_OP_ASGN1(p,id,a) NEW_NODE(NODE_OP_ASGN1,p,id,a)
|
#define NEW_OP_ASGN1(p,id,a) NEW_NODE(NODE_OP_ASGN1,p,id,a)
|
||||||
#define NEW_OP_ASGN2(r,i,o,val) NEW_NODE(NODE_OP_ASGN2,r,val,NEW_OP_ASGN22(i,o))
|
#define NEW_OP_ASGN2(r,i,o,val) NEW_NODE(NODE_OP_ASGN2,r,val,NEW_OP_ASGN22(i,o))
|
||||||
#define NEW_OP_ASGN22(i,o) NEW_NODE(NODE_OP_ASGN2,i,o,rb_id_attrset(i))
|
#define NEW_OP_ASGN22(i,o) NEW_NODE(NODE_OP_ASGN2,i,o,0)
|
||||||
#define NEW_OP_ASGN_OR(i,val) NEW_NODE(NODE_OP_ASGN_OR,i,val,0)
|
#define NEW_OP_ASGN_OR(i,val) NEW_NODE(NODE_OP_ASGN_OR,i,val,0)
|
||||||
#define NEW_OP_ASGN_AND(i,val) NEW_NODE(NODE_OP_ASGN_AND,i,val,0)
|
#define NEW_OP_ASGN_AND(i,val) NEW_NODE(NODE_OP_ASGN_AND,i,val,0)
|
||||||
#define NEW_OP_CDECL(v,op,val) NEW_NODE(NODE_OP_CDECL,v,val,op)
|
#define NEW_OP_CDECL(v,op,val) NEW_NODE(NODE_OP_CDECL,v,val,op)
|
||||||
|
|
Loading…
Reference in a new issue