parse.y: Factor out special handling of a short-cut operator id

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61672 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
mame 2018-01-08 03:22:13 +00:00
Родитель 8ef39549c2
Коммит fbb5a9d967
1 изменённых файлов: 9 добавлений и 21 удалений

30
parse.y
Просмотреть файл

@ -495,6 +495,12 @@ static NODE *new_attr_op_assign_gen(struct parser_params *parser, NODE *lhs, ID
#define new_attr_op_assign(lhs, type, attr, op, rhs, location) new_attr_op_assign_gen(parser, (lhs), (type), (attr), (op), (rhs), (location))
static NODE *new_const_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs, const YYLTYPE *location);
#define new_const_op_assign(lhs, op, rhs, location) new_const_op_assign_gen(parser, (lhs), (op), (rhs), (location))
static ID change_shortcut_operator_id(ID id)
{
if (id == tOROP) return 0;
if (id == tANDOP) return 1;
return id;
}
static NODE *const_path_field_gen(struct parser_params *parser, NODE *head, ID mid, const YYLTYPE *location);
#define const_path_field(w, n, location) const_path_field_gen(parser, w, n, location)
@ -2108,13 +2114,7 @@ arg : lhs '=' arg_rhs
else {
args = arg_concat($3, $6, &@$);
}
if ($5 == tOROP) {
$5 = 0;
}
else if ($5 == tANDOP) {
$5 = 1;
}
$$ = NEW_OP_ASGN1($1, $5, args, &@$);
$$ = NEW_OP_ASGN1($1, change_shortcut_operator_id($5), args, &@$);
fixpos($$, $1);
/*%
$1 = dispatch2(aref_field, $1, escape_Qundef($3));
@ -10675,13 +10675,7 @@ new_attr_op_assign_gen(struct parser_params *parser, NODE *lhs,
{
NODE *asgn;
if (op == tOROP) {
op = 0;
}
else if (op == tANDOP) {
op = 1;
}
asgn = NEW_OP_ASGN2(lhs, CALL_Q_P(atype), attr, op, rhs, location);
asgn = NEW_OP_ASGN2(lhs, CALL_Q_P(atype), attr, change_shortcut_operator_id(op), rhs, location);
fixpos(asgn, lhs);
return asgn;
}
@ -10691,14 +10685,8 @@ new_const_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rh
{
NODE *asgn;
if (op == tOROP) {
op = 0;
}
else if (op == tANDOP) {
op = 1;
}
if (lhs) {
asgn = NEW_OP_CDECL(lhs, op, rhs, location);
asgn = NEW_OP_CDECL(lhs, change_shortcut_operator_id(op), rhs, location);
}
else {
asgn = NEW_BEGIN(0, location);