Fix bug for python targets in for...from loops, allow non-integer numeric arguments.
authorRobert Bradshaw <robertwb@math.washington.edu>
Mon, 31 Dec 2007 19:13:26 +0000 (11:13 -0800)
committerRobert Bradshaw <robertwb@math.washington.edu>
Mon, 31 Dec 2007 19:13:26 +0000 (11:13 -0800)
Cython/Compiler/ExprNodes.py
Cython/Compiler/Nodes.py
Cython/Compiler/Version.py

index 53629b9df939dbddaec20f621d1a9c00faa5c354..c64d5577b8765cd096a52a164950f14589a9a439 100644 (file)
@@ -2599,7 +2599,7 @@ class TypecastNode(ExprNode):
             error(self.pos, "Casting temporary Python object to non-Python type")
         if to_py and not from_py:
             self.result_ctype = py_object_type
-            self.is_temp = 1                   
+            self.is_temp = 1
     
     def check_const(self):
         self.operand.check_const()
@@ -2846,7 +2846,7 @@ class NumBinopNode(BinopNode):
         "/":           "PyNumber_Divide",
         "//":          "PyNumber_FloorDivide",
         "%":           "PyNumber_Remainder",
-        "**":   "PyNumber_Power"
+        "**":       "PyNumber_Power"
     }
 
 
index cff1b93c4c2031c36c633c0f88871cb9b8a2fcf6..7f9807cb5f45ba72055c6f82a5c39ada57981a5f 100644 (file)
@@ -2532,8 +2532,12 @@ class ForFromStatNode(StatNode):
         self.target.analyse_target_types(env)
         self.bound1.analyse_types(env)
         self.bound2.analyse_types(env)
-        self.bound1 = self.bound1.coerce_to(self.target.type, env)
-        self.bound2 = self.bound2.coerce_to(self.target.type, env)
+        if self.target.type.is_numeric:
+            self.bound1 = self.bound1.coerce_to(self.target.type, env)
+            self.bound2 = self.bound2.coerce_to(self.target.type, env)
+        else:
+            self.bound1 = self.bound1.coerce_to_integer(env)
+            self.bound2 = self.bound2.coerce_to_integer(env)
         if self.step is not None:
             if isinstance(self.step, ExprNodes.UnaryMinusNode):
                 warning(self.step.pos, "Probable infinite loop in for-from-by statment. Consider switching the directions of the relations.", 2)
@@ -2542,14 +2546,14 @@ class ForFromStatNode(StatNode):
         if not (self.bound2.is_name or self.bound2.is_literal):
             self.bound2 = self.bound2.coerce_to_temp(env)
         target_type = self.target.type
-        if not (target_type.is_pyobject or target_type.is_int):
+        if not (target_type.is_pyobject or target_type.is_numeric):
             error(self.target.pos,
                 "Integer for-loop variable must be of type int or Python object")
         #if not (target_type.is_pyobject
         #      or target_type.assignable_from(PyrexTypes.c_int_type)):
         #              error(self.target.pos,
         #                      "Cannot assign integer to variable of type '%s'" % target_type)
-        if target_type.is_int:
+        if target_type.is_numeric:
             self.is_py_target = 0
             self.loopvar_name = self.target.entry.cname
             self.py_loopvar_node = None
index 5ae5a4970afdbafa5a0d23528836b9b72c57c353..b71c2779baf2ec607230ed1627110c2340125c8d 100644 (file)
@@ -1 +1 @@
-version = '0.9.6.10'
+version = '0.9.6.10.1'