Index: transformer.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/compiler/transformer.py,v retrieving revision 1.36 diff -c -r1.36 transformer.py *** transformer.py 3 Jan 2003 10:25:20 -0000 1.36 --- transformer.py 3 Jan 2003 10:29:15 -0000 *************** *** 647,655 **** --- 647,709 ---- node.lineno = nodelist[1][2] return node + def maybe_unary_lit(self, nodelist): + import re + t = nodelist[0][0] + if t not in [token.PLUS, token.MINUS, token.TILDE]: + return None + if len(nodelist) <> 2: + # print "2" + return None + pfactor = nodelist[1] + if pfactor[0] <> symbol.factor or len(pfactor[1]) <> 2: + # print "3", pfactor + return None + ppower = pfactor[1] + if ppower[0] <> symbol.power or len(ppower[1]) <> 2: + # print "4", ppower + return None + patom = ppower[1] + if patom[0] <> symbol.atom: + # print "5", patom + return None + pnum = patom[1] + if pnum[0] <> token.NUMBER: + # print "6", pnum + return None + lnum = pnum[1] + prog = re.compile( + "(((0+\.0*|\.0+)([eE][-+]?\d*)?)|(0+[eE][-+]?\d*))$") + # print "6.5", lnum, prog.match(lnum) + if t == token.MINUS and prog.match(lnum): + # print "7", pnum + return None + num = eval(lnum) + if t == token.MINUS: + num = -num + # sys.maxint+1 is a long, but a literal -(sys.maxint+1) + # should be an int (sheesh, this is a crock). + if ( num == -sys.maxint-1 and not num.endswith('L') + and not num.endswith('l') ): + num = int(num) + elif t == token.TILDE: + try: + num = ~num + except: + # print "8" + return None + node = Const(num) + node.lineno = nodelist[0][2] + return node + def factor(self, nodelist): elt = nodelist[0] t = elt[0] + + c = self.maybe_unary_lit(nodelist) + if c: + return c + node = self.com_node(nodelist[-1]) # need to handle (unary op)constant here... if t == token.PLUS: