From: Fred Drake Date: Thu, 30 Aug 2001 18:53:25 +0000 (+0000) Subject: When re-writing a factor containing a unary negation of a literal, only X-Git-Tag: v2.2a3~199 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=14ef244dfe8b79694d4baa48ceda874fe27ec05d;p=thirdparty%2FPython%2Fcpython.git When re-writing a factor containing a unary negation of a literal, only affect nodes without another operator. This was causing negated exponentiations to drop the exponentiation. This closes SF bug #456756. --- diff --git a/Python/compile.c b/Python/compile.c index 1921220325b7..171fceb46ea4 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -1891,8 +1891,11 @@ com_factor(struct compiling *c, node *n) negative in the 0th position. */ if ((childtype == PLUS || childtype == MINUS || childtype == TILDE) + && NCH(n) == 2 && TYPE(CHILD(n, 1)) == factor + && NCH(CHILD(n, 1)) == 1 && TYPE(CHILD(CHILD(n, 1), 0)) == power + && NCH(CHILD(CHILD(n, 1), 0)) == 1 && TYPE(CHILD(CHILD(CHILD(n, 1), 0), 0)) == atom && TYPE(CHILD(CHILD(CHILD(CHILD(n, 1), 0), 0), 0)) == NUMBER) { node *constant = CHILD(CHILD(CHILD(n, 1), 0), 0);