Fixed a bug that caused internal errors if names where used as iteration
variable and regular variable *after* the loop if that variable was unused
*before* the loop.  (#331)

--HG--
branch : trunk
diff --git a/tests/test_ext.py b/tests/test_ext.py
index 6c56c4a..ed2c683 100644
--- a/tests/test_ext.py
+++ b/tests/test_ext.py
@@ -135,3 +135,26 @@
     env.globals['gettext'] = lambda x: x.title()
     tmpl = env.from_string('Foo _(bar) Baz')
     assert tmpl.render() == 'Foo Bar Baz'
+
+
+class WithExtension(Extension):
+    tags = frozenset(['with'])
+
+    def parse(self, parser):
+        lineno = parser.stream.next().lineno
+        value = parser.parse_expression()
+        parser.stream.expect('name:as')
+        name = parser.stream.expect('name')
+
+        body = parser.parse_statements(['name:endwith'], drop_needle=True)
+        body.insert(0, nodes.Assign(nodes.Name(name.value, 'store'), value))
+        return nodes.Scope(body)
+
+
+def test_with_extension():
+    env = Environment(extensions=[WithExtension])
+    t = env.from_string('{{ a }}{% with 2 as a %}{{ a }}{% endwith %}{{ a }}')
+    assert t.render(a=1) == '121'
+
+    t = env.from_string('{% with 2 as a %}{{ a }}{% endwith %}{{ a }}')
+    assert t.render(a=3) == '23'