Commit 5f8e0e70 authored by Robert Bradshaw's avatar Robert Bradshaw

Constant array slice size check.

parent b7a712bd
......@@ -4819,7 +4819,23 @@ class SingleAssignmentNode(AssignmentNode):
step_node = None #self.rhs.step
if step_node:
step_node = step_node.coerce_to(PyrexTypes.c_py_ssize_t_type, env)
# TODO: check (stop - start) / slice
# TODO: Factor out SliceIndexNode.generate_slice_guard_code() for use here.
def get_const(node, none_value):
if node is None:
return none_value
elif node.has_constant_result:
node.calculate_constant_result()
return node.constant_result
else:
raise ValueError, "Not a constant."
try:
slice_size = (get_const(stop_node, None) - get_const(start_node, 0)) / get_const(step_node, 1)
if target_size != slice_size:
error(self.pos, "Assignment to/from slice of wrong length, expected %d, got %d" % (
slice_size, target_size))
except ValueError:
error(self.pos, "C array assignment currently requires known endpoints")
return
check_node = None
else:
return
......
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