summaryrefslogtreecommitdiff
path: root/parse.y
diff options
context:
space:
mode:
Diffstat (limited to 'parse.y')
-rw-r--r--parse.y8
1 files changed, 8 insertions, 0 deletions
diff --git a/parse.y b/parse.y
index 3c4a8fc3a3..47c610a7ed 100644
--- a/parse.y
+++ b/parse.y
@@ -3649,6 +3649,14 @@ logop(type, left, right)
{
value_expr(left);
+ switch (nd_type(left)) {
+ case NODE_NIL: /* always false */
+ case NODE_FALSE:
+ return type == NODE_OR ? right : left;
+ case NODE_LIT: /* always true */
+ return type == NODE_AND ? right : left;
+ }
+
return node_newnode(type, cond(left), cond(right));
}