diff --git a/parse.y b/parse.y index 3ae456ca4c..b1b96ce01a 100644 --- a/parse.y +++ b/parse.y @@ -1743,10 +1743,26 @@ expr : command_call { $$ = logop(p, idAND, $1, $3, &@2, &@$); } + | expr keyword_and mlhs '=' lex_ctxt mrhs_arg + { + $$ = logop(p, idAND, $1, node_assign(p, $3, $6, $5, &@3), &@2, &@$); + } + | expr keyword_and mlhs '=' lex_ctxt command_call + { + $$ = logop(p, idAND, $1, node_assign(p, $3, $6, $5, &@3), &@2, &@$); + } | expr keyword_or expr { $$ = logop(p, idOR, $1, $3, &@2, &@$); } + | expr keyword_or mlhs '=' lex_ctxt mrhs_arg + { + $$ = logop(p, idOR, $1, node_assign(p, $3, $6, $5, &@3), &@2, &@$); + } + | expr keyword_or mlhs '=' lex_ctxt command_call + { + $$ = logop(p, idOR, $1, node_assign(p, $3, $6, $5, &@3), &@2, &@$); + } | keyword_not opt_nl expr { $$ = call_uni_op(p, method_cond(p, $3, &@3), METHOD_NOT, &@1, &@$);