Fixed a scoping bug that caused the immutable scoping rule to be ignored
in a few edge cases. This clauses #376.
--HG--
branch : trunk
diff --git a/jinja2/compiler.py b/jinja2/compiler.py
index 117bd8c..0d608a3 100644
--- a/jinja2/compiler.py
+++ b/jinja2/compiler.py
@@ -293,8 +293,7 @@
self.visit(node.test)
real_identifiers = self.identifiers
- old_names = real_identifiers.declared | \
- real_identifiers.declared_locally | \
+ old_names = real_identifiers.declared_locally | \
real_identifiers.declared_parameter
def inner_visit(nodes):
@@ -315,7 +314,8 @@
# the differences between the two branches are also pulled as
# undeclared variables
- real_identifiers.undeclared.update(body.symmetric_difference(else_))
+ real_identifiers.undeclared.update(body.symmetric_difference(else_) -
+ real_identifiers.declared)
# remember those that are declared.
real_identifiers.declared_locally.update(body | else_)