Fix type inference tests for int types.
authorRobert Bradshaw <robertwb@math.washington.edu>
Fri, 12 Feb 2010 10:11:55 +0000 (02:11 -0800)
committerRobert Bradshaw <robertwb@math.washington.edu>
Fri, 12 Feb 2010 10:11:55 +0000 (02:11 -0800)
Cython/Compiler/TypeInference.py
tests/run/type_inference.pyx

index e4b2f9c20f5daabe96c64ce0ea656dc652515837..8c10bcd3dc906ff40ca7942645a315924bfacac3 100644 (file)
@@ -164,6 +164,8 @@ class MarkOverflowingArithmatic(CythonTransform):
     
     visit_UnaryMinusNode = visit_dangerous_node
     
+    visit_InPlaceAssignmentNode = visit_dangerous_node
+    
     visit_Node = visit_safe_node
 
 
index 7877f2ce20ae9a82f6ac383e2bed8bca553802ac..8ef4e2b4cb27238dd6c7c35511c2b7f6b3ee6183 100644 (file)
@@ -251,10 +251,29 @@ def safe_only():
     """
     a = 1.0
     assert typeof(a) == "double", typeof(c)
-    b = 1
-    assert typeof(b) == "Python object", typeof(b)
+    b = 1;
+    assert typeof(b) == "long", typeof(b)
     c = MyType()
     assert typeof(c) == "MyType", typeof(c)
+    for i in range(10): pass
+    assert typeof(i) == "long", typeof(i)
+    d = 1
+    res = ~d
+    assert typeof(d) == "long", typeof(d)
+
+    # potentially overflowing arithmatic
+    e = 1
+    e += 1
+    assert typeof(e) == "Python object", typeof(e)
+    f = 1
+    res = f * 10
+    assert typeof(f) == "Python object", typeof(f)
+    g = 1
+    res = 10*(~g)
+    assert typeof(g) == "Python object", typeof(g)
+    for j in range(10):
+        res = -j
+    assert typeof(j) == "Python object", typeof(j)
 
 @infer_types(None)
 def args_tuple_keywords(*args, **kwargs):