Commit d3e1ddfc authored by Robert Bradshaw's avatar Robert Bradshaw

Accept new for-from syntax.

parent 2eb59542
...@@ -1080,9 +1080,13 @@ def p_for_bounds(s): ...@@ -1080,9 +1080,13 @@ def p_for_bounds(s):
s.next() s.next()
iterator = p_for_iterator(s) iterator = p_for_iterator(s)
return { 'target': target, 'iterator': iterator } return { 'target': target, 'iterator': iterator }
elif s.sy == 'from': else:
if s.sy == 'from':
s.next() s.next()
bound1 = p_bit_expr(s) bound1 = p_bit_expr(s)
else:
# Support shorter "for a <= x < b" syntax
bound1, target = target, None
rel1 = p_for_from_relation(s) rel1 = p_for_from_relation(s)
name2_pos = s.position() name2_pos = s.position()
name2 = p_ident(s) name2 = p_ident(s)
...@@ -1090,6 +1094,9 @@ def p_for_bounds(s): ...@@ -1090,6 +1094,9 @@ def p_for_bounds(s):
rel2 = p_for_from_relation(s) rel2 = p_for_from_relation(s)
bound2 = p_bit_expr(s) bound2 = p_bit_expr(s)
step = p_for_from_step(s) step = p_for_from_step(s)
if target is None:
target = ExprNodes.NameNode(name2_pos, name = name2)
else:
if not target.is_name: if not target.is_name:
error(target.pos, error(target.pos,
"Target of for-from statement must be a variable name") "Target of for-from statement must be a variable name")
...@@ -1105,8 +1112,6 @@ def p_for_bounds(s): ...@@ -1105,8 +1112,6 @@ def p_for_bounds(s):
'relation2': rel2, 'relation2': rel2,
'bound2': bound2, 'bound2': bound2,
'step': step } 'step': step }
else:
s.error("Expected 'in' or 'from'")
def p_for_from_relation(s): def p_for_from_relation(s):
if s.sy in inequality_relations: if s.sy in inequality_relations:
......
...@@ -5,3 +5,8 @@ cdef void spam(): ...@@ -5,3 +5,8 @@ cdef void spam():
else: else:
k = j k = j
# new syntax
for 0 <= i < 10:
j = i
else:
j = k
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