Merge RNode_OP_ASGN2 and RNode_OP_ASGN22
This commit is contained in:
parent
23bcdda377
commit
37a783a30c
9
ast.c
9
ast.c
@ -474,13 +474,10 @@ node_children(rb_ast_t *ast, const NODE *node)
|
|||||||
NEW_CHILD(ast, RNODE_ARGSCAT(RNODE_OP_ASGN1(node)->nd_args)->nd_head),
|
NEW_CHILD(ast, RNODE_ARGSCAT(RNODE_OP_ASGN1(node)->nd_args)->nd_head),
|
||||||
NEW_CHILD(ast, RNODE_ARGSCAT(RNODE_OP_ASGN1(node)->nd_args)->nd_body));
|
NEW_CHILD(ast, RNODE_ARGSCAT(RNODE_OP_ASGN1(node)->nd_args)->nd_body));
|
||||||
case NODE_OP_ASGN2:
|
case NODE_OP_ASGN2:
|
||||||
// NODE_OP_ASGN2 has NODE_OP_ASGN2 in its nd_next, however nd_next
|
|
||||||
// has different structure, whose u1 is ID attr, u2 is ID op, u3 is bool.
|
|
||||||
// See: NEW_OP_ASGN2
|
|
||||||
return rb_ary_new_from_args(5, NEW_CHILD(ast, RNODE_OP_ASGN2(node)->nd_recv),
|
return rb_ary_new_from_args(5, NEW_CHILD(ast, RNODE_OP_ASGN2(node)->nd_recv),
|
||||||
RBOOL(RNODE_OP_ASGN22(RNODE_OP_ASGN2(node)->nd_next)->nd_aid),
|
RBOOL(RNODE_OP_ASGN2(node)->nd_aid),
|
||||||
ID2SYM(RNODE_OP_ASGN22(RNODE_OP_ASGN2(node)->nd_next)->nd_vid),
|
ID2SYM(RNODE_OP_ASGN2(node)->nd_vid),
|
||||||
ID2SYM(RNODE_OP_ASGN22(RNODE_OP_ASGN2(node)->nd_next)->nd_mid),
|
ID2SYM(RNODE_OP_ASGN2(node)->nd_mid),
|
||||||
NEW_CHILD(ast, RNODE_OP_ASGN2(node)->nd_value));
|
NEW_CHILD(ast, RNODE_OP_ASGN2(node)->nd_value));
|
||||||
case NODE_OP_ASGN_AND:
|
case NODE_OP_ASGN_AND:
|
||||||
return rb_ary_new_from_args(3, NEW_CHILD(ast, RNODE_OP_ASGN_AND(node)->nd_head), ID2SYM(idANDOP),
|
return rb_ary_new_from_args(3, NEW_CHILD(ast, RNODE_OP_ASGN_AND(node)->nd_head), ID2SYM(idANDOP),
|
||||||
|
@ -8708,8 +8708,8 @@ static int
|
|||||||
compile_op_asgn2(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int popped)
|
compile_op_asgn2(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int popped)
|
||||||
{
|
{
|
||||||
const int line = nd_line(node);
|
const int line = nd_line(node);
|
||||||
ID atype = RNODE_OP_ASGN2(node)->nd_next->nd_mid;
|
ID atype = RNODE_OP_ASGN2(node)->nd_mid;
|
||||||
ID vid = RNODE_OP_ASGN2(node)->nd_next->nd_vid, aid = rb_id_attrset(vid);
|
ID vid = RNODE_OP_ASGN2(node)->nd_vid, aid = rb_id_attrset(vid);
|
||||||
int asgnflag;
|
int asgnflag;
|
||||||
LABEL *lfin = NEW_LABEL(line);
|
LABEL *lfin = NEW_LABEL(line);
|
||||||
LABEL *lcfin = NEW_LABEL(line);
|
LABEL *lcfin = NEW_LABEL(line);
|
||||||
@ -8769,7 +8769,7 @@ compile_op_asgn2(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node
|
|||||||
|
|
||||||
asgnflag = COMPILE_RECV(ret, "NODE_OP_ASGN2#recv", node, RNODE_OP_ASGN2(node)->nd_recv);
|
asgnflag = COMPILE_RECV(ret, "NODE_OP_ASGN2#recv", node, RNODE_OP_ASGN2(node)->nd_recv);
|
||||||
CHECK(asgnflag != -1);
|
CHECK(asgnflag != -1);
|
||||||
if (RNODE_OP_ASGN2(node)->nd_next->nd_aid) {
|
if (RNODE_OP_ASGN2(node)->nd_aid) {
|
||||||
lskip = NEW_LABEL(line);
|
lskip = NEW_LABEL(line);
|
||||||
ADD_INSN(ret, node, dup);
|
ADD_INSN(ret, node, dup);
|
||||||
ADD_INSNL(ret, node, branchnil, lskip);
|
ADD_INSNL(ret, node, branchnil, lskip);
|
||||||
|
@ -479,10 +479,10 @@ dump_node(VALUE buf, VALUE indent, int comment, const NODE * node)
|
|||||||
ANN("example: struct.field += foo");
|
ANN("example: struct.field += foo");
|
||||||
F_NODE(nd_recv, RNODE_OP_ASGN2, "receiver");
|
F_NODE(nd_recv, RNODE_OP_ASGN2, "receiver");
|
||||||
F_CUSTOM1(nd_next->nd_vid, "attr") {
|
F_CUSTOM1(nd_next->nd_vid, "attr") {
|
||||||
if (RNODE_OP_ASGN2(node)->nd_next->nd_aid) A("? ");
|
if (RNODE_OP_ASGN2(node)->nd_aid) A("? ");
|
||||||
A_ID(RNODE_OP_ASGN2(node)->nd_next->nd_vid);
|
A_ID(RNODE_OP_ASGN2(node)->nd_vid);
|
||||||
}
|
}
|
||||||
F_ID(nd_next->nd_mid, RNODE_OP_ASGN2, "operator");
|
F_ID(nd_mid, RNODE_OP_ASGN2, "operator");
|
||||||
LAST_NODE;
|
LAST_NODE;
|
||||||
F_NODE(nd_value, RNODE_OP_ASGN2, "rvalue");
|
F_NODE(nd_value, RNODE_OP_ASGN2, "rvalue");
|
||||||
return;
|
return;
|
||||||
|
17
parse.y
17
parse.y
@ -914,8 +914,7 @@ static rb_node_iasgn_t *rb_node_iasgn_new(struct parser_params *p, ID nd_vid, NO
|
|||||||
static rb_node_cdecl_t *rb_node_cdecl_new(struct parser_params *p, ID nd_vid, NODE *nd_value, NODE *nd_else, const YYLTYPE *loc);
|
static rb_node_cdecl_t *rb_node_cdecl_new(struct parser_params *p, ID nd_vid, NODE *nd_value, NODE *nd_else, const YYLTYPE *loc);
|
||||||
static rb_node_cvasgn_t *rb_node_cvasgn_new(struct parser_params *p, ID nd_vid, NODE *nd_value, const YYLTYPE *loc);
|
static rb_node_cvasgn_t *rb_node_cvasgn_new(struct parser_params *p, ID nd_vid, NODE *nd_value, const YYLTYPE *loc);
|
||||||
static rb_node_op_asgn1_t *rb_node_op_asgn1_new(struct parser_params *p, NODE *nd_recv, ID nd_mid, rb_node_argscat_t *nd_args, const YYLTYPE *loc);
|
static rb_node_op_asgn1_t *rb_node_op_asgn1_new(struct parser_params *p, NODE *nd_recv, ID nd_mid, rb_node_argscat_t *nd_args, const YYLTYPE *loc);
|
||||||
static rb_node_op_asgn2_t *rb_node_op_asgn2_new(struct parser_params *p, NODE *nd_recv, NODE *nd_value, rb_node_op_asgn22_t *nd_next, const YYLTYPE *loc);
|
static rb_node_op_asgn2_t *rb_node_op_asgn2_new(struct parser_params *p, NODE *nd_recv, NODE *nd_value, ID nd_vid, ID nd_mid, bool nd_aid, const YYLTYPE *loc);
|
||||||
static rb_node_op_asgn22_t *rb_node_op_asgn22_new(struct parser_params *p, ID nd_vid, ID nd_mid, bool nd_aid, const YYLTYPE *loc);
|
|
||||||
static rb_node_op_asgn_or_t *rb_node_op_asgn_or_new(struct parser_params *p, NODE *nd_head, NODE *nd_value, const YYLTYPE *loc);
|
static rb_node_op_asgn_or_t *rb_node_op_asgn_or_new(struct parser_params *p, NODE *nd_head, NODE *nd_value, const YYLTYPE *loc);
|
||||||
static rb_node_op_asgn_and_t *rb_node_op_asgn_and_new(struct parser_params *p, NODE *nd_head, NODE *nd_value, const YYLTYPE *loc);
|
static rb_node_op_asgn_and_t *rb_node_op_asgn_and_new(struct parser_params *p, NODE *nd_head, NODE *nd_value, const YYLTYPE *loc);
|
||||||
static rb_node_op_cdecl_t *rb_node_op_cdecl_new(struct parser_params *p, NODE *nd_head, NODE *nd_value, ID nd_aid, const YYLTYPE *loc);
|
static rb_node_op_cdecl_t *rb_node_op_cdecl_new(struct parser_params *p, NODE *nd_head, NODE *nd_value, ID nd_aid, const YYLTYPE *loc);
|
||||||
@ -1016,8 +1015,7 @@ static rb_node_error_t *rb_node_error_new(struct parser_params *p, const YYLTYPE
|
|||||||
#define NEW_CDECL(v,val,path,loc) (NODE *)rb_node_cdecl_new(p,v,val,path,loc)
|
#define NEW_CDECL(v,val,path,loc) (NODE *)rb_node_cdecl_new(p,v,val,path,loc)
|
||||||
#define NEW_CVASGN(v,val,loc) (NODE *)rb_node_cvasgn_new(p,v,val,loc)
|
#define NEW_CVASGN(v,val,loc) (NODE *)rb_node_cvasgn_new(p,v,val,loc)
|
||||||
#define NEW_OP_ASGN1(r,id,a,loc) (NODE *)rb_node_op_asgn1_new(p,r,id,a,loc)
|
#define NEW_OP_ASGN1(r,id,a,loc) (NODE *)rb_node_op_asgn1_new(p,r,id,a,loc)
|
||||||
#define NEW_OP_ASGN2(r,t,i,o,val,loc) (NODE *)rb_node_op_asgn2_new(p,r,val,NEW_OP_ASGN22(i,o,t,loc),loc)
|
#define NEW_OP_ASGN2(r,t,i,o,val,loc) (NODE *)rb_node_op_asgn2_new(p,r,val,i,o,t,loc)
|
||||||
#define NEW_OP_ASGN22(i,o,t,loc) rb_node_op_asgn22_new(p,i,o,t,loc)
|
|
||||||
#define NEW_OP_ASGN_OR(i,val,loc) (NODE *)rb_node_op_asgn_or_new(p,i,val,loc)
|
#define NEW_OP_ASGN_OR(i,val,loc) (NODE *)rb_node_op_asgn_or_new(p,i,val,loc)
|
||||||
#define NEW_OP_ASGN_AND(i,val,loc) (NODE *)rb_node_op_asgn_and_new(p,i,val,loc)
|
#define NEW_OP_ASGN_AND(i,val,loc) (NODE *)rb_node_op_asgn_and_new(p,i,val,loc)
|
||||||
#define NEW_OP_CDECL(v,op,val,loc) (NODE *)rb_node_op_cdecl_new(p,v,val,op,loc)
|
#define NEW_OP_CDECL(v,op,val,loc) (NODE *)rb_node_op_cdecl_new(p,v,val,op,loc)
|
||||||
@ -11619,20 +11617,11 @@ rb_node_op_asgn1_new(struct parser_params *p, NODE *nd_recv, ID nd_mid, rb_node_
|
|||||||
}
|
}
|
||||||
|
|
||||||
static rb_node_op_asgn2_t *
|
static rb_node_op_asgn2_t *
|
||||||
rb_node_op_asgn2_new(struct parser_params *p, NODE *nd_recv, NODE *nd_value, rb_node_op_asgn22_t *nd_next, const YYLTYPE *loc)
|
rb_node_op_asgn2_new(struct parser_params *p, NODE *nd_recv, NODE *nd_value, ID nd_vid, ID nd_mid, bool nd_aid, const YYLTYPE *loc)
|
||||||
{
|
{
|
||||||
rb_node_op_asgn2_t *n = NODE_NEWNODE(NODE_OP_ASGN2, rb_node_op_asgn2_t, loc);
|
rb_node_op_asgn2_t *n = NODE_NEWNODE(NODE_OP_ASGN2, rb_node_op_asgn2_t, loc);
|
||||||
n->nd_recv = nd_recv;
|
n->nd_recv = nd_recv;
|
||||||
n->nd_value = nd_value;
|
n->nd_value = nd_value;
|
||||||
n->nd_next = nd_next;
|
|
||||||
|
|
||||||
return n;
|
|
||||||
}
|
|
||||||
|
|
||||||
static rb_node_op_asgn22_t *
|
|
||||||
rb_node_op_asgn22_new(struct parser_params *p, ID nd_vid, ID nd_mid, bool nd_aid, const YYLTYPE *loc)
|
|
||||||
{
|
|
||||||
rb_node_op_asgn22_t *n = NODE_NEWNODE(NODE_OP_ASGN2, rb_node_op_asgn22_t, loc);
|
|
||||||
n->nd_vid = nd_vid;
|
n->nd_vid = nd_vid;
|
||||||
n->nd_mid = nd_mid;
|
n->nd_mid = nd_mid;
|
||||||
n->nd_aid = nd_aid;
|
n->nd_aid = nd_aid;
|
||||||
|
@ -438,16 +438,10 @@ typedef struct RNode_OP_ASGN2 {
|
|||||||
|
|
||||||
struct RNode *nd_recv;
|
struct RNode *nd_recv;
|
||||||
struct RNode *nd_value;
|
struct RNode *nd_value;
|
||||||
struct RNode_OP_ASGN22 *nd_next;
|
|
||||||
} rb_node_op_asgn2_t;
|
|
||||||
|
|
||||||
typedef struct RNode_OP_ASGN22 {
|
|
||||||
NODE node;
|
|
||||||
|
|
||||||
ID nd_vid;
|
ID nd_vid;
|
||||||
ID nd_mid;
|
ID nd_mid;
|
||||||
bool nd_aid;
|
bool nd_aid;
|
||||||
} rb_node_op_asgn22_t;
|
} rb_node_op_asgn2_t;
|
||||||
|
|
||||||
typedef struct RNode_OP_ASGN_AND {
|
typedef struct RNode_OP_ASGN_AND {
|
||||||
NODE node;
|
NODE node;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user