Correct bad scoping for for loops. This fixes #640
diff --git a/CHANGES b/CHANGES
index ca2650c..2243be9 100644
--- a/CHANGES
+++ b/CHANGES
@@ -3,6 +3,13 @@
Version 2.9.1
-------------
+(bugfix release, release date undecided)
+
+- Fixed a regression that caused for loops to not be able to use the same
+ variable for the target as well as source iterator. (#640)
+
+Version 2.9.1
+-------------
(bugfix release, released on January 7th 2017)
- Resolved a regression with call block scoping for macros. Nested caller
diff --git a/jinja2/compiler.py b/jinja2/compiler.py
index a9042a5..4f84a32 100644
--- a/jinja2/compiler.py
+++ b/jinja2/compiler.py
@@ -1034,7 +1034,7 @@
else:
if self.environment.is_async:
self.write('auto_aiter(')
- self.visit(node.iter, loop_frame)
+ self.visit(node.iter, frame)
if self.environment.is_async:
self.write(')')
self.write(' if (')
@@ -1046,7 +1046,7 @@
else:
if self.environment.is_async and not extended_loop:
self.write('auto_aiter(')
- self.visit(node.iter, loop_frame)
+ self.visit(node.iter, frame)
if self.environment.is_async and not extended_loop:
self.write(')')
diff --git a/tests/test_regression.py b/tests/test_regression.py
index d185cd9..3230bfd 100644
--- a/tests/test_regression.py
+++ b/tests/test_regression.py
@@ -412,3 +412,13 @@
assert t.module.link_detail('circle', 'Index', '/') == (
'<p><span class="fa fa-fw fa-circle">'
'</span><a href="/">Index</a></p>')
+
+ def test_variable_reuse(self, env):
+ t = env.from_string('{% for x in x.y %}{{ x }}{% endfor %}')
+ assert t.render(x={'y': [0, 1, 2]}) == '012'
+
+ t = env.from_string('{% for x in x.y %}{{ loop.index0 }}|{{ x }}{% endfor %}')
+ assert t.render(x={'y': [0, 1, 2]}) == '0|01|12|2'
+
+ t = env.from_string('{% for x in x.y recursive %}{{ x }}{% endfor %}')
+ assert t.render(x={'y': [0, 1, 2]}) == '012'