diff -r 4d4277941a45 Python/compile.c --- a/Python/compile.c Fri Apr 12 23:30:59 2013 +0300 +++ b/Python/compile.c Sat Apr 13 13:09:53 2013 -0400 @@ -3212,6 +3212,24 @@ return 1; else if (o == Py_False) return 0; + return -1; + } + case BoolOp_kind: { + int i, k, n = asdl_seq_LEN(e->v.BoolOp.values); + assert(n > 0); + int ret = expr_constant( + c, (expr_ty) asdl_seq_GET(e->v.BoolOp.values, 0)); + for (i = 1; ret != -1 && i < n; i++) { + expr_ty opnd = (expr_ty) asdl_seq_GET(e->v.BoolOp.values, i); + k = expr_constant(c, opnd); + if (k == -1) + ret = -1; + else if (e->v.BoolOp.op == And) + ret = ret && k; + else + ret = ret || k; + } + return ret; } default: return -1;