When re-writing a factor containing a unary negation of a literal, only
authorFred Drake <fdrake@acm.org>
Thu, 30 Aug 2001 18:53:25 +0000 (18:53 +0000)
committerFred Drake <fdrake@acm.org>
Thu, 30 Aug 2001 18:53:25 +0000 (18:53 +0000)
affect nodes without another operator.  This was causing negated
exponentiations to drop the exponentiation.  This closes SF bug #456756.

Python/compile.c

index 1921220325b79863c260c94832e77bbd58eb3686..171fceb46ea43c330cf5270ad54e8fda3b072e54 100644 (file)
@@ -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);