diff --git a/ASTree.cpp b/ASTree.cpp index 8776265..d76fd49 100644 --- a/ASTree.cpp +++ b/ASTree.cpp @@ -2504,8 +2504,18 @@ static int cmp_prec(PycRef parent, PycRef child) return 1; // Always parenthesize not(x) if (child.type() == ASTNode::NODE_BINARY) { PycRef binChild = child.cast(); - if (parent.type() == ASTNode::NODE_BINARY) - return binChild->op() - parent.cast()->op(); + if (parent.type() == ASTNode::NODE_BINARY) { + PycRef binParent = parent.cast(); + if (binParent->right() == child) { + if (binParent->op() == ASTBinary::BIN_SUBTRACT && + binChild->op() == ASTBinary::BIN_ADD) + return 1; + else if (binParent->op() == ASTBinary::BIN_DIVIDE && + binChild->op() == ASTBinary::BIN_MULTIPLY) + return 1; + } + return binChild->op() - binParent->op(); + } else if (parent.type() == ASTNode::NODE_COMPARE) return (binChild->op() == ASTBinary::BIN_LOG_AND || binChild->op() == ASTBinary::BIN_LOG_OR) ? 1 : -1;