fix for negative compile time int constants
authorStefan Behnel <scoder@users.berlios.de>
Thu, 8 May 2008 06:25:47 +0000 (08:25 +0200)
committerStefan Behnel <scoder@users.berlios.de>
Thu, 8 May 2008 06:25:47 +0000 (08:25 +0200)
Cython/Compiler/ExprNodes.py
tests/run/ct_DEF.pyx

index 491d0b8b546efba5278e8c29f4cf548f31e8e858..25140ecbf9530d1109c7a4a058c4d4db4189ee14 100644 (file)
@@ -2741,7 +2741,7 @@ def unop_node(pos, operator, operand):
     # Construct unnop node of appropriate class for 
     # given operator.
     if isinstance(operand, IntNode) and operator == '-':
-        return IntNode(pos = operand.pos, value = -int(operand.value))
+        return IntNode(pos = operand.pos, value = str(-int(operand.value, 0)))
     elif isinstance(operand, UnopNode) and operand.operator == operator:
         warning(pos, "Python has no increment/decrement operator: %s%sx = %s(%sx) = x" % ((operator,)*4), 5)
     return unop_node_classes[operator](pos, 
@@ -4135,4 +4135,4 @@ static inline PyObject* __Pyx_PyObject_Append(PyObject* L, PyObject* x) {
     }
 }
 """,""
-]
\ No newline at end of file
+]
index d85cfb0668a5fb637f6717a7a1309cdd92cfffc3..b7edc4ced2a085a357a8d2660bd2df470a888f9d 100644 (file)
@@ -1,12 +1,16 @@
 __doc__ = """
     >>> c()
     120
+    >>> i0() == -1
+    True
     >>> i1() == 42
     True
     >>> i2() == 0x42
     True
     >>> i3() == 042
     True
+    >>> i4() == -0x42
+    True
     >>> l()
     666
     >>> f()
@@ -27,9 +31,11 @@ DEF TUPLE = (1, 2, "buckle my shoe")
 DEF TRUE_FALSE = (True, False)
 
 DEF CHAR = c'x'
+DEF INT0 = -1
 DEF INT1 = 42
 DEF INT2 = 0x42
 DEF INT3 = 042
+DEF INT4 = -0x42
 DEF LONG = 666L
 DEF FLOAT = 12.5
 DEF STR = "spam"
@@ -43,6 +49,11 @@ def c():
     c = CHAR
     return c
 
+def i0():
+    cdef int i
+    i = INT0
+    return i
+
 def i1():
     cdef int i
     i = INT1
@@ -58,6 +69,11 @@ def i3():
     i = INT3
     return i
 
+def i4():
+    cdef int i
+    i = INT4
+    return i
+
 def l():
     cdef long l
     l = LONG