diff options
-rw-r--r-- | defs/id.def | 2 | ||||
-rw-r--r-- | parse.y | 29 |
2 files changed, 10 insertions, 21 deletions
diff --git a/defs/id.def b/defs/id.def index dd0eed9b7c..b5815b7f00 100644 --- a/defs/id.def +++ b/defs/id.def @@ -44,6 +44,8 @@ firstline, predefined = __LINE__+1, %[\ mesg exception not NOT + and AND + or OR _ UScore "/*NULL*/" NULL @@ -410,7 +410,9 @@ static NODE *new_if_gen(struct parser_params*,NODE*,NODE*,NODE*); #define new_if(cc,left,right) new_if_gen(parser, (cc), (left), (right)) #define new_unless(cc,left,right) new_if_gen(parser, (cc), (right), (left)) static NODE *logop_gen(struct parser_params*,enum node_type,NODE*,NODE*); -#define logop(type,node1,node2) logop_gen(parser, (type), (node1), (node2)) +#define logop(type,node1,node2) \ + logop_gen(parser, (type)==tAND||(type)==tANDOP?NODE_AND:NODE_OR, \ + (node1), (node2)) static NODE *newline_node(NODE*); static void fixpos(NODE*,NODE*); @@ -565,6 +567,7 @@ static int id_is_var_gen(struct parser_params *parser, ID id); #define call_bin_op(recv,id,arg1) dispatch3(binary, (recv), STATIC_ID2SYM(id), (arg1)) #define match_op(node1,node2) call_bin_op((node1), idEqTilde, (node2)) #define call_uni_op(recv,id) dispatch2(unary, STATIC_ID2SYM(id), (recv)) +#define logop(type,node1,node2) call_bin_op((node1), TOKEN2ID(type), (node2)) #define node_assign(node1, node2) dispatch2(assign, (node1), (node2)) #define new_nil() Qnil @@ -1421,19 +1424,11 @@ command_rhs : command_call %prec tOP_ASGN expr : command_call | expr keyword_and expr { - /*%%%*/ - $$ = logop(NODE_AND, $1, $3); - /*% - $$ = dispatch3(binary, $1, ripper_intern("and"), $3); - %*/ + $$ = logop(tAND, $1, $3); } | expr keyword_or expr { - /*%%%*/ - $$ = logop(NODE_OR, $1, $3); - /*% - $$ = dispatch3(binary, $1, ripper_intern("or"), $3); - %*/ + $$ = logop(tOR, $1, $3); } | keyword_not opt_nl expr { @@ -2209,19 +2204,11 @@ arg : lhs '=' arg_rhs } | arg tANDOP arg { - /*%%%*/ - $$ = logop(NODE_AND, $1, $3); - /*% - $$ = dispatch3(binary, $1, TOKEN2VAL(tANDOP), $3); - %*/ + $$ = logop(tANDOP, $1, $3); } | arg tOROP arg { - /*%%%*/ - $$ = logop(NODE_OR, $1, $3); - /*% - $$ = dispatch3(binary, $1, TOKEN2VAL(tOROP), $3); - %*/ + $$ = logop(tOROP, $1, $3); } | keyword_defined opt_nl {in_defined = 1;} arg { |