Commit 9607b544 authored by Robert Bradshaw's avatar Robert Bradshaw

Fix bug for python targets in for...from loops, allow non-integer numeric arguments.

parent 39048dc5
......@@ -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"
}
......
......@@ -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
......
version = '0.9.6.10'
version = '0.9.6.10.1'
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment